[{"data":1,"prerenderedAt":173106},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-bi-jiao-yan-ma":3,"wiki-doc-nav":149},{"id":4,"title":5,"body":6,"description":141,"extension":142,"meta":143,"navigation":144,"path":145,"seo":146,"stem":147,"__hash__":148},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":8,"toc":139},"minimark",[9,13,17,135],[10,11,5],"h1",{"id":12},"_15比较掩码",[14,15,16],"p",{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-python shiki shiki-themes github-light github-dark","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","python","",[25,26,27,92,107,123,129],"code",{"__ignoreMap":23},[28,29,32,36,40,43,47,50,53,55,58,61,64,66,69,71,74,76,79,81,84,86,89],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sVt8B","a",[28,37,39],{"class":38},"szBVR","=",[28,41,42],{"class":34},"np.array([[",[28,44,46],{"class":45},"sj4cs","1",[28,48,49],{"class":34},",",[28,51,52],{"class":45},"2",[28,54,49],{"class":34},[28,56,57],{"class":45},"3",[28,59,60],{"class":34},"],[",[28,62,63],{"class":45},"11",[28,65,49],{"class":34},[28,67,68],{"class":45},"12",[28,70,49],{"class":34},[28,72,73],{"class":45},"13",[28,75,60],{"class":34},[28,77,78],{"class":45},"21",[28,80,49],{"class":34},[28,82,83],{"class":45},"22",[28,85,49],{"class":34},[28,87,88],{"class":45},"23",[28,90,91],{"class":34},"]])\n",[28,93,95,97,100,103],{"class":30,"line":94},2,[28,96,35],{"class":34},[28,98,99],{"class":38},"\u003C",[28,101,102],{"class":45},"20",[28,104,106],{"class":105},"sJ8bj","#结果是一个由True,False组成的数组\n",[28,108,110,113,115,117,120],{"class":30,"line":109},3,[28,111,112],{"class":34},"a[a",[28,114,99],{"class":38},[28,116,102],{"class":45},[28,118,119],{"class":34},"]",[28,121,122],{"class":105},"#小于20的元素会存到这个数组中\n",[28,124,126],{"class":30,"line":125},4,[28,127,128],{"class":105},"#结果：\n",[28,130,132],{"class":30,"line":131},5,[28,133,134],{"class":105},"#array([ 1,  2,  3, 11, 12, 13])\n",[136,137,138],"style",{},"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":23,"searchDepth":94,"depth":94,"links":140},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":5,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",[150,5239,6347,7767,10756,12107,13596,14685,23448,23460,24059,24085,24209,24450,24515,24533,24546,24593,24717,24886,25085,25265,25470,25606,25701,25738,25751,26061,26802,27510,27531,28551,30182,30333,30346,30358,30657,50468,50483,50500,50533,53405,76753,92898,92919,93032,93153,93922,94585,94946,94984,95075,95175,95218,95244,95305,96959,97060,97085,97576,98076,99156,99439,100181,100683,100695,102711,104375,105878,107576,109493,111412,113434,116904,117336,117799,118548,121492,121840,121862,122218,125525,125537,125940,125963,126110,126277,126482,126783,127340,127997,129928,131526,132175,133669,135100,136335,138029,139781,142191,142307,143242,143453,144338,145573,145801,145814,146969,149381,151749,155070,157547,159191,160968,162981,166033,168213,170740,172934],{"id":151,"title":152,"body":153,"description":23,"extension":142,"meta":5234,"navigation":144,"path":5235,"seo":5236,"stem":5237,"__hash__":5238},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":154,"toc":5206},[155,158,163,166,170,183,187,192,195,198,201,204,207,235,239,242,245,248,251,299,303,322,324,338,341,349,352,1203,1210,1227,1231,1319,1323,1329,1418,1422,1460,1464,1528,1532,1536,1543,1554,1558,1563,1567,1572,1576,1581,1585,1589,1594,1864,1869,2007,2012,2269,2272,2280,2284,2289,2392,2395,2701,2710,2811,2814,2817,2820,2823,3083,3088,3228,3231,3410,3413,3541,3544,3696,3700,3705,3708,3719,3727,3730,3837,3841,3845,3850,3900,3905,3910,3934,3939,3992,3995,4000,4177,4182,4467,4472,4869,4873,4878,4935,4940,4948,4951,5091,5094,5203],[10,156,152],{"id":157},"_1基础入门",[159,160,162],"h2",{"id":161},"_11注释","1.1注释",[14,164,165],{},"\u002F\u002F或者\u002F* *\u002F",[159,167,169],{"id":168},"_12命名","1.2命名",[171,172,173,177,180],"ol",{},[174,175,176],"li",{},"字母数字下划线",[174,178,179],{},"开头必须是字母或_",[174,181,182],{},"不能使用关键词",[159,184,186],{"id":185},"_13数据类型","1.3数据类型",[188,189,191],"h3",{"id":190},"_131整形","1.3.1整形",[14,193,194],{},"short 短整形 2",[14,196,197],{},"int 整形 4",[14,199,200],{},"long 长整形 win4 linux32位4 linux64位8",[14,202,203],{},"long long 长长整形 8",[14,205,206],{},"利用sizeof可以求数据类型占用的内存空间大小",[18,208,212],{"className":209,"code":210,"language":211,"meta":23,"style":23},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[25,213,214,228],{"__ignoreMap":23},[28,215,216,219,222,225],{"class":30,"line":31},[28,217,218],{"class":38},"sizeof",[28,220,221],{"class":34},"(",[28,223,224],{"class":38},"int",[28,226,227],{"class":34},")\n",[28,229,230,232],{"class":30,"line":94},[28,231,218],{"class":38},[28,233,234],{"class":34},"(num)\n",[188,236,238],{"id":237},"_132浮点型","1.3.2浮点型",[14,240,241],{},"float 单精度 4节 7位有效数字",[14,243,244],{},"double 双精度 8节 15-16有效数字",[14,246,247],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,249,250],{},"注意点：",[18,252,254],{"className":209,"code":253,"language":211,"meta":23,"style":23},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[25,255,256,278],{"__ignoreMap":23},[28,257,258,261,264,266,269,272,275],{"class":30,"line":31},[28,259,260],{"class":38},"float",[28,262,263],{"class":34}," f1",[28,265,39],{"class":38},[28,267,268],{"class":45},"3.14",[28,270,271],{"class":38},"f",[28,273,274],{"class":34},";",[28,276,277],{"class":105}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[28,279,280,282,285,287,289,292,294,296],{"class":30,"line":94},[28,281,260],{"class":38},[28,283,284],{"class":34}," f2",[28,286,39],{"class":38},[28,288,57],{"class":45},[28,290,291],{"class":38},"e",[28,293,52],{"class":45},[28,295,274],{"class":34},[28,297,298],{"class":105}," \u002F\u002F科学记数法\n",[188,300,302],{"id":301},"_133字符型","1.3.3字符型",[18,304,306],{"className":209,"code":305,"language":211,"meta":23,"style":23},"char ch='a'\n",[25,307,308],{"__ignoreMap":23},[28,309,310,313,316,318],{"class":30,"line":31},[28,311,312],{"class":38},"char",[28,314,315],{"class":34}," ch",[28,317,39],{"class":38},[28,319,321],{"class":320},"sZZnC","'a'\n",[14,323,250],{},[171,325,326,329,332,335],{},[174,327,328],{},"在显示字符型变量时，只能单引号，双引号x",[174,330,331],{},"单引号内只能一个字符，不能字符串",[174,333,334],{},"c和c++字符型变量只占用一个字符",[174,336,337],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,339,340],{},"ASCII码大致由以下两部分组成：",[171,342,343,346],{},[174,344,345],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[174,347,348],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,350,351],{},"ASCII码表格：",[353,354,355,399],"table",{},[356,357,358],"thead",{},[359,360,361,369,374,378,383,387,391,395],"tr",{},[362,363,364,368],"th",{},[365,366,367],"strong",{},"ASCII","值",[362,370,371],{},[365,372,373],{},"控制字符",[362,375,376,368],{},[365,377,367],{},[362,379,380],{},[365,381,382],{},"字符",[362,384,385,368],{},[365,386,367],{},[362,388,389],{},[365,390,382],{},[362,392,393,368],{},[365,394,367],{},[362,396,397],{},[365,398,382],{},[400,401,402,429,453,478,503,529,554,579,604,629,655,681,706,730,755,781,807,831,856,881,906,930,954,978,1002,1027,1052,1078,1103,1127,1151,1177],"tbody",{},[359,403,404,408,411,414,417,420,423,426],{},[405,406,407],"td",{},"0",[405,409,410],{},"NUT",[405,412,413],{},"32",[405,415,416],{},"(space)",[405,418,419],{},"64",[405,421,422],{},"@",[405,424,425],{},"96",[405,427,428],{},"、",[359,430,431,433,436,439,442,445,448,451],{},[405,432,46],{},[405,434,435],{},"SOH",[405,437,438],{},"33",[405,440,441],{},"!",[405,443,444],{},"65",[405,446,447],{},"A",[405,449,450],{},"97",[405,452,35],{},[359,454,455,457,460,463,466,469,472,475],{},[405,456,52],{},[405,458,459],{},"STX",[405,461,462],{},"34",[405,464,465],{},"\"",[405,467,468],{},"66",[405,470,471],{},"B",[405,473,474],{},"98",[405,476,477],{},"b",[359,479,480,482,485,488,491,494,497,500],{},[405,481,57],{},[405,483,484],{},"ETX",[405,486,487],{},"35",[405,489,490],{},"#",[405,492,493],{},"67",[405,495,496],{},"C",[405,498,499],{},"99",[405,501,502],{},"c",[359,504,505,508,511,514,517,520,523,526],{},[405,506,507],{},"4",[405,509,510],{},"EOT",[405,512,513],{},"36",[405,515,516],{},"$",[405,518,519],{},"68",[405,521,522],{},"D",[405,524,525],{},"100",[405,527,528],{},"d",[359,530,531,534,537,540,543,546,549,552],{},[405,532,533],{},"5",[405,535,536],{},"ENQ",[405,538,539],{},"37",[405,541,542],{},"%",[405,544,545],{},"69",[405,547,548],{},"E",[405,550,551],{},"101",[405,553,291],{},[359,555,556,559,562,565,568,571,574,577],{},[405,557,558],{},"6",[405,560,561],{},"ACK",[405,563,564],{},"38",[405,566,567],{},"&",[405,569,570],{},"70",[405,572,573],{},"F",[405,575,576],{},"102",[405,578,271],{},[359,580,581,584,587,590,592,595,598,601],{},[405,582,583],{},"7",[405,585,586],{},"BEL",[405,588,589],{},"39",[405,591,49],{},[405,593,594],{},"71",[405,596,597],{},"G",[405,599,600],{},"103",[405,602,603],{},"g",[359,605,606,609,612,615,617,620,623,626],{},[405,607,608],{},"8",[405,610,611],{},"BS",[405,613,614],{},"40",[405,616,221],{},[405,618,619],{},"72",[405,621,622],{},"H",[405,624,625],{},"104",[405,627,628],{},"h",[359,630,631,634,637,640,643,646,649,652],{},[405,632,633],{},"9",[405,635,636],{},"HT",[405,638,639],{},"41",[405,641,642],{},")",[405,644,645],{},"73",[405,647,648],{},"I",[405,650,651],{},"105",[405,653,654],{},"i",[359,656,657,660,663,666,669,672,675,678],{},[405,658,659],{},"10",[405,661,662],{},"LF",[405,664,665],{},"42",[405,667,668],{},"*",[405,670,671],{},"74",[405,673,674],{},"J",[405,676,677],{},"106",[405,679,680],{},"j",[359,682,683,685,688,691,694,697,700,703],{},[405,684,63],{},[405,686,687],{},"VT",[405,689,690],{},"43",[405,692,693],{},"+",[405,695,696],{},"75",[405,698,699],{},"K",[405,701,702],{},"107",[405,704,705],{},"k",[359,707,708,710,713,716,718,721,724,727],{},[405,709,68],{},[405,711,712],{},"FF",[405,714,715],{},"44",[405,717,49],{},[405,719,720],{},"76",[405,722,723],{},"L",[405,725,726],{},"108",[405,728,729],{},"l",[359,731,732,734,737,740,743,746,749,752],{},[405,733,73],{},[405,735,736],{},"CR",[405,738,739],{},"45",[405,741,742],{},"-",[405,744,745],{},"77",[405,747,748],{},"M",[405,750,751],{},"109",[405,753,754],{},"m",[359,756,757,760,763,766,769,772,775,778],{},[405,758,759],{},"14",[405,761,762],{},"SO",[405,764,765],{},"46",[405,767,768],{},".",[405,770,771],{},"78",[405,773,774],{},"N",[405,776,777],{},"110",[405,779,780],{},"n",[359,782,783,786,789,792,795,798,801,804],{},[405,784,785],{},"15",[405,787,788],{},"SI",[405,790,791],{},"47",[405,793,794],{},"\u002F",[405,796,797],{},"79",[405,799,800],{},"O",[405,802,803],{},"111",[405,805,806],{},"o",[359,808,809,812,815,818,820,823,826,829],{},[405,810,811],{},"16",[405,813,814],{},"DLE",[405,816,817],{},"48",[405,819,407],{},[405,821,822],{},"80",[405,824,825],{},"P",[405,827,828],{},"112",[405,830,14],{},[359,832,833,836,839,842,844,847,850,853],{},[405,834,835],{},"17",[405,837,838],{},"DCI",[405,840,841],{},"49",[405,843,46],{},[405,845,846],{},"81",[405,848,849],{},"Q",[405,851,852],{},"113",[405,854,855],{},"q",[359,857,858,861,864,867,869,872,875,878],{},[405,859,860],{},"18",[405,862,863],{},"DC2",[405,865,866],{},"50",[405,868,52],{},[405,870,871],{},"82",[405,873,874],{},"R",[405,876,877],{},"114",[405,879,880],{},"r",[359,882,883,886,889,892,894,897,900,903],{},[405,884,885],{},"19",[405,887,888],{},"DC3",[405,890,891],{},"51",[405,893,57],{},[405,895,896],{},"83",[405,898,899],{},"S",[405,901,902],{},"115",[405,904,905],{},"s",[359,907,908,910,913,916,918,921,924,927],{},[405,909,102],{},[405,911,912],{},"DC4",[405,914,915],{},"52",[405,917,507],{},[405,919,920],{},"84",[405,922,923],{},"T",[405,925,926],{},"116",[405,928,929],{},"t",[359,931,932,934,937,940,942,945,948,951],{},[405,933,78],{},[405,935,936],{},"NAK",[405,938,939],{},"53",[405,941,533],{},[405,943,944],{},"85",[405,946,947],{},"U",[405,949,950],{},"117",[405,952,953],{},"u",[359,955,956,958,961,964,966,969,972,975],{},[405,957,83],{},[405,959,960],{},"SYN",[405,962,963],{},"54",[405,965,558],{},[405,967,968],{},"86",[405,970,971],{},"V",[405,973,974],{},"118",[405,976,977],{},"v",[359,979,980,982,985,988,990,993,996,999],{},[405,981,88],{},[405,983,984],{},"TB",[405,986,987],{},"55",[405,989,583],{},[405,991,992],{},"87",[405,994,995],{},"W",[405,997,998],{},"119",[405,1000,1001],{},"w",[359,1003,1004,1007,1010,1013,1015,1018,1021,1024],{},[405,1005,1006],{},"24",[405,1008,1009],{},"CAN",[405,1011,1012],{},"56",[405,1014,608],{},[405,1016,1017],{},"88",[405,1019,1020],{},"X",[405,1022,1023],{},"120",[405,1025,1026],{},"x",[359,1028,1029,1032,1035,1038,1040,1043,1046,1049],{},[405,1030,1031],{},"25",[405,1033,1034],{},"EM",[405,1036,1037],{},"57",[405,1039,633],{},[405,1041,1042],{},"89",[405,1044,1045],{},"Y",[405,1047,1048],{},"121",[405,1050,1051],{},"y",[359,1053,1054,1057,1060,1063,1066,1069,1072,1075],{},[405,1055,1056],{},"26",[405,1058,1059],{},"SUB",[405,1061,1062],{},"58",[405,1064,1065],{},":",[405,1067,1068],{},"90",[405,1070,1071],{},"Z",[405,1073,1074],{},"122",[405,1076,1077],{},"z",[359,1079,1080,1083,1086,1089,1091,1094,1097,1100],{},[405,1081,1082],{},"27",[405,1084,1085],{},"ESC",[405,1087,1088],{},"59",[405,1090,274],{},[405,1092,1093],{},"91",[405,1095,1096],{},"[",[405,1098,1099],{},"123",[405,1101,1102],{},"{",[359,1104,1105,1108,1111,1114,1116,1119,1121,1124],{},[405,1106,1107],{},"28",[405,1109,1110],{},"FS",[405,1112,1113],{},"60",[405,1115,99],{},[405,1117,1118],{},"92",[405,1120,794],{},[405,1122,1123],{},"124",[405,1125,1126],{},"|",[359,1128,1129,1132,1135,1138,1140,1143,1145,1148],{},[405,1130,1131],{},"29",[405,1133,1134],{},"GS",[405,1136,1137],{},"61",[405,1139,39],{},[405,1141,1142],{},"93",[405,1144,119],{},[405,1146,1147],{},"125",[405,1149,1150],{},"}",[359,1152,1153,1156,1159,1162,1165,1168,1171,1174],{},[405,1154,1155],{},"30",[405,1157,1158],{},"RS",[405,1160,1161],{},"62",[405,1163,1164],{},">",[405,1166,1167],{},"94",[405,1169,1170],{},"^",[405,1172,1173],{},"126",[405,1175,1176],{},"`",[359,1178,1179,1182,1185,1188,1191,1194,1197,1200],{},[405,1180,1181],{},"31",[405,1183,1184],{},"US",[405,1186,1187],{},"63",[405,1189,1190],{},"?",[405,1192,1193],{},"95",[405,1195,1196],{},"_",[405,1198,1199],{},"127",[405,1201,1202],{},"DEL",[14,1204,1205,1206,1209],{},"ASCII 码大致由以下",[365,1207,1208],{},"两部分组","成：",[1211,1212,1213,1220],"ul",{},[174,1214,1215,1216,1219],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[365,1217,1218],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[174,1221,1222,1223,1226],{},"ASCII 打印字符：数字 ",[365,1224,1225],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[188,1228,1230],{"id":1229},"_134转义字符","1.3.4转义字符",[18,1232,1234],{"className":209,"code":1233,"language":211,"meta":23,"style":23},"\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",[25,1235,1236,1241,1257,1271,1276,1289,1295],{"__ignoreMap":23},[28,1237,1238],{"class":30,"line":31},[28,1239,1240],{"class":105},"\u002F\u002F换行符\n",[28,1242,1243,1246,1249,1252,1254],{"class":30,"line":94},[28,1244,1245],{"class":34},"cout ",[28,1247,1248],{"class":38},"\u003C\u003C",[28,1250,1251],{"class":320},"\"hello world\u002Fn\"",[28,1253,274],{"class":34},[28,1255,1256],{"class":105}," \u002F\u002F就等同于如下：\n",[28,1258,1259,1261,1263,1266,1268],{"class":30,"line":109},[28,1260,1245],{"class":34},[28,1262,1248],{"class":38},[28,1264,1265],{"class":320},"\"hello world\"",[28,1267,1248],{"class":38},[28,1269,1270],{"class":34},"endl;\n",[28,1272,1273],{"class":30,"line":125},[28,1274,1275],{"class":105},"\u002F\u002F反斜杠\n",[28,1277,1278,1280,1282,1285,1287],{"class":30,"line":131},[28,1279,1245],{"class":34},[28,1281,1248],{"class":38},[28,1283,1284],{"class":320},"\"\u002F\u002F\"",[28,1286,1248],{"class":38},[28,1288,1270],{"class":34},[28,1290,1292],{"class":30,"line":1291},6,[28,1293,1294],{"class":105},"\u002F\u002F水平制表符\n",[28,1296,1298,1300,1302,1305,1308,1311,1313,1316],{"class":30,"line":1297},7,[28,1299,1245],{"class":34},[28,1301,1248],{"class":38},[28,1303,1304],{"class":320},"\"aaaa",[28,1306,1307],{"class":45},"\\t",[28,1309,1310],{"class":320},"helloworld\"",[28,1312,1248],{"class":38},[28,1314,1315],{"class":34},"endl;",[28,1317,1318],{"class":105}," \u002F\u002F输出窗口时有对齐效果\n",[188,1320,1322],{"id":1321},"_135字符串型","1.3.5字符串型",[14,1324,1325,1326,1328],{},"char 变量名",[28,1327],{},"=\"字符串值\"",[18,1330,1332],{"className":209,"code":1331,"language":211,"meta":23,"style":23},"\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",[25,1333,1334,1339,1344,1349,1354,1368,1381,1386,1392,1404],{"__ignoreMap":23},[28,1335,1336],{"class":30,"line":31},[28,1337,1338],{"class":105},"\u002F\u002Fc风格字符串\n",[28,1340,1341],{"class":30,"line":94},[28,1342,1343],{"class":105},"\u002F\u002F注意事项：\n",[28,1345,1346],{"class":30,"line":109},[28,1347,1348],{"class":105},"\u002F\u002F1.char字符串名[]\n",[28,1350,1351],{"class":30,"line":125},[28,1352,1353],{"class":105},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[28,1355,1356,1358,1361,1363,1365],{"class":30,"line":131},[28,1357,312],{"class":38},[28,1359,1360],{"class":34}," str[]",[28,1362,39],{"class":38},[28,1364,1265],{"class":320},[28,1366,1367],{"class":34},";\n",[28,1369,1370,1372,1374,1377,1379],{"class":30,"line":1291},[28,1371,1245],{"class":34},[28,1373,1248],{"class":38},[28,1375,1376],{"class":34},"str",[28,1378,1248],{"class":38},[28,1380,1270],{"class":34},[28,1382,1383],{"class":30,"line":1297},[28,1384,1385],{"class":105},"\u002F\u002Fc++风格字符串\n",[28,1387,1389],{"class":30,"line":1388},8,[28,1390,1391],{"class":105},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[28,1393,1395,1398,1400,1402],{"class":30,"line":1394},9,[28,1396,1397],{"class":34},"string str2",[28,1399,39],{"class":38},[28,1401,1265],{"class":320},[28,1403,1367],{"class":34},[28,1405,1407,1409,1411,1414,1416],{"class":30,"line":1406},10,[28,1408,1245],{"class":34},[28,1410,1248],{"class":38},[28,1412,1413],{"class":34},"str2",[28,1415,1248],{"class":38},[28,1417,1270],{"class":34},[188,1419,1421],{"id":1420},"_136布尔类型bool","1.3.6布尔类型bool",[18,1423,1425],{"className":209,"code":1424,"language":211,"meta":23,"style":23},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[25,1426,1427,1442],{"__ignoreMap":23},[28,1428,1429,1432,1435,1437,1440],{"class":30,"line":31},[28,1430,1431],{"class":38},"bool",[28,1433,1434],{"class":34}," flag",[28,1436,39],{"class":38},[28,1438,1439],{"class":45},"true",[28,1441,1367],{"class":34},[28,1443,1444,1447,1450,1453,1455,1457],{"class":30,"line":94},[28,1445,1446],{"class":34},"cout",[28,1448,1449],{"class":38},"\u003C\u003Csizeof",[28,1451,1452],{"class":34},"(flag)",[28,1454,1248],{"class":38},[28,1456,1315],{"class":34},[28,1458,1459],{"class":105}," \u002F\u002F查看布尔占内存空间\n",[159,1461,1463],{"id":1462},"_14键盘输入cin","1.4键盘输入cin",[18,1465,1467],{"className":209,"code":1466,"language":211,"meta":23,"style":23},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[25,1468,1469,1482,1499,1510],{"__ignoreMap":23},[28,1470,1471,1473,1476,1478,1480],{"class":30,"line":31},[28,1472,224],{"class":38},[28,1474,1475],{"class":34}," a",[28,1477,39],{"class":38},[28,1479,407],{"class":45},[28,1481,1367],{"class":34},[28,1483,1484,1486,1488,1491,1493,1495,1497],{"class":30,"line":94},[28,1485,1446],{"class":34},[28,1487,1248],{"class":38},[28,1489,1490],{"class":320},"\"请给整型变量a赋值\"",[28,1492,1248],{"class":38},[28,1494,35],{"class":34},[28,1496,1248],{"class":38},[28,1498,1270],{"class":34},[28,1500,1501,1504,1507],{"class":30,"line":109},[28,1502,1503],{"class":34},"cin ",[28,1505,1506],{"class":38},">>",[28,1508,1509],{"class":34}," a;\n",[28,1511,1512,1514,1516,1519,1522,1524,1526],{"class":30,"line":125},[28,1513,1245],{"class":34},[28,1515,1248],{"class":38},[28,1517,1518],{"class":320}," \"整型变量a=\"",[28,1520,1521],{"class":38}," \u003C\u003C",[28,1523,35],{"class":34},[28,1525,1248],{"class":38},[28,1527,1270],{"class":34},[159,1529,1531],{"id":1530},"_15运算符","1.5运算符",[188,1533,1535],{"id":1534},"_151算术运算符","1.5.1算术运算符",[14,1537,1538,1542],{},[1539,1540],"img",{"alt":23,"src":1541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[171,1544,1545,1548,1551],{},[174,1546,1547],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[174,1549,1550],{},"两个小数不可以做取模运算",[174,1552,1553],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[188,1555,1557],{"id":1556},"_152赋值运算符","1.5.2赋值运算符",[14,1559,1560],{},[1539,1561],{"alt":23,"src":1562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[188,1564,1566],{"id":1565},"_153比较运算符","1.5.3比较运算符",[14,1568,1569],{},[1539,1570],{"alt":23,"src":1571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[188,1573,1575],{"id":1574},"_154逻辑运算符","1.5.4逻辑运算符",[14,1577,1578],{},[1539,1579],{"alt":23,"src":1580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[159,1582,1584],{"id":1583},"_16程序流程结构","1.6程序流程结构",[188,1586,1588],{"id":1587},"_161选择结构","1.6.1选择结构",[171,1590,1591],{},[174,1592,1593],{},"if语句\n单行、多行、多条件if语句",[18,1595,1597],{"className":209,"code":1596,"language":211,"meta":23,"style":23},"\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",[25,1598,1599,1604,1619,1624,1638,1643,1648,1657,1670,1674,1687,1692,1698,1703,1717,1722,1728,1749,1754,1768,1773,1802,1807,1824,1829,1834,1839,1853,1858],{"__ignoreMap":23},[28,1600,1601],{"class":30,"line":31},[28,1602,1603],{"class":105},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[28,1605,1606,1609,1612,1614,1617],{"class":30,"line":94},[28,1607,1608],{"class":38},"if",[28,1610,1611],{"class":34},"(score",[28,1613,1164],{"class":38},[28,1615,1616],{"class":45},"600",[28,1618,227],{"class":34},[28,1620,1621],{"class":30,"line":109},[28,1622,1623],{"class":34},"{\n",[28,1625,1626,1629,1631,1634,1636],{"class":30,"line":125},[28,1627,1628],{"class":34},"    cout",[28,1630,1248],{"class":38},[28,1632,1633],{"class":320},"'这是单行if语句'",[28,1635,1248],{"class":38},[28,1637,1270],{"class":34},[28,1639,1640],{"class":30,"line":131},[28,1641,1642],{"class":34},"}\n",[28,1644,1645],{"class":30,"line":1291},[28,1646,1647],{"class":105},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[28,1649,1650,1652,1654],{"class":30,"line":1297},[28,1651,1503],{"class":34},[28,1653,1506],{"class":38},[28,1655,1656],{"class":34}," score\n",[28,1658,1659,1661,1663,1666,1668],{"class":30,"line":1388},[28,1660,1608],{"class":38},[28,1662,1611],{"class":34},[28,1664,1665],{"class":38},"\u003C=",[28,1667,1616],{"class":45},[28,1669,227],{"class":34},[28,1671,1672],{"class":30,"line":1394},[28,1673,1623],{"class":34},[28,1675,1676,1678,1680,1683,1685],{"class":30,"line":1406},[28,1677,1628],{"class":34},[28,1679,1506],{"class":38},[28,1681,1682],{"class":320},"\"小于等于600\"",[28,1684,1248],{"class":38},[28,1686,1270],{"class":34},[28,1688,1690],{"class":30,"line":1689},11,[28,1691,1642],{"class":34},[28,1693,1695],{"class":30,"line":1694},12,[28,1696,1697],{"class":38},"else\n",[28,1699,1701],{"class":30,"line":1700},13,[28,1702,1623],{"class":34},[28,1704,1706,1708,1710,1713,1715],{"class":30,"line":1705},14,[28,1707,1628],{"class":34},[28,1709,1506],{"class":38},[28,1711,1712],{"class":320},"\"大于600\"",[28,1714,1506],{"class":38},[28,1716,1270],{"class":34},[28,1718,1720],{"class":30,"line":1719},15,[28,1721,1642],{"class":34},[28,1723,1725],{"class":30,"line":1724},16,[28,1726,1727],{"class":105},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[28,1729,1731,1733,1736,1738,1740,1743,1745,1747],{"class":30,"line":1730},17,[28,1732,1608],{"class":38},[28,1734,1735],{"class":34}," (",[28,1737,407],{"class":45},[28,1739,99],{"class":38},[28,1741,1742],{"class":34},"num",[28,1744,99],{"class":38},[28,1746,525],{"class":45},[28,1748,227],{"class":34},[28,1750,1752],{"class":30,"line":1751},18,[28,1753,1623],{"class":34},[28,1755,1757,1759,1761,1764,1766],{"class":30,"line":1756},19,[28,1758,1628],{"class":34},[28,1760,1248],{"class":38},[28,1762,1763],{"class":320},"\"小于100\"",[28,1765,1248],{"class":38},[28,1767,1270],{"class":34},[28,1769,1771],{"class":30,"line":1770},20,[28,1772,1642],{"class":34},[28,1774,1776,1779,1782,1785,1788,1790,1793,1795,1797,1800],{"class":30,"line":1775},21,[28,1777,1778],{"class":38},"else",[28,1780,1781],{"class":38}," if",[28,1783,1784],{"class":34}," (nmu",[28,1786,1787],{"class":38},">=",[28,1789,525],{"class":45},[28,1791,1792],{"class":38},"&&",[28,1794,1742],{"class":34},[28,1796,99],{"class":38},[28,1798,1799],{"class":45},"200",[28,1801,227],{"class":34},[28,1803,1805],{"class":30,"line":1804},22,[28,1806,1623],{"class":34},[28,1808,1810,1812,1814,1817,1819,1821],{"class":30,"line":1809},23,[28,1811,1628],{"class":34},[28,1813,1248],{"class":38},[28,1815,1816],{"class":320},"\"不小于100且小于200\"",[28,1818,1248],{"class":38},[28,1820,1315],{"class":34},[28,1822,1823],{"class":105}," \u002F\u002F可以无限else if,python中是elif：\n",[28,1825,1827],{"class":30,"line":1826},24,[28,1828,1642],{"class":34},[28,1830,1832],{"class":30,"line":1831},25,[28,1833,1697],{"class":38},[28,1835,1837],{"class":30,"line":1836},26,[28,1838,1623],{"class":34},[28,1840,1842,1844,1846,1849,1851],{"class":30,"line":1841},27,[28,1843,1628],{"class":34},[28,1845,1248],{"class":38},[28,1847,1848],{"class":320},"\"不小于200\"",[28,1850,1248],{"class":38},[28,1852,1270],{"class":34},[28,1854,1856],{"class":30,"line":1855},28,[28,1857,1642],{"class":34},[28,1859,1861],{"class":30,"line":1860},29,[28,1862,1863],{"class":105},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[171,1865,1866],{"start":94},[174,1867,1868],{},"三目运算符",[18,1870,1872],{"className":209,"code":1871,"language":211,"meta":23,"style":23},"\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",[25,1873,1874,1879,1884,1910,1932,1949,1954,1977,1992],{"__ignoreMap":23},[28,1875,1876],{"class":30,"line":31},[28,1877,1878],{"class":105},"\u002F\u002F创建三个变量a,b,c\n",[28,1880,1881],{"class":30,"line":94},[28,1882,1883],{"class":105},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[28,1885,1886,1888,1890,1892,1894,1897,1899,1901,1904,1906,1908],{"class":30,"line":109},[28,1887,224],{"class":38},[28,1889,1475],{"class":34},[28,1891,39],{"class":38},[28,1893,102],{"class":45},[28,1895,1896],{"class":34},",b",[28,1898,39],{"class":38},[28,1900,659],{"class":45},[28,1902,1903],{"class":34},",c",[28,1905,39],{"class":38},[28,1907,407],{"class":45},[28,1909,1367],{"class":34},[28,1911,1912,1914,1916,1919,1921,1923,1925,1927,1929],{"class":30,"line":125},[28,1913,502],{"class":34},[28,1915,39],{"class":38},[28,1917,1918],{"class":34},"(a",[28,1920,1164],{"class":38},[28,1922,477],{"class":34},[28,1924,1190],{"class":38},[28,1926,35],{"class":34},[28,1928,1065],{"class":38},[28,1930,1931],{"class":34},"b)\n",[28,1933,1934,1936,1938,1941,1943,1945,1947],{"class":30,"line":131},[28,1935,1446],{"class":34},[28,1937,1248],{"class":38},[28,1939,1940],{"class":320},"\"c=\"",[28,1942,1248],{"class":38},[28,1944,502],{"class":34},[28,1946,1248],{"class":38},[28,1948,1270],{"class":34},[28,1950,1951],{"class":30,"line":1291},[28,1952,1953],{"class":105},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[28,1955,1956,1958,1960,1962,1964,1966,1968,1971,1973,1975],{"class":30,"line":1297},[28,1957,1918],{"class":34},[28,1959,1164],{"class":38},[28,1961,477],{"class":34},[28,1963,1190],{"class":38},[28,1965,35],{"class":34},[28,1967,1065],{"class":38},[28,1969,1970],{"class":34},"b)",[28,1972,39],{"class":38},[28,1974,525],{"class":45},[28,1976,1367],{"class":34},[28,1978,1979,1981,1983,1985,1987,1989],{"class":30,"line":1388},[28,1980,1446],{"class":34},[28,1982,1248],{"class":38},[28,1984,35],{"class":34},[28,1986,1248],{"class":38},[28,1988,1315],{"class":34},[28,1990,1991],{"class":105}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[28,1993,1994,1996,1998,2000,2002,2004],{"class":30,"line":1394},[28,1995,1446],{"class":34},[28,1997,1248],{"class":38},[28,1999,477],{"class":34},[28,2001,1248],{"class":38},[28,2003,1315],{"class":34},[28,2005,2006],{"class":105}," \u002F\u002F10   a>b,b还是原值\n",[171,2008,2009],{"start":109},[174,2010,2011],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[18,2013,2015],{"className":209,"code":2014,"language":211,"meta":23,"style":23},"\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",[25,2016,2017,2022,2030,2044,2054,2058,2072,2085,2095,2103,2108,2133,2154,2176,2197,2219,2240,2260,2265],{"__ignoreMap":23},[28,2018,2019],{"class":30,"line":31},[28,2020,2021],{"class":105},"\u002F\u002F案例-电影打分\n",[28,2023,2024,2027],{"class":30,"line":94},[28,2025,2026],{"class":38},"#include",[28,2028,2029],{"class":320},"\u003Ciostream>\n",[28,2031,2032,2035,2038,2042],{"class":30,"line":109},[28,2033,2034],{"class":38},"using",[28,2036,2037],{"class":38}," namespace",[28,2039,2041],{"class":2040},"sScJk"," std",[28,2043,1367],{"class":34},[28,2045,2046,2048,2051],{"class":30,"line":125},[28,2047,224],{"class":38},[28,2049,2050],{"class":2040}," main",[28,2052,2053],{"class":34},"()\n",[28,2055,2056],{"class":30,"line":131},[28,2057,1623],{"class":34},[28,2059,2060,2063,2066,2068,2070],{"class":30,"line":1291},[28,2061,2062],{"class":38},"    int",[28,2064,2065],{"class":34}," score",[28,2067,39],{"class":38},[28,2069,407],{"class":45},[28,2071,1367],{"class":34},[28,2073,2074,2076,2078,2081,2083],{"class":30,"line":1297},[28,2075,1628],{"class":34},[28,2077,1248],{"class":38},[28,2079,2080],{"class":320},"\"电影打分：\"",[28,2082,1248],{"class":38},[28,2084,1270],{"class":34},[28,2086,2087,2090,2092],{"class":30,"line":1388},[28,2088,2089],{"class":34},"    cin",[28,2091,1506],{"class":38},[28,2093,2094],{"class":34},"score;\n",[28,2096,2097,2100],{"class":30,"line":1394},[28,2098,2099],{"class":38},"    switch",[28,2101,2102],{"class":34},"(score)\n",[28,2104,2105],{"class":30,"line":1406},[28,2106,2107],{"class":34},"    {\n",[28,2109,2110,2113,2116,2119,2121,2124,2126,2128,2131],{"class":30,"line":1689},[28,2111,2112],{"class":38},"        case",[28,2114,2115],{"class":45}," 10",[28,2117,2118],{"class":34},":cout",[28,2120,1248],{"class":38},[28,2122,2123],{"class":320},"\"经典\"",[28,2125,1248],{"class":38},[28,2127,1315],{"class":34},[28,2129,2130],{"class":38},"break",[28,2132,1367],{"class":34},[28,2134,2135,2137,2140,2142,2144,2146,2148,2150,2152],{"class":30,"line":1694},[28,2136,2112],{"class":38},[28,2138,2139],{"class":45}," 9",[28,2141,2118],{"class":34},[28,2143,1248],{"class":38},[28,2145,2123],{"class":320},[28,2147,1248],{"class":38},[28,2149,1315],{"class":34},[28,2151,2130],{"class":38},[28,2153,1367],{"class":34},[28,2155,2156,2158,2161,2163,2165,2168,2170,2172,2174],{"class":30,"line":1700},[28,2157,2112],{"class":38},[28,2159,2160],{"class":45}," 8",[28,2162,2118],{"class":34},[28,2164,1248],{"class":38},[28,2166,2167],{"class":320},"\"非常好\"",[28,2169,1248],{"class":38},[28,2171,1315],{"class":34},[28,2173,2130],{"class":38},[28,2175,1367],{"class":34},[28,2177,2178,2180,2183,2185,2187,2189,2191,2193,2195],{"class":30,"line":1705},[28,2179,2112],{"class":38},[28,2181,2182],{"class":45}," 7",[28,2184,2118],{"class":34},[28,2186,1248],{"class":38},[28,2188,2167],{"class":320},[28,2190,1248],{"class":38},[28,2192,1315],{"class":34},[28,2194,2130],{"class":38},[28,2196,1367],{"class":34},[28,2198,2199,2201,2204,2206,2208,2211,2213,2215,2217],{"class":30,"line":1719},[28,2200,2112],{"class":38},[28,2202,2203],{"class":45}," 6",[28,2205,2118],{"class":34},[28,2207,1248],{"class":38},[28,2209,2210],{"class":320},"\"一般\"",[28,2212,1248],{"class":38},[28,2214,1315],{"class":34},[28,2216,2130],{"class":38},[28,2218,1367],{"class":34},[28,2220,2221,2223,2226,2228,2230,2232,2234,2236,2238],{"class":30,"line":1724},[28,2222,2112],{"class":38},[28,2224,2225],{"class":45}," 5",[28,2227,2118],{"class":34},[28,2229,1248],{"class":38},[28,2231,2210],{"class":320},[28,2233,1248],{"class":38},[28,2235,1315],{"class":34},[28,2237,2130],{"class":38},[28,2239,1367],{"class":34},[28,2241,2242,2245,2247,2249,2252,2254,2256,2258],{"class":30,"line":1730},[28,2243,2244],{"class":38},"        default",[28,2246,2118],{"class":34},[28,2248,1248],{"class":38},[28,2250,2251],{"class":320},"\"烂片\"",[28,2253,1248],{"class":38},[28,2255,1315],{"class":34},[28,2257,2130],{"class":38},[28,2259,1367],{"class":34},[28,2261,2262],{"class":30,"line":1751},[28,2263,2264],{"class":34},"    }\n",[28,2266,2267],{"class":30,"line":1756},[28,2268,1642],{"class":34},[14,2270,2271],{},"if和switch区别：",[1211,2273,2274,2277],{},[174,2275,2276],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[174,2278,2279],{},"switch优点：结构清晰，执行效率高",[188,2281,2283],{"id":2282},"_162循环结构","1.6.2循环结构",[171,2285,2286],{},[174,2287,2288],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[18,2290,2292],{"className":209,"code":2291,"language":211,"meta":23,"style":23},"\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",[25,2293,2294,2299,2307,2311,2324,2338,2342,2362,2372,2376,2388],{"__ignoreMap":23},[28,2295,2296],{"class":30,"line":31},[28,2297,2298],{"class":105},"\u002F\u002F打印0-9数字\n",[28,2300,2301,2303,2305],{"class":30,"line":94},[28,2302,224],{"class":38},[28,2304,2050],{"class":2040},[28,2306,2053],{"class":34},[28,2308,2309],{"class":30,"line":109},[28,2310,1623],{"class":34},[28,2312,2313,2315,2318,2320,2322],{"class":30,"line":125},[28,2314,2062],{"class":38},[28,2316,2317],{"class":34}," num",[28,2319,39],{"class":38},[28,2321,407],{"class":45},[28,2323,1367],{"class":34},[28,2325,2326,2329,2332,2334,2336],{"class":30,"line":131},[28,2327,2328],{"class":38},"    while",[28,2330,2331],{"class":34},"(num",[28,2333,99],{"class":38},[28,2335,659],{"class":45},[28,2337,227],{"class":34},[28,2339,2340],{"class":30,"line":1291},[28,2341,2107],{"class":34},[28,2343,2344,2347,2350,2352,2354,2356,2359],{"class":30,"line":1297},[28,2345,2346],{"class":2040},"       std",[28,2348,2349],{"class":34},"::cout",[28,2351,1248],{"class":38},[28,2353,1742],{"class":34},[28,2355,1248],{"class":38},[28,2357,2358],{"class":2040},"std",[28,2360,2361],{"class":34},"::endl;\n",[28,2363,2364,2367,2370],{"class":30,"line":1388},[28,2365,2366],{"class":34},"        num",[28,2368,2369],{"class":38},"++",[28,2371,1367],{"class":34},[28,2373,2374],{"class":30,"line":1394},[28,2375,2264],{"class":34},[28,2377,2378,2381,2383,2386],{"class":30,"line":1406},[28,2379,2380],{"class":2040},"    system",[28,2382,221],{"class":34},[28,2384,2385],{"class":320},"\"pause\"",[28,2387,227],{"class":34},[28,2389,2390],{"class":30,"line":1689},[28,2391,1642],{"class":34},[14,2393,2394],{},"注意：写好循环条件，避免死循环情况",[18,2396,2398],{"className":209,"code":2397,"language":211,"meta":23,"style":23},"\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",[25,2399,2400,2405,2412,2419,2429,2437,2441,2446,2473,2478,2483,2491,2518,2523,2528,2541,2551,2555,2565,2570,2583,2588,2602,2607,2622,2626,2639,2643,2648,2652,2666,2674,2679,2685,2691,2696],{"__ignoreMap":23},[28,2401,2402],{"class":30,"line":31},[28,2403,2404],{"class":105},"\u002F\u002F循环结构-猜数字\n",[28,2406,2407,2409],{"class":30,"line":94},[28,2408,2026],{"class":38},[28,2410,2411],{"class":320}," \u003Ciostream>\n",[28,2413,2414,2416],{"class":30,"line":109},[28,2415,2026],{"class":38},[28,2417,2418],{"class":320}," \u003Cctime>\n",[28,2420,2421,2423,2425,2427],{"class":30,"line":125},[28,2422,2034],{"class":38},[28,2424,2037],{"class":38},[28,2426,2041],{"class":2040},[28,2428,1367],{"class":34},[28,2430,2431,2433,2435],{"class":30,"line":131},[28,2432,224],{"class":38},[28,2434,2050],{"class":2040},[28,2436,2053],{"class":34},[28,2438,2439],{"class":30,"line":1291},[28,2440,1623],{"class":34},[28,2442,2443],{"class":30,"line":1297},[28,2444,2445],{"class":105},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[28,2447,2448,2451,2454,2457,2460,2462,2465,2467,2470],{"class":30,"line":1388},[28,2449,2450],{"class":2040},"    srand",[28,2452,2453],{"class":34},"((",[28,2455,2456],{"class":38},"unsigned",[28,2458,2459],{"class":38}," int",[28,2461,642],{"class":34},[28,2463,2464],{"class":2040},"time",[28,2466,221],{"class":34},[28,2468,2469],{"class":45},"NULL",[28,2471,2472],{"class":34},"));\n",[28,2474,2475],{"class":30,"line":1394},[28,2476,2477],{"emptyLinePlaceholder":144},"\n",[28,2479,2480],{"class":30,"line":1406},[28,2481,2482],{"class":105},"    \u002F\u002F1.系统生成随机数\n",[28,2484,2485,2488],{"class":30,"line":1689},[28,2486,2487],{"class":105},"    \u002F\u002Frand()%100",[28,2489,2490],{"class":105}," \u002F\u002F生成0-99的随机数\n",[28,2492,2493,2495,2497,2499,2502,2505,2507,2509,2511,2513,2515],{"class":30,"line":1694},[28,2494,2062],{"class":38},[28,2496,2317],{"class":34},[28,2498,39],{"class":38},[28,2500,2501],{"class":2040},"rand",[28,2503,2504],{"class":34},"()",[28,2506,542],{"class":38},[28,2508,525],{"class":45},[28,2510,693],{"class":38},[28,2512,46],{"class":45},[28,2514,274],{"class":34},[28,2516,2517],{"class":105}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[28,2519,2520],{"class":30,"line":1700},[28,2521,2522],{"class":105},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[28,2524,2525],{"class":30,"line":1705},[28,2526,2527],{"class":105},"    \u002F\u002F2.玩家猜测\n",[28,2529,2530,2532,2535,2537,2539],{"class":30,"line":1719},[28,2531,2062],{"class":38},[28,2533,2534],{"class":34}," val",[28,2536,39],{"class":38},[28,2538,407],{"class":45},[28,2540,1367],{"class":34},[28,2542,2543,2545,2547,2549],{"class":30,"line":1724},[28,2544,2328],{"class":38},[28,2546,1735],{"class":34},[28,2548,46],{"class":45},[28,2550,227],{"class":34},[28,2552,2553],{"class":30,"line":1730},[28,2554,2107],{"class":34},[28,2556,2557,2560,2562],{"class":30,"line":1751},[28,2558,2559],{"class":34},"        cin",[28,2561,1506],{"class":38},[28,2563,2564],{"class":34},"val;\n",[28,2566,2567],{"class":30,"line":1756},[28,2568,2569],{"class":105},"        \u002F\u002F3.判断玩家猜测\n",[28,2571,2572,2575,2578,2580],{"class":30,"line":1770},[28,2573,2574],{"class":38},"        if",[28,2576,2577],{"class":34},"(val",[28,2579,99],{"class":38},[28,2581,2582],{"class":34},"num) \n",[28,2584,2585],{"class":30,"line":1775},[28,2586,2587],{"class":34},"        {\n",[28,2589,2590,2593,2595,2598,2600],{"class":30,"line":1804},[28,2591,2592],{"class":34},"            cout",[28,2594,1248],{"class":38},[28,2596,2597],{"class":320},"\"猜小了！\"",[28,2599,1248],{"class":38},[28,2601,1270],{"class":34},[28,2603,2604],{"class":30,"line":1809},[28,2605,2606],{"class":34},"        }\n",[28,2608,2609,2612,2614,2617,2619],{"class":30,"line":1826},[28,2610,2611],{"class":38},"        else",[28,2613,1781],{"class":38},[28,2615,2616],{"class":34}," (val",[28,2618,1164],{"class":38},[28,2620,2621],{"class":34},"num)\n",[28,2623,2624],{"class":30,"line":1831},[28,2625,2587],{"class":34},[28,2627,2628,2630,2632,2635,2637],{"class":30,"line":1836},[28,2629,2592],{"class":34},[28,2631,1248],{"class":38},[28,2633,2634],{"class":320},"\"猜大了！\"",[28,2636,1248],{"class":38},[28,2638,1270],{"class":34},[28,2640,2641],{"class":30,"line":1841},[28,2642,2606],{"class":34},[28,2644,2645],{"class":30,"line":1855},[28,2646,2647],{"class":38},"        else\n",[28,2649,2650],{"class":30,"line":1860},[28,2651,2587],{"class":34},[28,2653,2655,2657,2659,2662,2664],{"class":30,"line":2654},30,[28,2656,2592],{"class":34},[28,2658,1248],{"class":38},[28,2660,2661],{"class":320},"\"猜对了！\"",[28,2663,1248],{"class":38},[28,2665,1270],{"class":34},[28,2667,2669,2672],{"class":30,"line":2668},31,[28,2670,2671],{"class":38},"            break",[28,2673,1367],{"class":34},[28,2675,2677],{"class":30,"line":2676},32,[28,2678,2606],{"class":34},[28,2680,2682],{"class":30,"line":2681},33,[28,2683,2684],{"class":105},"        \u002F\u002F猜对 退出游戏\n",[28,2686,2688],{"class":30,"line":2687},34,[28,2689,2690],{"class":105},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[28,2692,2694],{"class":30,"line":2693},35,[28,2695,2264],{"class":34},[28,2697,2699],{"class":30,"line":2698},36,[28,2700,1642],{"class":34},[171,2702,2703],{"start":94},[174,2704,2705,2706,2709],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[365,2707,2708],{},"do...while会先执行一次循环语句","，在判断循环语句",[18,2711,2713],{"className":209,"code":2712,"language":211,"meta":23,"style":23},"\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",[25,2714,2715,2720,2728,2732,2744,2752,2756,2773,2780,2784,2797,2807],{"__ignoreMap":23},[28,2716,2717],{"class":30,"line":31},[28,2718,2719],{"class":105},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[28,2721,2722,2724,2726],{"class":30,"line":94},[28,2723,224],{"class":38},[28,2725,2050],{"class":2040},[28,2727,2053],{"class":34},[28,2729,2730],{"class":30,"line":109},[28,2731,1623],{"class":34},[28,2733,2734,2736,2738,2740,2742],{"class":30,"line":125},[28,2735,2062],{"class":38},[28,2737,2317],{"class":34},[28,2739,39],{"class":38},[28,2741,407],{"class":45},[28,2743,1367],{"class":34},[28,2745,2746,2749],{"class":30,"line":131},[28,2747,2748],{"class":38},"    do",[28,2750,2751],{"class":34}," \n",[28,2753,2754],{"class":30,"line":1291},[28,2755,2107],{"class":34},[28,2757,2758,2761,2763,2765,2767,2769,2771],{"class":30,"line":1297},[28,2759,2760],{"class":2040},"        std",[28,2762,2349],{"class":34},[28,2764,1248],{"class":38},[28,2766,1742],{"class":34},[28,2768,1248],{"class":38},[28,2770,2358],{"class":2040},[28,2772,2361],{"class":34},[28,2774,2775,2777],{"class":30,"line":1388},[28,2776,2366],{"class":34},[28,2778,2779],{"class":38},"++\n",[28,2781,2782],{"class":30,"line":1394},[28,2783,2264],{"class":34},[28,2785,2786,2788,2790,2792,2794],{"class":30,"line":1406},[28,2787,2328],{"class":38},[28,2789,2331],{"class":34},[28,2791,99],{"class":38},[28,2793,659],{"class":45},[28,2795,2796],{"class":34},");\n",[28,2798,2799,2801,2803,2805],{"class":30,"line":1689},[28,2800,2380],{"class":2040},[28,2802,221],{"class":34},[28,2804,2385],{"class":320},[28,2806,2796],{"class":34},[28,2808,2809],{"class":30,"line":1694},[28,2810,1642],{"class":34},[14,2812,2813],{},"案例-水仙花数",[14,2815,2816],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2818,2819],{},"例如：1^3+5^3+3^3=153",[14,2821,2822],{},"请用do...while语句，求出所有3位数的水仙花数",[18,2824,2826],{"className":209,"code":2825,"language":211,"meta":23,"style":23},"#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",[25,2827,2828,2834,2844,2852,2856,2861,2873,2879,2883,2888,2904,2920,2936,2951,2970,2985,3033,3037,3049,3053,3061,3065,3079],{"__ignoreMap":23},[28,2829,2830,2832],{"class":30,"line":31},[28,2831,2026],{"class":38},[28,2833,2411],{"class":320},[28,2835,2836,2838,2840,2842],{"class":30,"line":94},[28,2837,2034],{"class":38},[28,2839,2037],{"class":38},[28,2841,2041],{"class":2040},[28,2843,1367],{"class":34},[28,2845,2846,2848,2850],{"class":30,"line":109},[28,2847,224],{"class":38},[28,2849,2050],{"class":2040},[28,2851,2053],{"class":34},[28,2853,2854],{"class":30,"line":125},[28,2855,1623],{"class":34},[28,2857,2858],{"class":30,"line":131},[28,2859,2860],{"class":105},"    \u002F\u002F1.先打印所有三位数字\n",[28,2862,2863,2865,2867,2869,2871],{"class":30,"line":1291},[28,2864,2062],{"class":38},[28,2866,2317],{"class":34},[28,2868,39],{"class":38},[28,2870,525],{"class":45},[28,2872,1367],{"class":34},[28,2874,2875,2877],{"class":30,"line":1297},[28,2876,2748],{"class":38},[28,2878,2751],{"class":34},[28,2880,2881],{"class":30,"line":1388},[28,2882,2107],{"class":34},[28,2884,2885],{"class":30,"line":1394},[28,2886,2887],{"class":105},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[28,2889,2890,2893,2895,2897,2899,2901],{"class":30,"line":1406},[28,2891,2892],{"class":38},"        int",[28,2894,1475],{"class":34},[28,2896,39],{"class":38},[28,2898,407],{"class":45},[28,2900,274],{"class":34},[28,2902,2903],{"class":105}," \u002F\u002F个位\n",[28,2905,2906,2908,2911,2913,2915,2917],{"class":30,"line":1689},[28,2907,2892],{"class":38},[28,2909,2910],{"class":34}," b",[28,2912,39],{"class":38},[28,2914,407],{"class":45},[28,2916,274],{"class":34},[28,2918,2919],{"class":105}," \u002F\u002F十位\n",[28,2921,2922,2924,2927,2929,2931,2933],{"class":30,"line":1694},[28,2923,2892],{"class":38},[28,2925,2926],{"class":34}," c",[28,2928,39],{"class":38},[28,2930,407],{"class":45},[28,2932,274],{"class":34},[28,2934,2935],{"class":105}," \u002F\u002F百位\n",[28,2937,2938,2941,2943,2945,2947,2949],{"class":30,"line":1700},[28,2939,2940],{"class":34},"        a",[28,2942,39],{"class":38},[28,2944,1742],{"class":34},[28,2946,542],{"class":38},[28,2948,659],{"class":45},[28,2950,1367],{"class":34},[28,2952,2953,2956,2958,2960,2962,2964,2966,2968],{"class":30,"line":1705},[28,2954,2955],{"class":34},"        b",[28,2957,39],{"class":38},[28,2959,1742],{"class":34},[28,2961,794],{"class":38},[28,2963,659],{"class":45},[28,2965,542],{"class":38},[28,2967,659],{"class":45},[28,2969,1367],{"class":34},[28,2971,2972,2975,2977,2979,2981,2983],{"class":30,"line":1719},[28,2973,2974],{"class":34},"        c",[28,2976,39],{"class":38},[28,2978,1742],{"class":34},[28,2980,794],{"class":38},[28,2982,525],{"class":45},[28,2984,1367],{"class":34},[28,2986,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3024,3027,3030],{"class":30,"line":1724},[28,2988,2574],{"class":38},[28,2990,1918],{"class":34},[28,2992,668],{"class":38},[28,2994,35],{"class":34},[28,2996,668],{"class":38},[28,2998,35],{"class":34},[28,3000,693],{"class":38},[28,3002,477],{"class":34},[28,3004,668],{"class":38},[28,3006,477],{"class":34},[28,3008,668],{"class":38},[28,3010,477],{"class":34},[28,3012,693],{"class":38},[28,3014,502],{"class":34},[28,3016,668],{"class":38},[28,3018,502],{"class":34},[28,3020,668],{"class":38},[28,3022,3023],{"class":34},"c ",[28,3025,3026],{"class":38},"==",[28,3028,3029],{"class":34}," num)",[28,3031,3032],{"class":105}," \u002F\u002F如果是水仙花数，才打印\n",[28,3034,3035],{"class":30,"line":1730},[28,3036,2587],{"class":34},[28,3038,3039,3041,3043,3045,3047],{"class":30,"line":1751},[28,3040,2592],{"class":34},[28,3042,1248],{"class":38},[28,3044,1742],{"class":34},[28,3046,1248],{"class":38},[28,3048,1270],{"class":34},[28,3050,3051],{"class":30,"line":1756},[28,3052,2606],{"class":34},[28,3054,3055,3057,3059],{"class":30,"line":1770},[28,3056,2366],{"class":34},[28,3058,2369],{"class":38},[28,3060,1367],{"class":34},[28,3062,3063],{"class":30,"line":1775},[28,3064,2264],{"class":34},[28,3066,3067,3069,3072,3074,3077],{"class":30,"line":1804},[28,3068,2328],{"class":38},[28,3070,3071],{"class":34}," (num ",[28,3073,99],{"class":38},[28,3075,3076],{"class":45}," 1000",[28,3078,2796],{"class":34},[28,3080,3081],{"class":30,"line":1809},[28,3082,1642],{"class":34},[171,3084,3085],{"start":109},[174,3086,3087],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[18,3089,3091],{"className":209,"code":3090,"language":211,"meta":23,"style":23},"\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",[25,3092,3093,3098,3127,3131,3143,3147,3152,3163,3170,3174,3188,3192,3199,3203,3215,3224],{"__ignoreMap":23},[28,3094,3095],{"class":30,"line":31},[28,3096,3097],{"class":105},"\u002F\u002F从数字0-9打印\n",[28,3099,3100,3103,3105,3107,3110,3112,3114,3117,3119,3121,3123,3125],{"class":30,"line":94},[28,3101,3102],{"class":38},"for",[28,3104,221],{"class":34},[28,3106,224],{"class":38},[28,3108,3109],{"class":34}," i",[28,3111,39],{"class":38},[28,3113,407],{"class":45},[28,3115,3116],{"class":34},";i",[28,3118,99],{"class":38},[28,3120,659],{"class":45},[28,3122,3116],{"class":34},[28,3124,2369],{"class":38},[28,3126,227],{"class":34},[28,3128,3129],{"class":30,"line":109},[28,3130,1623],{"class":34},[28,3132,3133,3135,3137,3139,3141],{"class":30,"line":125},[28,3134,1628],{"class":34},[28,3136,1248],{"class":38},[28,3138,654],{"class":34},[28,3140,1248],{"class":38},[28,3142,1270],{"class":34},[28,3144,3145],{"class":30,"line":131},[28,3146,1642],{"class":34},[28,3148,3149],{"class":30,"line":1291},[28,3150,3151],{"class":105},"\u002F\u002F上式可以进行拆分\n",[28,3153,3154,3156,3158,3160],{"class":30,"line":1297},[28,3155,224],{"class":38},[28,3157,3109],{"class":34},[28,3159,39],{"class":38},[28,3161,3162],{"class":45},"0\n",[28,3164,3165,3167],{"class":30,"line":1388},[28,3166,3102],{"class":38},[28,3168,3169],{"class":34},"(;;;)\n",[28,3171,3172],{"class":30,"line":1394},[28,3173,1623],{"class":34},[28,3175,3176,3179,3182,3184,3186],{"class":30,"line":1406},[28,3177,3178],{"class":38},"    if",[28,3180,3181],{"class":34},"(i",[28,3183,1787],{"class":38},[28,3185,659],{"class":45},[28,3187,227],{"class":34},[28,3189,3190],{"class":30,"line":1689},[28,3191,2107],{"class":34},[28,3193,3194,3197],{"class":30,"line":1694},[28,3195,3196],{"class":38},"        break",[28,3198,1367],{"class":34},[28,3200,3201],{"class":30,"line":1700},[28,3202,2264],{"class":34},[28,3204,3205,3207,3209,3211,3213],{"class":30,"line":1705},[28,3206,1628],{"class":34},[28,3208,1248],{"class":38},[28,3210,654],{"class":34},[28,3212,1248],{"class":38},[28,3214,1270],{"class":34},[28,3216,3217,3220,3222],{"class":30,"line":1719},[28,3218,3219],{"class":34},"    i",[28,3221,2369],{"class":38},[28,3223,1367],{"class":34},[28,3225,3226],{"class":30,"line":1724},[28,3227,1642],{"class":34},[14,3229,3230],{},"小练习",[18,3232,3234],{"className":209,"code":3233,"language":211,"meta":23,"style":23},"#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",[25,3235,3236,3242,3252,3260,3264,3269,3274,3302,3306,3311,3316,3357,3361,3374,3378,3382,3386,3398,3402,3406],{"__ignoreMap":23},[28,3237,3238,3240],{"class":30,"line":31},[28,3239,2026],{"class":38},[28,3241,2029],{"class":320},[28,3243,3244,3246,3248,3250],{"class":30,"line":94},[28,3245,2034],{"class":38},[28,3247,2037],{"class":38},[28,3249,2041],{"class":2040},[28,3251,1367],{"class":34},[28,3253,3254,3256,3258],{"class":30,"line":109},[28,3255,224],{"class":38},[28,3257,2050],{"class":2040},[28,3259,2053],{"class":34},[28,3261,3262],{"class":30,"line":125},[28,3263,1623],{"class":34},[28,3265,3266],{"class":30,"line":131},[28,3267,3268],{"class":105},"    \u002F\u002F敲桌子案例\n",[28,3270,3271],{"class":30,"line":1291},[28,3272,3273],{"class":105},"    \u002F\u002F1.先输出1-100的数字\n",[28,3275,3276,3279,3281,3283,3285,3287,3289,3292,3294,3296,3298,3300],{"class":30,"line":1297},[28,3277,3278],{"class":38},"    for",[28,3280,221],{"class":34},[28,3282,224],{"class":38},[28,3284,3109],{"class":34},[28,3286,39],{"class":38},[28,3288,46],{"class":45},[28,3290,3291],{"class":34},"; i",[28,3293,1665],{"class":38},[28,3295,525],{"class":45},[28,3297,3291],{"class":34},[28,3299,2369],{"class":38},[28,3301,227],{"class":34},[28,3303,3304],{"class":30,"line":1388},[28,3305,2107],{"class":34},[28,3307,3308],{"class":30,"line":1394},[28,3309,3310],{"class":105},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[28,3312,3313],{"class":30,"line":1406},[28,3314,3315],{"class":105},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[28,3317,3318,3320,3322,3324,3326,3328,3330,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355],{"class":30,"line":1689},[28,3319,2574],{"class":38},[28,3321,3181],{"class":34},[28,3323,542],{"class":38},[28,3325,583],{"class":45},[28,3327,3026],{"class":38},[28,3329,407],{"class":45},[28,3331,3332],{"class":38}," ||",[28,3334,3109],{"class":34},[28,3336,542],{"class":38},[28,3338,659],{"class":45},[28,3340,3026],{"class":38},[28,3342,583],{"class":45},[28,3344,3332],{"class":38},[28,3346,3109],{"class":34},[28,3348,794],{"class":38},[28,3350,659],{"class":45},[28,3352,3026],{"class":38},[28,3354,583],{"class":45},[28,3356,227],{"class":34},[28,3358,3359],{"class":30,"line":1694},[28,3360,2587],{"class":34},[28,3362,3363,3365,3367,3370,3372],{"class":30,"line":1700},[28,3364,2592],{"class":34},[28,3366,1248],{"class":38},[28,3368,3369],{"class":320},"\"敲桌子\"",[28,3371,1248],{"class":38},[28,3373,1270],{"class":34},[28,3375,3376],{"class":30,"line":1705},[28,3377,2606],{"class":34},[28,3379,3380],{"class":30,"line":1719},[28,3381,2647],{"class":38},[28,3383,3384],{"class":30,"line":1724},[28,3385,2587],{"class":34},[28,3387,3388,3390,3392,3394,3396],{"class":30,"line":1730},[28,3389,2592],{"class":34},[28,3391,1248],{"class":38},[28,3393,654],{"class":34},[28,3395,1248],{"class":38},[28,3397,1270],{"class":34},[28,3399,3400],{"class":30,"line":1751},[28,3401,2606],{"class":34},[28,3403,3404],{"class":30,"line":1756},[28,3405,2264],{"class":34},[28,3407,3408],{"class":30,"line":1770},[28,3409,1642],{"class":34},[14,3411,3412],{},"嵌套实现星图",[18,3414,3416],{"className":209,"code":3415,"language":211,"meta":23,"style":23},"#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",[25,3417,3418,3424,3434,3442,3446,3472,3476,3505,3509,3520,3524,3533,3537],{"__ignoreMap":23},[28,3419,3420,3422],{"class":30,"line":31},[28,3421,2026],{"class":38},[28,3423,2029],{"class":320},[28,3425,3426,3428,3430,3432],{"class":30,"line":94},[28,3427,2034],{"class":38},[28,3429,2037],{"class":38},[28,3431,2041],{"class":2040},[28,3433,1367],{"class":34},[28,3435,3436,3438,3440],{"class":30,"line":109},[28,3437,224],{"class":38},[28,3439,2050],{"class":2040},[28,3441,2053],{"class":34},[28,3443,3444],{"class":30,"line":125},[28,3445,1623],{"class":34},[28,3447,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470],{"class":30,"line":131},[28,3449,3278],{"class":38},[28,3451,1735],{"class":34},[28,3453,224],{"class":38},[28,3455,3109],{"class":34},[28,3457,39],{"class":38},[28,3459,407],{"class":45},[28,3461,3116],{"class":34},[28,3463,99],{"class":38},[28,3465,659],{"class":45},[28,3467,3116],{"class":34},[28,3469,2369],{"class":38},[28,3471,227],{"class":34},[28,3473,3474],{"class":30,"line":1291},[28,3475,2107],{"class":34},[28,3477,3478,3481,3483,3485,3488,3490,3492,3495,3497,3499,3501,3503],{"class":30,"line":1297},[28,3479,3480],{"class":38},"        for",[28,3482,1735],{"class":34},[28,3484,224],{"class":38},[28,3486,3487],{"class":34}," j",[28,3489,39],{"class":38},[28,3491,407],{"class":45},[28,3493,3494],{"class":34},";j",[28,3496,99],{"class":38},[28,3498,659],{"class":45},[28,3500,3494],{"class":34},[28,3502,2369],{"class":38},[28,3504,227],{"class":34},[28,3506,3507],{"class":30,"line":1388},[28,3508,2587],{"class":34},[28,3510,3511,3513,3515,3518],{"class":30,"line":1394},[28,3512,2592],{"class":34},[28,3514,1248],{"class":38},[28,3516,3517],{"class":320},"\"*\"",[28,3519,1367],{"class":34},[28,3521,3522],{"class":30,"line":1406},[28,3523,2606],{"class":34},[28,3525,3526,3529,3531],{"class":30,"line":1689},[28,3527,3528],{"class":34},"        cout",[28,3530,1248],{"class":38},[28,3532,1270],{"class":34},[28,3534,3535],{"class":30,"line":1694},[28,3536,2264],{"class":34},[28,3538,3539],{"class":30,"line":1700},[28,3540,1642],{"class":34},[14,3542,3543],{},"乘法口诀表",[18,3545,3547],{"className":209,"code":3546,"language":211,"meta":23,"style":23},"#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",[25,3548,3549,3555,3565,3573,3577,3603,3607,3632,3636,3676,3680,3688,3692],{"__ignoreMap":23},[28,3550,3551,3553],{"class":30,"line":31},[28,3552,2026],{"class":38},[28,3554,2411],{"class":320},[28,3556,3557,3559,3561,3563],{"class":30,"line":94},[28,3558,2034],{"class":38},[28,3560,2037],{"class":38},[28,3562,2041],{"class":2040},[28,3564,1367],{"class":34},[28,3566,3567,3569,3571],{"class":30,"line":109},[28,3568,224],{"class":38},[28,3570,2050],{"class":2040},[28,3572,2053],{"class":34},[28,3574,3575],{"class":30,"line":125},[28,3576,1623],{"class":34},[28,3578,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601],{"class":30,"line":131},[28,3580,3278],{"class":38},[28,3582,221],{"class":34},[28,3584,224],{"class":38},[28,3586,3109],{"class":34},[28,3588,39],{"class":38},[28,3590,46],{"class":45},[28,3592,3116],{"class":34},[28,3594,99],{"class":38},[28,3596,659],{"class":45},[28,3598,3116],{"class":34},[28,3600,2369],{"class":38},[28,3602,227],{"class":34},[28,3604,3605],{"class":30,"line":1291},[28,3606,2107],{"class":34},[28,3608,3609,3611,3613,3615,3617,3619,3621,3623,3625,3628,3630],{"class":30,"line":1297},[28,3610,3480],{"class":38},[28,3612,221],{"class":34},[28,3614,224],{"class":38},[28,3616,3487],{"class":34},[28,3618,39],{"class":38},[28,3620,46],{"class":45},[28,3622,3494],{"class":34},[28,3624,1665],{"class":38},[28,3626,3627],{"class":34},"i;j",[28,3629,2369],{"class":38},[28,3631,227],{"class":34},[28,3633,3634],{"class":30,"line":1388},[28,3635,2587],{"class":34},[28,3637,3638,3640,3642,3644,3646,3648,3650,3652,3654,3657,3659,3661,3663,3665,3667,3670,3672,3674],{"class":30,"line":1394},[28,3639,2592],{"class":34},[28,3641,1248],{"class":38},[28,3643,680],{"class":34},[28,3645,1248],{"class":38},[28,3647,3517],{"class":320},[28,3649,1248],{"class":38},[28,3651,654],{"class":34},[28,3653,1248],{"class":38},[28,3655,3656],{"class":320},"\"=\"",[28,3658,1248],{"class":38},[28,3660,654],{"class":34},[28,3662,668],{"class":38},[28,3664,680],{"class":34},[28,3666,1248],{"class":38},[28,3668,3669],{"class":320},"'",[28,3671,1307],{"class":45},[28,3673,3669],{"class":320},[28,3675,1367],{"class":34},[28,3677,3678],{"class":30,"line":1406},[28,3679,2606],{"class":34},[28,3681,3682,3684,3686],{"class":30,"line":1689},[28,3683,3528],{"class":34},[28,3685,1248],{"class":38},[28,3687,1270],{"class":34},[28,3689,3690],{"class":30,"line":1694},[28,3691,2264],{"class":34},[28,3693,3694],{"class":30,"line":1700},[28,3695,1642],{"class":34},[188,3697,3699],{"id":3698},"_163跳出语句","1.6.3跳出语句",[171,3701,3702],{},[174,3703,3704],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3706,3707],{},"break使用时机：",[1211,3709,3710,3713,3716],{},[174,3711,3712],{},"出现在switch条件语句中，作用是终止case并跳出switch",[174,3714,3715],{},"出现在循环结构中，作用是跳出当前的循环结构",[174,3717,3718],{},"出现在嵌套循环中，跳出最近的内层循环语句",[171,3720,3721,3724],{"start":94},[174,3722,3723],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[174,3725,3726],{},"goto语句\n语法：goto 标记;",[14,3728,3729],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[18,3731,3733],{"className":209,"code":3732,"language":211,"meta":23,"style":23},"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",[25,3734,3735,3743,3747,3760,3770,3783,3796,3809,3817,3833],{"__ignoreMap":23},[28,3736,3737,3739,3741],{"class":30,"line":31},[28,3738,224],{"class":38},[28,3740,2050],{"class":2040},[28,3742,2053],{"class":34},[28,3744,3745],{"class":30,"line":94},[28,3746,1623],{"class":34},[28,3748,3749,3751,3753,3756,3758],{"class":30,"line":109},[28,3750,1628],{"class":34},[28,3752,1248],{"class":38},[28,3754,3755],{"class":320},"\"1\"",[28,3757,1248],{"class":38},[28,3759,1270],{"class":34},[28,3761,3762,3765,3768],{"class":30,"line":125},[28,3763,3764],{"class":38},"    goto",[28,3766,3767],{"class":2040}," FLAG",[28,3769,1367],{"class":34},[28,3771,3772,3774,3776,3779,3781],{"class":30,"line":131},[28,3773,1628],{"class":34},[28,3775,1248],{"class":38},[28,3777,3778],{"class":320},"\"2\"",[28,3780,1248],{"class":38},[28,3782,1270],{"class":34},[28,3784,3785,3787,3789,3792,3794],{"class":30,"line":1291},[28,3786,1628],{"class":34},[28,3788,1248],{"class":38},[28,3790,3791],{"class":320},"\"3\"",[28,3793,1248],{"class":38},[28,3795,1270],{"class":34},[28,3797,3798,3800,3802,3805,3807],{"class":30,"line":1297},[28,3799,1628],{"class":34},[28,3801,1248],{"class":38},[28,3803,3804],{"class":320},"\"4\"",[28,3806,1248],{"class":38},[28,3808,1270],{"class":34},[28,3810,3811,3814],{"class":30,"line":1388},[28,3812,3813],{"class":2040},"    FLAG",[28,3815,3816],{"class":34},":\n",[28,3818,3819,3821,3823,3826,3828,3830],{"class":30,"line":1394},[28,3820,1628],{"class":34},[28,3822,1248],{"class":38},[28,3824,3825],{"class":320},"\"5\"",[28,3827,1248],{"class":38},[28,3829,1315],{"class":34},[28,3831,3832],{"class":105},"\u002F\u002F跳过了2,3,4,直接到5\n",[28,3834,3835],{"class":30,"line":1406},[28,3836,1642],{"class":34},[159,3838,3840],{"id":3839},"_17数组","1.7数组",[188,3842,3844],{"id":3843},"_171一维数组","1.7.1一维数组",[171,3846,3847],{},[174,3848,3849],{},"一维数组定义方式",[353,3851,3852,3862],{},[356,3853,3854],{},[359,3855,3856,3859],{},[362,3857,3858],{},"方式",[362,3860,3861],{},"注意事项",[400,3863,3864,3878,3888],{},[359,3865,3866,3872],{},[405,3867,3868,3869,274],{},"数据类型 数组名",[28,3870,3871],{},"数组长度",[405,3873,3874,3875,3877],{},"这种方式是先定义再arr",[28,3876,654],{},"赋值",[359,3879,3880,3885],{},[405,3881,3868,3882,3884],{},[28,3883,3871],{},"={值1,值2....};",[405,3886,3887],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[359,3889,3890,3894],{},[405,3891,3868,3892,3884],{},[28,3893],{},[405,3895,3896,3897,3899],{},"int arr",[28,3898],{},";这是不正确的，按照这样的方式定义必须有初始长度",[171,3901,3902],{"start":94},[174,3903,3904],{},"一维数组数组名\n用途：",[1211,3906,3907],{},[174,3908,3909],{},"1.可以统计整个数组在内存中的长度：",[18,3911,3913],{"className":209,"code":3912,"language":211,"meta":23,"style":23},"sizeof(arr);\nsizeof(arr[0]);\n",[25,3914,3915,3922],{"__ignoreMap":23},[28,3916,3917,3919],{"class":30,"line":31},[28,3918,218],{"class":38},[28,3920,3921],{"class":34},"(arr);\n",[28,3923,3924,3926,3929,3931],{"class":30,"line":94},[28,3925,218],{"class":38},[28,3927,3928],{"class":34},"(arr[",[28,3930,407],{"class":45},[28,3932,3933],{"class":34},"]);\n",[1211,3935,3936],{},[174,3937,3938],{},"2.可以获取数组在内存中的首地址:",[18,3940,3942],{"className":209,"code":3941,"language":211,"meta":23,"style":23},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[25,3943,3944,3949,3962,3967],{"__ignoreMap":23},[28,3945,3946],{"class":30,"line":31},[28,3947,3948],{"class":105},"\u002F\u002F查看16进制的首地址\n",[28,3950,3951,3953,3955,3958,3960],{"class":30,"line":94},[28,3952,1446],{"class":34},[28,3954,1248],{"class":38},[28,3956,3957],{"class":34},"arr",[28,3959,1248],{"class":38},[28,3961,1270],{"class":34},[28,3963,3964],{"class":30,"line":109},[28,3965,3966],{"class":105},"\u002F\u002F看10进制数\n",[28,3968,3969,3971,3973,3975,3977,3979,3981,3984,3986,3988,3990],{"class":30,"line":125},[28,3970,1446],{"class":34},[28,3972,1248],{"class":38},[28,3974,221],{"class":34},[28,3976,224],{"class":38},[28,3978,642],{"class":34},[28,3980,567],{"class":38},[28,3982,3983],{"class":34},"arr[",[28,3985,407],{"class":45},[28,3987,119],{"class":34},[28,3989,1248],{"class":38},[28,3991,1270],{"class":34},[14,3993,3994],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1211,3996,3997],{},[174,3998,3999],{},"1️⃣五只小猪称体重",[18,4001,4003],{"className":209,"code":4002,"language":211,"meta":23,"style":23},"#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",[25,4004,4005,4011,4021,4029,4033,4073,4086,4112,4116,4128,4132,4142,4146,4150,4163,4173],{"__ignoreMap":23},[28,4006,4007,4009],{"class":30,"line":31},[28,4008,2026],{"class":38},[28,4010,2029],{"class":320},[28,4012,4013,4015,4017,4019],{"class":30,"line":94},[28,4014,2034],{"class":38},[28,4016,2037],{"class":38},[28,4018,2041],{"class":2040},[28,4020,1367],{"class":34},[28,4022,4023,4025,4027],{"class":30,"line":109},[28,4024,224],{"class":38},[28,4026,2050],{"class":2040},[28,4028,2053],{"class":34},[28,4030,4031],{"class":30,"line":125},[28,4032,1623],{"class":34},[28,4034,4035,4037,4040,4042,4044,4046,4048,4051,4053,4056,4058,4060,4062,4065,4067,4070],{"class":30,"line":131},[28,4036,2062],{"class":38},[28,4038,4039],{"class":34}," arr[",[28,4041,533],{"class":45},[28,4043,119],{"class":34},[28,4045,39],{"class":38},[28,4047,1102],{"class":34},[28,4049,4050],{"class":45},"300",[28,4052,49],{"class":34},[28,4054,4055],{"class":45},"350",[28,4057,49],{"class":34},[28,4059,1799],{"class":45},[28,4061,49],{"class":34},[28,4063,4064],{"class":45},"400",[28,4066,49],{"class":34},[28,4068,4069],{"class":45},"250",[28,4071,4072],{"class":34},"};\n",[28,4074,4075,4077,4080,4082,4084],{"class":30,"line":1291},[28,4076,2062],{"class":38},[28,4078,4079],{"class":34}," tmp",[28,4081,39],{"class":38},[28,4083,407],{"class":45},[28,4085,1367],{"class":34},[28,4087,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110],{"class":30,"line":1297},[28,4089,3278],{"class":38},[28,4091,1735],{"class":34},[28,4093,224],{"class":38},[28,4095,3109],{"class":34},[28,4097,39],{"class":38},[28,4099,407],{"class":45},[28,4101,3116],{"class":34},[28,4103,99],{"class":38},[28,4105,533],{"class":45},[28,4107,3116],{"class":34},[28,4109,2369],{"class":38},[28,4111,227],{"class":34},[28,4113,4114],{"class":30,"line":1388},[28,4115,2107],{"class":34},[28,4117,4118,4120,4123,4125],{"class":30,"line":1394},[28,4119,2574],{"class":38},[28,4121,4122],{"class":34},"(tmp",[28,4124,99],{"class":38},[28,4126,4127],{"class":34},"arr[i])\n",[28,4129,4130],{"class":30,"line":1406},[28,4131,2587],{"class":34},[28,4133,4134,4137,4139],{"class":30,"line":1689},[28,4135,4136],{"class":34},"            tmp",[28,4138,39],{"class":38},[28,4140,4141],{"class":34},"arr[i];\n",[28,4143,4144],{"class":30,"line":1694},[28,4145,2606],{"class":34},[28,4147,4148],{"class":30,"line":1700},[28,4149,2264],{"class":34},[28,4151,4152,4154,4156,4159,4161],{"class":30,"line":1705},[28,4153,1628],{"class":34},[28,4155,1248],{"class":38},[28,4157,4158],{"class":34},"tmp",[28,4160,1248],{"class":38},[28,4162,1270],{"class":34},[28,4164,4165,4168,4171],{"class":30,"line":1719},[28,4166,4167],{"class":38},"    return",[28,4169,4170],{"class":45}," 0",[28,4172,1367],{"class":34},[28,4174,4175],{"class":30,"line":1724},[28,4176,1642],{"class":34},[1211,4178,4179],{},[174,4180,4181],{},"2️⃣数组元素逆置",[18,4183,4185],{"className":209,"code":4184,"language":211,"meta":23,"style":23},"\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",[25,4186,4187,4192,4198,4208,4216,4220,4255,4271,4303,4316,4321,4326,4338,4348,4358,4363,4372,4382,4387,4392,4419,4423,4439,4443,4454,4463],{"__ignoreMap":23},[28,4188,4189],{"class":30,"line":31},[28,4190,4191],{"class":105},"\u002F\u002F元素逆置\n",[28,4193,4194,4196],{"class":30,"line":94},[28,4195,2026],{"class":38},[28,4197,2029],{"class":320},[28,4199,4200,4202,4204,4206],{"class":30,"line":109},[28,4201,2034],{"class":38},[28,4203,2037],{"class":38},[28,4205,2041],{"class":2040},[28,4207,1367],{"class":34},[28,4209,4210,4212,4214],{"class":30,"line":125},[28,4211,224],{"class":38},[28,4213,2050],{"class":2040},[28,4215,2053],{"class":34},[28,4217,4218],{"class":30,"line":131},[28,4219,1623],{"class":34},[28,4221,4222,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253],{"class":30,"line":1291},[28,4223,4224],{"class":38},"   int",[28,4226,4039],{"class":34},[28,4228,533],{"class":45},[28,4230,119],{"class":34},[28,4232,39],{"class":38},[28,4234,1102],{"class":34},[28,4236,46],{"class":45},[28,4238,49],{"class":34},[28,4240,52],{"class":45},[28,4242,49],{"class":34},[28,4244,57],{"class":45},[28,4246,49],{"class":34},[28,4248,507],{"class":45},[28,4250,49],{"class":34},[28,4252,533],{"class":45},[28,4254,4072],{"class":34},[28,4256,4257,4259,4262,4264,4266,4268],{"class":30,"line":1297},[28,4258,4224],{"class":38},[28,4260,4261],{"class":34}," start",[28,4263,39],{"class":38},[28,4265,407],{"class":45},[28,4267,274],{"class":34},[28,4269,4270],{"class":105},"\u002F\u002F起始下标\n",[28,4272,4273,4275,4278,4281,4284,4287,4289,4291,4294,4296,4298,4300],{"class":30,"line":1388},[28,4274,4224],{"class":38},[28,4276,4277],{"class":34}," end",[28,4279,4280],{"class":38},"=sizeof",[28,4282,4283],{"class":34},"(arr)",[28,4285,4286],{"class":38},"\u002Fsizeof",[28,4288,3928],{"class":34},[28,4290,407],{"class":45},[28,4292,4293],{"class":34},"])",[28,4295,742],{"class":38},[28,4297,46],{"class":45},[28,4299,274],{"class":34},[28,4301,4302],{"class":105},"\u002F\u002F结束下标\n",[28,4304,4305,4308,4311,4313],{"class":30,"line":1394},[28,4306,4307],{"class":38},"   while",[28,4309,4310],{"class":34}," (start",[28,4312,99],{"class":38},[28,4314,4315],{"class":34},"end)\n",[28,4317,4318],{"class":30,"line":1406},[28,4319,4320],{"class":34},"   {\n",[28,4322,4323],{"class":30,"line":1689},[28,4324,4325],{"class":105},"    \u002F\u002F实现元素互换代码\n",[28,4327,4328,4330,4333,4335],{"class":30,"line":1694},[28,4329,2062],{"class":38},[28,4331,4332],{"class":34}," temp",[28,4334,39],{"class":38},[28,4336,4337],{"class":34},"arr[start];\n",[28,4339,4340,4343,4345],{"class":30,"line":1700},[28,4341,4342],{"class":34},"    arr[start]",[28,4344,39],{"class":38},[28,4346,4347],{"class":34},"arr[end];\n",[28,4349,4350,4353,4355],{"class":30,"line":1705},[28,4351,4352],{"class":34},"    arr[end]",[28,4354,39],{"class":38},[28,4356,4357],{"class":34},"temp;\n",[28,4359,4360],{"class":30,"line":1719},[28,4361,4362],{"class":105},"    \u002F\u002F下标更新\n",[28,4364,4365,4368,4370],{"class":30,"line":1724},[28,4366,4367],{"class":34},"    start",[28,4369,2369],{"class":38},[28,4371,1367],{"class":34},[28,4373,4374,4377,4380],{"class":30,"line":1730},[28,4375,4376],{"class":34},"    end",[28,4378,4379],{"class":38},"--",[28,4381,1367],{"class":34},[28,4383,4384],{"class":30,"line":1751},[28,4385,4386],{"class":34},"   }\n",[28,4388,4389],{"class":30,"line":1756},[28,4390,4391],{"class":105},"   \u002F\u002F输出逆置后的数组\n",[28,4393,4394,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417],{"class":30,"line":1770},[28,4395,4396],{"class":38},"   for",[28,4398,1735],{"class":34},[28,4400,224],{"class":38},[28,4402,3109],{"class":34},[28,4404,39],{"class":38},[28,4406,407],{"class":45},[28,4408,3116],{"class":34},[28,4410,99],{"class":38},[28,4412,533],{"class":45},[28,4414,3116],{"class":34},[28,4416,2369],{"class":38},[28,4418,227],{"class":34},[28,4420,4421],{"class":30,"line":1775},[28,4422,4320],{"class":34},[28,4424,4425,4427,4429,4432,4434,4437],{"class":30,"line":1804},[28,4426,1628],{"class":34},[28,4428,1248],{"class":38},[28,4430,4431],{"class":34},"arr[i]",[28,4433,1248],{"class":38},[28,4435,4436],{"class":320},"\" \"",[28,4438,1367],{"class":34},[28,4440,4441],{"class":30,"line":1809},[28,4442,4386],{"class":34},[28,4444,4445,4448,4450,4452],{"class":30,"line":1826},[28,4446,4447],{"class":2040},"   system",[28,4449,221],{"class":34},[28,4451,2385],{"class":320},[28,4453,2796],{"class":34},[28,4455,4456,4459,4461],{"class":30,"line":1831},[28,4457,4458],{"class":38},"   return",[28,4460,4170],{"class":45},[28,4462,1367],{"class":34},[28,4464,4465],{"class":30,"line":1836},[28,4466,1642],{"class":34},[1211,4468,4469],{},[174,4470,4471],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[18,4473,4475],{"className":209,"code":4474,"language":211,"meta":23,"style":23},"\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",[25,4476,4477,4482,4488,4498,4506,4510,4562,4575,4601,4605,4619,4623,4628,4633,4663,4667,4672,4706,4710,4715,4735,4740,4752,4768,4783,4788,4792,4796,4809,4835,4839,4853,4857,4865],{"__ignoreMap":23},[28,4478,4479],{"class":30,"line":31},[28,4480,4481],{"class":105},"\u002F\u002F冒泡排序,升序\n",[28,4483,4484,4486],{"class":30,"line":94},[28,4485,2026],{"class":38},[28,4487,2029],{"class":320},[28,4489,4490,4492,4494,4496],{"class":30,"line":109},[28,4491,2034],{"class":38},[28,4493,2037],{"class":38},[28,4495,2041],{"class":2040},[28,4497,1367],{"class":34},[28,4499,4500,4502,4504],{"class":30,"line":125},[28,4501,224],{"class":38},[28,4503,2050],{"class":2040},[28,4505,2053],{"class":34},[28,4507,4508],{"class":30,"line":131},[28,4509,1623],{"class":34},[28,4511,4512,4514,4516,4518,4521,4523,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560],{"class":30,"line":1291},[28,4513,2062],{"class":38},[28,4515,4039],{"class":34},[28,4517,633],{"class":45},[28,4519,4520],{"class":34},"] ",[28,4522,39],{"class":38},[28,4524,4525],{"class":34}," {",[28,4527,507],{"class":45},[28,4529,49],{"class":34},[28,4531,52],{"class":45},[28,4533,49],{"class":34},[28,4535,608],{"class":45},[28,4537,49],{"class":34},[28,4539,407],{"class":45},[28,4541,49],{"class":34},[28,4543,533],{"class":45},[28,4545,49],{"class":34},[28,4547,583],{"class":45},[28,4549,49],{"class":34},[28,4551,46],{"class":45},[28,4553,49],{"class":34},[28,4555,57],{"class":45},[28,4557,49],{"class":34},[28,4559,633],{"class":45},[28,4561,4072],{"class":34},[28,4563,4564,4566,4568,4571,4573],{"class":30,"line":1297},[28,4565,1628],{"class":34},[28,4567,1248],{"class":38},[28,4569,4570],{"class":320},"\"排序前：\"",[28,4572,1248],{"class":38},[28,4574,1270],{"class":34},[28,4576,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599],{"class":30,"line":1388},[28,4578,3278],{"class":38},[28,4580,1735],{"class":34},[28,4582,224],{"class":38},[28,4584,3109],{"class":34},[28,4586,39],{"class":38},[28,4588,407],{"class":45},[28,4590,3116],{"class":34},[28,4592,99],{"class":38},[28,4594,633],{"class":45},[28,4596,3116],{"class":34},[28,4598,2369],{"class":38},[28,4600,227],{"class":34},[28,4602,4603],{"class":30,"line":1394},[28,4604,2107],{"class":34},[28,4606,4607,4609,4611,4613,4615,4617],{"class":30,"line":1406},[28,4608,3528],{"class":34},[28,4610,1248],{"class":38},[28,4612,4431],{"class":34},[28,4614,1248],{"class":38},[28,4616,4436],{"class":320},[28,4618,1367],{"class":34},[28,4620,4621],{"class":30,"line":1689},[28,4622,2264],{"class":34},[28,4624,4625],{"class":30,"line":1694},[28,4626,4627],{"class":105},"    \u002F\u002F开始冒泡排序\n",[28,4629,4630],{"class":30,"line":1700},[28,4631,4632],{"class":105},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[28,4634,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661],{"class":30,"line":1705},[28,4636,3278],{"class":38},[28,4638,1735],{"class":34},[28,4640,224],{"class":38},[28,4642,3109],{"class":34},[28,4644,39],{"class":38},[28,4646,407],{"class":45},[28,4648,3116],{"class":34},[28,4650,99],{"class":38},[28,4652,633],{"class":45},[28,4654,742],{"class":38},[28,4656,46],{"class":45},[28,4658,3116],{"class":34},[28,4660,2369],{"class":38},[28,4662,227],{"class":34},[28,4664,4665],{"class":30,"line":1719},[28,4666,2107],{"class":34},[28,4668,4669],{"class":30,"line":1724},[28,4670,4671],{"class":105},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[28,4673,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704],{"class":30,"line":1730},[28,4675,3480],{"class":38},[28,4677,1735],{"class":34},[28,4679,224],{"class":38},[28,4681,3487],{"class":34},[28,4683,39],{"class":38},[28,4685,407],{"class":45},[28,4687,3494],{"class":34},[28,4689,99],{"class":38},[28,4691,633],{"class":45},[28,4693,742],{"class":38},[28,4695,654],{"class":34},[28,4697,742],{"class":38},[28,4699,46],{"class":45},[28,4701,3494],{"class":34},[28,4703,2369],{"class":38},[28,4705,227],{"class":34},[28,4707,4708],{"class":30,"line":1751},[28,4709,2587],{"class":34},[28,4711,4712],{"class":30,"line":1756},[28,4713,4714],{"class":105},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[28,4716,4717,4720,4723,4725,4728,4730,4732],{"class":30,"line":1770},[28,4718,4719],{"class":38},"            if",[28,4721,4722],{"class":34},"(arr[j]",[28,4724,1164],{"class":38},[28,4726,4727],{"class":34},"arr[j",[28,4729,693],{"class":38},[28,4731,46],{"class":45},[28,4733,4734],{"class":34},"])\n",[28,4736,4737],{"class":30,"line":1775},[28,4738,4739],{"class":34},"            {\n",[28,4741,4742,4745,4747,4749],{"class":30,"line":1804},[28,4743,4744],{"class":38},"                int",[28,4746,4332],{"class":34},[28,4748,39],{"class":38},[28,4750,4751],{"class":34},"arr[j];\n",[28,4753,4754,4757,4759,4761,4763,4765],{"class":30,"line":1809},[28,4755,4756],{"class":34},"                arr[j]",[28,4758,39],{"class":38},[28,4760,4727],{"class":34},[28,4762,693],{"class":38},[28,4764,46],{"class":45},[28,4766,4767],{"class":34},"];\n",[28,4769,4770,4773,4775,4777,4779,4781],{"class":30,"line":1826},[28,4771,4772],{"class":34},"                arr[j",[28,4774,693],{"class":38},[28,4776,46],{"class":45},[28,4778,119],{"class":34},[28,4780,39],{"class":38},[28,4782,4357],{"class":34},[28,4784,4785],{"class":30,"line":1831},[28,4786,4787],{"class":34},"            }\n",[28,4789,4790],{"class":30,"line":1836},[28,4791,2606],{"class":34},[28,4793,4794],{"class":30,"line":1841},[28,4795,2264],{"class":34},[28,4797,4798,4800,4802,4805,4807],{"class":30,"line":1855},[28,4799,1628],{"class":34},[28,4801,1248],{"class":38},[28,4803,4804],{"class":320},"\"排序后：\"",[28,4806,1248],{"class":38},[28,4808,1270],{"class":34},[28,4810,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":30,"line":1860},[28,4812,3278],{"class":38},[28,4814,1735],{"class":34},[28,4816,224],{"class":38},[28,4818,3109],{"class":34},[28,4820,39],{"class":38},[28,4822,407],{"class":45},[28,4824,3116],{"class":34},[28,4826,99],{"class":38},[28,4828,633],{"class":45},[28,4830,3116],{"class":34},[28,4832,2369],{"class":38},[28,4834,227],{"class":34},[28,4836,4837],{"class":30,"line":2654},[28,4838,2107],{"class":34},[28,4840,4841,4843,4845,4847,4849,4851],{"class":30,"line":2668},[28,4842,3528],{"class":34},[28,4844,1248],{"class":38},[28,4846,4431],{"class":34},[28,4848,1248],{"class":38},[28,4850,4436],{"class":320},[28,4852,1367],{"class":34},[28,4854,4855],{"class":30,"line":2676},[28,4856,2264],{"class":34},[28,4858,4859,4861,4863],{"class":30,"line":2681},[28,4860,4167],{"class":38},[28,4862,4170],{"class":45},[28,4864,1367],{"class":34},[28,4866,4867],{"class":30,"line":2687},[28,4868,1642],{"class":34},[188,4870,4872],{"id":4871},"_172二维数组","1.7.2二维数组",[171,4874,4875],{},[174,4876,4877],{},"二维数组的四种定义方式",[353,4879,4880,4889],{},[356,4881,4882],{},[359,4883,4884,4887],{},[362,4885,4886],{},"序号",[362,4888,3858],{},[400,4890,4891,4901,4910,4919,4928],{},[359,4892,4893,4895],{},[405,4894,46],{},[405,4896,4897,4898,274],{},"数据类型 数组名[行数]",[28,4899,4900],{},"列数",[359,4902,4903,4905],{},[405,4904,52],{},[405,4906,4897,4907,4909],{},[28,4908,4900],{},"={ {数据1,数据2}，{数据3，数据4}... }",[359,4911,4912,4914],{},[405,4913,57],{},[405,4915,4897,4916,4918],{},[28,4917,4900],{},"={数据1,数据2,数据3...}",[359,4920,4921,4923],{},[405,4922,507],{},[405,4924,4925,4926,4918],{},"数据类型 数组名[]",[28,4927,4900],{},[359,4929,4930,4933],{},[405,4931,4932],{},"注意：不能只省略列数",[405,4934],{},[171,4936,4937],{"start":94},[174,4938,4939],{},"二维数组数组名",[1211,4941,4942,4945],{},[174,4943,4944],{},"1.查看二维数组所占内存空间",[174,4946,4947],{},"2.获取二维数组首地址",[14,4949,4950],{},"已知二维数组，求二维数组的行数与列数",[18,4952,4954],{"className":209,"code":4953,"language":211,"meta":23,"style":23},"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",[25,4955,4956,4964,4968,4986,4990,5008,5024,5029,5054,5087],{"__ignoreMap":23},[28,4957,4958,4960,4962],{"class":30,"line":31},[28,4959,224],{"class":38},[28,4961,2050],{"class":2040},[28,4963,2053],{"class":34},[28,4965,4966],{"class":30,"line":94},[28,4967,1623],{"class":34},[28,4969,4970,4972,4974,4976,4979,4981,4983],{"class":30,"line":109},[28,4971,2062],{"class":38},[28,4973,4039],{"class":34},[28,4975,52],{"class":45},[28,4977,4978],{"class":34},"][",[28,4980,57],{"class":45},[28,4982,119],{"class":34},[28,4984,4985],{"class":38},"=\n",[28,4987,4988],{"class":30,"line":125},[28,4989,2107],{"class":34},[28,4991,4992,4995,4997,4999,5001,5003,5005],{"class":30,"line":131},[28,4993,4994],{"class":34},"        {",[28,4996,46],{"class":45},[28,4998,49],{"class":34},[28,5000,52],{"class":45},[28,5002,49],{"class":34},[28,5004,57],{"class":45},[28,5006,5007],{"class":34},"},\n",[28,5009,5010,5012,5014,5016,5018,5020,5022],{"class":30,"line":1291},[28,5011,4994],{"class":34},[28,5013,507],{"class":45},[28,5015,49],{"class":34},[28,5017,533],{"class":45},[28,5019,49],{"class":34},[28,5021,558],{"class":45},[28,5023,1642],{"class":34},[28,5025,5026],{"class":30,"line":1297},[28,5027,5028],{"class":34},"    };\n",[28,5030,5031,5033,5035,5038,5040,5042,5044,5046,5048,5050,5052],{"class":30,"line":1388},[28,5032,1628],{"class":34},[28,5034,1248],{"class":38},[28,5036,5037],{"class":320},"\"二维数组的行数\"",[28,5039,1449],{"class":38},[28,5041,4283],{"class":34},[28,5043,4286],{"class":38},[28,5045,3928],{"class":34},[28,5047,407],{"class":45},[28,5049,4293],{"class":34},[28,5051,1248],{"class":38},[28,5053,1270],{"class":34},[28,5055,5056,5058,5060,5063,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083,5085],{"class":30,"line":1394},[28,5057,1628],{"class":34},[28,5059,1248],{"class":38},[28,5061,5062],{"class":320},"\"二维数组的列数\"",[28,5064,1449],{"class":38},[28,5066,3928],{"class":34},[28,5068,407],{"class":45},[28,5070,4293],{"class":34},[28,5072,4286],{"class":38},[28,5074,3928],{"class":34},[28,5076,407],{"class":45},[28,5078,4978],{"class":34},[28,5080,407],{"class":45},[28,5082,4293],{"class":34},[28,5084,1248],{"class":38},[28,5086,1270],{"class":34},[28,5088,5089],{"class":30,"line":1406},[28,5090,1642],{"class":34},[14,5092,5093],{},"查看二维数组首地址",[18,5095,5097],{"className":209,"code":5096,"language":211,"meta":23,"style":23},"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",[25,5098,5099,5116,5142,5167],{"__ignoreMap":23},[28,5100,5101,5103,5105,5108,5110,5112,5114],{"class":30,"line":31},[28,5102,1446],{"class":34},[28,5104,1248],{"class":38},[28,5106,5107],{"class":320},"\"二维数组首地址：\"",[28,5109,1248],{"class":38},[28,5111,3957],{"class":34},[28,5113,1248],{"class":38},[28,5115,1270],{"class":34},[28,5117,5118,5120,5122,5125,5127,5129,5131,5134,5136,5138,5140],{"class":30,"line":94},[28,5119,1446],{"class":34},[28,5121,1248],{"class":38},[28,5123,5124],{"class":320},"\"二维数组第一行的首地址：\"",[28,5126,1248],{"class":38},[28,5128,221],{"class":34},[28,5130,224],{"class":38},[28,5132,5133],{"class":34},")arr[",[28,5135,407],{"class":45},[28,5137,119],{"class":34},[28,5139,1248],{"class":38},[28,5141,1270],{"class":34},[28,5143,5144,5146,5148,5151,5153,5155,5157,5159,5161,5163,5165],{"class":30,"line":109},[28,5145,1446],{"class":34},[28,5147,1248],{"class":38},[28,5149,5150],{"class":320},"\"二维数组第二行的首地址：\"",[28,5152,1248],{"class":38},[28,5154,221],{"class":34},[28,5156,224],{"class":38},[28,5158,5133],{"class":34},[28,5160,46],{"class":45},[28,5162,119],{"class":34},[28,5164,1248],{"class":38},[28,5166,1270],{"class":34},[28,5168,5169,5171,5173,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200],{"class":30,"line":125},[28,5170,1446],{"class":34},[28,5172,1248],{"class":38},[28,5174,5175],{"class":320},"\"二维数组第一个元素的首地址:\"",[28,5177,1248],{"class":38},[28,5179,221],{"class":34},[28,5181,224],{"class":38},[28,5183,642],{"class":34},[28,5185,567],{"class":38},[28,5187,3983],{"class":34},[28,5189,407],{"class":45},[28,5191,4978],{"class":34},[28,5193,407],{"class":45},[28,5195,119],{"class":34},[28,5197,1248],{"class":38},[28,5199,1315],{"class":34},[28,5201,5202],{"class":105},"\u002F\u002F对于数，要加取址符\n",[136,5204,5205],{},"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":23,"searchDepth":94,"depth":94,"links":5207},[5208,5209,5210,5218,5219,5225,5230],{"id":161,"depth":94,"text":162},{"id":168,"depth":94,"text":169},{"id":185,"depth":94,"text":186,"children":5211},[5212,5213,5214,5215,5216,5217],{"id":190,"depth":109,"text":191},{"id":237,"depth":109,"text":238},{"id":301,"depth":109,"text":302},{"id":1229,"depth":109,"text":1230},{"id":1321,"depth":109,"text":1322},{"id":1420,"depth":109,"text":1421},{"id":1462,"depth":94,"text":1463},{"id":1530,"depth":94,"text":1531,"children":5220},[5221,5222,5223,5224],{"id":1534,"depth":109,"text":1535},{"id":1556,"depth":109,"text":1557},{"id":1565,"depth":109,"text":1566},{"id":1574,"depth":109,"text":1575},{"id":1583,"depth":94,"text":1584,"children":5226},[5227,5228,5229],{"id":1587,"depth":109,"text":1588},{"id":2282,"depth":109,"text":2283},{"id":3698,"depth":109,"text":3699},{"id":3839,"depth":94,"text":3840,"children":5231},[5232,5233],{"id":3843,"depth":109,"text":3844},{"id":4871,"depth":109,"text":4872},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":152,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5240,"title":5241,"body":5242,"description":23,"extension":142,"meta":6342,"navigation":144,"path":6343,"seo":6344,"stem":6345,"__hash__":6346},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5243,"toc":6334},[5244,5247,5251,5259,5267,5270,5336,5340,5343,5419,5423,5426,5429,5432,5645,5649,5654,5718,5723,5790,5795,5886,5889,5994,5998,6001,6007,6151,6155,6158,6172,6175,6220,6223,6331],[10,5245,5241],{"id":5246},"_2函数",[159,5248,5250],{"id":5249},"_21函数概述","2.1函数概述",[171,5252,5253,5256],{},[174,5254,5255],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[174,5257,5258],{},"语法：",[18,5260,5265],{"className":5261,"code":5263,"language":5264,"meta":23},[5262],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[25,5266,5263],{"__ignoreMap":23},[14,5268,5269],{},"小案例",[18,5271,5273],{"className":209,"code":5272,"language":211,"meta":23,"style":23},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[25,5274,5275,5280,5304,5308,5325,5332],{"__ignoreMap":23},[28,5276,5277],{"class":30,"line":31},[28,5278,5279],{"class":105},"\u002F\u002Fnum1,num2形参\n",[28,5281,5282,5284,5287,5289,5291,5295,5297,5299,5302],{"class":30,"line":94},[28,5283,224],{"class":38},[28,5285,5286],{"class":2040}," add",[28,5288,221],{"class":34},[28,5290,224],{"class":38},[28,5292,5294],{"class":5293},"s4XuR"," num1",[28,5296,49],{"class":34},[28,5298,224],{"class":38},[28,5300,5301],{"class":5293}," num2",[28,5303,227],{"class":34},[28,5305,5306],{"class":30,"line":109},[28,5307,1623],{"class":34},[28,5309,5310,5312,5315,5317,5320,5322],{"class":30,"line":125},[28,5311,2062],{"class":38},[28,5313,5314],{"class":34}," sum",[28,5316,39],{"class":38},[28,5318,5319],{"class":34},"num1",[28,5321,693],{"class":38},[28,5323,5324],{"class":34},"num2;\n",[28,5326,5327,5329],{"class":30,"line":131},[28,5328,4167],{"class":38},[28,5330,5331],{"class":34}," sum;\n",[28,5333,5334],{"class":30,"line":1291},[28,5335,1642],{"class":34},[159,5337,5339],{"id":5338},"_22函数调用","2.2函数调用",[14,5341,5342],{},"调用刚刚写的求和函数",[18,5344,5346],{"className":209,"code":5345,"language":211,"meta":23,"style":23},"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",[25,5347,5348,5356,5360,5365,5377,5389,5398,5403,5415],{"__ignoreMap":23},[28,5349,5350,5352,5354],{"class":30,"line":31},[28,5351,224],{"class":38},[28,5353,2050],{"class":2040},[28,5355,2053],{"class":34},[28,5357,5358],{"class":30,"line":94},[28,5359,1623],{"class":34},[28,5361,5362],{"class":30,"line":109},[28,5363,5364],{"class":105},"    \u002F\u002Fa,b实参\n",[28,5366,5367,5369,5371,5373,5375],{"class":30,"line":125},[28,5368,2062],{"class":38},[28,5370,1475],{"class":34},[28,5372,39],{"class":38},[28,5374,407],{"class":45},[28,5376,1367],{"class":34},[28,5378,5379,5381,5383,5385,5387],{"class":30,"line":131},[28,5380,2062],{"class":38},[28,5382,2910],{"class":34},[28,5384,39],{"class":38},[28,5386,407],{"class":45},[28,5388,1367],{"class":34},[28,5390,5391,5393,5395],{"class":30,"line":1291},[28,5392,2089],{"class":34},[28,5394,1506],{"class":38},[28,5396,5397],{"class":34},"a,b;\n",[28,5399,5400],{"class":30,"line":1297},[28,5401,5402],{"class":105},"    \u002F\u002F调用函数时，实参值传给了形参\n",[28,5404,5405,5407,5409,5412],{"class":30,"line":1388},[28,5406,1628],{"class":34},[28,5408,1248],{"class":38},[28,5410,5411],{"class":2040},"add",[28,5413,5414],{"class":34},"(a,b);\n",[28,5416,5417],{"class":30,"line":1394},[28,5418,1642],{"class":34},[159,5420,5422],{"id":5421},"_23值传递","2.3值传递",[14,5424,5425],{},"值传递就是函数调用时实参将数值传给形参",[14,5427,5428],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5430,5431],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[18,5433,5435],{"className":209,"code":5434,"language":211,"meta":23,"style":23},"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",[25,5436,5437,5459,5463,5476,5493,5511,5522,5531,5540,5553,5569,5585,5594,5598,5606,5610,5622,5634,5641],{"__ignoreMap":23},[28,5438,5439,5442,5445,5447,5449,5451,5453,5455,5457],{"class":30,"line":31},[28,5440,5441],{"class":38},"void",[28,5443,5444],{"class":2040}," swap",[28,5446,221],{"class":34},[28,5448,224],{"class":38},[28,5450,5294],{"class":5293},[28,5452,49],{"class":34},[28,5454,224],{"class":38},[28,5456,5301],{"class":5293},[28,5458,227],{"class":34},[28,5460,5461],{"class":30,"line":94},[28,5462,1623],{"class":34},[28,5464,5465,5467,5469,5472,5474],{"class":30,"line":109},[28,5466,1628],{"class":34},[28,5468,1248],{"class":38},[28,5470,5471],{"class":320},"\"交换前：\"",[28,5473,1248],{"class":38},[28,5475,1270],{"class":34},[28,5477,5478,5480,5482,5485,5487,5489,5491],{"class":30,"line":125},[28,5479,1628],{"class":34},[28,5481,1248],{"class":38},[28,5483,5484],{"class":320},"\"num1=\"",[28,5486,1248],{"class":38},[28,5488,5319],{"class":34},[28,5490,1248],{"class":38},[28,5492,1270],{"class":34},[28,5494,5495,5497,5499,5502,5504,5507,5509],{"class":30,"line":131},[28,5496,1628],{"class":34},[28,5498,1248],{"class":38},[28,5500,5501],{"class":320},"\"num2=\"",[28,5503,1248],{"class":38},[28,5505,5506],{"class":34},"num2",[28,5508,1248],{"class":38},[28,5510,1270],{"class":34},[28,5512,5513,5515,5517,5519],{"class":30,"line":1291},[28,5514,2062],{"class":38},[28,5516,4332],{"class":34},[28,5518,39],{"class":38},[28,5520,5521],{"class":34},"num1;\n",[28,5523,5524,5527,5529],{"class":30,"line":1297},[28,5525,5526],{"class":34},"    num1",[28,5528,39],{"class":38},[28,5530,5324],{"class":34},[28,5532,5533,5536,5538],{"class":30,"line":1388},[28,5534,5535],{"class":34},"    num2",[28,5537,39],{"class":38},[28,5539,4357],{"class":34},[28,5541,5542,5544,5546,5549,5551],{"class":30,"line":1394},[28,5543,1628],{"class":34},[28,5545,1248],{"class":38},[28,5547,5548],{"class":320},"\"交换后：\"",[28,5550,1248],{"class":38},[28,5552,1270],{"class":34},[28,5554,5555,5557,5559,5561,5563,5565,5567],{"class":30,"line":1406},[28,5556,1628],{"class":34},[28,5558,1248],{"class":38},[28,5560,5484],{"class":320},[28,5562,1248],{"class":38},[28,5564,5319],{"class":34},[28,5566,1248],{"class":38},[28,5568,1270],{"class":34},[28,5570,5571,5573,5575,5577,5579,5581,5583],{"class":30,"line":1689},[28,5572,1628],{"class":34},[28,5574,1248],{"class":38},[28,5576,5501],{"class":320},[28,5578,1248],{"class":38},[28,5580,5506],{"class":34},[28,5582,1248],{"class":38},[28,5584,1270],{"class":34},[28,5586,5587,5589,5591],{"class":30,"line":1694},[28,5588,4167],{"class":38},[28,5590,274],{"class":34},[28,5592,5593],{"class":105},"\u002F\u002F或者不写\n",[28,5595,5596],{"class":30,"line":1700},[28,5597,1642],{"class":34},[28,5599,5600,5602,5604],{"class":30,"line":1705},[28,5601,224],{"class":38},[28,5603,2050],{"class":2040},[28,5605,2053],{"class":34},[28,5607,5608],{"class":30,"line":1719},[28,5609,1623],{"class":34},[28,5611,5612,5614,5616,5618,5620],{"class":30,"line":1724},[28,5613,2062],{"class":38},[28,5615,1475],{"class":34},[28,5617,39],{"class":38},[28,5619,659],{"class":45},[28,5621,1367],{"class":34},[28,5623,5624,5626,5628,5630,5632],{"class":30,"line":1730},[28,5625,2062],{"class":38},[28,5627,2910],{"class":34},[28,5629,39],{"class":38},[28,5631,102],{"class":45},[28,5633,1367],{"class":34},[28,5635,5636,5639],{"class":30,"line":1751},[28,5637,5638],{"class":2040},"    swap",[28,5640,5414],{"class":34},[28,5642,5643],{"class":30,"line":1756},[28,5644,1642],{"class":34},[159,5646,5648],{"id":5647},"_24函数的常见形式","2.4函数的常见形式",[171,5650,5651],{},[174,5652,5653],{},"无参无返",[18,5655,5657],{"className":209,"code":5656,"language":211,"meta":23,"style":23},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[25,5658,5659,5668,5672,5685,5689,5697,5701,5706,5714],{"__ignoreMap":23},[28,5660,5661,5663,5666],{"class":30,"line":31},[28,5662,5441],{"class":38},[28,5664,5665],{"class":2040}," test01",[28,5667,2053],{"class":34},[28,5669,5670],{"class":30,"line":94},[28,5671,1623],{"class":34},[28,5673,5674,5676,5678,5681,5683],{"class":30,"line":109},[28,5675,1628],{"class":34},[28,5677,1248],{"class":38},[28,5679,5680],{"class":320},"\"你好\"",[28,5682,1248],{"class":38},[28,5684,1270],{"class":34},[28,5686,5687],{"class":30,"line":125},[28,5688,1642],{"class":34},[28,5690,5691,5693,5695],{"class":30,"line":131},[28,5692,224],{"class":38},[28,5694,2050],{"class":2040},[28,5696,2053],{"class":34},[28,5698,5699],{"class":30,"line":1291},[28,5700,1623],{"class":34},[28,5702,5703],{"class":30,"line":1297},[28,5704,5705],{"class":105},"    \u002F\u002F函数调用\n",[28,5707,5708,5711],{"class":30,"line":1388},[28,5709,5710],{"class":2040},"    test01",[28,5712,5713],{"class":34},"();\n",[28,5715,5716],{"class":30,"line":1394},[28,5717,1642],{"class":34},[171,5719,5720],{"start":94},[174,5721,5722],{},"有参无返",[18,5724,5726],{"className":209,"code":5725,"language":211,"meta":23,"style":23},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[25,5727,5728,5743,5747,5759,5763,5771,5775,5786],{"__ignoreMap":23},[28,5729,5730,5732,5735,5737,5739,5741],{"class":30,"line":31},[28,5731,5441],{"class":38},[28,5733,5734],{"class":2040}," test02",[28,5736,221],{"class":34},[28,5738,224],{"class":38},[28,5740,1475],{"class":5293},[28,5742,227],{"class":34},[28,5744,5745],{"class":30,"line":94},[28,5746,1623],{"class":34},[28,5748,5749,5751,5753,5755,5757],{"class":30,"line":109},[28,5750,1628],{"class":34},[28,5752,1248],{"class":38},[28,5754,5680],{"class":320},[28,5756,1248],{"class":38},[28,5758,1270],{"class":34},[28,5760,5761],{"class":30,"line":125},[28,5762,1642],{"class":34},[28,5764,5765,5767,5769],{"class":30,"line":131},[28,5766,224],{"class":38},[28,5768,2050],{"class":2040},[28,5770,2053],{"class":34},[28,5772,5773],{"class":30,"line":1291},[28,5774,1623],{"class":34},[28,5776,5777,5780,5782,5784],{"class":30,"line":1297},[28,5778,5779],{"class":2040},"    test02",[28,5781,221],{"class":34},[28,5783,525],{"class":45},[28,5785,2796],{"class":34},[28,5787,5788],{"class":30,"line":1388},[28,5789,1642],{"class":34},[171,5791,5792],{"start":109},[174,5793,5794],{},"无参有返",[18,5796,5798],{"className":209,"code":5797,"language":211,"meta":23,"style":23},"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",[25,5799,5800,5809,5813,5825,5834,5838,5846,5850,5863,5882],{"__ignoreMap":23},[28,5801,5802,5804,5807],{"class":30,"line":31},[28,5803,224],{"class":38},[28,5805,5806],{"class":2040}," test03",[28,5808,2053],{"class":34},[28,5810,5811],{"class":30,"line":94},[28,5812,1623],{"class":34},[28,5814,5815,5817,5819,5821,5823],{"class":30,"line":109},[28,5816,1628],{"class":34},[28,5818,1248],{"class":38},[28,5820,5680],{"class":320},[28,5822,1248],{"class":38},[28,5824,1270],{"class":34},[28,5826,5827,5829,5832],{"class":30,"line":125},[28,5828,4167],{"class":38},[28,5830,5831],{"class":45}," 100",[28,5833,1367],{"class":34},[28,5835,5836],{"class":30,"line":131},[28,5837,1642],{"class":34},[28,5839,5840,5842,5844],{"class":30,"line":1291},[28,5841,224],{"class":38},[28,5843,2050],{"class":2040},[28,5845,2053],{"class":34},[28,5847,5848],{"class":30,"line":1297},[28,5849,1623],{"class":34},[28,5851,5852,5854,5856,5858,5861],{"class":30,"line":1388},[28,5853,2062],{"class":38},[28,5855,5294],{"class":34},[28,5857,39],{"class":38},[28,5859,5860],{"class":2040},"test03",[28,5862,5713],{"class":34},[28,5864,5865,5867,5869,5871,5873,5875,5877,5879],{"class":30,"line":1394},[28,5866,1628],{"class":34},[28,5868,1248],{"class":38},[28,5870,5484],{"class":320},[28,5872,1248],{"class":38},[28,5874,5319],{"class":34},[28,5876,1248],{"class":38},[28,5878,1315],{"class":34},[28,5880,5881],{"class":105}," \u002F\u002F100\n",[28,5883,5884],{"class":30,"line":1406},[28,5885,1642],{"class":34},[14,5887,5888],{},"4.有参有返",[18,5890,5892],{"className":209,"code":5891,"language":211,"meta":23,"style":23},"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",[25,5893,5894,5909,5913,5926,5932,5936,5945,5949,5961,5975,5990],{"__ignoreMap":23},[28,5895,5896,5898,5901,5903,5905,5907],{"class":30,"line":31},[28,5897,224],{"class":38},[28,5899,5900],{"class":2040}," test04",[28,5902,221],{"class":34},[28,5904,224],{"class":38},[28,5906,1475],{"class":5293},[28,5908,227],{"class":34},[28,5910,5911],{"class":30,"line":94},[28,5912,1623],{"class":34},[28,5914,5915,5917,5919,5922,5924],{"class":30,"line":109},[28,5916,1628],{"class":34},[28,5918,1248],{"class":38},[28,5920,5921],{"class":320},"\"hello\"",[28,5923,1248],{"class":38},[28,5925,1270],{"class":34},[28,5927,5928,5930],{"class":30,"line":125},[28,5929,4167],{"class":38},[28,5931,1509],{"class":34},[28,5933,5934],{"class":30,"line":131},[28,5935,1642],{"class":34},[28,5937,5938,5940,5943],{"class":30,"line":1291},[28,5939,224],{"class":38},[28,5941,5942],{"class":2040}," mian",[28,5944,2053],{"class":34},[28,5946,5947],{"class":30,"line":1297},[28,5948,1623],{"class":34},[28,5950,5951,5953,5955,5957,5959],{"class":30,"line":1388},[28,5952,2062],{"class":38},[28,5954,2910],{"class":34},[28,5956,39],{"class":38},[28,5958,46],{"class":45},[28,5960,1367],{"class":34},[28,5962,5963,5965,5967,5969,5972],{"class":30,"line":1394},[28,5964,2062],{"class":38},[28,5966,2926],{"class":34},[28,5968,39],{"class":38},[28,5970,5971],{"class":2040},"test04",[28,5973,5974],{"class":34},"(b);\n",[28,5976,5977,5979,5981,5983,5985,5987],{"class":30,"line":1406},[28,5978,1628],{"class":34},[28,5980,1248],{"class":38},[28,5982,502],{"class":34},[28,5984,1248],{"class":38},[28,5986,1315],{"class":34},[28,5988,5989],{"class":105}," \u002F\u002F1\n",[28,5991,5992],{"class":30,"line":1689},[28,5993,1642],{"class":34},[159,5995,5997],{"id":5996},"_25函数的声明","2.5函数的声明",[14,5999,6000],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6002,6003,6004],{},"函数的",[365,6005,6006],{},"声明可以多次，但是函数的定义只能有一次",[18,6008,6010],{"className":209,"code":6009,"language":211,"meta":23,"style":23},"\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",[25,6011,6012,6017,6022,6047,6056,6060,6072,6084,6100,6104,6124,6128,6147],{"__ignoreMap":23},[28,6013,6014],{"class":30,"line":31},[28,6015,6016],{"class":105},"\u002F\u002F函数声明\n",[28,6018,6019],{"class":30,"line":94},[28,6020,6021],{"class":105},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[28,6023,6024,6026,6029,6031,6033,6035,6037,6039,6041,6044],{"class":30,"line":109},[28,6025,224],{"class":38},[28,6027,6028],{"class":2040}," max",[28,6030,221],{"class":34},[28,6032,224],{"class":38},[28,6034,1475],{"class":5293},[28,6036,49],{"class":34},[28,6038,224],{"class":38},[28,6040,2910],{"class":5293},[28,6042,6043],{"class":34},");",[28,6045,6046],{"class":105},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[28,6048,6049,6051,6053],{"class":30,"line":125},[28,6050,224],{"class":38},[28,6052,2050],{"class":2040},[28,6054,6055],{"class":34},"() \n",[28,6057,6058],{"class":30,"line":131},[28,6059,1623],{"class":34},[28,6061,6062,6064,6066,6068,6070],{"class":30,"line":1291},[28,6063,2062],{"class":38},[28,6065,1475],{"class":34},[28,6067,39],{"class":38},[28,6069,659],{"class":45},[28,6071,1367],{"class":34},[28,6073,6074,6076,6078,6080,6082],{"class":30,"line":1297},[28,6075,2062],{"class":38},[28,6077,2910],{"class":34},[28,6079,39],{"class":38},[28,6081,102],{"class":45},[28,6083,1367],{"class":34},[28,6085,6086,6088,6090,6093,6096,6098],{"class":30,"line":1388},[28,6087,1628],{"class":34},[28,6089,1248],{"class":38},[28,6091,6092],{"class":2040},"max",[28,6094,6095],{"class":34},"(a,b)",[28,6097,1248],{"class":38},[28,6099,1270],{"class":34},[28,6101,6102],{"class":30,"line":1394},[28,6103,1642],{"class":34},[28,6105,6106,6108,6110,6112,6114,6116,6118,6120,6122],{"class":30,"line":1406},[28,6107,224],{"class":38},[28,6109,6028],{"class":2040},[28,6111,221],{"class":34},[28,6113,224],{"class":38},[28,6115,1475],{"class":5293},[28,6117,49],{"class":34},[28,6119,224],{"class":38},[28,6121,2910],{"class":5293},[28,6123,227],{"class":34},[28,6125,6126],{"class":30,"line":1689},[28,6127,1623],{"class":34},[28,6129,6130,6132,6134,6136,6138,6140,6142,6144],{"class":30,"line":1694},[28,6131,4167],{"class":38},[28,6133,1475],{"class":34},[28,6135,1164],{"class":38},[28,6137,477],{"class":34},[28,6139,1190],{"class":38},[28,6141,35],{"class":34},[28,6143,1065],{"class":38},[28,6145,6146],{"class":34},"b;\n",[28,6148,6149],{"class":30,"line":1700},[28,6150,1642],{"class":34},[159,6152,6154],{"id":6153},"_26函数的分文件编写","2.6函数的分文件编写",[14,6156,6157],{},"4个步骤：",[1211,6159,6160,6163,6166,6169],{},[174,6161,6162],{},"1.创建后缀名为.h的头文件",[174,6164,6165],{},"2.创建后缀名为.cpp的源文件",[174,6167,6168],{},"3.在头文件中写函数的定义",[174,6170,6171],{},"4.在源文件中写函数的定义\n示例：",[14,6173,6174],{},"头文件：swap.h",[18,6176,6178],{"className":209,"code":6177,"language":211,"meta":23,"style":23},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[25,6179,6180,6186,6196,6200],{"__ignoreMap":23},[28,6181,6182,6184],{"class":30,"line":31},[28,6183,2026],{"class":38},[28,6185,2029],{"class":320},[28,6187,6188,6190,6192,6194],{"class":30,"line":94},[28,6189,2034],{"class":38},[28,6191,2037],{"class":38},[28,6193,2041],{"class":2040},[28,6195,1367],{"class":34},[28,6197,6198],{"class":30,"line":109},[28,6199,6016],{"class":105},[28,6201,6202,6204,6206,6208,6210,6212,6214,6216,6218],{"class":30,"line":125},[28,6203,5441],{"class":38},[28,6205,5444],{"class":2040},[28,6207,221],{"class":34},[28,6209,224],{"class":38},[28,6211,1475],{"class":5293},[28,6213,49],{"class":34},[28,6215,224],{"class":38},[28,6217,2910],{"class":5293},[28,6219,2796],{"class":34},[14,6221,6222],{},"源文件：swap.cpp",[18,6224,6226],{"className":209,"code":6225,"language":211,"meta":23,"style":23},"#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",[25,6227,6228,6235,6240,6260,6264,6275,6284,6293,6310,6327],{"__ignoreMap":23},[28,6229,6230,6232],{"class":30,"line":31},[28,6231,2026],{"class":38},[28,6233,6234],{"class":320}," \"swap.h\"\n",[28,6236,6237],{"class":30,"line":94},[28,6238,6239],{"class":105},"\u002F\u002F函数的定义\n",[28,6241,6242,6244,6246,6248,6250,6252,6254,6256,6258],{"class":30,"line":109},[28,6243,5441],{"class":38},[28,6245,5444],{"class":2040},[28,6247,221],{"class":34},[28,6249,224],{"class":38},[28,6251,1475],{"class":5293},[28,6253,49],{"class":34},[28,6255,224],{"class":38},[28,6257,2910],{"class":5293},[28,6259,227],{"class":34},[28,6261,6262],{"class":30,"line":125},[28,6263,1623],{"class":34},[28,6265,6266,6268,6270,6272],{"class":30,"line":131},[28,6267,2062],{"class":38},[28,6269,4332],{"class":34},[28,6271,39],{"class":38},[28,6273,6274],{"class":34},"a;\n",[28,6276,6277,6280,6282],{"class":30,"line":1291},[28,6278,6279],{"class":34},"    a",[28,6281,39],{"class":38},[28,6283,6146],{"class":34},[28,6285,6286,6289,6291],{"class":30,"line":1297},[28,6287,6288],{"class":34},"    b",[28,6290,39],{"class":38},[28,6292,4357],{"class":34},[28,6294,6295,6297,6299,6302,6304,6306,6308],{"class":30,"line":1388},[28,6296,1628],{"class":34},[28,6298,1248],{"class":38},[28,6300,6301],{"class":320},"\"a=\"",[28,6303,1248],{"class":38},[28,6305,35],{"class":34},[28,6307,1248],{"class":38},[28,6309,1270],{"class":34},[28,6311,6312,6314,6316,6319,6321,6323,6325],{"class":30,"line":1394},[28,6313,1628],{"class":34},[28,6315,1248],{"class":38},[28,6317,6318],{"class":320},"\"b=\"",[28,6320,1248],{"class":38},[28,6322,477],{"class":34},[28,6324,1248],{"class":38},[28,6326,1270],{"class":34},[28,6328,6329],{"class":30,"line":1406},[28,6330,1642],{"class":34},[136,6332,6333],{},"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":23,"searchDepth":94,"depth":94,"links":6335},[6336,6337,6338,6339,6340,6341],{"id":5249,"depth":94,"text":5250},{"id":5338,"depth":94,"text":5339},{"id":5421,"depth":94,"text":5422},{"id":5647,"depth":94,"text":5648},{"id":5996,"depth":94,"text":5997},{"id":6153,"depth":94,"text":6154},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5241,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6348,"title":6349,"body":6350,"description":6357,"extension":142,"meta":7762,"navigation":144,"path":7763,"seo":7764,"stem":7765,"__hash__":7766},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6351,"toc":7752},[6352,6355,6358,6362,6524,6528,6531,6534,6537,6540,6680,6684,6687,6690,6693,6758,6762,6767,6834,6837,6841,6844,6855,6860,6880,6883,6888,6907,6910,6914,6933,6936,6940,7175,7179,7182,7185,7188,7350,7353,7357,7360,7366,7749],[10,6353,6349],{"id":6354},"_3指针",[14,6356,6357],{},"通过指针保存一个地址，指针就是个地址",[159,6359,6361],{"id":6360},"_31定义指针","3.1定义指针",[18,6363,6365],{"className":209,"code":6364,"language":211,"meta":23,"style":23},"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",[25,6366,6367,6375,6379,6384,6396,6401,6409,6419,6437,6457,6461,6466,6471,6476,6490,6506,6520],{"__ignoreMap":23},[28,6368,6369,6371,6373],{"class":30,"line":31},[28,6370,224],{"class":38},[28,6372,2050],{"class":2040},[28,6374,2053],{"class":34},[28,6376,6377],{"class":30,"line":94},[28,6378,1623],{"class":34},[28,6380,6381],{"class":30,"line":109},[28,6382,6383],{"class":105},"    \u002F\u002F1.定义指针\n",[28,6385,6386,6388,6390,6392,6394],{"class":30,"line":125},[28,6387,2062],{"class":38},[28,6389,1475],{"class":34},[28,6391,39],{"class":38},[28,6393,659],{"class":45},[28,6395,1367],{"class":34},[28,6397,6398],{"class":30,"line":131},[28,6399,6400],{"class":105},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[28,6402,6403,6406],{"class":30,"line":1291},[28,6404,6405],{"class":38},"    int*",[28,6407,6408],{"class":34},"p;\n",[28,6410,6411,6414,6417],{"class":30,"line":1297},[28,6412,6413],{"class":34},"    p",[28,6415,6416],{"class":38},"=&",[28,6418,6274],{"class":34},[28,6420,6421,6423,6425,6428,6431,6433,6435],{"class":30,"line":1388},[28,6422,1628],{"class":34},[28,6424,1248],{"class":38},[28,6426,6427],{"class":320},"\"a的地址为：\"",[28,6429,6430],{"class":38},"\u003C\u003C&",[28,6432,35],{"class":34},[28,6434,1248],{"class":38},[28,6436,1270],{"class":34},[28,6438,6439,6441,6443,6446,6448,6450,6452,6454],{"class":30,"line":1394},[28,6440,1628],{"class":34},[28,6442,1248],{"class":38},[28,6444,6445],{"class":320},"\"指针p为：\"",[28,6447,1248],{"class":38},[28,6449,14],{"class":34},[28,6451,1248],{"class":38},[28,6453,1315],{"class":34},[28,6455,6456],{"class":105},"\u002F\u002F指针p表示的就是a的地址\n",[28,6458,6459],{"class":30,"line":1406},[28,6460,2477],{"emptyLinePlaceholder":144},[28,6462,6463],{"class":30,"line":1689},[28,6464,6465],{"class":105},"    \u002F\u002F2.使用指针\n",[28,6467,6468],{"class":30,"line":1694},[28,6469,6470],{"class":105},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[28,6472,6473],{"class":30,"line":1700},[28,6474,6475],{"class":105},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[28,6477,6478,6481,6483,6485,6488],{"class":30,"line":1705},[28,6479,6480],{"class":38},"    *",[28,6482,14],{"class":34},[28,6484,39],{"class":38},[28,6486,6487],{"class":45},"1000",[28,6489,1367],{"class":34},[28,6491,6492,6494,6497,6499,6501,6503],{"class":30,"line":1719},[28,6493,1628],{"class":34},[28,6495,6496],{"class":38},"\u003C\u003C*",[28,6498,14],{"class":34},[28,6500,1248],{"class":38},[28,6502,1315],{"class":34},[28,6504,6505],{"class":105},"\u002F\u002F1000\n",[28,6507,6508,6510,6512,6514,6516,6518],{"class":30,"line":1724},[28,6509,1628],{"class":34},[28,6511,1248],{"class":38},[28,6513,35],{"class":34},[28,6515,1248],{"class":38},[28,6517,1315],{"class":34},[28,6519,6505],{"class":105},[28,6521,6522],{"class":30,"line":1730},[28,6523,1642],{"class":34},[159,6525,6527],{"id":6526},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6529,6530],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6532,6533],{},"在32位操作系统下：占用4个字节空间",[14,6535,6536],{},"在64位操作系统下：占用8个字节空间",[14,6538,6539],{},"上方是不管啥数据类型的",[18,6541,6543],{"className":209,"code":6542,"language":211,"meta":23,"style":23},"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",[25,6544,6545,6553,6557,6562,6574,6579,6584,6589,6602,6624,6650,6676],{"__ignoreMap":23},[28,6546,6547,6549,6551],{"class":30,"line":31},[28,6548,224],{"class":38},[28,6550,2050],{"class":2040},[28,6552,2053],{"class":34},[28,6554,6555],{"class":30,"line":94},[28,6556,1623],{"class":34},[28,6558,6559],{"class":30,"line":109},[28,6560,6561],{"class":105},"    \u002F\u002F指针所占内存空间\n",[28,6563,6564,6566,6568,6570,6572],{"class":30,"line":125},[28,6565,2062],{"class":38},[28,6567,1475],{"class":34},[28,6569,39],{"class":38},[28,6571,659],{"class":45},[28,6573,1367],{"class":34},[28,6575,6576],{"class":30,"line":131},[28,6577,6578],{"class":105},"    \u002F\u002Fint *p;\n",[28,6580,6581],{"class":30,"line":1291},[28,6582,6583],{"class":105},"    \u002F\u002Fp=&a;\n",[28,6585,6586],{"class":30,"line":1297},[28,6587,6588],{"class":105},"    \u002F\u002F上述可以写为以下：\n",[28,6590,6591,6593,6596,6598,6600],{"class":30,"line":1388},[28,6592,2062],{"class":38},[28,6594,6595],{"class":38}," *",[28,6597,14],{"class":34},[28,6599,6416],{"class":38},[28,6601,6274],{"class":34},[28,6603,6604,6607,6609,6612,6614,6617,6619,6621],{"class":30,"line":1394},[28,6605,6606],{"class":34},"    cout ",[28,6608,1248],{"class":38},[28,6610,6611],{"class":320},"\"sizeof(int *)\"",[28,6613,1449],{"class":38},[28,6615,6616],{"class":34},"(p)",[28,6618,1248],{"class":38},[28,6620,1315],{"class":34},[28,6622,6623],{"class":105},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[28,6625,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644,6647],{"class":30,"line":1406},[28,6627,6606],{"class":34},[28,6629,1248],{"class":38},[28,6631,6611],{"class":320},[28,6633,1449],{"class":38},[28,6635,221],{"class":34},[28,6637,224],{"class":38},[28,6639,6595],{"class":38},[28,6641,642],{"class":34},[28,6643,1248],{"class":38},[28,6645,6646],{"class":34},"endl",[28,6648,6649],{"class":105},"  \u002F\u002F4字节(32位的话)\n",[28,6651,6652,6654,6656,6659,6661,6663,6665,6667,6669,6671,6673],{"class":30,"line":1689},[28,6653,6606],{"class":34},[28,6655,1248],{"class":38},[28,6657,6658],{"class":320},"\"sizeof(char *)\"",[28,6660,1449],{"class":38},[28,6662,221],{"class":34},[28,6664,312],{"class":38},[28,6666,6595],{"class":38},[28,6668,642],{"class":34},[28,6670,1248],{"class":38},[28,6672,1315],{"class":34},[28,6674,6675],{"class":105}," \u002F\u002F4字节(32位的话)\n",[28,6677,6678],{"class":30,"line":1694},[28,6679,1642],{"class":34},[159,6681,6683],{"id":6682},"_33空指针","3.3空指针",[14,6685,6686],{},"空指针：指针变量指向内存中编号为0的空间",[14,6688,6689],{},"用途：初始化指针变量",[14,6691,6692],{},"注意：空指针指向的内存是不可以访问的",[18,6694,6696],{"className":209,"code":6695,"language":211,"meta":23,"style":23},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[25,6697,6698,6706,6710,6715,6729,6734,6749,6754],{"__ignoreMap":23},[28,6699,6700,6702,6704],{"class":30,"line":31},[28,6701,224],{"class":38},[28,6703,2050],{"class":2040},[28,6705,2053],{"class":34},[28,6707,6708],{"class":30,"line":94},[28,6709,1623],{"class":34},[28,6711,6712],{"class":30,"line":109},[28,6713,6714],{"class":105},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[28,6716,6717,6719,6721,6723,6725,6727],{"class":30,"line":125},[28,6718,2062],{"class":38},[28,6720,6595],{"class":38},[28,6722,14],{"class":34},[28,6724,39],{"class":38},[28,6726,2469],{"class":45},[28,6728,1367],{"class":34},[28,6730,6731],{"class":30,"line":131},[28,6732,6733],{"class":105},"    \u002F\u002F2.空指针不能进行访问\n",[28,6735,6736,6738,6740,6742,6744,6746],{"class":30,"line":1291},[28,6737,6480],{"class":38},[28,6739,14],{"class":34},[28,6741,39],{"class":38},[28,6743,525],{"class":45},[28,6745,274],{"class":34},[28,6747,6748],{"class":105},"\u002F\u002F直接报错，压根不能访问\n",[28,6750,6751],{"class":30,"line":1297},[28,6752,6753],{"class":105},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[28,6755,6756],{"class":30,"line":1388},[28,6757,1642],{"class":34},[159,6759,6761],{"id":6760},"_34野指针","3.4野指针",[14,6763,6764],{},[365,6765,6766],{},"指针变量指向非法的内存空间",[18,6768,6770],{"className":209,"code":6769,"language":211,"meta":23,"style":23},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[25,6771,6772,6780,6784,6813,6818,6830],{"__ignoreMap":23},[28,6773,6774,6776,6778],{"class":30,"line":31},[28,6775,224],{"class":38},[28,6777,2050],{"class":2040},[28,6779,2053],{"class":34},[28,6781,6782],{"class":30,"line":94},[28,6783,1623],{"class":34},[28,6785,6786,6788,6790,6792,6794,6796,6798,6800,6802,6805,6808,6810],{"class":30,"line":109},[28,6787,2062],{"class":38},[28,6789,6595],{"class":38},[28,6791,14],{"class":34},[28,6793,39],{"class":38},[28,6795,221],{"class":34},[28,6797,224],{"class":38},[28,6799,6595],{"class":38},[28,6801,642],{"class":34},[28,6803,6804],{"class":38},"0x",[28,6806,6807],{"class":45},"1100",[28,6809,274],{"class":34},[28,6811,6812],{"class":105}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[28,6814,6815],{"class":30,"line":125},[28,6816,6817],{"class":105},"    \u002F\u002F访问野指针报错\n",[28,6819,6820,6822,6824,6826,6828],{"class":30,"line":131},[28,6821,1628],{"class":34},[28,6823,6496],{"class":38},[28,6825,14],{"class":34},[28,6827,1248],{"class":38},[28,6829,1270],{"class":34},[28,6831,6832],{"class":30,"line":1291},[28,6833,1642],{"class":34},[14,6835,6836],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[159,6838,6840],{"id":6839},"_35const修饰指针","3.5const修饰指针",[14,6842,6843],{},"三种情况：",[1211,6845,6846,6849,6852],{},[174,6847,6848],{},"const修饰指针 常量指针",[174,6850,6851],{},"const修饰常量 指针常量",[174,6853,6854],{},"const即修饰指针，又修饰常量",[171,6856,6857],{},[174,6858,6859],{},"常量指针",[18,6861,6863],{"className":209,"code":6862,"language":211,"meta":23,"style":23},"const int *p=&a;\n",[25,6864,6865],{"__ignoreMap":23},[28,6866,6867,6870,6872,6874,6876,6878],{"class":30,"line":31},[28,6868,6869],{"class":38},"const",[28,6871,2459],{"class":38},[28,6873,6595],{"class":38},[28,6875,14],{"class":34},[28,6877,6416],{"class":38},[28,6879,6274],{"class":34},[14,6881,6882],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[171,6884,6885],{"start":94},[174,6886,6887],{},"指针常量",[18,6889,6891],{"className":209,"code":6890,"language":211,"meta":23,"style":23},"int *const p=&a;\n",[25,6892,6893],{"__ignoreMap":23},[28,6894,6895,6897,6900,6903,6905],{"class":30,"line":31},[28,6896,224],{"class":38},[28,6898,6899],{"class":38}," *const",[28,6901,6902],{"class":34}," p",[28,6904,6416],{"class":38},[28,6906,6274],{"class":34},[14,6908,6909],{},"指针的指向不可以改，指针指向的值可以改",[171,6911,6912],{"start":109},[174,6913,6854],{},[18,6915,6917],{"className":209,"code":6916,"language":211,"meta":23,"style":23},"const int *const p=&a;\n",[25,6918,6919],{"__ignoreMap":23},[28,6920,6921,6923,6925,6927,6929,6931],{"class":30,"line":31},[28,6922,6869],{"class":38},[28,6924,2459],{"class":38},[28,6926,6899],{"class":38},[28,6928,6902],{"class":34},[28,6930,6416],{"class":38},[28,6932,6274],{"class":34},[14,6934,6935],{},"指针的指向和指针指向的值都不可以改变",[159,6937,6939],{"id":6938},"_36指针和数组","3.6指针和数组",[18,6941,6943],{"className":209,"code":6942,"language":211,"meta":23,"style":23},"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",[25,6944,6945,6953,6957,6962,7016,7037,7053,7069,7080,7097,7102,7116,7142,7146,7158,7167,7171],{"__ignoreMap":23},[28,6946,6947,6949,6951],{"class":30,"line":31},[28,6948,224],{"class":38},[28,6950,2050],{"class":2040},[28,6952,2053],{"class":34},[28,6954,6955],{"class":30,"line":94},[28,6956,1623],{"class":34},[28,6958,6959],{"class":30,"line":109},[28,6960,6961],{"class":105},"    \u002F\u002F利用指针访问数组中的元素\n",[28,6963,6964,6966,6968,6970,6972,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014],{"class":30,"line":125},[28,6965,2062],{"class":38},[28,6967,4039],{"class":34},[28,6969,659],{"class":45},[28,6971,119],{"class":34},[28,6973,39],{"class":38},[28,6975,1102],{"class":34},[28,6977,46],{"class":45},[28,6979,49],{"class":34},[28,6981,52],{"class":45},[28,6983,49],{"class":34},[28,6985,57],{"class":45},[28,6987,49],{"class":34},[28,6989,507],{"class":45},[28,6991,49],{"class":34},[28,6993,533],{"class":45},[28,6995,49],{"class":34},[28,6997,558],{"class":45},[28,6999,49],{"class":34},[28,7001,583],{"class":45},[28,7003,49],{"class":34},[28,7005,608],{"class":45},[28,7007,49],{"class":34},[28,7009,633],{"class":45},[28,7011,49],{"class":34},[28,7013,659],{"class":45},[28,7015,4072],{"class":34},[28,7017,7018,7020,7022,7025,7027,7029,7031,7033,7035],{"class":30,"line":131},[28,7019,1628],{"class":34},[28,7021,1248],{"class":38},[28,7023,7024],{"class":320},"\"数组的第一个元素为：\"",[28,7026,1248],{"class":38},[28,7028,3983],{"class":34},[28,7030,407],{"class":45},[28,7032,119],{"class":34},[28,7034,1248],{"class":38},[28,7036,1270],{"class":34},[28,7038,7039,7041,7043,7045,7047,7050],{"class":30,"line":1291},[28,7040,2062],{"class":38},[28,7042,6595],{"class":38},[28,7044,14],{"class":34},[28,7046,39],{"class":38},[28,7048,7049],{"class":34},"arr;",[28,7051,7052],{"class":105},"\u002F\u002F注意数才要加取地址符号&\n",[28,7054,7055,7057,7059,7061,7063,7065,7067],{"class":30,"line":1297},[28,7056,1628],{"class":34},[28,7058,1248],{"class":38},[28,7060,7024],{"class":320},[28,7062,6496],{"class":38},[28,7064,14],{"class":34},[28,7066,1248],{"class":38},[28,7068,1270],{"class":34},[28,7070,7071,7073,7075,7077],{"class":30,"line":1388},[28,7072,6413],{"class":34},[28,7074,2369],{"class":38},[28,7076,274],{"class":34},[28,7078,7079],{"class":105}," \u002F\u002F让指针向后偏移4个字节\n",[28,7081,7082,7084,7086,7089,7091,7093,7095],{"class":30,"line":1394},[28,7083,1628],{"class":34},[28,7085,1248],{"class":38},[28,7087,7088],{"class":320},"\"数组的第二个元素为：\"",[28,7090,6496],{"class":38},[28,7092,14],{"class":34},[28,7094,1248],{"class":38},[28,7096,1270],{"class":34},[28,7098,7099],{"class":30,"line":1406},[28,7100,7101],{"class":105},"    \u002F\u002F利用指针遍历数组\n",[28,7103,7104,7106,7108,7111,7113],{"class":30,"line":1689},[28,7105,2062],{"class":38},[28,7107,6595],{"class":38},[28,7109,7110],{"class":34},"p2",[28,7112,39],{"class":38},[28,7114,7115],{"class":34},"arr;\n",[28,7117,7118,7120,7122,7124,7126,7128,7130,7132,7134,7136,7138,7140],{"class":30,"line":1694},[28,7119,3278],{"class":38},[28,7121,1735],{"class":34},[28,7123,224],{"class":38},[28,7125,3109],{"class":34},[28,7127,39],{"class":38},[28,7129,407],{"class":45},[28,7131,3116],{"class":34},[28,7133,99],{"class":38},[28,7135,659],{"class":45},[28,7137,3116],{"class":34},[28,7139,2369],{"class":38},[28,7141,227],{"class":34},[28,7143,7144],{"class":30,"line":1700},[28,7145,2107],{"class":34},[28,7147,7148,7150,7152,7154,7156],{"class":30,"line":1705},[28,7149,3528],{"class":34},[28,7151,6496],{"class":38},[28,7153,7110],{"class":34},[28,7155,1248],{"class":38},[28,7157,1270],{"class":34},[28,7159,7160,7163,7165],{"class":30,"line":1719},[28,7161,7162],{"class":34},"        p2",[28,7164,2369],{"class":38},[28,7166,1367],{"class":34},[28,7168,7169],{"class":30,"line":1724},[28,7170,2264],{"class":34},[28,7172,7173],{"class":30,"line":1730},[28,7174,1642],{"class":34},[159,7176,7178],{"id":7177},"_37指针和函数","3.7指针和函数",[14,7180,7181],{},"利用指针做函数参数，可以修改实参的值",[14,7183,7184],{},"值传递：只改变形参，不改变实参",[14,7186,7187],{},"地址传递：",[18,7189,7191],{"className":209,"code":7190,"language":211,"meta":23,"style":23},"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",[25,7192,7193,7218,7222,7234,7245,7255,7259,7267,7271,7283,7295,7300,7316,7331,7346],{"__ignoreMap":23},[28,7194,7195,7197,7199,7201,7203,7205,7208,7210,7212,7214,7216],{"class":30,"line":31},[28,7196,5441],{"class":38},[28,7198,5444],{"class":2040},[28,7200,221],{"class":34},[28,7202,224],{"class":38},[28,7204,6595],{"class":38},[28,7206,7207],{"class":5293},"p1",[28,7209,49],{"class":34},[28,7211,224],{"class":38},[28,7213,6595],{"class":38},[28,7215,7110],{"class":5293},[28,7217,227],{"class":34},[28,7219,7220],{"class":30,"line":94},[28,7221,1623],{"class":34},[28,7223,7224,7226,7228,7231],{"class":30,"line":109},[28,7225,2062],{"class":38},[28,7227,4332],{"class":34},[28,7229,7230],{"class":38},"=*",[28,7232,7233],{"class":34},"p1;\n",[28,7235,7236,7238,7240,7242],{"class":30,"line":125},[28,7237,6480],{"class":38},[28,7239,7207],{"class":34},[28,7241,7230],{"class":38},[28,7243,7244],{"class":34},"p2;\n",[28,7246,7247,7249,7251,7253],{"class":30,"line":131},[28,7248,6480],{"class":38},[28,7250,7110],{"class":34},[28,7252,39],{"class":38},[28,7254,4357],{"class":34},[28,7256,7257],{"class":30,"line":1291},[28,7258,1642],{"class":34},[28,7260,7261,7263,7265],{"class":30,"line":1297},[28,7262,224],{"class":38},[28,7264,2050],{"class":2040},[28,7266,2053],{"class":34},[28,7268,7269],{"class":30,"line":1388},[28,7270,1623],{"class":34},[28,7272,7273,7275,7277,7279,7281],{"class":30,"line":1394},[28,7274,2062],{"class":38},[28,7276,1475],{"class":34},[28,7278,39],{"class":38},[28,7280,659],{"class":45},[28,7282,1367],{"class":34},[28,7284,7285,7287,7289,7291,7293],{"class":30,"line":1406},[28,7286,2062],{"class":38},[28,7288,2910],{"class":34},[28,7290,39],{"class":38},[28,7292,102],{"class":45},[28,7294,1367],{"class":34},[28,7296,7297],{"class":30,"line":1689},[28,7298,7299],{"class":105},"    \u002F\u002F地址传递\n",[28,7301,7302,7304,7306,7308,7311,7313],{"class":30,"line":1694},[28,7303,5638],{"class":2040},[28,7305,221],{"class":34},[28,7307,567],{"class":38},[28,7309,7310],{"class":34},"a,",[28,7312,567],{"class":38},[28,7314,7315],{"class":34},"b);\n",[28,7317,7318,7320,7322,7324,7326,7328],{"class":30,"line":1700},[28,7319,1628],{"class":34},[28,7321,1248],{"class":38},[28,7323,35],{"class":34},[28,7325,1248],{"class":38},[28,7327,1315],{"class":34},[28,7329,7330],{"class":105},"\u002F\u002F20\n",[28,7332,7333,7335,7337,7339,7341,7343],{"class":30,"line":1705},[28,7334,1628],{"class":34},[28,7336,1248],{"class":38},[28,7338,477],{"class":34},[28,7340,1248],{"class":38},[28,7342,1315],{"class":34},[28,7344,7345],{"class":105},"\u002F\u002F10\n",[28,7347,7348],{"class":30,"line":1719},[28,7349,1642],{"class":34},[14,7351,7352],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[159,7354,7356],{"id":7355},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7358,7359],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7361,7362,7363,7365],{},"例如数组：int arr",[28,7364,659],{},"={4,3,6,9,1,2,10,8,7,5}",[18,7367,7369],{"className":209,"code":7368,"language":211,"meta":23,"style":23},"#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",[25,7370,7371,7377,7387,7411,7415,7446,7450,7484,7488,7506,7510,7521,7536,7551,7555,7559,7563,7567,7571,7579,7583,7588,7642,7654,7666,7671,7679,7683,7688,7713,7717,7732,7741,7745],{"__ignoreMap":23},[28,7372,7373,7375],{"class":30,"line":31},[28,7374,2026],{"class":38},[28,7376,2029],{"class":320},[28,7378,7379,7381,7383,7385],{"class":30,"line":94},[28,7380,2034],{"class":38},[28,7382,2037],{"class":38},[28,7384,2041],{"class":2040},[28,7386,1367],{"class":34},[28,7388,7389,7391,7394,7396,7398,7400,7402,7404,7406,7409],{"class":30,"line":109},[28,7390,5441],{"class":38},[28,7392,7393],{"class":2040}," bubbleSort",[28,7395,221],{"class":34},[28,7397,224],{"class":38},[28,7399,6595],{"class":38},[28,7401,14],{"class":5293},[28,7403,49],{"class":34},[28,7405,224],{"class":38},[28,7407,7408],{"class":5293}," len",[28,7410,227],{"class":34},[28,7412,7413],{"class":30,"line":125},[28,7414,1623],{"class":34},[28,7416,7417,7419,7421,7423,7425,7427,7429,7431,7433,7436,7438,7440,7442,7444],{"class":30,"line":131},[28,7418,3278],{"class":38},[28,7420,221],{"class":34},[28,7422,224],{"class":38},[28,7424,3109],{"class":34},[28,7426,39],{"class":38},[28,7428,407],{"class":45},[28,7430,3116],{"class":34},[28,7432,99],{"class":38},[28,7434,7435],{"class":34},"len",[28,7437,742],{"class":38},[28,7439,46],{"class":45},[28,7441,3116],{"class":34},[28,7443,2369],{"class":38},[28,7445,227],{"class":34},[28,7447,7448],{"class":30,"line":1291},[28,7449,2107],{"class":34},[28,7451,7452,7454,7456,7458,7460,7462,7464,7466,7468,7470,7472,7474,7476,7478,7480,7482],{"class":30,"line":1297},[28,7453,3480],{"class":38},[28,7455,221],{"class":34},[28,7457,224],{"class":38},[28,7459,3487],{"class":34},[28,7461,39],{"class":38},[28,7463,407],{"class":45},[28,7465,3494],{"class":34},[28,7467,99],{"class":38},[28,7469,7435],{"class":34},[28,7471,742],{"class":38},[28,7473,654],{"class":34},[28,7475,742],{"class":38},[28,7477,46],{"class":45},[28,7479,3494],{"class":34},[28,7481,2369],{"class":38},[28,7483,227],{"class":34},[28,7485,7486],{"class":30,"line":1388},[28,7487,2587],{"class":34},[28,7489,7490,7492,7495,7497,7500,7502,7504],{"class":30,"line":1394},[28,7491,4719],{"class":38},[28,7493,7494],{"class":34},"(p[j]",[28,7496,1164],{"class":38},[28,7498,7499],{"class":34},"p[j",[28,7501,693],{"class":38},[28,7503,46],{"class":45},[28,7505,4734],{"class":34},[28,7507,7508],{"class":30,"line":1406},[28,7509,4739],{"class":34},[28,7511,7512,7514,7516,7518],{"class":30,"line":1689},[28,7513,4744],{"class":38},[28,7515,4332],{"class":34},[28,7517,39],{"class":38},[28,7519,7520],{"class":34},"p[j];\n",[28,7522,7523,7526,7528,7530,7532,7534],{"class":30,"line":1694},[28,7524,7525],{"class":34},"                p[j]",[28,7527,39],{"class":38},[28,7529,7499],{"class":34},[28,7531,693],{"class":38},[28,7533,46],{"class":45},[28,7535,4767],{"class":34},[28,7537,7538,7541,7543,7545,7547,7549],{"class":30,"line":1700},[28,7539,7540],{"class":34},"                p[j",[28,7542,693],{"class":38},[28,7544,46],{"class":45},[28,7546,119],{"class":34},[28,7548,39],{"class":38},[28,7550,4357],{"class":34},[28,7552,7553],{"class":30,"line":1705},[28,7554,4787],{"class":34},[28,7556,7557],{"class":30,"line":1719},[28,7558,2606],{"class":34},[28,7560,7561],{"class":30,"line":1724},[28,7562,2264],{"class":34},[28,7564,7565],{"class":30,"line":1730},[28,7566,1642],{"class":34},[28,7568,7569],{"class":30,"line":1751},[28,7570,2477],{"emptyLinePlaceholder":144},[28,7572,7573,7575,7577],{"class":30,"line":1756},[28,7574,224],{"class":38},[28,7576,2050],{"class":2040},[28,7578,2053],{"class":34},[28,7580,7581],{"class":30,"line":1770},[28,7582,1623],{"class":34},[28,7584,7585],{"class":30,"line":1775},[28,7586,7587],{"class":105},"    \u002F\u002F 1.创建数组\n",[28,7589,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640],{"class":30,"line":1804},[28,7591,2062],{"class":38},[28,7593,4039],{"class":34},[28,7595,659],{"class":45},[28,7597,119],{"class":34},[28,7599,39],{"class":38},[28,7601,1102],{"class":34},[28,7603,507],{"class":45},[28,7605,49],{"class":34},[28,7607,57],{"class":45},[28,7609,49],{"class":34},[28,7611,558],{"class":45},[28,7613,49],{"class":34},[28,7615,633],{"class":45},[28,7617,49],{"class":34},[28,7619,46],{"class":45},[28,7621,49],{"class":34},[28,7623,52],{"class":45},[28,7625,49],{"class":34},[28,7627,659],{"class":45},[28,7629,49],{"class":34},[28,7631,608],{"class":45},[28,7633,49],{"class":34},[28,7635,583],{"class":45},[28,7637,49],{"class":34},[28,7639,533],{"class":45},[28,7641,4072],{"class":34},[28,7643,7644,7646,7648,7650,7652],{"class":30,"line":1809},[28,7645,2062],{"class":38},[28,7647,7408],{"class":34},[28,7649,39],{"class":38},[28,7651,659],{"class":45},[28,7653,1367],{"class":34},[28,7655,7656,7658,7660,7662,7664],{"class":30,"line":1826},[28,7657,2062],{"class":38},[28,7659,6595],{"class":38},[28,7661,14],{"class":34},[28,7663,39],{"class":38},[28,7665,7115],{"class":34},[28,7667,7668],{"class":30,"line":1831},[28,7669,7670],{"class":105},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[28,7672,7673,7676],{"class":30,"line":1836},[28,7674,7675],{"class":2040},"    bubbleSort",[28,7677,7678],{"class":34},"(p,len);\n",[28,7680,7681],{"class":30,"line":1841},[28,7682,2477],{"emptyLinePlaceholder":144},[28,7684,7685],{"class":30,"line":1855},[28,7686,7687],{"class":105},"    \u002F\u002F 3.打印排序后的数组\n",[28,7689,7690,7692,7694,7696,7698,7700,7702,7704,7706,7709,7711],{"class":30,"line":1860},[28,7691,3278],{"class":38},[28,7693,1735],{"class":34},[28,7695,224],{"class":38},[28,7697,3109],{"class":34},[28,7699,39],{"class":38},[28,7701,407],{"class":45},[28,7703,3291],{"class":34},[28,7705,99],{"class":38},[28,7707,7708],{"class":34},"len; i",[28,7710,2369],{"class":38},[28,7712,227],{"class":34},[28,7714,7715],{"class":30,"line":2654},[28,7716,2107],{"class":34},[28,7718,7719,7721,7723,7725,7727,7730],{"class":30,"line":2668},[28,7720,3528],{"class":34},[28,7722,6496],{"class":38},[28,7724,14],{"class":34},[28,7726,1248],{"class":38},[28,7728,7729],{"class":320},"\"\"",[28,7731,1367],{"class":34},[28,7733,7734,7737,7739],{"class":30,"line":2676},[28,7735,7736],{"class":34},"        p",[28,7738,2369],{"class":38},[28,7740,1367],{"class":34},[28,7742,7743],{"class":30,"line":2681},[28,7744,2264],{"class":34},[28,7746,7747],{"class":30,"line":2687},[28,7748,1642],{"class":34},[136,7750,7751],{},"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":23,"searchDepth":94,"depth":94,"links":7753},[7754,7755,7756,7757,7758,7759,7760,7761],{"id":6360,"depth":94,"text":6361},{"id":6526,"depth":94,"text":6527},{"id":6682,"depth":94,"text":6683},{"id":6760,"depth":94,"text":6761},{"id":6839,"depth":94,"text":6840},{"id":6938,"depth":94,"text":6939},{"id":7177,"depth":94,"text":7178},{"id":7355,"depth":94,"text":7356},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6349,"description":6357},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7768,"title":7769,"body":7770,"description":7777,"extension":142,"meta":10751,"navigation":144,"path":10752,"seo":10753,"stem":10754,"__hash__":10755},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7771,"toc":10742},[7772,7775,7778,7782,7785,7788,7799,8137,8140,8144,8147,8154,8409,8413,8416,8419,8574,8578,8581,8584,8790,8794,8797,9100,9103,9111,9115,9118,9269,9271,9282,9339,9343,9348,10005,10013,10016,10110,10113,10733,10739],[10,7773,7769],{"id":7774},"_4结构体",[14,7776,7777],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[159,7779,7781],{"id":7780},"_41结构体定义与使用","4.1结构体定义与使用",[14,7783,7784],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7786,7787],{},"通过结构体创建变量的方式：",[1211,7789,7790,7793,7796],{},[174,7791,7792],{},"struct 结构体名 变量名",[174,7794,7795],{},"struct 结构体名 变量名={成员1值，成员2值...}",[174,7797,7798],{},"定义结构体时顺便创建变量",[18,7800,7802],{"className":209,"code":7801,"language":211,"meta":23,"style":23},"#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",[25,7803,7804,7810,7820,7827,7832,7840,7844,7849,7853,7858,7863,7868,7875,7880,7887,7891,7898,7902,7906,7910,7914,7918,7922,7928,7932,7938,7946,7954,7958,7963,7968,7979,7984,7996,8007,8018,8023,8047,8052,8058,8085,8090,8096,8108,8120,8132],{"__ignoreMap":23},[28,7805,7806,7808],{"class":30,"line":31},[28,7807,2026],{"class":38},[28,7809,2029],{"class":320},[28,7811,7812,7814,7816,7818],{"class":30,"line":94},[28,7813,2034],{"class":38},[28,7815,2037],{"class":38},[28,7817,2041],{"class":2040},[28,7819,1367],{"class":34},[28,7821,7822,7824],{"class":30,"line":109},[28,7823,2026],{"class":38},[28,7825,7826],{"class":320},"\u003Cstring>\n",[28,7828,7829],{"class":30,"line":125},[28,7830,7831],{"class":105},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[28,7833,7834,7837],{"class":30,"line":131},[28,7835,7836],{"class":38},"struct",[28,7838,7839],{"class":2040}," Student\n",[28,7841,7842],{"class":30,"line":1291},[28,7843,1623],{"class":34},[28,7845,7846],{"class":30,"line":1297},[28,7847,7848],{"class":105},"    \u002F\u002F成员列表\n",[28,7850,7851],{"class":30,"line":1388},[28,7852,2477],{"emptyLinePlaceholder":144},[28,7854,7855],{"class":30,"line":1394},[28,7856,7857],{"class":105},"    \u002F\u002F姓名\n",[28,7859,7860],{"class":30,"line":1406},[28,7861,7862],{"class":34},"    string name;\n",[28,7864,7865],{"class":30,"line":1689},[28,7866,7867],{"class":105},"    \u002F\u002F年龄\n",[28,7869,7870,7872],{"class":30,"line":1694},[28,7871,2062],{"class":38},[28,7873,7874],{"class":34}," age;\n",[28,7876,7877],{"class":30,"line":1700},[28,7878,7879],{"class":105},"    \u002F\u002F分数\n",[28,7881,7882,7884],{"class":30,"line":1705},[28,7883,2062],{"class":38},[28,7885,7886],{"class":34}," score;\n",[28,7888,7889],{"class":30,"line":1719},[28,7890,4072],{"class":34},[28,7892,7893,7895],{"class":30,"line":1724},[28,7894,7836],{"class":38},[28,7896,7897],{"class":2040}," School\n",[28,7899,7900],{"class":30,"line":1730},[28,7901,1623],{"class":34},[28,7903,7904],{"class":30,"line":1751},[28,7905,7848],{"class":105},[28,7907,7908],{"class":30,"line":1756},[28,7909,2477],{"emptyLinePlaceholder":144},[28,7911,7912],{"class":30,"line":1770},[28,7913,7857],{"class":105},[28,7915,7916],{"class":30,"line":1775},[28,7917,7862],{"class":34},[28,7919,7920],{"class":30,"line":1804},[28,7921,7867],{"class":105},[28,7923,7924,7926],{"class":30,"line":1809},[28,7925,2062],{"class":38},[28,7927,7874],{"class":34},[28,7929,7930],{"class":30,"line":1826},[28,7931,7879],{"class":105},[28,7933,7934,7936],{"class":30,"line":1831},[28,7935,2062],{"class":38},[28,7937,7886],{"class":34},[28,7939,7940,7943],{"class":30,"line":1836},[28,7941,7942],{"class":34},"} s3;",[28,7944,7945],{"class":105}," \u002F\u002F创建结构体时就创建了变量\n",[28,7947,7948,7950,7952],{"class":30,"line":1841},[28,7949,224],{"class":38},[28,7951,2050],{"class":2040},[28,7953,2053],{"class":34},[28,7955,7956],{"class":30,"line":1855},[28,7957,1623],{"class":34},[28,7959,7960],{"class":30,"line":1860},[28,7961,7962],{"class":105},"    \u002F\u002F2.通过学生类型创建具体学生\n",[28,7964,7965],{"class":30,"line":2654},[28,7966,7967],{"class":105},"    \u002F\u002F2.1 struct Student s1;\n",[28,7969,7970,7973,7976],{"class":30,"line":2668},[28,7971,7972],{"class":38},"    struct",[28,7974,7975],{"class":2040}," Student",[28,7977,7978],{"class":34}," s1;\n",[28,7980,7981],{"class":30,"line":2676},[28,7982,7983],{"class":105},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[28,7985,7986,7989,7991,7994],{"class":30,"line":2681},[28,7987,7988],{"class":34},"    s1.name",[28,7990,39],{"class":38},[28,7992,7993],{"class":320},"\"张三\"",[28,7995,1367],{"class":34},[28,7997,7998,8001,8003,8005],{"class":30,"line":2687},[28,7999,8000],{"class":34},"    s1.age",[28,8002,39],{"class":38},[28,8004,860],{"class":45},[28,8006,1367],{"class":34},[28,8008,8009,8012,8014,8016],{"class":30,"line":2693},[28,8010,8011],{"class":34},"    s1.score",[28,8013,39],{"class":38},[28,8015,468],{"class":45},[28,8017,1367],{"class":34},[28,8019,8020],{"class":30,"line":2698},[28,8021,8022],{"class":105},"    \u002F\u002F输出结果\n",[28,8024,8026,8028,8030,8033,8035,8038,8040,8043,8045],{"class":30,"line":8025},37,[28,8027,1628],{"class":34},[28,8029,1248],{"class":38},[28,8031,8032],{"class":34},"s1.name",[28,8034,1248],{"class":38},[28,8036,8037],{"class":34},"s1.age",[28,8039,1248],{"class":38},[28,8041,8042],{"class":34},"s1.score",[28,8044,1248],{"class":38},[28,8046,1270],{"class":34},[28,8048,8050],{"class":30,"line":8049},38,[28,8051,2477],{"emptyLinePlaceholder":144},[28,8053,8055],{"class":30,"line":8054},39,[28,8056,8057],{"class":105},"    \u002F\u002F2.2 struct Student s2={...}\n",[28,8059,8061,8063,8065,8068,8070,8072,8075,8077,8079,8081,8083],{"class":30,"line":8060},40,[28,8062,7972],{"class":38},[28,8064,7975],{"class":2040},[28,8066,8067],{"class":34}," s2",[28,8069,39],{"class":38},[28,8071,1102],{"class":34},[28,8073,8074],{"class":320},"\"王五\"",[28,8076,49],{"class":34},[28,8078,860],{"class":45},[28,8080,49],{"class":34},[28,8082,468],{"class":45},[28,8084,4072],{"class":34},[28,8086,8088],{"class":30,"line":8087},41,[28,8089,2477],{"emptyLinePlaceholder":144},[28,8091,8093],{"class":30,"line":8092},42,[28,8094,8095],{"class":105},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[28,8097,8099,8102,8104,8106],{"class":30,"line":8098},43,[28,8100,8101],{"class":34},"    s3.name",[28,8103,39],{"class":38},[28,8105,3755],{"class":320},[28,8107,1367],{"class":34},[28,8109,8111,8114,8116,8118],{"class":30,"line":8110},44,[28,8112,8113],{"class":34},"    s3.age",[28,8115,39],{"class":38},[28,8117,860],{"class":45},[28,8119,1367],{"class":34},[28,8121,8123,8126,8128,8130],{"class":30,"line":8122},45,[28,8124,8125],{"class":34},"    s3.score",[28,8127,39],{"class":38},[28,8129,102],{"class":45},[28,8131,1367],{"class":34},[28,8133,8135],{"class":30,"line":8134},46,[28,8136,1642],{"class":34},[14,8138,8139],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[159,8141,8143],{"id":8142},"_42结构体数组","4.2结构体数组",[14,8145,8146],{},"将自定义的结构体放入到数组中方便维护",[14,8148,8149,8150,8153],{},"语法：struct 结构体名 数组名",[28,8151,8152],{},"元素个数","={ {}，{},...{} };",[18,8155,8157],{"className":209,"code":8156,"language":211,"meta":23,"style":23},"#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",[25,8158,8159,8165,8175,8181,8186,8192,8196,8200,8206,8212,8216,8220,8228,8232,8237,8252,8256,8272,8288,8292,8297,8313,8328,8343,8348,8374,8378,8401,8405],{"__ignoreMap":23},[28,8160,8161,8163],{"class":30,"line":31},[28,8162,2026],{"class":38},[28,8164,2029],{"class":320},[28,8166,8167,8169,8171,8173],{"class":30,"line":94},[28,8168,2034],{"class":38},[28,8170,2037],{"class":38},[28,8172,2041],{"class":2040},[28,8174,1367],{"class":34},[28,8176,8177,8179],{"class":30,"line":109},[28,8178,2026],{"class":38},[28,8180,7826],{"class":320},[28,8182,8183],{"class":30,"line":125},[28,8184,8185],{"class":105},"\u002F\u002F1.定义结构体\n",[28,8187,8188,8190],{"class":30,"line":131},[28,8189,7836],{"class":38},[28,8191,7839],{"class":2040},[28,8193,8194],{"class":30,"line":1291},[28,8195,1623],{"class":34},[28,8197,8198],{"class":30,"line":1297},[28,8199,7862],{"class":34},[28,8201,8202,8204],{"class":30,"line":1388},[28,8203,2062],{"class":38},[28,8205,7874],{"class":34},[28,8207,8208,8210],{"class":30,"line":1394},[28,8209,2062],{"class":38},[28,8211,7886],{"class":34},[28,8213,8214],{"class":30,"line":1406},[28,8215,2477],{"emptyLinePlaceholder":144},[28,8217,8218],{"class":30,"line":1689},[28,8219,4072],{"class":34},[28,8221,8222,8224,8226],{"class":30,"line":1694},[28,8223,224],{"class":38},[28,8225,2050],{"class":2040},[28,8227,2053],{"class":34},[28,8229,8230],{"class":30,"line":1700},[28,8231,1623],{"class":34},[28,8233,8234],{"class":30,"line":1705},[28,8235,8236],{"class":105},"    \u002F\u002F2.创建结构体数组\n",[28,8238,8239,8241,8243,8246,8248,8250],{"class":30,"line":1719},[28,8240,7972],{"class":38},[28,8242,7975],{"class":2040},[28,8244,8245],{"class":34}," stuArray[",[28,8247,52],{"class":45},[28,8249,119],{"class":34},[28,8251,4985],{"class":38},[28,8253,8254],{"class":30,"line":1724},[28,8255,2107],{"class":34},[28,8257,8258,8260,8262,8264,8266,8268,8270],{"class":30,"line":1730},[28,8259,4994],{"class":34},[28,8261,7993],{"class":320},[28,8263,49],{"class":34},[28,8265,860],{"class":45},[28,8267,49],{"class":34},[28,8269,525],{"class":45},[28,8271,5007],{"class":34},[28,8273,8274,8276,8278,8280,8282,8284,8286],{"class":30,"line":1751},[28,8275,4994],{"class":34},[28,8277,3755],{"class":320},[28,8279,49],{"class":34},[28,8281,785],{"class":45},[28,8283,49],{"class":34},[28,8285,785],{"class":45},[28,8287,1642],{"class":34},[28,8289,8290],{"class":30,"line":1756},[28,8291,2264],{"class":34},[28,8293,8294],{"class":30,"line":1770},[28,8295,8296],{"class":105},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[28,8298,8299,8302,8304,8307,8309,8311],{"class":30,"line":1775},[28,8300,8301],{"class":34},"    stuArray[",[28,8303,46],{"class":45},[28,8305,8306],{"class":34},"].name",[28,8308,39],{"class":38},[28,8310,3778],{"class":320},[28,8312,1367],{"class":34},[28,8314,8315,8317,8319,8322,8324,8326],{"class":30,"line":1804},[28,8316,8301],{"class":34},[28,8318,46],{"class":45},[28,8320,8321],{"class":34},"].age",[28,8323,39],{"class":38},[28,8325,52],{"class":45},[28,8327,1367],{"class":34},[28,8329,8330,8332,8334,8337,8339,8341],{"class":30,"line":1809},[28,8331,8301],{"class":34},[28,8333,46],{"class":45},[28,8335,8336],{"class":34},"].score",[28,8338,39],{"class":38},[28,8340,52],{"class":45},[28,8342,1367],{"class":34},[28,8344,8345],{"class":30,"line":1826},[28,8346,8347],{"class":105},"    \u002F\u002F4.遍历结构体数组\n",[28,8349,8350,8352,8354,8356,8358,8360,8362,8364,8366,8368,8370,8372],{"class":30,"line":1831},[28,8351,3278],{"class":38},[28,8353,1735],{"class":34},[28,8355,224],{"class":38},[28,8357,3109],{"class":34},[28,8359,39],{"class":38},[28,8361,407],{"class":45},[28,8363,3116],{"class":34},[28,8365,99],{"class":38},[28,8367,52],{"class":45},[28,8369,3116],{"class":34},[28,8371,2369],{"class":38},[28,8373,227],{"class":34},[28,8375,8376],{"class":30,"line":1836},[28,8377,2107],{"class":34},[28,8379,8380,8382,8384,8387,8389,8392,8394,8397,8399],{"class":30,"line":1841},[28,8381,3528],{"class":34},[28,8383,1248],{"class":38},[28,8385,8386],{"class":34},"stuArray[i].name",[28,8388,1248],{"class":38},[28,8390,8391],{"class":34},"stuArray[i].age",[28,8393,1248],{"class":38},[28,8395,8396],{"class":34},"stuArray[i].score",[28,8398,1248],{"class":38},[28,8400,1270],{"class":34},[28,8402,8403],{"class":30,"line":1855},[28,8404,2264],{"class":34},[28,8406,8407],{"class":30,"line":1860},[28,8408,1642],{"class":34},[159,8410,8412],{"id":8411},"_43结构体指针","4.3结构体指针",[14,8414,8415],{},"作用：通过指针访问结构体中的成员",[14,8417,8418],{},"利用操作符->可以通过结构体指针访问结构体属性",[18,8420,8422],{"className":209,"code":8421,"language":211,"meta":23,"style":23},"#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",[25,8423,8424,8430,8440,8446,8450,8456,8460,8464,8470,8476,8480,8488,8492,8497,8522,8527,8542,8547,8570],{"__ignoreMap":23},[28,8425,8426,8428],{"class":30,"line":31},[28,8427,2026],{"class":38},[28,8429,2029],{"class":320},[28,8431,8432,8434,8436,8438],{"class":30,"line":94},[28,8433,2034],{"class":38},[28,8435,2037],{"class":38},[28,8437,2041],{"class":2040},[28,8439,1367],{"class":34},[28,8441,8442,8444],{"class":30,"line":109},[28,8443,2026],{"class":38},[28,8445,7826],{"class":320},[28,8447,8448],{"class":30,"line":125},[28,8449,8185],{"class":105},[28,8451,8452,8454],{"class":30,"line":131},[28,8453,7836],{"class":38},[28,8455,7839],{"class":2040},[28,8457,8458],{"class":30,"line":1291},[28,8459,1623],{"class":34},[28,8461,8462],{"class":30,"line":1297},[28,8463,7862],{"class":34},[28,8465,8466,8468],{"class":30,"line":1388},[28,8467,2062],{"class":38},[28,8469,7874],{"class":34},[28,8471,8472,8474],{"class":30,"line":1394},[28,8473,2062],{"class":38},[28,8475,7886],{"class":34},[28,8477,8478],{"class":30,"line":1406},[28,8479,4072],{"class":34},[28,8481,8482,8484,8486],{"class":30,"line":1689},[28,8483,224],{"class":38},[28,8485,2050],{"class":2040},[28,8487,2053],{"class":34},[28,8489,8490],{"class":30,"line":1694},[28,8491,1623],{"class":34},[28,8493,8494],{"class":30,"line":1700},[28,8495,8496],{"class":105},"    \u002F\u002F创建学生结构体变量\n",[28,8498,8499,8501,8503,8506,8508,8510,8512,8514,8516,8518,8520],{"class":30,"line":1705},[28,8500,7972],{"class":38},[28,8502,7975],{"class":2040},[28,8504,8505],{"class":34}," s",[28,8507,39],{"class":38},[28,8509,1102],{"class":34},[28,8511,7993],{"class":320},[28,8513,49],{"class":34},[28,8515,860],{"class":45},[28,8517,49],{"class":34},[28,8519,1799],{"class":45},[28,8521,4072],{"class":34},[28,8523,8524],{"class":30,"line":1719},[28,8525,8526],{"class":105},"    \u002F\u002F通过指针指向结构体变量\n",[28,8528,8529,8531,8533,8535,8537,8539],{"class":30,"line":1724},[28,8530,7972],{"class":38},[28,8532,7975],{"class":2040},[28,8534,6595],{"class":38},[28,8536,14],{"class":34},[28,8538,6416],{"class":38},[28,8540,8541],{"class":34},"s\n",[28,8543,8544],{"class":30,"line":1730},[28,8545,8546],{"class":105},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[28,8548,8549,8551,8553,8556,8558,8561,8563,8566,8568],{"class":30,"line":1751},[28,8550,1628],{"class":34},[28,8552,1248],{"class":38},[28,8554,8555],{"class":34},"p->name",[28,8557,1248],{"class":38},[28,8559,8560],{"class":34},"p->age",[28,8562,1248],{"class":38},[28,8564,8565],{"class":34},"p->score",[28,8567,1248],{"class":38},[28,8569,1270],{"class":34},[28,8571,8572],{"class":30,"line":1756},[28,8573,1642],{"class":34},[159,8575,8577],{"id":8576},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8579,8580],{},"作用：结构体中的成员可以是另一个结构体",[14,8582,8583],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[18,8585,8587],{"className":209,"code":8586,"language":211,"meta":23,"style":23},"#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",[25,8588,8589,8595,8605,8611,8616,8624,8628,8632,8638,8644,8648,8653,8660,8664,8671,8675,8681,8686,8690,8698,8702,8707,8712,8717,8728,8740,8751,8764,8775,8786],{"__ignoreMap":23},[28,8590,8591,8593],{"class":30,"line":31},[28,8592,2026],{"class":38},[28,8594,2029],{"class":320},[28,8596,8597,8599,8601,8603],{"class":30,"line":94},[28,8598,2034],{"class":38},[28,8600,2037],{"class":38},[28,8602,2041],{"class":2040},[28,8604,1367],{"class":34},[28,8606,8607,8609],{"class":30,"line":109},[28,8608,2026],{"class":38},[28,8610,7826],{"class":320},[28,8612,8613],{"class":30,"line":125},[28,8614,8615],{"class":105},"\u002F\u002F定义学生结构体\n",[28,8617,8618,8620,8622],{"class":30,"line":131},[28,8619,7836],{"class":38},[28,8621,7975],{"class":2040},[28,8623,2751],{"class":34},[28,8625,8626],{"class":30,"line":1291},[28,8627,1623],{"class":34},[28,8629,8630],{"class":30,"line":1297},[28,8631,7862],{"class":34},[28,8633,8634,8636],{"class":30,"line":1388},[28,8635,2062],{"class":38},[28,8637,7874],{"class":34},[28,8639,8640,8642],{"class":30,"line":1394},[28,8641,2062],{"class":38},[28,8643,7886],{"class":34},[28,8645,8646],{"class":30,"line":1406},[28,8647,1642],{"class":34},[28,8649,8650],{"class":30,"line":1689},[28,8651,8652],{"class":105},"\u002F\u002F定义老师结构体\n",[28,8654,8655,8657],{"class":30,"line":1694},[28,8656,7836],{"class":38},[28,8658,8659],{"class":2040}," Teacher\n",[28,8661,8662],{"class":30,"line":1700},[28,8663,1623],{"class":34},[28,8665,8666,8668],{"class":30,"line":1705},[28,8667,2062],{"class":38},[28,8669,8670],{"class":34}," id;\n",[28,8672,8673],{"class":30,"line":1719},[28,8674,7862],{"class":34},[28,8676,8677,8679],{"class":30,"line":1724},[28,8678,2062],{"class":38},[28,8680,7874],{"class":34},[28,8682,8683],{"class":30,"line":1730},[28,8684,8685],{"class":34},"    Student stu;\n",[28,8687,8688],{"class":30,"line":1751},[28,8689,1642],{"class":34},[28,8691,8692,8694,8696],{"class":30,"line":1756},[28,8693,224],{"class":38},[28,8695,2050],{"class":2040},[28,8697,6055],{"class":34},[28,8699,8700],{"class":30,"line":1770},[28,8701,1623],{"class":34},[28,8703,8704],{"class":30,"line":1775},[28,8705,8706],{"class":105},"    \u002F\u002F结构体嵌套结构体\n",[28,8708,8709],{"class":30,"line":1804},[28,8710,8711],{"class":105},"    \u002F\u002F创建老师\n",[28,8713,8714],{"class":30,"line":1809},[28,8715,8716],{"class":34},"    Teacher t;\n",[28,8718,8719,8722,8724,8726],{"class":30,"line":1826},[28,8720,8721],{"class":34},"    t.id",[28,8723,39],{"class":38},[28,8725,525],{"class":45},[28,8727,1367],{"class":34},[28,8729,8730,8733,8735,8738],{"class":30,"line":1831},[28,8731,8732],{"class":34},"    t.name",[28,8734,39],{"class":38},[28,8736,8737],{"class":320},"\"老王\"",[28,8739,1367],{"class":34},[28,8741,8742,8745,8747,8749],{"class":30,"line":1836},[28,8743,8744],{"class":34},"    t.age",[28,8746,39],{"class":38},[28,8748,860],{"class":45},[28,8750,1367],{"class":34},[28,8752,8753,8756,8758,8761],{"class":30,"line":1841},[28,8754,8755],{"class":34},"    t.stu.name",[28,8757,39],{"class":38},[28,8759,8760],{"class":320},"\"小王\"",[28,8762,8763],{"class":34},"；\n",[28,8765,8766,8769,8771,8773],{"class":30,"line":1855},[28,8767,8768],{"class":34},"    t.stu.age",[28,8770,39],{"class":38},[28,8772,102],{"class":45},[28,8774,1367],{"class":34},[28,8776,8777,8780,8782,8784],{"class":30,"line":1860},[28,8778,8779],{"class":34},"    t.stu.score",[28,8781,39],{"class":38},[28,8783,558],{"class":45},[28,8785,1367],{"class":34},[28,8787,8788],{"class":30,"line":2654},[28,8789,1642],{"class":34},[159,8791,8793],{"id":8792},"_45结构体做函数参数","4.5结构体做函数参数",[14,8795,8796],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[18,8798,8800],{"className":209,"code":8799,"language":211,"meta":23,"style":23},"#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",[25,8801,8802,8808,8818,8824,8830,8834,8838,8844,8850,8854,8859,8864,8881,8885,8918,8922,8927,8946,8950,8981,8985,8993,8997,9006,9018,9030,9042,9055,9063,9076,9088,9096],{"__ignoreMap":23},[28,8803,8804,8806],{"class":30,"line":31},[28,8805,2026],{"class":38},[28,8807,2029],{"class":320},[28,8809,8810,8812,8814,8816],{"class":30,"line":94},[28,8811,2034],{"class":38},[28,8813,2037],{"class":38},[28,8815,2041],{"class":2040},[28,8817,1367],{"class":34},[28,8819,8820,8822],{"class":30,"line":109},[28,8821,2026],{"class":38},[28,8823,7826],{"class":320},[28,8825,8826,8828],{"class":30,"line":125},[28,8827,7836],{"class":38},[28,8829,7839],{"class":2040},[28,8831,8832],{"class":30,"line":131},[28,8833,1623],{"class":34},[28,8835,8836],{"class":30,"line":1291},[28,8837,7862],{"class":34},[28,8839,8840,8842],{"class":30,"line":1297},[28,8841,2062],{"class":38},[28,8843,7874],{"class":34},[28,8845,8846,8848],{"class":30,"line":1388},[28,8847,2062],{"class":38},[28,8849,7886],{"class":34},[28,8851,8852],{"class":30,"line":1394},[28,8853,4072],{"class":34},[28,8855,8856],{"class":30,"line":1406},[28,8857,8858],{"class":105},"\u002F\u002F打印学生信息的函数\n",[28,8860,8861],{"class":30,"line":1689},[28,8862,8863],{"class":105},"\u002F\u002F值传递\n",[28,8865,8866,8868,8871,8873,8875,8877,8879],{"class":30,"line":1694},[28,8867,5441],{"class":38},[28,8869,8870],{"class":2040}," printStudent1",[28,8872,221],{"class":34},[28,8874,7836],{"class":38},[28,8876,7975],{"class":2040},[28,8878,8505],{"class":5293},[28,8880,227],{"class":34},[28,8882,8883],{"class":30,"line":1700},[28,8884,1623],{"class":34},[28,8886,8887,8889,8891,8894,8896,8899,8901,8904,8906,8908,8910,8913,8915],{"class":30,"line":1705},[28,8888,6606],{"class":34},[28,8890,1248],{"class":38},[28,8892,8893],{"class":34}," s.name ",[28,8895,1248],{"class":38},[28,8897,8898],{"class":320}," \" \"",[28,8900,1521],{"class":38},[28,8902,8903],{"class":34}," s.age ",[28,8905,1248],{"class":38},[28,8907,8898],{"class":320},[28,8909,1521],{"class":38},[28,8911,8912],{"class":34}," s.score ",[28,8914,1248],{"class":38},[28,8916,8917],{"class":34}," endl;\n",[28,8919,8920],{"class":30,"line":1719},[28,8921,1642],{"class":34},[28,8923,8924],{"class":30,"line":1724},[28,8925,8926],{"class":105},"\u002F\u002F地址传递\n",[28,8928,8929,8931,8934,8936,8938,8940,8942,8944],{"class":30,"line":1730},[28,8930,5441],{"class":38},[28,8932,8933],{"class":2040}," printStudent2",[28,8935,221],{"class":34},[28,8937,7836],{"class":38},[28,8939,7975],{"class":2040},[28,8941,6595],{"class":38},[28,8943,905],{"class":5293},[28,8945,227],{"class":34},[28,8947,8948],{"class":30,"line":1751},[28,8949,1623],{"class":34},[28,8951,8952,8954,8956,8959,8961,8963,8965,8968,8970,8972,8974,8977,8979],{"class":30,"line":1756},[28,8953,6606],{"class":34},[28,8955,1248],{"class":38},[28,8957,8958],{"class":34}," s->name ",[28,8960,1248],{"class":38},[28,8962,8898],{"class":320},[28,8964,1521],{"class":38},[28,8966,8967],{"class":34}," s->age ",[28,8969,1248],{"class":38},[28,8971,8898],{"class":320},[28,8973,1521],{"class":38},[28,8975,8976],{"class":34}," s->score ",[28,8978,1248],{"class":38},[28,8980,8917],{"class":34},[28,8982,8983],{"class":30,"line":1770},[28,8984,1642],{"class":34},[28,8986,8987,8989,8991],{"class":30,"line":1775},[28,8988,224],{"class":38},[28,8990,2050],{"class":2040},[28,8992,2053],{"class":34},[28,8994,8995],{"class":30,"line":1804},[28,8996,1623],{"class":34},[28,8998,8999,9001,9003],{"class":30,"line":1809},[28,9000,7972],{"class":38},[28,9002,7975],{"class":2040},[28,9004,9005],{"class":34}," s;\n",[28,9007,9008,9011,9013,9016],{"class":30,"line":1826},[28,9009,9010],{"class":34},"    s.name ",[28,9012,39],{"class":38},[28,9014,9015],{"class":320}," \"张三\"",[28,9017,1367],{"class":34},[28,9019,9020,9023,9025,9028],{"class":30,"line":1831},[28,9021,9022],{"class":34},"    s.age ",[28,9024,39],{"class":38},[28,9026,9027],{"class":45}," 20",[28,9029,1367],{"class":34},[28,9031,9032,9035,9037,9040],{"class":30,"line":1836},[28,9033,9034],{"class":34},"    s.score ",[28,9036,39],{"class":38},[28,9038,9039],{"class":45}," 85",[28,9041,1367],{"class":34},[28,9043,9044,9046,9048,9051,9053],{"class":30,"line":1841},[28,9045,1628],{"class":34},[28,9047,1248],{"class":38},[28,9049,9050],{"class":320},"\"值传递:\"",[28,9052,1248],{"class":38},[28,9054,1270],{"class":34},[28,9056,9057,9060],{"class":30,"line":1855},[28,9058,9059],{"class":2040},"    printStudent1",[28,9061,9062],{"class":34},"(s);\n",[28,9064,9065,9067,9069,9072,9074],{"class":30,"line":1860},[28,9066,1628],{"class":34},[28,9068,1248],{"class":38},[28,9070,9071],{"class":320},"\"地址传递:\"",[28,9073,1248],{"class":38},[28,9075,1270],{"class":34},[28,9077,9078,9081,9083,9085],{"class":30,"line":2654},[28,9079,9080],{"class":2040},"    printStudent2",[28,9082,221],{"class":34},[28,9084,567],{"class":38},[28,9086,9087],{"class":34},"s); \n",[28,9089,9090,9092,9094],{"class":30,"line":2668},[28,9091,4167],{"class":38},[28,9093,4170],{"class":45},[28,9095,1367],{"class":34},[28,9097,9098],{"class":30,"line":2676},[28,9099,1642],{"class":34},[14,9101,9102],{},"注意：",[1211,9104,9105,9108],{},[174,9106,9107],{},"1.先定义结构体，不要在函数中写结构体的定义",[174,9109,9110],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[159,9112,9114],{"id":9113},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9116,9117],{},"用const防止误操作",[18,9119,9121],{"className":209,"code":9120,"language":211,"meta":23,"style":23},"#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",[25,9122,9123,9129,9139,9145,9150,9154,9158,9164,9170,9174,9190,9194,9217,9221,9229,9233,9254,9261,9265],{"__ignoreMap":23},[28,9124,9125,9127],{"class":30,"line":31},[28,9126,2026],{"class":38},[28,9128,2029],{"class":320},[28,9130,9131,9133,9135,9137],{"class":30,"line":94},[28,9132,2034],{"class":38},[28,9134,2037],{"class":38},[28,9136,2041],{"class":2040},[28,9138,1367],{"class":34},[28,9140,9141,9143],{"class":30,"line":109},[28,9142,2026],{"class":38},[28,9144,7826],{"class":320},[28,9146,9147],{"class":30,"line":125},[28,9148,9149],{"class":34},"sctuct Student\n",[28,9151,9152],{"class":30,"line":131},[28,9153,1623],{"class":34},[28,9155,9156],{"class":30,"line":1291},[28,9157,7862],{"class":34},[28,9159,9160,9162],{"class":30,"line":1297},[28,9161,2062],{"class":38},[28,9163,7874],{"class":34},[28,9165,9166,9168],{"class":30,"line":1388},[28,9167,2062],{"class":38},[28,9169,7886],{"class":34},[28,9171,9172],{"class":30,"line":1394},[28,9173,4072],{"class":34},[28,9175,9176,9178,9181,9183,9186,9188],{"class":30,"line":1406},[28,9177,5441],{"class":38},[28,9179,9180],{"class":2040}," printStudents",[28,9182,221],{"class":34},[28,9184,9185],{"class":2040},"student",[28,9187,8505],{"class":5293},[28,9189,227],{"class":34},[28,9191,9192],{"class":30,"line":1689},[28,9193,1623],{"class":34},[28,9195,9196,9198,9200,9203,9205,9208,9210,9213,9215],{"class":30,"line":1694},[28,9197,1628],{"class":34},[28,9199,1248],{"class":38},[28,9201,9202],{"class":34},"s.name",[28,9204,1248],{"class":38},[28,9206,9207],{"class":34},"s.age",[28,9209,1248],{"class":38},[28,9211,9212],{"class":34},"s.score",[28,9214,1248],{"class":38},[28,9216,1270],{"class":34},[28,9218,9219],{"class":30,"line":1700},[28,9220,1642],{"class":34},[28,9222,9223,9225,9227],{"class":30,"line":1705},[28,9224,224],{"class":38},[28,9226,2050],{"class":2040},[28,9228,6055],{"class":34},[28,9230,9231],{"class":30,"line":1719},[28,9232,1623],{"class":34},[28,9234,9235,9238,9240,9242,9244,9246,9248,9250,9252],{"class":30,"line":1724},[28,9236,9237],{"class":34},"    Student s",[28,9239,39],{"class":38},[28,9241,1102],{"class":34},[28,9243,7993],{"class":320},[28,9245,49],{"class":34},[28,9247,860],{"class":45},[28,9249,49],{"class":34},[28,9251,860],{"class":45},[28,9253,4072],{"class":34},[28,9255,9256,9259],{"class":30,"line":1730},[28,9257,9258],{"class":2040},"    printStudent",[28,9260,9062],{"class":34},[28,9262,9263],{"class":30,"line":1751},[28,9264,2477],{"emptyLinePlaceholder":144},[28,9266,9267],{"class":30,"line":1756},[28,9268,1642],{"class":34},[14,9270,9102],{},[1211,9272,9273,9276,9279],{},[174,9274,9275],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[174,9277,9278],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[174,9280,9281],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[18,9283,9285],{"className":209,"code":9284,"language":211,"meta":23,"style":23},"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",[25,9286,9287,9306,9310,9315,9335],{"__ignoreMap":23},[28,9288,9289,9291,9293,9295,9297,9300,9302,9304],{"class":30,"line":31},[28,9290,5441],{"class":38},[28,9292,9180],{"class":2040},[28,9294,221],{"class":34},[28,9296,6869],{"class":38},[28,9298,9299],{"class":2040}," student",[28,9301,6595],{"class":38},[28,9303,905],{"class":5293},[28,9305,227],{"class":34},[28,9307,9308],{"class":30,"line":94},[28,9309,1623],{"class":34},[28,9311,9312],{"class":30,"line":109},[28,9313,9314],{"class":105},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[28,9316,9317,9319,9321,9323,9325,9327,9329,9331,9333],{"class":30,"line":125},[28,9318,1628],{"class":34},[28,9320,1248],{"class":38},[28,9322,9202],{"class":34},[28,9324,1248],{"class":38},[28,9326,9207],{"class":34},[28,9328,1248],{"class":38},[28,9330,9212],{"class":34},[28,9332,1248],{"class":38},[28,9334,1270],{"class":34},[28,9336,9337],{"class":30,"line":131},[28,9338,1642],{"class":34},[159,9340,9342],{"id":9341},"_47案例","4.7案例",[171,9344,9345],{},[174,9346,9347],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[18,9349,9351],{"className":209,"code":9350,"language":211,"meta":23,"style":23},"#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",[25,9352,9353,9359,9369,9375,9382,9386,9392,9396,9401,9407,9413,9417,9421,9427,9431,9436,9441,9454,9458,9463,9489,9493,9505,9532,9536,9548,9558,9562,9567,9596,9600,9612,9621,9648,9659,9669,9673,9677,9681,9686,9710,9714,9738,9742,9761,9787,9791,9816,9839,9863,9868,9873,9878,9887,9892,9898,9919,9925,9939,9945,9972,9981,9987,9995,10000],{"__ignoreMap":23},[28,9354,9355,9357],{"class":30,"line":31},[28,9356,2026],{"class":38},[28,9358,2029],{"class":320},[28,9360,9361,9363,9365,9367],{"class":30,"line":94},[28,9362,2034],{"class":38},[28,9364,2037],{"class":38},[28,9366,2041],{"class":2040},[28,9368,1367],{"class":34},[28,9370,9371,9373],{"class":30,"line":109},[28,9372,2026],{"class":38},[28,9374,7826],{"class":320},[28,9376,9377,9379],{"class":30,"line":125},[28,9378,2026],{"class":38},[28,9380,9381],{"class":320},"\u003Cctime>\n",[28,9383,9384],{"class":30,"line":131},[28,9385,8615],{"class":105},[28,9387,9388,9390],{"class":30,"line":1291},[28,9389,7836],{"class":38},[28,9391,7839],{"class":2040},[28,9393,9394],{"class":30,"line":1297},[28,9395,1623],{"class":34},[28,9397,9398],{"class":30,"line":1388},[28,9399,9400],{"class":34},"    string sName;\n",[28,9402,9403,9405],{"class":30,"line":1394},[28,9404,2062],{"class":38},[28,9406,7874],{"class":34},[28,9408,9409,9411],{"class":30,"line":1406},[28,9410,2062],{"class":38},[28,9412,7886],{"class":34},[28,9414,9415],{"class":30,"line":1689},[28,9416,4072],{"class":34},[28,9418,9419],{"class":30,"line":1694},[28,9420,8652],{"class":105},[28,9422,9423,9425],{"class":30,"line":1700},[28,9424,7836],{"class":38},[28,9426,8659],{"class":2040},[28,9428,9429],{"class":30,"line":1705},[28,9430,1623],{"class":34},[28,9432,9433],{"class":30,"line":1719},[28,9434,9435],{"class":34},"    string tName;\n",[28,9437,9438],{"class":30,"line":1724},[28,9439,9440],{"class":105},"    \u002F\u002F学生数组\n",[28,9442,9443,9445,9447,9450,9452],{"class":30,"line":1730},[28,9444,7972],{"class":38},[28,9446,7975],{"class":2040},[28,9448,9449],{"class":34}," sArray[",[28,9451,533],{"class":45},[28,9453,4767],{"class":34},[28,9455,9456],{"class":30,"line":1751},[28,9457,4072],{"class":34},[28,9459,9460],{"class":30,"line":1756},[28,9461,9462],{"class":105},"\u002F\u002F给老师和学生赋值的函数\n",[28,9464,9465,9467,9470,9472,9474,9477,9480,9483,9485,9487],{"class":30,"line":1770},[28,9466,5441],{"class":38},[28,9468,9469],{"class":2040}," allocateSpace",[28,9471,221],{"class":34},[28,9473,7836],{"class":38},[28,9475,9476],{"class":2040}," Teacher",[28,9478,9479],{"class":5293}," tArray",[28,9481,9482],{"class":34},"[],",[28,9484,224],{"class":38},[28,9486,7408],{"class":5293},[28,9488,227],{"class":34},[28,9490,9491],{"class":30,"line":1775},[28,9492,1623],{"class":34},[28,9494,9495,9498,9500,9503],{"class":30,"line":1804},[28,9496,9497],{"class":34},"    string nameSeed",[28,9499,39],{"class":38},[28,9501,9502],{"class":320},"\"ABCDE\"",[28,9504,1367],{"class":34},[28,9506,9507,9509,9511,9513,9516,9518,9520,9523,9525,9528,9530],{"class":30,"line":1809},[28,9508,3278],{"class":38},[28,9510,1735],{"class":34},[28,9512,224],{"class":38},[28,9514,9515],{"class":34}," i ",[28,9517,39],{"class":38},[28,9519,4170],{"class":45},[28,9521,9522],{"class":34},"; i ",[28,9524,99],{"class":38},[28,9526,9527],{"class":34}," len; i",[28,9529,2369],{"class":38},[28,9531,227],{"class":34},[28,9533,9534],{"class":30,"line":1826},[28,9535,2107],{"class":34},[28,9537,9538,9541,9543,9546],{"class":30,"line":1831},[28,9539,9540],{"class":34},"        tArray[i].tName ",[28,9542,39],{"class":38},[28,9544,9545],{"class":320}," \"Teacher_\"",[28,9547,1367],{"class":34},[28,9549,9550,9552,9555],{"class":30,"line":1836},[28,9551,9540],{"class":34},[28,9553,9554],{"class":38},"+=",[28,9556,9557],{"class":34},"nameSeed[i];\n",[28,9559,9560],{"class":30,"line":1841},[28,9561,2477],{"emptyLinePlaceholder":144},[28,9563,9564],{"class":30,"line":1855},[28,9565,9566],{"class":105},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[28,9568,9569,9571,9573,9575,9578,9580,9582,9585,9587,9589,9592,9594],{"class":30,"line":1860},[28,9570,3480],{"class":38},[28,9572,1735],{"class":34},[28,9574,224],{"class":38},[28,9576,9577],{"class":34}," j ",[28,9579,39],{"class":38},[28,9581,4170],{"class":45},[28,9583,9584],{"class":34},"; j ",[28,9586,99],{"class":38},[28,9588,2225],{"class":45},[28,9590,9591],{"class":34},"; j",[28,9593,2369],{"class":38},[28,9595,227],{"class":34},[28,9597,9598],{"class":30,"line":2654},[28,9599,2587],{"class":34},[28,9601,9602,9605,9607,9610],{"class":30,"line":2668},[28,9603,9604],{"class":34},"            tArray[i].sArray[j].sName ",[28,9606,39],{"class":38},[28,9608,9609],{"class":320}," \"Student_\"",[28,9611,1367],{"class":34},[28,9613,9614,9616,9618],{"class":30,"line":2676},[28,9615,9604],{"class":34},[28,9617,9554],{"class":38},[28,9619,9620],{"class":34}," nameSeed[j];\n",[28,9622,9623,9626,9629,9631,9633,9635,9637,9639,9641,9643,9645],{"class":30,"line":2681},[28,9624,9625],{"class":38},"            int",[28,9627,9628],{"class":34}," random",[28,9630,39],{"class":38},[28,9632,2501],{"class":2040},[28,9634,2504],{"class":34},[28,9636,542],{"class":38},[28,9638,1113],{"class":45},[28,9640,693],{"class":38},[28,9642,614],{"class":45},[28,9644,274],{"class":34},[28,9646,9647],{"class":105},"\u002F\u002F40~99\n",[28,9649,9650,9653,9655,9657],{"class":30,"line":2687},[28,9651,9652],{"class":34},"            tArray[i].sArray[j].age ",[28,9654,39],{"class":38},[28,9656,9027],{"class":45},[28,9658,1367],{"class":34},[28,9660,9661,9664,9666],{"class":30,"line":2693},[28,9662,9663],{"class":34},"            tArray[i].sArray[j].score ",[28,9665,39],{"class":38},[28,9667,9668],{"class":34}," random;\n",[28,9670,9671],{"class":30,"line":2698},[28,9672,2606],{"class":34},[28,9674,9675],{"class":30,"line":8025},[28,9676,2264],{"class":34},[28,9678,9679],{"class":30,"line":8049},[28,9680,1642],{"class":34},[28,9682,9683],{"class":30,"line":8054},[28,9684,9685],{"class":105},"\u002F\u002F打印所有信息的函数\n",[28,9687,9688,9690,9693,9695,9697,9699,9701,9704,9706,9708],{"class":30,"line":8060},[28,9689,5441],{"class":38},[28,9691,9692],{"class":2040}," printInfo",[28,9694,221],{"class":34},[28,9696,7836],{"class":38},[28,9698,9476],{"class":2040},[28,9700,9479],{"class":5293},[28,9702,9703],{"class":34},"[], ",[28,9705,224],{"class":38},[28,9707,7408],{"class":5293},[28,9709,227],{"class":34},[28,9711,9712],{"class":30,"line":8087},[28,9713,1623],{"class":34},[28,9715,9716,9718,9720,9722,9724,9726,9728,9730,9732,9734,9736],{"class":30,"line":8092},[28,9717,3278],{"class":38},[28,9719,1735],{"class":34},[28,9721,224],{"class":38},[28,9723,9515],{"class":34},[28,9725,39],{"class":38},[28,9727,4170],{"class":45},[28,9729,9522],{"class":34},[28,9731,99],{"class":38},[28,9733,9527],{"class":34},[28,9735,2369],{"class":38},[28,9737,227],{"class":34},[28,9739,9740],{"class":30,"line":8098},[28,9741,2107],{"class":34},[28,9743,9744,9747,9749,9752,9754,9757,9759],{"class":30,"line":8110},[28,9745,9746],{"class":34},"        cout ",[28,9748,1248],{"class":38},[28,9750,9751],{"class":320}," \"Teacher: \"",[28,9753,1521],{"class":38},[28,9755,9756],{"class":34}," tArray[i].tName ",[28,9758,1248],{"class":38},[28,9760,8917],{"class":34},[28,9762,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785],{"class":30,"line":8122},[28,9764,3480],{"class":38},[28,9766,1735],{"class":34},[28,9768,224],{"class":38},[28,9770,9577],{"class":34},[28,9772,39],{"class":38},[28,9774,4170],{"class":45},[28,9776,9584],{"class":34},[28,9778,99],{"class":38},[28,9780,2225],{"class":45},[28,9782,9591],{"class":34},[28,9784,2369],{"class":38},[28,9786,227],{"class":34},[28,9788,9789],{"class":30,"line":8134},[28,9790,2587],{"class":34},[28,9792,9794,9797,9799,9802,9804,9807,9809,9812,9814],{"class":30,"line":9793},47,[28,9795,9796],{"class":34},"            cout ",[28,9798,1248],{"class":38},[28,9800,9801],{"class":320}," \"",[28,9803,1307],{"class":45},[28,9805,9806],{"class":320},"Student: \"",[28,9808,1521],{"class":38},[28,9810,9811],{"class":34}," tArray[i].sArray[j].sName",[28,9813,1248],{"class":38},[28,9815,1270],{"class":34},[28,9817,9819,9821,9823,9825,9827,9830,9832,9835,9837],{"class":30,"line":9818},48,[28,9820,9796],{"class":34},[28,9822,1248],{"class":38},[28,9824,9801],{"class":320},[28,9826,1307],{"class":45},[28,9828,9829],{"class":320},"Age: \"",[28,9831,1521],{"class":38},[28,9833,9834],{"class":34}," tArray[i].sArray[j].age ",[28,9836,1248],{"class":38},[28,9838,8917],{"class":34},[28,9840,9842,9844,9846,9848,9850,9853,9855,9858,9860],{"class":30,"line":9841},49,[28,9843,9796],{"class":34},[28,9845,1248],{"class":38},[28,9847,9801],{"class":320},[28,9849,1307],{"class":45},[28,9851,9852],{"class":320},"Score: \"",[28,9854,1521],{"class":38},[28,9856,9857],{"class":34}," tArray[i].sArray[j].score ",[28,9859,1248],{"class":38},[28,9861,9862],{"class":34}," endl;   \n",[28,9864,9866],{"class":30,"line":9865},50,[28,9867,2606],{"class":34},[28,9869,9871],{"class":30,"line":9870},51,[28,9872,2264],{"class":34},[28,9874,9876],{"class":30,"line":9875},52,[28,9877,1642],{"class":34},[28,9879,9881,9883,9885],{"class":30,"line":9880},53,[28,9882,224],{"class":38},[28,9884,2050],{"class":2040},[28,9886,2053],{"class":34},[28,9888,9890],{"class":30,"line":9889},54,[28,9891,1623],{"class":34},[28,9893,9895],{"class":30,"line":9894},55,[28,9896,9897],{"class":105},"    \u002F\u002F随机数种子\n",[28,9899,9901,9903,9905,9907,9909,9911,9913,9915,9917],{"class":30,"line":9900},56,[28,9902,2450],{"class":2040},[28,9904,2453],{"class":34},[28,9906,2456],{"class":38},[28,9908,2459],{"class":38},[28,9910,642],{"class":34},[28,9912,2464],{"class":2040},[28,9914,221],{"class":34},[28,9916,2469],{"class":45},[28,9918,2472],{"class":34},[28,9920,9922],{"class":30,"line":9921},57,[28,9923,9924],{"class":105},"    \u002F\u002F1.创建3名老师的数组\n",[28,9926,9928,9930,9932,9935,9937],{"class":30,"line":9927},58,[28,9929,7972],{"class":38},[28,9931,9476],{"class":2040},[28,9933,9934],{"class":34}," tArray[",[28,9936,57],{"class":45},[28,9938,4767],{"class":34},[28,9940,9942],{"class":30,"line":9941},59,[28,9943,9944],{"class":105},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[28,9946,9948,9950,9953,9955,9958,9961,9963,9965,9968,9970],{"class":30,"line":9947},60,[28,9949,2062],{"class":38},[28,9951,9952],{"class":34}," len ",[28,9954,39],{"class":38},[28,9956,9957],{"class":38}," sizeof",[28,9959,9960],{"class":34},"(tArray) ",[28,9962,794],{"class":38},[28,9964,9957],{"class":38},[28,9966,9967],{"class":34},"(tArray[",[28,9969,407],{"class":45},[28,9971,3933],{"class":34},[28,9973,9975,9978],{"class":30,"line":9974},61,[28,9976,9977],{"class":2040},"    allocateSpace",[28,9979,9980],{"class":34},"(tArray, len);\n",[28,9982,9984],{"class":30,"line":9983},62,[28,9985,9986],{"class":105},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[28,9988,9990,9993],{"class":30,"line":9989},63,[28,9991,9992],{"class":2040},"    printInfo",[28,9994,9980],{"class":34},[28,9996,9998],{"class":30,"line":9997},64,[28,9999,2477],{"emptyLinePlaceholder":144},[28,10001,10003],{"class":30,"line":10002},65,[28,10004,1642],{"class":34},[171,10006,10007],{"start":94},[174,10008,10009,10012],{},[365,10010,10011],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10014,10015],{},"五名英雄信息如下：",[18,10017,10021],{"className":10018,"code":10019,"language":10020,"meta":23,"style":23},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[25,10022,10023,10041,10058,10075,10092],{"__ignoreMap":23},[28,10024,10025,10027,10030,10032,10034,10036,10039],{"class":30,"line":31},[28,10026,4994],{"class":34},[28,10028,10029],{"class":320},"\"刘备\"",[28,10031,49],{"class":34},[28,10033,88],{"class":45},[28,10035,49],{"class":34},[28,10037,10038],{"class":320},"\"男\"",[28,10040,5007],{"class":34},[28,10042,10043,10045,10048,10050,10052,10054,10056],{"class":30,"line":94},[28,10044,4994],{"class":34},[28,10046,10047],{"class":320},"\"关羽\"",[28,10049,49],{"class":34},[28,10051,83],{"class":45},[28,10053,49],{"class":34},[28,10055,10038],{"class":320},[28,10057,5007],{"class":34},[28,10059,10060,10062,10065,10067,10069,10071,10073],{"class":30,"line":109},[28,10061,4994],{"class":34},[28,10063,10064],{"class":320},"\"张飞\"",[28,10066,49],{"class":34},[28,10068,102],{"class":45},[28,10070,49],{"class":34},[28,10072,10038],{"class":320},[28,10074,5007],{"class":34},[28,10076,10077,10079,10082,10084,10086,10088,10090],{"class":30,"line":125},[28,10078,4994],{"class":34},[28,10080,10081],{"class":320},"\"赵云\"",[28,10083,49],{"class":34},[28,10085,78],{"class":45},[28,10087,49],{"class":34},[28,10089,10038],{"class":320},[28,10091,5007],{"class":34},[28,10093,10094,10096,10099,10101,10103,10105,10108],{"class":30,"line":131},[28,10095,4994],{"class":34},[28,10097,10098],{"class":320},"\"貂蝉\"",[28,10100,49],{"class":34},[28,10102,885],{"class":45},[28,10104,49],{"class":34},[28,10106,10107],{"class":320},"\"女\"",[28,10109,5007],{"class":34},[14,10111,10112],{},"代码：",[18,10114,10116],{"className":209,"code":10115,"language":211,"meta":23,"style":23},"#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",[25,10117,10118,10124,10134,10140,10147,10151,10155,10161,10166,10170,10175,10198,10202,10227,10231,10264,10269,10298,10303,10318,10344,10364,10369,10374,10378,10382,10387,10409,10413,10437,10441,10503,10507,10511,10519,10523,10528,10539,10543,10559,10575,10591,10607,10623,10627,10647,10669,10674,10687,10694,10699,10705,10710,10723,10729],{"__ignoreMap":23},[28,10119,10120,10122],{"class":30,"line":31},[28,10121,2026],{"class":38},[28,10123,2029],{"class":320},[28,10125,10126,10128,10130,10132],{"class":30,"line":94},[28,10127,2034],{"class":38},[28,10129,2037],{"class":38},[28,10131,2041],{"class":2040},[28,10133,1367],{"class":34},[28,10135,10136,10138],{"class":30,"line":109},[28,10137,2026],{"class":38},[28,10139,7826],{"class":320},[28,10141,10142,10144],{"class":30,"line":125},[28,10143,7836],{"class":38},[28,10145,10146],{"class":2040}," Sanguo\n",[28,10148,10149],{"class":30,"line":131},[28,10150,1623],{"class":34},[28,10152,10153],{"class":30,"line":1291},[28,10154,7862],{"class":34},[28,10156,10157,10159],{"class":30,"line":1297},[28,10158,2062],{"class":38},[28,10160,7874],{"class":34},[28,10162,10163],{"class":30,"line":1388},[28,10164,10165],{"class":34},"    string gender;\n",[28,10167,10168],{"class":30,"line":1394},[28,10169,4072],{"class":34},[28,10171,10172],{"class":30,"line":1406},[28,10173,10174],{"class":105},"\u002F\u002F定义排序函数\n",[28,10176,10177,10179,10181,10183,10186,10188,10190,10192,10194,10196],{"class":30,"line":1689},[28,10178,5441],{"class":38},[28,10180,7393],{"class":2040},[28,10182,221],{"class":34},[28,10184,10185],{"class":2040},"Sanguo",[28,10187,6595],{"class":38},[28,10189,905],{"class":5293},[28,10191,49],{"class":34},[28,10193,224],{"class":38},[28,10195,7408],{"class":5293},[28,10197,227],{"class":34},[28,10199,10200],{"class":30,"line":1694},[28,10201,1623],{"class":34},[28,10203,10204,10206,10208,10210,10212,10214,10216,10218,10220,10223,10225],{"class":30,"line":1700},[28,10205,3278],{"class":38},[28,10207,221],{"class":34},[28,10209,224],{"class":38},[28,10211,3109],{"class":34},[28,10213,39],{"class":38},[28,10215,407],{"class":45},[28,10217,3116],{"class":34},[28,10219,99],{"class":38},[28,10221,10222],{"class":34},"len;i",[28,10224,2369],{"class":38},[28,10226,227],{"class":34},[28,10228,10229],{"class":30,"line":1705},[28,10230,2107],{"class":34},[28,10232,10233,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262],{"class":30,"line":1719},[28,10234,10235],{"class":38},"     for",[28,10237,1735],{"class":34},[28,10239,224],{"class":38},[28,10241,3487],{"class":34},[28,10243,39],{"class":38},[28,10245,407],{"class":45},[28,10247,3494],{"class":34},[28,10249,99],{"class":38},[28,10251,7435],{"class":34},[28,10253,742],{"class":38},[28,10255,46],{"class":45},[28,10257,742],{"class":38},[28,10259,3627],{"class":34},[28,10261,2369],{"class":38},[28,10263,227],{"class":34},[28,10265,10266],{"class":30,"line":1724},[28,10267,10268],{"class":34},"     {\n",[28,10270,10271,10274,10277,10279,10282,10284,10287,10289,10291,10293,10295],{"class":30,"line":1730},[28,10272,10273],{"class":38},"         if",[28,10275,10276],{"class":34}," ((s",[28,10278,693],{"class":38},[28,10280,10281],{"class":34},"j)->age ",[28,10283,1164],{"class":38},[28,10285,10286],{"class":34}," (s",[28,10288,693],{"class":38},[28,10290,680],{"class":34},[28,10292,693],{"class":38},[28,10294,46],{"class":45},[28,10296,10297],{"class":34},")->age)\n",[28,10299,10300],{"class":30,"line":1751},[28,10301,10302],{"class":34},"         {\n",[28,10304,10305,10308,10310,10313,10315],{"class":30,"line":1756},[28,10306,10307],{"class":34},"             Sanguo temp",[28,10309,7230],{"class":38},[28,10311,10312],{"class":34},"(s",[28,10314,693],{"class":38},[28,10316,10317],{"class":34},"j);\n",[28,10319,10320,10323,10325,10327,10330,10332,10334,10336,10338,10340,10342],{"class":30,"line":1770},[28,10321,10322],{"class":38},"             *",[28,10324,10312],{"class":34},[28,10326,693],{"class":38},[28,10328,10329],{"class":34},"j)",[28,10331,7230],{"class":38},[28,10333,10312],{"class":34},[28,10335,693],{"class":38},[28,10337,680],{"class":34},[28,10339,693],{"class":38},[28,10341,46],{"class":45},[28,10343,2796],{"class":34},[28,10345,10346,10348,10350,10352,10354,10356,10358,10360,10362],{"class":30,"line":1775},[28,10347,10322],{"class":38},[28,10349,10312],{"class":34},[28,10351,693],{"class":38},[28,10353,680],{"class":34},[28,10355,693],{"class":38},[28,10357,46],{"class":45},[28,10359,642],{"class":34},[28,10361,39],{"class":38},[28,10363,4357],{"class":34},[28,10365,10366],{"class":30,"line":1804},[28,10367,10368],{"class":34},"         }\n",[28,10370,10371],{"class":30,"line":1809},[28,10372,10373],{"class":34},"     }\n",[28,10375,10376],{"class":30,"line":1826},[28,10377,2264],{"class":34},[28,10379,10380],{"class":30,"line":1831},[28,10381,1642],{"class":34},[28,10383,10384],{"class":30,"line":1836},[28,10385,10386],{"class":105},"\u002F\u002F定义打印函数\n",[28,10388,10389,10391,10393,10395,10397,10399,10401,10403,10405,10407],{"class":30,"line":1841},[28,10390,5441],{"class":38},[28,10392,9692],{"class":2040},[28,10394,221],{"class":34},[28,10396,10185],{"class":2040},[28,10398,6595],{"class":38},[28,10400,905],{"class":5293},[28,10402,49],{"class":34},[28,10404,224],{"class":38},[28,10406,7408],{"class":5293},[28,10408,227],{"class":34},[28,10410,10411],{"class":30,"line":1855},[28,10412,1623],{"class":34},[28,10414,10415,10417,10419,10421,10423,10425,10427,10429,10431,10433,10435],{"class":30,"line":1860},[28,10416,3278],{"class":38},[28,10418,1735],{"class":34},[28,10420,224],{"class":38},[28,10422,3109],{"class":34},[28,10424,39],{"class":38},[28,10426,407],{"class":45},[28,10428,3116],{"class":34},[28,10430,99],{"class":38},[28,10432,10222],{"class":34},[28,10434,2369],{"class":38},[28,10436,227],{"class":34},[28,10438,10439],{"class":30,"line":2654},[28,10440,2107],{"class":34},[28,10442,10443,10445,10447,10449,10451,10454,10456,10458,10460,10463,10465,10467,10469,10472,10474,10476,10478,10481,10483,10485,10487,10490,10492,10494,10496,10499,10501],{"class":30,"line":2668},[28,10444,3528],{"class":34},[28,10446,1248],{"class":38},[28,10448,465],{"class":320},[28,10450,1307],{"class":45},[28,10452,10453],{"class":320},"姓名：\"",[28,10455,1248],{"class":38},[28,10457,10312],{"class":34},[28,10459,693],{"class":38},[28,10461,10462],{"class":34},"i)->name",[28,10464,1248],{"class":38},[28,10466,465],{"class":320},[28,10468,1307],{"class":45},[28,10470,10471],{"class":320},"年龄：\"",[28,10473,1248],{"class":38},[28,10475,10312],{"class":34},[28,10477,693],{"class":38},[28,10479,10480],{"class":34},"i)->age",[28,10482,1248],{"class":38},[28,10484,465],{"class":320},[28,10486,1307],{"class":45},[28,10488,10489],{"class":320},"性别：\"",[28,10491,1248],{"class":38},[28,10493,10312],{"class":34},[28,10495,693],{"class":38},[28,10497,10498],{"class":34},"i)->gender",[28,10500,1248],{"class":38},[28,10502,1270],{"class":34},[28,10504,10505],{"class":30,"line":2676},[28,10506,2264],{"class":34},[28,10508,10509],{"class":30,"line":2681},[28,10510,1642],{"class":34},[28,10512,10513,10515,10517],{"class":30,"line":2687},[28,10514,224],{"class":38},[28,10516,2050],{"class":2040},[28,10518,2053],{"class":34},[28,10520,10521],{"class":30,"line":2693},[28,10522,1623],{"class":34},[28,10524,10525],{"class":30,"line":2698},[28,10526,10527],{"class":105},"    \u002F\u002F定义结构体变量\n",[28,10529,10530,10533,10535,10537],{"class":30,"line":8025},[28,10531,10532],{"class":34},"    Sanguo s1[",[28,10534,533],{"class":45},[28,10536,119],{"class":34},[28,10538,4985],{"class":38},[28,10540,10541],{"class":30,"line":8049},[28,10542,2107],{"class":34},[28,10544,10545,10547,10549,10551,10553,10555,10557],{"class":30,"line":8054},[28,10546,4994],{"class":34},[28,10548,10029],{"class":320},[28,10550,49],{"class":34},[28,10552,88],{"class":45},[28,10554,49],{"class":34},[28,10556,10038],{"class":320},[28,10558,5007],{"class":34},[28,10560,10561,10563,10565,10567,10569,10571,10573],{"class":30,"line":8060},[28,10562,4994],{"class":34},[28,10564,10047],{"class":320},[28,10566,49],{"class":34},[28,10568,83],{"class":45},[28,10570,49],{"class":34},[28,10572,10038],{"class":320},[28,10574,5007],{"class":34},[28,10576,10577,10579,10581,10583,10585,10587,10589],{"class":30,"line":8087},[28,10578,4994],{"class":34},[28,10580,10064],{"class":320},[28,10582,49],{"class":34},[28,10584,102],{"class":45},[28,10586,49],{"class":34},[28,10588,10038],{"class":320},[28,10590,5007],{"class":34},[28,10592,10593,10595,10597,10599,10601,10603,10605],{"class":30,"line":8092},[28,10594,4994],{"class":34},[28,10596,10081],{"class":320},[28,10598,49],{"class":34},[28,10600,78],{"class":45},[28,10602,49],{"class":34},[28,10604,10038],{"class":320},[28,10606,5007],{"class":34},[28,10608,10609,10611,10613,10615,10617,10619,10621],{"class":30,"line":8098},[28,10610,4994],{"class":34},[28,10612,10098],{"class":320},[28,10614,49],{"class":34},[28,10616,885],{"class":45},[28,10618,49],{"class":34},[28,10620,10107],{"class":320},[28,10622,5007],{"class":34},[28,10624,10625],{"class":30,"line":8110},[28,10626,5028],{"class":34},[28,10628,10629,10631,10633,10635,10638,10640,10643,10645],{"class":30,"line":8122},[28,10630,2062],{"class":38},[28,10632,7408],{"class":34},[28,10634,4280],{"class":38},[28,10636,10637],{"class":34},"(s1)",[28,10639,4286],{"class":38},[28,10641,10642],{"class":34},"(s1[",[28,10644,407],{"class":45},[28,10646,3933],{"class":34},[28,10648,10649,10652,10654,10657,10659,10662,10665,10667],{"class":30,"line":8134},[28,10650,10651],{"class":34},"    Sanguo ",[28,10653,668],{"class":38},[28,10655,10656],{"class":34},"s ",[28,10658,39],{"class":38},[28,10660,10661],{"class":38}," &",[28,10663,10664],{"class":34},"s1[",[28,10666,407],{"class":45},[28,10668,4767],{"class":34},[28,10670,10671],{"class":30,"line":9793},[28,10672,10673],{"class":105},"    \u002F\u002F排序前：\n",[28,10675,10676,10678,10680,10683,10685],{"class":30,"line":9818},[28,10677,6606],{"class":34},[28,10679,1248],{"class":38},[28,10681,10682],{"class":320}," \"排序前：\"",[28,10684,1521],{"class":38},[28,10686,8917],{"class":34},[28,10688,10689,10691],{"class":30,"line":9841},[28,10690,9992],{"class":2040},[28,10692,10693],{"class":34},"(s,len);\n",[28,10695,10696],{"class":30,"line":9865},[28,10697,10698],{"class":105},"    \u002F\u002F调用排序函数\n",[28,10700,10701,10703],{"class":30,"line":9870},[28,10702,7675],{"class":2040},[28,10704,10693],{"class":34},[28,10706,10707],{"class":30,"line":9875},[28,10708,10709],{"class":105},"    \u002F\u002F排序后\n",[28,10711,10712,10714,10716,10719,10721],{"class":30,"line":9880},[28,10713,6606],{"class":34},[28,10715,1248],{"class":38},[28,10717,10718],{"class":320}," \"排序后：\"",[28,10720,1521],{"class":38},[28,10722,8917],{"class":34},[28,10724,10725,10727],{"class":30,"line":9889},[28,10726,9992],{"class":2040},[28,10728,10693],{"class":34},[28,10730,10731],{"class":30,"line":9894},[28,10732,1642],{"class":34},[14,10734,10735,10736,10738],{},"注意：使用指针时直接用传首地址**&s",[28,10737,407],{},"**",[136,10740,10741],{},"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":23,"searchDepth":94,"depth":94,"links":10743},[10744,10745,10746,10747,10748,10749,10750],{"id":7780,"depth":94,"text":7781},{"id":8142,"depth":94,"text":8143},{"id":8411,"depth":94,"text":8412},{"id":8576,"depth":94,"text":8577},{"id":8792,"depth":94,"text":8793},{"id":9113,"depth":94,"text":9114},{"id":9341,"depth":94,"text":9342},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7769,"description":7777},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10757,"title":10758,"body":10759,"description":23,"extension":142,"meta":12102,"navigation":144,"path":12103,"seo":12104,"stem":12105,"__hash__":12106},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10760,"toc":12096},[10761,10764,10768,10774,10788,10793,10796,10800,10807,10813,10816,10823,10829,10834,10837,10840,10843,11407,11410,11424,11428,11433,11449,11589,11592,11598,11601,11606,11614,11722,11725,11730,11733,11738,11741,11747,11750,12093],[10,10762,10758],{"id":10763},"_5程序内存模型",[159,10765,10767],{"id":10766},"_51内存分区模型","5.1内存分区模型",[14,10769,10770,10771],{},"C++程序在执行时，将内存大方向划分为",[365,10772,10773],{},"4个区域",[1211,10775,10776,10779,10782,10785],{},[174,10777,10778],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[174,10780,10781],{},"全局区：存放全局变量和静态变量以及常量",[174,10783,10784],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[174,10786,10787],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10789,10790],{},[365,10791,10792],{},"内存四区意义：",[14,10794,10795],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[188,10797,10799],{"id":10798},"_511程序运行前","5.1.1程序运行前",[14,10801,10802,10803,10806],{},"​\t在程序编译后，生成了exe可执行程序，",[365,10804,10805],{},"未执行该程序前","分为两个区域",[14,10808,10809,10810],{},"​\t",[365,10811,10812],{},"代码区：",[14,10814,10815],{},"​\t\t存放 CPU 执行的机器指令",[14,10817,10818,10819,10822],{},"​\t\t代码区是",[365,10820,10821],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10824,10818,10825,10828],{},[365,10826,10827],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10830,10809,10831],{},[365,10832,10833],{},"全局区：",[14,10835,10836],{},"​\t\t全局变量和静态变量存放在此.",[14,10838,10839],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10841,10842],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[18,10844,10846],{"className":209,"code":10845,"language":211,"meta":23,"style":23},"\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",[25,10847,10848,10853,10866,10879,10883,10888,10903,10918,10922,10931,10935,10940,10953,10966,10970,10975,11001,11027,11031,11058,11084,11088,11093,11109,11124,11128,11154,11180,11184,11209,11234,11238,11264,11290,11294,11310,11325,11351,11377,11381,11391,11395,11403],{"__ignoreMap":23},[28,10849,10850],{"class":30,"line":31},[28,10851,10852],{"class":105},"\u002F\u002F全局变量\n",[28,10854,10855,10857,10860,10862,10864],{"class":30,"line":94},[28,10856,224],{"class":38},[28,10858,10859],{"class":34}," g_a ",[28,10861,39],{"class":38},[28,10863,2115],{"class":45},[28,10865,1367],{"class":34},[28,10867,10868,10870,10873,10875,10877],{"class":30,"line":109},[28,10869,224],{"class":38},[28,10871,10872],{"class":34}," g_b ",[28,10874,39],{"class":38},[28,10876,2115],{"class":45},[28,10878,1367],{"class":34},[28,10880,10881],{"class":30,"line":125},[28,10882,2477],{"emptyLinePlaceholder":144},[28,10884,10885],{"class":30,"line":131},[28,10886,10887],{"class":105},"\u002F\u002F全局常量\n",[28,10889,10890,10892,10894,10897,10899,10901],{"class":30,"line":1291},[28,10891,6869],{"class":38},[28,10893,2459],{"class":38},[28,10895,10896],{"class":34}," c_g_a ",[28,10898,39],{"class":38},[28,10900,2115],{"class":45},[28,10902,1367],{"class":34},[28,10904,10905,10907,10909,10912,10914,10916],{"class":30,"line":1297},[28,10906,6869],{"class":38},[28,10908,2459],{"class":38},[28,10910,10911],{"class":34}," c_g_b ",[28,10913,39],{"class":38},[28,10915,2115],{"class":45},[28,10917,1367],{"class":34},[28,10919,10920],{"class":30,"line":1388},[28,10921,2477],{"emptyLinePlaceholder":144},[28,10923,10924,10926,10928],{"class":30,"line":1394},[28,10925,224],{"class":38},[28,10927,2050],{"class":2040},[28,10929,10930],{"class":34},"() {\n",[28,10932,10933],{"class":30,"line":1406},[28,10934,2477],{"emptyLinePlaceholder":144},[28,10936,10937],{"class":30,"line":1689},[28,10938,10939],{"class":105},"    \u002F\u002F局部变量\n",[28,10941,10942,10944,10947,10949,10951],{"class":30,"line":1694},[28,10943,2062],{"class":38},[28,10945,10946],{"class":34}," a ",[28,10948,39],{"class":38},[28,10950,2115],{"class":45},[28,10952,1367],{"class":34},[28,10954,10955,10957,10960,10962,10964],{"class":30,"line":1700},[28,10956,2062],{"class":38},[28,10958,10959],{"class":34}," b ",[28,10961,39],{"class":38},[28,10963,2115],{"class":45},[28,10965,1367],{"class":34},[28,10967,10968],{"class":30,"line":1705},[28,10969,2477],{"emptyLinePlaceholder":144},[28,10971,10972],{"class":30,"line":1719},[28,10973,10974],{"class":105},"    \u002F\u002F打印地址\n",[28,10976,10977,10979,10981,10984,10986,10988,10990,10992,10994,10997,10999],{"class":30,"line":1724},[28,10978,6606],{"class":34},[28,10980,1248],{"class":38},[28,10982,10983],{"class":320}," \"局部变量a地址为： \"",[28,10985,1521],{"class":38},[28,10987,1735],{"class":34},[28,10989,224],{"class":38},[28,10991,642],{"class":34},[28,10993,567],{"class":38},[28,10995,10996],{"class":34},"a ",[28,10998,1248],{"class":38},[28,11000,8917],{"class":34},[28,11002,11003,11005,11007,11010,11012,11014,11016,11018,11020,11023,11025],{"class":30,"line":1730},[28,11004,6606],{"class":34},[28,11006,1248],{"class":38},[28,11008,11009],{"class":320}," \"局部变量b地址为： \"",[28,11011,1521],{"class":38},[28,11013,1735],{"class":34},[28,11015,224],{"class":38},[28,11017,642],{"class":34},[28,11019,567],{"class":38},[28,11021,11022],{"class":34},"b ",[28,11024,1248],{"class":38},[28,11026,8917],{"class":34},[28,11028,11029],{"class":30,"line":1751},[28,11030,2477],{"emptyLinePlaceholder":144},[28,11032,11033,11035,11037,11040,11042,11045,11047,11049,11051,11054,11056],{"class":30,"line":1756},[28,11034,6606],{"class":34},[28,11036,1248],{"class":38},[28,11038,11039],{"class":320}," \"全局变量g_a地址为： \"",[28,11041,1521],{"class":38},[28,11043,11044],{"class":34},"  (",[28,11046,224],{"class":38},[28,11048,642],{"class":34},[28,11050,567],{"class":38},[28,11052,11053],{"class":34},"g_a ",[28,11055,1248],{"class":38},[28,11057,8917],{"class":34},[28,11059,11060,11062,11064,11067,11069,11071,11073,11075,11077,11080,11082],{"class":30,"line":1770},[28,11061,6606],{"class":34},[28,11063,1248],{"class":38},[28,11065,11066],{"class":320}," \"全局变量g_b地址为： \"",[28,11068,1521],{"class":38},[28,11070,11044],{"class":34},[28,11072,224],{"class":38},[28,11074,642],{"class":34},[28,11076,567],{"class":38},[28,11078,11079],{"class":34},"g_b ",[28,11081,1248],{"class":38},[28,11083,8917],{"class":34},[28,11085,11086],{"class":30,"line":1775},[28,11087,2477],{"emptyLinePlaceholder":144},[28,11089,11090],{"class":30,"line":1804},[28,11091,11092],{"class":105},"    \u002F\u002F静态变量\n",[28,11094,11095,11098,11100,11103,11105,11107],{"class":30,"line":1809},[28,11096,11097],{"class":38},"    static",[28,11099,2459],{"class":38},[28,11101,11102],{"class":34}," s_a ",[28,11104,39],{"class":38},[28,11106,2115],{"class":45},[28,11108,1367],{"class":34},[28,11110,11111,11113,11115,11118,11120,11122],{"class":30,"line":1826},[28,11112,11097],{"class":38},[28,11114,2459],{"class":38},[28,11116,11117],{"class":34}," s_b ",[28,11119,39],{"class":38},[28,11121,2115],{"class":45},[28,11123,1367],{"class":34},[28,11125,11126],{"class":30,"line":1831},[28,11127,2477],{"emptyLinePlaceholder":144},[28,11129,11130,11132,11134,11137,11139,11141,11143,11145,11147,11150,11152],{"class":30,"line":1836},[28,11131,6606],{"class":34},[28,11133,1248],{"class":38},[28,11135,11136],{"class":320}," \"静态变量s_a地址为： \"",[28,11138,1521],{"class":38},[28,11140,1735],{"class":34},[28,11142,224],{"class":38},[28,11144,642],{"class":34},[28,11146,567],{"class":38},[28,11148,11149],{"class":34},"s_a ",[28,11151,1248],{"class":38},[28,11153,8917],{"class":34},[28,11155,11156,11158,11160,11163,11165,11167,11169,11171,11173,11176,11178],{"class":30,"line":1841},[28,11157,6606],{"class":34},[28,11159,1248],{"class":38},[28,11161,11162],{"class":320}," \"静态变量s_b地址为： \"",[28,11164,1521],{"class":38},[28,11166,1735],{"class":34},[28,11168,224],{"class":38},[28,11170,642],{"class":34},[28,11172,567],{"class":38},[28,11174,11175],{"class":34},"s_b ",[28,11177,1248],{"class":38},[28,11179,8917],{"class":34},[28,11181,11182],{"class":30,"line":1855},[28,11183,2477],{"emptyLinePlaceholder":144},[28,11185,11186,11188,11190,11193,11195,11197,11199,11201,11203,11205,11207],{"class":30,"line":1860},[28,11187,6606],{"class":34},[28,11189,1248],{"class":38},[28,11191,11192],{"class":320}," \"字符串常量地址为： \"",[28,11194,1521],{"class":38},[28,11196,1735],{"class":34},[28,11198,224],{"class":38},[28,11200,642],{"class":34},[28,11202,567],{"class":38},[28,11204,1265],{"class":320},[28,11206,1521],{"class":38},[28,11208,8917],{"class":34},[28,11210,11211,11213,11215,11217,11219,11221,11223,11225,11227,11230,11232],{"class":30,"line":2654},[28,11212,6606],{"class":34},[28,11214,1248],{"class":38},[28,11216,11192],{"class":320},[28,11218,1521],{"class":38},[28,11220,1735],{"class":34},[28,11222,224],{"class":38},[28,11224,642],{"class":34},[28,11226,567],{"class":38},[28,11228,11229],{"class":320},"\"hello world1\"",[28,11231,1521],{"class":38},[28,11233,8917],{"class":34},[28,11235,11236],{"class":30,"line":2668},[28,11237,2477],{"emptyLinePlaceholder":144},[28,11239,11240,11242,11244,11247,11249,11251,11253,11255,11257,11260,11262],{"class":30,"line":2676},[28,11241,6606],{"class":34},[28,11243,1248],{"class":38},[28,11245,11246],{"class":320}," \"全局常量c_g_a地址为： \"",[28,11248,1521],{"class":38},[28,11250,1735],{"class":34},[28,11252,224],{"class":38},[28,11254,642],{"class":34},[28,11256,567],{"class":38},[28,11258,11259],{"class":34},"c_g_a ",[28,11261,1248],{"class":38},[28,11263,8917],{"class":34},[28,11265,11266,11268,11270,11273,11275,11277,11279,11281,11283,11286,11288],{"class":30,"line":2681},[28,11267,6606],{"class":34},[28,11269,1248],{"class":38},[28,11271,11272],{"class":320}," \"全局常量c_g_b地址为： \"",[28,11274,1521],{"class":38},[28,11276,1735],{"class":34},[28,11278,224],{"class":38},[28,11280,642],{"class":34},[28,11282,567],{"class":38},[28,11284,11285],{"class":34},"c_g_b ",[28,11287,1248],{"class":38},[28,11289,8917],{"class":34},[28,11291,11292],{"class":30,"line":2687},[28,11293,2477],{"emptyLinePlaceholder":144},[28,11295,11296,11299,11301,11304,11306,11308],{"class":30,"line":2693},[28,11297,11298],{"class":38},"    const",[28,11300,2459],{"class":38},[28,11302,11303],{"class":34}," c_l_a ",[28,11305,39],{"class":38},[28,11307,2115],{"class":45},[28,11309,1367],{"class":34},[28,11311,11312,11314,11316,11319,11321,11323],{"class":30,"line":2698},[28,11313,11298],{"class":38},[28,11315,2459],{"class":38},[28,11317,11318],{"class":34}," c_l_b ",[28,11320,39],{"class":38},[28,11322,2115],{"class":45},[28,11324,1367],{"class":34},[28,11326,11327,11329,11331,11334,11336,11338,11340,11342,11344,11347,11349],{"class":30,"line":8025},[28,11328,6606],{"class":34},[28,11330,1248],{"class":38},[28,11332,11333],{"class":320}," \"局部常量c_l_a地址为： \"",[28,11335,1521],{"class":38},[28,11337,1735],{"class":34},[28,11339,224],{"class":38},[28,11341,642],{"class":34},[28,11343,567],{"class":38},[28,11345,11346],{"class":34},"c_l_a ",[28,11348,1248],{"class":38},[28,11350,8917],{"class":34},[28,11352,11353,11355,11357,11360,11362,11364,11366,11368,11370,11373,11375],{"class":30,"line":8049},[28,11354,6606],{"class":34},[28,11356,1248],{"class":38},[28,11358,11359],{"class":320}," \"局部常量c_l_b地址为： \"",[28,11361,1521],{"class":38},[28,11363,1735],{"class":34},[28,11365,224],{"class":38},[28,11367,642],{"class":34},[28,11369,567],{"class":38},[28,11371,11372],{"class":34},"c_l_b ",[28,11374,1248],{"class":38},[28,11376,8917],{"class":34},[28,11378,11379],{"class":30,"line":8054},[28,11380,2477],{"emptyLinePlaceholder":144},[28,11382,11383,11385,11387,11389],{"class":30,"line":8060},[28,11384,2380],{"class":2040},[28,11386,221],{"class":34},[28,11388,2385],{"class":320},[28,11390,2796],{"class":34},[28,11392,11393],{"class":30,"line":8087},[28,11394,2477],{"emptyLinePlaceholder":144},[28,11396,11397,11399,11401],{"class":30,"line":8092},[28,11398,4167],{"class":38},[28,11400,4170],{"class":45},[28,11402,1367],{"class":34},[28,11404,11405],{"class":30,"line":8098},[28,11406,1642],{"class":34},[14,11408,11409],{},"总结：",[1211,11411,11412,11415,11418,11421],{},[174,11413,11414],{},"c++中程序运行前分为全局区和代码区",[174,11416,11417],{},"代码区特点是共享和只读",[174,11419,11420],{},"全局区中存放全局变量、静态变量、常量",[174,11422,11423],{},"常量区中存放const修饰的全局常量和字符串常量",[188,11425,11427],{"id":11426},"_512程序运行后","5.1.2程序运行后",[171,11429,11430],{},[174,11431,11432],{},"栈区：",[1211,11434,11435,11442],{},[174,11436,11437,11438,11441],{},"由编译器自动分配释放, 存放",[365,11439,11440],{},"函数的参数值,局部变量","等",[174,11443,11444,11445,11448],{},"注意事项：",[365,11446,11447],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[18,11450,11452],{"className":209,"code":11451,"language":211,"meta":23,"style":23},"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",[25,11453,11454,11465,11469,11484,11496,11500,11504,11512,11517,11532,11550,11567,11577,11585],{"__ignoreMap":23},[28,11455,11456,11458,11460,11463],{"class":30,"line":31},[28,11457,224],{"class":38},[28,11459,6595],{"class":38},[28,11461,11462],{"class":2040}," func",[28,11464,2053],{"class":34},[28,11466,11467],{"class":30,"line":94},[28,11468,1623],{"class":34},[28,11470,11471,11473,11475,11477,11479,11481],{"class":30,"line":109},[28,11472,2062],{"class":38},[28,11474,10946],{"class":34},[28,11476,39],{"class":38},[28,11478,2115],{"class":45},[28,11480,274],{"class":34},[28,11482,11483],{"class":105}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[28,11485,11486,11488,11490,11493],{"class":30,"line":125},[28,11487,4167],{"class":38},[28,11489,10661],{"class":38},[28,11491,11492],{"class":34},"a;",[28,11494,11495],{"class":105}," \u002F\u002F放回局部变量的地址\n",[28,11497,11498],{"class":30,"line":131},[28,11499,1642],{"class":34},[28,11501,11502],{"class":30,"line":1291},[28,11503,2477],{"emptyLinePlaceholder":144},[28,11505,11506,11508,11510],{"class":30,"line":1297},[28,11507,224],{"class":38},[28,11509,2050],{"class":2040},[28,11511,10930],{"class":34},[28,11513,11514],{"class":30,"line":1388},[28,11515,11516],{"class":105},"    \u002F\u002F接受func的返回值\n",[28,11518,11519,11521,11523,11526,11528,11530],{"class":30,"line":1394},[28,11520,2062],{"class":38},[28,11522,6595],{"class":38},[28,11524,11525],{"class":34},"p ",[28,11527,39],{"class":38},[28,11529,11462],{"class":2040},[28,11531,5713],{"class":34},[28,11533,11534,11536,11538,11540,11542,11544,11547],{"class":30,"line":1406},[28,11535,6606],{"class":34},[28,11537,1248],{"class":38},[28,11539,6595],{"class":38},[28,11541,11525],{"class":34},[28,11543,1248],{"class":38},[28,11545,11546],{"class":34}," endl;",[28,11548,11549],{"class":105}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[28,11551,11552,11554,11556,11558,11560,11562,11564],{"class":30,"line":1689},[28,11553,6606],{"class":34},[28,11555,1248],{"class":38},[28,11557,6595],{"class":38},[28,11559,11525],{"class":34},[28,11561,1248],{"class":38},[28,11563,11546],{"class":34},[28,11565,11566],{"class":105}," \u002F\u002F第二次这个数据不再保留\n",[28,11568,11569,11571,11573,11575],{"class":30,"line":1694},[28,11570,2380],{"class":2040},[28,11572,221],{"class":34},[28,11574,2385],{"class":320},[28,11576,2796],{"class":34},[28,11578,11579,11581,11583],{"class":30,"line":1700},[28,11580,4167],{"class":38},[28,11582,4170],{"class":45},[28,11584,1367],{"class":34},[28,11586,11587],{"class":30,"line":1705},[28,11588,1642],{"class":34},[14,11590,11591],{},"输出结果：",[14,11593,11594],{},[1539,11595],{"alt":11596,"src":11597},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11599,11600],{},"总结：不要返回局部变量的地址",[171,11602,11603],{"start":94},[174,11604,11605],{},"堆区",[1211,11607,11608,11611],{},[174,11609,11610],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[174,11612,11613],{},"在c++中主要利用new在堆区开辟内存",[18,11615,11617],{"className":209,"code":11616,"language":211,"meta":23,"style":23},"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",[25,11618,11619,11634,11638,11643,11664,11671,11675,11683,11687,11692,11706,11718],{"__ignoreMap":23},[28,11620,11621,11623,11626,11629,11631],{"class":30,"line":31},[28,11622,224],{"class":38},[28,11624,11625],{"class":38},"  *",[28,11627,11628],{"class":2040},"func",[28,11630,2504],{"class":34},[28,11632,11633],{"class":105},"  \u002F\u002F函数返回指针\n",[28,11635,11636],{"class":30,"line":94},[28,11637,1623],{"class":34},[28,11639,11640],{"class":30,"line":109},[28,11641,11642],{"class":105},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[28,11644,11645,11647,11649,11651,11653,11656,11658,11660,11662],{"class":30,"line":125},[28,11646,4224],{"class":38},[28,11648,6595],{"class":38},[28,11650,14],{"class":34},[28,11652,39],{"class":38},[28,11654,11655],{"class":38}," new",[28,11657,2459],{"class":38},[28,11659,221],{"class":34},[28,11661,659],{"class":45},[28,11663,2796],{"class":34},[28,11665,11666,11668],{"class":30,"line":131},[28,11667,4458],{"class":38},[28,11669,11670],{"class":34}," p;\n",[28,11672,11673],{"class":30,"line":1291},[28,11674,1642],{"class":34},[28,11676,11677,11679,11681],{"class":30,"line":1297},[28,11678,224],{"class":38},[28,11680,2050],{"class":2040},[28,11682,2053],{"class":34},[28,11684,11685],{"class":30,"line":1388},[28,11686,1623],{"class":34},[28,11688,11689],{"class":30,"line":1394},[28,11690,11691],{"class":105},"    \u002F\u002F在堆区开辟数据\n",[28,11693,11694,11696,11698,11700,11702,11704],{"class":30,"line":1406},[28,11695,2062],{"class":38},[28,11697,6595],{"class":38},[28,11699,14],{"class":34},[28,11701,39],{"class":38},[28,11703,11628],{"class":2040},[28,11705,5713],{"class":34},[28,11707,11708,11710,11712,11714,11716],{"class":30,"line":1689},[28,11709,1628],{"class":34},[28,11711,6496],{"class":38},[28,11713,14],{"class":34},[28,11715,1248],{"class":38},[28,11717,1270],{"class":34},[28,11719,11720],{"class":30,"line":1694},[28,11721,1642],{"class":34},[14,11723,11724],{},"图片展示：",[14,11726,11727],{},[1539,11728],{"alt":11596,"src":11729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11731,11732],{},"堆区内存由程序员管生死！！！",[171,11734,11735],{"start":109},[174,11736,11737],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11739,11740],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11742,11743,11744],{},"​语法：",[25,11745,11746],{}," new 数据类型",[14,11748,11749],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[18,11751,11753],{"className":209,"code":11752,"language":211,"meta":23,"style":23},"\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",[25,11754,11755,11760,11770,11774,11779,11784,11806,11810,11818,11822,11836,11848,11860,11872,11877,11882,11893,11897,11902,11910,11914,11919,11941,11967,11971,11989,11993,12019,12023,12035,12039,12044,12049,12057,12061,12065,12073,12077,12083,12089],{"__ignoreMap":23},[28,11756,11757],{"class":30,"line":31},[28,11758,11759],{"class":105},"\u002F\u002F1.new的基本语法\n",[28,11761,11762,11764,11766,11768],{"class":30,"line":94},[28,11763,224],{"class":38},[28,11765,6595],{"class":38},[28,11767,11628],{"class":2040},[28,11769,2053],{"class":34},[28,11771,11772],{"class":30,"line":109},[28,11773,1623],{"class":34},[28,11775,11776],{"class":30,"line":125},[28,11777,11778],{"class":105},"    \u002F\u002F在堆区创建整型数据\n",[28,11780,11781],{"class":30,"line":131},[28,11782,11783],{"class":105},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[28,11785,11786,11788,11790,11792,11795,11797,11799,11801,11803],{"class":30,"line":1291},[28,11787,2062],{"class":38},[28,11789,6595],{"class":38},[28,11791,14],{"class":34},[28,11793,11794],{"class":38},"=new",[28,11796,2459],{"class":38},[28,11798,221],{"class":34},[28,11800,659],{"class":45},[28,11802,6043],{"class":34},[28,11804,11805],{"class":105},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[28,11807,11808],{"class":30,"line":1297},[28,11809,1642],{"class":34},[28,11811,11812,11814,11816],{"class":30,"line":1388},[28,11813,5441],{"class":38},[28,11815,5665],{"class":2040},[28,11817,2053],{"class":34},[28,11819,11820],{"class":30,"line":1394},[28,11821,1623],{"class":34},[28,11823,11824,11826,11828,11830,11832,11834],{"class":30,"line":1406},[28,11825,2062],{"class":38},[28,11827,6595],{"class":38},[28,11829,14],{"class":34},[28,11831,39],{"class":38},[28,11833,11628],{"class":2040},[28,11835,5713],{"class":34},[28,11837,11838,11840,11842,11844,11846],{"class":30,"line":1689},[28,11839,1628],{"class":34},[28,11841,6496],{"class":38},[28,11843,14],{"class":34},[28,11845,1248],{"class":38},[28,11847,1270],{"class":34},[28,11849,11850,11852,11854,11856,11858],{"class":30,"line":1694},[28,11851,1628],{"class":34},[28,11853,6496],{"class":38},[28,11855,14],{"class":34},[28,11857,1248],{"class":38},[28,11859,1270],{"class":34},[28,11861,11862,11864,11866,11868,11870],{"class":30,"line":1700},[28,11863,1628],{"class":34},[28,11865,6496],{"class":38},[28,11867,14],{"class":34},[28,11869,1248],{"class":38},[28,11871,1270],{"class":34},[28,11873,11874],{"class":30,"line":1705},[28,11875,11876],{"class":105},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[28,11878,11879],{"class":30,"line":1719},[28,11880,11881],{"class":105},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[28,11883,11884,11887,11890],{"class":30,"line":1724},[28,11885,11886],{"class":38},"    delete",[28,11888,11889],{"class":34}," p;",[28,11891,11892],{"class":105},"\u002F\u002F删除这块地址\n",[28,11894,11895],{"class":30,"line":1730},[28,11896,1642],{"class":34},[28,11898,11899],{"class":30,"line":1751},[28,11900,11901],{"class":105},"\u002F\u002F2.在堆区利用new开辟数组\n",[28,11903,11904,11906,11908],{"class":30,"line":1756},[28,11905,5441],{"class":38},[28,11907,5734],{"class":2040},[28,11909,2053],{"class":34},[28,11911,11912],{"class":30,"line":1770},[28,11913,1623],{"class":34},[28,11915,11916],{"class":30,"line":1775},[28,11917,11918],{"class":105},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[28,11920,11921,11923,11925,11927,11929,11931,11933,11935,11938],{"class":30,"line":1804},[28,11922,2062],{"class":38},[28,11924,6595],{"class":38},[28,11926,3957],{"class":34},[28,11928,11794],{"class":38},[28,11930,2459],{"class":38},[28,11932,1096],{"class":34},[28,11934,659],{"class":45},[28,11936,11937],{"class":34},"];",[28,11939,11940],{"class":105},"\u002F\u002F10代表数组有10个元素\n",[28,11942,11943,11945,11947,11949,11951,11953,11955,11957,11959,11961,11963,11965],{"class":30,"line":1809},[28,11944,3278],{"class":38},[28,11946,1735],{"class":34},[28,11948,224],{"class":38},[28,11950,3109],{"class":34},[28,11952,39],{"class":38},[28,11954,407],{"class":45},[28,11956,3116],{"class":34},[28,11958,99],{"class":38},[28,11960,659],{"class":45},[28,11962,3116],{"class":34},[28,11964,2369],{"class":38},[28,11966,227],{"class":34},[28,11968,11969],{"class":30,"line":1826},[28,11970,2107],{"class":34},[28,11972,11973,11976,11978,11980,11982,11984,11986],{"class":30,"line":1831},[28,11974,11975],{"class":34},"        arr[i]",[28,11977,39],{"class":38},[28,11979,654],{"class":34},[28,11981,693],{"class":38},[28,11983,525],{"class":45},[28,11985,274],{"class":34},[28,11987,11988],{"class":105},"\u002F\u002F给10个元素赋值100～109\n",[28,11990,11991],{"class":30,"line":1836},[28,11992,2264],{"class":34},[28,11994,11995,11997,11999,12001,12003,12005,12007,12009,12011,12013,12015,12017],{"class":30,"line":1841},[28,11996,3278],{"class":38},[28,11998,1735],{"class":34},[28,12000,224],{"class":38},[28,12002,3109],{"class":34},[28,12004,39],{"class":38},[28,12006,407],{"class":45},[28,12008,3116],{"class":34},[28,12010,99],{"class":38},[28,12012,659],{"class":45},[28,12014,3116],{"class":34},[28,12016,2369],{"class":38},[28,12018,227],{"class":34},[28,12020,12021],{"class":30,"line":1855},[28,12022,2107],{"class":34},[28,12024,12025,12027,12029,12031,12033],{"class":30,"line":1860},[28,12026,3528],{"class":34},[28,12028,1248],{"class":38},[28,12030,4431],{"class":34},[28,12032,1248],{"class":38},[28,12034,1270],{"class":34},[28,12036,12037],{"class":30,"line":2654},[28,12038,2264],{"class":34},[28,12040,12041],{"class":30,"line":2668},[28,12042,12043],{"class":105},"    \u002F\u002F释放堆区数组\n",[28,12045,12046],{"class":30,"line":2676},[28,12047,12048],{"class":105},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[28,12050,12051,12054],{"class":30,"line":2681},[28,12052,12053],{"class":38},"    delete[]",[28,12055,12056],{"class":34}," arr;\n",[28,12058,12059],{"class":30,"line":2687},[28,12060,1642],{"class":34},[28,12062,12063],{"class":30,"line":2693},[28,12064,2477],{"emptyLinePlaceholder":144},[28,12066,12067,12069,12071],{"class":30,"line":2698},[28,12068,224],{"class":38},[28,12070,2050],{"class":2040},[28,12072,2053],{"class":34},[28,12074,12075],{"class":30,"line":8025},[28,12076,1623],{"class":34},[28,12078,12079,12081],{"class":30,"line":8049},[28,12080,5710],{"class":2040},[28,12082,5713],{"class":34},[28,12084,12085,12087],{"class":30,"line":8054},[28,12086,5779],{"class":2040},[28,12088,5713],{"class":34},[28,12090,12091],{"class":30,"line":8060},[28,12092,1642],{"class":34},[136,12094,12095],{},"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":23,"searchDepth":94,"depth":94,"links":12097},[12098],{"id":10766,"depth":94,"text":10767,"children":12099},[12100,12101],{"id":10798,"depth":109,"text":10799},{"id":11426,"depth":109,"text":11427},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10758,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12108,"title":12109,"body":12110,"description":23,"extension":142,"meta":13591,"navigation":144,"path":13592,"seo":13593,"stem":13594,"__hash__":13595},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12111,"toc":13583},[12112,12115,12119,12122,12125,12294,12298,12303,12320,12325,12477,12481,12484,12487,12881,12885,12888,12893,12896,13208,13212,13218,13378,13380,13388,13392,13395,13402,13580],[10,12113,12109],{"id":12114},"_6引用",[159,12116,12118],{"id":12117},"_61引用基本用法","6.1引用基本用法",[14,12120,12121],{},"引用的本质：给变量起别名",[14,12123,12124],{},"语法：数据类型 &别名=原名",[18,12126,12128],{"className":209,"code":12127,"language":211,"meta":23,"style":23},"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",[25,12129,12130,12138,12142,12154,12166,12170,12189,12208,12212,12223,12227,12246,12264,12268,12278,12282,12290],{"__ignoreMap":23},[28,12131,12132,12134,12136],{"class":30,"line":31},[28,12133,224],{"class":38},[28,12135,2050],{"class":2040},[28,12137,10930],{"class":34},[28,12139,12140],{"class":30,"line":94},[28,12141,2477],{"emptyLinePlaceholder":144},[28,12143,12144,12146,12148,12150,12152],{"class":30,"line":109},[28,12145,2062],{"class":38},[28,12147,10946],{"class":34},[28,12149,39],{"class":38},[28,12151,2115],{"class":45},[28,12153,1367],{"class":34},[28,12155,12156,12158,12160,12162,12164],{"class":30,"line":125},[28,12157,2062],{"class":38},[28,12159,10661],{"class":38},[28,12161,11022],{"class":34},[28,12163,39],{"class":38},[28,12165,1509],{"class":34},[28,12167,12168],{"class":30,"line":131},[28,12169,2477],{"emptyLinePlaceholder":144},[28,12171,12172,12174,12176,12179,12181,12183,12185,12187],{"class":30,"line":1291},[28,12173,6606],{"class":34},[28,12175,1248],{"class":38},[28,12177,12178],{"class":320}," \"a = \"",[28,12180,1521],{"class":38},[28,12182,10946],{"class":34},[28,12184,1248],{"class":38},[28,12186,11546],{"class":34},[28,12188,7345],{"class":105},[28,12190,12191,12193,12195,12198,12200,12202,12204,12206],{"class":30,"line":1297},[28,12192,6606],{"class":34},[28,12194,1248],{"class":38},[28,12196,12197],{"class":320}," \"b = \"",[28,12199,1521],{"class":38},[28,12201,10959],{"class":34},[28,12203,1248],{"class":38},[28,12205,11546],{"class":34},[28,12207,7345],{"class":105},[28,12209,12210],{"class":30,"line":1388},[28,12211,2477],{"emptyLinePlaceholder":144},[28,12213,12214,12217,12219,12221],{"class":30,"line":1394},[28,12215,12216],{"class":34},"    b ",[28,12218,39],{"class":38},[28,12220,5831],{"class":45},[28,12222,1367],{"class":34},[28,12224,12225],{"class":30,"line":1406},[28,12226,2477],{"emptyLinePlaceholder":144},[28,12228,12229,12231,12233,12235,12237,12239,12241,12243],{"class":30,"line":1689},[28,12230,6606],{"class":34},[28,12232,1248],{"class":38},[28,12234,12178],{"class":320},[28,12236,1521],{"class":38},[28,12238,10946],{"class":34},[28,12240,1248],{"class":38},[28,12242,11546],{"class":34},[28,12244,12245],{"class":105},"\u002F\u002F100\n",[28,12247,12248,12250,12252,12254,12256,12258,12260,12262],{"class":30,"line":1694},[28,12249,6606],{"class":34},[28,12251,1248],{"class":38},[28,12253,12197],{"class":320},[28,12255,1521],{"class":38},[28,12257,10959],{"class":34},[28,12259,1248],{"class":38},[28,12261,11546],{"class":34},[28,12263,12245],{"class":105},[28,12265,12266],{"class":30,"line":1700},[28,12267,2477],{"emptyLinePlaceholder":144},[28,12269,12270,12272,12274,12276],{"class":30,"line":1705},[28,12271,2380],{"class":2040},[28,12273,221],{"class":34},[28,12275,2385],{"class":320},[28,12277,2796],{"class":34},[28,12279,12280],{"class":30,"line":1719},[28,12281,2477],{"emptyLinePlaceholder":144},[28,12283,12284,12286,12288],{"class":30,"line":1724},[28,12285,4167],{"class":38},[28,12287,4170],{"class":45},[28,12289,1367],{"class":34},[28,12291,12292],{"class":30,"line":1730},[28,12293,1642],{"class":34},[159,12295,12297],{"id":12296},"_62引用的注意事项","6.2引用的注意事项",[171,12299,12300],{},[174,12301,12302],{},"引用必须要初始化",[18,12304,12306],{"className":209,"code":12305,"language":211,"meta":23,"style":23},"int &b;\u002F\u002F非常错误！\n",[25,12307,12308],{"__ignoreMap":23},[28,12309,12310,12312,12314,12317],{"class":30,"line":31},[28,12311,224],{"class":38},[28,12313,10661],{"class":38},[28,12315,12316],{"class":34},"b;",[28,12318,12319],{"class":105},"\u002F\u002F非常错误！\n",[171,12321,12322],{"start":94},[174,12323,12324],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[18,12326,12328],{"className":209,"code":12327,"language":211,"meta":23,"style":23},"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",[25,12329,12330,12338,12350,12362,12370,12386,12399,12417,12435,12455,12465,12473],{"__ignoreMap":23},[28,12331,12332,12334,12336],{"class":30,"line":31},[28,12333,224],{"class":38},[28,12335,2050],{"class":2040},[28,12337,10930],{"class":34},[28,12339,12340,12342,12344,12346,12348],{"class":30,"line":94},[28,12341,2062],{"class":38},[28,12343,10946],{"class":34},[28,12345,39],{"class":38},[28,12347,2115],{"class":45},[28,12349,1367],{"class":34},[28,12351,12352,12354,12356,12358,12360],{"class":30,"line":109},[28,12353,2062],{"class":38},[28,12355,10959],{"class":34},[28,12357,39],{"class":38},[28,12359,9027],{"class":45},[28,12361,1367],{"class":34},[28,12363,12364,12367],{"class":30,"line":125},[28,12365,12366],{"class":105},"    \u002F\u002Fint &c;",[28,12368,12369],{"class":105}," \u002F\u002F错误，引用必须初始化\n",[28,12371,12372,12374,12376,12378,12380,12383],{"class":30,"line":131},[28,12373,2062],{"class":38},[28,12375,10661],{"class":38},[28,12377,3023],{"class":34},[28,12379,39],{"class":38},[28,12381,12382],{"class":34}," a;",[28,12384,12385],{"class":105}," \u002F\u002F一旦初始化后，就不可以更改\n",[28,12387,12388,12391,12393,12396],{"class":30,"line":1291},[28,12389,12390],{"class":34},"    c ",[28,12392,39],{"class":38},[28,12394,12395],{"class":34}," b;",[28,12397,12398],{"class":105}," \u002F\u002F这是赋值操作，不是更改引用\n",[28,12400,12401,12403,12405,12407,12409,12411,12413,12415],{"class":30,"line":1297},[28,12402,6606],{"class":34},[28,12404,1248],{"class":38},[28,12406,12178],{"class":320},[28,12408,1521],{"class":38},[28,12410,10946],{"class":34},[28,12412,1248],{"class":38},[28,12414,11546],{"class":34},[28,12416,7330],{"class":105},[28,12418,12419,12421,12423,12425,12427,12429,12431,12433],{"class":30,"line":1388},[28,12420,6606],{"class":34},[28,12422,1248],{"class":38},[28,12424,12197],{"class":320},[28,12426,1521],{"class":38},[28,12428,10959],{"class":34},[28,12430,1248],{"class":38},[28,12432,11546],{"class":34},[28,12434,7330],{"class":105},[28,12436,12437,12439,12441,12444,12446,12449,12451,12453],{"class":30,"line":1394},[28,12438,6606],{"class":34},[28,12440,1248],{"class":38},[28,12442,12443],{"class":320}," \"c = \"",[28,12445,1521],{"class":38},[28,12447,12448],{"class":34}," c ",[28,12450,1248],{"class":38},[28,12452,11546],{"class":34},[28,12454,7330],{"class":105},[28,12456,12457,12459,12461,12463],{"class":30,"line":1406},[28,12458,2380],{"class":2040},[28,12460,221],{"class":34},[28,12462,2385],{"class":320},[28,12464,2796],{"class":34},[28,12466,12467,12469,12471],{"class":30,"line":1689},[28,12468,4167],{"class":38},[28,12470,4170],{"class":45},[28,12472,1367],{"class":34},[28,12474,12475],{"class":30,"line":1694},[28,12476,1642],{"class":34},[159,12478,12480],{"id":12479},"_63引用做函数参数","6.3引用做函数参数",[14,12482,12483],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12485,12486],{},"优点：可以简化指针修改实参",[18,12488,12490],{"className":209,"code":12489,"language":211,"meta":23,"style":23},"\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",[25,12491,12492,12497,12520,12531,12541,12550,12554,12558,12563,12585,12597,12609,12619,12623,12627,12632,12654,12664,12672,12680,12684,12688,12696,12700,12712,12724,12728,12739,12765,12769,12789,12813,12817,12827,12851,12855,12865,12869,12877],{"__ignoreMap":23},[28,12493,12494],{"class":30,"line":31},[28,12495,12496],{"class":105},"\u002F\u002F1. 值传递\n",[28,12498,12499,12501,12504,12506,12508,12510,12513,12515,12517],{"class":30,"line":94},[28,12500,5441],{"class":38},[28,12502,12503],{"class":2040}," mySwap01",[28,12505,221],{"class":34},[28,12507,224],{"class":38},[28,12509,1475],{"class":5293},[28,12511,12512],{"class":34},", ",[28,12514,224],{"class":38},[28,12516,2910],{"class":5293},[28,12518,12519],{"class":34},") {\n",[28,12521,12522,12524,12527,12529],{"class":30,"line":109},[28,12523,2062],{"class":38},[28,12525,12526],{"class":34}," temp ",[28,12528,39],{"class":38},[28,12530,1509],{"class":34},[28,12532,12533,12536,12538],{"class":30,"line":125},[28,12534,12535],{"class":34},"    a ",[28,12537,39],{"class":38},[28,12539,12540],{"class":34}," b;\n",[28,12542,12543,12545,12547],{"class":30,"line":131},[28,12544,12216],{"class":34},[28,12546,39],{"class":38},[28,12548,12549],{"class":34}," temp;\n",[28,12551,12552],{"class":30,"line":1291},[28,12553,1642],{"class":34},[28,12555,12556],{"class":30,"line":1297},[28,12557,2477],{"emptyLinePlaceholder":144},[28,12559,12560],{"class":30,"line":1388},[28,12561,12562],{"class":105},"\u002F\u002F2. 地址传递\n",[28,12564,12565,12567,12570,12572,12575,12577,12579,12581,12583],{"class":30,"line":1394},[28,12566,5441],{"class":38},[28,12568,12569],{"class":2040}," mySwap02",[28,12571,221],{"class":34},[28,12573,12574],{"class":38},"int*",[28,12576,1475],{"class":5293},[28,12578,12512],{"class":34},[28,12580,12574],{"class":38},[28,12582,2910],{"class":5293},[28,12584,12519],{"class":34},[28,12586,12587,12589,12591,12593,12595],{"class":30,"line":1406},[28,12588,2062],{"class":38},[28,12590,12526],{"class":34},[28,12592,39],{"class":38},[28,12594,6595],{"class":38},[28,12596,6274],{"class":34},[28,12598,12599,12601,12603,12605,12607],{"class":30,"line":1689},[28,12600,6480],{"class":38},[28,12602,10996],{"class":34},[28,12604,39],{"class":38},[28,12606,6595],{"class":38},[28,12608,6146],{"class":34},[28,12610,12611,12613,12615,12617],{"class":30,"line":1694},[28,12612,6480],{"class":38},[28,12614,11022],{"class":34},[28,12616,39],{"class":38},[28,12618,12549],{"class":34},[28,12620,12621],{"class":30,"line":1700},[28,12622,1642],{"class":34},[28,12624,12625],{"class":30,"line":1705},[28,12626,2477],{"emptyLinePlaceholder":144},[28,12628,12629],{"class":30,"line":1719},[28,12630,12631],{"class":105},"\u002F\u002F3. 引用传递\n",[28,12633,12634,12636,12639,12641,12644,12646,12648,12650,12652],{"class":30,"line":1724},[28,12635,5441],{"class":38},[28,12637,12638],{"class":2040}," mySwap03",[28,12640,221],{"class":34},[28,12642,12643],{"class":38},"int&",[28,12645,1475],{"class":5293},[28,12647,12512],{"class":34},[28,12649,12643],{"class":38},[28,12651,2910],{"class":5293},[28,12653,12519],{"class":34},[28,12655,12656,12658,12660,12662],{"class":30,"line":1730},[28,12657,2062],{"class":38},[28,12659,12526],{"class":34},[28,12661,39],{"class":38},[28,12663,1509],{"class":34},[28,12665,12666,12668,12670],{"class":30,"line":1751},[28,12667,12535],{"class":34},[28,12669,39],{"class":38},[28,12671,12540],{"class":34},[28,12673,12674,12676,12678],{"class":30,"line":1756},[28,12675,12216],{"class":34},[28,12677,39],{"class":38},[28,12679,12549],{"class":34},[28,12681,12682],{"class":30,"line":1770},[28,12683,1642],{"class":34},[28,12685,12686],{"class":30,"line":1775},[28,12687,2477],{"emptyLinePlaceholder":144},[28,12689,12690,12692,12694],{"class":30,"line":1804},[28,12691,224],{"class":38},[28,12693,2050],{"class":2040},[28,12695,10930],{"class":34},[28,12697,12698],{"class":30,"line":1809},[28,12699,2477],{"emptyLinePlaceholder":144},[28,12701,12702,12704,12706,12708,12710],{"class":30,"line":1826},[28,12703,2062],{"class":38},[28,12705,10946],{"class":34},[28,12707,39],{"class":38},[28,12709,2115],{"class":45},[28,12711,1367],{"class":34},[28,12713,12714,12716,12718,12720,12722],{"class":30,"line":1831},[28,12715,2062],{"class":38},[28,12717,10959],{"class":34},[28,12719,39],{"class":38},[28,12721,9027],{"class":45},[28,12723,1367],{"class":34},[28,12725,12726],{"class":30,"line":1836},[28,12727,2477],{"emptyLinePlaceholder":144},[28,12729,12730,12733,12736],{"class":30,"line":1841},[28,12731,12732],{"class":2040},"    mySwap01",[28,12734,12735],{"class":34},"(a, b);",[28,12737,12738],{"class":105},"\u002F\u002F值传递，形参不会修饰实参\n",[28,12740,12741,12743,12745,12748,12750,12752,12754,12757,12759,12761,12763],{"class":30,"line":1855},[28,12742,6606],{"class":34},[28,12744,1248],{"class":38},[28,12746,12747],{"class":320}," \"a:\"",[28,12749,1521],{"class":38},[28,12751,10946],{"class":34},[28,12753,1248],{"class":38},[28,12755,12756],{"class":320}," \" b:\"",[28,12758,1521],{"class":38},[28,12760,10959],{"class":34},[28,12762,1248],{"class":38},[28,12764,8917],{"class":34},[28,12766,12767],{"class":30,"line":1860},[28,12768,2477],{"emptyLinePlaceholder":144},[28,12770,12771,12774,12776,12778,12781,12783,12786],{"class":30,"line":2654},[28,12772,12773],{"class":2040},"    mySwap02",[28,12775,221],{"class":34},[28,12777,567],{"class":38},[28,12779,12780],{"class":34},"a, ",[28,12782,567],{"class":38},[28,12784,12785],{"class":34},"b);",[28,12787,12788],{"class":105},"\u002F\u002F地址传递，形参会修饰实参\n",[28,12790,12791,12793,12795,12797,12799,12801,12803,12805,12807,12809,12811],{"class":30,"line":2668},[28,12792,6606],{"class":34},[28,12794,1248],{"class":38},[28,12796,12747],{"class":320},[28,12798,1521],{"class":38},[28,12800,10946],{"class":34},[28,12802,1248],{"class":38},[28,12804,12756],{"class":320},[28,12806,1521],{"class":38},[28,12808,10959],{"class":34},[28,12810,1248],{"class":38},[28,12812,8917],{"class":34},[28,12814,12815],{"class":30,"line":2676},[28,12816,2477],{"emptyLinePlaceholder":144},[28,12818,12819,12822,12824],{"class":30,"line":2681},[28,12820,12821],{"class":2040},"    mySwap03",[28,12823,12735],{"class":34},[28,12825,12826],{"class":105},"\u002F\u002F引用传递，形参会修饰实参\n",[28,12828,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849],{"class":30,"line":2687},[28,12830,6606],{"class":34},[28,12832,1248],{"class":38},[28,12834,12747],{"class":320},[28,12836,1521],{"class":38},[28,12838,10946],{"class":34},[28,12840,1248],{"class":38},[28,12842,12756],{"class":320},[28,12844,1521],{"class":38},[28,12846,10959],{"class":34},[28,12848,1248],{"class":38},[28,12850,8917],{"class":34},[28,12852,12853],{"class":30,"line":2693},[28,12854,2477],{"emptyLinePlaceholder":144},[28,12856,12857,12859,12861,12863],{"class":30,"line":2698},[28,12858,2380],{"class":2040},[28,12860,221],{"class":34},[28,12862,2385],{"class":320},[28,12864,2796],{"class":34},[28,12866,12867],{"class":30,"line":8025},[28,12868,2477],{"emptyLinePlaceholder":144},[28,12870,12871,12873,12875],{"class":30,"line":8049},[28,12872,4167],{"class":38},[28,12874,4170],{"class":45},[28,12876,1367],{"class":34},[28,12878,12879],{"class":30,"line":8054},[28,12880,1642],{"class":34},[159,12882,12884],{"id":12883},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12886,12887],{},"作用：引用是可以作为函数的返回值存在的",[14,12889,9102,12890],{},[365,12891,12892],{},"不要返回局部变量引用",[14,12894,12895],{},"用法：函数调用作为左值",[18,12897,12899],{"className":10018,"code":12898,"language":10020,"meta":23,"style":23},"\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",[25,12900,12901,12906,12914,12929,12935,12939,12943,12948,12956,12973,12979,12983,12987,12995,12999,13004,13018,13038,13057,13061,13066,13079,13099,13117,13121,13137,13141,13160,13178,13182,13192,13196,13204],{"__ignoreMap":23},[28,12902,12903],{"class":30,"line":31},[28,12904,12905],{"class":105},"\u002F\u002F返回局部变量引用\n",[28,12907,12908,12910,12912],{"class":30,"line":94},[28,12909,12643],{"class":38},[28,12911,5665],{"class":2040},[28,12913,10930],{"class":34},[28,12915,12916,12918,12920,12922,12924,12926],{"class":30,"line":109},[28,12917,2062],{"class":38},[28,12919,10946],{"class":34},[28,12921,39],{"class":38},[28,12923,2115],{"class":45},[28,12925,274],{"class":34},[28,12927,12928],{"class":105}," \u002F\u002F局部变量\n",[28,12930,12931,12933],{"class":30,"line":125},[28,12932,4167],{"class":38},[28,12934,1509],{"class":34},[28,12936,12937],{"class":30,"line":131},[28,12938,1642],{"class":34},[28,12940,12941],{"class":30,"line":1291},[28,12942,2477],{"emptyLinePlaceholder":144},[28,12944,12945],{"class":30,"line":1297},[28,12946,12947],{"class":105},"\u002F\u002F返回静态变量引用\n",[28,12949,12950,12952,12954],{"class":30,"line":1388},[28,12951,12643],{"class":38},[28,12953,5734],{"class":2040},[28,12955,10930],{"class":34},[28,12957,12958,12960,12962,12964,12966,12968,12970],{"class":30,"line":1394},[28,12959,11097],{"class":38},[28,12961,2459],{"class":38},[28,12963,10946],{"class":34},[28,12965,39],{"class":38},[28,12967,9027],{"class":45},[28,12969,274],{"class":34},[28,12971,12972],{"class":105},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[28,12974,12975,12977],{"class":30,"line":1406},[28,12976,4167],{"class":38},[28,12978,1509],{"class":34},[28,12980,12981],{"class":30,"line":1689},[28,12982,1642],{"class":34},[28,12984,12985],{"class":30,"line":1694},[28,12986,2477],{"emptyLinePlaceholder":144},[28,12988,12989,12991,12993],{"class":30,"line":1700},[28,12990,224],{"class":38},[28,12992,2050],{"class":2040},[28,12994,10930],{"class":34},[28,12996,12997],{"class":30,"line":1705},[28,12998,2477],{"emptyLinePlaceholder":144},[28,13000,13001],{"class":30,"line":1719},[28,13002,13003],{"class":105},"    \u002F\u002F不能返回局部变量的引用\n",[28,13005,13006,13009,13012,13014,13016],{"class":30,"line":1724},[28,13007,13008],{"class":38},"    int&",[28,13010,13011],{"class":34}," ref ",[28,13013,39],{"class":38},[28,13015,5665],{"class":2040},[28,13017,5713],{"class":34},[28,13019,13020,13022,13024,13027,13029,13031,13033,13035],{"class":30,"line":1730},[28,13021,6606],{"class":34},[28,13023,1248],{"class":38},[28,13025,13026],{"class":320}," \"ref = \"",[28,13028,1521],{"class":38},[28,13030,13011],{"class":34},[28,13032,1248],{"class":38},[28,13034,11546],{"class":34},[28,13036,13037],{"class":105},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[28,13039,13040,13042,13044,13046,13048,13050,13052,13054],{"class":30,"line":1751},[28,13041,6606],{"class":34},[28,13043,1248],{"class":38},[28,13045,13026],{"class":320},[28,13047,1521],{"class":38},[28,13049,13011],{"class":34},[28,13051,1248],{"class":38},[28,13053,11546],{"class":34},[28,13055,13056],{"class":105},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[28,13058,13059],{"class":30,"line":1756},[28,13060,2477],{"emptyLinePlaceholder":144},[28,13062,13063],{"class":30,"line":1770},[28,13064,13065],{"class":105},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[28,13067,13068,13070,13073,13075,13077],{"class":30,"line":1775},[28,13069,13008],{"class":38},[28,13071,13072],{"class":34}," ref2 ",[28,13074,39],{"class":38},[28,13076,5734],{"class":2040},[28,13078,5713],{"class":34},[28,13080,13081,13083,13085,13088,13090,13092,13094,13096],{"class":30,"line":1804},[28,13082,6606],{"class":34},[28,13084,1248],{"class":38},[28,13086,13087],{"class":320}," \"ref2 = \"",[28,13089,1521],{"class":38},[28,13091,13072],{"class":34},[28,13093,1248],{"class":38},[28,13095,11546],{"class":34},[28,13097,13098],{"class":105}," \u002F\u002F20\n",[28,13100,13101,13103,13105,13107,13109,13111,13113,13115],{"class":30,"line":1809},[28,13102,6606],{"class":34},[28,13104,1248],{"class":38},[28,13106,13087],{"class":320},[28,13108,1521],{"class":38},[28,13110,13072],{"class":34},[28,13112,1248],{"class":38},[28,13114,11546],{"class":34},[28,13116,13098],{"class":105},[28,13118,13119],{"class":30,"line":1826},[28,13120,2477],{"emptyLinePlaceholder":144},[28,13122,13123,13125,13128,13130,13132,13134],{"class":30,"line":1831},[28,13124,5779],{"class":2040},[28,13126,13127],{"class":34},"() ",[28,13129,39],{"class":38},[28,13131,3076],{"class":45},[28,13133,274],{"class":34},[28,13135,13136],{"class":105},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[28,13138,13139],{"class":30,"line":1836},[28,13140,2477],{"emptyLinePlaceholder":144},[28,13142,13143,13145,13147,13149,13151,13153,13155,13157],{"class":30,"line":1841},[28,13144,6606],{"class":34},[28,13146,1248],{"class":38},[28,13148,13087],{"class":320},[28,13150,1521],{"class":38},[28,13152,13072],{"class":34},[28,13154,1248],{"class":38},[28,13156,11546],{"class":34},[28,13158,13159],{"class":105}," \u002F\u002F1000\n",[28,13161,13162,13164,13166,13168,13170,13172,13174,13176],{"class":30,"line":1855},[28,13163,6606],{"class":34},[28,13165,1248],{"class":38},[28,13167,13087],{"class":320},[28,13169,1521],{"class":38},[28,13171,13072],{"class":34},[28,13173,1248],{"class":38},[28,13175,11546],{"class":34},[28,13177,13159],{"class":105},[28,13179,13180],{"class":30,"line":1860},[28,13181,2477],{"emptyLinePlaceholder":144},[28,13183,13184,13186,13188,13190],{"class":30,"line":2654},[28,13185,2380],{"class":2040},[28,13187,221],{"class":34},[28,13189,2385],{"class":320},[28,13191,2796],{"class":34},[28,13193,13194],{"class":30,"line":2668},[28,13195,2477],{"emptyLinePlaceholder":144},[28,13197,13198,13200,13202],{"class":30,"line":2676},[28,13199,4167],{"class":38},[28,13201,4170],{"class":45},[28,13203,1367],{"class":34},[28,13205,13206],{"class":30,"line":2681},[28,13207,1642],{"class":34},[159,13209,13211],{"id":13210},"_65引用的本质","6.5引用的本质",[14,13213,13214,13215],{},"本质：",[365,13216,13217],{},"引用的本质在c++内部实现是一个指针常量.",[18,13219,13221],{"className":209,"code":13220,"language":211,"meta":23,"style":23},"\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",[25,13222,13223,13228,13244,13258,13262,13271,13283,13288,13293,13304,13317,13321,13337,13354,13358,13366,13374],{"__ignoreMap":23},[28,13224,13225],{"class":30,"line":31},[28,13226,13227],{"class":105},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[28,13229,13230,13232,13234,13236,13238,13241],{"class":30,"line":94},[28,13231,5441],{"class":38},[28,13233,11462],{"class":2040},[28,13235,221],{"class":34},[28,13237,12643],{"class":38},[28,13239,13240],{"class":5293}," ref",[28,13242,13243],{"class":34},"){\n",[28,13245,13246,13249,13251,13253,13255],{"class":30,"line":109},[28,13247,13248],{"class":34},"    ref ",[28,13250,39],{"class":38},[28,13252,5831],{"class":45},[28,13254,274],{"class":34},[28,13256,13257],{"class":105}," \u002F\u002F ref是引用，转换为*ref = 100\n",[28,13259,13260],{"class":30,"line":125},[28,13261,1642],{"class":34},[28,13263,13264,13266,13268],{"class":30,"line":131},[28,13265,224],{"class":38},[28,13267,2050],{"class":2040},[28,13269,13270],{"class":34},"(){\n",[28,13272,13273,13275,13277,13279,13281],{"class":30,"line":1291},[28,13274,2062],{"class":38},[28,13276,10946],{"class":34},[28,13278,39],{"class":38},[28,13280,2115],{"class":45},[28,13282,1367],{"class":34},[28,13284,13285],{"class":30,"line":1297},[28,13286,13287],{"class":34},"    \n",[28,13289,13290],{"class":30,"line":1388},[28,13291,13292],{"class":105},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[28,13294,13295,13297,13299,13301],{"class":30,"line":1394},[28,13296,13008],{"class":38},[28,13298,13011],{"class":34},[28,13300,39],{"class":38},[28,13302,13303],{"class":34}," a; \n",[28,13305,13306,13308,13310,13312,13314],{"class":30,"line":1406},[28,13307,13248],{"class":34},[28,13309,39],{"class":38},[28,13311,9027],{"class":45},[28,13313,274],{"class":34},[28,13315,13316],{"class":105}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[28,13318,13319],{"class":30,"line":1689},[28,13320,13287],{"class":34},[28,13322,13323,13325,13327,13329,13331,13333,13335],{"class":30,"line":1694},[28,13324,6606],{"class":34},[28,13326,1248],{"class":38},[28,13328,12747],{"class":320},[28,13330,1521],{"class":38},[28,13332,10946],{"class":34},[28,13334,1248],{"class":38},[28,13336,8917],{"class":34},[28,13338,13339,13341,13343,13346,13348,13350,13352],{"class":30,"line":1700},[28,13340,6606],{"class":34},[28,13342,1248],{"class":38},[28,13344,13345],{"class":320}," \"ref:\"",[28,13347,1521],{"class":38},[28,13349,13011],{"class":34},[28,13351,1248],{"class":38},[28,13353,8917],{"class":34},[28,13355,13356],{"class":30,"line":1705},[28,13357,13287],{"class":34},[28,13359,13360,13363],{"class":30,"line":1719},[28,13361,13362],{"class":2040},"    func",[28,13364,13365],{"class":34},"(a);\n",[28,13367,13368,13370,13372],{"class":30,"line":1724},[28,13369,4167],{"class":38},[28,13371,4170],{"class":45},[28,13373,1367],{"class":34},[28,13375,13376],{"class":30,"line":1730},[28,13377,1642],{"class":34},[14,13379,11409],{},[171,13381,13382,13385],{},[174,13383,13384],{},"引用的本质，就是一个指针常量",[174,13386,13387],{},"引用一旦初始化，就不可以发生改变",[159,13389,13391],{"id":13390},"_66常量引用","6.6常量引用",[14,13393,13394],{},"作用：常量引用主要用来修饰形参",[14,13396,13397,13398,13401],{},"在函数形参列表中，可以加",[365,13399,13400],{},"const修饰形参","，防止形参改变实参",[18,13403,13405],{"className":209,"code":13404,"language":211,"meta":23,"style":23},"\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",[25,13406,13407,13412,13417,13436,13441,13454,13458,13462,13470,13474,13479,13484,13498,13502,13510,13522,13526,13531,13543,13550,13554,13564,13568,13576],{"__ignoreMap":23},[28,13408,13409],{"class":30,"line":31},[28,13410,13411],{"class":105},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[28,13413,13414],{"class":30,"line":94},[28,13415,13416],{"class":105},"\u002F\u002F加上const就不能修改实参的\n",[28,13418,13419,13421,13424,13426,13428,13431,13434],{"class":30,"line":109},[28,13420,5441],{"class":38},[28,13422,13423],{"class":2040}," showValue",[28,13425,221],{"class":34},[28,13427,6869],{"class":38},[28,13429,13430],{"class":38}," int&",[28,13432,13433],{"class":5293}," v",[28,13435,12519],{"class":34},[28,13437,13438],{"class":30,"line":125},[28,13439,13440],{"class":105},"    \u002F\u002Fv += 100;\n",[28,13442,13443,13445,13447,13450,13452],{"class":30,"line":131},[28,13444,6606],{"class":34},[28,13446,1248],{"class":38},[28,13448,13449],{"class":34}," v ",[28,13451,1248],{"class":38},[28,13453,8917],{"class":34},[28,13455,13456],{"class":30,"line":1291},[28,13457,1642],{"class":34},[28,13459,13460],{"class":30,"line":1297},[28,13461,2477],{"emptyLinePlaceholder":144},[28,13463,13464,13466,13468],{"class":30,"line":1388},[28,13465,224],{"class":38},[28,13467,2050],{"class":2040},[28,13469,10930],{"class":34},[28,13471,13472],{"class":30,"line":1394},[28,13473,2477],{"emptyLinePlaceholder":144},[28,13475,13476],{"class":30,"line":1406},[28,13477,13478],{"class":105},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[28,13480,13481],{"class":30,"line":1689},[28,13482,13483],{"class":105},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[28,13485,13486,13488,13490,13492,13494,13496],{"class":30,"line":1694},[28,13487,11298],{"class":38},[28,13489,13430],{"class":38},[28,13491,13011],{"class":34},[28,13493,39],{"class":38},[28,13495,2115],{"class":45},[28,13497,1367],{"class":34},[28,13499,13500],{"class":30,"line":1700},[28,13501,2477],{"emptyLinePlaceholder":144},[28,13503,13504,13507],{"class":30,"line":1705},[28,13505,13506],{"class":105},"    \u002F\u002Fref = 100;",[28,13508,13509],{"class":105},"  \u002F\u002F加入const后不可以修改变量\n",[28,13511,13512,13514,13516,13518,13520],{"class":30,"line":1719},[28,13513,6606],{"class":34},[28,13515,1248],{"class":38},[28,13517,13011],{"class":34},[28,13519,1248],{"class":38},[28,13521,8917],{"class":34},[28,13523,13524],{"class":30,"line":1724},[28,13525,2477],{"emptyLinePlaceholder":144},[28,13527,13528],{"class":30,"line":1730},[28,13529,13530],{"class":105},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[28,13532,13533,13535,13537,13539,13541],{"class":30,"line":1751},[28,13534,2062],{"class":38},[28,13536,10946],{"class":34},[28,13538,39],{"class":38},[28,13540,2115],{"class":45},[28,13542,1367],{"class":34},[28,13544,13545,13548],{"class":30,"line":1756},[28,13546,13547],{"class":2040},"    showValue",[28,13549,13365],{"class":34},[28,13551,13552],{"class":30,"line":1770},[28,13553,2477],{"emptyLinePlaceholder":144},[28,13555,13556,13558,13560,13562],{"class":30,"line":1775},[28,13557,2380],{"class":2040},[28,13559,221],{"class":34},[28,13561,2385],{"class":320},[28,13563,2796],{"class":34},[28,13565,13566],{"class":30,"line":1804},[28,13567,2477],{"emptyLinePlaceholder":144},[28,13569,13570,13572,13574],{"class":30,"line":1809},[28,13571,4167],{"class":38},[28,13573,4170],{"class":45},[28,13575,1367],{"class":34},[28,13577,13578],{"class":30,"line":1826},[28,13579,1642],{"class":34},[136,13581,13582],{},"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":23,"searchDepth":94,"depth":94,"links":13584},[13585,13586,13587,13588,13589,13590],{"id":12117,"depth":94,"text":12118},{"id":12296,"depth":94,"text":12297},{"id":12479,"depth":94,"text":12480},{"id":12883,"depth":94,"text":12884},{"id":13210,"depth":94,"text":13211},{"id":13390,"depth":94,"text":13391},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12109,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13597,"title":13598,"body":13599,"description":23,"extension":142,"meta":14680,"navigation":144,"path":14681,"seo":14682,"stem":14683,"__hash__":14684},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13600,"toc":14672},[13601,13604,13608,13611,13616,13848,13850,13861,13865,13868,13876,13980,13983,13987,13990,13994,13997,14002,14024,14030,14357,14360,14364,14372,14669],[10,13602,13598],{"id":13603},"_7函数高级部分",[159,13605,13607],{"id":13606},"_71函数默认参数","7.1函数默认参数",[14,13609,13610],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13612,5258,13613],{},[25,13614,13615],{}," 返回值类型  函数名 （参数= 默认值）{}",[18,13617,13619],{"className":209,"code":13618,"language":211,"meta":23,"style":23},"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",[25,13620,13621,13656,13671,13675,13679,13684,13689,13718,13738,13748,13752,13756,13764,13768,13796,13818,13822,13832,13836,13844],{"__ignoreMap":23},[28,13622,13623,13625,13627,13629,13631,13633,13635,13637,13639,13642,13644,13646,13648,13650,13652,13654],{"class":30,"line":31},[28,13624,224],{"class":38},[28,13626,11462],{"class":2040},[28,13628,221],{"class":34},[28,13630,224],{"class":38},[28,13632,1475],{"class":5293},[28,13634,12512],{"class":34},[28,13636,224],{"class":38},[28,13638,2910],{"class":5293},[28,13640,13641],{"class":38}," =",[28,13643,2115],{"class":45},[28,13645,12512],{"class":34},[28,13647,224],{"class":38},[28,13649,2926],{"class":5293},[28,13651,13641],{"class":38},[28,13653,2115],{"class":45},[28,13655,12519],{"class":34},[28,13657,13658,13660,13662,13664,13666,13668],{"class":30,"line":94},[28,13659,4167],{"class":38},[28,13661,10946],{"class":34},[28,13663,693],{"class":38},[28,13665,10959],{"class":34},[28,13667,693],{"class":38},[28,13669,13670],{"class":34}," c;\n",[28,13672,13673],{"class":30,"line":109},[28,13674,1642],{"class":34},[28,13676,13677],{"class":30,"line":125},[28,13678,2477],{"emptyLinePlaceholder":144},[28,13680,13681],{"class":30,"line":131},[28,13682,13683],{"class":105},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[28,13685,13686],{"class":30,"line":1291},[28,13687,13688],{"class":105},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[28,13690,13691,13693,13696,13698,13700,13702,13704,13706,13708,13710,13712,13714,13716],{"class":30,"line":1297},[28,13692,224],{"class":38},[28,13694,13695],{"class":2040}," func2",[28,13697,221],{"class":34},[28,13699,224],{"class":38},[28,13701,1475],{"class":5293},[28,13703,13641],{"class":38},[28,13705,2115],{"class":45},[28,13707,12512],{"class":34},[28,13709,224],{"class":38},[28,13711,2910],{"class":5293},[28,13713,13641],{"class":38},[28,13715,2115],{"class":45},[28,13717,2796],{"class":34},[28,13719,13720,13722,13724,13726,13728,13730,13732,13734,13736],{"class":30,"line":1388},[28,13721,224],{"class":38},[28,13723,13695],{"class":2040},[28,13725,221],{"class":34},[28,13727,224],{"class":38},[28,13729,1475],{"class":5293},[28,13731,12512],{"class":34},[28,13733,224],{"class":38},[28,13735,2910],{"class":5293},[28,13737,12519],{"class":34},[28,13739,13740,13742,13744,13746],{"class":30,"line":1394},[28,13741,4167],{"class":38},[28,13743,10946],{"class":34},[28,13745,693],{"class":38},[28,13747,12540],{"class":34},[28,13749,13750],{"class":30,"line":1406},[28,13751,1642],{"class":34},[28,13753,13754],{"class":30,"line":1689},[28,13755,2477],{"emptyLinePlaceholder":144},[28,13757,13758,13760,13762],{"class":30,"line":1694},[28,13759,224],{"class":38},[28,13761,2050],{"class":2040},[28,13763,10930],{"class":34},[28,13765,13766],{"class":30,"line":1700},[28,13767,2477],{"emptyLinePlaceholder":144},[28,13769,13770,13772,13774,13777,13779,13781,13783,13785,13787,13789,13792,13794],{"class":30,"line":1705},[28,13771,6606],{"class":34},[28,13773,1248],{"class":38},[28,13775,13776],{"class":320}," \"ret = \"",[28,13778,1521],{"class":38},[28,13780,11462],{"class":2040},[28,13782,221],{"class":34},[28,13784,102],{"class":45},[28,13786,12512],{"class":34},[28,13788,102],{"class":45},[28,13790,13791],{"class":34},") ",[28,13793,1248],{"class":38},[28,13795,8917],{"class":34},[28,13797,13798,13800,13802,13804,13806,13808,13810,13812,13814,13816],{"class":30,"line":1719},[28,13799,6606],{"class":34},[28,13801,1248],{"class":38},[28,13803,13776],{"class":320},[28,13805,1521],{"class":38},[28,13807,11462],{"class":2040},[28,13809,221],{"class":34},[28,13811,525],{"class":45},[28,13813,13791],{"class":34},[28,13815,1248],{"class":38},[28,13817,8917],{"class":34},[28,13819,13820],{"class":30,"line":1724},[28,13821,2477],{"emptyLinePlaceholder":144},[28,13823,13824,13826,13828,13830],{"class":30,"line":1730},[28,13825,2380],{"class":2040},[28,13827,221],{"class":34},[28,13829,2385],{"class":320},[28,13831,2796],{"class":34},[28,13833,13834],{"class":30,"line":1751},[28,13835,2477],{"emptyLinePlaceholder":144},[28,13837,13838,13840,13842],{"class":30,"line":1756},[28,13839,4167],{"class":38},[28,13841,4170],{"class":45},[28,13843,1367],{"class":34},[28,13845,13846],{"class":30,"line":1770},[28,13847,1642],{"class":34},[14,13849,11409],{},[171,13851,13852,13855,13858],{},[174,13853,13854],{},"我传就用我；没传就用你",[174,13856,13857],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[174,13859,13860],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[159,13862,13864],{"id":13863},"_72函数的占位参数","7.2函数的占位参数",[14,13866,13867],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13869,13870,13872,13873],{},[365,13871,5258],{}," ",[25,13874,13875],{},"返回值类型 函数名 (数据类型){}",[18,13877,13879],{"className":209,"code":13878,"language":211,"meta":23,"style":23},"\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",[25,13880,13881,13886,13904,13917,13921,13929,13933,13950,13954,13964,13968,13976],{"__ignoreMap":23},[28,13882,13883],{"class":30,"line":31},[28,13884,13885],{"class":105},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[28,13887,13888,13890,13892,13894,13896,13898,13900,13902],{"class":30,"line":94},[28,13889,5441],{"class":38},[28,13891,11462],{"class":2040},[28,13893,221],{"class":34},[28,13895,224],{"class":38},[28,13897,1475],{"class":5293},[28,13899,12512],{"class":34},[28,13901,224],{"class":38},[28,13903,12519],{"class":34},[28,13905,13906,13908,13910,13913,13915],{"class":30,"line":109},[28,13907,6606],{"class":34},[28,13909,1248],{"class":38},[28,13911,13912],{"class":320}," \"this is func\"",[28,13914,1521],{"class":38},[28,13916,8917],{"class":34},[28,13918,13919],{"class":30,"line":125},[28,13920,1642],{"class":34},[28,13922,13923,13925,13927],{"class":30,"line":131},[28,13924,224],{"class":38},[28,13926,2050],{"class":2040},[28,13928,10930],{"class":34},[28,13930,13931],{"class":30,"line":1291},[28,13932,2477],{"emptyLinePlaceholder":144},[28,13934,13935,13937,13939,13941,13943,13945,13947],{"class":30,"line":1297},[28,13936,13362],{"class":2040},[28,13938,221],{"class":34},[28,13940,659],{"class":45},[28,13942,49],{"class":34},[28,13944,659],{"class":45},[28,13946,6043],{"class":34},[28,13948,13949],{"class":105}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[28,13951,13952],{"class":30,"line":1388},[28,13953,2477],{"emptyLinePlaceholder":144},[28,13955,13956,13958,13960,13962],{"class":30,"line":1394},[28,13957,2380],{"class":2040},[28,13959,221],{"class":34},[28,13961,2385],{"class":320},[28,13963,2796],{"class":34},[28,13965,13966],{"class":30,"line":1406},[28,13967,2477],{"emptyLinePlaceholder":144},[28,13969,13970,13972,13974],{"class":30,"line":1689},[28,13971,4167],{"class":38},[28,13973,4170],{"class":45},[28,13975,1367],{"class":34},[28,13977,13978],{"class":30,"line":1694},[28,13979,1642],{"class":34},[14,13981,13982],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[159,13984,13986],{"id":13985},"_73函数重载","7.3函数重载",[14,13988,13989],{},"意思是函数名是可以相同的",[188,13991,13993],{"id":13992},"_731基本语法","7.3.1基本语法",[14,13995,13996],{},"作用：函数名可以相同，提高复用性",[14,13998,13999],{},[365,14000,14001],{},"函数重载满足条件：",[1211,14003,14004,14007,14010],{},[174,14005,14006],{},"同一个作用域下",[174,14008,14009],{},"函数名称相同",[174,14011,14012,14013,14016,14017,14020,14021],{},"函数参数",[365,14014,14015],{},"类型不同","  或者 ",[365,14018,14019],{},"个数不同"," 或者 ",[365,14022,14023],{},"顺序不同",[14,14025,14026,14029],{},[365,14027,14028],{},"注意:","  函数的返回值不可以作为函数重载的条件",[18,14031,14033],{"className":10018,"code":14032,"language":10020,"meta":23,"style":23},"\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",[25,14034,14035,14040,14048,14052,14065,14069,14083,14087,14100,14104,14119,14123,14136,14140,14161,14165,14178,14182,14202,14206,14219,14223,14227,14232,14237,14242,14247,14252,14256,14260,14268,14272,14278,14288,14298,14312,14327,14331,14341,14345,14353],{"__ignoreMap":23},[28,14036,14037],{"class":30,"line":31},[28,14038,14039],{"class":105},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[28,14041,14042,14044,14046],{"class":30,"line":94},[28,14043,5441],{"class":38},[28,14045,11462],{"class":2040},[28,14047,2053],{"class":34},[28,14049,14050],{"class":30,"line":109},[28,14051,1623],{"class":34},[28,14053,14054,14056,14058,14061,14063],{"class":30,"line":125},[28,14055,6606],{"class":34},[28,14057,1248],{"class":38},[28,14059,14060],{"class":320}," \"func 的调用！\"",[28,14062,1521],{"class":38},[28,14064,8917],{"class":34},[28,14066,14067],{"class":30,"line":131},[28,14068,1642],{"class":34},[28,14070,14071,14073,14075,14077,14079,14081],{"class":30,"line":1291},[28,14072,5441],{"class":38},[28,14074,11462],{"class":2040},[28,14076,221],{"class":34},[28,14078,224],{"class":38},[28,14080,1475],{"class":5293},[28,14082,227],{"class":34},[28,14084,14085],{"class":30,"line":1297},[28,14086,1623],{"class":34},[28,14088,14089,14091,14093,14096,14098],{"class":30,"line":1388},[28,14090,6606],{"class":34},[28,14092,1248],{"class":38},[28,14094,14095],{"class":320}," \"func (int a) 的调用！\"",[28,14097,1521],{"class":38},[28,14099,8917],{"class":34},[28,14101,14102],{"class":30,"line":1394},[28,14103,1642],{"class":34},[28,14105,14106,14108,14110,14112,14115,14117],{"class":30,"line":1406},[28,14107,5441],{"class":38},[28,14109,11462],{"class":2040},[28,14111,221],{"class":34},[28,14113,14114],{"class":38},"double",[28,14116,1475],{"class":5293},[28,14118,227],{"class":34},[28,14120,14121],{"class":30,"line":1689},[28,14122,1623],{"class":34},[28,14124,14125,14127,14129,14132,14134],{"class":30,"line":1694},[28,14126,6606],{"class":34},[28,14128,1248],{"class":38},[28,14130,14131],{"class":320}," \"func (double a)的调用！\"",[28,14133,1521],{"class":38},[28,14135,8917],{"class":34},[28,14137,14138],{"class":30,"line":1700},[28,14139,1642],{"class":34},[28,14141,14142,14144,14146,14148,14150,14152,14155,14157,14159],{"class":30,"line":1705},[28,14143,5441],{"class":38},[28,14145,11462],{"class":2040},[28,14147,221],{"class":34},[28,14149,224],{"class":38},[28,14151,1475],{"class":5293},[28,14153,14154],{"class":34}," ,",[28,14156,14114],{"class":38},[28,14158,2910],{"class":5293},[28,14160,227],{"class":34},[28,14162,14163],{"class":30,"line":1719},[28,14164,1623],{"class":34},[28,14166,14167,14169,14171,14174,14176],{"class":30,"line":1724},[28,14168,6606],{"class":34},[28,14170,1248],{"class":38},[28,14172,14173],{"class":320}," \"func (int a ,double b) 的调用！\"",[28,14175,1521],{"class":38},[28,14177,8917],{"class":34},[28,14179,14180],{"class":30,"line":1730},[28,14181,1642],{"class":34},[28,14183,14184,14186,14188,14190,14192,14194,14196,14198,14200],{"class":30,"line":1751},[28,14185,5441],{"class":38},[28,14187,11462],{"class":2040},[28,14189,221],{"class":34},[28,14191,14114],{"class":38},[28,14193,1475],{"class":5293},[28,14195,14154],{"class":34},[28,14197,224],{"class":38},[28,14199,2910],{"class":5293},[28,14201,227],{"class":34},[28,14203,14204],{"class":30,"line":1756},[28,14205,1623],{"class":34},[28,14207,14208,14210,14212,14215,14217],{"class":30,"line":1770},[28,14209,6606],{"class":34},[28,14211,1248],{"class":38},[28,14213,14214],{"class":320}," \"func (double a ,int b)的调用！\"",[28,14216,1521],{"class":38},[28,14218,8917],{"class":34},[28,14220,14221],{"class":30,"line":1775},[28,14222,1642],{"class":34},[28,14224,14225],{"class":30,"line":1804},[28,14226,2477],{"emptyLinePlaceholder":144},[28,14228,14229],{"class":30,"line":1809},[28,14230,14231],{"class":105},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[28,14233,14234],{"class":30,"line":1826},[28,14235,14236],{"class":105},"\u002F\u002Fint func(double a, int b)\n",[28,14238,14239],{"class":30,"line":1831},[28,14240,14241],{"class":105},"\u002F\u002F{\n",[28,14243,14244],{"class":30,"line":1836},[28,14245,14246],{"class":105},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[28,14248,14249],{"class":30,"line":1841},[28,14250,14251],{"class":105},"\u002F\u002F}\n",[28,14253,14254],{"class":30,"line":1855},[28,14255,2477],{"emptyLinePlaceholder":144},[28,14257,14258],{"class":30,"line":1860},[28,14259,2477],{"emptyLinePlaceholder":144},[28,14261,14262,14264,14266],{"class":30,"line":2654},[28,14263,224],{"class":38},[28,14265,2050],{"class":2040},[28,14267,10930],{"class":34},[28,14269,14270],{"class":30,"line":2668},[28,14271,2477],{"emptyLinePlaceholder":144},[28,14273,14274,14276],{"class":30,"line":2676},[28,14275,13362],{"class":2040},[28,14277,5713],{"class":34},[28,14279,14280,14282,14284,14286],{"class":30,"line":2681},[28,14281,13362],{"class":2040},[28,14283,221],{"class":34},[28,14285,659],{"class":45},[28,14287,2796],{"class":34},[28,14289,14290,14292,14294,14296],{"class":30,"line":2687},[28,14291,13362],{"class":2040},[28,14293,221],{"class":34},[28,14295,268],{"class":45},[28,14297,2796],{"class":34},[28,14299,14300,14302,14304,14306,14308,14310],{"class":30,"line":2693},[28,14301,13362],{"class":2040},[28,14303,221],{"class":34},[28,14305,659],{"class":45},[28,14307,49],{"class":34},[28,14309,268],{"class":45},[28,14311,2796],{"class":34},[28,14313,14314,14316,14318,14320,14323,14325],{"class":30,"line":2698},[28,14315,13362],{"class":2040},[28,14317,221],{"class":34},[28,14319,268],{"class":45},[28,14321,14322],{"class":34}," , ",[28,14324,659],{"class":45},[28,14326,2796],{"class":34},[28,14328,14329],{"class":30,"line":8025},[28,14330,13287],{"class":34},[28,14332,14333,14335,14337,14339],{"class":30,"line":8049},[28,14334,2380],{"class":2040},[28,14336,221],{"class":34},[28,14338,2385],{"class":320},[28,14340,2796],{"class":34},[28,14342,14343],{"class":30,"line":8054},[28,14344,2477],{"emptyLinePlaceholder":144},[28,14346,14347,14349,14351],{"class":30,"line":8060},[28,14348,4167],{"class":38},[28,14350,4170],{"class":45},[28,14352,1367],{"class":34},[28,14354,14355],{"class":30,"line":8087},[28,14356,1642],{"class":34},[14,14358,14359],{},"重点：函数返回值不可以作为函数重载条件！",[188,14361,14363],{"id":14362},"_732注意事项","7.3.2注意事项",[1211,14365,14366,14369],{},[174,14367,14368],{},"引用作为重载条件!!!",[174,14370,14371],{},"函数重载碰到函数默认参数",[18,14373,14375],{"className":209,"code":14374,"language":211,"meta":23,"style":23},"\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",[25,14376,14377,14382,14387,14391,14407,14411,14424,14428,14432,14450,14454,14467,14471,14475,14479,14484,14488,14512,14516,14529,14533,14537,14551,14555,14568,14572,14576,14584,14588,14600,14610,14623,14627,14631,14639,14643,14653,14657,14665],{"__ignoreMap":23},[28,14378,14379],{"class":30,"line":31},[28,14380,14381],{"class":105},"\u002F\u002F函数重载注意事项\n",[28,14383,14384],{"class":30,"line":94},[28,14385,14386],{"class":105},"\u002F\u002F1、引用作为重载条件\n",[28,14388,14389],{"class":30,"line":109},[28,14390,2477],{"emptyLinePlaceholder":144},[28,14392,14393,14395,14397,14399,14401,14403,14405],{"class":30,"line":125},[28,14394,5441],{"class":38},[28,14396,11462],{"class":2040},[28,14398,221],{"class":34},[28,14400,224],{"class":38},[28,14402,10661],{"class":38},[28,14404,35],{"class":5293},[28,14406,227],{"class":34},[28,14408,14409],{"class":30,"line":131},[28,14410,1623],{"class":34},[28,14412,14413,14415,14417,14420,14422],{"class":30,"line":1291},[28,14414,6606],{"class":34},[28,14416,1248],{"class":38},[28,14418,14419],{"class":320}," \"func (int &a) 调用 \"",[28,14421,1521],{"class":38},[28,14423,8917],{"class":34},[28,14425,14426],{"class":30,"line":1297},[28,14427,1642],{"class":34},[28,14429,14430],{"class":30,"line":1388},[28,14431,2477],{"emptyLinePlaceholder":144},[28,14433,14434,14436,14438,14440,14442,14444,14446,14448],{"class":30,"line":1394},[28,14435,5441],{"class":38},[28,14437,11462],{"class":2040},[28,14439,221],{"class":34},[28,14441,6869],{"class":38},[28,14443,2459],{"class":38},[28,14445,10661],{"class":38},[28,14447,35],{"class":5293},[28,14449,227],{"class":34},[28,14451,14452],{"class":30,"line":1406},[28,14453,1623],{"class":34},[28,14455,14456,14458,14460,14463,14465],{"class":30,"line":1689},[28,14457,6606],{"class":34},[28,14459,1248],{"class":38},[28,14461,14462],{"class":320}," \"func (const int &a) 调用 \"",[28,14464,1521],{"class":38},[28,14466,8917],{"class":34},[28,14468,14469],{"class":30,"line":1694},[28,14470,1642],{"class":34},[28,14472,14473],{"class":30,"line":1700},[28,14474,2477],{"emptyLinePlaceholder":144},[28,14476,14477],{"class":30,"line":1705},[28,14478,2477],{"emptyLinePlaceholder":144},[28,14480,14481],{"class":30,"line":1719},[28,14482,14483],{"class":105},"\u002F\u002F2、函数重载碰到函数默认参数\n",[28,14485,14486],{"class":30,"line":1724},[28,14487,2477],{"emptyLinePlaceholder":144},[28,14489,14490,14492,14494,14496,14498,14500,14502,14504,14506,14508,14510],{"class":30,"line":1730},[28,14491,5441],{"class":38},[28,14493,13695],{"class":2040},[28,14495,221],{"class":34},[28,14497,224],{"class":38},[28,14499,1475],{"class":5293},[28,14501,12512],{"class":34},[28,14503,224],{"class":38},[28,14505,2910],{"class":5293},[28,14507,13641],{"class":38},[28,14509,2115],{"class":45},[28,14511,227],{"class":34},[28,14513,14514],{"class":30,"line":1751},[28,14515,1623],{"class":34},[28,14517,14518,14520,14522,14525,14527],{"class":30,"line":1756},[28,14519,6606],{"class":34},[28,14521,1248],{"class":38},[28,14523,14524],{"class":320}," \"func2(int a, int b = 10) 调用\"",[28,14526,1521],{"class":38},[28,14528,8917],{"class":34},[28,14530,14531],{"class":30,"line":1770},[28,14532,1642],{"class":34},[28,14534,14535],{"class":30,"line":1775},[28,14536,2477],{"emptyLinePlaceholder":144},[28,14538,14539,14541,14543,14545,14547,14549],{"class":30,"line":1804},[28,14540,5441],{"class":38},[28,14542,13695],{"class":2040},[28,14544,221],{"class":34},[28,14546,224],{"class":38},[28,14548,1475],{"class":5293},[28,14550,227],{"class":34},[28,14552,14553],{"class":30,"line":1809},[28,14554,1623],{"class":34},[28,14556,14557,14559,14561,14564,14566],{"class":30,"line":1826},[28,14558,6606],{"class":34},[28,14560,1248],{"class":38},[28,14562,14563],{"class":320}," \"func2(int a) 调用\"",[28,14565,1521],{"class":38},[28,14567,8917],{"class":34},[28,14569,14570],{"class":30,"line":1831},[28,14571,1642],{"class":34},[28,14573,14574],{"class":30,"line":1836},[28,14575,2477],{"emptyLinePlaceholder":144},[28,14577,14578,14580,14582],{"class":30,"line":1841},[28,14579,224],{"class":38},[28,14581,2050],{"class":2040},[28,14583,10930],{"class":34},[28,14585,14586],{"class":30,"line":1855},[28,14587,13287],{"class":34},[28,14589,14590,14592,14594,14596,14598],{"class":30,"line":1860},[28,14591,2062],{"class":38},[28,14593,10946],{"class":34},[28,14595,39],{"class":38},[28,14597,2115],{"class":45},[28,14599,1367],{"class":34},[28,14601,14602,14604,14607],{"class":30,"line":2654},[28,14603,13362],{"class":2040},[28,14605,14606],{"class":34},"(a);",[28,14608,14609],{"class":105}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[28,14611,14612,14614,14616,14618,14620],{"class":30,"line":2668},[28,14613,13362],{"class":2040},[28,14615,221],{"class":34},[28,14617,659],{"class":45},[28,14619,6043],{"class":34},[28,14621,14622],{"class":105},"\u002F\u002F调用有const   10是个常量\n",[28,14624,14625],{"class":30,"line":2676},[28,14626,2477],{"emptyLinePlaceholder":144},[28,14628,14629],{"class":30,"line":2681},[28,14630,2477],{"emptyLinePlaceholder":144},[28,14632,14633,14636],{"class":30,"line":2687},[28,14634,14635],{"class":105},"    \u002F\u002Ffunc2(10);",[28,14637,14638],{"class":105}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[28,14640,14641],{"class":30,"line":2693},[28,14642,2477],{"emptyLinePlaceholder":144},[28,14644,14645,14647,14649,14651],{"class":30,"line":2698},[28,14646,2380],{"class":2040},[28,14648,221],{"class":34},[28,14650,2385],{"class":320},[28,14652,2796],{"class":34},[28,14654,14655],{"class":30,"line":8025},[28,14656,2477],{"emptyLinePlaceholder":144},[28,14658,14659,14661,14663],{"class":30,"line":8049},[28,14660,4167],{"class":38},[28,14662,4170],{"class":45},[28,14664,1367],{"class":34},[28,14666,14667],{"class":30,"line":8054},[28,14668,1642],{"class":34},[136,14670,14671],{},"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":23,"searchDepth":94,"depth":94,"links":14673},[14674,14675,14676],{"id":13606,"depth":94,"text":13607},{"id":13863,"depth":94,"text":13864},{"id":13985,"depth":94,"text":13986,"children":14677},[14678,14679],{"id":13992,"depth":109,"text":13993},{"id":14362,"depth":109,"text":14363},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13598,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14686,"title":14687,"body":14688,"description":23442,"extension":142,"meta":23443,"navigation":144,"path":23444,"seo":23445,"stem":23446,"__hash__":23447},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14689,"toc":23423},[14690,14693,14699,14706,14711,14714,14717,14720,14724,14728,14731,14734,14742,14747,14750,14757,14762,14921,14924,15177,15180,15183,15186,15191,15194,15197,15208,15213,15449,15453,15463,15466,15474,15621,15625,15628,15631,15635,16080,16084,16092,16100,17012,17019,17024,17652,17655,17658,17661,17780,17783,17870,17873,17999,18002,18096,18099,18452,18456,18464,18468,18475,18478,18481,18492,18498,18503,18515,18523,18543,18551,18568,18754,18757,18761,18764,18767,18770,18773,18776,18779,18782,19242,19248,19252,19255,19266,19853,19856,20345,20349,20352,20355,20358,20361,20364,20372,20768,20772,20775,20778,21225,21228,21231,21236,21239,21244,21247,21251,21254,21256,21262,21265,21571,21581,21622,21626,21629,21631,21664,21667,21974,21976,21991,21994,22017,22026,22032,22035,22039,22042,22045,22050,22061,22066,22074,22079,22209,22212,22215,22390,22395,22607,22611,22614,22728,22733,22972,22976,22980,22983,22986,22991,23096,23099,23102,23105,23109,23220,23223,23226,23231,23283,23286,23289,23294,23340,23343,23348,23416,23418,23421],[10,14691,14687],{"id":14692},"_8类和对象",[14,14694,14695,14696],{},"C++面向对象的三大特性为",[365,14697,14698],{},"封装、继承、多态",[14,14700,14701,14702,14705],{},"C++认为",[365,14703,14704],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14707,14708],{},[365,14709,14710],{},"例如：",[14,14712,14713],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14715,14716],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14718,14719],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[159,14721,14723],{"id":14722},"_81封装","8.1封装",[188,14725,14727],{"id":14726},"_811封装的意义","8.1.1封装的意义",[14,14729,14730],{},"封装是C++面向对象三大特性之一",[14,14732,14733],{},"封装的意义：",[1211,14735,14736,14739],{},[174,14737,14738],{},"将属性和行为作为一个整体，表现生活中的事物",[174,14740,14741],{},"将属性和行为加以权限控制",[14,14743,14744],{},[365,14745,14746],{},"封装意义一：",[14,14748,14749],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14751,14752,13872,14754],{},[365,14753,5258],{},[25,14755,14756],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[171,14758,14759],{},[174,14760,14761],{},"**示例1：**设计一个圆类，求圆的周长",[18,14763,14765],{"className":209,"code":14764,"language":211,"meta":23,"style":23},"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",[25,14766,14767,14775,14779,14784,14789,14794,14799,14806,14811,14821,14825,14843,14847,14851,14859,14863,14868,14873,14878,14883,14894,14917],{"__ignoreMap":23},[28,14768,14769,14772],{"class":30,"line":31},[28,14770,14771],{"class":38},"class",[28,14773,14774],{"class":2040}," Circle\n",[28,14776,14777],{"class":30,"line":94},[28,14778,1623],{"class":34},[28,14780,14781],{"class":30,"line":109},[28,14782,14783],{"class":105},"    \u002F\u002F访问权限\n",[28,14785,14786],{"class":30,"line":125},[28,14787,14788],{"class":105},"    \u002F\u002F公共权限\n",[28,14790,14791],{"class":30,"line":131},[28,14792,14793],{"class":38},"public:\n",[28,14795,14796],{"class":30,"line":1291},[28,14797,14798],{"class":105},"    \u002F\u002F属性\n",[28,14800,14801,14803],{"class":30,"line":1297},[28,14802,2062],{"class":38},[28,14804,14805],{"class":34}," m_r;\n",[28,14807,14808],{"class":30,"line":1388},[28,14809,14810],{"class":105},"    \u002F\u002F行为\n",[28,14812,14813,14816,14819],{"class":30,"line":1394},[28,14814,14815],{"class":38},"    double",[28,14817,14818],{"class":2040}," calculateZC",[28,14820,2053],{"class":34},[28,14822,14823],{"class":30,"line":1406},[28,14824,2107],{"class":34},[28,14826,14827,14830,14833,14835,14838,14840],{"class":30,"line":1689},[28,14828,14829],{"class":38},"        return",[28,14831,14832],{"class":45}," 2",[28,14834,668],{"class":38},[28,14836,14837],{"class":34},"PI",[28,14839,668],{"class":38},[28,14841,14842],{"class":34},"m_r;\n",[28,14844,14845],{"class":30,"line":1694},[28,14846,2264],{"class":34},[28,14848,14849],{"class":30,"line":1700},[28,14850,4072],{"class":34},[28,14852,14853,14855,14857],{"class":30,"line":1705},[28,14854,224],{"class":38},[28,14856,2050],{"class":2040},[28,14858,2053],{"class":34},[28,14860,14861],{"class":30,"line":1719},[28,14862,1623],{"class":34},[28,14864,14865],{"class":30,"line":1724},[28,14866,14867],{"class":105},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[28,14869,14870],{"class":30,"line":1730},[28,14871,14872],{"class":105},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[28,14874,14875],{"class":30,"line":1751},[28,14876,14877],{"class":34},"    Circle c1;\n",[28,14879,14880],{"class":30,"line":1756},[28,14881,14882],{"class":105},"    \u002F\u002F给圆对象 的属性进行赋值\n",[28,14884,14885,14888,14890,14892],{"class":30,"line":1770},[28,14886,14887],{"class":34},"    c1.m_r",[28,14889,39],{"class":38},[28,14891,659],{"class":45},[28,14893,1367],{"class":34},[28,14895,14896,14898,14900,14903,14905,14908,14911,14913,14915],{"class":30,"line":1775},[28,14897,1628],{"class":34},[28,14899,1248],{"class":38},[28,14901,14902],{"class":320},"\"圆的周长\"",[28,14904,1248],{"class":38},[28,14906,14907],{"class":34},"c1.",[28,14909,14910],{"class":2040},"calculateZC",[28,14912,2504],{"class":34},[28,14914,1248],{"class":38},[28,14916,1270],{"class":34},[28,14918,14919],{"class":30,"line":1804},[28,14920,1642],{"class":34},[14,14922,14923],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[18,14925,14927],{"className":209,"code":14926,"language":211,"meta":23,"style":23},"#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",[25,14928,14929,14935,14945,14951,14957,14961,14965,14970,14977,14982,15000,15004,15014,15018,15023,15039,15043,15053,15057,15062,15070,15074,15106,15110,15114,15122,15126,15131,15136,15150,15164,15173],{"__ignoreMap":23},[28,14930,14931,14933],{"class":30,"line":31},[28,14932,2026],{"class":38},[28,14934,2029],{"class":320},[28,14936,14937,14939,14941,14943],{"class":30,"line":94},[28,14938,2034],{"class":38},[28,14940,2037],{"class":38},[28,14942,2041],{"class":2040},[28,14944,1367],{"class":34},[28,14946,14947,14949],{"class":30,"line":109},[28,14948,2026],{"class":38},[28,14950,7826],{"class":320},[28,14952,14953,14955],{"class":30,"line":125},[28,14954,14771],{"class":38},[28,14956,7839],{"class":2040},[28,14958,14959],{"class":30,"line":131},[28,14960,1623],{"class":34},[28,14962,14963],{"class":30,"line":1291},[28,14964,14793],{"class":38},[28,14966,14967],{"class":30,"line":1297},[28,14968,14969],{"class":34},"    string m_name;\n",[28,14971,14972,14974],{"class":30,"line":1388},[28,14973,2062],{"class":38},[28,14975,14976],{"class":34}," m_id;\n",[28,14978,14979],{"class":30,"line":1394},[28,14980,14981],{"class":105},"    \u002F\u002F赋值姓名\n",[28,14983,14984,14987,14990,14992,14995,14998],{"class":30,"line":1406},[28,14985,14986],{"class":38},"    void",[28,14988,14989],{"class":2040}," setName",[28,14991,221],{"class":34},[28,14993,14994],{"class":2040},"string",[28,14996,14997],{"class":5293}," name",[28,14999,227],{"class":34},[28,15001,15002],{"class":30,"line":1689},[28,15003,2107],{"class":34},[28,15005,15006,15009,15011],{"class":30,"line":1694},[28,15007,15008],{"class":34},"        m_name",[28,15010,39],{"class":38},[28,15012,15013],{"class":34},"name;\n",[28,15015,15016],{"class":30,"line":1700},[28,15017,2264],{"class":34},[28,15019,15020],{"class":30,"line":1705},[28,15021,15022],{"class":105},"    \u002F\u002F赋值学号\n",[28,15024,15025,15027,15030,15032,15034,15037],{"class":30,"line":1719},[28,15026,14986],{"class":38},[28,15028,15029],{"class":2040}," setId",[28,15031,221],{"class":34},[28,15033,224],{"class":38},[28,15035,15036],{"class":5293}," id",[28,15038,227],{"class":34},[28,15040,15041],{"class":30,"line":1724},[28,15042,2107],{"class":34},[28,15044,15045,15048,15050],{"class":30,"line":1730},[28,15046,15047],{"class":34},"        m_id",[28,15049,39],{"class":38},[28,15051,15052],{"class":34},"id;\n",[28,15054,15055],{"class":30,"line":1751},[28,15056,2264],{"class":34},[28,15058,15059],{"class":30,"line":1756},[28,15060,15061],{"class":105},"    \u002F\u002F打印学生信息\n",[28,15063,15064,15066,15068],{"class":30,"line":1770},[28,15065,14986],{"class":38},[28,15067,9692],{"class":2040},[28,15069,2053],{"class":34},[28,15071,15072],{"class":30,"line":1775},[28,15073,2107],{"class":34},[28,15075,15076,15078,15080,15083,15085,15088,15090,15092,15094,15097,15099,15102,15104],{"class":30,"line":1804},[28,15077,3528],{"class":34},[28,15079,1248],{"class":38},[28,15081,15082],{"class":320},"\"姓名：\"",[28,15084,1248],{"class":38},[28,15086,15087],{"class":34},"m_name",[28,15089,1248],{"class":38},[28,15091,4436],{"class":320},[28,15093,1248],{"class":38},[28,15095,15096],{"class":320},"\"学号：\"",[28,15098,1248],{"class":38},[28,15100,15101],{"class":34},"m_id",[28,15103,1248],{"class":38},[28,15105,1270],{"class":34},[28,15107,15108],{"class":30,"line":1809},[28,15109,2264],{"class":34},[28,15111,15112],{"class":30,"line":1826},[28,15113,4072],{"class":34},[28,15115,15116,15118,15120],{"class":30,"line":1831},[28,15117,224],{"class":38},[28,15119,2050],{"class":2040},[28,15121,2053],{"class":34},[28,15123,15124],{"class":30,"line":1836},[28,15125,1623],{"class":34},[28,15127,15128],{"class":30,"line":1841},[28,15129,15130],{"class":105},"    \u002F\u002F实例化\n",[28,15132,15133],{"class":30,"line":1855},[28,15134,15135],{"class":34},"    Student s1;\n",[28,15137,15138,15141,15144,15146,15148],{"class":30,"line":1860},[28,15139,15140],{"class":34},"    s1.",[28,15142,15143],{"class":2040},"setName",[28,15145,221],{"class":34},[28,15147,7993],{"class":320},[28,15149,2796],{"class":34},[28,15151,15152,15154,15157,15159,15162],{"class":30,"line":2654},[28,15153,15140],{"class":34},[28,15155,15156],{"class":2040},"setId",[28,15158,221],{"class":34},[28,15160,15161],{"class":45},"123456",[28,15163,2796],{"class":34},[28,15165,15166,15168,15171],{"class":30,"line":2668},[28,15167,15140],{"class":34},[28,15169,15170],{"class":2040},"printInfo",[28,15172,5713],{"class":34},[28,15174,15175],{"class":30,"line":2676},[28,15176,1642],{"class":34},[14,15178,15179],{},"类中的属性和行为统称为成员",[14,15181,15182],{},"属性：成员属性(成员变量)",[14,15184,15185],{},"方法：成员函数(成员方法)",[14,15187,15188],{},[365,15189,15190],{},"封装意义二：",[14,15192,15193],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15195,15196],{},"访问权限有三种：",[171,15198,15199,15202,15205],{},[174,15200,15201],{},"public        公共权限",[174,15203,15204],{},"protected 保护权限",[174,15206,15207],{},"private      私有权限",[14,15209,15210],{},[365,15211,15212],{},"示例：",[18,15214,15216],{"className":10018,"code":15215,"language":10020,"meta":23,"style":23},"\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",[25,15217,15218,15223,15228,15233,15238,15242,15249,15253,15258,15262,15267,15271,15276,15281,15286,15290,15295,15300,15307,15311,15315,15323,15327,15338,15350,15362,15366,15370,15374,15382,15386,15391,15403,15411,15419,15423,15433,15437,15445],{"__ignoreMap":23},[28,15219,15220],{"class":30,"line":31},[28,15221,15222],{"class":105},"\u002F\u002F三种权限\n",[28,15224,15225],{"class":30,"line":94},[28,15226,15227],{"class":105},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[28,15229,15230],{"class":30,"line":109},[28,15231,15232],{"class":105},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[28,15234,15235],{"class":30,"line":125},[28,15236,15237],{"class":105},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[28,15239,15240],{"class":30,"line":131},[28,15241,2477],{"emptyLinePlaceholder":144},[28,15243,15244,15246],{"class":30,"line":1291},[28,15245,14771],{"class":38},[28,15247,15248],{"class":2040}," Person\n",[28,15250,15251],{"class":30,"line":1297},[28,15252,1623],{"class":34},[28,15254,15255],{"class":30,"line":1388},[28,15256,15257],{"class":105},"    \u002F\u002F姓名  公共权限\n",[28,15259,15260],{"class":30,"line":1394},[28,15261,14793],{"class":38},[28,15263,15264],{"class":30,"line":1406},[28,15265,15266],{"class":34},"    string m_Name;\n",[28,15268,15269],{"class":30,"line":1689},[28,15270,2477],{"emptyLinePlaceholder":144},[28,15272,15273],{"class":30,"line":1694},[28,15274,15275],{"class":105},"    \u002F\u002F汽车  保护权限\n",[28,15277,15278],{"class":30,"line":1700},[28,15279,15280],{"class":38},"protected:\n",[28,15282,15283],{"class":30,"line":1705},[28,15284,15285],{"class":34},"    string m_Car;\n",[28,15287,15288],{"class":30,"line":1719},[28,15289,2477],{"emptyLinePlaceholder":144},[28,15291,15292],{"class":30,"line":1724},[28,15293,15294],{"class":105},"    \u002F\u002F银行卡密码  私有权限\n",[28,15296,15297],{"class":30,"line":1730},[28,15298,15299],{"class":38},"private:\n",[28,15301,15302,15304],{"class":30,"line":1751},[28,15303,2062],{"class":38},[28,15305,15306],{"class":34}," m_Password;\n",[28,15308,15309],{"class":30,"line":1756},[28,15310,2477],{"emptyLinePlaceholder":144},[28,15312,15313],{"class":30,"line":1770},[28,15314,14793],{"class":38},[28,15316,15317,15319,15321],{"class":30,"line":1775},[28,15318,14986],{"class":38},[28,15320,11462],{"class":2040},[28,15322,2053],{"class":34},[28,15324,15325],{"class":30,"line":1804},[28,15326,2107],{"class":34},[28,15328,15329,15332,15334,15336],{"class":30,"line":1809},[28,15330,15331],{"class":34},"        m_Name ",[28,15333,39],{"class":38},[28,15335,9015],{"class":320},[28,15337,1367],{"class":34},[28,15339,15340,15343,15345,15348],{"class":30,"line":1826},[28,15341,15342],{"class":34},"        m_Car ",[28,15344,39],{"class":38},[28,15346,15347],{"class":320}," \"拖拉机\"",[28,15349,1367],{"class":34},[28,15351,15352,15355,15357,15360],{"class":30,"line":1831},[28,15353,15354],{"class":34},"        m_Password ",[28,15356,39],{"class":38},[28,15358,15359],{"class":45}," 123456",[28,15361,1367],{"class":34},[28,15363,15364],{"class":30,"line":1836},[28,15365,2264],{"class":34},[28,15367,15368],{"class":30,"line":1841},[28,15369,4072],{"class":34},[28,15371,15372],{"class":30,"line":1855},[28,15373,2477],{"emptyLinePlaceholder":144},[28,15375,15376,15378,15380],{"class":30,"line":1860},[28,15377,224],{"class":38},[28,15379,2050],{"class":2040},[28,15381,10930],{"class":34},[28,15383,15384],{"class":30,"line":2654},[28,15385,2477],{"emptyLinePlaceholder":144},[28,15387,15388],{"class":30,"line":2668},[28,15389,15390],{"class":34},"    Person p;\n",[28,15392,15393,15396,15398,15401],{"class":30,"line":2676},[28,15394,15395],{"class":34},"    p.m_Name ",[28,15397,39],{"class":38},[28,15399,15400],{"class":320}," \"李四\"",[28,15402,1367],{"class":34},[28,15404,15405,15408],{"class":30,"line":2681},[28,15406,15407],{"class":105},"    \u002F\u002Fp.m_Car = \"奔驰\";",[28,15409,15410],{"class":105},"  \u002F\u002F保护权限类外访问不到\n",[28,15412,15413,15416],{"class":30,"line":2687},[28,15414,15415],{"class":105},"    \u002F\u002Fp.m_Password = 123;",[28,15417,15418],{"class":105}," \u002F\u002F私有权限类外访问不到\n",[28,15420,15421],{"class":30,"line":2693},[28,15422,2477],{"emptyLinePlaceholder":144},[28,15424,15425,15427,15429,15431],{"class":30,"line":2698},[28,15426,2380],{"class":2040},[28,15428,221],{"class":34},[28,15430,2385],{"class":320},[28,15432,2796],{"class":34},[28,15434,15435],{"class":30,"line":8025},[28,15436,2477],{"emptyLinePlaceholder":144},[28,15438,15439,15441,15443],{"class":30,"line":8049},[28,15440,4167],{"class":38},[28,15442,4170],{"class":45},[28,15444,1367],{"class":34},[28,15446,15447],{"class":30,"line":8054},[28,15448,1642],{"class":34},[188,15450,15452],{"id":15451},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15454,15455,15456,15459,15460],{},"在C++中 struct和class唯一的",[365,15457,15458],{},"区别","就在于 ",[365,15461,15462],{},"默认的访问权限不同",[14,15464,15465],{},"区别：",[1211,15467,15468,15471],{},[174,15469,15470],{},"struct 默认权限为公共",[174,15472,15473],{},"class   默认权限为私有",[18,15475,15477],{"className":10018,"code":15476,"language":10020,"meta":23,"style":23},"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",[25,15478,15479,15486,15490,15500,15504,15508,15515,15519,15529,15533,15537,15545,15549,15554,15568,15572,15577,15591,15595,15605,15609,15617],{"__ignoreMap":23},[28,15480,15481,15483],{"class":30,"line":31},[28,15482,14771],{"class":38},[28,15484,15485],{"class":2040}," C1\n",[28,15487,15488],{"class":30,"line":94},[28,15489,1623],{"class":34},[28,15491,15492,15494,15497],{"class":30,"line":109},[28,15493,2062],{"class":38},[28,15495,15496],{"class":34},"  m_A;",[28,15498,15499],{"class":105}," \u002F\u002F默认是私有权限\n",[28,15501,15502],{"class":30,"line":125},[28,15503,4072],{"class":34},[28,15505,15506],{"class":30,"line":131},[28,15507,2477],{"emptyLinePlaceholder":144},[28,15509,15510,15512],{"class":30,"line":1291},[28,15511,7836],{"class":38},[28,15513,15514],{"class":2040}," C2\n",[28,15516,15517],{"class":30,"line":1297},[28,15518,1623],{"class":34},[28,15520,15521,15523,15526],{"class":30,"line":1388},[28,15522,2062],{"class":38},[28,15524,15525],{"class":34}," m_A;",[28,15527,15528],{"class":105},"  \u002F\u002F默认是公共权限\n",[28,15530,15531],{"class":30,"line":1394},[28,15532,4072],{"class":34},[28,15534,15535],{"class":30,"line":1406},[28,15536,2477],{"emptyLinePlaceholder":144},[28,15538,15539,15541,15543],{"class":30,"line":1689},[28,15540,224],{"class":38},[28,15542,2050],{"class":2040},[28,15544,10930],{"class":34},[28,15546,15547],{"class":30,"line":1694},[28,15548,2477],{"emptyLinePlaceholder":144},[28,15550,15551],{"class":30,"line":1700},[28,15552,15553],{"class":34},"    C1 c1;\n",[28,15555,15556,15559,15561,15563,15565],{"class":30,"line":1705},[28,15557,15558],{"class":34},"    c1.m_A ",[28,15560,39],{"class":38},[28,15562,2115],{"class":45},[28,15564,274],{"class":34},[28,15566,15567],{"class":105}," \u002F\u002F错误，访问权限是私有\n",[28,15569,15570],{"class":30,"line":1719},[28,15571,2477],{"emptyLinePlaceholder":144},[28,15573,15574],{"class":30,"line":1724},[28,15575,15576],{"class":34},"    C2 c2;\n",[28,15578,15579,15582,15584,15586,15588],{"class":30,"line":1730},[28,15580,15581],{"class":34},"    c2.m_A ",[28,15583,39],{"class":38},[28,15585,2115],{"class":45},[28,15587,274],{"class":34},[28,15589,15590],{"class":105}," \u002F\u002F正确，访问权限是公共\n",[28,15592,15593],{"class":30,"line":1751},[28,15594,2477],{"emptyLinePlaceholder":144},[28,15596,15597,15599,15601,15603],{"class":30,"line":1756},[28,15598,2380],{"class":2040},[28,15600,221],{"class":34},[28,15602,2385],{"class":320},[28,15604,2796],{"class":34},[28,15606,15607],{"class":30,"line":1770},[28,15608,2477],{"emptyLinePlaceholder":144},[28,15610,15611,15613,15615],{"class":30,"line":1775},[28,15612,4167],{"class":38},[28,15614,4170],{"class":45},[28,15616,1367],{"class":34},[28,15618,15619],{"class":30,"line":1804},[28,15620,1642],{"class":34},[188,15622,15624],{"id":15623},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15626,15627],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15629,15630],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15632,15633],{},[365,15634,15212],{},[18,15636,15638],{"className":10018,"code":15637,"language":10020,"meta":23,"style":23},"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",[25,15639,15640,15650,15654,15658,15663,15677,15686,15690,15700,15704,15711,15715,15719,15723,15728,15737,15744,15748,15753,15769,15792,15805,15812,15816,15825,15829,15833,15838,15854,15864,15868,15872,15876,15884,15888,15898,15902,15910,15914,15918,15926,15930,15934,15939,15952,15975,15979,15984,15997,16019,16023,16028,16042,16050,16054,16064,16068,16076],{"__ignoreMap":23},[28,15641,15642,15644,15647],{"class":30,"line":31},[28,15643,14771],{"class":38},[28,15645,15646],{"class":2040}," Person",[28,15648,15649],{"class":34}," {\n",[28,15651,15652],{"class":30,"line":94},[28,15653,14793],{"class":38},[28,15655,15656],{"class":30,"line":109},[28,15657,2477],{"emptyLinePlaceholder":144},[28,15659,15660],{"class":30,"line":125},[28,15661,15662],{"class":105},"    \u002F\u002F姓名设置可读可写\n",[28,15664,15665,15667,15669,15671,15673,15675],{"class":30,"line":131},[28,15666,14986],{"class":38},[28,15668,14989],{"class":2040},[28,15670,221],{"class":34},[28,15672,14994],{"class":2040},[28,15674,14997],{"class":5293},[28,15676,12519],{"class":34},[28,15678,15679,15681,15683],{"class":30,"line":1291},[28,15680,15331],{"class":34},[28,15682,39],{"class":38},[28,15684,15685],{"class":34}," name;\n",[28,15687,15688],{"class":30,"line":1297},[28,15689,2264],{"class":34},[28,15691,15692,15695,15698],{"class":30,"line":1388},[28,15693,15694],{"class":2040},"    string",[28,15696,15697],{"class":2040}," getName",[28,15699,2053],{"class":34},[28,15701,15702],{"class":30,"line":1394},[28,15703,2107],{"class":34},[28,15705,15706,15708],{"class":30,"line":1406},[28,15707,14829],{"class":38},[28,15709,15710],{"class":34}," m_Name;\n",[28,15712,15713],{"class":30,"line":1689},[28,15714,2264],{"class":34},[28,15716,15717],{"class":30,"line":1694},[28,15718,2477],{"emptyLinePlaceholder":144},[28,15720,15721],{"class":30,"line":1700},[28,15722,2477],{"emptyLinePlaceholder":144},[28,15724,15725],{"class":30,"line":1705},[28,15726,15727],{"class":105},"    \u002F\u002F获取年龄 \n",[28,15729,15730,15732,15735],{"class":30,"line":1719},[28,15731,2062],{"class":38},[28,15733,15734],{"class":2040}," getAge",[28,15736,10930],{"class":34},[28,15738,15739,15741],{"class":30,"line":1724},[28,15740,14829],{"class":38},[28,15742,15743],{"class":34}," m_Age;\n",[28,15745,15746],{"class":30,"line":1730},[28,15747,2264],{"class":34},[28,15749,15750],{"class":30,"line":1751},[28,15751,15752],{"class":105},"    \u002F\u002F设置年龄\n",[28,15754,15755,15757,15760,15762,15764,15767],{"class":30,"line":1756},[28,15756,14986],{"class":38},[28,15758,15759],{"class":2040}," setAge",[28,15761,221],{"class":34},[28,15763,224],{"class":38},[28,15765,15766],{"class":5293}," age",[28,15768,12519],{"class":34},[28,15770,15771,15773,15776,15778,15780,15782,15785,15787,15790],{"class":30,"line":1770},[28,15772,2574],{"class":38},[28,15774,15775],{"class":34}," (age ",[28,15777,99],{"class":38},[28,15779,4170],{"class":45},[28,15781,3332],{"class":38},[28,15783,15784],{"class":34}," age ",[28,15786,1164],{"class":38},[28,15788,15789],{"class":45}," 150",[28,15791,12519],{"class":34},[28,15793,15794,15796,15798,15801,15803],{"class":30,"line":1775},[28,15795,9796],{"class":34},[28,15797,1248],{"class":38},[28,15799,15800],{"class":320}," \"你个老妖精!\"",[28,15802,1521],{"class":38},[28,15804,8917],{"class":34},[28,15806,15807,15810],{"class":30,"line":1804},[28,15808,15809],{"class":38},"            return",[28,15811,1367],{"class":34},[28,15813,15814],{"class":30,"line":1809},[28,15815,2606],{"class":34},[28,15817,15818,15821,15823],{"class":30,"line":1826},[28,15819,15820],{"class":34},"        m_Age ",[28,15822,39],{"class":38},[28,15824,7874],{"class":34},[28,15826,15827],{"class":30,"line":1831},[28,15828,2264],{"class":34},[28,15830,15831],{"class":30,"line":1836},[28,15832,2477],{"emptyLinePlaceholder":144},[28,15834,15835],{"class":30,"line":1841},[28,15836,15837],{"class":105},"    \u002F\u002F情人设置为只写\n",[28,15839,15840,15842,15845,15847,15849,15852],{"class":30,"line":1855},[28,15841,14986],{"class":38},[28,15843,15844],{"class":2040}," setLover",[28,15846,221],{"class":34},[28,15848,14994],{"class":2040},[28,15850,15851],{"class":5293}," lover",[28,15853,12519],{"class":34},[28,15855,15856,15859,15861],{"class":30,"line":1860},[28,15857,15858],{"class":34},"        m_Lover ",[28,15860,39],{"class":38},[28,15862,15863],{"class":34}," lover;\n",[28,15865,15866],{"class":30,"line":2654},[28,15867,2264],{"class":34},[28,15869,15870],{"class":30,"line":2668},[28,15871,2477],{"emptyLinePlaceholder":144},[28,15873,15874],{"class":30,"line":2676},[28,15875,15299],{"class":38},[28,15877,15878,15881],{"class":30,"line":2681},[28,15879,15880],{"class":34},"    string m_Name;",[28,15882,15883],{"class":105}," \u002F\u002F可读可写  姓名\n",[28,15885,15886],{"class":30,"line":2687},[28,15887,13287],{"class":34},[28,15889,15890,15892,15895],{"class":30,"line":2693},[28,15891,2062],{"class":38},[28,15893,15894],{"class":34}," m_Age;",[28,15896,15897],{"class":105}," \u002F\u002F只读  年龄\n",[28,15899,15900],{"class":30,"line":2698},[28,15901,2477],{"emptyLinePlaceholder":144},[28,15903,15904,15907],{"class":30,"line":8025},[28,15905,15906],{"class":34},"    string m_Lover;",[28,15908,15909],{"class":105}," \u002F\u002F只写  情人\n",[28,15911,15912],{"class":30,"line":8049},[28,15913,4072],{"class":34},[28,15915,15916],{"class":30,"line":8054},[28,15917,2477],{"emptyLinePlaceholder":144},[28,15919,15920,15922,15924],{"class":30,"line":8060},[28,15921,224],{"class":38},[28,15923,2050],{"class":2040},[28,15925,10930],{"class":34},[28,15927,15928],{"class":30,"line":8087},[28,15929,2477],{"emptyLinePlaceholder":144},[28,15931,15932],{"class":30,"line":8092},[28,15933,15390],{"class":34},[28,15935,15936],{"class":30,"line":8098},[28,15937,15938],{"class":105},"    \u002F\u002F姓名设置\n",[28,15940,15941,15944,15946,15948,15950],{"class":30,"line":8110},[28,15942,15943],{"class":34},"    p.",[28,15945,15143],{"class":2040},[28,15947,221],{"class":34},[28,15949,7993],{"class":320},[28,15951,2796],{"class":34},[28,15953,15954,15956,15958,15961,15963,15966,15969,15971,15973],{"class":30,"line":8122},[28,15955,6606],{"class":34},[28,15957,1248],{"class":38},[28,15959,15960],{"class":320}," \"姓名： \"",[28,15962,1521],{"class":38},[28,15964,15965],{"class":34}," p.",[28,15967,15968],{"class":2040},"getName",[28,15970,13127],{"class":34},[28,15972,1248],{"class":38},[28,15974,8917],{"class":34},[28,15976,15977],{"class":30,"line":8134},[28,15978,2477],{"emptyLinePlaceholder":144},[28,15980,15981],{"class":30,"line":9793},[28,15982,15983],{"class":105},"    \u002F\u002F年龄设置\n",[28,15985,15986,15988,15991,15993,15995],{"class":30,"line":9818},[28,15987,15943],{"class":34},[28,15989,15990],{"class":2040},"setAge",[28,15992,221],{"class":34},[28,15994,866],{"class":45},[28,15996,2796],{"class":34},[28,15998,15999,16001,16003,16006,16008,16010,16013,16015,16017],{"class":30,"line":9841},[28,16000,6606],{"class":34},[28,16002,1248],{"class":38},[28,16004,16005],{"class":320}," \"年龄： \"",[28,16007,1521],{"class":38},[28,16009,15965],{"class":34},[28,16011,16012],{"class":2040},"getAge",[28,16014,13127],{"class":34},[28,16016,1248],{"class":38},[28,16018,8917],{"class":34},[28,16020,16021],{"class":30,"line":9865},[28,16022,2477],{"emptyLinePlaceholder":144},[28,16024,16025],{"class":30,"line":9870},[28,16026,16027],{"class":105},"    \u002F\u002F情人设置\n",[28,16029,16030,16032,16035,16037,16040],{"class":30,"line":9875},[28,16031,15943],{"class":34},[28,16033,16034],{"class":2040},"setLover",[28,16036,221],{"class":34},[28,16038,16039],{"class":320},"\"苍井\"",[28,16041,2796],{"class":34},[28,16043,16044,16047],{"class":30,"line":9880},[28,16045,16046],{"class":105},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[28,16048,16049],{"class":105},"  \u002F\u002F只写属性，不可以读取\n",[28,16051,16052],{"class":30,"line":9889},[28,16053,2477],{"emptyLinePlaceholder":144},[28,16055,16056,16058,16060,16062],{"class":30,"line":9894},[28,16057,2380],{"class":2040},[28,16059,221],{"class":34},[28,16061,2385],{"class":320},[28,16063,2796],{"class":34},[28,16065,16066],{"class":30,"line":9900},[28,16067,2477],{"emptyLinePlaceholder":144},[28,16069,16070,16072,16074],{"class":30,"line":9921},[28,16071,4167],{"class":38},[28,16073,4170],{"class":45},[28,16075,1367],{"class":34},[28,16077,16078],{"class":30,"line":9927},[28,16079,1642],{"class":34},[188,16081,16083],{"id":16082},"_814封装案例","8.1.4封装案例",[171,16085,16086],{},[174,16087,16088,16091],{},[365,16089,16090],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1211,16093,16094,16097],{},[174,16095,16096],{},"求出立方体的面积和体积",[174,16098,16099],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[18,16101,16103],{"className":209,"code":16102,"language":211,"meta":23,"style":23},"#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",[25,16104,16105,16111,16121,16128,16132,16136,16141,16171,16175,16185,16195,16205,16209,16218,16222,16258,16262,16271,16275,16291,16295,16300,16309,16313,16320,16324,16333,16337,16344,16348,16357,16361,16368,16372,16377,16394,16398,16444,16448,16457,16461,16465,16469,16478,16482,16486,16491,16495,16501,16507,16513,16517,16521,16526,16548,16552,16606,16610,16618,16622,16627,16632,16645,16652,16668,16679,16685,16708,16714,16737,16751,16771,16777,16788,16811,16833,16838,16844,16858,16871,16876,16890,16895,16901,16906,16920,16925,16930,16944,16956,16961,16974,16979,16984,16989,17002,17007],{"__ignoreMap":23},[28,16106,16107,16109],{"class":30,"line":31},[28,16108,2026],{"class":38},[28,16110,2029],{"class":320},[28,16112,16113,16115,16117,16119],{"class":30,"line":94},[28,16114,2034],{"class":38},[28,16116,2037],{"class":38},[28,16118,2041],{"class":2040},[28,16120,1367],{"class":34},[28,16122,16123,16125],{"class":30,"line":109},[28,16124,14771],{"class":38},[28,16126,16127],{"class":2040}," Cube\n",[28,16129,16130],{"class":30,"line":125},[28,16131,1623],{"class":34},[28,16133,16134],{"class":30,"line":131},[28,16135,14793],{"class":38},[28,16137,16138],{"class":30,"line":1291},[28,16139,16140],{"class":105},"    \u002F\u002F输入长宽高\n",[28,16142,16143,16145,16148,16150,16152,16155,16157,16159,16162,16164,16166,16169],{"class":30,"line":1297},[28,16144,14986],{"class":38},[28,16146,16147],{"class":2040}," setLwh",[28,16149,221],{"class":34},[28,16151,224],{"class":38},[28,16153,16154],{"class":5293}," l",[28,16156,49],{"class":34},[28,16158,224],{"class":38},[28,16160,16161],{"class":5293}," w",[28,16163,49],{"class":34},[28,16165,224],{"class":38},[28,16167,16168],{"class":5293}," h",[28,16170,227],{"class":34},[28,16172,16173],{"class":30,"line":1388},[28,16174,2107],{"class":34},[28,16176,16177,16180,16182],{"class":30,"line":1394},[28,16178,16179],{"class":34},"        m_L",[28,16181,39],{"class":38},[28,16183,16184],{"class":34},"l;\n",[28,16186,16187,16190,16192],{"class":30,"line":1406},[28,16188,16189],{"class":34},"        m_W",[28,16191,39],{"class":38},[28,16193,16194],{"class":34},"w;\n",[28,16196,16197,16200,16202],{"class":30,"line":1689},[28,16198,16199],{"class":34},"        m_H",[28,16201,39],{"class":38},[28,16203,16204],{"class":34},"h;\n",[28,16206,16207],{"class":30,"line":1694},[28,16208,2264],{"class":34},[28,16210,16211,16213,16216],{"class":30,"line":1700},[28,16212,2062],{"class":38},[28,16214,16215],{"class":2040}," mianji",[28,16217,2053],{"class":34},[28,16219,16220],{"class":30,"line":1705},[28,16221,2107],{"class":34},[28,16223,16224,16226,16228,16230,16233,16235,16238,16240,16243,16245,16248,16250,16253,16255],{"class":30,"line":1719},[28,16225,14829],{"class":38},[28,16227,14832],{"class":45},[28,16229,668],{"class":38},[28,16231,16232],{"class":34},"(m_L",[28,16234,668],{"class":38},[28,16236,16237],{"class":34},"m_W ",[28,16239,693],{"class":38},[28,16241,16242],{"class":34}," m_L",[28,16244,668],{"class":38},[28,16246,16247],{"class":34},"m_H ",[28,16249,693],{"class":38},[28,16251,16252],{"class":34}," m_W",[28,16254,668],{"class":38},[28,16256,16257],{"class":34},"m_H);\n",[28,16259,16260],{"class":30,"line":1724},[28,16261,2264],{"class":34},[28,16263,16264,16266,16269],{"class":30,"line":1730},[28,16265,2062],{"class":38},[28,16267,16268],{"class":2040}," tiji",[28,16270,2053],{"class":34},[28,16272,16273],{"class":30,"line":1751},[28,16274,2107],{"class":34},[28,16276,16277,16279,16281,16283,16286,16288],{"class":30,"line":1756},[28,16278,14829],{"class":38},[28,16280,16242],{"class":34},[28,16282,668],{"class":38},[28,16284,16285],{"class":34},"m_W",[28,16287,668],{"class":38},[28,16289,16290],{"class":34},"m_H;\n",[28,16292,16293],{"class":30,"line":1770},[28,16294,2264],{"class":34},[28,16296,16297],{"class":30,"line":1775},[28,16298,16299],{"class":105},"    \u002F\u002F获取长宽高\n",[28,16301,16302,16304,16307],{"class":30,"line":1804},[28,16303,2062],{"class":38},[28,16305,16306],{"class":2040}," getLength",[28,16308,2053],{"class":34},[28,16310,16311],{"class":30,"line":1809},[28,16312,2107],{"class":34},[28,16314,16315,16317],{"class":30,"line":1826},[28,16316,14829],{"class":38},[28,16318,16319],{"class":34}," m_L;\n",[28,16321,16322],{"class":30,"line":1831},[28,16323,2264],{"class":34},[28,16325,16326,16328,16331],{"class":30,"line":1836},[28,16327,2062],{"class":38},[28,16329,16330],{"class":2040}," getWidth",[28,16332,2053],{"class":34},[28,16334,16335],{"class":30,"line":1841},[28,16336,2107],{"class":34},[28,16338,16339,16341],{"class":30,"line":1855},[28,16340,14829],{"class":38},[28,16342,16343],{"class":34}," m_W;\n",[28,16345,16346],{"class":30,"line":1860},[28,16347,2264],{"class":34},[28,16349,16350,16352,16355],{"class":30,"line":2654},[28,16351,2062],{"class":38},[28,16353,16354],{"class":2040}," getHeight",[28,16356,2053],{"class":34},[28,16358,16359],{"class":30,"line":2668},[28,16360,2107],{"class":34},[28,16362,16363,16365],{"class":30,"line":2676},[28,16364,14829],{"class":38},[28,16366,16367],{"class":34}," m_H;\n",[28,16369,16370],{"class":30,"line":2681},[28,16371,2264],{"class":34},[28,16373,16374],{"class":30,"line":2687},[28,16375,16376],{"class":105},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[28,16378,16379,16382,16385,16387,16390,16392],{"class":30,"line":2693},[28,16380,16381],{"class":38},"    bool",[28,16383,16384],{"class":2040}," isEqual",[28,16386,221],{"class":34},[28,16388,16389],{"class":2040},"Cube",[28,16391,2926],{"class":5293},[28,16393,227],{"class":34},[28,16395,16396],{"class":30,"line":2698},[28,16397,2107],{"class":34},[28,16399,16400,16402,16405,16408,16410,16412,16415,16417,16420,16423,16425,16427,16430,16432,16434,16437,16439,16441],{"class":30,"line":8025},[28,16401,2574],{"class":38},[28,16403,16404],{"class":34}," (c.",[28,16406,16407],{"class":2040},"getLength",[28,16409,13127],{"class":34},[28,16411,3026],{"class":38},[28,16413,16414],{"class":34}," m_L ",[28,16416,1792],{"class":38},[28,16418,16419],{"class":34}," c.",[28,16421,16422],{"class":2040},"getWidth",[28,16424,13127],{"class":34},[28,16426,3026],{"class":38},[28,16428,16429],{"class":34}," m_W ",[28,16431,1792],{"class":38},[28,16433,16419],{"class":34},[28,16435,16436],{"class":2040},"getHeight",[28,16438,13127],{"class":34},[28,16440,3026],{"class":38},[28,16442,16443],{"class":34}," m_H)\n",[28,16445,16446],{"class":30,"line":8049},[28,16447,2587],{"class":34},[28,16449,16450,16452,16455],{"class":30,"line":8054},[28,16451,15809],{"class":38},[28,16453,16454],{"class":45}," true",[28,16456,1367],{"class":34},[28,16458,16459],{"class":30,"line":8060},[28,16460,2606],{"class":34},[28,16462,16463],{"class":30,"line":8087},[28,16464,2647],{"class":38},[28,16466,16467],{"class":30,"line":8092},[28,16468,2587],{"class":34},[28,16470,16471,16473,16476],{"class":30,"line":8098},[28,16472,15809],{"class":38},[28,16474,16475],{"class":45}," false",[28,16477,1367],{"class":34},[28,16479,16480],{"class":30,"line":8110},[28,16481,2606],{"class":34},[28,16483,16484],{"class":30,"line":8122},[28,16485,2264],{"class":34},[28,16487,16488],{"class":30,"line":8134},[28,16489,16490],{"class":105},"    \u002F\u002F私有属性\n",[28,16492,16493],{"class":30,"line":9793},[28,16494,15299],{"class":38},[28,16496,16497,16499],{"class":30,"line":9818},[28,16498,2062],{"class":38},[28,16500,16319],{"class":34},[28,16502,16503,16505],{"class":30,"line":9841},[28,16504,2062],{"class":38},[28,16506,16343],{"class":34},[28,16508,16509,16511],{"class":30,"line":9865},[28,16510,2062],{"class":38},[28,16512,16367],{"class":34},[28,16514,16515],{"class":30,"line":9870},[28,16516,2477],{"emptyLinePlaceholder":144},[28,16518,16519],{"class":30,"line":9875},[28,16520,4072],{"class":34},[28,16522,16523],{"class":30,"line":9880},[28,16524,16525],{"class":105},"\u002F\u002F全局函数判断两个立方体是否相等\n",[28,16527,16528,16530,16532,16534,16536,16539,16541,16543,16546],{"class":30,"line":9889},[28,16529,1431],{"class":38},[28,16531,16384],{"class":2040},[28,16533,221],{"class":34},[28,16535,16389],{"class":2040},[28,16537,16538],{"class":5293}," c1",[28,16540,49],{"class":34},[28,16542,16389],{"class":2040},[28,16544,16545],{"class":5293}," c2",[28,16547,227],{"class":34},[28,16549,16550],{"class":30,"line":9894},[28,16551,1623],{"class":34},[28,16553,16554,16556,16559,16561,16563,16565,16568,16570,16573,16575,16577,16579,16581,16583,16585,16587,16589,16591,16593,16595,16597,16599,16601,16603],{"class":30,"line":9900},[28,16555,4167],{"class":38},[28,16557,16558],{"class":34}," (c1.",[28,16560,16407],{"class":2040},[28,16562,13127],{"class":34},[28,16564,3026],{"class":38},[28,16566,16567],{"class":34}," c2.",[28,16569,16407],{"class":2040},[28,16571,16572],{"class":34},"()) ",[28,16574,1792],{"class":38},[28,16576,16558],{"class":34},[28,16578,16422],{"class":2040},[28,16580,13127],{"class":34},[28,16582,3026],{"class":38},[28,16584,16567],{"class":34},[28,16586,16422],{"class":2040},[28,16588,16572],{"class":34},[28,16590,1792],{"class":38},[28,16592,16558],{"class":34},[28,16594,16436],{"class":2040},[28,16596,13127],{"class":34},[28,16598,3026],{"class":38},[28,16600,16567],{"class":34},[28,16602,16436],{"class":2040},[28,16604,16605],{"class":34},"());\n",[28,16607,16608],{"class":30,"line":9921},[28,16609,1642],{"class":34},[28,16611,16612,16614,16616],{"class":30,"line":9927},[28,16613,224],{"class":38},[28,16615,2050],{"class":2040},[28,16617,2053],{"class":34},[28,16619,16620],{"class":30,"line":9941},[28,16621,1623],{"class":34},[28,16623,16624],{"class":30,"line":9947},[28,16625,16626],{"class":34},"    Cube c1;\n",[28,16628,16629],{"class":30,"line":9974},[28,16630,16631],{"class":105},"    \u002F\u002F输入立方体的长宽高\n",[28,16633,16634,16636,16638,16641,16643],{"class":30,"line":9983},[28,16635,1628],{"class":34},[28,16637,1248],{"class":38},[28,16639,16640],{"class":320},"\"请输入第一个立方体的长、宽、高：\"",[28,16642,1248],{"class":38},[28,16644,1270],{"class":34},[28,16646,16647,16649],{"class":30,"line":9989},[28,16648,2062],{"class":38},[28,16650,16651],{"class":34}," l,w,h,l1,w1,h1;\n",[28,16653,16654,16656,16658,16660,16662,16664,16666],{"class":30,"line":9997},[28,16655,2089],{"class":34},[28,16657,1506],{"class":38},[28,16659,729],{"class":34},[28,16661,1506],{"class":38},[28,16663,1001],{"class":34},[28,16665,1506],{"class":38},[28,16667,16204],{"class":34},[28,16669,16670,16673,16676],{"class":30,"line":10002},[28,16671,16672],{"class":34},"    c1.",[28,16674,16675],{"class":2040},"setLwh",[28,16677,16678],{"class":34},"(l,w,h);\n",[28,16680,16682],{"class":30,"line":16681},66,[28,16683,16684],{"class":105},"    \u002F\u002F面积\n",[28,16686,16688,16690,16692,16695,16697,16699,16702,16704,16706],{"class":30,"line":16687},67,[28,16689,1628],{"class":34},[28,16691,1248],{"class":38},[28,16693,16694],{"class":320},"\"立方体的表面积为：\"",[28,16696,1248],{"class":38},[28,16698,14907],{"class":34},[28,16700,16701],{"class":2040},"mianji",[28,16703,2504],{"class":34},[28,16705,1248],{"class":38},[28,16707,1270],{"class":34},[28,16709,16711],{"class":30,"line":16710},68,[28,16712,16713],{"class":105},"    \u002F\u002F体积\n",[28,16715,16717,16719,16721,16724,16726,16728,16731,16733,16735],{"class":30,"line":16716},69,[28,16718,1628],{"class":34},[28,16720,1248],{"class":38},[28,16722,16723],{"class":320},"\"立方体的体积为：\"",[28,16725,1248],{"class":38},[28,16727,14907],{"class":34},[28,16729,16730],{"class":2040},"tiji",[28,16732,2504],{"class":34},[28,16734,1248],{"class":38},[28,16736,1270],{"class":34},[28,16738,16740,16742,16744,16747,16749],{"class":30,"line":16739},70,[28,16741,1628],{"class":34},[28,16743,1248],{"class":38},[28,16745,16746],{"class":320},"\"请输入第二个立方体的长、宽、高：\"",[28,16748,1248],{"class":38},[28,16750,1270],{"class":34},[28,16752,16754,16756,16758,16761,16763,16766,16768],{"class":30,"line":16753},71,[28,16755,2089],{"class":34},[28,16757,1506],{"class":38},[28,16759,16760],{"class":34},"l1",[28,16762,1506],{"class":38},[28,16764,16765],{"class":34},"w1",[28,16767,1506],{"class":38},[28,16769,16770],{"class":34},"h1;\n",[28,16772,16774],{"class":30,"line":16773},72,[28,16775,16776],{"class":34},"    Cube c2;\n",[28,16778,16780,16783,16785],{"class":30,"line":16779},73,[28,16781,16782],{"class":34},"    c2.",[28,16784,16675],{"class":2040},[28,16786,16787],{"class":34},"(l1,w1,h1);\n",[28,16789,16791,16793,16795,16798,16800,16803,16805,16807,16809],{"class":30,"line":16790},74,[28,16792,1628],{"class":34},[28,16794,1248],{"class":38},[28,16796,16797],{"class":320},"\"第二个立方体的表面积为：\"",[28,16799,1248],{"class":38},[28,16801,16802],{"class":34},"c2.",[28,16804,16701],{"class":2040},[28,16806,2504],{"class":34},[28,16808,1248],{"class":38},[28,16810,1270],{"class":34},[28,16812,16814,16816,16818,16821,16823,16825,16827,16829,16831],{"class":30,"line":16813},75,[28,16815,1628],{"class":34},[28,16817,1248],{"class":38},[28,16819,16820],{"class":320},"\"第二个立方体的体积为：\"",[28,16822,1248],{"class":38},[28,16824,16802],{"class":34},[28,16826,16730],{"class":2040},[28,16828,2504],{"class":34},[28,16830,1248],{"class":38},[28,16832,1270],{"class":34},[28,16834,16836],{"class":30,"line":16835},76,[28,16837,2477],{"emptyLinePlaceholder":144},[28,16839,16841],{"class":30,"line":16840},77,[28,16842,16843],{"class":105},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[28,16845,16847,16849,16851,16854,16856],{"class":30,"line":16846},78,[28,16848,1628],{"class":34},[28,16850,1248],{"class":38},[28,16852,16853],{"class":320},"\"内部函数判断结果：\"",[28,16855,1248],{"class":38},[28,16857,1270],{"class":34},[28,16859,16861,16863,16865,16868],{"class":30,"line":16860},79,[28,16862,3178],{"class":38},[28,16864,16558],{"class":34},[28,16866,16867],{"class":2040},"isEqual",[28,16869,16870],{"class":34},"(c2))\n",[28,16872,16874],{"class":30,"line":16873},80,[28,16875,2107],{"class":34},[28,16877,16879,16881,16883,16886,16888],{"class":30,"line":16878},81,[28,16880,3528],{"class":34},[28,16882,1248],{"class":38},[28,16884,16885],{"class":320},"\"两个立方体相等\"",[28,16887,1248],{"class":38},[28,16889,1270],{"class":34},[28,16891,16893],{"class":30,"line":16892},82,[28,16894,2264],{"class":34},[28,16896,16898],{"class":30,"line":16897},83,[28,16899,16900],{"class":38},"    else\n",[28,16902,16904],{"class":30,"line":16903},84,[28,16905,2107],{"class":34},[28,16907,16909,16911,16913,16916,16918],{"class":30,"line":16908},85,[28,16910,3528],{"class":34},[28,16912,1248],{"class":38},[28,16914,16915],{"class":320},"\"两个立方体不相等\"",[28,16917,1248],{"class":38},[28,16919,1270],{"class":34},[28,16921,16923],{"class":30,"line":16922},86,[28,16924,2264],{"class":34},[28,16926,16928],{"class":30,"line":16927},87,[28,16929,2477],{"emptyLinePlaceholder":144},[28,16931,16933,16935,16937,16940,16942],{"class":30,"line":16932},88,[28,16934,1628],{"class":34},[28,16936,1248],{"class":38},[28,16938,16939],{"class":320},"\"全局函数判断结果：\"",[28,16941,1248],{"class":38},[28,16943,1270],{"class":34},[28,16945,16947,16949,16951,16953],{"class":30,"line":16946},89,[28,16948,3178],{"class":38},[28,16950,1735],{"class":34},[28,16952,16867],{"class":2040},[28,16954,16955],{"class":34},"(c1, c2))\n",[28,16957,16959],{"class":30,"line":16958},90,[28,16960,2107],{"class":34},[28,16962,16964,16966,16968,16970,16972],{"class":30,"line":16963},91,[28,16965,3528],{"class":34},[28,16967,1248],{"class":38},[28,16969,16885],{"class":320},[28,16971,1248],{"class":38},[28,16973,1270],{"class":34},[28,16975,16977],{"class":30,"line":16976},92,[28,16978,2264],{"class":34},[28,16980,16982],{"class":30,"line":16981},93,[28,16983,16900],{"class":38},[28,16985,16987],{"class":30,"line":16986},94,[28,16988,2107],{"class":34},[28,16990,16992,16994,16996,16998,17000],{"class":30,"line":16991},95,[28,16993,3528],{"class":34},[28,16995,1248],{"class":38},[28,16997,16915],{"class":320},[28,16999,1248],{"class":38},[28,17001,1270],{"class":34},[28,17003,17005],{"class":30,"line":17004},96,[28,17006,2264],{"class":34},[28,17008,17010],{"class":30,"line":17009},97,[28,17011,1642],{"class":34},[171,17013,17014],{"start":94},[174,17015,17016],{},[365,17017,17018],{},"练习案例2：点和圆的关系",[1211,17020,17021],{},[174,17022,17023],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[18,17025,17027],{"className":209,"code":17026,"language":211,"meta":23,"style":23},"#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",[25,17028,17029,17035,17045,17052,17059,17063,17067,17072,17106,17111,17127,17141,17145,17149,17156,17163,17167,17173,17177,17181,17185,17207,17230,17235,17249,17264,17268,17272,17278,17283,17288,17292,17318,17322,17352,17380,17408,17425,17429,17442,17446,17450,17454,17467,17471,17475,17483,17487,17491,17495,17500,17504,17515,17522,17531,17541,17552,17559,17572,17583,17593,17604,17611,17625,17630,17640,17648],{"__ignoreMap":23},[28,17030,17031,17033],{"class":30,"line":31},[28,17032,2026],{"class":38},[28,17034,2029],{"class":320},[28,17036,17037,17039,17041,17043],{"class":30,"line":94},[28,17038,2034],{"class":38},[28,17040,2037],{"class":38},[28,17042,2041],{"class":2040},[28,17044,1367],{"class":34},[28,17046,17047,17049],{"class":30,"line":109},[28,17048,2026],{"class":38},[28,17050,17051],{"class":320},"\u003Ccmath>\n",[28,17053,17054,17056],{"class":30,"line":125},[28,17055,14771],{"class":38},[28,17057,17058],{"class":2040}," Point\n",[28,17060,17061],{"class":30,"line":131},[28,17062,1623],{"class":34},[28,17064,17065],{"class":30,"line":1291},[28,17066,14793],{"class":38},[28,17068,17069],{"class":30,"line":1297},[28,17070,17071],{"class":105},"    \u002F\u002F赋值\n",[28,17073,17074,17076,17079,17081,17083,17086,17088,17090,17093,17096,17098,17101,17103],{"class":30,"line":1388},[28,17075,14986],{"class":38},[28,17077,17078],{"class":2040}," setPoint",[28,17080,221],{"class":34},[28,17082,14114],{"class":38},[28,17084,17085],{"class":5293}," x",[28,17087,12512],{"class":34},[28,17089,14114],{"class":38},[28,17091,17092],{"class":5293}," y",[28,17094,17095],{"class":34},") { m_x ",[28,17097,39],{"class":38},[28,17099,17100],{"class":34}," x; m_y ",[28,17102,39],{"class":38},[28,17104,17105],{"class":34}," y; }\n",[28,17107,17108],{"class":30,"line":1394},[28,17109,17110],{"class":105},"    \u002F\u002F获取坐标\n",[28,17112,17113,17115,17118,17121,17124],{"class":30,"line":1406},[28,17114,14815],{"class":38},[28,17116,17117],{"class":2040}," getX",[28,17119,17120],{"class":34},"() { ",[28,17122,17123],{"class":38},"return",[28,17125,17126],{"class":34}," m_x; }\n",[28,17128,17129,17131,17134,17136,17138],{"class":30,"line":1689},[28,17130,14815],{"class":38},[28,17132,17133],{"class":2040}," getY",[28,17135,17120],{"class":34},[28,17137,17123],{"class":38},[28,17139,17140],{"class":34}," m_y; }\n",[28,17142,17143],{"class":30,"line":1694},[28,17144,2477],{"emptyLinePlaceholder":144},[28,17146,17147],{"class":30,"line":1700},[28,17148,15299],{"class":38},[28,17150,17151,17153],{"class":30,"line":1705},[28,17152,14815],{"class":38},[28,17154,17155],{"class":34}," m_x;\n",[28,17157,17158,17160],{"class":30,"line":1719},[28,17159,14815],{"class":38},[28,17161,17162],{"class":34}," m_y;\n",[28,17164,17165],{"class":30,"line":1724},[28,17166,4072],{"class":34},[28,17168,17169,17171],{"class":30,"line":1730},[28,17170,14771],{"class":38},[28,17172,14774],{"class":2040},[28,17174,17175],{"class":30,"line":1751},[28,17176,1623],{"class":34},[28,17178,17179],{"class":30,"line":1756},[28,17180,14793],{"class":38},[28,17182,17183],{"class":30,"line":1770},[28,17184,17071],{"class":105},[28,17186,17187,17189,17192,17194,17196,17199,17202,17204],{"class":30,"line":1775},[28,17188,14986],{"class":38},[28,17190,17191],{"class":2040}," setRadius",[28,17193,221],{"class":34},[28,17195,14114],{"class":38},[28,17197,17198],{"class":5293}," r",[28,17200,17201],{"class":34},") { m_r ",[28,17203,39],{"class":38},[28,17205,17206],{"class":34}," r; }\n",[28,17208,17209,17211,17214,17216,17219,17222,17225,17227],{"class":30,"line":1804},[28,17210,14986],{"class":38},[28,17212,17213],{"class":2040}," setCenter",[28,17215,221],{"class":34},[28,17217,17218],{"class":2040},"Point",[28,17220,17221],{"class":5293}," center",[28,17223,17224],{"class":34},") { m_center ",[28,17226,39],{"class":38},[28,17228,17229],{"class":34}," center; }\n",[28,17231,17232],{"class":30,"line":1809},[28,17233,17234],{"class":105},"    \u002F\u002F获取属性\n",[28,17236,17237,17239,17242,17244,17246],{"class":30,"line":1826},[28,17238,14815],{"class":38},[28,17240,17241],{"class":2040}," getRadius",[28,17243,17120],{"class":34},[28,17245,17123],{"class":38},[28,17247,17248],{"class":34}," m_r; }\n",[28,17250,17251,17254,17257,17259,17261],{"class":30,"line":1831},[28,17252,17253],{"class":2040},"    Point",[28,17255,17256],{"class":2040}," getCenter",[28,17258,17120],{"class":34},[28,17260,17123],{"class":38},[28,17262,17263],{"class":34}," m_center; }\n",[28,17265,17266],{"class":30,"line":1836},[28,17267,2477],{"emptyLinePlaceholder":144},[28,17269,17270],{"class":30,"line":1841},[28,17271,15299],{"class":38},[28,17273,17274,17276],{"class":30,"line":1855},[28,17275,14815],{"class":38},[28,17277,14805],{"class":34},[28,17279,17280],{"class":30,"line":1860},[28,17281,17282],{"class":105},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[28,17284,17285],{"class":30,"line":2654},[28,17286,17287],{"class":34},"    Point m_center;\n",[28,17289,17290],{"class":30,"line":2668},[28,17291,4072],{"class":34},[28,17293,17294,17296,17299,17301,17304,17306,17308,17310,17312,17314,17316],{"class":30,"line":2676},[28,17295,5441],{"class":38},[28,17297,17298],{"class":2040}," isInCircle",[28,17300,221],{"class":34},[28,17302,17303],{"class":2040},"Circle",[28,17305,10661],{"class":38},[28,17307,502],{"class":5293},[28,17309,49],{"class":34},[28,17311,17218],{"class":2040},[28,17313,10661],{"class":38},[28,17315,14],{"class":5293},[28,17317,227],{"class":34},[28,17319,17320],{"class":30,"line":2681},[28,17321,1623],{"class":34},[28,17323,17324,17326,17329,17331,17333,17336,17339,17342,17344,17346,17348,17350],{"class":30,"line":2687},[28,17325,14815],{"class":38},[28,17327,17328],{"class":34}," dx ",[28,17330,39],{"class":38},[28,17332,16419],{"class":34},[28,17334,17335],{"class":2040},"getCenter",[28,17337,17338],{"class":34},"().",[28,17340,17341],{"class":2040},"getX",[28,17343,13127],{"class":34},[28,17345,742],{"class":38},[28,17347,15965],{"class":34},[28,17349,17341],{"class":2040},[28,17351,5713],{"class":34},[28,17353,17354,17356,17359,17361,17363,17365,17367,17370,17372,17374,17376,17378],{"class":30,"line":2693},[28,17355,14815],{"class":38},[28,17357,17358],{"class":34}," dy ",[28,17360,39],{"class":38},[28,17362,16419],{"class":34},[28,17364,17335],{"class":2040},[28,17366,17338],{"class":34},[28,17368,17369],{"class":2040},"getY",[28,17371,13127],{"class":34},[28,17373,742],{"class":38},[28,17375,15965],{"class":34},[28,17377,17369],{"class":2040},[28,17379,5713],{"class":34},[28,17381,17382,17384,17387,17389,17392,17395,17397,17399,17401,17403,17405],{"class":30,"line":2698},[28,17383,14815],{"class":38},[28,17385,17386],{"class":34}," distance ",[28,17388,39],{"class":38},[28,17390,17391],{"class":2040}," sqrt",[28,17393,17394],{"class":34},"(dx ",[28,17396,668],{"class":38},[28,17398,17328],{"class":34},[28,17400,693],{"class":38},[28,17402,17358],{"class":34},[28,17404,668],{"class":38},[28,17406,17407],{"class":34}," dy);\n",[28,17409,17410,17412,17415,17417,17419,17422],{"class":30,"line":8025},[28,17411,3178],{"class":38},[28,17413,17414],{"class":34}," (distance ",[28,17416,99],{"class":38},[28,17418,16419],{"class":34},[28,17420,17421],{"class":2040},"getRadius",[28,17423,17424],{"class":34},"())\n",[28,17426,17427],{"class":30,"line":8049},[28,17428,2107],{"class":34},[28,17430,17431,17433,17435,17438,17440],{"class":30,"line":8054},[28,17432,9746],{"class":34},[28,17434,1248],{"class":38},[28,17436,17437],{"class":320}," \"点在圆内\"",[28,17439,1521],{"class":38},[28,17441,8917],{"class":34},[28,17443,17444],{"class":30,"line":8060},[28,17445,2264],{"class":34},[28,17447,17448],{"class":30,"line":8087},[28,17449,16900],{"class":38},[28,17451,17452],{"class":30,"line":8092},[28,17453,2107],{"class":34},[28,17455,17456,17458,17460,17463,17465],{"class":30,"line":8098},[28,17457,9746],{"class":34},[28,17459,1248],{"class":38},[28,17461,17462],{"class":320}," \"点在圆外\"",[28,17464,1521],{"class":38},[28,17466,8917],{"class":34},[28,17468,17469],{"class":30,"line":8110},[28,17470,2264],{"class":34},[28,17472,17473],{"class":30,"line":8122},[28,17474,1642],{"class":34},[28,17476,17477,17479,17481],{"class":30,"line":8134},[28,17478,224],{"class":38},[28,17480,2050],{"class":2040},[28,17482,2053],{"class":34},[28,17484,17485],{"class":30,"line":9793},[28,17486,1623],{"class":34},[28,17488,17489],{"class":30,"line":9818},[28,17490,15130],{"class":105},[28,17492,17493],{"class":30,"line":9841},[28,17494,14877],{"class":34},[28,17496,17497],{"class":30,"line":9865},[28,17498,17499],{"class":34},"    Point p1;\n",[28,17501,17502],{"class":30,"line":9870},[28,17503,17071],{"class":105},[28,17505,17506,17508,17510,17513],{"class":30,"line":9875},[28,17507,1628],{"class":34},[28,17509,1248],{"class":38},[28,17511,17512],{"class":320},"\"请输入圆的半径：\"",[28,17514,1367],{"class":34},[28,17516,17517,17519],{"class":30,"line":9880},[28,17518,14815],{"class":38},[28,17520,17521],{"class":34}," r;\n",[28,17523,17524,17526,17528],{"class":30,"line":9889},[28,17525,2089],{"class":34},[28,17527,1506],{"class":38},[28,17529,17530],{"class":34},"r;\n",[28,17532,17533,17535,17538],{"class":30,"line":9894},[28,17534,16672],{"class":34},[28,17536,17537],{"class":2040},"setRadius",[28,17539,17540],{"class":34},"(r);\n",[28,17542,17543,17545,17547,17550],{"class":30,"line":9900},[28,17544,1628],{"class":34},[28,17546,1248],{"class":38},[28,17548,17549],{"class":320},"\"请输入圆心坐标：\"",[28,17551,1367],{"class":34},[28,17553,17554,17556],{"class":30,"line":9921},[28,17555,14815],{"class":38},[28,17557,17558],{"class":34}," x, y;\n",[28,17560,17561,17563,17565,17567,17569],{"class":30,"line":9927},[28,17562,2089],{"class":34},[28,17564,1506],{"class":38},[28,17566,1026],{"class":34},[28,17568,1506],{"class":38},[28,17570,17571],{"class":34},"y;\n",[28,17573,17574,17577,17580],{"class":30,"line":9941},[28,17575,17576],{"class":34},"    p1.",[28,17578,17579],{"class":2040},"setPoint",[28,17581,17582],{"class":34},"(x, y);\n",[28,17584,17585,17587,17590],{"class":30,"line":9947},[28,17586,16672],{"class":34},[28,17588,17589],{"class":2040},"setCenter",[28,17591,17592],{"class":34},"(p1);\n",[28,17594,17595,17597,17599,17602],{"class":30,"line":9974},[28,17596,1628],{"class":34},[28,17598,1248],{"class":38},[28,17600,17601],{"class":320},"\"请输入测试点坐标：\"",[28,17603,1367],{"class":34},[28,17605,17606,17608],{"class":30,"line":9983},[28,17607,14815],{"class":38},[28,17609,17610],{"class":34}," x1, y1;\n",[28,17612,17613,17615,17617,17620,17622],{"class":30,"line":9989},[28,17614,2089],{"class":34},[28,17616,1506],{"class":38},[28,17618,17619],{"class":34},"x1",[28,17621,1506],{"class":38},[28,17623,17624],{"class":34},"y1;\n",[28,17626,17627],{"class":30,"line":9997},[28,17628,17629],{"class":34},"    Point p2;\n",[28,17631,17632,17635,17637],{"class":30,"line":10002},[28,17633,17634],{"class":34},"    p2.",[28,17636,17579],{"class":2040},[28,17638,17639],{"class":34},"(x1, y1);\n",[28,17641,17642,17645],{"class":30,"line":16681},[28,17643,17644],{"class":2040},"    isInCircle",[28,17646,17647],{"class":34},"(c1, p2);\n",[28,17649,17650],{"class":30,"line":16687},[28,17651,1642],{"class":34},[14,17653,17654],{},"在类中可以让另一个类作为本来的成员",[14,17656,17657],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17659,17660],{},"创建point.h",[18,17662,17664],{"className":209,"code":17663,"language":211,"meta":23,"style":23},"#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",[25,17665,17666,17677,17683,17693,17699,17703,17708,17712,17716,17736,17740,17748,17756,17760,17764,17770,17776],{"__ignoreMap":23},[28,17667,17668,17671,17674],{"class":30,"line":31},[28,17669,17670],{"class":38},"#pragma",[28,17672,17673],{"class":2040}," once",[28,17675,17676],{"class":105}," \u002F\u002F防止头文件重复包含\n",[28,17678,17679,17681],{"class":30,"line":94},[28,17680,2026],{"class":38},[28,17682,2029],{"class":320},[28,17684,17685,17687,17689,17691],{"class":30,"line":109},[28,17686,2034],{"class":38},[28,17688,2037],{"class":38},[28,17690,2041],{"class":2040},[28,17692,1367],{"class":34},[28,17694,17695,17697],{"class":30,"line":125},[28,17696,14771],{"class":38},[28,17698,17058],{"class":2040},[28,17700,17701],{"class":30,"line":131},[28,17702,1623],{"class":34},[28,17704,17705],{"class":30,"line":1291},[28,17706,17707],{"class":105},"\u002F\u002F做好声明与变量定义就可以\n",[28,17709,17710],{"class":30,"line":1297},[28,17711,14793],{"class":38},[28,17713,17714],{"class":30,"line":1388},[28,17715,17071],{"class":105},[28,17717,17718,17720,17722,17724,17726,17728,17730,17732,17734],{"class":30,"line":1394},[28,17719,14986],{"class":38},[28,17721,17078],{"class":2040},[28,17723,221],{"class":34},[28,17725,14114],{"class":38},[28,17727,17085],{"class":5293},[28,17729,12512],{"class":34},[28,17731,14114],{"class":38},[28,17733,17092],{"class":5293},[28,17735,2796],{"class":34},[28,17737,17738],{"class":30,"line":1406},[28,17739,17110],{"class":105},[28,17741,17742,17744,17746],{"class":30,"line":1689},[28,17743,14815],{"class":38},[28,17745,17117],{"class":2040},[28,17747,5713],{"class":34},[28,17749,17750,17752,17754],{"class":30,"line":1694},[28,17751,14815],{"class":38},[28,17753,17133],{"class":2040},[28,17755,5713],{"class":34},[28,17757,17758],{"class":30,"line":1700},[28,17759,2477],{"emptyLinePlaceholder":144},[28,17761,17762],{"class":30,"line":1705},[28,17763,15299],{"class":38},[28,17765,17766,17768],{"class":30,"line":1719},[28,17767,14815],{"class":38},[28,17769,17155],{"class":34},[28,17771,17772,17774],{"class":30,"line":1724},[28,17773,14815],{"class":38},[28,17775,17162],{"class":34},[28,17777,17778],{"class":30,"line":1730},[28,17779,4072],{"class":34},[14,17781,17782],{},"创建point.cpp",[18,17784,17786],{"className":209,"code":17785,"language":211,"meta":23,"style":23},"#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",[25,17787,17788,17795,17800,17834,17838,17854],{"__ignoreMap":23},[28,17789,17790,17792],{"class":30,"line":31},[28,17791,2026],{"class":38},[28,17793,17794],{"class":320},"\u003Cpoint.h>\n",[28,17796,17797],{"class":30,"line":94},[28,17798,17799],{"class":105},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[28,17801,17802,17804,17807,17810,17812,17814,17816,17818,17820,17822,17824,17826,17828,17830,17832],{"class":30,"line":109},[28,17803,14986],{"class":38},[28,17805,17806],{"class":2040}," Point",[28,17808,17809],{"class":34},"::",[28,17811,17579],{"class":2040},[28,17813,221],{"class":34},[28,17815,14114],{"class":38},[28,17817,17085],{"class":5293},[28,17819,12512],{"class":34},[28,17821,14114],{"class":38},[28,17823,17092],{"class":5293},[28,17825,17095],{"class":34},[28,17827,39],{"class":38},[28,17829,17100],{"class":34},[28,17831,39],{"class":38},[28,17833,17105],{"class":34},[28,17835,17836],{"class":30,"line":125},[28,17837,17110],{"class":105},[28,17839,17840,17842,17844,17846,17848,17850,17852],{"class":30,"line":131},[28,17841,14815],{"class":38},[28,17843,17806],{"class":2040},[28,17845,17809],{"class":34},[28,17847,17341],{"class":2040},[28,17849,17120],{"class":34},[28,17851,17123],{"class":38},[28,17853,17126],{"class":34},[28,17855,17856,17858,17860,17862,17864,17866,17868],{"class":30,"line":1291},[28,17857,14815],{"class":38},[28,17859,17806],{"class":2040},[28,17861,17809],{"class":34},[28,17863,17369],{"class":2040},[28,17865,17120],{"class":34},[28,17867,17123],{"class":38},[28,17869,17140],{"class":34},[14,17871,17872],{},"创建circle.h",[18,17874,17876],{"className":209,"code":17875,"language":211,"meta":23,"style":23},"#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",[25,17877,17878,17885,17891,17901,17907,17913,17917,17921,17925,17939,17953,17957,17965,17973,17977,17981,17987,17991,17995],{"__ignoreMap":23},[28,17879,17880,17882],{"class":30,"line":31},[28,17881,17670],{"class":38},[28,17883,17884],{"class":2040}," once\n",[28,17886,17887,17889],{"class":30,"line":94},[28,17888,2026],{"class":38},[28,17890,2029],{"class":320},[28,17892,17893,17895,17897,17899],{"class":30,"line":109},[28,17894,2034],{"class":38},[28,17896,2037],{"class":38},[28,17898,2041],{"class":2040},[28,17900,1367],{"class":34},[28,17902,17903,17905],{"class":30,"line":125},[28,17904,2026],{"class":38},[28,17906,17794],{"class":320},[28,17908,17909,17911],{"class":30,"line":131},[28,17910,14771],{"class":38},[28,17912,14774],{"class":2040},[28,17914,17915],{"class":30,"line":1291},[28,17916,1623],{"class":34},[28,17918,17919],{"class":30,"line":1297},[28,17920,14793],{"class":38},[28,17922,17923],{"class":30,"line":1388},[28,17924,17071],{"class":105},[28,17926,17927,17929,17931,17933,17935,17937],{"class":30,"line":1394},[28,17928,14986],{"class":38},[28,17930,17191],{"class":2040},[28,17932,221],{"class":34},[28,17934,14114],{"class":38},[28,17936,17198],{"class":5293},[28,17938,2796],{"class":34},[28,17940,17941,17943,17945,17947,17949,17951],{"class":30,"line":1406},[28,17942,14986],{"class":38},[28,17944,17213],{"class":2040},[28,17946,221],{"class":34},[28,17948,17218],{"class":2040},[28,17950,17221],{"class":5293},[28,17952,2796],{"class":34},[28,17954,17955],{"class":30,"line":1689},[28,17956,17234],{"class":105},[28,17958,17959,17961,17963],{"class":30,"line":1694},[28,17960,14815],{"class":38},[28,17962,17241],{"class":2040},[28,17964,5713],{"class":34},[28,17966,17967,17969,17971],{"class":30,"line":1700},[28,17968,17253],{"class":2040},[28,17970,17256],{"class":2040},[28,17972,5713],{"class":34},[28,17974,17975],{"class":30,"line":1705},[28,17976,2477],{"emptyLinePlaceholder":144},[28,17978,17979],{"class":30,"line":1719},[28,17980,15299],{"class":38},[28,17982,17983,17985],{"class":30,"line":1724},[28,17984,14815],{"class":38},[28,17986,14805],{"class":34},[28,17988,17989],{"class":30,"line":1730},[28,17990,17282],{"class":105},[28,17992,17993],{"class":30,"line":1751},[28,17994,17287],{"class":34},[28,17996,17997],{"class":30,"line":1756},[28,17998,4072],{"class":34},[14,18000,18001],{},"创建circle.cpp",[18,18003,18005],{"className":209,"code":18004,"language":211,"meta":23,"style":23},"#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",[25,18006,18007,18014,18037,18059,18064,18080],{"__ignoreMap":23},[28,18008,18009,18011],{"class":30,"line":31},[28,18010,2026],{"class":38},[28,18012,18013],{"class":320},"\u003Ccircle.h>\n",[28,18015,18016,18018,18021,18023,18025,18027,18029,18031,18033,18035],{"class":30,"line":94},[28,18017,5441],{"class":38},[28,18019,18020],{"class":2040}," Circle",[28,18022,17809],{"class":34},[28,18024,17537],{"class":2040},[28,18026,221],{"class":34},[28,18028,14114],{"class":38},[28,18030,17198],{"class":5293},[28,18032,17201],{"class":34},[28,18034,39],{"class":38},[28,18036,17206],{"class":34},[28,18038,18039,18041,18043,18045,18047,18049,18051,18053,18055,18057],{"class":30,"line":109},[28,18040,5441],{"class":38},[28,18042,18020],{"class":2040},[28,18044,17809],{"class":34},[28,18046,17589],{"class":2040},[28,18048,221],{"class":34},[28,18050,17218],{"class":2040},[28,18052,17221],{"class":5293},[28,18054,17224],{"class":34},[28,18056,39],{"class":38},[28,18058,17229],{"class":34},[28,18060,18061],{"class":30,"line":125},[28,18062,18063],{"class":105},"\u002F\u002F获取属性\n",[28,18065,18066,18068,18070,18072,18074,18076,18078],{"class":30,"line":131},[28,18067,14114],{"class":38},[28,18069,18020],{"class":2040},[28,18071,17809],{"class":34},[28,18073,17421],{"class":2040},[28,18075,17120],{"class":34},[28,18077,17123],{"class":38},[28,18079,17248],{"class":34},[28,18081,18082,18084,18086,18088,18090,18092,18094],{"class":30,"line":1291},[28,18083,17218],{"class":2040},[28,18085,18020],{"class":2040},[28,18087,17809],{"class":34},[28,18089,17335],{"class":2040},[28,18091,17120],{"class":34},[28,18093,17123],{"class":38},[28,18095,17263],{"class":34},[14,18097,18098],{},"使用封装的类",[18,18100,18102],{"className":209,"code":18101,"language":211,"meta":23,"style":23},"#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",[25,18103,18104,18110,18120,18126,18132,18156,18160,18186,18212,18236,18250,18254,18266,18270,18274,18278,18290,18294,18298,18306,18310,18314,18318,18322,18326,18336,18342,18350,18358,18368,18374,18386,18394,18402,18412,18418,18430,18434,18442,18448],{"__ignoreMap":23},[28,18105,18106,18108],{"class":30,"line":31},[28,18107,2026],{"class":38},[28,18109,2029],{"class":320},[28,18111,18112,18114,18116,18118],{"class":30,"line":94},[28,18113,2034],{"class":38},[28,18115,2037],{"class":38},[28,18117,2041],{"class":2040},[28,18119,1367],{"class":34},[28,18121,18122,18124],{"class":30,"line":109},[28,18123,2026],{"class":38},[28,18125,18013],{"class":320},[28,18127,18128,18130],{"class":30,"line":125},[28,18129,2026],{"class":38},[28,18131,17794],{"class":320},[28,18133,18134,18136,18138,18140,18142,18144,18146,18148,18150,18152,18154],{"class":30,"line":131},[28,18135,5441],{"class":38},[28,18137,17298],{"class":2040},[28,18139,221],{"class":34},[28,18141,17303],{"class":2040},[28,18143,10661],{"class":38},[28,18145,502],{"class":5293},[28,18147,49],{"class":34},[28,18149,17218],{"class":2040},[28,18151,10661],{"class":38},[28,18153,14],{"class":5293},[28,18155,227],{"class":34},[28,18157,18158],{"class":30,"line":1291},[28,18159,1623],{"class":34},[28,18161,18162,18164,18166,18168,18170,18172,18174,18176,18178,18180,18182,18184],{"class":30,"line":1297},[28,18163,14815],{"class":38},[28,18165,17328],{"class":34},[28,18167,39],{"class":38},[28,18169,16419],{"class":34},[28,18171,17335],{"class":2040},[28,18173,17338],{"class":34},[28,18175,17341],{"class":2040},[28,18177,13127],{"class":34},[28,18179,742],{"class":38},[28,18181,15965],{"class":34},[28,18183,17341],{"class":2040},[28,18185,5713],{"class":34},[28,18187,18188,18190,18192,18194,18196,18198,18200,18202,18204,18206,18208,18210],{"class":30,"line":1388},[28,18189,14815],{"class":38},[28,18191,17358],{"class":34},[28,18193,39],{"class":38},[28,18195,16419],{"class":34},[28,18197,17335],{"class":2040},[28,18199,17338],{"class":34},[28,18201,17369],{"class":2040},[28,18203,13127],{"class":34},[28,18205,742],{"class":38},[28,18207,15965],{"class":34},[28,18209,17369],{"class":2040},[28,18211,5713],{"class":34},[28,18213,18214,18216,18218,18220,18222,18224,18226,18228,18230,18232,18234],{"class":30,"line":1394},[28,18215,14815],{"class":38},[28,18217,17386],{"class":34},[28,18219,39],{"class":38},[28,18221,17391],{"class":2040},[28,18223,17394],{"class":34},[28,18225,668],{"class":38},[28,18227,17328],{"class":34},[28,18229,693],{"class":38},[28,18231,17358],{"class":34},[28,18233,668],{"class":38},[28,18235,17407],{"class":34},[28,18237,18238,18240,18242,18244,18246,18248],{"class":30,"line":1406},[28,18239,3178],{"class":38},[28,18241,17414],{"class":34},[28,18243,99],{"class":38},[28,18245,16419],{"class":34},[28,18247,17421],{"class":2040},[28,18249,17424],{"class":34},[28,18251,18252],{"class":30,"line":1689},[28,18253,2107],{"class":34},[28,18255,18256,18258,18260,18262,18264],{"class":30,"line":1694},[28,18257,9746],{"class":34},[28,18259,1248],{"class":38},[28,18261,17437],{"class":320},[28,18263,1521],{"class":38},[28,18265,8917],{"class":34},[28,18267,18268],{"class":30,"line":1700},[28,18269,2264],{"class":34},[28,18271,18272],{"class":30,"line":1705},[28,18273,16900],{"class":38},[28,18275,18276],{"class":30,"line":1719},[28,18277,2107],{"class":34},[28,18279,18280,18282,18284,18286,18288],{"class":30,"line":1724},[28,18281,9746],{"class":34},[28,18283,1248],{"class":38},[28,18285,17462],{"class":320},[28,18287,1521],{"class":38},[28,18289,8917],{"class":34},[28,18291,18292],{"class":30,"line":1730},[28,18293,2264],{"class":34},[28,18295,18296],{"class":30,"line":1751},[28,18297,1642],{"class":34},[28,18299,18300,18302,18304],{"class":30,"line":1756},[28,18301,224],{"class":38},[28,18303,2050],{"class":2040},[28,18305,2053],{"class":34},[28,18307,18308],{"class":30,"line":1770},[28,18309,1623],{"class":34},[28,18311,18312],{"class":30,"line":1775},[28,18313,15130],{"class":105},[28,18315,18316],{"class":30,"line":1804},[28,18317,14877],{"class":34},[28,18319,18320],{"class":30,"line":1809},[28,18321,17499],{"class":34},[28,18323,18324],{"class":30,"line":1826},[28,18325,17071],{"class":105},[28,18327,18328,18330,18332,18334],{"class":30,"line":1831},[28,18329,1628],{"class":34},[28,18331,1248],{"class":38},[28,18333,17512],{"class":320},[28,18335,1367],{"class":34},[28,18337,18338,18340],{"class":30,"line":1836},[28,18339,14815],{"class":38},[28,18341,17521],{"class":34},[28,18343,18344,18346,18348],{"class":30,"line":1841},[28,18345,2089],{"class":34},[28,18347,1506],{"class":38},[28,18349,17530],{"class":34},[28,18351,18352,18354,18356],{"class":30,"line":1855},[28,18353,16672],{"class":34},[28,18355,17537],{"class":2040},[28,18357,17540],{"class":34},[28,18359,18360,18362,18364,18366],{"class":30,"line":1860},[28,18361,1628],{"class":34},[28,18363,1248],{"class":38},[28,18365,17549],{"class":320},[28,18367,1367],{"class":34},[28,18369,18370,18372],{"class":30,"line":2654},[28,18371,14815],{"class":38},[28,18373,17558],{"class":34},[28,18375,18376,18378,18380,18382,18384],{"class":30,"line":2668},[28,18377,2089],{"class":34},[28,18379,1506],{"class":38},[28,18381,1026],{"class":34},[28,18383,1506],{"class":38},[28,18385,17571],{"class":34},[28,18387,18388,18390,18392],{"class":30,"line":2676},[28,18389,17576],{"class":34},[28,18391,17579],{"class":2040},[28,18393,17582],{"class":34},[28,18395,18396,18398,18400],{"class":30,"line":2681},[28,18397,16672],{"class":34},[28,18399,17589],{"class":2040},[28,18401,17592],{"class":34},[28,18403,18404,18406,18408,18410],{"class":30,"line":2687},[28,18405,1628],{"class":34},[28,18407,1248],{"class":38},[28,18409,17601],{"class":320},[28,18411,1367],{"class":34},[28,18413,18414,18416],{"class":30,"line":2693},[28,18415,14815],{"class":38},[28,18417,17610],{"class":34},[28,18419,18420,18422,18424,18426,18428],{"class":30,"line":2698},[28,18421,2089],{"class":34},[28,18423,1506],{"class":38},[28,18425,17619],{"class":34},[28,18427,1506],{"class":38},[28,18429,17624],{"class":34},[28,18431,18432],{"class":30,"line":8025},[28,18433,17629],{"class":34},[28,18435,18436,18438,18440],{"class":30,"line":8049},[28,18437,17634],{"class":34},[28,18439,17579],{"class":2040},[28,18441,17639],{"class":34},[28,18443,18444,18446],{"class":30,"line":8054},[28,18445,17644],{"class":2040},[28,18447,17647],{"class":34},[28,18449,18450],{"class":30,"line":8060},[28,18451,1642],{"class":34},[159,18453,18455],{"id":18454},"_82对象的初始化清理","8.2对象的初始化清理",[1211,18457,18458,18461],{},[174,18459,18460],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[174,18462,18463],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[188,18465,18467],{"id":18466},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18469,18470,18471,18474],{},"对象的",[365,18472,18473],{},"初始化和清理","也是两个非常重要的安全问题",[14,18476,18477],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18479,18480],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18482,18483,18484,18487,18488,18491],{},"c++利用了",[365,18485,18486],{},"构造函数","和",[365,18489,18490],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18493,18494,18495],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[365,18496,18497],{},"我们不提供构造和析构，编译器会提供",[14,18499,18500],{},[365,18501,18502],{},"编译器提供的构造函数和析构函数是空实现。",[1211,18504,18505,18508],{},[174,18506,18507],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[174,18509,18510,18511,18514],{},"析构函数：主要作用在于对象",[365,18512,18513],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18516,18517,18520],{},[365,18518,18519],{},"构造函数语法：",[25,18521,18522],{},"类名(){}",[171,18524,18525,18528,18531,18534,18537],{},[174,18526,18527],{},"构造函数，没有返回值也不写void",[174,18529,18530],{},"函数名称与类名相同",[174,18532,18533],{},"构造函数可以有参数，因此可以发生重载",[174,18535,18536],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[174,18538,18539,18540,642],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[25,18541,18542],{},"Person(){}",[14,18544,18545,13872,18548],{},[365,18546,18547],{},"析构函数语法：",[25,18549,18550],{},"~类名(){}",[171,18552,18553,18556,18559,18565],{},[174,18554,18555],{},"析构函数，没有返回值也不写void",[174,18557,18558],{},"函数名称与类名相同,在名称前加上符号  ~",[174,18560,18561,18562],{},"析构函数不可以有参数，因此",[365,18563,18564],{},"不可以发生重载",[174,18566,18567],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[18,18569,18571],{"className":209,"code":18570,"language":211,"meta":23,"style":23},"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",[25,18572,18573,18579,18583,18587,18592,18599,18603,18616,18620,18625,18632,18636,18649,18653,18657,18661,18665,18673,18677,18685,18689,18693,18701,18705,18710,18714,18721,18725,18738,18742,18750],{"__ignoreMap":23},[28,18574,18575,18577],{"class":30,"line":31},[28,18576,14771],{"class":38},[28,18578,15248],{"class":2040},[28,18580,18581],{"class":30,"line":94},[28,18582,1623],{"class":34},[28,18584,18585],{"class":30,"line":109},[28,18586,14793],{"class":38},[28,18588,18589],{"class":30,"line":125},[28,18590,18591],{"class":105},"    \u002F\u002F构造函数\n",[28,18593,18594,18597],{"class":30,"line":131},[28,18595,18596],{"class":2040},"    Person",[28,18598,2053],{"class":34},[28,18600,18601],{"class":30,"line":1291},[28,18602,2107],{"class":34},[28,18604,18605,18607,18609,18612,18614],{"class":30,"line":1297},[28,18606,9746],{"class":34},[28,18608,1248],{"class":38},[28,18610,18611],{"class":320}," \"Person的构造函数调用\"",[28,18613,1521],{"class":38},[28,18615,8917],{"class":34},[28,18617,18618],{"class":30,"line":1388},[28,18619,2264],{"class":34},[28,18621,18622],{"class":30,"line":1394},[28,18623,18624],{"class":105},"    \u002F\u002F析构函数\n",[28,18626,18627,18630],{"class":30,"line":1406},[28,18628,18629],{"class":2040},"    ~Person",[28,18631,2053],{"class":34},[28,18633,18634],{"class":30,"line":1689},[28,18635,2107],{"class":34},[28,18637,18638,18640,18642,18645,18647],{"class":30,"line":1694},[28,18639,9746],{"class":34},[28,18641,1248],{"class":38},[28,18643,18644],{"class":320}," \"Person的析构函数调用\"",[28,18646,1521],{"class":38},[28,18648,8917],{"class":34},[28,18650,18651],{"class":30,"line":1700},[28,18652,2264],{"class":34},[28,18654,18655],{"class":30,"line":1705},[28,18656,2477],{"emptyLinePlaceholder":144},[28,18658,18659],{"class":30,"line":1719},[28,18660,4072],{"class":34},[28,18662,18663],{"class":30,"line":1724},[28,18664,2477],{"emptyLinePlaceholder":144},[28,18666,18667,18669,18671],{"class":30,"line":1730},[28,18668,5441],{"class":38},[28,18670,5665],{"class":2040},[28,18672,2053],{"class":34},[28,18674,18675],{"class":30,"line":1751},[28,18676,1623],{"class":34},[28,18678,18679,18682],{"class":30,"line":1756},[28,18680,18681],{"class":34},"    Person p;",[28,18683,18684],{"class":105},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[28,18686,18687],{"class":30,"line":1770},[28,18688,1642],{"class":34},[28,18690,18691],{"class":30,"line":1775},[28,18692,2477],{"emptyLinePlaceholder":144},[28,18694,18695,18697,18699],{"class":30,"line":1804},[28,18696,224],{"class":38},[28,18698,2050],{"class":2040},[28,18700,10930],{"class":34},[28,18702,18703],{"class":30,"line":1809},[28,18704,13287],{"class":34},[28,18706,18707],{"class":30,"line":1826},[28,18708,18709],{"class":105},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[28,18711,18712],{"class":30,"line":1831},[28,18713,2477],{"emptyLinePlaceholder":144},[28,18715,18716,18718],{"class":30,"line":1836},[28,18717,18681],{"class":34},[28,18719,18720],{"class":105},"\u002F\u002F只有构造函数\n",[28,18722,18723],{"class":30,"line":1841},[28,18724,2477],{"emptyLinePlaceholder":144},[28,18726,18727,18729,18731,18733,18735],{"class":30,"line":1855},[28,18728,2380],{"class":2040},[28,18730,221],{"class":34},[28,18732,2385],{"class":320},[28,18734,6043],{"class":34},[28,18736,18737],{"class":105},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[28,18739,18740],{"class":30,"line":1860},[28,18741,2477],{"emptyLinePlaceholder":144},[28,18743,18744,18746,18748],{"class":30,"line":2654},[28,18745,4167],{"class":38},[28,18747,4170],{"class":45},[28,18749,1367],{"class":34},[28,18751,18752],{"class":30,"line":2668},[28,18753,1642],{"class":34},[14,18755,18756],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[188,18758,18760],{"id":18759},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18762,18763],{},"两种分类方式：",[14,18765,18766],{},"​\t按参数分为： 有参构造和无参构造",[14,18768,18769],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18771,18772],{},"三种调用方式：",[14,18774,18775],{},"​\t括号法",[14,18777,18778],{},"​\t显示法",[14,18780,18781],{},"​\t隐式转换法",[18,18783,18785],{"className":209,"code":18784,"language":211,"meta":23,"style":23},"#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",[25,18786,18787,18793,18803,18808,18813,18818,18823,18827,18835,18839,18843,18847,18853,18857,18870,18874,18886,18890,18899,18912,18916,18920,18926,18930,18943,18947,18952,18968,18972,18977,18986,18999,19003,19009,19013,19018,19026,19030,19035,19039,19047,19051,19056,19061,19066,19071,19076,19080,19085,19090,19095,19100,19104,19109,19114,19130,19142,19147,19151,19156,19161,19166,19170,19175,19189,19202,19206,19214,19218,19224,19230,19238],{"__ignoreMap":23},[28,18788,18789,18791],{"class":30,"line":31},[28,18790,2026],{"class":38},[28,18792,2029],{"class":320},[28,18794,18795,18797,18799,18801],{"class":30,"line":94},[28,18796,2034],{"class":38},[28,18798,2037],{"class":38},[28,18800,2041],{"class":2040},[28,18802,1367],{"class":34},[28,18804,18805],{"class":30,"line":109},[28,18806,18807],{"class":105},"\u002F\u002F1.构造函数的分类及调用\n",[28,18809,18810],{"class":30,"line":125},[28,18811,18812],{"class":105},"\u002F\u002F分类\n",[28,18814,18815],{"class":30,"line":131},[28,18816,18817],{"class":105},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[28,18819,18820],{"class":30,"line":1291},[28,18821,18822],{"class":105},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[28,18824,18825],{"class":30,"line":1297},[28,18826,2477],{"emptyLinePlaceholder":144},[28,18828,18829,18831,18833],{"class":30,"line":1388},[28,18830,14771],{"class":38},[28,18832,15646],{"class":2040},[28,18834,2751],{"class":34},[28,18836,18837],{"class":30,"line":1394},[28,18838,1623],{"class":34},[28,18840,18841],{"class":30,"line":1406},[28,18842,14793],{"class":38},[28,18844,18845],{"class":30,"line":1689},[28,18846,18591],{"class":105},[28,18848,18849,18851],{"class":30,"line":1694},[28,18850,18596],{"class":2040},[28,18852,2053],{"class":34},[28,18854,18855],{"class":30,"line":1700},[28,18856,2107],{"class":34},[28,18858,18859,18861,18863,18866,18868],{"class":30,"line":1705},[28,18860,3528],{"class":34},[28,18862,1248],{"class":38},[28,18864,18865],{"class":320},"\"Person构造函数无参构造\"",[28,18867,1248],{"class":38},[28,18869,1270],{"class":34},[28,18871,18872],{"class":30,"line":1719},[28,18873,2264],{"class":34},[28,18875,18876,18878,18880,18882,18884],{"class":30,"line":1724},[28,18877,18596],{"class":2040},[28,18879,221],{"class":34},[28,18881,224],{"class":38},[28,18883,1475],{"class":5293},[28,18885,227],{"class":34},[28,18887,18888],{"class":30,"line":1730},[28,18889,2107],{"class":34},[28,18891,18892,18895,18897],{"class":30,"line":1751},[28,18893,18894],{"class":34},"        age",[28,18896,39],{"class":38},[28,18898,6274],{"class":34},[28,18900,18901,18903,18905,18908,18910],{"class":30,"line":1756},[28,18902,3528],{"class":34},[28,18904,1248],{"class":38},[28,18906,18907],{"class":320},"\"Person构造函数有参构造\"",[28,18909,1248],{"class":38},[28,18911,1270],{"class":34},[28,18913,18914],{"class":30,"line":1770},[28,18915,2264],{"class":34},[28,18917,18918],{"class":30,"line":1775},[28,18919,18624],{"class":105},[28,18921,18922,18924],{"class":30,"line":1804},[28,18923,18629],{"class":2040},[28,18925,2053],{"class":34},[28,18927,18928],{"class":30,"line":1809},[28,18929,2107],{"class":34},[28,18931,18932,18934,18936,18939,18941],{"class":30,"line":1826},[28,18933,3528],{"class":34},[28,18935,1248],{"class":38},[28,18937,18938],{"class":320},"\"Person析构函数被调用\"",[28,18940,1248],{"class":38},[28,18942,1270],{"class":34},[28,18944,18945],{"class":30,"line":1831},[28,18946,2264],{"class":34},[28,18948,18949],{"class":30,"line":1836},[28,18950,18951],{"class":105},"    \u002F\u002F拷贝构造函数\n",[28,18953,18954,18956,18958,18960,18962,18964,18966],{"class":30,"line":1841},[28,18955,18596],{"class":2040},[28,18957,221],{"class":34},[28,18959,6869],{"class":38},[28,18961,15646],{"class":2040},[28,18963,10661],{"class":38},[28,18965,14],{"class":5293},[28,18967,227],{"class":34},[28,18969,18970],{"class":30,"line":1855},[28,18971,2107],{"class":34},[28,18973,18974],{"class":30,"line":1860},[28,18975,18976],{"class":105},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[28,18978,18979,18981,18983],{"class":30,"line":2654},[28,18980,18894],{"class":34},[28,18982,39],{"class":38},[28,18984,18985],{"class":34},"p.age;\n",[28,18987,18988,18990,18992,18995,18997],{"class":30,"line":2668},[28,18989,3528],{"class":34},[28,18991,1248],{"class":38},[28,18993,18994],{"class":320},"\"Person拷贝构造函数被调用\"",[28,18996,1248],{"class":38},[28,18998,1270],{"class":34},[28,19000,19001],{"class":30,"line":2676},[28,19002,2264],{"class":34},[28,19004,19005,19007],{"class":30,"line":2681},[28,19006,2062],{"class":38},[28,19008,7874],{"class":34},[28,19010,19011],{"class":30,"line":2687},[28,19012,4072],{"class":34},[28,19014,19015],{"class":30,"line":2693},[28,19016,19017],{"class":105},"\u002F\u002F调用\n",[28,19019,19020,19022,19024],{"class":30,"line":2698},[28,19021,5441],{"class":38},[28,19023,5665],{"class":2040},[28,19025,2053],{"class":34},[28,19027,19028],{"class":30,"line":8025},[28,19029,1623],{"class":34},[28,19031,19032],{"class":30,"line":8049},[28,19033,19034],{"class":105},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[28,19036,19037],{"class":30,"line":8054},[28,19038,1642],{"class":34},[28,19040,19041,19043,19045],{"class":30,"line":8060},[28,19042,5441],{"class":38},[28,19044,5734],{"class":2040},[28,19046,2053],{"class":34},[28,19048,19049],{"class":30,"line":8087},[28,19050,1623],{"class":34},[28,19052,19053],{"class":30,"line":8092},[28,19054,19055],{"class":105},"    \u002F\u002F1.括号法\n",[28,19057,19058],{"class":30,"line":8098},[28,19059,19060],{"class":105},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[28,19062,19063],{"class":30,"line":8110},[28,19064,19065],{"class":105},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[28,19067,19068],{"class":30,"line":8122},[28,19069,19070],{"class":105},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[28,19072,19073],{"class":30,"line":8134},[28,19074,19075],{"class":105},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[28,19077,19078],{"class":30,"line":9793},[28,19079,2477],{"emptyLinePlaceholder":144},[28,19081,19082],{"class":30,"line":9818},[28,19083,19084],{"class":105},"    \u002F\u002F注意事项\n",[28,19086,19087],{"class":30,"line":9841},[28,19088,19089],{"class":105},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[28,19091,19092],{"class":30,"line":9865},[28,19093,19094],{"class":105},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[28,19096,19097],{"class":30,"line":9870},[28,19098,19099],{"class":105},"    \u002F\u002F Person p4();\n",[28,19101,19102],{"class":30,"line":9875},[28,19103,2477],{"emptyLinePlaceholder":144},[28,19105,19106],{"class":30,"line":9880},[28,19107,19108],{"class":105},"    \u002F\u002F2.显示法\n",[28,19110,19111],{"class":30,"line":9889},[28,19112,19113],{"class":34},"    Person p1;\n",[28,19115,19116,19119,19121,19124,19126,19128],{"class":30,"line":9894},[28,19117,19118],{"class":34},"    Person p2",[28,19120,39],{"class":38},[28,19122,19123],{"class":2040},"Person",[28,19125,221],{"class":34},[28,19127,659],{"class":45},[28,19129,2796],{"class":34},[28,19131,19132,19135,19137,19139],{"class":30,"line":9900},[28,19133,19134],{"class":34},"    Person p3",[28,19136,39],{"class":38},[28,19138,19123],{"class":2040},[28,19140,19141],{"class":34},"(p2);\n",[28,19143,19144],{"class":30,"line":9921},[28,19145,19146],{"class":105},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[28,19148,19149],{"class":30,"line":9927},[28,19150,2477],{"emptyLinePlaceholder":144},[28,19152,19153],{"class":30,"line":9941},[28,19154,19155],{"class":105},"    \u002F\u002F 注意事项2\n",[28,19157,19158],{"class":30,"line":9947},[28,19159,19160],{"class":105},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[28,19162,19163],{"class":30,"line":9974},[28,19164,19165],{"class":105},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[28,19167,19168],{"class":30,"line":9983},[28,19169,2477],{"emptyLinePlaceholder":144},[28,19171,19172],{"class":30,"line":9989},[28,19173,19174],{"class":105},"    \u002F\u002F3.隐士转换法\n",[28,19176,19177,19180,19182,19184,19186],{"class":30,"line":9997},[28,19178,19179],{"class":34},"    Person p4",[28,19181,39],{"class":38},[28,19183,659],{"class":45},[28,19185,274],{"class":34},[28,19187,19188],{"class":105},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[28,19190,19191,19194,19196,19199],{"class":30,"line":10002},[28,19192,19193],{"class":34},"    Person p5",[28,19195,39],{"class":38},[28,19197,19198],{"class":34},"p4;",[28,19200,19201],{"class":105}," \u002F\u002F 这里会调用拷贝构造函数\n",[28,19203,19204],{"class":30,"line":16681},[28,19205,1642],{"class":34},[28,19207,19208,19210,19212],{"class":30,"line":16687},[28,19209,224],{"class":38},[28,19211,2050],{"class":2040},[28,19213,2053],{"class":34},[28,19215,19216],{"class":30,"line":16710},[28,19217,1623],{"class":34},[28,19219,19220,19222],{"class":30,"line":16716},[28,19221,5710],{"class":2040},[28,19223,5713],{"class":34},[28,19225,19226,19228],{"class":30,"line":16739},[28,19227,5779],{"class":2040},[28,19229,5713],{"class":34},[28,19231,19232,19234,19236],{"class":30,"line":16753},[28,19233,4167],{"class":38},[28,19235,4170],{"class":45},[28,19237,1367],{"class":34},[28,19239,19240],{"class":30,"line":16773},[28,19241,1642],{"class":34},[14,19243,19244,19247],{},[365,19245,19246],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[188,19249,19251],{"id":19250},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19253,19254],{},"C++中拷贝构造函数调用时机通常有三种情况",[1211,19256,19257,19260,19263],{},[174,19258,19259],{},"使用一个已经创建完毕的对象来初始化一个新对象",[174,19261,19262],{},"值传递的方式给函数参数传值",[174,19264,19265],{},"以值方式返回局部对象",[18,19267,19269],{"className":209,"code":19268,"language":211,"meta":23,"style":23},"#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",[25,19270,19271,19277,19287,19291,19296,19300,19305,19310,19315,19321,19325,19329,19335,19339,19352,19356,19361,19373,19377,19385,19398,19402,19406,19422,19426,19435,19448,19452,19458,19462,19474,19478,19484,19488,19492,19500,19504,19517,19525,19543,19547,19552,19557,19572,19576,19589,19593,19601,19605,19609,19617,19621,19626,19635,19639,19643,19668,19678,19682,19690,19694,19705,19730,19734,19738,19742,19750,19754,19759,19764,19771,19776,19781,19786,19791,19795,19800,19804,19809,19813,19818,19823,19827,19831,19836,19841,19849],{"__ignoreMap":23},[28,19272,19273,19275],{"class":30,"line":31},[28,19274,2026],{"class":38},[28,19276,2029],{"class":320},[28,19278,19279,19281,19283,19285],{"class":30,"line":94},[28,19280,2034],{"class":38},[28,19282,2037],{"class":38},[28,19284,2041],{"class":2040},[28,19286,1367],{"class":34},[28,19288,19289],{"class":30,"line":109},[28,19290,2477],{"emptyLinePlaceholder":144},[28,19292,19293],{"class":30,"line":125},[28,19294,19295],{"class":105},"\u002F\u002F拷贝构造函数调用时机\n",[28,19297,19298],{"class":30,"line":131},[28,19299,2477],{"emptyLinePlaceholder":144},[28,19301,19302],{"class":30,"line":1291},[28,19303,19304],{"class":105},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[28,19306,19307],{"class":30,"line":1297},[28,19308,19309],{"class":105},"\u002F\u002F2.值传递的方式给函数参数传值\n",[28,19311,19312],{"class":30,"line":1388},[28,19313,19314],{"class":105},"\u002F\u002F3.以值方式返回局部对象\n",[28,19316,19317,19319],{"class":30,"line":1394},[28,19318,14771],{"class":38},[28,19320,15248],{"class":2040},[28,19322,19323],{"class":30,"line":1406},[28,19324,1623],{"class":34},[28,19326,19327],{"class":30,"line":1689},[28,19328,14793],{"class":38},[28,19330,19331,19333],{"class":30,"line":1694},[28,19332,18596],{"class":2040},[28,19334,2053],{"class":34},[28,19336,19337],{"class":30,"line":1700},[28,19338,2107],{"class":34},[28,19340,19341,19343,19345,19348,19350],{"class":30,"line":1705},[28,19342,9746],{"class":34},[28,19344,1248],{"class":38},[28,19346,19347],{"class":320}," \"Person的默认构造函数调用\"",[28,19349,1521],{"class":38},[28,19351,8917],{"class":34},[28,19353,19354],{"class":30,"line":1719},[28,19355,2264],{"class":34},[28,19357,19358],{"class":30,"line":1724},[28,19359,19360],{"class":105},"    \u002F\u002F有参构造\n",[28,19362,19363,19365,19367,19369,19371],{"class":30,"line":1730},[28,19364,18596],{"class":2040},[28,19366,221],{"class":34},[28,19368,224],{"class":38},[28,19370,15766],{"class":5293},[28,19372,227],{"class":34},[28,19374,19375],{"class":30,"line":1751},[28,19376,2107],{"class":34},[28,19378,19379,19381,19383],{"class":30,"line":1756},[28,19380,15820],{"class":34},[28,19382,39],{"class":38},[28,19384,7874],{"class":34},[28,19386,19387,19389,19391,19394,19396],{"class":30,"line":1770},[28,19388,9746],{"class":34},[28,19390,1248],{"class":38},[28,19392,19393],{"class":320}," \"Person的有参构造函数调用\"",[28,19395,1521],{"class":38},[28,19397,8917],{"class":34},[28,19399,19400],{"class":30,"line":1775},[28,19401,2264],{"class":34},[28,19403,19404],{"class":30,"line":1804},[28,19405,18951],{"class":105},[28,19407,19408,19410,19412,19414,19416,19418,19420],{"class":30,"line":1809},[28,19409,18596],{"class":2040},[28,19411,221],{"class":34},[28,19413,6869],{"class":38},[28,19415,15646],{"class":2040},[28,19417,10661],{"class":38},[28,19419,14],{"class":5293},[28,19421,227],{"class":34},[28,19423,19424],{"class":30,"line":1826},[28,19425,2107],{"class":34},[28,19427,19428,19430,19432],{"class":30,"line":1831},[28,19429,15820],{"class":34},[28,19431,39],{"class":38},[28,19433,19434],{"class":34}," p.m_Age;\n",[28,19436,19437,19439,19441,19444,19446],{"class":30,"line":1836},[28,19438,9746],{"class":34},[28,19440,1248],{"class":38},[28,19442,19443],{"class":320}," \"Person的拷贝构造函数调用\"",[28,19445,1521],{"class":38},[28,19447,8917],{"class":34},[28,19449,19450],{"class":30,"line":1841},[28,19451,2264],{"class":34},[28,19453,19454,19456],{"class":30,"line":1855},[28,19455,18629],{"class":2040},[28,19457,2053],{"class":34},[28,19459,19460],{"class":30,"line":1860},[28,19461,2107],{"class":34},[28,19463,19464,19466,19468,19470,19472],{"class":30,"line":2654},[28,19465,9746],{"class":34},[28,19467,1248],{"class":38},[28,19469,18644],{"class":320},[28,19471,1521],{"class":38},[28,19473,8917],{"class":34},[28,19475,19476],{"class":30,"line":2668},[28,19477,2264],{"class":34},[28,19479,19480,19482],{"class":30,"line":2676},[28,19481,2062],{"class":38},[28,19483,15743],{"class":34},[28,19485,19486],{"class":30,"line":2681},[28,19487,4072],{"class":34},[28,19489,19490],{"class":30,"line":2687},[28,19491,19304],{"class":105},[28,19493,19494,19496,19498],{"class":30,"line":2693},[28,19495,5441],{"class":38},[28,19497,5665],{"class":2040},[28,19499,2053],{"class":34},[28,19501,19502],{"class":30,"line":2698},[28,19503,1623],{"class":34},[28,19505,19506,19509,19511,19513,19515],{"class":30,"line":8025},[28,19507,19508],{"class":34},"    Person ",[28,19510,7207],{"class":2040},[28,19512,221],{"class":34},[28,19514,102],{"class":45},[28,19516,2796],{"class":34},[28,19518,19519,19521,19523],{"class":30,"line":8049},[28,19520,19508],{"class":34},[28,19522,7110],{"class":2040},[28,19524,17592],{"class":34},[28,19526,19527,19529,19531,19534,19536,19539,19541],{"class":30,"line":8054},[28,19528,1628],{"class":34},[28,19530,1248],{"class":38},[28,19532,19533],{"class":320},"\"P2的年龄为：\"",[28,19535,1248],{"class":38},[28,19537,19538],{"class":34},"p2.m_Age",[28,19540,1248],{"class":38},[28,19542,1270],{"class":34},[28,19544,19545],{"class":30,"line":8060},[28,19546,1642],{"class":34},[28,19548,19549],{"class":30,"line":8087},[28,19550,19551],{"class":105},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[28,19553,19554],{"class":30,"line":8092},[28,19555,19556],{"class":105},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[28,19558,19559,19561,19564,19566,19568,19570],{"class":30,"line":8098},[28,19560,5441],{"class":38},[28,19562,19563],{"class":2040}," doWork",[28,19565,221],{"class":34},[28,19567,19123],{"class":2040},[28,19569,6902],{"class":5293},[28,19571,227],{"class":34},[28,19573,19574],{"class":30,"line":8110},[28,19575,1623],{"class":34},[28,19577,19578,19580,19582,19585,19587],{"class":30,"line":8122},[28,19579,6606],{"class":34},[28,19581,1248],{"class":38},[28,19583,19584],{"class":320}," \"doWork函数调用\"",[28,19586,1521],{"class":38},[28,19588,8917],{"class":34},[28,19590,19591],{"class":30,"line":8134},[28,19592,1642],{"class":34},[28,19594,19595,19597,19599],{"class":30,"line":9793},[28,19596,5441],{"class":38},[28,19598,5734],{"class":2040},[28,19600,2053],{"class":34},[28,19602,19603],{"class":30,"line":9818},[28,19604,1623],{"class":34},[28,19606,19607],{"class":30,"line":9841},[28,19608,15390],{"class":34},[28,19610,19611,19614],{"class":30,"line":9865},[28,19612,19613],{"class":2040},"    doWork",[28,19615,19616],{"class":34},"(p);\n",[28,19618,19619],{"class":30,"line":9870},[28,19620,1642],{"class":34},[28,19622,19623],{"class":30,"line":9875},[28,19624,19625],{"class":105},"\u002F\u002F 3.以值方式返回局部对象\n",[28,19627,19628,19630,19633],{"class":30,"line":9880},[28,19629,19123],{"class":2040},[28,19631,19632],{"class":2040}," doWork2",[28,19634,2053],{"class":34},[28,19636,19637],{"class":30,"line":9889},[28,19638,1623],{"class":34},[28,19640,19641],{"class":30,"line":9894},[28,19642,19113],{"class":34},[28,19644,19645,19647,19649,19651,19653,19655,19657,19659,19661,19663,19665],{"class":30,"line":9900},[28,19646,1628],{"class":34},[28,19648,1248],{"class":38},[28,19650,221],{"class":34},[28,19652,224],{"class":38},[28,19654,6595],{"class":38},[28,19656,642],{"class":34},[28,19658,567],{"class":38},[28,19660,7207],{"class":34},[28,19662,1248],{"class":38},[28,19664,1315],{"class":34},[28,19666,19667],{"class":105},"\u002F\u002F打印p1的地址\n",[28,19669,19670,19672,19675],{"class":30,"line":9921},[28,19671,4167],{"class":38},[28,19673,19674],{"class":34}," p1;",[28,19676,19677],{"class":105},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[28,19679,19680],{"class":30,"line":9927},[28,19681,1642],{"class":34},[28,19683,19684,19686,19688],{"class":30,"line":9941},[28,19685,5441],{"class":38},[28,19687,5806],{"class":2040},[28,19689,2053],{"class":34},[28,19691,19692],{"class":30,"line":9947},[28,19693,1623],{"class":34},[28,19695,19696,19699,19701,19703],{"class":30,"line":9974},[28,19697,19698],{"class":34},"    Person p ",[28,19700,39],{"class":38},[28,19702,19632],{"class":2040},[28,19704,5713],{"class":34},[28,19706,19707,19709,19711,19713,19715,19717,19719,19721,19723,19725,19727],{"class":30,"line":9983},[28,19708,1628],{"class":34},[28,19710,1248],{"class":38},[28,19712,221],{"class":34},[28,19714,224],{"class":38},[28,19716,6595],{"class":38},[28,19718,642],{"class":34},[28,19720,567],{"class":38},[28,19722,14],{"class":34},[28,19724,1248],{"class":38},[28,19726,1315],{"class":34},[28,19728,19729],{"class":105},"\u002F\u002F打印p的地址\n",[28,19731,19732],{"class":30,"line":9989},[28,19733,1642],{"class":34},[28,19735,19736],{"class":30,"line":9997},[28,19737,2477],{"emptyLinePlaceholder":144},[28,19739,19740],{"class":30,"line":10002},[28,19741,2477],{"emptyLinePlaceholder":144},[28,19743,19744,19746,19748],{"class":30,"line":16681},[28,19745,224],{"class":38},[28,19747,2050],{"class":2040},[28,19749,2053],{"class":34},[28,19751,19752],{"class":30,"line":16687},[28,19753,1623],{"class":34},[28,19755,19756],{"class":30,"line":16710},[28,19757,19758],{"class":105},"    \u002F\u002F test01();\n",[28,19760,19761],{"class":30,"line":16716},[28,19762,19763],{"class":105},"    \u002F\u002F test02();\n",[28,19765,19766,19769],{"class":30,"line":16739},[28,19767,19768],{"class":2040},"    test03",[28,19770,5713],{"class":34},[28,19772,19773],{"class":30,"line":16753},[28,19774,19775],{"class":105},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[28,19777,19778],{"class":30,"line":16773},[28,19779,19780],{"class":105},"\u002F\u002F 输出结果如下：\n",[28,19782,19783],{"class":30,"line":16779},[28,19784,19785],{"class":105},"\u002F\u002F Person的默认构造函数调用\n",[28,19787,19788],{"class":30,"line":16790},[28,19789,19790],{"class":105},"\u002F\u002F 0x7fffffffceec\n",[28,19792,19793],{"class":30,"line":16813},[28,19794,19790],{"class":105},[28,19796,19797],{"class":30,"line":16835},[28,19798,19799],{"class":105},"\u002F\u002F Person的析构函数调用\n",[28,19801,19802],{"class":30,"line":16840},[28,19803,2477],{"emptyLinePlaceholder":144},[28,19805,19806],{"class":30,"line":16846},[28,19807,19808],{"class":105},"\u002F\u002F 之前的输出结果如下：\n",[28,19810,19811],{"class":30,"line":16860},[28,19812,19785],{"class":105},[28,19814,19815],{"class":30,"line":16873},[28,19816,19817],{"class":105},"\u002F\u002F 地址\n",[28,19819,19820],{"class":30,"line":16878},[28,19821,19822],{"class":105},"\u002F\u002F Person的拷贝构造函数调用\n",[28,19824,19825],{"class":30,"line":16892},[28,19826,19799],{"class":105},[28,19828,19829],{"class":30,"line":16897},[28,19830,19817],{"class":105},[28,19832,19833],{"class":30,"line":16903},[28,19834,19835],{"class":105},"\u002F\u002F (这两次输出的地址也是不同的) \n",[28,19837,19838],{"class":30,"line":16908},[28,19839,19840],{"class":105},"\u002F\u002F Person的析构函数调用     \n",[28,19842,19843,19845,19847],{"class":30,"line":16922},[28,19844,4167],{"class":38},[28,19846,4170],{"class":45},[28,19848,1367],{"class":34},[28,19850,19851],{"class":30,"line":16927},[28,19852,1642],{"class":34},[14,19854,19855],{},"简化版理解",[18,19857,19859],{"className":209,"code":19858,"language":211,"meta":23,"style":23},"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",[25,19860,19861,19869,19873,19879,19892,19903,19907,19919,19932,19940,19944,19960,19973,19982,19986,19991,19997,20010,20014,20018,20025,20029,20033,20038,20046,20050,20066,20079,20092,20096,20101,20109,20113,20117,20122,20127,20143,20151,20158,20164,20168,20172,20177,20185,20189,20193,20216,20223,20227,20231,20239,20243,20253,20275,20279,20283,20287,20295,20299,20304,20309,20315,20319,20329,20333,20341],{"__ignoreMap":23},[28,19862,19863,19865,19867],{"class":30,"line":31},[28,19864,14771],{"class":38},[28,19866,15646],{"class":2040},[28,19868,15649],{"class":34},[28,19870,19871],{"class":30,"line":94},[28,19872,14793],{"class":38},[28,19874,19875,19877],{"class":30,"line":109},[28,19876,18596],{"class":2040},[28,19878,10930],{"class":34},[28,19880,19881,19883,19885,19888,19890],{"class":30,"line":125},[28,19882,9746],{"class":34},[28,19884,1248],{"class":38},[28,19886,19887],{"class":320}," \"无参构造函数!\"",[28,19889,1521],{"class":38},[28,19891,8917],{"class":34},[28,19893,19894,19897,19899,19901],{"class":30,"line":131},[28,19895,19896],{"class":34},"        mAge ",[28,19898,39],{"class":38},[28,19900,4170],{"class":45},[28,19902,1367],{"class":34},[28,19904,19905],{"class":30,"line":1291},[28,19906,2264],{"class":34},[28,19908,19909,19911,19913,19915,19917],{"class":30,"line":1297},[28,19910,18596],{"class":2040},[28,19912,221],{"class":34},[28,19914,224],{"class":38},[28,19916,15766],{"class":5293},[28,19918,12519],{"class":34},[28,19920,19921,19923,19925,19928,19930],{"class":30,"line":1388},[28,19922,9746],{"class":34},[28,19924,1248],{"class":38},[28,19926,19927],{"class":320}," \"有参构造函数!\"",[28,19929,1521],{"class":38},[28,19931,8917],{"class":34},[28,19933,19934,19936,19938],{"class":30,"line":1394},[28,19935,19896],{"class":34},[28,19937,39],{"class":38},[28,19939,7874],{"class":34},[28,19941,19942],{"class":30,"line":1406},[28,19943,2264],{"class":34},[28,19945,19946,19948,19950,19952,19954,19956,19958],{"class":30,"line":1689},[28,19947,18596],{"class":2040},[28,19949,221],{"class":34},[28,19951,6869],{"class":38},[28,19953,15646],{"class":2040},[28,19955,567],{"class":38},[28,19957,6902],{"class":5293},[28,19959,12519],{"class":34},[28,19961,19962,19964,19966,19969,19971],{"class":30,"line":1694},[28,19963,9746],{"class":34},[28,19965,1248],{"class":38},[28,19967,19968],{"class":320}," \"拷贝构造函数!\"",[28,19970,1521],{"class":38},[28,19972,8917],{"class":34},[28,19974,19975,19977,19979],{"class":30,"line":1700},[28,19976,19896],{"class":34},[28,19978,39],{"class":38},[28,19980,19981],{"class":34}," p.mAge;\n",[28,19983,19984],{"class":30,"line":1705},[28,19985,2264],{"class":34},[28,19987,19988],{"class":30,"line":1719},[28,19989,19990],{"class":105},"    \u002F\u002F析构函数在释放内存之前调用\n",[28,19992,19993,19995],{"class":30,"line":1724},[28,19994,18629],{"class":2040},[28,19996,10930],{"class":34},[28,19998,19999,20001,20003,20006,20008],{"class":30,"line":1730},[28,20000,9746],{"class":34},[28,20002,1248],{"class":38},[28,20004,20005],{"class":320}," \"析构函数!\"",[28,20007,1521],{"class":38},[28,20009,8917],{"class":34},[28,20011,20012],{"class":30,"line":1751},[28,20013,2264],{"class":34},[28,20015,20016],{"class":30,"line":1756},[28,20017,14793],{"class":38},[28,20019,20020,20022],{"class":30,"line":1770},[28,20021,2062],{"class":38},[28,20023,20024],{"class":34}," mAge;\n",[28,20026,20027],{"class":30,"line":1775},[28,20028,4072],{"class":34},[28,20030,20031],{"class":30,"line":1804},[28,20032,2477],{"emptyLinePlaceholder":144},[28,20034,20035],{"class":30,"line":1809},[28,20036,20037],{"class":105},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[28,20039,20040,20042,20044],{"class":30,"line":1826},[28,20041,5441],{"class":38},[28,20043,5665],{"class":2040},[28,20045,10930],{"class":34},[28,20047,20048],{"class":30,"line":1831},[28,20049,2477],{"emptyLinePlaceholder":144},[28,20051,20052,20054,20057,20059,20061,20063],{"class":30,"line":1836},[28,20053,19508],{"class":34},[28,20055,20056],{"class":2040},"man",[28,20058,221],{"class":34},[28,20060,525],{"class":45},[28,20062,6043],{"class":34},[28,20064,20065],{"class":105}," \u002F\u002Fp对象已经创建完毕\n",[28,20067,20068,20070,20073,20076],{"class":30,"line":1841},[28,20069,19508],{"class":34},[28,20071,20072],{"class":2040},"newman",[28,20074,20075],{"class":34},"(man);",[28,20077,20078],{"class":105}," \u002F\u002F调用拷贝构造函数\n",[28,20080,20081,20084,20086,20089],{"class":30,"line":1855},[28,20082,20083],{"class":34},"    Person newman2 ",[28,20085,39],{"class":38},[28,20087,20088],{"class":34}," man;",[28,20090,20091],{"class":105}," \u002F\u002F拷贝构造\n",[28,20093,20094],{"class":30,"line":1860},[28,20095,2477],{"emptyLinePlaceholder":144},[28,20097,20098],{"class":30,"line":2654},[28,20099,20100],{"class":105},"    \u002F\u002FPerson newman3;\n",[28,20102,20103,20106],{"class":30,"line":2668},[28,20104,20105],{"class":105},"    \u002F\u002Fnewman3 = man;",[28,20107,20108],{"class":105}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[28,20110,20111],{"class":30,"line":2676},[28,20112,1642],{"class":34},[28,20114,20115],{"class":30,"line":2681},[28,20116,2477],{"emptyLinePlaceholder":144},[28,20118,20119],{"class":30,"line":2687},[28,20120,20121],{"class":105},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[28,20123,20124],{"class":30,"line":2693},[28,20125,20126],{"class":105},"\u002F\u002F相当于Person p1 = p;\n",[28,20128,20129,20131,20133,20135,20137,20140],{"class":30,"line":2698},[28,20130,5441],{"class":38},[28,20132,19563],{"class":2040},[28,20134,221],{"class":34},[28,20136,19123],{"class":2040},[28,20138,20139],{"class":5293}," p1",[28,20141,20142],{"class":34},") {}\n",[28,20144,20145,20147,20149],{"class":30,"line":8025},[28,20146,5441],{"class":38},[28,20148,5734],{"class":2040},[28,20150,10930],{"class":34},[28,20152,20153,20155],{"class":30,"line":8049},[28,20154,18681],{"class":34},[28,20156,20157],{"class":105}," \u002F\u002F无参构造函数\n",[28,20159,20160,20162],{"class":30,"line":8054},[28,20161,19613],{"class":2040},[28,20163,19616],{"class":34},[28,20165,20166],{"class":30,"line":8060},[28,20167,1642],{"class":34},[28,20169,20170],{"class":30,"line":8087},[28,20171,2477],{"emptyLinePlaceholder":144},[28,20173,20174],{"class":30,"line":8092},[28,20175,20176],{"class":105},"\u002F\u002F3. 以值方式返回局部对象\n",[28,20178,20179,20181,20183],{"class":30,"line":8098},[28,20180,19123],{"class":2040},[28,20182,19632],{"class":2040},[28,20184,2053],{"class":34},[28,20186,20187],{"class":30,"line":8110},[28,20188,1623],{"class":34},[28,20190,20191],{"class":30,"line":8122},[28,20192,19113],{"class":34},[28,20194,20195,20197,20199,20201,20203,20205,20207,20209,20212,20214],{"class":30,"line":8134},[28,20196,6606],{"class":34},[28,20198,1248],{"class":38},[28,20200,1735],{"class":34},[28,20202,224],{"class":38},[28,20204,6595],{"class":38},[28,20206,642],{"class":34},[28,20208,567],{"class":38},[28,20210,20211],{"class":34},"p1 ",[28,20213,1248],{"class":38},[28,20215,8917],{"class":34},[28,20217,20218,20220],{"class":30,"line":9793},[28,20219,4167],{"class":38},[28,20221,20222],{"class":34}," p1;\n",[28,20224,20225],{"class":30,"line":9818},[28,20226,1642],{"class":34},[28,20228,20229],{"class":30,"line":9841},[28,20230,2477],{"emptyLinePlaceholder":144},[28,20232,20233,20235,20237],{"class":30,"line":9865},[28,20234,5441],{"class":38},[28,20236,5806],{"class":2040},[28,20238,2053],{"class":34},[28,20240,20241],{"class":30,"line":9870},[28,20242,1623],{"class":34},[28,20244,20245,20247,20249,20251],{"class":30,"line":9875},[28,20246,19698],{"class":34},[28,20248,39],{"class":38},[28,20250,19632],{"class":2040},[28,20252,5713],{"class":34},[28,20254,20255,20257,20259,20261,20263,20265,20267,20269,20271,20273],{"class":30,"line":9880},[28,20256,6606],{"class":34},[28,20258,1248],{"class":38},[28,20260,1735],{"class":34},[28,20262,224],{"class":38},[28,20264,6595],{"class":38},[28,20266,642],{"class":34},[28,20268,567],{"class":38},[28,20270,11525],{"class":34},[28,20272,1248],{"class":38},[28,20274,8917],{"class":34},[28,20276,20277],{"class":30,"line":9889},[28,20278,1642],{"class":34},[28,20280,20281],{"class":30,"line":9894},[28,20282,2477],{"emptyLinePlaceholder":144},[28,20284,20285],{"class":30,"line":9900},[28,20286,2477],{"emptyLinePlaceholder":144},[28,20288,20289,20291,20293],{"class":30,"line":9921},[28,20290,224],{"class":38},[28,20292,2050],{"class":2040},[28,20294,10930],{"class":34},[28,20296,20297],{"class":30,"line":9927},[28,20298,2477],{"emptyLinePlaceholder":144},[28,20300,20301],{"class":30,"line":9941},[28,20302,20303],{"class":105},"    \u002F\u002Ftest01();\n",[28,20305,20306],{"class":30,"line":9947},[28,20307,20308],{"class":105},"    \u002F\u002Ftest02();\n",[28,20310,20311,20313],{"class":30,"line":9974},[28,20312,19768],{"class":2040},[28,20314,5713],{"class":34},[28,20316,20317],{"class":30,"line":9983},[28,20318,2477],{"emptyLinePlaceholder":144},[28,20320,20321,20323,20325,20327],{"class":30,"line":9989},[28,20322,2380],{"class":2040},[28,20324,221],{"class":34},[28,20326,2385],{"class":320},[28,20328,2796],{"class":34},[28,20330,20331],{"class":30,"line":9997},[28,20332,2477],{"emptyLinePlaceholder":144},[28,20334,20335,20337,20339],{"class":30,"line":10002},[28,20336,4167],{"class":38},[28,20338,4170],{"class":45},[28,20340,1367],{"class":34},[28,20342,20343],{"class":30,"line":16681},[28,20344,1642],{"class":34},[188,20346,20348],{"id":20347},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20350,20351],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20353,20354],{},"1．默认构造函数(无参，函数体为空)",[14,20356,20357],{},"2．默认析构函数(无参，函数体为空)",[14,20359,20360],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20362,20363],{},"构造函数调用规则如下：",[1211,20365,20366,20369],{},[174,20367,20368],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[174,20370,20371],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[18,20373,20375],{"className":209,"code":20374,"language":211,"meta":23,"style":23},"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",[25,20376,20377,20385,20389,20394,20400,20412,20416,20421,20433,20442,20454,20458,20462,20478,20487,20499,20503,20507,20513,20525,20529,20533,20539,20543,20547,20555,20559,20571,20576,20584,20588,20606,20610,20614,20622,20626,20631,20639,20654,20667,20671,20676,20683,20699,20712,20716,20720,20728,20732,20738,20742,20752,20756,20764],{"__ignoreMap":23},[28,20378,20379,20381,20383],{"class":30,"line":31},[28,20380,14771],{"class":38},[28,20382,15646],{"class":2040},[28,20384,15649],{"class":34},[28,20386,20387],{"class":30,"line":94},[28,20388,14793],{"class":38},[28,20390,20391],{"class":30,"line":109},[28,20392,20393],{"class":105},"    \u002F\u002F无参（默认）构造函数\n",[28,20395,20396,20398],{"class":30,"line":125},[28,20397,18596],{"class":2040},[28,20399,10930],{"class":34},[28,20401,20402,20404,20406,20408,20410],{"class":30,"line":131},[28,20403,9746],{"class":34},[28,20405,1248],{"class":38},[28,20407,19887],{"class":320},[28,20409,1521],{"class":38},[28,20411,8917],{"class":34},[28,20413,20414],{"class":30,"line":1291},[28,20415,2264],{"class":34},[28,20417,20418],{"class":30,"line":1297},[28,20419,20420],{"class":105},"    \u002F\u002F有参构造函数\n",[28,20422,20423,20425,20427,20429,20431],{"class":30,"line":1388},[28,20424,18596],{"class":2040},[28,20426,221],{"class":34},[28,20428,224],{"class":38},[28,20430,1475],{"class":5293},[28,20432,12519],{"class":34},[28,20434,20435,20438,20440],{"class":30,"line":1394},[28,20436,20437],{"class":34},"        age ",[28,20439,39],{"class":38},[28,20441,1509],{"class":34},[28,20443,20444,20446,20448,20450,20452],{"class":30,"line":1406},[28,20445,9746],{"class":34},[28,20447,1248],{"class":38},[28,20449,19927],{"class":320},[28,20451,1521],{"class":38},[28,20453,8917],{"class":34},[28,20455,20456],{"class":30,"line":1689},[28,20457,2264],{"class":34},[28,20459,20460],{"class":30,"line":1694},[28,20461,18951],{"class":105},[28,20463,20464,20466,20468,20470,20472,20474,20476],{"class":30,"line":1700},[28,20465,18596],{"class":2040},[28,20467,221],{"class":34},[28,20469,6869],{"class":38},[28,20471,15646],{"class":2040},[28,20473,567],{"class":38},[28,20475,6902],{"class":5293},[28,20477,12519],{"class":34},[28,20479,20480,20482,20484],{"class":30,"line":1705},[28,20481,20437],{"class":34},[28,20483,39],{"class":38},[28,20485,20486],{"class":34}," p.age;\n",[28,20488,20489,20491,20493,20495,20497],{"class":30,"line":1719},[28,20490,9746],{"class":34},[28,20492,1248],{"class":38},[28,20494,19968],{"class":320},[28,20496,1521],{"class":38},[28,20498,8917],{"class":34},[28,20500,20501],{"class":30,"line":1724},[28,20502,2264],{"class":34},[28,20504,20505],{"class":30,"line":1730},[28,20506,18624],{"class":105},[28,20508,20509,20511],{"class":30,"line":1751},[28,20510,18629],{"class":2040},[28,20512,10930],{"class":34},[28,20514,20515,20517,20519,20521,20523],{"class":30,"line":1756},[28,20516,9746],{"class":34},[28,20518,1248],{"class":38},[28,20520,20005],{"class":320},[28,20522,1521],{"class":38},[28,20524,8917],{"class":34},[28,20526,20527],{"class":30,"line":1770},[28,20528,2264],{"class":34},[28,20530,20531],{"class":30,"line":1775},[28,20532,14793],{"class":38},[28,20534,20535,20537],{"class":30,"line":1804},[28,20536,2062],{"class":38},[28,20538,7874],{"class":34},[28,20540,20541],{"class":30,"line":1809},[28,20542,4072],{"class":34},[28,20544,20545],{"class":30,"line":1826},[28,20546,2477],{"emptyLinePlaceholder":144},[28,20548,20549,20551,20553],{"class":30,"line":1831},[28,20550,5441],{"class":38},[28,20552,5665],{"class":2040},[28,20554,2053],{"class":34},[28,20556,20557],{"class":30,"line":1836},[28,20558,1623],{"class":34},[28,20560,20561,20563,20565,20567,20569],{"class":30,"line":1841},[28,20562,19508],{"class":34},[28,20564,7207],{"class":2040},[28,20566,221],{"class":34},[28,20568,860],{"class":45},[28,20570,2796],{"class":34},[28,20572,20573],{"class":30,"line":1855},[28,20574,20575],{"class":105},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[28,20577,20578,20580,20582],{"class":30,"line":1860},[28,20579,19508],{"class":34},[28,20581,7110],{"class":2040},[28,20583,17592],{"class":34},[28,20585,20586],{"class":30,"line":2654},[28,20587,2477],{"emptyLinePlaceholder":144},[28,20589,20590,20592,20594,20597,20599,20602,20604],{"class":30,"line":2668},[28,20591,6606],{"class":34},[28,20593,1248],{"class":38},[28,20595,20596],{"class":320}," \"p2的年龄为： \"",[28,20598,1521],{"class":38},[28,20600,20601],{"class":34}," p2.age ",[28,20603,1248],{"class":38},[28,20605,8917],{"class":34},[28,20607,20608],{"class":30,"line":2676},[28,20609,1642],{"class":34},[28,20611,20612],{"class":30,"line":2681},[28,20613,2477],{"emptyLinePlaceholder":144},[28,20615,20616,20618,20620],{"class":30,"line":2687},[28,20617,5441],{"class":38},[28,20619,5734],{"class":2040},[28,20621,2053],{"class":34},[28,20623,20624],{"class":30,"line":2693},[28,20625,1623],{"class":34},[28,20627,20628],{"class":30,"line":2698},[28,20629,20630],{"class":105},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[28,20632,20633,20636],{"class":30,"line":8025},[28,20634,20635],{"class":34},"    Person p1;",[28,20637,20638],{"class":105}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[28,20640,20641,20643,20645,20647,20649,20651],{"class":30,"line":8049},[28,20642,19508],{"class":34},[28,20644,7110],{"class":2040},[28,20646,221],{"class":34},[28,20648,659],{"class":45},[28,20650,6043],{"class":34},[28,20652,20653],{"class":105}," \u002F\u002F用户提供的有参\n",[28,20655,20656,20658,20661,20664],{"class":30,"line":8054},[28,20657,19508],{"class":34},[28,20659,20660],{"class":2040},"p3",[28,20662,20663],{"class":34},"(p2);",[28,20665,20666],{"class":105}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[28,20668,20669],{"class":30,"line":8060},[28,20670,2477],{"emptyLinePlaceholder":144},[28,20672,20673],{"class":30,"line":8087},[28,20674,20675],{"class":105},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[28,20677,20678,20681],{"class":30,"line":8092},[28,20679,20680],{"class":34},"    Person p4;",[28,20682,20638],{"class":105},[28,20684,20685,20687,20690,20692,20694,20696],{"class":30,"line":8098},[28,20686,19508],{"class":34},[28,20688,20689],{"class":2040},"p5",[28,20691,221],{"class":34},[28,20693,659],{"class":45},[28,20695,6043],{"class":34},[28,20697,20698],{"class":105}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[28,20700,20701,20703,20706,20709],{"class":30,"line":8110},[28,20702,19508],{"class":34},[28,20704,20705],{"class":2040},"p6",[28,20707,20708],{"class":34},"(p5);",[28,20710,20711],{"class":105}," \u002F\u002F用户自己提供拷贝构造\n",[28,20713,20714],{"class":30,"line":8122},[28,20715,1642],{"class":34},[28,20717,20718],{"class":30,"line":8134},[28,20719,2477],{"emptyLinePlaceholder":144},[28,20721,20722,20724,20726],{"class":30,"line":9793},[28,20723,224],{"class":38},[28,20725,2050],{"class":2040},[28,20727,10930],{"class":34},[28,20729,20730],{"class":30,"line":9818},[28,20731,2477],{"emptyLinePlaceholder":144},[28,20733,20734,20736],{"class":30,"line":9841},[28,20735,5710],{"class":2040},[28,20737,5713],{"class":34},[28,20739,20740],{"class":30,"line":9865},[28,20741,2477],{"emptyLinePlaceholder":144},[28,20743,20744,20746,20748,20750],{"class":30,"line":9870},[28,20745,2380],{"class":2040},[28,20747,221],{"class":34},[28,20749,2385],{"class":320},[28,20751,2796],{"class":34},[28,20753,20754],{"class":30,"line":9875},[28,20755,2477],{"emptyLinePlaceholder":144},[28,20757,20758,20760,20762],{"class":30,"line":9880},[28,20759,4167],{"class":38},[28,20761,4170],{"class":45},[28,20763,1367],{"class":34},[28,20765,20766],{"class":30,"line":9889},[28,20767,1642],{"class":34},[188,20769,20771],{"id":20770},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20773,20774],{},"浅拷贝：简单的赋值拷贝操作",[14,20776,20777],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[18,20779,20781],{"className":209,"code":20780,"language":211,"meta":23,"style":23},"#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",[25,20782,20783,20789,20799,20805,20809,20813,20818,20824,20828,20841,20845,20849,20856,20860,20870,20885,20898,20902,20907,20912,20928,20932,20945,20950,20955,20960,20969,20974,20989,20993,20997,21001,21007,21011,21016,21031,21035,21046,21060,21064,21073,21077,21083,21095,21099,21107,21111,21128,21159,21167,21195,21199,21203,21211,21215,21221],{"__ignoreMap":23},[28,20784,20785,20787],{"class":30,"line":31},[28,20786,2026],{"class":38},[28,20788,2029],{"class":320},[28,20790,20791,20793,20795,20797],{"class":30,"line":94},[28,20792,2034],{"class":38},[28,20794,2037],{"class":38},[28,20796,2041],{"class":2040},[28,20798,1367],{"class":34},[28,20800,20801,20803],{"class":30,"line":109},[28,20802,14771],{"class":38},[28,20804,15248],{"class":2040},[28,20806,20807],{"class":30,"line":125},[28,20808,1623],{"class":34},[28,20810,20811],{"class":30,"line":131},[28,20812,14793],{"class":38},[28,20814,20815],{"class":30,"line":1291},[28,20816,20817],{"class":105},"    \u002F\u002F默认构造函数\n",[28,20819,20820,20822],{"class":30,"line":1297},[28,20821,18596],{"class":2040},[28,20823,2053],{"class":34},[28,20825,20826],{"class":30,"line":1388},[28,20827,2107],{"class":34},[28,20829,20830,20832,20834,20837,20839],{"class":30,"line":1394},[28,20831,3528],{"class":34},[28,20833,1248],{"class":38},[28,20835,20836],{"class":320},"\"默认构造函数\"",[28,20838,1248],{"class":38},[28,20840,1270],{"class":34},[28,20842,20843],{"class":30,"line":1406},[28,20844,2264],{"class":34},[28,20846,20847],{"class":30,"line":1689},[28,20848,20420],{"class":105},[28,20850,20851,20853],{"class":30,"line":1694},[28,20852,18629],{"class":2040},[28,20854,20855],{"class":34},"(int age,int height)\n",[28,20857,20858],{"class":30,"line":1700},[28,20859,2107],{"class":34},[28,20861,20862,20865,20867],{"class":30,"line":1705},[28,20863,20864],{"class":34},"        m_Age",[28,20866,39],{"class":38},[28,20868,20869],{"class":34},"age;\n",[28,20871,20872,20875,20877,20879,20882],{"class":30,"line":1719},[28,20873,20874],{"class":34},"        m_Height",[28,20876,11794],{"class":38},[28,20878,2459],{"class":38},[28,20880,20881],{"class":34},"(height);",[28,20883,20884],{"class":105},"\u002F\u002F放到堆区\n",[28,20886,20887,20889,20891,20894,20896],{"class":30,"line":1724},[28,20888,3528],{"class":34},[28,20890,1248],{"class":38},[28,20892,20893],{"class":320},"\"有参构造函数\"",[28,20895,1248],{"class":38},[28,20897,1270],{"class":34},[28,20899,20900],{"class":30,"line":1730},[28,20901,2264],{"class":34},[28,20903,20904],{"class":30,"line":1751},[28,20905,20906],{"class":105},"    \u002F\u002F深拷贝解决上述问题\n",[28,20908,20909],{"class":30,"line":1756},[28,20910,20911],{"class":105},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[28,20913,20914,20916,20918,20920,20922,20924,20926],{"class":30,"line":1770},[28,20915,18596],{"class":2040},[28,20917,221],{"class":34},[28,20919,6869],{"class":38},[28,20921,15646],{"class":2040},[28,20923,10661],{"class":38},[28,20925,14],{"class":5293},[28,20927,227],{"class":34},[28,20929,20930],{"class":30,"line":1775},[28,20931,2107],{"class":34},[28,20933,20934,20936,20938,20941,20943],{"class":30,"line":1804},[28,20935,3528],{"class":34},[28,20937,1248],{"class":38},[28,20939,20940],{"class":320},"\"拷贝构造函数\"",[28,20942,1248],{"class":38},[28,20944,1270],{"class":34},[28,20946,20947],{"class":30,"line":1809},[28,20948,20949],{"class":105},"        \u002F\u002F编译器默认的写如下注释部分\n",[28,20951,20952],{"class":30,"line":1826},[28,20953,20954],{"class":105},"        \u002F\u002Fm_Age=p.m_Age;\n",[28,20956,20957],{"class":30,"line":1831},[28,20958,20959],{"class":105},"        \u002F\u002Fm_Height=p.m_Height;\n",[28,20961,20962,20964,20966],{"class":30,"line":1836},[28,20963,20864],{"class":34},[28,20965,39],{"class":38},[28,20967,20968],{"class":34},"p.m_Age;\n",[28,20970,20971],{"class":30,"line":1841},[28,20972,20973],{"class":105},"        \u002F\u002F深拷贝操作\n",[28,20975,20976,20978,20980,20982,20984,20986],{"class":30,"line":1855},[28,20977,20874],{"class":34},[28,20979,11794],{"class":38},[28,20981,2459],{"class":38},[28,20983,221],{"class":34},[28,20985,668],{"class":38},[28,20987,20988],{"class":34},"p.m_Height);\n",[28,20990,20991],{"class":30,"line":1860},[28,20992,2264],{"class":34},[28,20994,20995],{"class":30,"line":2654},[28,20996,2477],{"emptyLinePlaceholder":144},[28,20998,20999],{"class":30,"line":2668},[28,21000,18624],{"class":105},[28,21002,21003,21005],{"class":30,"line":2676},[28,21004,18629],{"class":2040},[28,21006,2053],{"class":34},[28,21008,21009],{"class":30,"line":2681},[28,21010,2107],{"class":34},[28,21012,21013],{"class":30,"line":2687},[28,21014,21015],{"class":105},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[28,21017,21018,21020,21023,21026,21029],{"class":30,"line":2693},[28,21019,2574],{"class":38},[28,21021,21022],{"class":34},"(m_Height ",[28,21024,21025],{"class":38},"!=",[28,21027,21028],{"class":45}," NULL",[28,21030,227],{"class":34},[28,21032,21033],{"class":30,"line":2698},[28,21034,2587],{"class":34},[28,21036,21037,21040,21043],{"class":30,"line":8025},[28,21038,21039],{"class":38},"            delete",[28,21041,21042],{"class":34}," m_Height;",[28,21044,21045],{"class":105}," \u002F\u002F释放堆区内存\n",[28,21047,21048,21051,21053,21055,21057],{"class":30,"line":8049},[28,21049,21050],{"class":34},"            m_Height",[28,21052,39],{"class":38},[28,21054,2469],{"class":45},[28,21056,274],{"class":34},[28,21058,21059],{"class":105}," \u002F\u002F防止野指针\n",[28,21061,21062],{"class":30,"line":8054},[28,21063,2606],{"class":34},[28,21065,21066,21068,21070],{"class":30,"line":8060},[28,21067,3528],{"class":34},[28,21069,1248],{"class":38},[28,21071,21072],{"class":320},"\"Person的析构函数调用\"\n",[28,21074,21075],{"class":30,"line":8087},[28,21076,2264],{"class":34},[28,21078,21079,21081],{"class":30,"line":8092},[28,21080,2062],{"class":38},[28,21082,15743],{"class":34},[28,21084,21085,21087,21089,21092],{"class":30,"line":8098},[28,21086,2062],{"class":38},[28,21088,6595],{"class":38},[28,21090,21091],{"class":34},"m_Height;",[28,21093,21094],{"class":105}," \u002F\u002F定义一个指针，指向身高\n",[28,21096,21097],{"class":30,"line":8110},[28,21098,4072],{"class":34},[28,21100,21101,21103,21105],{"class":30,"line":8122},[28,21102,5441],{"class":38},[28,21104,5665],{"class":2040},[28,21106,2053],{"class":34},[28,21108,21109],{"class":30,"line":8134},[28,21110,1623],{"class":34},[28,21112,21113,21115,21117,21119,21121,21123,21126],{"class":30,"line":9793},[28,21114,19508],{"class":34},[28,21116,7207],{"class":2040},[28,21118,221],{"class":34},[28,21120,860],{"class":45},[28,21122,49],{"class":34},[28,21124,21125],{"class":45},"160",[28,21127,2796],{"class":34},[28,21129,21130,21132,21134,21137,21139,21142,21144,21147,21149,21152,21154,21156],{"class":30,"line":9818},[28,21131,1628],{"class":34},[28,21133,1248],{"class":38},[28,21135,21136],{"class":320},"\"p1的年龄为:\"",[28,21138,1248],{"class":38},[28,21140,21141],{"class":34},"p1.m_Age",[28,21143,1248],{"class":38},[28,21145,21146],{"class":320},"\"身高为：\"",[28,21148,6496],{"class":38},[28,21150,21151],{"class":34},"p1.m_Height",[28,21153,1248],{"class":38},[28,21155,1315],{"class":34},[28,21157,21158],{"class":105},"  \u002F\u002F18\n",[28,21160,21161,21163,21165],{"class":30,"line":9841},[28,21162,19508],{"class":34},[28,21164,7110],{"class":2040},[28,21166,17592],{"class":34},[28,21168,21169,21171,21173,21176,21178,21180,21182,21184,21186,21189,21191,21193],{"class":30,"line":9865},[28,21170,1628],{"class":34},[28,21172,1248],{"class":38},[28,21174,21175],{"class":320},"\"p2的年龄为：\"",[28,21177,1248],{"class":38},[28,21179,19538],{"class":34},[28,21181,1248],{"class":38},[28,21183,21146],{"class":320},[28,21185,6496],{"class":38},[28,21187,21188],{"class":34},"p2.m_Height",[28,21190,1248],{"class":38},[28,21192,1315],{"class":34},[28,21194,21158],{"class":105},[28,21196,21197],{"class":30,"line":9870},[28,21198,13287],{"class":34},[28,21200,21201],{"class":30,"line":9875},[28,21202,1642],{"class":34},[28,21204,21205,21207,21209],{"class":30,"line":9880},[28,21206,224],{"class":38},[28,21208,2050],{"class":2040},[28,21210,2053],{"class":34},[28,21212,21213],{"class":30,"line":9889},[28,21214,1623],{"class":34},[28,21216,21217,21219],{"class":30,"line":9894},[28,21218,5710],{"class":2040},[28,21220,5713],{"class":34},[28,21222,21223],{"class":30,"line":9900},[28,21224,1642],{"class":34},[14,21226,21227],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21229,21230],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21232,21233],{},[1539,21234],{"alt":23,"src":21235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21237,21238],{},"浅拷贝问题要使用深拷贝来解决",[14,21240,21241],{},[1539,21242],{"alt":23,"src":21243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21245,21246],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[188,21248,21250],{"id":21249},"_826初始化列表","8.2.6初始化列表",[14,21252,21253],{},"作用：初始化属性",[14,21255,5258],{},[18,21257,21260],{"className":21258,"code":21259,"language":5264},[5262],"构造函数():属性1(值1),属性2(值2).....{}\n",[25,21261,21259],{"__ignoreMap":23},[14,21263,21264],{},"例子",[18,21266,21268],{"className":209,"code":21267,"language":211,"meta":23,"style":23},"#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",[25,21269,21270,21276,21286,21292,21296,21301,21305,21310,21315,21320,21325,21330,21335,21339,21344,21349,21392,21401,21419,21437,21455,21459,21463,21470,21477,21484,21488,21492,21500,21504,21508,21528,21537,21541,21545,21555,21559,21567],{"__ignoreMap":23},[28,21271,21272,21274],{"class":30,"line":31},[28,21273,2026],{"class":38},[28,21275,2029],{"class":320},[28,21277,21278,21280,21282,21284],{"class":30,"line":94},[28,21279,2034],{"class":38},[28,21281,2037],{"class":38},[28,21283,2041],{"class":2040},[28,21285,1367],{"class":34},[28,21287,21288,21290],{"class":30,"line":109},[28,21289,14771],{"class":38},[28,21291,15248],{"class":2040},[28,21293,21294],{"class":30,"line":125},[28,21295,1623],{"class":34},[28,21297,21298],{"class":30,"line":131},[28,21299,21300],{"class":38},"    public:\n",[28,21302,21303],{"class":30,"line":1291},[28,21304,2477],{"emptyLinePlaceholder":144},[28,21306,21307],{"class":30,"line":1297},[28,21308,21309],{"class":105},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[28,21311,21312],{"class":30,"line":1388},[28,21313,21314],{"class":105},"    \u002F\u002FPerson(int a, int b, int c) {\n",[28,21316,21317],{"class":30,"line":1394},[28,21318,21319],{"class":105},"    \u002F\u002F  m_A = a;\n",[28,21321,21322],{"class":30,"line":1406},[28,21323,21324],{"class":105},"    \u002F\u002F  m_B = b;\n",[28,21326,21327],{"class":30,"line":1689},[28,21328,21329],{"class":105},"    \u002F\u002F  m_C = c;\n",[28,21331,21332],{"class":30,"line":1694},[28,21333,21334],{"class":105},"    \u002F\u002F}\n",[28,21336,21337],{"class":30,"line":1700},[28,21338,2477],{"emptyLinePlaceholder":144},[28,21340,21341],{"class":30,"line":1705},[28,21342,21343],{"class":105},"    \u002F\u002F初始化列表方式初始化\n",[28,21345,21346],{"class":30,"line":1719},[28,21347,21348],{"class":105},"    \u002F\u002F使用有参构造函数\n",[28,21350,21351,21353,21355,21357,21359,21361,21363,21365,21367,21369,21371,21374,21377,21380,21383,21386,21389],{"class":30,"line":1724},[28,21352,18596],{"class":2040},[28,21354,221],{"class":34},[28,21356,224],{"class":38},[28,21358,1475],{"class":5293},[28,21360,12512],{"class":34},[28,21362,224],{"class":38},[28,21364,2910],{"class":5293},[28,21366,12512],{"class":34},[28,21368,224],{"class":38},[28,21370,2926],{"class":5293},[28,21372,21373],{"class":34},") :",[28,21375,21376],{"class":2040},"m_A",[28,21378,21379],{"class":34},"(a), ",[28,21381,21382],{"class":2040},"m_B",[28,21384,21385],{"class":34},"(b), ",[28,21387,21388],{"class":2040},"m_C",[28,21390,21391],{"class":34},"(c) {}\n",[28,21393,21394,21396,21399],{"class":30,"line":1730},[28,21395,14986],{"class":38},[28,21397,21398],{"class":2040}," PrintPerson",[28,21400,10930],{"class":34},[28,21402,21403,21405,21407,21410,21412,21415,21417],{"class":30,"line":1751},[28,21404,9746],{"class":34},[28,21406,1248],{"class":38},[28,21408,21409],{"class":320}," \"mA:\"",[28,21411,1521],{"class":38},[28,21413,21414],{"class":34}," m_A ",[28,21416,1248],{"class":38},[28,21418,8917],{"class":34},[28,21420,21421,21423,21425,21428,21430,21433,21435],{"class":30,"line":1756},[28,21422,9746],{"class":34},[28,21424,1248],{"class":38},[28,21426,21427],{"class":320}," \"mB:\"",[28,21429,1521],{"class":38},[28,21431,21432],{"class":34}," m_B ",[28,21434,1248],{"class":38},[28,21436,8917],{"class":34},[28,21438,21439,21441,21443,21446,21448,21451,21453],{"class":30,"line":1770},[28,21440,9746],{"class":34},[28,21442,1248],{"class":38},[28,21444,21445],{"class":320}," \"mC:\"",[28,21447,1521],{"class":38},[28,21449,21450],{"class":34}," m_C ",[28,21452,1248],{"class":38},[28,21454,8917],{"class":34},[28,21456,21457],{"class":30,"line":1775},[28,21458,2264],{"class":34},[28,21460,21461],{"class":30,"line":1804},[28,21462,15299],{"class":38},[28,21464,21465,21467],{"class":30,"line":1809},[28,21466,2062],{"class":38},[28,21468,21469],{"class":34}," m_A;\n",[28,21471,21472,21474],{"class":30,"line":1826},[28,21473,2062],{"class":38},[28,21475,21476],{"class":34}," m_B;\n",[28,21478,21479,21481],{"class":30,"line":1831},[28,21480,2062],{"class":38},[28,21482,21483],{"class":34}," m_C;\n",[28,21485,21486],{"class":30,"line":1836},[28,21487,4072],{"class":34},[28,21489,21490],{"class":30,"line":1841},[28,21491,2477],{"emptyLinePlaceholder":144},[28,21493,21494,21496,21498],{"class":30,"line":1855},[28,21495,224],{"class":38},[28,21497,2050],{"class":2040},[28,21499,6055],{"class":34},[28,21501,21502],{"class":30,"line":1860},[28,21503,1623],{"class":34},[28,21505,21506],{"class":30,"line":2654},[28,21507,2477],{"emptyLinePlaceholder":144},[28,21509,21510,21512,21514,21516,21518,21520,21522,21524,21526],{"class":30,"line":2668},[28,21511,19508],{"class":34},[28,21513,14],{"class":2040},[28,21515,221],{"class":34},[28,21517,46],{"class":45},[28,21519,12512],{"class":34},[28,21521,52],{"class":45},[28,21523,12512],{"class":34},[28,21525,57],{"class":45},[28,21527,2796],{"class":34},[28,21529,21530,21532,21535],{"class":30,"line":2676},[28,21531,15943],{"class":34},[28,21533,21534],{"class":2040},"PrintPerson",[28,21536,5713],{"class":34},[28,21538,21539],{"class":30,"line":2681},[28,21540,2477],{"emptyLinePlaceholder":144},[28,21542,21543],{"class":30,"line":2687},[28,21544,2477],{"emptyLinePlaceholder":144},[28,21546,21547,21549,21551,21553],{"class":30,"line":2693},[28,21548,2380],{"class":2040},[28,21550,221],{"class":34},[28,21552,2385],{"class":320},[28,21554,2796],{"class":34},[28,21556,21557],{"class":30,"line":2698},[28,21558,2477],{"emptyLinePlaceholder":144},[28,21560,21561,21563,21565],{"class":30,"line":8025},[28,21562,4167],{"class":38},[28,21564,4170],{"class":45},[28,21566,1367],{"class":34},[28,21568,21569],{"class":30,"line":8049},[28,21570,1642],{"class":34},[14,21572,21573,21574,21577,21578],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[365,21575,21576],{},"参数名就是定义的对象属性","，",[365,21579,21580],{},"属性后面的值为有参构造函数的形参",[18,21582,21584],{"className":209,"code":21583,"language":211,"meta":23,"style":23},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[25,21585,21586],{"__ignoreMap":23},[28,21587,21588,21590,21592,21594,21597,21599,21602,21604,21607,21609,21612,21614,21617,21619],{"class":30,"line":31},[28,21589,19123],{"class":2040},[28,21591,221],{"class":34},[28,21593,224],{"class":38},[28,21595,21596],{"class":34}," a.",[28,21598,224],{"class":38},[28,21600,21601],{"class":34}," b,",[28,21603,224],{"class":38},[28,21605,21606],{"class":34}," b):",[28,21608,21376],{"class":2040},[28,21610,21611],{"class":34},"(a),",[28,21613,21382],{"class":2040},[28,21615,21616],{"class":34},"(c),",[28,21618,21388],{"class":2040},[28,21620,21621],{"class":34},"(b) {}\n",[188,21623,21625],{"id":21624},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21627,21628],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21630,14710],{},[18,21632,21634],{"className":209,"code":21633,"language":211,"meta":23,"style":23},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[25,21635,21636,21641,21646,21650,21655,21659],{"__ignoreMap":23},[28,21637,21638],{"class":30,"line":31},[28,21639,21640],{"class":34},"A{};\n",[28,21642,21643],{"class":30,"line":94},[28,21644,21645],{"class":34},"B\n",[28,21647,21648],{"class":30,"line":109},[28,21649,1623],{"class":34},[28,21651,21652],{"class":30,"line":125},[28,21653,21654],{"class":34},"    A a;\n",[28,21656,21657],{"class":30,"line":131},[28,21658,1642],{"class":34},[28,21660,21661],{"class":30,"line":1291},[28,21662,21663],{"class":105},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21665,21666],{},"案例",[18,21668,21670],{"className":209,"code":21669,"language":211,"meta":23,"style":23},"\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",[25,21671,21672,21677,21684,21688,21693,21698,21712,21716,21726,21737,21741,21748,21752,21765,21769,21774,21779,21783,21789,21793,21797,21801,21832,21836,21847,21851,21857,21861,21874,21878,21882,21886,21891,21896,21900,21908,21912,21929,21948,21952,21960,21964,21970],{"__ignoreMap":23},[28,21673,21674],{"class":30,"line":31},[28,21675,21676],{"class":105},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[28,21678,21679,21681],{"class":30,"line":94},[28,21680,14771],{"class":38},[28,21682,21683],{"class":2040}," Phone\n",[28,21685,21686],{"class":30,"line":109},[28,21687,1623],{"class":34},[28,21689,21690],{"class":30,"line":125},[28,21691,21692],{"class":34},"public：\n",[28,21694,21695],{"class":30,"line":131},[28,21696,21697],{"class":105},"    \u002F\u002F 赋值(构造函数)\n",[28,21699,21700,21703,21705,21707,21710],{"class":30,"line":1291},[28,21701,21702],{"class":2040},"    Phone",[28,21704,221],{"class":34},[28,21706,14994],{"class":2040},[28,21708,21709],{"class":5293}," pName",[28,21711,227],{"class":34},[28,21713,21714],{"class":30,"line":1297},[28,21715,2107],{"class":34},[28,21717,21718,21721,21723],{"class":30,"line":1388},[28,21719,21720],{"class":34},"        m_pName",[28,21722,39],{"class":38},[28,21724,21725],{"class":34},"pName;\n",[28,21727,21728,21730,21732,21735],{"class":30,"line":1394},[28,21729,3528],{"class":34},[28,21731,1248],{"class":38},[28,21733,21734],{"class":320},"\"Phone的构造函数调用\"",[28,21736,1367],{"class":34},[28,21738,21739],{"class":30,"line":1406},[28,21740,2264],{"class":34},[28,21742,21743,21746],{"class":30,"line":1689},[28,21744,21745],{"class":2040},"    ~Phone",[28,21747,2053],{"class":34},[28,21749,21750],{"class":30,"line":1694},[28,21751,2107],{"class":34},[28,21753,21754,21756,21758,21761,21763],{"class":30,"line":1700},[28,21755,3528],{"class":34},[28,21757,1248],{"class":38},[28,21759,21760],{"class":320},"\"Phone析构函数调用\"",[28,21762,1248],{"class":38},[28,21764,1270],{"class":34},[28,21766,21767],{"class":30,"line":1705},[28,21768,2264],{"class":34},[28,21770,21771],{"class":30,"line":1719},[28,21772,21773],{"class":105},"    \u002F\u002F\n",[28,21775,21776],{"class":30,"line":1724},[28,21777,21778],{"class":34},"    string m_PName;\n",[28,21780,21781],{"class":30,"line":1730},[28,21782,4072],{"class":34},[28,21784,21785,21787],{"class":30,"line":1751},[28,21786,14771],{"class":38},[28,21788,15248],{"class":2040},[28,21790,21791],{"class":30,"line":1756},[28,21792,1623],{"class":34},[28,21794,21795],{"class":30,"line":1770},[28,21796,14793],{"class":38},[28,21798,21799],{"class":30,"line":1775},[28,21800,17071],{"class":105},[28,21802,21803,21805,21807,21809,21811,21813,21815,21818,21821,21823,21826,21829],{"class":30,"line":1804},[28,21804,18596],{"class":2040},[28,21806,221],{"class":34},[28,21808,14994],{"class":2040},[28,21810,14997],{"class":5293},[28,21812,49],{"class":34},[28,21814,14994],{"class":2040},[28,21816,21817],{"class":5293}," pname",[28,21819,21820],{"class":34},"):",[28,21822,15087],{"class":2040},[28,21824,21825],{"class":34},"(name),m_phone.",[28,21827,21828],{"class":2040},"m_PName",[28,21830,21831],{"class":34},"(pname) \n",[28,21833,21834],{"class":30,"line":1809},[28,21835,2107],{"class":34},[28,21837,21838,21840,21842,21845],{"class":30,"line":1826},[28,21839,3528],{"class":34},[28,21841,1248],{"class":38},[28,21843,21844],{"class":320},"\"Person的构造函数调用\"",[28,21846,1367],{"class":34},[28,21848,21849],{"class":30,"line":1831},[28,21850,2264],{"class":34},[28,21852,21853,21855],{"class":30,"line":1836},[28,21854,18629],{"class":2040},[28,21856,2053],{"class":34},[28,21858,21859],{"class":30,"line":1841},[28,21860,2107],{"class":34},[28,21862,21863,21865,21867,21870,21872],{"class":30,"line":1855},[28,21864,3528],{"class":34},[28,21866,1248],{"class":38},[28,21868,21869],{"class":320},"\"Person析构函数调用\"",[28,21871,1248],{"class":38},[28,21873,1270],{"class":34},[28,21875,21876],{"class":30,"line":1860},[28,21877,2264],{"class":34},[28,21879,21880],{"class":30,"line":2654},[28,21881,7857],{"class":105},[28,21883,21884],{"class":30,"line":2668},[28,21885,14969],{"class":34},[28,21887,21888],{"class":30,"line":2676},[28,21889,21890],{"class":105},"    \u002F\u002F手机\n",[28,21892,21893],{"class":30,"line":2681},[28,21894,21895],{"class":34},"    Phone m_Phone;\n",[28,21897,21898],{"class":30,"line":2687},[28,21899,4072],{"class":34},[28,21901,21902,21904,21906],{"class":30,"line":2693},[28,21903,5441],{"class":38},[28,21905,5665],{"class":2040},[28,21907,2053],{"class":34},[28,21909,21910],{"class":30,"line":2698},[28,21911,1623],{"class":34},[28,21913,21914,21916,21918,21920,21922,21924,21927],{"class":30,"line":8025},[28,21915,19508],{"class":34},[28,21917,14],{"class":2040},[28,21919,221],{"class":34},[28,21921,7993],{"class":320},[28,21923,49],{"class":34},[28,21925,21926],{"class":320},"\"安卓\"",[28,21928,2796],{"class":34},[28,21930,21931,21933,21935,21938,21940,21943,21945],{"class":30,"line":8049},[28,21932,1628],{"class":34},[28,21934,1248],{"class":38},[28,21936,21937],{"class":34},"p.Name",[28,21939,1248],{"class":38},[28,21941,21942],{"class":320},"\"拿着：\"",[28,21944,1248],{"class":38},[28,21946,21947],{"class":34},"p.m_phone.m_PName;\n",[28,21949,21950],{"class":30,"line":8054},[28,21951,1642],{"class":34},[28,21953,21954,21956,21958],{"class":30,"line":8060},[28,21955,224],{"class":38},[28,21957,2050],{"class":2040},[28,21959,2053],{"class":34},[28,21961,21962],{"class":30,"line":8087},[28,21963,1623],{"class":34},[28,21965,21966,21968],{"class":30,"line":8092},[28,21967,5710],{"class":2040},[28,21969,5713],{"class":34},[28,21971,21972],{"class":30,"line":8098},[28,21973,1642],{"class":34},[14,21975,9102],{},[18,21977,21979],{"className":209,"code":21978,"language":211,"meta":23,"style":23},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[25,21980,21981,21986],{"__ignoreMap":23},[28,21982,21983],{"class":30,"line":31},[28,21984,21985],{"class":105},"    \u002F\u002F不需要写这个：\n",[28,21987,21988],{"class":30,"line":94},[28,21989,21990],{"class":105},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21992,21993],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[18,21995,21997],{"className":209,"code":21996,"language":211,"meta":23,"style":23},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[25,21998,21999],{"__ignoreMap":23},[28,22000,22001,22003,22006,22008,22011,22014],{"class":30,"line":31},[28,22002,19123],{"class":2040},[28,22004,22005],{"class":34},"(string name.string pname):",[28,22007,15087],{"class":2040},[28,22009,22010],{"class":34},"(name),",[28,22012,22013],{"class":2040},"m_phone",[28,22015,22016],{"class":34},"(pname) {}\n",[14,22018,22019,22020,39,22023],{},"采用的是隐式转换法，实际为如下：\n",[25,22021,22022],{},"m_phone(pname)",[25,22024,22025],{},"Phone m_phone=pname",[14,22027,22028,22031],{},[365,22029,22030],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22033,22034],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[188,22036,22038],{"id":22037},"_828静态对象","8.2.8静态对象",[14,22040,22041],{},"静态对象在成员对象前static，称为静态对象",[14,22043,22044],{},"静态对象分为两类：",[171,22046,22047],{},[174,22048,22049],{},"静态成员变量",[1211,22051,22052,22055,22058],{},[174,22053,22054],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[174,22056,22057],{},"②在编译阶段分配内存",[174,22059,22060],{},"③类内声明，类外初始化",[171,22062,22063],{"start":94},[174,22064,22065],{},"静态成员函数",[1211,22067,22068,22071],{},[174,22069,22070],{},"①所有对象共享同一个函数",[174,22072,22073],{},"②静态成员函数只能访问静态成员变量",[22075,22076,22078],"h4",{"id":22077},"_8281静态成员变量","8.2.8.1静态成员变量",[18,22080,22082],{"className":209,"code":22081,"language":211,"meta":23,"style":23},"#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",[25,22083,22084,22090,22100,22106,22110,22114,22119,22124,22129,22137,22141,22145,22149,22157,22161,22165,22170,22183,22187,22195,22199,22205],{"__ignoreMap":23},[28,22085,22086,22088],{"class":30,"line":31},[28,22087,2026],{"class":38},[28,22089,2029],{"class":320},[28,22091,22092,22094,22096,22098],{"class":30,"line":94},[28,22093,2034],{"class":38},[28,22095,2037],{"class":38},[28,22097,2041],{"class":2040},[28,22099,1367],{"class":34},[28,22101,22102,22104],{"class":30,"line":109},[28,22103,14771],{"class":38},[28,22105,15248],{"class":2040},[28,22107,22108],{"class":30,"line":125},[28,22109,1623],{"class":34},[28,22111,22112],{"class":30,"line":131},[28,22113,14793],{"class":38},[28,22115,22116],{"class":30,"line":1291},[28,22117,22118],{"class":105},"    \u002F\u002F非静态成员变量\n",[28,22120,22121],{"class":30,"line":1297},[28,22122,22123],{"class":105},"    \u002F\u002F int m_A;\n",[28,22125,22126],{"class":30,"line":1388},[28,22127,22128],{"class":105},"    \u002F\u002F定义静态成员变量\n",[28,22130,22131,22133,22135],{"class":30,"line":1394},[28,22132,11097],{"class":38},[28,22134,2459],{"class":38},[28,22136,21469],{"class":34},[28,22138,22139],{"class":30,"line":1406},[28,22140,2477],{"emptyLinePlaceholder":144},[28,22142,22143],{"class":30,"line":1689},[28,22144,2477],{"emptyLinePlaceholder":144},[28,22146,22147],{"class":30,"line":1694},[28,22148,4072],{"class":34},[28,22150,22151,22153,22155],{"class":30,"line":1700},[28,22152,5441],{"class":38},[28,22154,5665],{"class":2040},[28,22156,2053],{"class":34},[28,22158,22159],{"class":30,"line":1705},[28,22160,1623],{"class":34},[28,22162,22163],{"class":30,"line":1719},[28,22164,15390],{"class":34},[28,22166,22167],{"class":30,"line":1724},[28,22168,22169],{"class":105},"    \u002F\u002F输出类成员变量这块内存\n",[28,22171,22172,22174,22176,22179,22181],{"class":30,"line":1730},[28,22173,1628],{"class":34},[28,22175,1248],{"class":38},[28,22177,22178],{"class":34},"p.m_A",[28,22180,1248],{"class":38},[28,22182,1270],{"class":34},[28,22184,22185],{"class":30,"line":1751},[28,22186,1642],{"class":34},[28,22188,22189,22191,22193],{"class":30,"line":1756},[28,22190,224],{"class":38},[28,22192,2050],{"class":2040},[28,22194,2053],{"class":34},[28,22196,22197],{"class":30,"line":1770},[28,22198,1623],{"class":34},[28,22200,22201,22203],{"class":30,"line":1775},[28,22202,5710],{"class":2040},[28,22204,2053],{"class":34},[28,22206,22207],{"class":30,"line":1804},[28,22208,1642],{"class":34},[14,22210,22211],{},"此时输出是报错的：无法解析外部命令",[14,22213,22214],{},"解决这一问题：必须用到类内声明，类外初始化操作",[18,22216,22218],{"className":209,"code":22217,"language":211,"meta":23,"style":23},"#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",[25,22219,22220,22226,22236,22242,22246,22250,22255,22263,22267,22272,22287,22295,22299,22303,22308,22313,22325,22330,22341,22346,22351,22364,22368,22376,22380,22386],{"__ignoreMap":23},[28,22221,22222,22224],{"class":30,"line":31},[28,22223,2026],{"class":38},[28,22225,2029],{"class":320},[28,22227,22228,22230,22232,22234],{"class":30,"line":94},[28,22229,2034],{"class":38},[28,22231,2037],{"class":38},[28,22233,2041],{"class":2040},[28,22235,1367],{"class":34},[28,22237,22238,22240],{"class":30,"line":109},[28,22239,14771],{"class":38},[28,22241,15248],{"class":2040},[28,22243,22244],{"class":30,"line":125},[28,22245,1623],{"class":34},[28,22247,22248],{"class":30,"line":131},[28,22249,14793],{"class":38},[28,22251,22252],{"class":30,"line":1291},[28,22253,22254],{"class":105},"    \u002F\u002F类内声明\n",[28,22256,22257,22259,22261],{"class":30,"line":1297},[28,22258,11097],{"class":38},[28,22260,2459],{"class":38},[28,22262,21469],{"class":34},[28,22264,22265],{"class":30,"line":1388},[28,22266,4072],{"class":34},[28,22268,22269],{"class":30,"line":1394},[28,22270,22271],{"class":105},"\u002F\u002F类外初始化\n",[28,22273,22274,22276,22278,22281,22283,22285],{"class":30,"line":1406},[28,22275,224],{"class":38},[28,22277,15646],{"class":2040},[28,22279,22280],{"class":34},"::m_A",[28,22282,39],{"class":38},[28,22284,659],{"class":45},[28,22286,1367],{"class":34},[28,22288,22289,22291,22293],{"class":30,"line":1689},[28,22290,5441],{"class":38},[28,22292,5665],{"class":2040},[28,22294,2053],{"class":34},[28,22296,22297],{"class":30,"line":1694},[28,22298,1623],{"class":34},[28,22300,22301],{"class":30,"line":1700},[28,22302,15390],{"class":34},[28,22304,22305],{"class":30,"line":1705},[28,22306,22307],{"class":105},"    \u002F\u002F访问变量的原内存空间\n",[28,22309,22310],{"class":30,"line":1719},[28,22311,22312],{"class":105},"    \u002F\u002F100\n",[28,22314,22315,22317,22319,22321,22323],{"class":30,"line":1724},[28,22316,1628],{"class":34},[28,22318,1248],{"class":38},[28,22320,22178],{"class":34},[28,22322,1248],{"class":38},[28,22324,1270],{"class":34},[28,22326,22327],{"class":30,"line":1730},[28,22328,22329],{"class":34},"    Person p2;\n",[28,22331,22332,22335,22337,22339],{"class":30,"line":1751},[28,22333,22334],{"class":34},"    p2.m_A",[28,22336,39],{"class":38},[28,22338,1799],{"class":45},[28,22340,1367],{"class":34},[28,22342,22343],{"class":30,"line":1756},[28,22344,22345],{"class":105},"    \u002F\u002F继续访问这片空间\n",[28,22347,22348],{"class":30,"line":1770},[28,22349,22350],{"class":105},"    \u002F\u002F200\n",[28,22352,22353,22355,22357,22360,22362],{"class":30,"line":1775},[28,22354,1628],{"class":34},[28,22356,1248],{"class":38},[28,22358,22359],{"class":34},"p2.m_A",[28,22361,1248],{"class":38},[28,22363,1270],{"class":34},[28,22365,22366],{"class":30,"line":1804},[28,22367,1642],{"class":34},[28,22369,22370,22372,22374],{"class":30,"line":1809},[28,22371,224],{"class":38},[28,22373,2050],{"class":2040},[28,22375,2053],{"class":34},[28,22377,22378],{"class":30,"line":1826},[28,22379,1623],{"class":34},[28,22381,22382,22384],{"class":30,"line":1831},[28,22383,5710],{"class":2040},[28,22385,5713],{"class":34},[28,22387,22388],{"class":30,"line":1836},[28,22389,1642],{"class":34},[14,22391,22392],{},[365,22393,22394],{},"静态变量的访问",[18,22396,22398],{"className":209,"code":22397,"language":211,"meta":23,"style":23},"#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",[25,22399,22400,22406,22416,22422,22426,22430,22434,22442,22446,22451,22459,22463,22467,22481,22496,22504,22508,22513,22518,22523,22528,22540,22545,22550,22564,22581,22585,22593,22597,22603],{"__ignoreMap":23},[28,22401,22402,22404],{"class":30,"line":31},[28,22403,2026],{"class":38},[28,22405,2029],{"class":320},[28,22407,22408,22410,22412,22414],{"class":30,"line":94},[28,22409,2034],{"class":38},[28,22411,2037],{"class":38},[28,22413,2041],{"class":2040},[28,22415,1367],{"class":34},[28,22417,22418,22420],{"class":30,"line":109},[28,22419,14771],{"class":38},[28,22421,15248],{"class":2040},[28,22423,22424],{"class":30,"line":125},[28,22425,1623],{"class":34},[28,22427,22428],{"class":30,"line":131},[28,22429,14793],{"class":38},[28,22431,22432],{"class":30,"line":1291},[28,22433,22254],{"class":105},[28,22435,22436,22438,22440],{"class":30,"line":1297},[28,22437,11097],{"class":38},[28,22439,2459],{"class":38},[28,22441,21469],{"class":34},[28,22443,22444],{"class":30,"line":1388},[28,22445,15299],{"class":38},[28,22447,22448],{"class":30,"line":1394},[28,22449,22450],{"class":105},"    \u002F\u002F静态成员变量也是有访问权限的\n",[28,22452,22453,22455,22457],{"class":30,"line":1406},[28,22454,11097],{"class":38},[28,22456,2459],{"class":38},[28,22458,21476],{"class":34},[28,22460,22461],{"class":30,"line":1689},[28,22462,4072],{"class":34},[28,22464,22465],{"class":30,"line":1694},[28,22466,22271],{"class":105},[28,22468,22469,22471,22473,22475,22477,22479],{"class":30,"line":1700},[28,22470,224],{"class":38},[28,22472,15646],{"class":2040},[28,22474,22280],{"class":34},[28,22476,39],{"class":38},[28,22478,659],{"class":45},[28,22480,1367],{"class":34},[28,22482,22483,22485,22487,22490,22492,22494],{"class":30,"line":1705},[28,22484,224],{"class":38},[28,22486,15646],{"class":2040},[28,22488,22489],{"class":34},"::m_B",[28,22491,39],{"class":38},[28,22493,102],{"class":45},[28,22495,1367],{"class":34},[28,22497,22498,22500,22502],{"class":30,"line":1719},[28,22499,5441],{"class":38},[28,22501,5734],{"class":2040},[28,22503,2053],{"class":34},[28,22505,22506],{"class":30,"line":1724},[28,22507,1623],{"class":34},[28,22509,22510],{"class":30,"line":1730},[28,22511,22512],{"class":105},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[28,22514,22515],{"class":30,"line":1751},[28,22516,22517],{"class":105},"    \u002F\u002F静态成员变量有两种访问方式：\n",[28,22519,22520],{"class":30,"line":1756},[28,22521,22522],{"class":105},"    \u002F\u002F1.通过对象进行访问\n",[28,22524,22525],{"class":30,"line":1770},[28,22526,22527],{"class":34},"    Person p;  \n",[28,22529,22530,22532,22534,22536,22538],{"class":30,"line":1775},[28,22531,1628],{"class":34},[28,22533,1248],{"class":38},[28,22535,22178],{"class":34},[28,22537,1248],{"class":38},[28,22539,1270],{"class":34},[28,22541,22542],{"class":30,"line":1804},[28,22543,22544],{"class":105},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[28,22546,22547],{"class":30,"line":1809},[28,22548,22549],{"class":105},"    \u002F\u002F2.通过类名进行访问\n",[28,22551,22552,22554,22556,22558,22560,22562],{"class":30,"line":1826},[28,22553,1628],{"class":34},[28,22555,1248],{"class":38},[28,22557,19123],{"class":2040},[28,22559,22280],{"class":34},[28,22561,1248],{"class":38},[28,22563,1270],{"class":34},[28,22565,22566,22568,22570,22572,22574,22576,22578],{"class":30,"line":1831},[28,22567,1628],{"class":34},[28,22569,1248],{"class":38},[28,22571,19123],{"class":2040},[28,22573,22489],{"class":34},[28,22575,1248],{"class":38},[28,22577,1315],{"class":34},[28,22579,22580],{"class":105}," \u002F\u002F没有访问权限，报错\n",[28,22582,22583],{"class":30,"line":1836},[28,22584,1642],{"class":34},[28,22586,22587,22589,22591],{"class":30,"line":1841},[28,22588,224],{"class":38},[28,22590,2050],{"class":2040},[28,22592,2053],{"class":34},[28,22594,22595],{"class":30,"line":1855},[28,22596,1623],{"class":34},[28,22598,22599,22601],{"class":30,"line":1860},[28,22600,5779],{"class":2040},[28,22602,5713],{"class":34},[28,22604,22605],{"class":30,"line":2654},[28,22606,1642],{"class":34},[22075,22608,22610],{"id":22609},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22612,22613],{},"1.静态成员函数定义与访问",[18,22615,22617],{"className":209,"code":22616,"language":211,"meta":23,"style":23},"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",[25,22618,22619,22625,22629,22633,22638,22649,22653,22667,22671,22675,22683,22687,22692,22697,22701,22709,22714,22724],{"__ignoreMap":23},[28,22620,22621,22623],{"class":30,"line":31},[28,22622,14771],{"class":38},[28,22624,15248],{"class":2040},[28,22626,22627],{"class":30,"line":94},[28,22628,1623],{"class":34},[28,22630,22631],{"class":30,"line":109},[28,22632,14793],{"class":38},[28,22634,22635],{"class":30,"line":125},[28,22636,22637],{"class":105},"    \u002F\u002F在公共权限下定义静态成员函数\n",[28,22639,22640,22642,22645,22647],{"class":30,"line":131},[28,22641,11097],{"class":38},[28,22643,22644],{"class":38}," void",[28,22646,11462],{"class":2040},[28,22648,2053],{"class":34},[28,22650,22651],{"class":30,"line":1291},[28,22652,2107],{"class":34},[28,22654,22655,22658,22660,22663,22665],{"class":30,"line":1297},[28,22656,22657],{"class":34},"        coout",[28,22659,1248],{"class":38},[28,22661,22662],{"class":320},"\"静态成员函数的调用\"",[28,22664,1248],{"class":38},[28,22666,1270],{"class":34},[28,22668,22669],{"class":30,"line":1388},[28,22670,2264],{"class":34},[28,22672,22673],{"class":30,"line":1394},[28,22674,4072],{"class":34},[28,22676,22677,22679,22681],{"class":30,"line":1406},[28,22678,5441],{"class":38},[28,22680,5665],{"class":2040},[28,22682,2053],{"class":34},[28,22684,22685],{"class":30,"line":1689},[28,22686,1623],{"class":34},[28,22688,22689],{"class":30,"line":1694},[28,22690,22691],{"class":105},"    \u002F\u002F静态成员函数的调用方式:\n",[28,22693,22694],{"class":30,"line":1700},[28,22695,22696],{"class":105},"    \u002F\u002F1.通过对象访问\n",[28,22698,22699],{"class":30,"line":1705},[28,22700,15390],{"class":34},[28,22702,22703,22705,22707],{"class":30,"line":1719},[28,22704,15943],{"class":34},[28,22706,11628],{"class":2040},[28,22708,5713],{"class":34},[28,22710,22711],{"class":30,"line":1724},[28,22712,22713],{"class":105},"    \u002F\u002F2.通过类名访问\n",[28,22715,22716,22718,22720,22722],{"class":30,"line":1730},[28,22717,18596],{"class":2040},[28,22719,17809],{"class":34},[28,22721,11628],{"class":2040},[28,22723,5713],{"class":34},[28,22725,22726],{"class":30,"line":1751},[28,22727,1642],{"class":34},[171,22729,22730],{"start":94},[174,22731,22732],{},"静态成员函数只能访问静态成员变量",[18,22734,22736],{"className":209,"code":22735,"language":211,"meta":23,"style":23},"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",[25,22737,22738,22744,22748,22752,22756,22766,22770,22784,22789,22801,22805,22816,22826,22830,22834,22838,22848,22852,22865,22869,22873,22877,22881,22895,22903,22907,22911,22915,22919,22927,22931,22941,22946,22950,22958,22962,22968],{"__ignoreMap":23},[28,22739,22740,22742],{"class":30,"line":31},[28,22741,14771],{"class":38},[28,22743,15248],{"class":2040},[28,22745,22746],{"class":30,"line":94},[28,22747,1623],{"class":34},[28,22749,22750],{"class":30,"line":109},[28,22751,14793],{"class":38},[28,22753,22754],{"class":30,"line":125},[28,22755,22637],{"class":105},[28,22757,22758,22760,22762,22764],{"class":30,"line":131},[28,22759,11097],{"class":38},[28,22761,22644],{"class":38},[28,22763,11462],{"class":2040},[28,22765,2053],{"class":34},[28,22767,22768],{"class":30,"line":1291},[28,22769,2107],{"class":34},[28,22771,22772,22775,22777,22779,22781],{"class":30,"line":1297},[28,22773,22774],{"class":34},"        m_A",[28,22776,39],{"class":38},[28,22778,525],{"class":45},[28,22780,274],{"class":34},[28,22782,22783],{"class":105}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[28,22785,22786],{"class":30,"line":1388},[28,22787,22788],{"class":105},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[28,22790,22791,22793,22795,22797,22799],{"class":30,"line":1394},[28,22792,22657],{"class":34},[28,22794,1248],{"class":38},[28,22796,22662],{"class":320},[28,22798,1248],{"class":38},[28,22800,1270],{"class":34},[28,22802,22803],{"class":30,"line":1406},[28,22804,2264],{"class":34},[28,22806,22807,22809,22811,22813],{"class":30,"line":1689},[28,22808,11097],{"class":38},[28,22810,2459],{"class":38},[28,22812,15525],{"class":34},[28,22814,22815],{"class":105}," \u002F\u002F静态成员变量\n",[28,22817,22818,22820,22823],{"class":30,"line":1694},[28,22819,2062],{"class":38},[28,22821,22822],{"class":34}," m_B;",[28,22824,22825],{"class":105}," \u002F\u002F非静态成员变量\n",[28,22827,22828],{"class":30,"line":1700},[28,22829,2477],{"emptyLinePlaceholder":144},[28,22831,22832],{"class":30,"line":1705},[28,22833,15299],{"class":38},[28,22835,22836],{"class":30,"line":1719},[28,22837,22450],{"class":105},[28,22839,22840,22842,22844,22846],{"class":30,"line":1724},[28,22841,11097],{"class":38},[28,22843,22644],{"class":38},[28,22845,13695],{"class":2040},[28,22847,2053],{"class":34},[28,22849,22850],{"class":30,"line":1730},[28,22851,2107],{"class":34},[28,22853,22854,22856,22858,22861,22863],{"class":30,"line":1751},[28,22855,3528],{"class":34},[28,22857,1248],{"class":38},[28,22859,22860],{"class":320},"\"这是私有权限下的静态函数调用\"",[28,22862,1248],{"class":38},[28,22864,1270],{"class":34},[28,22866,22867],{"class":30,"line":1756},[28,22868,2264],{"class":34},[28,22870,22871],{"class":30,"line":1770},[28,22872,2477],{"emptyLinePlaceholder":144},[28,22874,22875],{"class":30,"line":1775},[28,22876,2477],{"emptyLinePlaceholder":144},[28,22878,22879],{"class":30,"line":1804},[28,22880,4072],{"class":34},[28,22882,22883,22885,22887,22889,22891,22893],{"class":30,"line":1809},[28,22884,224],{"class":38},[28,22886,15646],{"class":2040},[28,22888,22280],{"class":34},[28,22890,39],{"class":38},[28,22892,407],{"class":45},[28,22894,1367],{"class":34},[28,22896,22897,22899,22901],{"class":30,"line":1826},[28,22898,5441],{"class":38},[28,22900,5665],{"class":2040},[28,22902,2053],{"class":34},[28,22904,22905],{"class":30,"line":1831},[28,22906,1623],{"class":34},[28,22908,22909],{"class":30,"line":1836},[28,22910,22691],{"class":105},[28,22912,22913],{"class":30,"line":1841},[28,22914,22696],{"class":105},[28,22916,22917],{"class":30,"line":1855},[28,22918,15390],{"class":34},[28,22920,22921,22923,22925],{"class":30,"line":1860},[28,22922,15943],{"class":34},[28,22924,11628],{"class":2040},[28,22926,5713],{"class":34},[28,22928,22929],{"class":30,"line":2654},[28,22930,22713],{"class":105},[28,22932,22933,22935,22937,22939],{"class":30,"line":2668},[28,22934,18596],{"class":2040},[28,22936,17809],{"class":34},[28,22938,11628],{"class":2040},[28,22940,5713],{"class":34},[28,22942,22943],{"class":30,"line":2676},[28,22944,22945],{"class":105},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[28,22947,22948],{"class":30,"line":2681},[28,22949,1642],{"class":34},[28,22951,22952,22954,22956],{"class":30,"line":2687},[28,22953,224],{"class":38},[28,22955,2050],{"class":2040},[28,22957,2053],{"class":34},[28,22959,22960],{"class":30,"line":2693},[28,22961,1623],{"class":34},[28,22963,22964,22966],{"class":30,"line":2698},[28,22965,5710],{"class":2040},[28,22967,5713],{"class":34},[28,22969,22970],{"class":30,"line":8025},[28,22971,1642],{"class":34},[188,22973,22975],{"id":22974},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22075,22977,22979],{"id":22978},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22981,22982],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22984,22985],{},"只有非静态成员变量才属于类的对象上",[22987,22988,22990],"h5",{"id":22989},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[18,22992,22994],{"className":209,"code":22993,"language":211,"meta":23,"style":23},"#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",[25,22995,22996,23003,23013,23019,23023,23027,23031,23039,23043,23047,23070,23074,23082,23086,23092],{"__ignoreMap":23},[28,22997,22998,23000],{"class":30,"line":31},[28,22999,2026],{"class":38},[28,23001,23002],{"class":320},"\u003Ciostraem>\n",[28,23004,23005,23007,23009,23011],{"class":30,"line":94},[28,23006,2034],{"class":38},[28,23008,2037],{"class":38},[28,23010,2041],{"class":2040},[28,23012,1367],{"class":34},[28,23014,23015,23017],{"class":30,"line":109},[28,23016,14771],{"class":38},[28,23018,15248],{"class":2040},[28,23020,23021],{"class":30,"line":125},[28,23022,1623],{"class":34},[28,23024,23025],{"class":30,"line":131},[28,23026,2477],{"emptyLinePlaceholder":144},[28,23028,23029],{"class":30,"line":1291},[28,23030,4072],{"class":34},[28,23032,23033,23035,23037],{"class":30,"line":1297},[28,23034,5441],{"class":38},[28,23036,5665],{"class":2040},[28,23038,2053],{"class":34},[28,23040,23041],{"class":30,"line":1388},[28,23042,1623],{"class":34},[28,23044,23045],{"class":30,"line":1394},[28,23046,15390],{"class":34},[28,23048,23049,23051,23053,23056,23058,23061,23063,23065,23067],{"class":30,"line":1406},[28,23050,1628],{"class":34},[28,23052,1248],{"class":38},[28,23054,23055],{"class":320},"\"size of p=\"",[28,23057,1248],{"class":38},[28,23059,23060],{"class":2040},"sizeoif",[28,23062,6616],{"class":34},[28,23064,1248],{"class":38},[28,23066,1315],{"class":34},[28,23068,23069],{"class":105}," \u002F\u002F查看这个空类的占用的内存空间\n",[28,23071,23072],{"class":30,"line":1689},[28,23073,1642],{"class":34},[28,23075,23076,23078,23080],{"class":30,"line":1694},[28,23077,224],{"class":38},[28,23079,2050],{"class":2040},[28,23081,2053],{"class":34},[28,23083,23084],{"class":30,"line":1700},[28,23085,1623],{"class":34},[28,23087,23088,23090],{"class":30,"line":1705},[28,23089,5710],{"class":2040},[28,23091,5713],{"class":34},[28,23093,23094],{"class":30,"line":1719},[28,23095,1642],{"class":34},[14,23097,23098],{},"输出结果为：size of p=1",[14,23100,23101],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23103,23104],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22987,23106,23108],{"id":23107},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[18,23110,23112],{"className":209,"code":23111,"language":211,"meta":23,"style":23},"#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",[25,23113,23114,23120,23130,23138,23142,23151,23155,23163,23167,23171,23190,23194,23198,23206,23210,23216],{"__ignoreMap":23},[28,23115,23116,23118],{"class":30,"line":31},[28,23117,2026],{"class":38},[28,23119,2029],{"class":320},[28,23121,23122,23124,23126,23128],{"class":30,"line":94},[28,23123,2034],{"class":38},[28,23125,2037],{"class":38},[28,23127,2041],{"class":2040},[28,23129,1367],{"class":34},[28,23131,23132,23134,23136],{"class":30,"line":109},[28,23133,14771],{"class":38},[28,23135,15646],{"class":2040},[28,23137,2751],{"class":34},[28,23139,23140],{"class":30,"line":125},[28,23141,1623],{"class":34},[28,23143,23144,23146,23148],{"class":30,"line":131},[28,23145,2062],{"class":38},[28,23147,15525],{"class":34},[28,23149,23150],{"class":105},"\u002F\u002F非静态成员变量\n",[28,23152,23153],{"class":30,"line":1291},[28,23154,4072],{"class":34},[28,23156,23157,23159,23161],{"class":30,"line":1297},[28,23158,5441],{"class":38},[28,23160,5665],{"class":2040},[28,23162,2053],{"class":34},[28,23164,23165],{"class":30,"line":1388},[28,23166,1623],{"class":34},[28,23168,23169],{"class":30,"line":1394},[28,23170,15390],{"class":34},[28,23172,23173,23175,23177,23179,23181,23183,23185,23187],{"class":30,"line":1406},[28,23174,1628],{"class":34},[28,23176,1248],{"class":38},[28,23178,23055],{"class":320},[28,23180,1449],{"class":38},[28,23182,6616],{"class":34},[28,23184,1248],{"class":38},[28,23186,1315],{"class":34},[28,23188,23189],{"class":105}," \u002F\u002F查看不是空对象时占用多少内存\n",[28,23191,23192],{"class":30,"line":1689},[28,23193,2477],{"emptyLinePlaceholder":144},[28,23195,23196],{"class":30,"line":1694},[28,23197,1642],{"class":34},[28,23199,23200,23202,23204],{"class":30,"line":1700},[28,23201,224],{"class":38},[28,23203,2050],{"class":2040},[28,23205,2053],{"class":34},[28,23207,23208],{"class":30,"line":1705},[28,23209,1623],{"class":34},[28,23211,23212,23214],{"class":30,"line":1719},[28,23213,5710],{"class":2040},[28,23215,5713],{"class":34},[28,23217,23218],{"class":30,"line":1724},[28,23219,1642],{"class":34},[14,23221,23222],{},"输出结果：size of p=4",[14,23224,23225],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[171,23227,23228],{},[174,23229,23230],{},"如果加上非静态成员变量，Person类修改如下",[18,23232,23234],{"className":209,"code":23233,"language":211,"meta":23,"style":23},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[25,23235,23236,23242,23246,23252,23260,23264,23269],{"__ignoreMap":23},[28,23237,23238,23240],{"class":30,"line":31},[28,23239,14771],{"class":38},[28,23241,15248],{"class":2040},[28,23243,23244],{"class":30,"line":94},[28,23245,1623],{"class":34},[28,23247,23248,23250],{"class":30,"line":109},[28,23249,2062],{"class":38},[28,23251,21469],{"class":34},[28,23253,23254,23256,23258],{"class":30,"line":125},[28,23255,11097],{"class":38},[28,23257,2459],{"class":38},[28,23259,21476],{"class":34},[28,23261,23262],{"class":30,"line":131},[28,23263,4072],{"class":34},[28,23265,23266],{"class":30,"line":1291},[28,23267,23268],{"class":105},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[28,23270,23271,23273,23275,23277,23279,23281],{"class":30,"line":1297},[28,23272,224],{"class":38},[28,23274,15646],{"class":2040},[28,23276,22489],{"class":34},[28,23278,39],{"class":38},[28,23280,407],{"class":45},[28,23282,1367],{"class":34},[14,23284,23285],{},"输出结果：4",[14,23287,23288],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[171,23290,23291],{"start":94},[174,23292,23293],{},"加上非静态成员函数",[18,23295,23297],{"className":209,"code":23296,"language":211,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[25,23298,23299,23306,23310,23316,23324,23328,23332,23336],{"__ignoreMap":23},[28,23300,23301,23303],{"class":30,"line":31},[28,23302,14771],{"class":38},[28,23304,23305],{"class":2040},"  Person\n",[28,23307,23308],{"class":30,"line":94},[28,23309,1623],{"class":34},[28,23311,23312,23314],{"class":30,"line":109},[28,23313,2062],{"class":38},[28,23315,21469],{"class":34},[28,23317,23318,23320,23322],{"class":30,"line":125},[28,23319,14986],{"class":38},[28,23321,11462],{"class":2040},[28,23323,2053],{"class":34},[28,23325,23326],{"class":30,"line":131},[28,23327,2107],{"class":34},[28,23329,23330],{"class":30,"line":1291},[28,23331,2477],{"emptyLinePlaceholder":144},[28,23333,23334],{"class":30,"line":1297},[28,23335,2264],{"class":34},[28,23337,23338],{"class":30,"line":1388},[28,23339,4072],{"class":34},[14,23341,23342],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[171,23344,23345],{"start":109},[174,23346,23347],{},"加上静态成员函数",[18,23349,23351],{"className":209,"code":23350,"language":211,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[25,23352,23353,23359,23363,23369,23377,23381,23385,23389,23400,23404,23408,23412],{"__ignoreMap":23},[28,23354,23355,23357],{"class":30,"line":31},[28,23356,14771],{"class":38},[28,23358,23305],{"class":2040},[28,23360,23361],{"class":30,"line":94},[28,23362,1623],{"class":34},[28,23364,23365,23367],{"class":30,"line":109},[28,23366,2062],{"class":38},[28,23368,21469],{"class":34},[28,23370,23371,23373,23375],{"class":30,"line":125},[28,23372,14986],{"class":38},[28,23374,11462],{"class":2040},[28,23376,2053],{"class":34},[28,23378,23379],{"class":30,"line":131},[28,23380,2107],{"class":34},[28,23382,23383],{"class":30,"line":1291},[28,23384,2477],{"emptyLinePlaceholder":144},[28,23386,23387],{"class":30,"line":1297},[28,23388,2264],{"class":34},[28,23390,23391,23393,23395,23398],{"class":30,"line":1388},[28,23392,11097],{"class":38},[28,23394,22644],{"class":38},[28,23396,23397],{"class":2040}," func1",[28,23399,2053],{"class":34},[28,23401,23402],{"class":30,"line":1394},[28,23403,2107],{"class":34},[28,23405,23406],{"class":30,"line":1406},[28,23407,2477],{"emptyLinePlaceholder":144},[28,23409,23410],{"class":30,"line":1689},[28,23411,2264],{"class":34},[28,23413,23414],{"class":30,"line":1694},[28,23415,4072],{"class":34},[14,23417,23285],{},[14,23419,23420],{},"解释：静态成员函数也不属于类上",[136,23422,7751],{},{"title":23,"searchDepth":94,"depth":94,"links":23424},[23425,23431],{"id":14722,"depth":94,"text":14723,"children":23426},[23427,23428,23429,23430],{"id":14726,"depth":109,"text":14727},{"id":15451,"depth":109,"text":15452},{"id":15623,"depth":109,"text":15624},{"id":16082,"depth":109,"text":16083},{"id":18454,"depth":94,"text":18455,"children":23432},[23433,23434,23435,23436,23437,23438,23439,23440,23441],{"id":18466,"depth":109,"text":18467},{"id":18759,"depth":109,"text":18760},{"id":19250,"depth":109,"text":19251},{"id":20347,"depth":109,"text":20348},{"id":20770,"depth":109,"text":20771},{"id":21249,"depth":109,"text":21250},{"id":21624,"depth":109,"text":21625},{"id":22037,"depth":109,"text":22038},{"id":22974,"depth":109,"text":22975},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14687,"description":23442},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23449,"title":211,"body":23450,"description":141,"extension":142,"meta":23454,"navigation":144,"path":23456,"seo":23457,"stem":23458,"__hash__":23459},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23451,"toc":23452},[],{"title":23,"searchDepth":94,"depth":94,"links":23453},[],{"category":23455},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":211,"description":141},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23461,"title":23462,"body":23463,"description":23,"extension":142,"meta":24054,"navigation":144,"path":24055,"seo":24056,"stem":24057,"__hash__":24058},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23464,"toc":24036},[23465,23468,23472,23475,23478,23481,23499,23504,23507,23510,23513,23516,23521,23524,23529,23532,23535,23539,23542,23545,23551,23554,23572,23576,23580,23583,23588,23591,23595,23598,23611,23614,23618,23621,23624,23627,23652,23655,23664,23675,23690,23722,23726,23733,23741,23745,23748,23751,23756,23760,23763,23766,23771,23774,23778,23781,23784,23789,23792,23796,23801,23805,23872,23876,23879,23882,23885,23888,23891,23897,23918,23921,23935,23944,23948,23951,23954,23959,23962,23967,23972,23975,23978,23983,23988,23991,23996,24001,24004,24009,24014,24017,24020,24025,24028,24033],[10,23466,23462],{"id":23467},"_1强化学习基本认识",[159,23469,23471],{"id":23470},"_11什么是强化学习","1.1.什么是强化学习",[14,23473,23474],{},"强化学习有两部分组成：智能体和环境；",[14,23476,23477],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23479,23480],{},"强化学习与监督学习的区别:",[171,23482,23483,23486,23489,23492],{},[174,23484,23485],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[174,23487,23488],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[174,23490,23491],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[174,23493,23494,23495,23498],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[365,23496,23497],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23500,23501],{},[1539,23502],{"alt":23,"src":23503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23505,23506],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23508,23509],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23511,23512],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23514,23515],{},"获取奖励",[14,23517,23518],{},[1539,23519],{"alt":23,"src":23520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23522,23523],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23525,23526],{},[1539,23527],{"alt":23,"src":23528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23530,23531],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23533,23534],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[159,23536,23538],{"id":23537},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23540,23541],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23543,23544],{},"具身智能中的应用",[14,23546,23547,23550],{},[365,23548,23549],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23552,23553],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23555,23556,23557,23560,23561,23564,23565,23568,23569],{},"机器人是",[365,23558,23559],{},"躯体","，深度学习是",[365,23562,23563],{},"神经元****网络","，VLA是",[365,23566,23567],{},"通用的行为逻辑","，而强化学习是",[365,23570,23571],{},"教练",[159,23573,23575],{"id":23574},"_13序列决策","1.3.序列决策",[188,23577,23579],{"id":23578},"_131智能体与环境","1.3.1.智能体与环境",[14,23581,23582],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23584,23585],{},[1539,23586],{"alt":23,"src":23587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23589,23590],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[188,23592,23594],{"id":23593},"_132奖励","1.3.2.奖励",[14,23596,23597],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23599,23600,23601,23610],{},"取某个策略的表现如何。强化学习的目的就是",[365,23602,23603,23604,23609],{},"最大化",[365,23605,23606],{},[365,23607,23608],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23612,23613],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[188,23615,23617],{"id":23616},"_133序列决策","1.3.3.序列决策",[14,23619,23620],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23622,23623],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23625,23626],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23628,23629,23633,23634,23636,23637,23639,23640,23642,23643,13872,23646,13872,23649],{},[23630,23631,23632],"em",{},"Ht"," = ",[23630,23635,806],{},"1*, a",[23630,23638,46],{},", r",[23630,23641,46],{},", . . . ,* ",[23630,23644,23645],{},"ot",[23630,23647,23648],{},", at ,",[23630,23650,23651],{},"rt",[14,23653,23654],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23656,23657,23633,23660,1735,23662,642],{},[23630,23658,23659],{},"st",[23630,23661,271],{},[23630,23663,23632],{},[14,23665,23666,23667,23670,23671,23674],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[365,23668,23669],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[365,23672,23673],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23676,23677,23678,23681,23682,23685,23686,23689],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[365,23679,23680],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[365,23683,23684],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23630,23687,23688],{},"S, A, T, R, Ω, O, γ",")。",[14,23691,23692,23693,23695,23696,23698,23699,221,23701,23704,23705,23707,23708,221,23711,23714,23715,23717,23718,23721],{},"其中 ",[23630,23694,899],{}," 表示状态空间，为隐变量，",[23630,23697,447],{}," 为动作空间，",[23630,23700,923],{},[23630,23702,23703],{},"s ′ |s, a",") 为状态转移概率，",[23630,23706,874],{}," 为奖励函数，",[23630,23709,23710],{},"Ω",[23630,23712,23713],{},"o|s, a",") 为观测概率，",[23630,23716,800],{}," 为观测空间，",[23630,23719,23720],{},"γ"," 为折扣因子。",[159,23723,23725],{"id":23724},"_14动作空间","1.4.动作空间",[14,23727,23728,23729,23732],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[365,23730,23731],{},"动作空间"," ，动作空间分为:",[171,23734,23735,23738],{},[174,23736,23737],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[174,23739,23740],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[159,23742,23744],{"id":23743},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23746,23747],{},"由策略、价值函数、模型三部分组成",[14,23749,23750],{},"这三者组成马尔可夫决策过程",[14,23752,23753],{},[1539,23754],{"alt":23,"src":23755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[188,23757,23759],{"id":23758},"_151策略","1.5.1.策略",[14,23761,23762],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23764,23765],{},"策略可分为两种：",[14,23767,23768],{},[1539,23769],{"alt":23,"src":23770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23772,23773],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[188,23775,23777],{"id":23776},"_152价值函数","1.5.2.价值函数",[14,23779,23780],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23782,23783],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23785,23786],{},[1539,23787],{"alt":23,"src":23788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23790,23791],{},"进入某个状态采取的最优动作可以通过Q函数得到",[188,23793,23795],{"id":23794},"_153模型","1.5.3.模型",[14,23797,23798],{},[1539,23799],{"alt":23,"src":23800},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[159,23802,23804],{"id":23803},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[353,23806,23807,23818],{},[356,23808,23809],{},[359,23810,23811,23815],{},[362,23812,23814],{"align":23813},"left","类型",[362,23816,23817],{"align":23813},"特点",[400,23819,23820,23830,23840,23850,23862],{},[359,23821,23822,23827],{},[405,23823,23824],{"align":23813},[365,23825,23826],{},"基于价值的智能体",[405,23828,23829],{"align":23813},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[359,23831,23832,23837],{},[405,23833,23834],{"align":23813},[365,23835,23836],{},"基于策略的智能体",[405,23838,23839],{"align":23813},"直接学习策略，没有学习价值函数",[359,23841,23842,23847],{},[405,23843,23844],{"align":23813},[365,23845,23846],{},"演员-评论员智能体",[405,23848,23849],{"align":23813},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[359,23851,23852,23857],{},[405,23853,23854],{"align":23813},[365,23855,23856],{},"有模型强化学习智能体",[405,23858,23859],{"align":23813},[1539,23860],{"alt":23,"src":23861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[359,23863,23864,23869],{},[405,23865,23866],{"align":23813},[365,23867,23868],{},"免模型强化学习智能体",[405,23870,23871],{"align":23813},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[159,23873,23875],{"id":23874},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23877,23878],{},"学习和规划是序列决策的两个基本问题",[14,23880,23881],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23883,23884],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23886,23887],{},"强化学习用到的库：Gym",[14,23889,23890],{},"Gym可以检验强化学习算法的优劣",[14,23892,23893,23896],{},[365,23894,23895],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[18,23898,23902],{"className":23899,"code":23900,"language":23901,"meta":23,"style":23},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[25,23903,23904],{"__ignoreMap":23},[28,23905,23906,23909,23912,23915],{"class":30,"line":31},[28,23907,23908],{"class":2040},"pip",[28,23910,23911],{"class":320}," install",[28,23913,23914],{"class":320}," gym==",[28,23916,23917],{"class":45},"0.25.2\n",[14,23919,23920],{},"显示图形界面需要",[18,23922,23924],{"className":23899,"code":23923,"language":23901,"meta":23,"style":23},"pip install pygame\n",[25,23925,23926],{"__ignoreMap":23},[28,23927,23928,23930,23932],{"class":30,"line":31},[28,23929,23908],{"class":2040},[28,23931,23911],{"class":320},[28,23933,23934],{"class":320}," pygame\n",[14,23936,23937,23938],{},"有关Gym库的相关文档介绍：",[35,23939,23943],{"href":23940,"rel":23941},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23942],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[159,23945,23947],{"id":23946},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23949,23950],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23952,23953],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23955,23956],{},[1539,23957],{"alt":23,"src":23958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23960,23961],{},"折扣率需要自己来设定",[14,23963,23964],{},[1539,23965],{"alt":23,"src":23966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[171,23968,23969],{},[174,23970,23971],{},"状态转移函数：",[14,23973,23974],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23976,23977],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23979,23980],{},[1539,23981],{"alt":23,"src":23982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[171,23984,23985],{"start":94},[174,23986,23987],{},"动作价值函数：",[14,23989,23990],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23992,23993],{},[1539,23994],{"alt":23,"src":23995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[171,23997,23998],{"start":109},[174,23999,24000],{},"最优动作价值函数：",[14,24002,24003],{},"这个函数是对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,24005,24006],{},[1539,24007],{"alt":23,"src":24008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[171,24010,24011],{"start":125},[174,24012,24013],{},"状态价值函数:",[14,24015,24016],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24018,24019],{},"它衡量的是“一个具体动作”的长期价值",[14,24021,24022],{},[1539,24023],{"alt":23,"src":24024},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24026,24027],{},"几个价值函数之间的比较：",[14,24029,24030],{},[1539,24031],{"alt":23,"src":24032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[136,24034,24035],{},"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":23,"searchDepth":94,"depth":94,"links":24037},[24038,24039,24040,24045,24046,24051,24052,24053],{"id":23470,"depth":94,"text":23471},{"id":23537,"depth":94,"text":23538},{"id":23574,"depth":94,"text":23575,"children":24041},[24042,24043,24044],{"id":23578,"depth":109,"text":23579},{"id":23593,"depth":109,"text":23594},{"id":23616,"depth":109,"text":23617},{"id":23724,"depth":94,"text":23725},{"id":23743,"depth":94,"text":23744,"children":24047},[24048,24049,24050],{"id":23758,"depth":109,"text":23759},{"id":23776,"depth":109,"text":23777},{"id":23794,"depth":109,"text":23795},{"id":23803,"depth":94,"text":23804},{"id":23874,"depth":94,"text":23875},{"id":23946,"depth":94,"text":23947},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23462,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24060,"title":24061,"body":24062,"description":24069,"extension":142,"meta":24080,"navigation":144,"path":24081,"seo":24082,"stem":24083,"__hash__":24084},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24063,"toc":24078},[24064,24067,24070,24075],[10,24065,24061],{"id":24066},"_2马尔可夫决策过程",[14,24068,24069],{},"这是强化学习的基本框架",[14,24071,24072],{},[1539,24073],{"alt":23,"src":24074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24076,24077],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":23,"searchDepth":94,"depth":94,"links":24079},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24061,"description":24069},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24086,"title":24087,"body":24088,"description":23,"extension":142,"meta":24204,"navigation":144,"path":24205,"seo":24206,"stem":24207,"__hash__":24208},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24089,"toc":24199},[24090,24093,24097,24100,24105,24110,24113,24118,24121,24126,24129,24133,24138,24141,24146,24151,24156,24159,24163,24168,24171,24176,24181,24186,24191,24194],[10,24091,24087],{"id":24092},"_3动作价值函数",[159,24094,24096],{"id":24095},"_31dqn","3.1.DQN",[14,24098,24099],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24101,24102],{},[1539,24103],{"alt":23,"src":24104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24106,24107],{},[1539,24108],{"alt":23,"src":24109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24111,24112],{},"DQN算法的描述：",[14,24114,24115],{},[1539,24116],{"alt":23,"src":24117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24119,24120],{},"这里的Dense指的是全连接层",[14,24122,24123],{},[1539,24124],{"alt":23,"src":24125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24127,24128],{},"当前观测的状态为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算法",[159,24130,24132],{"id":24131},"_32dqn的举例","3.2.DQN的举例",[14,24134,24135],{},[1539,24136],{"alt":23,"src":24137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24139,24140],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24142,24143],{},[1539,24144],{"alt":23,"src":24145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24147,24148],{},[1539,24149],{"alt":23,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24152,24153],{},[1539,24154],{"alt":23,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24157,24158],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[159,24160,24162],{"id":24161},"_33td算法","3.3.TD算法",[14,24164,24165],{},[1539,24166],{"alt":23,"src":24167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24169,24170],{},"强化学习TD算法公式的粗略解释：",[14,24172,24173],{},[1539,24174],{"alt":23,"src":24175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24177,24178],{},[1539,24179],{"alt":23,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24182,24183],{},[1539,24184],{"alt":23,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24187,24188],{},[1539,24189],{"alt":23,"src":24190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24192,24193],{},"TD算法总结：",[14,24195,24196],{},[1539,24197],{"alt":23,"src":24198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":23,"searchDepth":94,"depth":94,"links":24200},[24201,24202,24203],{"id":24095,"depth":94,"text":24096},{"id":24131,"depth":94,"text":24132},{"id":24161,"depth":94,"text":24162},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24087,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24210,"title":24211,"body":24212,"description":23,"extension":142,"meta":24445,"navigation":144,"path":24446,"seo":24447,"stem":24448,"__hash__":24449},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24213,"toc":24441},[24214,24217,24221,24224,24227,24232,24237,24240,24245,24250,24253,24258,24261,24266,24269,24274,24277,24282,24285,24290,24295,24298,24303,24306,24309,24314,24317,24322,24327,24331,24334,24337,24342,24347,24350,24355,24360,24363,24368,24371,24374,24379,24382,24387,24390,24395,24400,24403,24408,24413,24416,24421,24424,24429,24432],[10,24215,24211],{"id":24216},"_4策略学习",[159,24218,24220],{"id":24219},"_41概念描述","4.1.概念描述",[14,24222,24223],{},"用神经网络（策略网络）近似策略函数",[14,24225,24226],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24228,24229],{},[1539,24230],{"alt":23,"src":24231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24233,24234],{},[1539,24235],{"alt":23,"src":24236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24238,24239],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24241,24242],{},[1539,24243],{"alt":23,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24246,24247],{},[1539,24248],{"alt":23,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24251,24252],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24254,24255],{},[1539,24256],{"alt":23,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24259,24260],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24262,24263],{},[1539,24264],{"alt":23,"src":24265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24267,24268],{},"改进theta要用到策略梯度算法",[14,24270,24271],{},[1539,24272],{"alt":23,"src":24273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24275,24276],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24278,24279],{},[1539,24280],{"alt":23,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24283,24284],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24286,24287],{},[1539,24288],{"alt":23,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24291,24292],{},[1539,24293],{"alt":23,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24296,24297],{},"梯度公式总结：",[14,24299,24300],{},[1539,24301],{"alt":23,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24304,24305],{},"两个公式的分别应用场景：",[14,24307,24308],{},"对于离散的动作：",[14,24310,24311],{},[1539,24312],{"alt":23,"src":24313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24315,24316],{},"对于连续的动作：",[14,24318,24319],{},[1539,24320],{"alt":23,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24323,24324],{},[1539,24325],{"alt":23,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[159,24328,24330],{"id":24329},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24332,24333],{},"使用蒙特卡洛来近似计算策略梯度",[14,24335,24336],{},"蒙特卡洛法的解释如下：",[14,24338,24339],{},[1539,24340],{"alt":23,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24343,24344],{},[1539,24345],{"alt":23,"src":24346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24348,24349],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[171,24351,24352],{},[174,24353,24354],{},"方法一：reinforce算法",[14,24356,24357],{},[1539,24358],{"alt":23,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24361,24362],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[171,24364,24365],{"start":94},[174,24366,24367],{},"方法二：actor-critic算法",[14,24369,24370],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24372,24373],{},"两个网络的构建：",[14,24375,24376],{},[1539,24377],{"alt":23,"src":24378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24380,24381],{},"actor网路：",[14,24383,24384],{},[1539,24385],{"alt":23,"src":24386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24388,24389],{},"critic网络",[14,24391,24392],{},[1539,24393],{"alt":23,"src":24394},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[171,24396,24397],{"start":109},[174,24398,24399],{},"网络的训练",[14,24401,24402],{},"网络描述",[14,24404,24405],{},[1539,24406],{"alt":23,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24409,24410],{},[1539,24411],{"alt":23,"src":24412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24414,24415],{},"TD算法更新梯度：",[14,24417,24418],{},[1539,24419],{"alt":23,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24422,24423],{},"策略网络更新梯度：",[14,24425,24426],{},[1539,24427],{"alt":23,"src":24428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24430,24431],{},"训练整个流程的具体描述：",[14,24433,24434,24437,24438],{},[1539,24435],{"alt":23,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1539,24439],{"alt":23,"src":24440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":23,"searchDepth":94,"depth":94,"links":24442},[24443,24444],{"id":24219,"depth":94,"text":24220},{"id":24329,"depth":94,"text":24330},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24211,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24451,"title":24452,"body":24453,"description":24460,"extension":142,"meta":24510,"navigation":144,"path":24511,"seo":24512,"stem":24513,"__hash__":24514},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24454,"toc":24506},[24455,24458,24461,24465,24468,24473,24477,24480,24485,24488,24493,24498,24501],[10,24456,24452],{"id":24457},"_5alphago算法",[14,24459,24460],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[159,24462,24464],{"id":24463},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24466,24467],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24469,24470],{},[1539,24471],{"alt":23,"src":24472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[159,24474,24476],{"id":24475},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24478,24479],{},"采用强化学习的方式训练策略网络",[14,24481,24482],{},[1539,24483],{"alt":23,"src":24484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24486,24487],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24489,24490],{},[1539,24491],{"alt":23,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24494,24495],{},[1539,24496],{"alt":23,"src":24497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24499,24500],{},"强化学习训练策略网络的总结：",[14,24502,24503],{},[1539,24504],{"alt":23,"src":24505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":23,"searchDepth":94,"depth":94,"links":24507},[24508,24509],{"id":24463,"depth":94,"text":24464},{"id":24475,"depth":94,"text":24476},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24452,"description":24460},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24516,"title":24517,"body":24518,"description":24525,"extension":142,"meta":24528,"navigation":144,"path":24529,"seo":24530,"stem":24531,"__hash__":24532},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24519,"toc":24526},[24520,24523],[10,24521,24517],{"id":24522},"_6价值网络",[14,24524,24525],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":23,"searchDepth":94,"depth":94,"links":24527},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24517,"description":24525},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24534,"title":24535,"body":24536,"description":24540,"extension":142,"meta":24541,"navigation":144,"path":24542,"seo":24543,"stem":24544,"__hash__":24545},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24537,"toc":24538},[],{"title":23,"searchDepth":94,"depth":94,"links":24539},[],"记录自己的强化学习笔记。",{"category":23455},"\u002Fwiki\u002F2025-12-04",{"title":24535,"description":24540},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24547,"title":24548,"body":24549,"description":141,"extension":142,"meta":24588,"navigation":144,"path":24589,"seo":24590,"stem":24591,"__hash__":24592},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24550,"toc":24586},[24551,24554,24557,24563,24566,24572,24575,24580,24583],[10,24552,24548],{"id":24553},"_1-项目概览与官方资源",[14,24555,24556],{},"官方文档：",[14,24558,24559],{},[35,24560,24561],{"href":24561,"rel":24562},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23942],[14,24564,24565],{},"官方代码仓库：",[14,24567,24568],{},[35,24569,24570],{"href":24570,"rel":24571},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23942],[14,24573,24574],{},"复现大体流程：",[14,24576,24577],{},[1539,24578],{"alt":23,"src":24579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24581,24582],{},"本教程的目标是打通这条链路：",[14,24584,24585],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":23,"searchDepth":94,"depth":94,"links":24587},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24548,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24594,"title":24595,"body":24596,"description":141,"extension":142,"meta":24712,"navigation":144,"path":24713,"seo":24714,"stem":24715,"__hash__":24716},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24597,"toc":24707},[24598,24601,24605,24608,24615,24619,24622,24631,24641,24645,24675,24678,24704],[10,24599,24595],{"id":24600},"_2-环境准备与设备连接",[159,24602,24604],{"id":24603},"_21-系统与环境","2.1 系统与环境",[14,24606,24607],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24609,24610,24611,24614],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[25,24612,24613],{},"lerobot"," 依赖。",[159,24616,24618],{"id":24617},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24620,24621],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[18,24623,24625],{"className":23899,"code":24624,"language":23901,"meta":23,"style":23},"lerobot-find-out\n",[25,24626,24627],{"__ignoreMap":23},[28,24628,24629],{"class":30,"line":31},[28,24630,24624],{"class":2040},[14,24632,24633,24634,428,24637,24640],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[25,24635,24636],{},"\u002Fdev\u002FttyACM0",[25,24638,24639],{},"\u002Fdev\u002FttyACM1","）。",[159,24642,24644],{"id":24643},"_23-串口授权","2.3 串口授权",[18,24646,24648],{"className":23899,"code":24647,"language":23901,"meta":23,"style":23},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[25,24649,24650,24664],{"__ignoreMap":23},[28,24651,24652,24655,24658,24661],{"class":30,"line":31},[28,24653,24654],{"class":2040},"sudo",[28,24656,24657],{"class":320}," chmod",[28,24659,24660],{"class":45}," 666",[28,24662,24663],{"class":320}," \u002Fdev\u002FttyACM0\n",[28,24665,24666,24668,24670,24672],{"class":30,"line":94},[28,24667,24654],{"class":2040},[28,24669,24657],{"class":320},[28,24671,24660],{"class":45},[28,24673,24674],{"class":320}," \u002Fdev\u002FttyACM1\n",[14,24676,24677],{},"说明：",[1211,24679,24680,24685,24691,24701],{},[174,24681,24682,24684],{},[25,24683,24654],{},"：以 root 权限执行命令。",[174,24686,24687,24690],{},[25,24688,24689],{},"chmod","：修改设备节点权限。",[174,24692,24693,24696,24697,24700],{},[25,24694,24695],{},"666","：",[25,24698,24699],{},"rw-rw-rw-","，所有用户可读写。",[174,24702,24703],{},"串口号必须替换为你机器上的真实端口。",[136,24705,24706],{},"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":23,"searchDepth":94,"depth":94,"links":24708},[24709,24710,24711],{"id":24603,"depth":94,"text":24604},{"id":24617,"depth":94,"text":24618},{"id":24643,"depth":94,"text":24644},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24595,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24718,"title":24719,"body":24720,"description":141,"extension":142,"meta":24881,"navigation":144,"path":24882,"seo":24883,"stem":24884,"__hash__":24885},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24721,"toc":24877},[24722,24726,24730,24736,24739,24796,24799,24803,24806,24874],[10,24723,24725],{"id":24724},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[159,24727,24729],{"id":24728},"_31-配置电机-id","3.1 配置电机 ID",[14,24731,24732,24733,24735],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[25,24734,46],{},"，需要改成机械臂链路里不冲突的编号。",[14,24737,24738],{},"方式一：用 LeRobot 命令逐步写入。",[18,24740,24742],{"className":23899,"code":24741,"language":23901,"meta":23,"style":23},"# 主臂舵机配置 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",[25,24743,24744,24749,24757,24764,24769,24773,24778,24784,24791],{"__ignoreMap":23},[28,24745,24746],{"class":30,"line":31},[28,24747,24748],{"class":105},"# 主臂舵机配置 ID\n",[28,24750,24751,24754],{"class":30,"line":94},[28,24752,24753],{"class":2040},"lerobot-setup-motors",[28,24755,24756],{"class":45}," \\\n",[28,24758,24759,24762],{"class":30,"line":109},[28,24760,24761],{"class":45},"  --teleop.type=so101_leader",[28,24763,24756],{"class":45},[28,24765,24766],{"class":30,"line":125},[28,24767,24768],{"class":45},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[28,24770,24771],{"class":30,"line":131},[28,24772,2477],{"emptyLinePlaceholder":144},[28,24774,24775],{"class":30,"line":1291},[28,24776,24777],{"class":105},"# 从臂舵机配置 ID\n",[28,24779,24780,24782],{"class":30,"line":1297},[28,24781,24753],{"class":2040},[28,24783,24756],{"class":45},[28,24785,24786,24789],{"class":30,"line":1388},[28,24787,24788],{"class":45},"  --robot.type=so101_follower",[28,24790,24756],{"class":45},[28,24792,24793],{"class":30,"line":1394},[28,24794,24795],{"class":45},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24797,24798],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[159,24800,24802],{"id":24801},"_32-机械臂校准","3.2 机械臂校准",[14,24804,24805],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[18,24807,24809],{"className":23899,"code":24808,"language":23901,"meta":23,"style":23},"# 主臂校准\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",[25,24810,24811,24816,24823,24829,24836,24841,24845,24850,24856,24862,24869],{"__ignoreMap":23},[28,24812,24813],{"class":30,"line":31},[28,24814,24815],{"class":105},"# 主臂校准\n",[28,24817,24818,24821],{"class":30,"line":94},[28,24819,24820],{"class":2040},"lerobot-calibrate",[28,24822,24756],{"class":45},[28,24824,24825,24827],{"class":30,"line":109},[28,24826,24761],{"class":45},[28,24828,24756],{"class":45},[28,24830,24831,24834],{"class":30,"line":125},[28,24832,24833],{"class":45},"  --teleop.port=\u002Fdev\u002FttyACM0",[28,24835,24756],{"class":45},[28,24837,24838],{"class":30,"line":131},[28,24839,24840],{"class":45},"  --teleop.id=my_awesome_leader_arm\n",[28,24842,24843],{"class":30,"line":1291},[28,24844,2477],{"emptyLinePlaceholder":144},[28,24846,24847],{"class":30,"line":1297},[28,24848,24849],{"class":105},"# 从臂校准\n",[28,24851,24852,24854],{"class":30,"line":1388},[28,24853,24820],{"class":2040},[28,24855,24756],{"class":45},[28,24857,24858,24860],{"class":30,"line":1394},[28,24859,24788],{"class":45},[28,24861,24756],{"class":45},[28,24863,24864,24867],{"class":30,"line":1406},[28,24865,24866],{"class":45},"  --robot.port=\u002Fdev\u002FttyACM1",[28,24868,24756],{"class":45},[28,24870,24871],{"class":30,"line":1689},[28,24872,24873],{"class":45},"  --robot.id=my_awesome_follower_arm\n",[136,24875,24876],{},"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":23,"searchDepth":94,"depth":94,"links":24878},[24879,24880],{"id":24728,"depth":94,"text":24729},{"id":24801,"depth":94,"text":24802},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24719,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24887,"title":24888,"body":24889,"description":141,"extension":142,"meta":25080,"navigation":144,"path":25081,"seo":25082,"stem":25083,"__hash__":25084},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24890,"toc":25076},[24891,24894,24898,24945,24949,24962,25025,25028,25073],[10,24892,24888],{"id":24893},"_4-遥操与相机接入",[159,24895,24897],{"id":24896},"_41-不带相机遥操","4.1 不带相机遥操",[18,24899,24901],{"className":23899,"code":24900,"language":23901,"meta":23,"style":23},"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",[25,24902,24903,24910,24916,24922,24929,24935,24941],{"__ignoreMap":23},[28,24904,24905,24908],{"class":30,"line":31},[28,24906,24907],{"class":2040},"lerobot-teleoperate",[28,24909,24756],{"class":45},[28,24911,24912,24914],{"class":30,"line":94},[28,24913,24788],{"class":45},[28,24915,24756],{"class":45},[28,24917,24918,24920],{"class":30,"line":109},[28,24919,24866],{"class":45},[28,24921,24756],{"class":45},[28,24923,24924,24927],{"class":30,"line":125},[28,24925,24926],{"class":45},"  --robot.id=my_awesome_follower_arm",[28,24928,24756],{"class":45},[28,24930,24931,24933],{"class":30,"line":131},[28,24932,24761],{"class":45},[28,24934,24756],{"class":45},[28,24936,24937,24939],{"class":30,"line":1291},[28,24938,24833],{"class":45},[28,24940,24756],{"class":45},[28,24942,24943],{"class":30,"line":1297},[28,24944,24840],{"class":45},[159,24946,24948],{"id":24947},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[18,24950,24952],{"className":23899,"code":24951,"language":23901,"meta":23,"style":23},"lerobot-find-cameras opencv\n",[25,24953,24954],{"__ignoreMap":23},[28,24955,24956,24959],{"class":30,"line":31},[28,24957,24958],{"class":2040},"lerobot-find-cameras",[28,24960,24961],{"class":320}," opencv\n",[18,24963,24965],{"className":23899,"code":24964,"language":23901,"meta":23,"style":23},"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",[25,24966,24967,24973,24979,24985,24991,25001,25007,25013,25020],{"__ignoreMap":23},[28,24968,24969,24971],{"class":30,"line":31},[28,24970,24907],{"class":2040},[28,24972,24756],{"class":45},[28,24974,24975,24977],{"class":30,"line":94},[28,24976,24788],{"class":45},[28,24978,24756],{"class":45},[28,24980,24981,24983],{"class":30,"line":109},[28,24982,24866],{"class":45},[28,24984,24756],{"class":45},[28,24986,24987,24989],{"class":30,"line":125},[28,24988,24926],{"class":45},[28,24990,24756],{"class":45},[28,24992,24993,24996,24999],{"class":30,"line":131},[28,24994,24995],{"class":45},"  --robot.cameras=",[28,24997,24998],{"class":320},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[28,25000,24756],{"class":45},[28,25002,25003,25005],{"class":30,"line":1291},[28,25004,24761],{"class":45},[28,25006,24756],{"class":45},[28,25008,25009,25011],{"class":30,"line":1297},[28,25010,24833],{"class":45},[28,25012,24756],{"class":45},[28,25014,25015,25018],{"class":30,"line":1388},[28,25016,25017],{"class":45},"  --teleop.id=my_awesome_leader_arm",[28,25019,24756],{"class":45},[28,25021,25022],{"class":30,"line":1394},[28,25023,25024],{"class":45},"  --display_data=true\n",[14,25026,25027],{},"相机参数说明：",[1211,25029,25030,25036,25042,25051,25061,25067],{},[174,25031,25032,25035],{},[25,25033,25034],{},"front","：相机名称。",[174,25037,25038,25041],{},[25,25039,25040],{},"type: opencv","：相机驱动类型。",[174,25043,25044,25047,25048,24640],{},[25,25045,25046],{},"index_or_path","：设备编号或设备路径（如 ",[25,25049,25050],{},"\u002Fdev\u002Fvideo4",[174,25052,25053,25056,25057,25060],{},[25,25054,25055],{},"width"," \u002F ",[25,25058,25059],{},"height","：图像分辨率。",[174,25062,25063,25066],{},[25,25064,25065],{},"fps","：采样帧率。",[174,25068,25069,25072],{},[25,25070,25071],{},"--display_data=true","：启用实时可视化。",[136,25074,25075],{},"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":23,"searchDepth":94,"depth":94,"links":25077},[25078,25079],{"id":24896,"depth":94,"text":24897},{"id":24947,"depth":94,"text":24948},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24888,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25086,"title":25087,"body":25088,"description":141,"extension":142,"meta":25260,"navigation":144,"path":25261,"seo":25262,"stem":25263,"__hash__":25264},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25089,"toc":25255},[25090,25094,25098,25103,25108,25111,25153,25159,25163,25212,25217,25221,25224,25232,25237,25242,25247,25252],[10,25091,25093],{"id":25092},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[159,25095,25097],{"id":25096},"_51-生成访问令牌","5.1 生成访问令牌",[14,25099,25100],{},[1539,25101],{"alt":23,"src":25102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25104,25105],{},[1539,25106],{"alt":23,"src":25107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25109,25110],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[18,25112,25114],{"className":23899,"code":25113,"language":23901,"meta":23,"style":23},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[25,25115,25116,25129],{"__ignoreMap":23},[28,25117,25118,25121,25124,25126],{"class":30,"line":31},[28,25119,25120],{"class":38},"export",[28,25122,25123],{"class":34}," HF_TOKEN",[28,25125,39],{"class":38},[28,25127,25128],{"class":320},"\"your_huggingface_token\"\n",[28,25130,25131,25134,25137,25140,25143,25145,25148,25150],{"class":30,"line":94},[28,25132,25133],{"class":2040},"hf",[28,25135,25136],{"class":320}," auth",[28,25138,25139],{"class":320}," login",[28,25141,25142],{"class":45}," --token",[28,25144,9801],{"class":320},[28,25146,25147],{"class":34},"$HF_TOKEN",[28,25149,465],{"class":320},[28,25151,25152],{"class":45}," --add-to-git-credential\n",[14,25154,25155,25158],{},[25,25156,25157],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[159,25160,25162],{"id":25161},"_52-验证登录","5.2 验证登录",[18,25164,25166],{"className":23899,"code":25165,"language":23901,"meta":23,"style":23},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[25,25167,25168,25199],{"__ignoreMap":23},[28,25169,25170,25173,25175,25178,25180,25182,25185,25188,25191,25194,25197],{"class":30,"line":31},[28,25171,25172],{"class":34},"HF_USER",[28,25174,39],{"class":38},[28,25176,25177],{"class":34},"$(",[28,25179,25133],{"class":2040},[28,25181,25136],{"class":320},[28,25183,25184],{"class":320}," whoami",[28,25186,25187],{"class":38}," |",[28,25189,25190],{"class":2040}," head",[28,25192,25193],{"class":45}," -n",[28,25195,25196],{"class":45}," 1",[28,25198,227],{"class":34},[28,25200,25201,25204,25206,25209],{"class":30,"line":94},[28,25202,25203],{"class":45},"echo",[28,25205,9801],{"class":320},[28,25207,25208],{"class":34},"$HF_USER",[28,25210,25211],{"class":320},"\"\n",[14,25213,25214],{},[1539,25215],{"alt":23,"src":25216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[159,25218,25220],{"id":25219},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25222,25223],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1211,25225,25226,25229],{},[174,25227,25228],{},"Dataset Repo（用于上传演示数据）",[174,25230,25231],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25233,25234],{},[1539,25235],{"alt":23,"src":25236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25238,25239],{},[1539,25240],{"alt":23,"src":25241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25243,25244],{},[1539,25245],{"alt":23,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25248,25249],{},[1539,25250],{"alt":23,"src":25251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[136,25253,25254],{},"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":23,"searchDepth":94,"depth":94,"links":25256},[25257,25258,25259],{"id":25096,"depth":94,"text":25097},{"id":25161,"depth":94,"text":25162},{"id":25219,"depth":94,"text":25220},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25087,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25266,"title":25267,"body":25268,"description":141,"extension":142,"meta":25465,"navigation":144,"path":25466,"seo":25467,"stem":25468,"__hash__":25469},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25269,"toc":25460},[25270,25274,25278,25374,25382,25387,25391,25407,25410,25414,25457],[10,25271,25273],{"id":25272},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[159,25275,25277],{"id":25276},"_61-录制示教数据","6.1 录制示教数据",[18,25279,25281],{"className":23899,"code":25280,"language":23901,"meta":23,"style":23},"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",[25,25282,25283,25290,25296,25302,25308,25317,25323,25329,25335,25342,25352,25359,25369],{"__ignoreMap":23},[28,25284,25285,25288],{"class":30,"line":31},[28,25286,25287],{"class":2040},"lerobot-record",[28,25289,24756],{"class":45},[28,25291,25292,25294],{"class":30,"line":94},[28,25293,24788],{"class":45},[28,25295,24756],{"class":45},[28,25297,25298,25300],{"class":30,"line":109},[28,25299,24866],{"class":45},[28,25301,24756],{"class":45},[28,25303,25304,25306],{"class":30,"line":125},[28,25305,24926],{"class":45},[28,25307,24756],{"class":45},[28,25309,25310,25312,25315],{"class":30,"line":131},[28,25311,24995],{"class":45},[28,25313,25314],{"class":320},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[28,25316,24756],{"class":45},[28,25318,25319,25321],{"class":30,"line":1291},[28,25320,24761],{"class":45},[28,25322,24756],{"class":45},[28,25324,25325,25327],{"class":30,"line":1297},[28,25326,24833],{"class":45},[28,25328,24756],{"class":45},[28,25330,25331,25333],{"class":30,"line":1388},[28,25332,25017],{"class":45},[28,25334,24756],{"class":45},[28,25336,25337,25340],{"class":30,"line":1394},[28,25338,25339],{"class":45},"  --display_data=true",[28,25341,24756],{"class":45},[28,25343,25344,25347,25350],{"class":30,"line":1406},[28,25345,25346],{"class":45},"  --dataset.repo_id=",[28,25348,25349],{"class":320},"\"Embodied-AI-6\u002Fso101_test\"",[28,25351,24756],{"class":45},[28,25353,25354,25357],{"class":30,"line":1689},[28,25355,25356],{"class":45},"  --dataset.num_episodes=10",[28,25358,24756],{"class":45},[28,25360,25361,25364,25367],{"class":30,"line":1694},[28,25362,25363],{"class":45},"  --dataset.single_task=",[28,25365,25366],{"class":320},"\"Grab the green cube\"",[28,25368,24756],{"class":45},[28,25370,25371],{"class":30,"line":1700},[28,25372,25373],{"class":45},"  --resume=true\n",[1211,25375,25376],{},[174,25377,25378,25381],{},[25,25379,25380],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25383,25384],{},[1539,25385],{"alt":23,"src":25386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[159,25388,25390],{"id":25389},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[18,25392,25394],{"className":23899,"code":25393,"language":23901,"meta":23,"style":23},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[25,25395,25396],{"__ignoreMap":23},[28,25397,25398,25401,25404],{"class":30,"line":31},[28,25399,25400],{"class":2040},"rm",[28,25402,25403],{"class":45}," -rf",[28,25405,25406],{"class":320}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25408,25409],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[159,25411,25413],{"id":25412},"_63-回放指定-episode","6.3 回放指定 episode",[18,25415,25417],{"className":23899,"code":25416,"language":23901,"meta":23,"style":23},"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",[25,25418,25419,25426,25432,25438,25444,25452],{"__ignoreMap":23},[28,25420,25421,25424],{"class":30,"line":31},[28,25422,25423],{"class":2040},"lerobot-replay",[28,25425,24756],{"class":45},[28,25427,25428,25430],{"class":30,"line":94},[28,25429,24788],{"class":45},[28,25431,24756],{"class":45},[28,25433,25434,25436],{"class":30,"line":109},[28,25435,24866],{"class":45},[28,25437,24756],{"class":45},[28,25439,25440,25442],{"class":30,"line":125},[28,25441,24926],{"class":45},[28,25443,24756],{"class":45},[28,25445,25446,25448,25450],{"class":30,"line":131},[28,25447,25346],{"class":45},[28,25449,25349],{"class":320},[28,25451,24756],{"class":45},[28,25453,25454],{"class":30,"line":1291},[28,25455,25456],{"class":45},"  --dataset.episode=0\n",[136,25458,25459],{},"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":23,"searchDepth":94,"depth":94,"links":25461},[25462,25463,25464],{"id":25276,"depth":94,"text":25277},{"id":25389,"depth":94,"text":25390},{"id":25412,"depth":94,"text":25413},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25267,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25471,"title":25472,"body":25473,"description":141,"extension":142,"meta":25601,"navigation":144,"path":25602,"seo":25603,"stem":25604,"__hash__":25605},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25474,"toc":25599},[25475,25479,25542,25545,25592,25597],[10,25476,25478],{"id":25477},"_7-act-模型训练","7. ACT 模型训练",[18,25480,25482],{"className":23899,"code":25481,"language":23901,"meta":23,"style":23},"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",[25,25483,25484,25491,25499,25506,25513,25520,25527,25534],{"__ignoreMap":23},[28,25485,25486,25489],{"class":30,"line":31},[28,25487,25488],{"class":2040},"lerobot-train",[28,25490,24756],{"class":45},[28,25492,25493,25495,25497],{"class":30,"line":94},[28,25494,25346],{"class":45},[28,25496,25349],{"class":320},[28,25498,24756],{"class":45},[28,25500,25501,25504],{"class":30,"line":109},[28,25502,25503],{"class":45},"  --policy.type=act",[28,25505,24756],{"class":45},[28,25507,25508,25511],{"class":30,"line":125},[28,25509,25510],{"class":45},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[28,25512,24756],{"class":45},[28,25514,25515,25518],{"class":30,"line":131},[28,25516,25517],{"class":45},"  --job_name=act_so101_test",[28,25519,24756],{"class":45},[28,25521,25522,25525],{"class":30,"line":1291},[28,25523,25524],{"class":45},"  --policy.device=cuda",[28,25526,24756],{"class":45},[28,25528,25529,25532],{"class":30,"line":1297},[28,25530,25531],{"class":45},"  --wandb.enable=false",[28,25533,24756],{"class":45},[28,25535,25536,25539],{"class":30,"line":1388},[28,25537,25538],{"class":45},"  --policy.repo_id=",[28,25540,25541],{"class":320},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25543,25544],{},"参数说明：",[1211,25546,25547,25553,25559,25565,25571,25580,25586],{},[174,25548,25549,25552],{},[25,25550,25551],{},"--dataset.repo_id","：训练数据集仓库。",[174,25554,25555,25558],{},[25,25556,25557],{},"--policy.type=act","：策略模型类型为 ACT。",[174,25560,25561,25564],{},[25,25562,25563],{},"--output_dir","：本地训练输出目录。",[174,25566,25567,25570],{},[25,25568,25569],{},"--job_name","：训练任务名称。",[174,25572,25573,25576,25577,24640],{},[25,25574,25575],{},"--policy.device","：训练设备（如 ",[25,25578,25579],{},"cuda",[174,25581,25582,25585],{},[25,25583,25584],{},"--wandb.enable","：是否启用 WandB 可视化。",[174,25587,25588,25591],{},[25,25589,25590],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25593,25594],{},[1539,25595],{"alt":23,"src":25596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[136,25598,25459],{},{"title":23,"searchDepth":94,"depth":94,"links":25600},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25472,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25607,"title":25608,"body":25609,"description":141,"extension":142,"meta":25696,"navigation":144,"path":25697,"seo":25698,"stem":25699,"__hash__":25700},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25610,"toc":25694},[25611,25614,25617,25684,25692],[10,25612,25608],{"id":25613},"_8-策略部署与自动采集",[14,25615,25616],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[18,25618,25620],{"className":23899,"code":25619,"language":23901,"meta":23,"style":23},"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",[25,25621,25622,25628,25634,25640,25648,25654,25661,25669,25677],{"__ignoreMap":23},[28,25623,25624,25626],{"class":30,"line":31},[28,25625,25287],{"class":2040},[28,25627,24756],{"class":45},[28,25629,25630,25632],{"class":30,"line":94},[28,25631,24788],{"class":45},[28,25633,24756],{"class":45},[28,25635,25636,25638],{"class":30,"line":109},[28,25637,24866],{"class":45},[28,25639,24756],{"class":45},[28,25641,25642,25644,25646],{"class":30,"line":125},[28,25643,24995],{"class":45},[28,25645,25314],{"class":320},[28,25647,24756],{"class":45},[28,25649,25650,25652],{"class":30,"line":131},[28,25651,24926],{"class":45},[28,25653,24756],{"class":45},[28,25655,25656,25659],{"class":30,"line":1291},[28,25657,25658],{"class":45},"  --display_data=false",[28,25660,24756],{"class":45},[28,25662,25663,25665,25667],{"class":30,"line":1297},[28,25664,25346],{"class":45},[28,25666,25349],{"class":320},[28,25668,24756],{"class":45},[28,25670,25671,25673,25675],{"class":30,"line":1388},[28,25672,25363],{"class":45},[28,25674,25366],{"class":320},[28,25676,24756],{"class":45},[28,25678,25679,25682],{"class":30,"line":1394},[28,25680,25681],{"class":45},"  --policy.path=",[28,25683,25541],{"class":320},[1211,25685,25686],{},[174,25687,25688,25691],{},[25,25689,25690],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[136,25693,25459],{},{"title":23,"searchDepth":94,"depth":94,"links":25695},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25608,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25702,"title":25703,"body":25704,"description":141,"extension":142,"meta":25733,"navigation":144,"path":25734,"seo":25735,"stem":25736,"__hash__":25737},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25705,"toc":25731},[25706,25710,25713,25719,25722,25728],[10,25707,25709],{"id":25708},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25711,25712],{},"项目地址：",[14,25714,25715],{},[35,25716,25717],{"href":25717,"rel":25718},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23942],[14,25720,25721],{},"参考教程：",[14,25723,25724],{},[35,25725,25726],{"href":25726,"rel":25727},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23942],[14,25729,25730],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":23,"searchDepth":94,"depth":94,"links":25732},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25703,"description":141},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25739,"title":25740,"body":25741,"description":25745,"extension":142,"meta":25746,"navigation":144,"path":25747,"seo":25748,"stem":25749,"__hash__":25750},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25742,"toc":25743},[],{"title":23,"searchDepth":94,"depth":94,"links":25744},[],"act复现",{"category":23455},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25740,"description":25745},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25752,"title":25753,"body":25754,"description":23,"extension":142,"meta":26056,"navigation":144,"path":26057,"seo":26058,"stem":26059,"__hash__":26060},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25755,"toc":26048},[25756,25759,25763,25773,25780,25787,25790,25797,25800,25803,25807,25819,25823,25869,25872,25875,25878,25881,25884,25888,25926,25932,25936,25990,25995,25998,26001,26006,26009,26014,26017,26020,26024,26027,26030,26034],[10,25757,25753],{"id":25758},"_1简介",[188,25760,25762],{"id":25761},"_11什么是-docker","1.1什么是 Docker？",[14,25764,25765,25766,25769,25770],{},"Docker 是一个开源的 ",[365,25767,25768],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[365,25771,25772],{},"一次构建，到处运行。",[14,25774,25775,25776,25779],{},"“ ",[365,25777,25778],{},"一次构建，到处运行"," ”也就是说：",[171,25781,25782],{},[174,25783,25784],{},[365,25785,25786],{},"之前：",[14,25788,25789],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[171,25791,25792],{},[174,25793,25794],{},[365,25795,25796],{},"使用docker后：",[14,25798,25799],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25801,25802],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[188,25804,25806],{"id":25805},"_12它是怎么工作的","1.2.它是怎么工作的？",[1211,25808,25809,25812],{},[174,25810,25811],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[174,25813,25814,25815,25818],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[365,25816,25817],{},"无论在哪运行都一样稳定"," 。",[188,25820,25822],{"id":25821},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[353,25824,25825,25835],{},[356,25826,25827],{},[359,25828,25829,25832],{},[362,25830,25831],{"align":23813},"概念",[362,25833,25834],{"align":23813},"解释",[400,25836,25837,25845,25853,25861],{},[359,25838,25839,25842],{},[405,25840,25841],{"align":23813},"镜像",[405,25843,25844],{"align":23813},"Image，运行容器的模板，像是一个应用快照",[359,25846,25847,25850],{},[405,25848,25849],{"align":23813},"容器",[405,25851,25852],{"align":23813},"Container，运行中的镜像实例，有自己的文件系统、网络等",[359,25854,25855,25858],{},[405,25856,25857],{"align":23813},"Dockerfile",[405,25859,25860],{"align":23813},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[359,25862,25863,25866],{},[405,25864,25865],{"align":23813},"仓库",[405,25867,25868],{"align":23813},"Registry，存放镜像的地方，比如 Docker Hub",[14,25870,25871],{},"抽象化理解:",[14,25873,25874],{},"Docker镜像≈C++类",[14,25876,25877],{},"Docker容器≈C++类实例(即对象)",[14,25879,25880],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25882,25883],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[188,25885,25887],{"id":25886},"_14类比理解","1.4.类比理解",[353,25889,25890,25900],{},[356,25891,25892],{},[359,25893,25894,25897],{},[362,25895,25896],{"align":23813},"传统部署",[362,25898,25899],{"align":23813},"Docker部署",[400,25901,25902,25910,25918],{},[359,25903,25904,25907],{},[405,25905,25906],{"align":23813},"手动安装依赖、调试版本不一致问题",[405,25908,25909],{"align":23813},"一次打包环境和代码",[359,25911,25912,25915],{},[405,25913,25914],{"align":23813},"程序“裸奔”跑在系统上",[405,25916,25917],{"align":23813},"程序“穿着容器”隔离运行",[359,25919,25920,25923],{},[405,25921,25922],{"align":23813},"容易“在我电脑上能跑”",[405,25924,25925],{"align":23813},"保证“无论在哪都能跑”",[14,25927,25928,25929],{},"就像快递包裹： ",[365,25930,25931],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[188,25933,25935],{"id":25934},"_15docker-的核心优势","1.5.Docker 的核心优势",[353,25937,25938,25948],{},[356,25939,25940],{},[359,25941,25942,25945],{},[362,25943,25944],{"align":23813},"优势",[362,25946,25947],{"align":23813},"说明",[400,25949,25950,25958,25966,25974,25982],{},[359,25951,25952,25955],{},[405,25953,25954],{"align":23813},"轻量级",[405,25956,25957],{"align":23813},"基于系统内核共享，启动速度快，占资源少",[359,25959,25960,25963],{},[405,25961,25962],{"align":23813},"跨平台",[405,25964,25965],{"align":23813},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[359,25967,25968,25971],{},[405,25969,25970],{"align":23813},"易于迁移部署",[405,25972,25973],{"align":23813},"应用和环境一起封装，不怕依赖不一致",[359,25975,25976,25979],{},[405,25977,25978],{"align":23813},"易于版本控制",[405,25980,25981],{"align":23813},"镜像版本可控，支持回滚",[359,25983,25984,25987],{},[405,25985,25986],{"align":23813},"生态丰富",[405,25988,25989],{"align":23813},"Docker Hub 上有成千上万的现成镜像可用",[171,25991,25992],{},[174,25993,25994],{},"在Linux上可以几乎实现无性能损失。",[14,25996,25997],{},"docker里的发行版和本机共用Linux内核。",[14,25999,26000],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[171,26002,26003],{},[174,26004,26005],{},"可以快速部署在绝大多数Linux发行版",[14,26007,26008],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[171,26010,26011],{},[174,26012,26013],{},"配置环境简单",[14,26015,26016],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26018,26019],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[171,26021,26022],{},[174,26023,25986],{},[14,26025,26026],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26028,26029],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[188,26031,26033],{"id":26032},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1211,26035,26036,26039,26042,26045],{},[174,26037,26038],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[174,26040,26041],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[174,26043,26044],{},"微服务架构：每个服务一个容器，灵活组合",[174,26046,26047],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":23,"searchDepth":94,"depth":94,"links":26049},[26050,26051,26052,26053,26054,26055],{"id":25761,"depth":109,"text":25762},{"id":25805,"depth":109,"text":25806},{"id":25821,"depth":109,"text":25822},{"id":25886,"depth":109,"text":25887},{"id":25934,"depth":109,"text":25935},{"id":26032,"depth":109,"text":26033},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25753,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26062,"title":26063,"body":26064,"description":23,"extension":142,"meta":26797,"navigation":144,"path":26798,"seo":26799,"stem":26800,"__hash__":26801},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26065,"toc":26792},[26066,26069,26073,26076,26079,26085,26091,26095,26104,26107,26164,26167,26218,26221,26304,26307,26344,26348,26359,26372,26379,26382,26462,26465,26515,26518,26541,26545,26552,26555,26571,26577,26580,26596,26602,26605,26621,26635,26641,26661,26667,26670,26682,26688,26691,26705,26711,26714,26734,26739,26742,26745,26749,26752,26755,26758,26765,26768,26771,26774,26779,26784,26789],[10,26067,26063],{"id":26068},"_2安装docker",[188,26070,26072],{"id":26071},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26074,26075],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26077,26078],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26080,26081],{},[35,26082,26083],{"href":26083,"rel":26084},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23942],[14,26086,26087],{},[35,26088,26089],{"href":26089,"rel":26090},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23942],[22075,26092,26094],{"id":26093},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26096,26097,26098,26103],{},"以下内容根据 ",[35,26099,26102],{"href":26100,"rel":26101},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23942],"官方文档"," 修改而来。",[14,26105,26106],{},"如果你过去安装过 docker，先删掉：",[18,26108,26110],{"className":23899,"code":26109,"language":23901,"meta":23,"style":23},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[25,26111,26112],{"__ignoreMap":23},[28,26113,26114,26116,26119,26122,26125,26128,26131,26134,26137,26140,26143,26146,26149,26152,26155,26158,26161],{"class":30,"line":31},[28,26115,3102],{"class":38},[28,26117,26118],{"class":34}," pkg ",[28,26120,26121],{"class":38},"in",[28,26123,26124],{"class":320}," docker.io",[28,26126,26127],{"class":320}," docker-doc",[28,26129,26130],{"class":320}," docker-compose",[28,26132,26133],{"class":320}," docker-compose-v2",[28,26135,26136],{"class":320}," podman-docker",[28,26138,26139],{"class":320}," containerd",[28,26141,26142],{"class":320}," runc",[28,26144,26145],{"class":34},"; ",[28,26147,26148],{"class":38},"do",[28,26150,26151],{"class":2040}," sudo",[28,26153,26154],{"class":320}," apt-get",[28,26156,26157],{"class":320}," remove",[28,26159,26160],{"class":34}," $pkg; ",[28,26162,26163],{"class":38},"done\n",[14,26165,26166],{},"首先安装依赖和GPG：",[18,26168,26172],{"className":26169,"code":26170,"language":26171,"meta":23,"style":23},"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",[25,26173,26174,26179,26184,26189,26194,26199,26204,26208,26213],{"__ignoreMap":23},[28,26175,26176],{"class":30,"line":31},[28,26177,26178],{},"# Add Docker's official GPG key:\n",[28,26180,26181],{"class":30,"line":94},[28,26182,26183],{},"sudo apt-get update\n",[28,26185,26186],{"class":30,"line":109},[28,26187,26188],{},"sudo apt-get install ca-certificates curl\n",[28,26190,26191],{"class":30,"line":125},[28,26192,26193],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[28,26195,26196],{"class":30,"line":131},[28,26197,26198],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[28,26200,26201],{"class":30,"line":1291},[28,26202,26203],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[28,26205,26206],{"class":30,"line":1297},[28,26207,2477],{"emptyLinePlaceholder":144},[28,26209,26210],{"class":30,"line":1388},[28,26211,26212],{},"# 如果上面这行报错就弄下面这行\n",[28,26214,26215],{"class":30,"line":1394},[28,26216,26217],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26219,26220],{},"信任 Docker 的 GPG 公钥并添加仓库：",[18,26222,26224],{"className":23899,"code":26223,"language":23901,"meta":23,"style":23},"# 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",[25,26225,26226,26231,26237,26254,26287],{"__ignoreMap":23},[28,26227,26228],{"class":30,"line":31},[28,26229,26230],{"class":105},"# Add the repository to Apt sources:\n",[28,26232,26233,26235],{"class":30,"line":94},[28,26234,25203],{"class":45},[28,26236,24756],{"class":45},[28,26238,26239,26242,26245,26248,26251],{"class":30,"line":109},[28,26240,26241],{"class":320},"  \"deb [arch=$(",[28,26243,26244],{"class":2040},"dpkg",[28,26246,26247],{"class":45}," --print-architecture",[28,26249,26250],{"class":320},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[28,26252,26253],{"class":45},"\\\n",[28,26255,26256,26259,26261,26263,26266,26269,26271,26273,26276,26278,26280,26283,26285],{"class":30,"line":125},[28,26257,26258],{"class":320},"  \"",[28,26260,25177],{"class":34},[28,26262,768],{"class":45},[28,26264,26265],{"class":320}," \u002Fetc\u002Fos-release",[28,26267,26268],{"class":34}," && ",[28,26270,25203],{"class":45},[28,26272,9801],{"class":320},[28,26274,26275],{"class":34},"$VERSION_CODENAME",[28,26277,465],{"class":320},[28,26279,642],{"class":34},[28,26281,26282],{"class":320},"\" stable\"",[28,26284,25187],{"class":38},[28,26286,24756],{"class":45},[28,26288,26289,26292,26295,26298,26301],{"class":30,"line":131},[28,26290,26291],{"class":2040},"  sudo",[28,26293,26294],{"class":320}," tee",[28,26296,26297],{"class":320}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[28,26299,26300],{"class":38}," >",[28,26302,26303],{"class":320}," \u002Fdev\u002Fnull\n",[14,26305,26306],{},"最后安装",[18,26308,26310],{"className":23899,"code":26309,"language":23901,"meta":23,"style":23},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26311,26312,26321],{"__ignoreMap":23},[28,26313,26314,26316,26318],{"class":30,"line":31},[28,26315,24654],{"class":2040},[28,26317,26154],{"class":320},[28,26319,26320],{"class":320}," update\n",[28,26322,26323,26325,26327,26329,26332,26335,26338,26341],{"class":30,"line":94},[28,26324,24654],{"class":2040},[28,26326,26154],{"class":320},[28,26328,23911],{"class":320},[28,26330,26331],{"class":320}," docker-ce",[28,26333,26334],{"class":320}," docker-ce-cli",[28,26336,26337],{"class":320}," containerd.io",[28,26339,26340],{"class":320}," docker-buildx-plugin",[28,26342,26343],{"class":320}," docker-compose-plugin\n",[22075,26345,26347],{"id":26346},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26349,26350,26351,26354,26355,26358],{},"查看自己自己包管理工具版本（dnf是 ",[365,26352,26353],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[365,26356,26357],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[18,26360,26362],{"className":23899,"code":26361,"language":23901,"meta":23,"style":23},"dnf --version\n",[25,26363,26364],{"__ignoreMap":23},[28,26365,26366,26369],{"class":30,"line":31},[28,26367,26368],{"class":2040},"dnf",[28,26370,26371],{"class":45}," --version\n",[14,26373,26097,26374,26378],{},[35,26375,26102],{"href":26376,"rel":26377},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23942]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26380,26381],{},"如果你之前安装过 docker，请先删掉",[18,26383,26385],{"className":23899,"code":26384,"language":23901,"meta":23,"style":23},"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",[25,26386,26387,26401,26408,26415,26422,26429,26436,26443,26450,26457],{"__ignoreMap":23},[28,26388,26389,26391,26394,26396,26399],{"class":30,"line":31},[28,26390,24654],{"class":2040},[28,26392,26393],{"class":320}," dnf",[28,26395,26157],{"class":320},[28,26397,26398],{"class":320}," docker",[28,26400,24756],{"class":45},[28,26402,26403,26406],{"class":30,"line":94},[28,26404,26405],{"class":320},"                  docker-client",[28,26407,24756],{"class":45},[28,26409,26410,26413],{"class":30,"line":109},[28,26411,26412],{"class":320},"                  docker-client-latest",[28,26414,24756],{"class":45},[28,26416,26417,26420],{"class":30,"line":125},[28,26418,26419],{"class":320},"                  docker-common",[28,26421,24756],{"class":45},[28,26423,26424,26427],{"class":30,"line":131},[28,26425,26426],{"class":320},"                  docker-latest",[28,26428,24756],{"class":45},[28,26430,26431,26434],{"class":30,"line":1291},[28,26432,26433],{"class":320},"                  docker-latest-logrotate",[28,26435,24756],{"class":45},[28,26437,26438,26441],{"class":30,"line":1297},[28,26439,26440],{"class":320},"                  docker-logrotate",[28,26442,24756],{"class":45},[28,26444,26445,26448],{"class":30,"line":1388},[28,26446,26447],{"class":320},"                  docker-selinux",[28,26449,24756],{"class":45},[28,26451,26452,26455],{"class":30,"line":1394},[28,26453,26454],{"class":320},"                  docker-engine-selinux",[28,26456,24756],{"class":45},[28,26458,26459],{"class":30,"line":1406},[28,26460,26461],{"class":320},"                  docker-engine\n",[14,26463,26464],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[18,26466,26468],{"className":23899,"code":26467,"language":23901,"meta":23,"style":23},"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",[25,26469,26470,26484,26499],{"__ignoreMap":23},[28,26471,26472,26474,26476,26479,26481],{"class":30,"line":31},[28,26473,24654],{"class":2040},[28,26475,26393],{"class":320},[28,26477,26478],{"class":45}," -y",[28,26480,23911],{"class":320},[28,26482,26483],{"class":320}," dnf-plugins-core\n",[28,26485,26486,26488,26490,26493,26496],{"class":30,"line":94},[28,26487,24654],{"class":2040},[28,26489,26393],{"class":320},[28,26491,26492],{"class":320}," config-manager",[28,26494,26495],{"class":320}," addrepo",[28,26497,26498],{"class":45}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[28,26500,26501,26503,26506,26509,26512],{"class":30,"line":109},[28,26502,24654],{"class":2040},[28,26504,26505],{"class":320}," sed",[28,26507,26508],{"class":45}," -i",[28,26510,26511],{"class":320}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[28,26513,26514],{"class":320}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26516,26517],{},"最后安装：",[18,26519,26521],{"className":23899,"code":26520,"language":23901,"meta":23,"style":23},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26522,26523],{"__ignoreMap":23},[28,26524,26525,26527,26529,26531,26533,26535,26537,26539],{"class":30,"line":31},[28,26526,24654],{"class":2040},[28,26528,26393],{"class":320},[28,26530,23911],{"class":320},[28,26532,26331],{"class":320},[28,26534,26334],{"class":320},[28,26536,26337],{"class":320},[28,26538,26340],{"class":320},[28,26540,26343],{"class":320},[188,26542,26544],{"id":26543},"_22配置环境","2.2.配置环境",[22075,26546,26548,26551],{"id":26547},"_221检查-docker-服务状态",[365,26549,26550],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26553,26554],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[18,26556,26558],{"className":23899,"code":26557,"language":23901,"meta":23,"style":23},"systemctl status docker\n",[25,26559,26560],{"__ignoreMap":23},[28,26561,26562,26565,26568],{"class":30,"line":31},[28,26563,26564],{"class":2040},"systemctl",[28,26566,26567],{"class":320}," status",[28,26569,26570],{"class":320}," docker\n",[22075,26572,26574,26551],{"id":26573},"_222启动-docker-服务",[365,26575,26576],{},"2.2.2.启动 Docker 服务",[14,26578,26579],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[18,26581,26583],{"className":23899,"code":26582,"language":23901,"meta":23,"style":23},"sudo systemctl start docker\n",[25,26584,26585],{"__ignoreMap":23},[28,26586,26587,26589,26592,26594],{"class":30,"line":31},[28,26588,24654],{"class":2040},[28,26590,26591],{"class":320}," systemctl",[28,26593,4261],{"class":320},[28,26595,26570],{"class":320},[22075,26597,26599,26551],{"id":26598},"_223设置-docker-开机自启",[365,26600,26601],{},"2.2.3.设置 Docker 开机自启",[14,26603,26604],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[18,26606,26608],{"className":23899,"code":26607,"language":23901,"meta":23,"style":23},"sudo systemctl enable docker\n",[25,26609,26610],{"__ignoreMap":23},[28,26611,26612,26614,26616,26619],{"class":30,"line":31},[28,26613,24654],{"class":2040},[28,26615,26591],{"class":320},[28,26617,26618],{"class":320}," enable",[28,26620,26570],{"class":320},[22075,26622,26624,13872,26627,13872,26632,26551],{"id":26623},"_224将用户添加到-docker-组",[365,26625,26626],{},"2.2.4.将用户添加到",[365,26628,26629],{},[25,26630,26631],{},"docker",[365,26633,26634],{},"组",[14,26636,26637,26638,26640],{},"使用以下命令将当前用户添加到 ",[25,26639,26631],{}," 组：",[18,26642,26644],{"className":23899,"code":26643,"language":23901,"meta":23,"style":23},"sudo usermod -aG docker $USER\n",[25,26645,26646],{"__ignoreMap":23},[28,26647,26648,26650,26653,26656,26658],{"class":30,"line":31},[28,26649,24654],{"class":2040},[28,26651,26652],{"class":320}," usermod",[28,26654,26655],{"class":45}," -aG",[28,26657,26398],{"class":320},[28,26659,26660],{"class":34}," $USER\n",[22075,26662,26664,26551],{"id":26663},"_225退出并重新登录",[365,26665,26666],{},"2.2.5.退出并重新登录",[14,26668,26669],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[18,26671,26673],{"className":23899,"code":26672,"language":23901,"meta":23,"style":23},"newgrp docker\n",[25,26674,26675],{"__ignoreMap":23},[28,26676,26677,26680],{"class":30,"line":31},[28,26678,26679],{"class":2040},"newgrp",[28,26681,26570],{"class":320},[22075,26683,26685,26551],{"id":26684},"_226重新启动-docker-服务如果需要",[365,26686,26687],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26689,26690],{},"确保 Docker 服务正在运行，可以使用以下命令：",[18,26692,26693],{"className":23899,"code":26582,"language":23901,"meta":23,"style":23},[25,26694,26695],{"__ignoreMap":23},[28,26696,26697,26699,26701,26703],{"class":30,"line":31},[28,26698,24654],{"class":2040},[28,26700,26591],{"class":320},[28,26702,4261],{"class":320},[28,26704,26570],{"class":320},[22075,26706,26708,26551],{"id":26707},"_227重启电脑后检查-docker-服务状态",[365,26709,26710],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26712,26713],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[18,26715,26717],{"className":23899,"code":26716,"language":23901,"meta":23,"style":23},"sudo reboot\nsystemctl status docker\n",[25,26718,26719,26726],{"__ignoreMap":23},[28,26720,26721,26723],{"class":30,"line":31},[28,26722,24654],{"class":2040},[28,26724,26725],{"class":320}," reboot\n",[28,26727,26728,26730,26732],{"class":30,"line":94},[28,26729,26564],{"class":2040},[28,26731,26567],{"class":320},[28,26733,26570],{"class":320},[14,26735,26736],{},[1539,26737],{"alt":23,"src":26738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26740,26741],{},"第三行显示enabled说明开机自启动成功",[14,26743,26744],{},"按q退出",[188,26746,26748],{"id":26747},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26750,26751],{},"优先使用linux来使用docker是比较好的",[14,26753,26754],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26756,26757],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26759,26760,26761],{},"官方下载安装:",[35,26762,26763],{"href":26763,"rel":26764},"https:\u002F\u002Fwww.docker.com\u002F",[23942],[14,26766,26767],{},"Windows的Docker显卡直通与USB直通:",[14,26769,26770],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26772,26773],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26775,26776],{},[1539,26777],{"alt":23,"src":26778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26780,26781],{},[1539,26782],{"alt":23,"src":26783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26785,26786],{},[1539,26787],{"alt":23,"src":26788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[136,26790,26791],{},"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":23,"searchDepth":94,"depth":94,"links":26793},[26794,26795,26796],{"id":26071,"depth":109,"text":26072},{"id":26543,"depth":109,"text":26544},{"id":26747,"depth":109,"text":26748},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26063,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26803,"title":26804,"body":26805,"description":26812,"extension":142,"meta":27505,"navigation":144,"path":27506,"seo":27507,"stem":27508,"__hash__":27509},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26806,"toc":27499},[26807,26810,26813,26817,26822,26827,26830,26858,26863,26872,26875,26880,26884,26891,26896,26902,26906,26909,26913,26918,27010,27015,27033,27038,27059,27064,27080,27084,27089,27118,27123,27169,27174,27218,27226,27243,27248,27264,27269,27283,27286,27289,27292,27295,27324,27327,27332,27336,27339,27342,27348,27351,27354,27357,27419,27426,27431,27434,27452,27456,27459,27476,27479,27482,27496],[10,26808,26804],{"id":26809},"_3docker直通",[14,26811,26812],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[188,26814,26816],{"id":26815},"_31usb直通","3.1.USB直通",[14,26818,26819],{},[1539,26820],{"alt":23,"src":26821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[171,26823,26824],{},[174,26825,26826],{},"方法一(不是很推荐新手)：",[14,26828,26829],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[18,26831,26833],{"className":23899,"code":26832,"language":23901,"meta":23,"style":23},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[25,26834,26835,26843,26848],{"__ignoreMap":23},[28,26836,26837,26840],{"class":30,"line":31},[28,26838,26839],{"class":2040},"ls",[28,26841,26842],{"class":320}," \u002Fdev\n",[28,26844,26845],{"class":30,"line":94},[28,26846,26847],{"class":105},"#例如\n",[28,26849,26850,26853,26855],{"class":30,"line":109},[28,26851,26852],{"class":34},"--device",[28,26854,39],{"class":38},[28,26856,26857],{"class":320},"\u002Fdev\u002Ftty_USB0\n",[171,26859,26860],{"start":94},[174,26861,26862],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[18,26864,26866],{"className":23899,"code":26865,"language":23901,"meta":23,"style":23},"--privileged\n",[25,26867,26868],{"__ignoreMap":23},[28,26869,26870],{"class":30,"line":31},[28,26871,26865],{"class":2040},[14,26873,26874],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26876,26877],{},[1539,26878],{"alt":23,"src":26879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[188,26881,26883],{"id":26882},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26885,26886,26887,26890],{},"NVIDIA Container Toolkit使用户 ",[365,26888,26889],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26892,26893],{},[1539,26894],{"alt":23,"src":26895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26897,26898],{},[35,26899,26900],{"href":26900,"rel":26901},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23942],[22075,26903,26905],{"id":26904},"_321安装","3.2.1.安装",[14,26907,26908],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22987,26910,26912],{"id":26911},"_3211ubuntu","3.2.1.1.Ubuntu",[171,26914,26915],{},[174,26916,26917],{},"配置存储库 并更新",[18,26919,26921],{"className":23899,"code":26920,"language":23901,"meta":23,"style":23},"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",[25,26922,26923,26952,26972,26984,26996,27002],{"__ignoreMap":23},[28,26924,26925,26928,26931,26934,26936,26938,26941,26944,26947,26950],{"class":30,"line":31},[28,26926,26927],{"class":2040},"curl",[28,26929,26930],{"class":45}," -fsSL",[28,26932,26933],{"class":320}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[28,26935,25187],{"class":38},[28,26937,26151],{"class":2040},[28,26939,26940],{"class":320}," gpg",[28,26942,26943],{"class":45}," --dearmor",[28,26945,26946],{"class":45}," -o",[28,26948,26949],{"class":320}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[28,26951,24756],{"class":45},[28,26953,26954,26957,26959,26962,26965,26968,26970],{"class":30,"line":94},[28,26955,26956],{"class":34},"  && ",[28,26958,26927],{"class":2040},[28,26960,26961],{"class":45}," -s",[28,26963,26964],{"class":45}," -L",[28,26966,26967],{"class":320}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[28,26969,25187],{"class":38},[28,26971,24756],{"class":45},[28,26973,26974,26977,26980,26982],{"class":30,"line":109},[28,26975,26976],{"class":2040},"    sed",[28,26978,26979],{"class":320}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[28,26981,25187],{"class":38},[28,26983,24756],{"class":45},[28,26985,26986,26989,26991,26994],{"class":30,"line":125},[28,26987,26988],{"class":2040},"    sudo",[28,26990,26294],{"class":320},[28,26992,26993],{"class":320}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[28,26995,24756],{"class":45},[28,26997,26998,27000],{"class":30,"line":131},[28,26999,26956],{"class":34},[28,27001,26253],{"class":45},[28,27003,27004,27006,27008],{"class":30,"line":1291},[28,27005,26988],{"class":2040},[28,27007,26154],{"class":320},[28,27009,26320],{"class":320},[171,27011,27012],{"start":94},[174,27013,27014],{},"安装nvidia-docker2",[18,27016,27018],{"className":23899,"code":27017,"language":23901,"meta":23,"style":23},"sudo apt-get install -y nvidia-docker2\n",[25,27019,27020],{"__ignoreMap":23},[28,27021,27022,27024,27026,27028,27030],{"class":30,"line":31},[28,27023,24654],{"class":2040},[28,27025,26154],{"class":320},[28,27027,23911],{"class":320},[28,27029,26478],{"class":45},[28,27031,27032],{"class":320}," nvidia-docker2\n",[171,27034,27035],{"start":109},[174,27036,27037],{},"使用nvidia-ctk命令配置container runtime",[18,27039,27041],{"className":23899,"code":27040,"language":23901,"meta":23,"style":23},"sudo nvidia-ctk runtime configure --runtime=docker\n",[25,27042,27043],{"__ignoreMap":23},[28,27044,27045,27047,27050,27053,27056],{"class":30,"line":31},[28,27046,24654],{"class":2040},[28,27048,27049],{"class":320}," nvidia-ctk",[28,27051,27052],{"class":320}," runtime",[28,27054,27055],{"class":320}," configure",[28,27057,27058],{"class":45}," --runtime=docker\n",[171,27060,27061],{"start":125},[174,27062,27063],{},"重启docker服务:",[18,27065,27067],{"className":23899,"code":27066,"language":23901,"meta":23,"style":23},"sudo systemctl restart docker\n",[25,27068,27069],{"__ignoreMap":23},[28,27070,27071,27073,27075,27078],{"class":30,"line":31},[28,27072,24654],{"class":2040},[28,27074,26591],{"class":320},[28,27076,27077],{"class":320}," restart",[28,27079,26570],{"class":320},[22987,27081,27083],{"id":27082},"_3212fedora","3.2.1.2.Fedora",[171,27085,27086],{},[174,27087,27088],{},"配置存储库",[18,27090,27092],{"className":23899,"code":27091,"language":23901,"meta":23,"style":23},"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",[25,27093,27094,27109],{"__ignoreMap":23},[28,27095,27096,27098,27100,27102,27105,27107],{"class":30,"line":31},[28,27097,26927],{"class":2040},[28,27099,26961],{"class":45},[28,27101,26964],{"class":45},[28,27103,27104],{"class":320}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[28,27106,25187],{"class":38},[28,27108,24756],{"class":45},[28,27110,27111,27113,27115],{"class":30,"line":94},[28,27112,24654],{"class":2040},[28,27114,26294],{"class":320},[28,27116,27117],{"class":320}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[171,27119,27120],{"start":94},[174,27121,27122],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[18,27124,27126],{"className":23899,"code":27125,"language":23901,"meta":23,"style":23},"# 如果是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",[25,27127,27128,27133,27147,27151,27156],{"__ignoreMap":23},[28,27129,27130],{"class":30,"line":31},[28,27131,27132],{"class":105},"# 如果是RHEL或者Rocky（DNF4）\n",[28,27134,27135,27137,27139,27141,27144],{"class":30,"line":94},[28,27136,24654],{"class":2040},[28,27138,26393],{"class":320},[28,27140,26492],{"class":320},[28,27142,27143],{"class":45}," --add-repo",[28,27145,27146],{"class":320}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,27148,27149],{"class":30,"line":109},[28,27150,2477],{"emptyLinePlaceholder":144},[28,27152,27153],{"class":30,"line":125},[28,27154,27155],{"class":105},"# 如果是Feodra41+（DNF5）\n",[28,27157,27158,27160,27162,27164,27166],{"class":30,"line":131},[28,27159,24654],{"class":2040},[28,27161,26393],{"class":320},[28,27163,26492],{"class":320},[28,27165,26495],{"class":320},[28,27167,27168],{"class":45}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[171,27170,27171],{"start":109},[174,27172,27173],{},"安装NVIDIA Container Toolki包",[18,27175,27177],{"className":23899,"code":27176,"language":23901,"meta":23,"style":23},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[25,27178,27179,27184,27197,27201,27206],{"__ignoreMap":23},[28,27180,27181],{"class":30,"line":31},[28,27182,27183],{"class":105},"# 如果是RHEL或者Rocky\n",[28,27185,27186,27188,27190,27192,27194],{"class":30,"line":94},[28,27187,24654],{"class":2040},[28,27189,26393],{"class":320},[28,27191,23911],{"class":320},[28,27193,26478],{"class":45},[28,27195,27196],{"class":320}," nvidia-container-toolkit\n",[28,27198,27199],{"class":30,"line":109},[28,27200,2477],{"emptyLinePlaceholder":144},[28,27202,27203],{"class":30,"line":125},[28,27204,27205],{"class":105},"# 如果是Fedora\n",[28,27207,27208,27210,27212,27214,27216],{"class":30,"line":131},[28,27209,24654],{"class":2040},[28,27211,26393],{"class":320},[28,27213,23911],{"class":320},[28,27215,26478],{"class":45},[28,27217,27196],{"class":320},[171,27219,27220],{"start":125},[174,27221,27222,27223,27225],{},"安装nvidia-docker2 ： 在Fedora上使用",[25,27224,26368],{},"进行安装",[18,27227,27229],{"className":23899,"code":27228,"language":23901,"meta":23,"style":23},"sudo dnf install -y nvidia-docker2\n",[25,27230,27231],{"__ignoreMap":23},[28,27232,27233,27235,27237,27239,27241],{"class":30,"line":31},[28,27234,24654],{"class":2040},[28,27236,26393],{"class":320},[28,27238,23911],{"class":320},[28,27240,26478],{"class":45},[28,27242,27032],{"class":320},[171,27244,27245],{"start":131},[174,27246,27247],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[18,27249,27250],{"className":23899,"code":27040,"language":23901,"meta":23,"style":23},[25,27251,27252],{"__ignoreMap":23},[28,27253,27254,27256,27258,27260,27262],{"class":30,"line":31},[28,27255,24654],{"class":2040},[28,27257,27049],{"class":320},[28,27259,27052],{"class":320},[28,27261,27055],{"class":320},[28,27263,27058],{"class":45},[171,27265,27266],{"start":1291},[174,27267,27268],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[18,27270,27271],{"className":23899,"code":27066,"language":23901,"meta":23,"style":23},[25,27272,27273],{"__ignoreMap":23},[28,27274,27275,27277,27279,27281],{"class":30,"line":31},[28,27276,24654],{"class":2040},[28,27278,26591],{"class":320},[28,27280,27077],{"class":320},[28,27282,26570],{"class":320},[14,27284,27285],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27287,27288],{},"方法：",[14,27290,27291],{},"1️⃣nvidia-smi",[14,27293,27294],{},"2️⃣运行nvidia cuda 容器进行测试",[18,27296,27298],{"className":23899,"code":27297,"language":23901,"meta":23,"style":23},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[25,27299,27300],{"__ignoreMap":23},[28,27301,27302,27304,27306,27309,27312,27315,27318,27321],{"class":30,"line":31},[28,27303,24654],{"class":2040},[28,27305,26398],{"class":320},[28,27307,27308],{"class":320}," run",[28,27310,27311],{"class":45}," --rm",[28,27313,27314],{"class":45}," --gpus",[28,27316,27317],{"class":320}," all",[28,27319,27320],{"class":320}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[28,27322,27323],{"class":320}," nvidia-smi\n",[14,27325,27326],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27328,27329],{},[1539,27330],{"alt":23,"src":27331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[188,27333,27335],{"id":27334},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27337,27338],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27340,27341],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27343,27344],{},[35,27345,27346],{"href":27346,"rel":27347},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23942],[14,27349,27350],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27352,27353],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27355,27356],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[353,27358,27359,27375],{},[356,27360,27361],{},[359,27362,27363,27366,27369,27372],{},[362,27364,27365],{"align":23813},"镜像类型",[362,27367,27368],{"align":23813},"适用场景",[362,27370,27371],{"align":23813},"示例标签",[362,27373,27374],{"align":23813},"大小",[400,27376,27377,27391,27405],{},[359,27378,27379,27382,27385,27388],{},[405,27380,27381],{"align":23813},"base",[405,27383,27384],{"align":23813},"仅需 CUDA 运行时库",[405,27386,27387],{"align":23813},"12.4.0-base-ubuntu22.04",[405,27389,27390],{"align":23813},"~240MB",[359,27392,27393,27396,27399,27402],{},[405,27394,27395],{"align":23813},"runtime",[405,27397,27398],{"align":23813},"部署编译后的应用（含数学库）",[405,27400,27401],{"align":23813},"12.4.0-runtime-ubuntu22.04",[405,27403,27404],{"align":23813},"~2GB",[359,27406,27407,27410,27413,27416],{},[405,27408,27409],{"align":23813},"devel",[405,27411,27412],{"align":23813},"开发环境（含编译工具）",[405,27414,27415],{"align":23813},"12.4.0-devel-ubuntu22.04",[405,27417,27418],{"align":23813},"~3GB",[14,27420,27421,27422,27425],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[25,27423,27424],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27427,27428],{},[1539,27429],{"alt":23,"src":27430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27432,27433],{},"在dockerfile里就可以开头这么写：",[18,27435,27437],{"className":23899,"code":27436,"language":23901,"meta":23,"style":23},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[25,27438,27439,27444],{"__ignoreMap":23},[28,27440,27441],{"class":30,"line":31},[28,27442,27443],{"class":105},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[28,27445,27446,27449],{"class":30,"line":94},[28,27447,27448],{"class":2040},"FROM",[28,27450,27451],{"class":320}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[188,27453,27455],{"id":27454},"_34配置以太网","3.4.配置以太网",[14,27457,27458],{},"指定网络模式",[18,27460,27462],{"className":23899,"code":27461,"language":23901,"meta":23,"style":23},"--net=host \\\n",[25,27463,27464],{"__ignoreMap":23},[28,27465,27466,27469,27471,27474],{"class":30,"line":31},[28,27467,27468],{"class":34},"--net",[28,27470,39],{"class":38},[28,27472,27473],{"class":320},"host",[28,27475,24756],{"class":2040},[14,27477,27478],{},"启动参数里加上这行即可。具体在下方",[14,27480,27481],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1211,27483,27484,27487,27490,27493],{},[174,27485,27486],{},"--net=bridge:默认选项，表示连接到默认的网桥",[174,27488,27489],{},"--net=host:容器使用宿主机的网络",[174,27491,27492],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[174,27494,27495],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[136,27497,27498],{},"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":23,"searchDepth":94,"depth":94,"links":27500},[27501,27502,27503,27504],{"id":26815,"depth":109,"text":26816},{"id":26882,"depth":109,"text":26883},{"id":27334,"depth":109,"text":27335},{"id":27454,"depth":109,"text":27455},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26804,"description":26812},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27511,"title":27512,"body":27513,"description":27520,"extension":142,"meta":27526,"navigation":144,"path":27527,"seo":27528,"stem":27529,"__hash__":27530},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27514,"toc":27524},[27515,27518,27521],[10,27516,27512],{"id":27517},"_4dockerhub换源",[14,27519,27520],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27522,27523],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":23,"searchDepth":94,"depth":94,"links":27525},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27512,"description":27520},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27532,"title":27533,"body":27534,"description":23,"extension":142,"meta":28546,"navigation":144,"path":28547,"seo":28548,"stem":28549,"__hash__":28550},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27535,"toc":28541},[27536,27539,27543,27549,27553,27556,27896,27899,27902,27905,27910,27915,27918,27921,27924,27927,27946,27949,27960,27966,28148,28158,28174,28437,28439,28464,28479,28488,28538],[10,27537,27533],{"id":27538},"_5docker命令学习",[188,27540,27542],{"id":27541},"_51参考文档","5.1.参考文档",[14,27544,27545],{},[35,27546,27547],{"href":27547,"rel":27548},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23942],[188,27550,27552],{"id":27551},"_52常用命令","5.2.常用命令",[14,27554,27555],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[353,27557,27558,27571],{},[356,27559,27560],{},[359,27561,27562,27565,27568],{},[362,27563,27564],{"align":23813},"命令",[362,27566,27567],{"align":23813},"描述",[362,27569,27570],{"align":23813},"示例",[400,27572,27573,27584,27595,27606,27617,27628,27639,27650,27660,27671,27682,27693,27703,27714,27725,27736,27746,27756,27766,27776,27787,27798,27809,27820,27831,27842,27852,27863,27874,27885],{},[359,27574,27575,27578,27581],{},[405,27576,27577],{"align":23813},"docker run",[405,27579,27580],{"align":23813},"创建并启动一个新的容器。",[405,27582,27583],{"align":23813},"docker run -it ubuntu bash",[359,27585,27586,27589,27592],{},[405,27587,27588],{"align":23813},"docker build",[405,27590,27591],{"align":23813},"通过指定的 Dockerfile 创建一个新的镜像。",[405,27593,27594],{"align":23813},"docker build -t myimage .",[359,27596,27597,27600,27603],{},[405,27598,27599],{"align":23813},"docker pull",[405,27601,27602],{"align":23813},"从 Docker 仓库拉取镜像。",[405,27604,27605],{"align":23813},"docker pull ubuntu",[359,27607,27608,27611,27614],{},[405,27609,27610],{"align":23813},"docker push",[405,27612,27613],{"align":23813},"将本地镜像推送到 Docker 仓库。",[405,27615,27616],{"align":23813},"docker push myimage",[359,27618,27619,27622,27625],{},[405,27620,27621],{"align":23813},"docker stop",[405,27623,27624],{"align":23813},"停止一个正在运行的容器。",[405,27626,27627],{"align":23813},"docker stop container_id",[359,27629,27630,27633,27636],{},[405,27631,27632],{"align":23813},"docker start",[405,27634,27635],{"align":23813},"启动一个已经存在的容器。",[405,27637,27638],{"align":23813},"docker start container_id",[359,27640,27641,27644,27647],{},[405,27642,27643],{"align":23813},"docker restart",[405,27645,27646],{"align":23813},"重新启动容器。",[405,27648,27649],{"align":23813},"docker restart container_id",[359,27651,27652,27655,27658],{},[405,27653,27654],{"align":23813},"docker ps",[405,27656,27657],{"align":23813},"列出当前正在运行的容器。",[405,27659,27654],{"align":23813},[359,27661,27662,27665,27668],{},[405,27663,27664],{"align":23813},"docker rm",[405,27666,27667],{"align":23813},"删除一个或多个停止的容器。",[405,27669,27670],{"align":23813},"docker rm container_id",[359,27672,27673,27676,27679],{},[405,27674,27675],{"align":23813},"docker exec",[405,27677,27678],{"align":23813},"在一个正在运行的容器中执行命令。",[405,27680,27681],{"align":23813},"docker exec -it container_id bash",[359,27683,27684,27687,27690],{},[405,27685,27686],{"align":23813},"docker logs",[405,27688,27689],{"align":23813},"查看容器的日志输出。",[405,27691,27692],{"align":23813},"docker logs container_id",[359,27694,27695,27698,27701],{},[405,27696,27697],{"align":23813},"docker images",[405,27699,27700],{"align":23813},"列出本地所有镜像。",[405,27702,27697],{"align":23813},[359,27704,27705,27708,27711],{},[405,27706,27707],{"align":23813},"docker rmi",[405,27709,27710],{"align":23813},"删除一个或多个镜像。",[405,27712,27713],{"align":23813},"docker rmi myimage",[359,27715,27716,27719,27722],{},[405,27717,27718],{"align":23813},"docker network",[405,27720,27721],{"align":23813},"管理 Docker 网络。",[405,27723,27724],{"align":23813},"docker network ls",[359,27726,27727,27730,27733],{},[405,27728,27729],{"align":23813},"docker volume",[405,27731,27732],{"align":23813},"管理 Docker 数据卷。",[405,27734,27735],{"align":23813},"docker volume ls",[359,27737,27738,27741,27744],{},[405,27739,27740],{"align":23813},"docker-compose up",[405,27742,27743],{"align":23813},"启动 docker-compose.yml 中定义的所有服务。",[405,27745,27740],{"align":23813},[359,27747,27748,27751,27754],{},[405,27749,27750],{"align":23813},"docker-compose down",[405,27752,27753],{"align":23813},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[405,27755,27750],{"align":23813},[359,27757,27758,27761,27764],{},[405,27759,27760],{"align":23813},"docker info",[405,27762,27763],{"align":23813},"显示 Docker 系统的详细信息。",[405,27765,27760],{"align":23813},[359,27767,27768,27771,27774],{},[405,27769,27770],{"align":23813},"docker stats",[405,27772,27773],{"align":23813},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[405,27775,27770],{"align":23813},[359,27777,27778,27781,27784],{},[405,27779,27780],{"align":23813},"docker inspect",[405,27782,27783],{"align":23813},"查看容器或镜像的详细信息（JSON 格式）。",[405,27785,27786],{"align":23813},"docker inspect container_id",[359,27788,27789,27792,27795],{},[405,27790,27791],{"align":23813},"docker save",[405,27793,27794],{"align":23813},"将一个镜像保存为 tar 文件。",[405,27796,27797],{"align":23813},"docker save -o myimage.tar myimage",[359,27799,27800,27803,27806],{},[405,27801,27802],{"align":23813},"docker load",[405,27804,27805],{"align":23813},"从 tar 文件中加载镜像。",[405,27807,27808],{"align":23813},"docker load -i myimage.tar",[359,27810,27811,27814,27817],{},[405,27812,27813],{"align":23813},"docker tag",[405,27815,27816],{"align":23813},"为镜像添加标签（tag）。",[405,27818,27819],{"align":23813},"docker tag myimage myimage:v1",[359,27821,27822,27825,27828],{},[405,27823,27824],{"align":23813},"docker buildx build",[405,27826,27827],{"align":23813},"使用 Buildx 构建多架构镜像。",[405,27829,27830],{"align":23813},"docker buildx build -t myimage .",[359,27832,27833,27836,27839],{},[405,27834,27835],{"align":23813},"docker buildx create",[405,27837,27838],{"align":23813},"创建一个新的 Buildx 构建实例。",[405,27840,27841],{"align":23813},"docker buildx create –use",[359,27843,27844,27847,27850],{},[405,27845,27846],{"align":23813},"docker buildx ls",[405,27848,27849],{"align":23813},"列出所有可用的 Buildx 构建实例。",[405,27851,27846],{"align":23813},[359,27853,27854,27857,27860],{},[405,27855,27856],{"align":23813},"docker buildx use",[405,27858,27859],{"align":23813},"设置当前的 Buildx 构建实例。",[405,27861,27862],{"align":23813},"docker buildx use mybuilder",[359,27864,27865,27868,27871],{},[405,27866,27867],{"align":23813},"docker buildx bake",[405,27869,27870],{"align":23813},"使用 Bake 文件批量构建镜像。",[405,27872,27873],{"align":23813},"docker buildx bake -f bake.hcl",[359,27875,27876,27879,27882],{},[405,27877,27878],{"align":23813},"docker buildx build –push",[405,27880,27881],{"align":23813},"构建镜像并推送到镜像仓库。",[405,27883,27884],{"align":23813},"docker buildx build –push -t myimage .",[359,27886,27887,27890,27893],{},[405,27888,27889],{"align":23813},"docker buildx build –platform",[405,27891,27892],{"align":23813},"构建镜像并为多个平台生成支持。",[405,27894,27895],{"align":23813},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27897,27898],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27900,27901],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27903,27904],{},"docker images 可以查看已经下载的镜像",[14,27906,27907],{},[1539,27908],{"alt":23,"src":27909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27911,27912],{},[365,27913,27914],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27916,27917],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27919,27920],{},"docker container logs 查看容器日志",[14,27922,27923],{},"docker top 查看容器里的进程",[14,27925,27926],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[18,27928,27930],{"className":23899,"code":27929,"language":23901,"meta":23,"style":23},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[25,27931,27932],{"__ignoreMap":23},[28,27933,27934,27937,27940,27943],{"class":30,"line":31},[28,27935,27936],{"class":2040},"如：docker",[28,27938,27939],{"class":320}," cp",[28,27941,27942],{"class":320}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[28,27944,27945],{"class":320}," \u002Fmydata\u002Fnginx\n",[14,27947,27948],{},"docker run时在启动容器的时候会有几个常用的选项：",[1211,27950,27951,27954,27957],{},[174,27952,27953],{},"-d选项：表示后台运行",[174,27955,27956],{},"-P选项：随机端口映射",[174,27958,27959],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[188,27961,27963],{"id":27962},"_53run命令的参数非常重要",[365,27964,27965],{},"5.3.run命令的参数（非常重要）",[353,27967,27968,27981],{},[356,27969,27970],{},[359,27971,27972,27975,27978],{},[362,27973,27974],{"align":23813},"参数\u002F配置",[362,27976,27977],{"align":23813},"功能说明",[362,27979,27980],{"align":23813},"重要性与参考依据",[400,27982,27983,27994,28005,28016,28027,28038,28049,28060,28071,28082,28093,28104,28115,28126,28137],{},[359,27984,27985,27988,27991],{},[405,27986,27987],{"align":23813},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[405,27989,27990],{"align":23813},"指定容器名称，便于后续管理",[405,27992,27993],{"align":23813},"替代随机生成的容器名。",[359,27995,27996,27999,28002],{},[405,27997,27998],{"align":23813},"–gpus all",[405,28000,28001],{"align":23813},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[405,28003,28004],{"align":23813},"用于CUDA加速等GPU依赖任务。",[359,28006,28007,28010,28013],{},[405,28008,28009],{"align":23813},"-e NVIDIA_DRIVER_CAPABILITIES=all",[405,28011,28012],{"align":23813},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[405,28014,28015],{"align":23813},"确保容器内GPU功能完整67。",[359,28017,28018,28021,28024],{},[405,28019,28020],{"align":23813},"-dit",[405,28022,28023],{"align":23813},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[405,28025,28026],{"align":23813},"允许容器在后台运行并支持交互操作。",[359,28028,28029,28032,28035],{},[405,28030,28031],{"align":23813},"–privileged",[405,28033,28034],{"align":23813},"赋予容器完全主机权限（可访问设备、内核模块等）",[405,28036,28037],{"align":23813},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[359,28039,28040,28043,28046],{},[405,28041,28042],{"align":23813},"–net=host",[405,28044,28045],{"align":23813},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[405,28047,28048],{"align":23813},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[359,28050,28051,28054,28057],{},[405,28052,28053],{"align":23813},"–group-add audio–group-add video–group-add dialout",[405,28055,28056],{"align":23813},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[405,28058,28059],{"align":23813},"避免权限问题（如避免无法调用摄像头、麦克风）。",[359,28061,28062,28065,28068],{},[405,28063,28064],{"align":23813},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[405,28066,28067],{"align":23813},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[405,28069,28070],{"align":23813},"支持容器内运行图形界面应用（如OpenCV可视化）。",[359,28072,28073,28076,28079],{},[405,28074,28075],{"align":23813},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[405,28077,28078],{"align":23813},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[405,28080,28081],{"align":23813},"实现容器内图形显示。",[359,28083,28084,28087,28090],{},[405,28085,28086],{"align":23813},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[405,28088,28089],{"align":23813},"挂载X11认证文件（只读）",[405,28091,28092],{"align":23813},"确保容器有权连接宿主机显示服务。",[359,28094,28095,28098,28101],{},[405,28096,28097],{"align":23813},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[405,28099,28100],{"align":23813},"挂载Wayland显示协议相关目录",[405,28102,28103],{"align":23813},"支持Wayland协议的图形显示。",[359,28105,28106,28109,28112],{},[405,28107,28108],{"align":23813},"–ulimit nofile=1024:524288",[405,28110,28111],{"align":23813},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[405,28113,28114],{"align":23813},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[359,28116,28117,28120,28123],{},[405,28118,28119],{"align":23813},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[405,28121,28122],{"align":23813},"挂载宿主机用户目录到容器内同名路径",[405,28124,28125],{"align":23813},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[359,28127,28128,28131,28134],{},[405,28129,28130],{"align":23813},"-w \u002Fhome\u002Ftungchiahui",[405,28132,28133],{"align":23813},"设置容器启动后的默认工作目录",[405,28135,28136],{"align":23813},"直接进入项目路径，方便执行命令2324。",[359,28138,28139,28142,28145],{},[405,28140,28141],{"align":23813},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[405,28143,28144],{"align":23813},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[405,28146,28147],{"align":23813},"提供预配置的深度学习与机器人开发环境。",[14,28149,28150,28151,28153,28154,28157],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[25,28152,24654],{},"加不加",[25,28155,28156],{},"sudo -E","都无所谓。",[14,28159,28160,28161,28163,28164,28166,28167,28170,28171,28173],{},"用户已经被加到docker组了，不用",[25,28162,24654],{},"也行跑，其次，",[25,28165,24654],{},"运行的话，你的",[25,28168,28169],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[25,28172,28169],{},"更不可能变了。",[18,28175,28177],{"className":23899,"code":28176,"language":23901,"meta":23,"style":23},"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",[25,28178,28179,28192,28202,28212,28224,28231,28238,28245,28255,28264,28273,28287,28299,28311,28320,28330,28339,28354,28387,28414,28425,28432],{"__ignoreMap":23},[28,28180,28181,28183,28185,28187,28190],{"class":30,"line":31},[28,28182,24654],{"class":2040},[28,28184,26398],{"class":320},[28,28186,27308],{"class":320},[28,28188,28189],{"class":45}," --name=ros_opencv_cuda",[28,28191,24756],{"class":45},[28,28193,28194,28197,28200],{"class":30,"line":94},[28,28195,28196],{"class":34},"--gpus ",[28,28198,28199],{"class":320},"all",[28,28201,24756],{"class":45},[28,28203,28204,28207,28210],{"class":30,"line":109},[28,28205,28206],{"class":34},"-e ",[28,28208,28209],{"class":320},"NVIDIA_DRIVER_CAPABILITIES=all",[28,28211,24756],{"class":45},[28,28213,28214,28216,28219,28222],{"class":30,"line":125},[28,28215,28206],{"class":34},[28,28217,28218],{"class":320},"DISPLAY=",[28,28220,28221],{"class":34},"$DISPLAY ",[28,28223,26253],{"class":45},[28,28225,28226,28229],{"class":30,"line":131},[28,28227,28228],{"class":34},"-dit ",[28,28230,26253],{"class":45},[28,28232,28233,28236],{"class":30,"line":1291},[28,28234,28235],{"class":34},"--privileged ",[28,28237,26253],{"class":45},[28,28239,28240,28243],{"class":30,"line":1297},[28,28241,28242],{"class":34},"--net=host ",[28,28244,26253],{"class":45},[28,28246,28247,28250,28253],{"class":30,"line":1388},[28,28248,28249],{"class":34},"--group-add ",[28,28251,28252],{"class":320},"audio",[28,28254,24756],{"class":45},[28,28256,28257,28259,28262],{"class":30,"line":1394},[28,28258,28249],{"class":34},[28,28260,28261],{"class":320},"video",[28,28263,24756],{"class":45},[28,28265,28266,28268,28271],{"class":30,"line":1406},[28,28267,28249],{"class":34},[28,28269,28270],{"class":320},"dialout",[28,28272,24756],{"class":45},[28,28274,28275,28277,28280,28282,28285],{"class":30,"line":1689},[28,28276,28206],{"class":34},[28,28278,28279],{"class":320},"XAUTHORITY=",[28,28281,28169],{"class":34},[28,28283,28284],{"class":320},"\u002F.Xauthority",[28,28286,24756],{"class":45},[28,28288,28289,28291,28294,28297],{"class":30,"line":1694},[28,28290,28206],{"class":34},[28,28292,28293],{"class":320},"WAYLAND_DISPLAY=",[28,28295,28296],{"class":34},"$WAYLAND_DISPLAY ",[28,28298,26253],{"class":45},[28,28300,28301,28303,28306,28309],{"class":30,"line":1700},[28,28302,28206],{"class":34},[28,28304,28305],{"class":320},"XDG_RUNTIME_DIR=",[28,28307,28308],{"class":34},"$XDG_RUNTIME_DIR ",[28,28310,26253],{"class":45},[28,28312,28313,28315,28318],{"class":30,"line":1705},[28,28314,28206],{"class":34},[28,28316,28317],{"class":320},"QT_QPA_PLATFORM=xcb",[28,28319,24756],{"class":45},[28,28321,28322,28325,28328],{"class":30,"line":1719},[28,28323,28324],{"class":34},"-v ",[28,28326,28327],{"class":320},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[28,28329,24756],{"class":45},[28,28331,28332,28334,28337],{"class":30,"line":1724},[28,28333,28324],{"class":34},[28,28335,28336],{"class":320},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[28,28338,24756],{"class":45},[28,28340,28341,28344,28347,28349,28352],{"class":30,"line":1730},[28,28342,28343],{"class":34},"-v $HOME",[28,28345,28346],{"class":320},"\u002F.Xauthority:",[28,28348,28169],{"class":34},[28,28350,28351],{"class":320},"\u002F.Xauthority:ro",[28,28353,24756],{"class":45},[28,28355,28356,28358,28361,28363,28366,28369,28371,28374,28376,28378,28380,28382,28385],{"class":30,"line":1751},[28,28357,28324],{"class":34},[28,28359,28360],{"class":320},"\u002Frun\u002Fuser\u002F",[28,28362,25177],{"class":34},[28,28364,28365],{"class":2040},"id",[28,28367,28368],{"class":45}," -u",[28,28370,642],{"class":34},[28,28372,28373],{"class":320},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[28,28375,25177],{"class":34},[28,28377,28365],{"class":2040},[28,28379,28368],{"class":45},[28,28381,642],{"class":34},[28,28383,28384],{"class":320},"\u002Fwayland-0",[28,28386,24756],{"class":45},[28,28388,28389,28391,28393,28395,28397,28399,28401,28404,28406,28408,28410,28412],{"class":30,"line":1756},[28,28390,28324],{"class":34},[28,28392,28360],{"class":320},[28,28394,25177],{"class":34},[28,28396,28365],{"class":2040},[28,28398,28368],{"class":45},[28,28400,642],{"class":34},[28,28402,28403],{"class":320},":\u002Frun\u002Fuser\u002F",[28,28405,25177],{"class":34},[28,28407,28365],{"class":2040},[28,28409,28368],{"class":45},[28,28411,13791],{"class":34},[28,28413,26253],{"class":45},[28,28415,28416,28418,28420,28423],{"class":30,"line":1770},[28,28417,28343],{"class":34},[28,28419,1065],{"class":320},[28,28421,28422],{"class":34},"$HOME ",[28,28424,26253],{"class":45},[28,28426,28427,28430],{"class":30,"line":1775},[28,28428,28429],{"class":34},"-w $HOME ",[28,28431,26253],{"class":45},[28,28433,28434],{"class":30,"line":1804},[28,28435,28436],{"class":34},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28438,9102],{},[171,28440,28441,28449,28452,28455],{},[174,28442,28443,13872,28445,28448],{},[25,28444,28209],{},[25,28446,28447],{},"--gpus all","没有英伟达显卡请注释。",[174,28450,28451],{},"--name后面请自己为容器起名。",[174,28453,28454],{},"最后一行仓库名称请你自己找对应的镜像填上。",[174,28456,28457,28458,28463],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23630,28459,28460],{},[365,28461,28462],{},"请不要加","。",[18,28465,28467],{"className":23899,"code":28466,"language":23901,"meta":23,"style":23},"--ulimit nofile=1024:524288 \\\n",[25,28468,28469],{"__ignoreMap":23},[28,28470,28471,28474,28477],{"class":30,"line":31},[28,28472,28473],{"class":2040},"--ulimit",[28,28475,28476],{"class":320}," nofile=1024:524288",[28,28478,24756],{"class":45},[14,28480,28481,28482,28487],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23630,28483,28484],{},[365,28485,28486],{},"不建议","**.**",[18,28489,28491],{"className":23899,"code":28490,"language":23901,"meta":23,"style":23},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[25,28492,28493,28520,28529],{"__ignoreMap":23},[28,28494,28495,28498,28501,28503,28505,28507,28509,28511,28513,28516,28518],{"class":30,"line":31},[28,28496,28497],{"class":2040},"--user",[28,28499,28500],{"class":34}," $(",[28,28502,28365],{"class":2040},[28,28504,28368],{"class":45},[28,28506,642],{"class":34},[28,28508,1065],{"class":320},[28,28510,25177],{"class":34},[28,28512,28365],{"class":2040},[28,28514,28515],{"class":45}," -g",[28,28517,13791],{"class":34},[28,28519,26253],{"class":45},[28,28521,28522,28524,28527],{"class":30,"line":94},[28,28523,28324],{"class":34},[28,28525,28526],{"class":320},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[28,28528,24756],{"class":45},[28,28530,28531,28533,28536],{"class":30,"line":109},[28,28532,28324],{"class":34},[28,28534,28535],{"class":320},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[28,28537,24756],{"class":45},[136,28539,28540],{},"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":23,"searchDepth":94,"depth":94,"links":28542},[28543,28544,28545],{"id":27541,"depth":109,"text":27542},{"id":27551,"depth":109,"text":27552},{"id":27962,"depth":109,"text":27965},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27533,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28552,"title":28553,"body":28554,"description":23,"extension":142,"meta":30177,"navigation":144,"path":30178,"seo":30179,"stem":30180,"__hash__":30181},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28555,"toc":30172},[28556,28559,28563,28566,28788,28792,28796,28799,28905,28910,28913,28918,28921,28926,28929,28934,28937,28949,28952,28957,28964,28992,28999,29075,29080,29083,29106,29108,29183,29188,29191,29195,29203,29208,29213,29217,29228,29234,29237,29240,29264,29267,29270,29298,29301,29304,29769,29772,29777,29782,29786,29809,29814,29818,29822,29825,29828,29831,29858,29861,29864,29882,29885,29888,29910,29918,29923,29928,29932,29935,29938,29941,29944,29989,29992,30010,30013,30018,30021,30042,30045,30101,30104,30109,30113,30116,30123,30126,30129,30134,30137,30153,30156,30169],[10,28557,28553],{"id":28558},"_6手动创建docker镜像",[188,28560,28562],{"id":28561},"_61dockerfile","6.1.DockerFile",[14,28564,28565],{},"常用命令：",[353,28567,28568,28579],{},[356,28569,28570],{},[359,28571,28572,28575,28577],{},[362,28573,28574],{"align":23813},"指令",[362,28576,25947],{"align":23813},[362,28578,27570],{"align":23813},[400,28580,28581,28591,28607,28618,28629,28640,28651,28662,28673,28687,28701,28712,28726,28737,28748,28762,28777],{},[359,28582,28583,28585,28588],{},[405,28584,27448],{"align":23813},[405,28586,28587],{"align":23813},"指定基础镜像，是 Dockerfile 的起点",[405,28589,28590],{"align":23813},"FROM ubuntu:22.04",[359,28592,28593,28596,28599],{},[405,28594,28595],{"align":23813},"LABEL",[405,28597,28598],{"align":23813},"添加元数据（如作者、版本等）",[405,28600,28601,28602,28606],{"align":23813},"LABEL maintainer=”",[35,28603,28605],{"href":28604},"mailto:you@example.com","you@example.com","”",[359,28608,28609,28612,28615],{},[405,28610,28611],{"align":23813},"ENV",[405,28613,28614],{"align":23813},"设置环境变量",[405,28616,28617],{"align":23813},"ENV PORT=8080",[359,28619,28620,28623,28626],{},[405,28621,28622],{"align":23813},"ARG",[405,28624,28625],{"align":23813},"构建参数，只在构建期间可用",[405,28627,28628],{"align":23813},"ARG VERSION=1.0",[359,28630,28631,28634,28637],{},[405,28632,28633],{"align":23813},"RUN",[405,28635,28636],{"align":23813},"构建镜像时运行命令",[405,28638,28639],{"align":23813},"RUN apt-get update && apt-get install -y curl",[359,28641,28642,28645,28648],{},[405,28643,28644],{"align":23813},"COPY",[405,28646,28647],{"align":23813},"复制文件到镜像中",[405,28649,28650],{"align":23813},"COPY . \u002Fapp",[359,28652,28653,28656,28659],{},[405,28654,28655],{"align":23813},"ADD",[405,28657,28658],{"align":23813},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[405,28660,28661],{"align":23813},"ADD archive.tar.gz \u002Fdata\u002F",[359,28663,28664,28667,28670],{},[405,28665,28666],{"align":23813},"WORKDIR",[405,28668,28669],{"align":23813},"设置工作目录",[405,28671,28672],{"align":23813},"WORKDIR \u002Fopt",[359,28674,28675,28678,28681],{},[405,28676,28677],{"align":23813},"CMD",[405,28679,28680],{"align":23813},"设置容器启动时默认命令（可被 docker run 覆盖）",[405,28682,28683,28684],{"align":23813},"CMD ",[28,28685,28686],{},"“node”, “index.js”",[359,28688,28689,28692,28695],{},[405,28690,28691],{"align":23813},"ENTRYPOINT",[405,28693,28694],{"align":23813},"设置容器启动时固定命令（通常用于 CLI 工具等）",[405,28696,28697,28698],{"align":23813},"ENTRYPOINT ",[28,28699,28700],{},"“python3”",[359,28702,28703,28706,28709],{},[405,28704,28705],{"align":23813},"EXPOSE",[405,28707,28708],{"align":23813},"声明镜像内服务监听的端口（不会自动映射）",[405,28710,28711],{"align":23813},"EXPOSE 80",[359,28713,28714,28717,28720],{},[405,28715,28716],{"align":23813},"VOLUME",[405,28718,28719],{"align":23813},"声明数据卷挂载点",[405,28721,28722,28723],{"align":23813},"VOLUME ",[28,28724,28725],{},"“\u002Fdata”",[359,28727,28728,28731,28734],{},[405,28729,28730],{"align":23813},"USER",[405,28732,28733],{"align":23813},"设置后续命令执行的用户",[405,28735,28736],{"align":23813},"USER appuser",[359,28738,28739,28742,28745],{},[405,28740,28741],{"align":23813},"ONBUILD",[405,28743,28744],{"align":23813},"当镜像作为其他镜像基础镜像时触发的构建指令",[405,28746,28747],{"align":23813},"ONBUILD COPY . \u002Fsrc",[359,28749,28750,28753,28756],{},[405,28751,28752],{"align":23813},"SHELL",[405,28754,28755],{"align":23813},"更改默认 shell，比如将 sh -c 改为 bash -c",[405,28757,28758,28759],{"align":23813},"SHELL ",[28,28760,28761],{},"“\u002Fbin\u002Fbash”, “-c”",[359,28763,28764,28767,28770],{},[405,28765,28766],{"align":23813},"HEALTHCHECK",[405,28768,28769],{"align":23813},"定义容器运行时的健康检查命令",[405,28771,28772,28773],{"align":23813},"`HEALTHCHECK CMD curl –fail ",[35,28774,28775],{"href":28775,"rel":28776},"http:\u002F\u002Flocalhost:8080",[23942],[359,28778,28779,28782,28785],{},[405,28780,28781],{"align":23813},"STOPSIGNAL",[405,28783,28784],{"align":23813},"容器停止时发送的信号",[405,28786,28787],{"align":23813},"STOPSIGNAL SIGKILL",[188,28789,28791],{"id":28790},"_62自己创建容器","6.2.自己创建容器",[22075,28793,28795],{"id":28794},"_621手动创建","6.2.1.手动创建",[14,28797,28798],{},"在x86电脑上编译x86的：",[18,28800,28802],{"className":23899,"code":28801,"language":23901,"meta":23,"style":23},"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",[25,28803,28804,28820,28824,28837,28841,28854,28858,28871,28875,28888,28892],{"__ignoreMap":23},[28,28805,28806,28808,28811,28814,28817],{"class":30,"line":31},[28,28807,26631],{"class":2040},[28,28809,28810],{"class":320}," build",[28,28812,28813],{"class":45}," -t",[28,28815,28816],{"class":320}," ros-melodic-cuda118-cudnn8-bionic:latest",[28,28818,28819],{"class":320}," .\n",[28,28821,28822],{"class":30,"line":94},[28,28823,2477],{"emptyLinePlaceholder":144},[28,28825,28826,28828,28830,28832,28835],{"class":30,"line":109},[28,28827,26631],{"class":2040},[28,28829,28810],{"class":320},[28,28831,28813],{"class":45},[28,28833,28834],{"class":320}," ros-noetic-focal:latest",[28,28836,28819],{"class":320},[28,28838,28839],{"class":30,"line":125},[28,28840,2477],{"emptyLinePlaceholder":144},[28,28842,28843,28845,28847,28849,28852],{"class":30,"line":131},[28,28844,26631],{"class":2040},[28,28846,28810],{"class":320},[28,28848,28813],{"class":45},[28,28850,28851],{"class":320}," ros-humble-jammy:latest",[28,28853,28819],{"class":320},[28,28855,28856],{"class":30,"line":1291},[28,28857,2477],{"emptyLinePlaceholder":144},[28,28859,28860,28862,28864,28866,28869],{"class":30,"line":1297},[28,28861,26631],{"class":2040},[28,28863,28810],{"class":320},[28,28865,28813],{"class":45},[28,28867,28868],{"class":320}," ros-jazzy-noble:latest",[28,28870,28819],{"class":320},[28,28872,28873],{"class":30,"line":1388},[28,28874,2477],{"emptyLinePlaceholder":144},[28,28876,28877,28879,28881,28883,28886],{"class":30,"line":1394},[28,28878,26631],{"class":2040},[28,28880,28810],{"class":320},[28,28882,28813],{"class":45},[28,28884,28885],{"class":320}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[28,28887,28819],{"class":320},[28,28889,28890],{"class":30,"line":1406},[28,28891,2477],{"emptyLinePlaceholder":144},[28,28893,28894,28896,28898,28900,28903],{"class":30,"line":1689},[28,28895,26631],{"class":2040},[28,28897,28810],{"class":320},[28,28899,28813],{"class":45},[28,28901,28902],{"class":320}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[28,28904,28819],{"class":320},[14,28906,28907],{},[1539,28908],{"alt":23,"src":28909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28911,28912],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28914,28915],{},[1539,28916],{"alt":23,"src":28917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28919,28920],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[171,28922,28923],{},[174,28924,28925],{},"创建 Docker Hub 账户",[14,28927,28928],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[171,28930,28931],{"start":94},[174,28932,28933],{},"登录 Docker Hub",[14,28935,28936],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[18,28938,28940],{"className":23899,"code":28939,"language":23901,"meta":23,"style":23},"docker login\n",[25,28941,28942],{"__ignoreMap":23},[28,28943,28944,28946],{"class":30,"line":31},[28,28945,26631],{"class":2040},[28,28947,28948],{"class":320}," login\n",[14,28950,28951],{},"输入你的 Docker Hub 用户名和密码进行验证。",[171,28953,28954],{},[174,28955,28956],{},"为你的镜像打标签",[14,28958,28959,28960,28963],{},"Docker Hub 使用 ",[25,28961,28962],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[18,28965,28967],{"className":23899,"code":28966,"language":23901,"meta":23,"style":23},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[25,28968,28969],{"__ignoreMap":23},[28,28970,28971,28973,28976,28978,28981,28984,28987,28989],{"class":30,"line":31},[28,28972,26631],{"class":2040},[28,28974,28975],{"class":320}," tag",[28,28977,28868],{"class":320},[28,28979,28980],{"class":38}," \u003C",[28,28982,28983],{"class":320},"你的用户",[28,28985,28986],{"class":34},"名",[28,28988,1164],{"class":38},[28,28990,28991],{"class":320},"\u002Fros-jazzy-noble:latest\n",[14,28993,28994,28995,28998],{},"例如，如果你的 Docker Hub 用户名是 ",[25,28996,28997],{},"tungchiahui","，你应该执行：",[18,29000,29002],{"className":23899,"code":29001,"language":23901,"meta":23,"style":23},"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",[25,29003,29004,29015,29019,29030,29034,29045,29049,29060,29064],{"__ignoreMap":23},[28,29005,29006,29008,29010,29012],{"class":30,"line":31},[28,29007,26631],{"class":2040},[28,29009,28975],{"class":320},[28,29011,28834],{"class":320},[28,29013,29014],{"class":320}," tungchiahui\u002Fros-noetic-focal:latest\n",[28,29016,29017],{"class":30,"line":94},[28,29018,2477],{"emptyLinePlaceholder":144},[28,29020,29021,29023,29025,29027],{"class":30,"line":109},[28,29022,26631],{"class":2040},[28,29024,28975],{"class":320},[28,29026,28851],{"class":320},[28,29028,29029],{"class":320}," tungchiahui\u002Fros-humble-jammy:latest\n",[28,29031,29032],{"class":30,"line":125},[28,29033,2477],{"emptyLinePlaceholder":144},[28,29035,29036,29038,29040,29042],{"class":30,"line":131},[28,29037,26631],{"class":2040},[28,29039,28975],{"class":320},[28,29041,28868],{"class":320},[28,29043,29044],{"class":320}," tungchiahui\u002Fros-jazzy-noble:latest\n",[28,29046,29047],{"class":30,"line":1291},[28,29048,2477],{"emptyLinePlaceholder":144},[28,29050,29051,29053,29055,29057],{"class":30,"line":1297},[28,29052,26631],{"class":2040},[28,29054,28975],{"class":320},[28,29056,28885],{"class":320},[28,29058,29059],{"class":320}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29061,29062],{"class":30,"line":1388},[28,29063,2477],{"emptyLinePlaceholder":144},[28,29065,29066,29068,29070,29072],{"class":30,"line":1394},[28,29067,26631],{"class":2040},[28,29069,28975],{"class":320},[28,29071,28902],{"class":320},[28,29073,29074],{"class":320}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[171,29076,29077],{"start":94},[174,29078,29079],{},"推送镜像到 Docker Hub",[14,29081,29082],{},"使用以下命令将镜像推送到 Docker Hub：",[18,29084,29086],{"className":23899,"code":29085,"language":23901,"meta":23,"style":23},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[25,29087,29088],{"__ignoreMap":23},[28,29089,29090,29092,29095,29097,29099,29101,29103],{"class":30,"line":31},[28,29091,26631],{"class":2040},[28,29093,29094],{"class":320}," push",[28,29096,28980],{"class":38},[28,29098,28983],{"class":320},[28,29100,28986],{"class":34},[28,29102,1164],{"class":38},[28,29104,29105],{"class":320},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29107,14710],{},[18,29109,29111],{"className":23899,"code":29110,"language":23901,"meta":23,"style":23},"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",[25,29112,29113,29121,29125,29133,29137,29145,29149,29158,29162,29170,29174],{"__ignoreMap":23},[28,29114,29115,29117,29119],{"class":30,"line":31},[28,29116,26631],{"class":2040},[28,29118,29094],{"class":320},[28,29120,29014],{"class":320},[28,29122,29123],{"class":30,"line":94},[28,29124,2477],{"emptyLinePlaceholder":144},[28,29126,29127,29129,29131],{"class":30,"line":109},[28,29128,26631],{"class":2040},[28,29130,29094],{"class":320},[28,29132,29029],{"class":320},[28,29134,29135],{"class":30,"line":125},[28,29136,2477],{"emptyLinePlaceholder":144},[28,29138,29139,29141,29143],{"class":30,"line":131},[28,29140,26631],{"class":2040},[28,29142,29094],{"class":320},[28,29144,29044],{"class":320},[28,29146,29147],{"class":30,"line":1291},[28,29148,2477],{"emptyLinePlaceholder":144},[28,29150,29151,29153,29155],{"class":30,"line":1297},[28,29152,26631],{"class":2040},[28,29154,29094],{"class":320},[28,29156,29157],{"class":320}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29159,29160],{"class":30,"line":1388},[28,29161,2477],{"emptyLinePlaceholder":144},[28,29163,29164,29166,29168],{"class":30,"line":1394},[28,29165,26631],{"class":2040},[28,29167,29094],{"class":320},[28,29169,29074],{"class":320},[28,29171,29172],{"class":30,"line":1406},[28,29173,2477],{"emptyLinePlaceholder":144},[28,29175,29176,29178,29180],{"class":30,"line":1689},[28,29177,26631],{"class":2040},[28,29179,29094],{"class":320},[28,29181,29182],{"class":320}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[171,29184,29185],{"start":109},[174,29186,29187],{},"验证推送成功",[14,29189,29190],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29192,29193],{},[365,29194,3861],{},[1211,29196,29197,29200],{},[174,29198,29199],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[174,29201,29202],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29204,29205],{},[1539,29206],{"alt":23,"src":29207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29209,29210],{},[1539,29211],{"alt":23,"src":29212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22075,29214,29216],{"id":29215},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29218,29219,29220,29223,29224,29227],{},"如果您想在 ",[365,29221,29222],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[365,29225,29226],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29229,29230,29231],{},"1. ",[365,29232,29233],{},"启用 Docker 跨平台构建",[14,29235,29236],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29238,29239],{},"第一步：启用 buildx（只需执行一次）",[18,29241,29243],{"className":23899,"code":29242,"language":23901,"meta":23,"style":23},"docker buildx create --name multiarch_builder --use\n",[25,29244,29245],{"__ignoreMap":23},[28,29246,29247,29249,29252,29255,29258,29261],{"class":30,"line":31},[28,29248,26631],{"class":2040},[28,29250,29251],{"class":320}," buildx",[28,29253,29254],{"class":320}," create",[28,29256,29257],{"class":45}," --name",[28,29259,29260],{"class":320}," multiarch_builder",[28,29262,29263],{"class":45}," --use\n",[14,29265,29266],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29268,29269],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[18,29271,29273],{"className":23899,"code":29272,"language":23901,"meta":23,"style":23},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[25,29274,29275],{"__ignoreMap":23},[28,29276,29277,29279,29281,29283,29286,29289,29292,29295],{"class":30,"line":31},[28,29278,26631],{"class":2040},[28,29280,27308],{"class":320},[28,29282,27311],{"class":45},[28,29284,29285],{"class":45}," --privileged",[28,29287,29288],{"class":320}," multiarch\u002Fqemu-user-static",[28,29290,29291],{"class":45}," --reset",[28,29293,29294],{"class":45}," -p",[28,29296,29297],{"class":320}," yes\n",[14,29299,29300],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29302,29303],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[18,29305,29307],{"className":23899,"code":29306,"language":23901,"meta":23,"style":23},"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",[25,29308,29309,29351,29355,29360,29370,29380,29389,29395,29399,29403,29413,29421,29430,29436,29440,29444,29454,29462,29471,29477,29481,29485,29495,29503,29512,29518,29522,29526,29536,29544,29553,29559,29563,29567,29577,29585,29594,29600,29604,29608,29618,29626,29635,29641,29645,29649,29659,29667,29676,29682,29686,29690,29700,29708,29717,29723,29727,29731,29742,29750,29759,29765],{"__ignoreMap":23},[28,29310,29311,29313,29315,29317,29320,29323,29325,29327,29330,29332,29334,29336,29338,29341,29344,29346,29349],{"class":30,"line":31},[28,29312,26631],{"class":2040},[28,29314,29251],{"class":320},[28,29316,28810],{"class":320},[28,29318,29319],{"class":45}," --platform",[28,29321,29322],{"class":320}," linux\u002Famd64,linux\u002Farm64",[28,29324,28813],{"class":45},[28,29326,28980],{"class":38},[28,29328,29329],{"class":320},"你的镜像",[28,29331,28986],{"class":34},[28,29333,1164],{"class":38},[28,29335,1065],{"class":320},[28,29337,99],{"class":38},[28,29339,29340],{"class":320},"标",[28,29342,29343],{"class":34},"签",[28,29345,1164],{"class":38},[28,29347,29348],{"class":45}," --push",[28,29350,28819],{"class":320},[28,29352,29353],{"class":30,"line":94},[28,29354,2477],{"emptyLinePlaceholder":144},[28,29356,29357],{"class":30,"line":109},[28,29358,29359],{"class":105},"# 例子：\n",[28,29361,29362,29364,29366,29368],{"class":30,"line":125},[28,29363,26631],{"class":2040},[28,29365,29251],{"class":320},[28,29367,28810],{"class":320},[28,29369,24756],{"class":45},[28,29371,29372,29375,29378],{"class":30,"line":131},[28,29373,29374],{"class":34},"--platform ",[28,29376,29377],{"class":320},"linux\u002Famd64,linux\u002Farm64",[28,29379,24756],{"class":45},[28,29381,29382,29384,29387],{"class":30,"line":1291},[28,29383,28813],{"class":45},[28,29385,29386],{"class":320}," tungchiahui\u002Fros:noetic-focal",[28,29388,24756],{"class":45},[28,29390,29391,29393],{"class":30,"line":1297},[28,29392,29348],{"class":45},[28,29394,24756],{"class":45},[28,29396,29397],{"class":30,"line":1388},[28,29398,28819],{"class":320},[28,29400,29401],{"class":30,"line":1394},[28,29402,2477],{"emptyLinePlaceholder":144},[28,29404,29405,29407,29409,29411],{"class":30,"line":1406},[28,29406,26631],{"class":2040},[28,29408,29251],{"class":320},[28,29410,28810],{"class":320},[28,29412,24756],{"class":45},[28,29414,29415,29417,29419],{"class":30,"line":1689},[28,29416,29374],{"class":34},[28,29418,29377],{"class":320},[28,29420,24756],{"class":45},[28,29422,29423,29425,29428],{"class":30,"line":1694},[28,29424,28813],{"class":45},[28,29426,29427],{"class":320}," tungchiahui\u002Fros:humble-jammy",[28,29429,24756],{"class":45},[28,29431,29432,29434],{"class":30,"line":1700},[28,29433,29348],{"class":45},[28,29435,24756],{"class":45},[28,29437,29438],{"class":30,"line":1705},[28,29439,28819],{"class":320},[28,29441,29442],{"class":30,"line":1719},[28,29443,2477],{"emptyLinePlaceholder":144},[28,29445,29446,29448,29450,29452],{"class":30,"line":1724},[28,29447,26631],{"class":2040},[28,29449,29251],{"class":320},[28,29451,28810],{"class":320},[28,29453,24756],{"class":45},[28,29455,29456,29458,29460],{"class":30,"line":1730},[28,29457,29374],{"class":34},[28,29459,29377],{"class":320},[28,29461,24756],{"class":45},[28,29463,29464,29466,29469],{"class":30,"line":1751},[28,29465,28813],{"class":45},[28,29467,29468],{"class":320}," tungchiahui\u002Fros:jazzy-noble",[28,29470,24756],{"class":45},[28,29472,29473,29475],{"class":30,"line":1756},[28,29474,29348],{"class":45},[28,29476,24756],{"class":45},[28,29478,29479],{"class":30,"line":1770},[28,29480,28819],{"class":320},[28,29482,29483],{"class":30,"line":1775},[28,29484,2477],{"emptyLinePlaceholder":144},[28,29486,29487,29489,29491,29493],{"class":30,"line":1804},[28,29488,26398],{"class":2040},[28,29490,29251],{"class":320},[28,29492,28810],{"class":320},[28,29494,24756],{"class":45},[28,29496,29497,29499,29501],{"class":30,"line":1809},[28,29498,29374],{"class":34},[28,29500,29377],{"class":320},[28,29502,24756],{"class":45},[28,29504,29505,29507,29510],{"class":30,"line":1826},[28,29506,28813],{"class":45},[28,29508,29509],{"class":320}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[28,29511,24756],{"class":45},[28,29513,29514,29516],{"class":30,"line":1831},[28,29515,29348],{"class":45},[28,29517,24756],{"class":45},[28,29519,29520],{"class":30,"line":1836},[28,29521,28819],{"class":320},[28,29523,29524],{"class":30,"line":1841},[28,29525,2477],{"emptyLinePlaceholder":144},[28,29527,29528,29530,29532,29534],{"class":30,"line":1855},[28,29529,26631],{"class":2040},[28,29531,29251],{"class":320},[28,29533,28810],{"class":320},[28,29535,24756],{"class":45},[28,29537,29538,29540,29542],{"class":30,"line":1860},[28,29539,29374],{"class":34},[28,29541,29377],{"class":320},[28,29543,24756],{"class":45},[28,29545,29546,29548,29551],{"class":30,"line":2654},[28,29547,28813],{"class":45},[28,29549,29550],{"class":320}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[28,29552,24756],{"class":45},[28,29554,29555,29557],{"class":30,"line":2668},[28,29556,29348],{"class":45},[28,29558,24756],{"class":45},[28,29560,29561],{"class":30,"line":2676},[28,29562,28819],{"class":320},[28,29564,29565],{"class":30,"line":2681},[28,29566,2477],{"emptyLinePlaceholder":144},[28,29568,29569,29571,29573,29575],{"class":30,"line":2687},[28,29570,26398],{"class":2040},[28,29572,29251],{"class":320},[28,29574,28810],{"class":320},[28,29576,24756],{"class":45},[28,29578,29579,29581,29583],{"class":30,"line":2693},[28,29580,29374],{"class":34},[28,29582,29377],{"class":320},[28,29584,24756],{"class":45},[28,29586,29587,29589,29592],{"class":30,"line":2698},[28,29588,28813],{"class":45},[28,29590,29591],{"class":320}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[28,29593,24756],{"class":45},[28,29595,29596,29598],{"class":30,"line":8025},[28,29597,29348],{"class":45},[28,29599,24756],{"class":45},[28,29601,29602],{"class":30,"line":8049},[28,29603,28819],{"class":320},[28,29605,29606],{"class":30,"line":8054},[28,29607,2477],{"emptyLinePlaceholder":144},[28,29609,29610,29612,29614,29616],{"class":30,"line":8060},[28,29611,26631],{"class":2040},[28,29613,29251],{"class":320},[28,29615,28810],{"class":320},[28,29617,24756],{"class":45},[28,29619,29620,29622,29624],{"class":30,"line":8087},[28,29621,29374],{"class":34},[28,29623,29377],{"class":320},[28,29625,24756],{"class":45},[28,29627,29628,29630,29633],{"class":30,"line":8092},[28,29629,28813],{"class":45},[28,29631,29632],{"class":320}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[28,29634,24756],{"class":45},[28,29636,29637,29639],{"class":30,"line":8098},[28,29638,29348],{"class":45},[28,29640,24756],{"class":45},[28,29642,29643],{"class":30,"line":8110},[28,29644,28819],{"class":320},[28,29646,29647],{"class":30,"line":8122},[28,29648,2477],{"emptyLinePlaceholder":144},[28,29650,29651,29653,29655,29657],{"class":30,"line":8134},[28,29652,26631],{"class":2040},[28,29654,29251],{"class":320},[28,29656,28810],{"class":320},[28,29658,24756],{"class":45},[28,29660,29661,29663,29665],{"class":30,"line":9793},[28,29662,29374],{"class":34},[28,29664,29377],{"class":320},[28,29666,24756],{"class":45},[28,29668,29669,29671,29674],{"class":30,"line":9818},[28,29670,28813],{"class":45},[28,29672,29673],{"class":320}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29675,24756],{"class":45},[28,29677,29678,29680],{"class":30,"line":9841},[28,29679,29348],{"class":45},[28,29681,24756],{"class":45},[28,29683,29684],{"class":30,"line":9865},[28,29685,28819],{"class":320},[28,29687,29688],{"class":30,"line":9870},[28,29689,2477],{"emptyLinePlaceholder":144},[28,29691,29692,29694,29696,29698],{"class":30,"line":9875},[28,29693,26398],{"class":2040},[28,29695,29251],{"class":320},[28,29697,28810],{"class":320},[28,29699,24756],{"class":45},[28,29701,29702,29704,29706],{"class":30,"line":9880},[28,29703,29374],{"class":34},[28,29705,29377],{"class":320},[28,29707,24756],{"class":45},[28,29709,29710,29712,29715],{"class":30,"line":9889},[28,29711,28813],{"class":45},[28,29713,29714],{"class":320}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[28,29716,24756],{"class":45},[28,29718,29719,29721],{"class":30,"line":9894},[28,29720,29348],{"class":45},[28,29722,24756],{"class":45},[28,29724,29725],{"class":30,"line":9900},[28,29726,28819],{"class":320},[28,29728,29729],{"class":30,"line":9921},[28,29730,2477],{"emptyLinePlaceholder":144},[28,29732,29733,29736,29738,29740],{"class":30,"line":9927},[28,29734,29735],{"class":2040},"  docker",[28,29737,29251],{"class":320},[28,29739,28810],{"class":320},[28,29741,24756],{"class":45},[28,29743,29744,29746,29748],{"class":30,"line":9941},[28,29745,29374],{"class":34},[28,29747,29377],{"class":320},[28,29749,24756],{"class":45},[28,29751,29752,29754,29757],{"class":30,"line":9947},[28,29753,28813],{"class":45},[28,29755,29756],{"class":320}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29758,24756],{"class":45},[28,29760,29761,29763],{"class":30,"line":9974},[28,29762,29348],{"class":45},[28,29764,24756],{"class":45},[28,29766,29767],{"class":30,"line":9983},[28,29768,28819],{"class":320},[14,29770,29771],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29773,29774],{},[1539,29775],{"alt":23,"src":29776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29778,29779],{},[1539,29780],{"alt":23,"src":29781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22075,29783,29785],{"id":29784},"_623清除构建缓存","6.2.3.清除构建缓存",[18,29787,29789],{"className":23899,"code":29788,"language":23901,"meta":23,"style":23},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[25,29790,29791,29796],{"__ignoreMap":23},[28,29792,29793],{"class":30,"line":31},[28,29794,29795],{"class":105},"# 清理BuildKit构建缓存\n",[28,29797,29798,29800,29803,29806],{"class":30,"line":94},[28,29799,26631],{"class":2040},[28,29801,29802],{"class":320}," builder",[28,29804,29805],{"class":320}," prune",[28,29807,29808],{"class":45}," -f\n",[14,29810,29811],{},[1539,29812],{"alt":23,"src":29813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[188,29815,29817],{"id":29816},"_63补充","6.3.补充",[22075,29819,29821],{"id":29820},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29823,29824],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29826,29827],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29829,29830],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[18,29832,29834],{"className":23899,"code":29833,"language":23901,"meta":23,"style":23},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[25,29835,29836,29843],{"__ignoreMap":23},[28,29837,29838,29840],{"class":30,"line":31},[28,29839,27448],{"class":2040},[28,29841,29842],{"class":320}," nginx\n",[28,29844,29845,29847,29850,29853,29855],{"class":30,"line":94},[28,29846,28633],{"class":2040},[28,29848,29849],{"class":320}," echo",[28,29851,29852],{"class":320}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[28,29854,26300],{"class":38},[28,29856,29857],{"class":320}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29859,29860],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29862,29863],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[18,29865,29867],{"className":23899,"code":29866,"language":23901,"meta":23,"style":23},"docker build -t nginx:tuling .\n",[25,29868,29869],{"__ignoreMap":23},[28,29870,29871,29873,29875,29877,29880],{"class":30,"line":31},[28,29872,26631],{"class":2040},[28,29874,28810],{"class":320},[28,29876,28813],{"class":45},[28,29878,29879],{"class":320}," nginx:tuling",[28,29881,28819],{"class":320},[14,29883,29884],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29886,29887],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[18,29889,29891],{"className":23899,"code":29890,"language":23901,"meta":23,"style":23},"docker run -d -p 92:80 nginx:tuling\n",[25,29892,29893],{"__ignoreMap":23},[28,29894,29895,29897,29899,29902,29904,29907],{"class":30,"line":31},[28,29896,26631],{"class":2040},[28,29898,27308],{"class":320},[28,29900,29901],{"class":45}," -d",[28,29903,29294],{"class":45},[28,29905,29906],{"class":320}," 92:80",[28,29908,29909],{"class":320}," nginx:tuling\n",[14,29911,29912,29913],{},"4、访问 ",[35,29914,29917],{"href":29915,"rel":29916},"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",[23942],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29919,29920],{},[1539,29921],{"alt":23,"src":29922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29924,29925],{},[1539,29926],{"alt":23,"src":29927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22075,29929,29931],{"id":29930},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29933,29934],{},"只需要知道大体流程即可",[14,29936,29937],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29939,29940],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29942,29943],{},"2、在Dockerfile中添加以下内容",[18,29945,29947],{"className":26169,"code":29946,"language":26171,"meta":23,"style":23},"# 基于哪个镜像\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",[25,29948,29949,29954,29959,29964,29969,29974,29979,29984],{"__ignoreMap":23},[28,29950,29951],{"class":30,"line":31},[28,29952,29953],{},"# 基于哪个镜像\n",[28,29955,29956],{"class":30,"line":94},[28,29957,29958],{},"From java:8\n",[28,29960,29961],{"class":30,"line":109},[28,29962,29963],{},"# 复制文件到容器\n",[28,29965,29966],{"class":30,"line":125},[28,29967,29968],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[28,29970,29971],{"class":30,"line":131},[28,29972,29973],{},"# 声明需要暴露的端口\n",[28,29975,29976],{"class":30,"line":1291},[28,29977,29978],{},"EXPOSE 8877\n",[28,29980,29981],{"class":30,"line":1297},[28,29982,29983],{},"# 配置容器启动后执行的命令\n",[28,29985,29986],{"class":30,"line":1388},[28,29987,29988],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29990,29991],{},"3、使用docker build命令构建镜像",[18,29993,29995],{"className":23899,"code":29994,"language":23901,"meta":23,"style":23},"docker build -t tulingmall-member:0.0.5 .\n",[25,29996,29997],{"__ignoreMap":23},[28,29998,29999,30001,30003,30005,30008],{"class":30,"line":31},[28,30000,26631],{"class":2040},[28,30002,28810],{"class":320},[28,30004,28813],{"class":45},[28,30006,30007],{"class":320}," tulingmall-member:0.0.5",[28,30009,28819],{"class":320},[14,30011,30012],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30014,30015],{},[1539,30016],{"alt":23,"src":30017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30019,30020],{},"4、启动镜像，加-d可在后台启动",[18,30022,30024],{"className":23899,"code":30023,"language":23901,"meta":23,"style":23},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[25,30025,30026],{"__ignoreMap":23},[28,30027,30028,30030,30032,30034,30036,30039],{"class":30,"line":31},[28,30029,26631],{"class":2040},[28,30031,27308],{"class":320},[28,30033,29901],{"class":45},[28,30035,29294],{"class":45},[28,30037,30038],{"class":320}," 8877:8877",[28,30040,30041],{"class":320}," tulingmall-member:0.0.5\n",[14,30043,30044],{},"加上JVM参数：",[18,30046,30048],{"className":23899,"code":30047,"language":23901,"meta":23,"style":23},"# --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",[25,30049,30050,30055,30070,30080,30089,30096],{"__ignoreMap":23},[28,30051,30052],{"class":30,"line":31},[28,30053,30054],{"class":105},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[28,30056,30057,30059,30061,30064,30066,30068],{"class":30,"line":94},[28,30058,26631],{"class":2040},[28,30060,27308],{"class":320},[28,30062,30063],{"class":45},"  -d",[28,30065,29294],{"class":45},[28,30067,30038],{"class":320},[28,30069,24756],{"class":45},[28,30071,30072,30074,30077],{"class":30,"line":109},[28,30073,28206],{"class":34},[28,30075,30076],{"class":320},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[28,30078,30079],{"class":45},"  \\\n",[28,30081,30082,30084,30087],{"class":30,"line":125},[28,30083,28206],{"class":34},[28,30085,30086],{"class":320},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[28,30088,30079],{"class":45},[28,30090,30091,30094],{"class":30,"line":131},[28,30092,30093],{"class":34},"--cap-add=SYS_PTRACE  ",[28,30095,26253],{"class":45},[28,30097,30098],{"class":30,"line":1291},[28,30099,30100],{"class":34},"tulingmall-member:0.0.5\n",[14,30102,30103],{},"5、访问会员服务接口",[14,30105,30106],{},[1539,30107],{"alt":23,"src":30108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22075,30110,30112],{"id":30111},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30114,30115],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30117,30118,30119],{},"阿里云docker镜像仓库：",[35,30120,30121],{"href":30121,"rel":30122},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23942],[14,30124,30125],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30127,30128],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30130,30131],{},[1539,30132],{"alt":23,"src":30133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30135,30136],{},"要把镜像推送到镜像仓库",[18,30138,30140],{"className":23899,"code":30139,"language":23901,"meta":23,"style":23},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30141,30142],{"__ignoreMap":23},[28,30143,30144,30146,30148,30150],{"class":30,"line":31},[28,30145,26631],{"class":2040},[28,30147,28975],{"class":320},[28,30149,30007],{"class":320},[28,30151,30152],{"class":320}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30154,30155],{},"最后将镜像推送到远程仓库",[18,30157,30159],{"className":23899,"code":30158,"language":23901,"meta":23,"style":23},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30160,30161],{"__ignoreMap":23},[28,30162,30163,30165,30167],{"class":30,"line":31},[28,30164,26631],{"class":2040},[28,30166,29094],{"class":320},[28,30168,30152],{"class":320},[136,30170,30171],{},"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":23,"searchDepth":94,"depth":94,"links":30173},[30174,30175,30176],{"id":28561,"depth":109,"text":28562},{"id":28790,"depth":109,"text":28791},{"id":29816,"depth":109,"text":29817},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28553,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30183,"title":30184,"body":30185,"description":23,"extension":142,"meta":30328,"navigation":144,"path":30329,"seo":30330,"stem":30331,"__hash__":30332},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30186,"toc":30326},[30187,30190,30195,30200,30203,30208,30213,30216,30221,30226,30229,30234,30237,30240,30243,30246,30249,30252,30272,30294,30297,30300,30320,30323],[10,30188,30184],{"id":30189},"_7vscode远程开发",[171,30191,30192],{},[174,30193,30194],{},"插件1：微软Docker工具",[14,30196,30197],{},[1539,30198],{"alt":23,"src":30199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30201,30202],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30204,30205],{},[1539,30206],{"alt":23,"src":30207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[171,30209,30210],{"start":94},[174,30211,30212],{},"插件2：微软Docker远程开发工具",[14,30214,30215],{},"下面这是远程开发的插件。",[14,30217,30218],{},[1539,30219],{"alt":23,"src":30220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30222,30223],{},[1539,30224],{"alt":23,"src":30225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30227,30228],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30230,30231],{},[1539,30232],{"alt":23,"src":30233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30235,30236],{},"安装完拓展之后，vscode进行链接：",[14,30238,30239],{},"1.按ctrl+shift+p",[14,30241,30242],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30244,30245],{},"3.选择目前运行的容器",[14,30247,30248],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30250,30251],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[18,30253,30255],{"className":23899,"code":30254,"language":23901,"meta":23,"style":23},"docker run -v 主机目录:容器目录 image-name\n",[25,30256,30257],{"__ignoreMap":23},[28,30258,30259,30261,30263,30266,30269],{"class":30,"line":31},[28,30260,26631],{"class":2040},[28,30262,27308],{"class":320},[28,30264,30265],{"class":45}," -v",[28,30267,30268],{"class":320}," 主机目录:容器目录",[28,30270,30271],{"class":320}," image-name\n",[18,30273,30275],{"className":23899,"code":30274,"language":23901,"meta":23,"style":23},"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",[25,30276,30277],{"__ignoreMap":23},[28,30278,30279,30281,30283,30286,30288,30291],{"class":30,"line":31},[28,30280,26631],{"class":2040},[28,30282,27308],{"class":320},[28,30284,30285],{"class":45}," -it",[28,30287,30265],{"class":45},[28,30289,30290],{"class":320}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[28,30292,30293],{"class":320}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30295,30296],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30298,30299],{},"查看挂载情况：",[18,30301,30303],{"className":23899,"code":30302,"language":23901,"meta":23,"style":23},"mount | grep -i project\n",[25,30304,30305],{"__ignoreMap":23},[28,30306,30307,30310,30312,30315,30317],{"class":30,"line":31},[28,30308,30309],{"class":2040},"mount",[28,30311,25187],{"class":38},[28,30313,30314],{"class":2040}," grep",[28,30316,26508],{"class":45},[28,30318,30319],{"class":320}," project\n",[14,30321,30322],{},"也可以通过ls来进行查看",[136,30324,30325],{},"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":23,"searchDepth":94,"depth":94,"links":30327},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30184,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30334,"title":30335,"body":30336,"description":141,"extension":142,"meta":30340,"navigation":144,"path":30342,"seo":30343,"stem":30344,"__hash__":30345},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30337,"toc":30338},[],{"title":23,"searchDepth":94,"depth":94,"links":30339},[],{"category":30341},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30335,"description":141},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30347,"title":30348,"body":30349,"description":141,"extension":142,"meta":30353,"navigation":144,"path":30354,"seo":30355,"stem":30356,"__hash__":30357},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30350,"toc":30351},[],{"title":23,"searchDepth":94,"depth":94,"links":30352},[],{"category":30341},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30348,"description":141},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30359,"title":30360,"body":30361,"description":141,"extension":142,"meta":30652,"navigation":144,"path":30653,"seo":30654,"stem":30655,"__hash__":30656},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30362,"toc":30650},[30363,30366,30374,30389,30394,30445,30448,30454,30639,30644,30647],[10,30364,30360],{"id":30365},"_1验证深度学习环境",[14,30367,30368,30369],{},"关于环境的安装，看",[35,30370,30373],{"href":30371,"rel":30372},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23942],"Pytorch-->深度学习",[14,30375,30376,30377,30380,30381,30384,30385,30388],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[25,30378,30379],{},"pytorch-cuda=12.4"," 是一个“ ",[365,30382,30383],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[365,30386,30387],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30390,30391],{},[1539,30392],{"alt":23,"src":30393},"\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",[18,30395,30397],{"className":23899,"code":30396,"language":23901,"meta":23,"style":23},"# 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",[25,30398,30399,30404],{"__ignoreMap":23},[28,30400,30401],{"class":30,"line":31},[28,30402,30403],{"class":105},"# CUDA 12.4\n",[28,30405,30406,30409,30411,30414,30417,30420,30423,30426,30428,30431,30434,30437,30440,30442],{"class":30,"line":94},[28,30407,30408],{"class":2040},"conda",[28,30410,23911],{"class":320},[28,30412,30413],{"class":320}," pytorch==",[28,30415,30416],{"class":45},"2.5.1",[28,30418,30419],{"class":320}," torchvision==",[28,30421,30422],{"class":45},"0.20.1",[28,30424,30425],{"class":320}," torchaudio==",[28,30427,30416],{"class":45},[28,30429,30430],{"class":320}," pytorch-cuda=",[28,30432,30433],{"class":45},"12.4",[28,30435,30436],{"class":45}," -c",[28,30438,30439],{"class":320}," pytorch",[28,30441,30436],{"class":45},[28,30443,30444],{"class":320}," nvidia\n",[14,30446,30447],{},"）：",[14,30449,30450],{},[35,30451,30452],{"href":30452,"rel":30453},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23942],[18,30455,30457],{"className":20,"code":30456,"language":22,"meta":23,"style":23},"# 对深度学习环境进行测试\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",[25,30458,30459,30464,30472,30477,30487,30503,30508,30518,30555,30562,30574,30590,30595,30605,30617,30627],{"__ignoreMap":23},[28,30460,30461],{"class":30,"line":31},[28,30462,30463],{"class":105},"# 对深度学习环境进行测试\n",[28,30465,30466,30469],{"class":30,"line":94},[28,30467,30468],{"class":38},"import",[28,30470,30471],{"class":34}," torch\n",[28,30473,30474],{"class":30,"line":109},[28,30475,30476],{"class":105},"# 查看cuda是否被激活\n",[28,30478,30479,30482,30484],{"class":30,"line":125},[28,30480,30481],{"class":34},"flag",[28,30483,39],{"class":38},[28,30485,30486],{"class":34},"torch.cuda.is_available()\n",[28,30488,30489,30492,30494,30497,30500],{"class":30,"line":131},[28,30490,30491],{"class":45},"print",[28,30493,221],{"class":34},[28,30495,30496],{"class":320},"\"cuda:\"",[28,30498,30499],{"class":34},", flag)   ",[28,30501,30502],{"class":105},"#返回true的话说明被激活\n",[28,30504,30505],{"class":30,"line":1291},[28,30506,30507],{"class":105},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[28,30509,30510,30513,30515],{"class":30,"line":1297},[28,30511,30512],{"class":34},"ngpu",[28,30514,39],{"class":38},[28,30516,30517],{"class":45},"1\n",[28,30519,30520,30523,30525,30528,30531,30533,30536,30539,30542,30544,30546,30548,30550,30553],{"class":30,"line":1388},[28,30521,30522],{"class":34},"device",[28,30524,39],{"class":38},[28,30526,30527],{"class":34},"torch.device(",[28,30529,30530],{"class":320},"\"cuda:0\"",[28,30532,1781],{"class":38},[28,30534,30535],{"class":34},"(torch.cuda.is_available() ",[28,30537,30538],{"class":38},"and",[28,30540,30541],{"class":34}," ngpu",[28,30543,1164],{"class":38},[28,30545,407],{"class":45},[28,30547,13791],{"class":34},[28,30549,1778],{"class":38},[28,30551,30552],{"class":320}," \"cpu\"",[28,30554,227],{"class":34},[28,30556,30557,30559],{"class":30,"line":1394},[28,30558,30491],{"class":45},[28,30560,30561],{"class":34},"(device)\n",[28,30563,30564,30566,30569,30571],{"class":30,"line":1406},[28,30565,30491],{"class":45},[28,30567,30568],{"class":34},"(torch.cuda.get_device_name(",[28,30570,407],{"class":45},[28,30572,30573],{"class":34},"))\n",[28,30575,30576,30578,30581,30583,30585,30587],{"class":30,"line":1689},[28,30577,30491],{"class":45},[28,30579,30580],{"class":34},"(torch.rand(",[28,30582,57],{"class":45},[28,30584,49],{"class":34},[28,30586,57],{"class":45},[28,30588,30589],{"class":34},").cuda())\n",[28,30591,30592],{"class":30,"line":1694},[28,30593,30594],{"class":105},"# 查看cuda和cudnn的版本\n",[28,30596,30597,30600,30602],{"class":30,"line":1700},[28,30598,30599],{"class":34},"cuda_version",[28,30601,39],{"class":38},[28,30603,30604],{"class":34},"torch.version.cuda\n",[28,30606,30607,30609,30611,30614],{"class":30,"line":1705},[28,30608,30491],{"class":45},[28,30610,221],{"class":34},[28,30612,30613],{"class":320},"\"cuda version\"",[28,30615,30616],{"class":34},",cuda_version)\n",[28,30618,30619,30622,30624],{"class":30,"line":1719},[28,30620,30621],{"class":34},"cudnn_version",[28,30623,39],{"class":38},[28,30625,30626],{"class":34},"torch.backends.cudnn.version()\n",[28,30628,30629,30631,30633,30636],{"class":30,"line":1724},[28,30630,30491],{"class":45},[28,30632,221],{"class":34},[28,30634,30635],{"class":320},"\"cudnn version\"",[28,30637,30638],{"class":34},",cudnn_version)\n",[14,30640,30641],{},[1539,30642],{"alt":23,"src":30643},"\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,30645,30646],{},"cuda:0 指的是一块显卡",[136,30648,30649],{},"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":23,"searchDepth":94,"depth":94,"links":30651},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30360,"description":141},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30658,"title":30659,"body":30660,"description":141,"extension":142,"meta":50463,"navigation":144,"path":50464,"seo":50465,"stem":50466,"__hash__":50467},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30661,"toc":50457},[30662,30665,30669,30673,30676,30681,30686,30689,30694,30699,30704,30707,30711,30716,30720,30725,30728,30733,30736,30739,30742,30745,30750,30753,30758,30763,30768,30773,30776,30780,30783,30788,31392,31397,31400,31405,31408,31411,31875,31878,31881,31884,31887,33938,33941,33946,33951,34746,34749,34754,35532,35536,37195,37199,37913,37917,37921,37926,37931,37936,37939,37944,37949,37954,37959,37964,37968,37973,39255,39260,39263,39266,39269,39424,39427,39430,40646,40651,41346,41350,41354,41359,41364,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41517,41521,41525,41528,43006,43010,44657,44661,45355,45359,45362,45365,45909,45912,45916,45919,47316,47320,47323,47901,49687,49691,49694,50454],[10,30663,30659],{"id":30664},"_2经典神经网络",[188,30666,30668],{"id":30667},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22075,30670,30672],{"id":30671},"_211原理介绍","2.1.1.原理介绍",[14,30674,30675],{},"LeNet-5",[171,30677,30678],{},[174,30679,30680],{},"原理",[14,30682,30683],{},[1539,30684],{"alt":23,"src":30685},"\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,30687,30688],{},"B是batch批次；C是channel通道",[171,30690,30691],{"start":94},[174,30692,30693],{},"网络参数详细",[14,30695,30696],{},[1539,30697],{"alt":23,"src":30698},"\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,30700,30701],{},[1539,30702],{"alt":23,"src":30703},"\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,30705,30706],{},"AlexNet",[171,30708,30709],{},[174,30710,30680],{},[14,30712,30713],{},[1539,30714],{"alt":23,"src":30715},"\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",[171,30717,30718],{"start":94},[174,30719,30693],{},[14,30721,30722],{},[1539,30723],{"alt":23,"src":30724},"\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,30726,30727],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30729,30730],{},[1539,30731],{"alt":23,"src":30732},"\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,30734,30735],{},"数据处理中的图像增强操作:",[14,30737,30738],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30740,30741],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30743,30744],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30746,30747],{},[1539,30748],{"alt":23,"src":30749},"\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,30751,30752],{},"提升网络精确度的方法：LRN正则化",[14,30754,30755],{},[1539,30756],{"alt":23,"src":30757},"\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,30759,30760],{},[1539,30761],{"alt":23,"src":30762},"\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",[171,30764,30765],{"start":109},[174,30766,30767],{},"AlexNet的总结",[14,30769,30770],{},[1539,30771],{"alt":23,"src":30772},"\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,30774,30775],{},"比LeNet模型要深一丢丢",[22075,30777,30779],{"id":30778},"_212代码实现","2.1.2.代码实现",[14,30781,30782],{},"（1）LeNet",[171,30784,30785],{},[174,30786,30787],{},"模型搭建",[18,30789,30791],{"className":20,"code":30790,"language":22,"meta":23,"style":23},"# 导入库\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",[25,30792,30793,30798,30804,30809,30822,30827,30839,30843,30863,30868,30873,30884,30889,30908,30912,30917,30966,30978,30983,31012,31047,31074,31079,31091,31096,31116,31135,31154,31158,31163,31173,31190,31201,31216,31227,31238,31253,31268,31279,31286,31290,31304,31309,31332,31337,31342,31347,31351,31356,31361,31371],{"__ignoreMap":23},[28,30794,30795],{"class":30,"line":31},[28,30796,30797],{"class":105},"# 导入库\n",[28,30799,30800,30802],{"class":30,"line":94},[28,30801,30468],{"class":38},[28,30803,30471],{"class":34},[28,30805,30806],{"class":30,"line":109},[28,30807,30808],{"class":105},"# 导入神经网络层\n",[28,30810,30811,30814,30817,30819],{"class":30,"line":125},[28,30812,30813],{"class":38},"from",[28,30815,30816],{"class":34}," torch ",[28,30818,30468],{"class":38},[28,30820,30821],{"class":34}," nn\n",[28,30823,30824],{"class":30,"line":131},[28,30825,30826],{"class":105},"# 导入展示神经网络参数的包\n",[28,30828,30829,30831,30834,30836],{"class":30,"line":1291},[28,30830,30813],{"class":38},[28,30832,30833],{"class":34}," torchsummary ",[28,30835,30468],{"class":38},[28,30837,30838],{"class":34}," summary\n",[28,30840,30841],{"class":30,"line":1297},[28,30842,2477],{"emptyLinePlaceholder":144},[28,30844,30845,30847,30850,30852,30855,30857,30860],{"class":30,"line":1388},[28,30846,14771],{"class":38},[28,30848,30849],{"class":2040}," LeNet",[28,30851,221],{"class":34},[28,30853,30854],{"class":2040},"nn",[28,30856,768],{"class":34},[28,30858,30859],{"class":2040},"Module",[28,30861,30862],{"class":34},"):\n",[28,30864,30865],{"class":30,"line":1394},[28,30866,30867],{"class":105},"    # 模型初始化:\n",[28,30869,30870],{"class":30,"line":1406},[28,30871,30872],{"class":105},"    # 定义一些网络层和激活函数\n",[28,30874,30875,30878,30881],{"class":30,"line":1689},[28,30876,30877],{"class":38},"    def",[28,30879,30880],{"class":45}," __init__",[28,30882,30883],{"class":34},"(self):\n",[28,30885,30886],{"class":30,"line":1694},[28,30887,30888],{"class":105},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[28,30890,30891,30894,30897,30900,30903,30906],{"class":30,"line":1700},[28,30892,30893],{"class":45},"        super",[28,30895,30896],{"class":34},"(LeNet,",[28,30898,30899],{"class":45},"self",[28,30901,30902],{"class":34},").",[28,30904,30905],{"class":45},"__init__",[28,30907,2053],{"class":34},[28,30909,30910],{"class":30,"line":1705},[28,30911,2477],{"emptyLinePlaceholder":144},[28,30913,30914],{"class":30,"line":1719},[28,30915,30916],{"class":105},"        # 定义网络层\n",[28,30918,30919,30922,30925,30927,30930,30933,30935,30937,30939,30942,30944,30946,30948,30951,30953,30955,30957,30960,30962,30964],{"class":30,"line":1724},[28,30920,30921],{"class":45},"        self",[28,30923,30924],{"class":34},".c1",[28,30926,39],{"class":38},[28,30928,30929],{"class":34},"nn.Conv2d(",[28,30931,30932],{"class":5293},"in_channels",[28,30934,39],{"class":38},[28,30936,46],{"class":45},[28,30938,49],{"class":34},[28,30940,30941],{"class":5293},"out_channels",[28,30943,39],{"class":38},[28,30945,558],{"class":45},[28,30947,49],{"class":34},[28,30949,30950],{"class":5293},"kernel_size",[28,30952,39],{"class":38},[28,30954,533],{"class":45},[28,30956,49],{"class":34},[28,30958,30959],{"class":5293},"padding",[28,30961,39],{"class":38},[28,30963,52],{"class":45},[28,30965,227],{"class":34},[28,30967,30968,30970,30973,30975],{"class":30,"line":1730},[28,30969,30921],{"class":45},[28,30971,30972],{"class":34},".sig",[28,30974,39],{"class":38},[28,30976,30977],{"class":34},"nn.Sigmoid()\n",[28,30979,30980],{"class":30,"line":1751},[28,30981,30982],{"class":105},"        # 定义池化\n",[28,30984,30985,30987,30990,30992,30995,30997,30999,31001,31003,31006,31008,31010],{"class":30,"line":1756},[28,30986,30921],{"class":45},[28,30988,30989],{"class":34},".s2",[28,30991,39],{"class":38},[28,30993,30994],{"class":34},"nn.AvgPool2d(",[28,30996,30950],{"class":5293},[28,30998,39],{"class":38},[28,31000,52],{"class":45},[28,31002,49],{"class":34},[28,31004,31005],{"class":5293},"stride",[28,31007,39],{"class":38},[28,31009,52],{"class":45},[28,31011,227],{"class":34},[28,31013,31014,31016,31019,31021,31023,31025,31027,31029,31031,31033,31035,31037,31039,31041,31043,31045],{"class":30,"line":1770},[28,31015,30921],{"class":45},[28,31017,31018],{"class":34},".c3",[28,31020,39],{"class":38},[28,31022,30929],{"class":34},[28,31024,30932],{"class":5293},[28,31026,39],{"class":38},[28,31028,558],{"class":45},[28,31030,49],{"class":34},[28,31032,30941],{"class":5293},[28,31034,39],{"class":38},[28,31036,811],{"class":45},[28,31038,49],{"class":34},[28,31040,30950],{"class":5293},[28,31042,39],{"class":38},[28,31044,533],{"class":45},[28,31046,227],{"class":34},[28,31048,31049,31051,31054,31056,31058,31060,31062,31064,31066,31068,31070,31072],{"class":30,"line":1775},[28,31050,30921],{"class":45},[28,31052,31053],{"class":34},".s4",[28,31055,39],{"class":38},[28,31057,30994],{"class":34},[28,31059,30950],{"class":5293},[28,31061,39],{"class":38},[28,31063,52],{"class":45},[28,31065,49],{"class":34},[28,31067,31005],{"class":5293},[28,31069,39],{"class":38},[28,31071,52],{"class":45},[28,31073,227],{"class":34},[28,31075,31076],{"class":30,"line":1804},[28,31077,31078],{"class":105},"        # 定义平展层\n",[28,31080,31081,31083,31086,31088],{"class":30,"line":1809},[28,31082,30921],{"class":45},[28,31084,31085],{"class":34},".flatten",[28,31087,39],{"class":38},[28,31089,31090],{"class":34},"nn.Flatten()\n",[28,31092,31093],{"class":30,"line":1826},[28,31094,31095],{"class":105},"        # 定义全连接层\n",[28,31097,31098,31100,31103,31105,31108,31110,31112,31114],{"class":30,"line":1831},[28,31099,30921],{"class":45},[28,31101,31102],{"class":34},".f5",[28,31104,39],{"class":38},[28,31106,31107],{"class":34},"nn.Linear(",[28,31109,4064],{"class":45},[28,31111,49],{"class":34},[28,31113,1023],{"class":45},[28,31115,227],{"class":34},[28,31117,31118,31120,31123,31125,31127,31129,31131,31133],{"class":30,"line":1836},[28,31119,30921],{"class":45},[28,31121,31122],{"class":34},".f6",[28,31124,39],{"class":38},[28,31126,31107],{"class":34},[28,31128,1023],{"class":45},[28,31130,49],{"class":34},[28,31132,920],{"class":45},[28,31134,227],{"class":34},[28,31136,31137,31139,31142,31144,31146,31148,31150,31152],{"class":30,"line":1841},[28,31138,30921],{"class":45},[28,31140,31141],{"class":34},".f7",[28,31143,39],{"class":38},[28,31145,31107],{"class":34},[28,31147,920],{"class":45},[28,31149,49],{"class":34},[28,31151,659],{"class":45},[28,31153,227],{"class":34},[28,31155,31156],{"class":30,"line":1855},[28,31157,2477],{"emptyLinePlaceholder":144},[28,31159,31160],{"class":30,"line":1860},[28,31161,31162],{"class":105},"    # 写工具->写前向传播\n",[28,31164,31165,31167,31170],{"class":30,"line":2654},[28,31166,30877],{"class":38},[28,31168,31169],{"class":2040}," forward",[28,31171,31172],{"class":34},"(self,x):\n",[28,31174,31175,31178,31180,31182,31185,31187],{"class":30,"line":2668},[28,31176,31177],{"class":34},"        x",[28,31179,39],{"class":38},[28,31181,30899],{"class":45},[28,31183,31184],{"class":34},".sig(",[28,31186,30899],{"class":45},[28,31188,31189],{"class":34},".c1(x))\n",[28,31191,31192,31194,31196,31198],{"class":30,"line":2676},[28,31193,31177],{"class":34},[28,31195,39],{"class":38},[28,31197,30899],{"class":45},[28,31199,31200],{"class":34},".s2(x)\n",[28,31202,31203,31205,31207,31209,31211,31213],{"class":30,"line":2681},[28,31204,31177],{"class":34},[28,31206,39],{"class":38},[28,31208,30899],{"class":45},[28,31210,31184],{"class":34},[28,31212,30899],{"class":45},[28,31214,31215],{"class":34},".c3(x))\n",[28,31217,31218,31220,31222,31224],{"class":30,"line":2687},[28,31219,31177],{"class":34},[28,31221,39],{"class":38},[28,31223,30899],{"class":45},[28,31225,31226],{"class":34},".s4(x)\n",[28,31228,31229,31231,31233,31235],{"class":30,"line":2693},[28,31230,31177],{"class":34},[28,31232,39],{"class":38},[28,31234,30899],{"class":45},[28,31236,31237],{"class":34},".flatten(x)\n",[28,31239,31240,31242,31244,31246,31248,31250],{"class":30,"line":2698},[28,31241,31177],{"class":34},[28,31243,39],{"class":38},[28,31245,30899],{"class":45},[28,31247,31184],{"class":34},[28,31249,30899],{"class":45},[28,31251,31252],{"class":34},".f5(x))\n",[28,31254,31255,31257,31259,31261,31263,31265],{"class":30,"line":8025},[28,31256,31177],{"class":34},[28,31258,39],{"class":38},[28,31260,30899],{"class":45},[28,31262,31184],{"class":34},[28,31264,30899],{"class":45},[28,31266,31267],{"class":34},".f6(x))\n",[28,31269,31270,31272,31274,31276],{"class":30,"line":8049},[28,31271,31177],{"class":34},[28,31273,39],{"class":38},[28,31275,30899],{"class":45},[28,31277,31278],{"class":34},".f7(x)\n",[28,31280,31281,31283],{"class":30,"line":8054},[28,31282,14829],{"class":38},[28,31284,31285],{"class":34}," x\n",[28,31287,31288],{"class":30,"line":8060},[28,31289,2477],{"emptyLinePlaceholder":144},[28,31291,31292,31294,31297,31299,31302],{"class":30,"line":8087},[28,31293,1608],{"class":38},[28,31295,31296],{"class":45}," __name__",[28,31298,3026],{"class":38},[28,31300,31301],{"class":320},"\"__main__\"",[28,31303,3816],{"class":34},[28,31305,31306],{"class":30,"line":8092},[28,31307,31308],{"class":105},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[28,31310,31311,31314,31316,31318,31321,31323,31326,31328,31330],{"class":30,"line":8098},[28,31312,31313],{"class":34},"    device",[28,31315,39],{"class":38},[28,31317,30527],{"class":34},[28,31319,31320],{"class":320},"\"cuda\"",[28,31322,1781],{"class":38},[28,31324,31325],{"class":34}," torch.cuda.is_available() ",[28,31327,1778],{"class":38},[28,31329,30552],{"class":320},[28,31331,227],{"class":34},[28,31333,31334],{"class":30,"line":8110},[28,31335,31336],{"class":105},"    # 如果就是想指定用cpu用下方代码:\n",[28,31338,31339],{"class":30,"line":8122},[28,31340,31341],{"class":105},"    # device=\"cpu\"\n",[28,31343,31344],{"class":30,"line":8134},[28,31345,31346],{"class":105},"    # print(device)\n",[28,31348,31349],{"class":30,"line":9793},[28,31350,2477],{"emptyLinePlaceholder":144},[28,31352,31353],{"class":30,"line":9818},[28,31354,31355],{"class":105},"    # 实例化模型\n",[28,31357,31358],{"class":30,"line":9841},[28,31359,31360],{"class":105},"    # 将模型放到设备中去运行\n",[28,31362,31363,31366,31368],{"class":30,"line":9865},[28,31364,31365],{"class":34},"    model",[28,31367,39],{"class":38},[28,31369,31370],{"class":34},"LeNet().to(device)\n",[28,31372,31373,31376,31379,31381,31383,31385,31387,31389],{"class":30,"line":9870},[28,31374,31375],{"class":45},"    print",[28,31377,31378],{"class":34},"(summary(model,(",[28,31380,46],{"class":45},[28,31382,49],{"class":34},[28,31384,1107],{"class":45},[28,31386,49],{"class":34},[28,31388,1107],{"class":45},[28,31390,31391],{"class":34},")))\n",[14,31393,31394],{},[1539,31395],{"alt":23,"src":31396},"\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,31398,31399],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[171,31401,31402],{"start":94},[174,31403,31404],{},"训练",[14,31406,31407],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31409,31410],{},"在训练之前可以将数据展示看一下",[18,31412,31414],{"className":20,"code":31413,"language":22,"meta":23,"style":23},"# 建立画图的函数，用于展示数据\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",[25,31415,31416,31421,31426,31438,31450,31463,31468,31480,31485,31497,31502,31514,31518,31522,31543,31555,31560,31581,31592,31596,31601,31619,31630,31635,31646,31651,31662,31666,31671,31686,31699,31704,31709,31722,31735,31748,31753,31757,31762,31782,31799,31819,31832,31845,31855,31870],{"__ignoreMap":23},[28,31417,31418],{"class":30,"line":31},[28,31419,31420],{"class":105},"# 建立画图的函数，用于展示数据\n",[28,31422,31423],{"class":30,"line":94},[28,31424,31425],{"class":105},"# torchvision中包含很多内置的数据集\n",[28,31427,31428,31430,31433,31435],{"class":30,"line":109},[28,31429,30813],{"class":38},[28,31431,31432],{"class":34}," sklearn.externals.array_api_compat.torch ",[28,31434,30468],{"class":38},[28,31436,31437],{"class":34}," squeeze\n",[28,31439,31440,31442,31445,31447],{"class":30,"line":125},[28,31441,30813],{"class":38},[28,31443,31444],{"class":34}," torchvision.datasets ",[28,31446,30468],{"class":38},[28,31448,31449],{"class":34}," FashionMNIST\n",[28,31451,31452,31454,31457,31460],{"class":30,"line":131},[28,31453,30468],{"class":38},[28,31455,31456],{"class":34}," numpy ",[28,31458,31459],{"class":38},"as",[28,31461,31462],{"class":34}," np\n",[28,31464,31465],{"class":30,"line":1291},[28,31466,31467],{"class":105},"# 引入处理数据集的包\n",[28,31469,31470,31472,31475,31477],{"class":30,"line":1297},[28,31471,30813],{"class":38},[28,31473,31474],{"class":34}," torchvision ",[28,31476,30468],{"class":38},[28,31478,31479],{"class":34}," transforms\n",[28,31481,31482],{"class":30,"line":1388},[28,31483,31484],{"class":105},"# 从torch库中引入数据处理的包\n",[28,31486,31487,31489,31492,31494],{"class":30,"line":1394},[28,31488,30468],{"class":38},[28,31490,31491],{"class":34}," torch.utils.data ",[28,31493,31459],{"class":38},[28,31495,31496],{"class":34}," Data\n",[28,31498,31499],{"class":30,"line":1406},[28,31500,31501],{"class":105},"# 导入画图的库\n",[28,31503,31504,31506,31509,31511],{"class":30,"line":1689},[28,31505,30468],{"class":38},[28,31507,31508],{"class":34}," matplotlib.pyplot ",[28,31510,31459],{"class":38},[28,31512,31513],{"class":34}," plt\n",[28,31515,31516],{"class":30,"line":1694},[28,31517,2477],{"emptyLinePlaceholder":144},[28,31519,31520],{"class":30,"line":1700},[28,31521,2477],{"emptyLinePlaceholder":144},[28,31523,31524,31527,31529,31532,31535,31537,31540],{"class":30,"line":1705},[28,31525,31526],{"class":34},"train_data",[28,31528,39],{"class":38},[28,31530,31531],{"class":34},"FashionMNIST(",[28,31533,31534],{"class":5293},"root",[28,31536,39],{"class":38},[28,31538,31539],{"class":320},"'.\u002Fdata'",[28,31541,31542],{"class":34},",\n",[28,31544,31545,31548,31550,31553],{"class":30,"line":1719},[28,31546,31547],{"class":5293},"                        train",[28,31549,39],{"class":38},[28,31551,31552],{"class":45},"True",[28,31554,31542],{"class":34},[28,31556,31557],{"class":30,"line":1724},[28,31558,31559],{"class":105},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[28,31561,31562,31565,31567,31570,31573,31575,31578],{"class":30,"line":1730},[28,31563,31564],{"class":5293},"                        transform",[28,31566,39],{"class":38},[28,31568,31569],{"class":34},"transforms.Compose([transforms.Resize(",[28,31571,31572],{"class":5293},"size",[28,31574,39],{"class":38},[28,31576,31577],{"class":45},"224",[28,31579,31580],{"class":34},"),transforms.ToTensor()]),\n",[28,31582,31583,31586,31588,31590],{"class":30,"line":1751},[28,31584,31585],{"class":5293},"                        download",[28,31587,39],{"class":38},[28,31589,31552],{"class":45},[28,31591,227],{"class":34},[28,31593,31594],{"class":30,"line":1756},[28,31595,2477],{"emptyLinePlaceholder":144},[28,31597,31598],{"class":30,"line":1770},[28,31599,31600],{"class":105},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[28,31602,31603,31606,31608,31611,31614,31616],{"class":30,"line":1775},[28,31604,31605],{"class":34},"train_loader",[28,31607,39],{"class":38},[28,31609,31610],{"class":34},"Data.DataLoader(",[28,31612,31613],{"class":5293},"dataset",[28,31615,39],{"class":38},[28,31617,31618],{"class":34},"train_data,\n",[28,31620,31621,31624,31626,31628],{"class":30,"line":1804},[28,31622,31623],{"class":5293},"                             batch_size",[28,31625,39],{"class":38},[28,31627,419],{"class":45},[28,31629,31542],{"class":34},[28,31631,31632],{"class":30,"line":1809},[28,31633,31634],{"class":105},"                             # 数据是否打乱\n",[28,31636,31637,31640,31642,31644],{"class":30,"line":1826},[28,31638,31639],{"class":5293},"                             shuffle",[28,31641,39],{"class":38},[28,31643,31552],{"class":45},[28,31645,31542],{"class":34},[28,31647,31648],{"class":30,"line":1831},[28,31649,31650],{"class":105},"                             # 规定加载数据的进程\n",[28,31652,31653,31656,31658,31660],{"class":30,"line":1836},[28,31654,31655],{"class":5293},"                             num_workers",[28,31657,39],{"class":38},[28,31659,407],{"class":45},[28,31661,227],{"class":34},[28,31663,31664],{"class":30,"line":1841},[28,31665,2477],{"emptyLinePlaceholder":144},[28,31667,31668],{"class":30,"line":1855},[28,31669,31670],{"class":105},"# 获得一个batch的数据\n",[28,31672,31673,31675,31678,31680,31683],{"class":30,"line":1860},[28,31674,3102],{"class":38},[28,31676,31677],{"class":34}," step,(b_x,b_y) ",[28,31679,26121],{"class":38},[28,31681,31682],{"class":45}," enumerate",[28,31684,31685],{"class":34},"(train_loader):\n",[28,31687,31688,31690,31693,31695,31697],{"class":30,"line":2654},[28,31689,3178],{"class":38},[28,31691,31692],{"class":34}," step ",[28,31694,1164],{"class":38},[28,31696,4170],{"class":45},[28,31698,3816],{"class":34},[28,31700,31701],{"class":30,"line":2668},[28,31702,31703],{"class":38},"        break\n",[28,31705,31706],{"class":30,"line":2676},[28,31707,31708],{"class":105},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[28,31710,31711,31714,31716,31719],{"class":30,"line":2681},[28,31712,31713],{"class":34},"batch_x",[28,31715,39],{"class":38},[28,31717,31718],{"class":34},"b_x.squeeze().numpy()  ",[28,31720,31721],{"class":105},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[28,31723,31724,31727,31729,31732],{"class":30,"line":2687},[28,31725,31726],{"class":34},"batch_y",[28,31728,39],{"class":38},[28,31730,31731],{"class":34},"b_y.numpy()   ",[28,31733,31734],{"class":105},"#将张量转换成功numpy数组\n",[28,31736,31737,31740,31742,31745],{"class":30,"line":2693},[28,31738,31739],{"class":34},"class_label",[28,31741,39],{"class":38},[28,31743,31744],{"class":34},"train_data.classes  ",[28,31746,31747],{"class":105},"#训练集标签\n",[28,31749,31750],{"class":30,"line":2698},[28,31751,31752],{"class":105},"# print(class_label)\n",[28,31754,31755],{"class":30,"line":8025},[28,31756,2477],{"emptyLinePlaceholder":144},[28,31758,31759],{"class":30,"line":8049},[28,31760,31761],{"class":105},"# 可视化一个batch的图像\n",[28,31763,31764,31767,31770,31772,31774,31776,31778,31780],{"class":30,"line":8054},[28,31765,31766],{"class":34},"plt.figure(",[28,31768,31769],{"class":5293},"figsize",[28,31771,39],{"class":38},[28,31773,221],{"class":34},[28,31775,68],{"class":45},[28,31777,49],{"class":34},[28,31779,533],{"class":45},[28,31781,30573],{"class":34},[28,31783,31784,31786,31789,31791,31794,31796],{"class":30,"line":8060},[28,31785,3102],{"class":38},[28,31787,31788],{"class":34}," ii ",[28,31790,26121],{"class":38},[28,31792,31793],{"class":34}," np.arange(",[28,31795,7435],{"class":45},[28,31797,31798],{"class":34},"(batch_y)):\n",[28,31800,31801,31804,31806,31808,31810,31813,31815,31817],{"class":30,"line":8087},[28,31802,31803],{"class":34},"    plt.subplot(",[28,31805,507],{"class":45},[28,31807,49],{"class":34},[28,31809,811],{"class":45},[28,31811,31812],{"class":34},",ii ",[28,31814,693],{"class":38},[28,31816,25196],{"class":45},[28,31818,227],{"class":34},[28,31820,31821,31824,31827,31829],{"class":30,"line":8092},[28,31822,31823],{"class":34},"    plt.imshow(batch_x[ii,:,:],",[28,31825,31826],{"class":5293},"cmap",[28,31828,39],{"class":38},[28,31830,31831],{"class":34},"plt.cm.gray)\n",[28,31833,31834,31837,31839,31841,31843],{"class":30,"line":8098},[28,31835,31836],{"class":34},"    plt.title(class_label[batch_y[ii]],",[28,31838,31572],{"class":5293},[28,31840,39],{"class":38},[28,31842,659],{"class":45},[28,31844,227],{"class":34},[28,31846,31847,31850,31853],{"class":30,"line":8110},[28,31848,31849],{"class":34},"    plt.axis(",[28,31851,31852],{"class":320},"\"off\"",[28,31854,227],{"class":34},[28,31856,31857,31860,31863,31865,31868],{"class":30,"line":8122},[28,31858,31859],{"class":34},"    plt.subplots_adjust(",[28,31861,31862],{"class":5293},"wspace",[28,31864,39],{"class":38},[28,31866,31867],{"class":45},"0.05",[28,31869,227],{"class":34},[28,31871,31872],{"class":30,"line":8134},[28,31873,31874],{"class":34},"plt.show()\n",[14,31876,31877],{},"用matplotlib进行展示的过程可以后续再补",[14,31879,31880],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31882,31883],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31885,31886],{},"模型训练：",[18,31888,31890],{"className":20,"code":31889,"language":22,"meta":23,"style":23},"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",[25,31891,31892,31899,31906,31910,31922,31928,31939,31949,31959,31969,31979,31984,31996,32006,32010,32014,32019,32030,32043,32054,32071,32082,32121,32137,32149,32160,32165,32176,32192,32203,32214,32225,32232,32236,32241,32246,32250,32255,32265,32286,32290,32294,32299,32304,32309,32329,32333,32338,32348,32352,32357,32366,32371,32376,32381,32391,32395,32399,32404,32409,32419,32424,32434,32439,32448,32453,32462,32467,32476,32480,32485,32495,32499,32503,32508,32523,32551,32566,32570,32575,32580,32589,32594,32603,32608,32617,32622,32631,32636,32645,32650,32659,32664,32677,32682,32692,32697,32707,32713,32719,32725,32731,32742,32748,32768,32774,32785,32791,32797,32803,32809,32815,32821,32827,32847,32853,32869,32875,32889,32895,32910,32916,32925,32931,32940,32946,32952,32961,32967,32978,32984,33003,33009,33020,33026,33046,33062,33068,33082,33088,33094,33105,33111,33117,33127,33133,33144,33150,33160,33165,33171,33220,33267,33272,33278,33297,33303,33323,33329,33335,33345,33350,33356,33372,33417,33423,33429,33435,33446,33452,33458,33464,33482,33496,33505,33514,33523,33532,33538,33544,33552,33557,33563,33574,33580,33600,33606,33612,33618,33635,33641,33647,33653,33659,33665,33692,33716,33722,33728,33734,33745,33756,33762,33779,33802,33825,33831,33836,33845,33855,33861,33866,33872,33885,33891,33902,33913,33932],{"__ignoreMap":23},[28,31893,31894,31896],{"class":30,"line":31},[28,31895,30468],{"class":38},[28,31897,31898],{"class":34}," copy\n",[28,31900,31901,31903],{"class":30,"line":94},[28,31902,30468],{"class":38},[28,31904,31905],{"class":34}," time\n",[28,31907,31908],{"class":30,"line":109},[28,31909,2477],{"emptyLinePlaceholder":144},[28,31911,31912,31914,31917,31919],{"class":30,"line":125},[28,31913,30468],{"class":38},[28,31915,31916],{"class":34}," pandas ",[28,31918,31459],{"class":38},[28,31920,31921],{"class":34}," pd\n",[28,31923,31924,31926],{"class":30,"line":131},[28,31925,30468],{"class":38},[28,31927,30471],{"class":34},[28,31929,31930,31932,31934,31936],{"class":30,"line":1291},[28,31931,30813],{"class":38},[28,31933,31491],{"class":34},[28,31935,30468],{"class":38},[28,31937,31938],{"class":34}," Dataset\n",[28,31940,31941,31943,31945,31947],{"class":30,"line":1297},[28,31942,30813],{"class":38},[28,31944,31444],{"class":34},[28,31946,30468],{"class":38},[28,31948,31449],{"class":34},[28,31950,31951,31953,31955,31957],{"class":30,"line":1388},[28,31952,30813],{"class":38},[28,31954,31474],{"class":34},[28,31956,30468],{"class":38},[28,31958,31479],{"class":34},[28,31960,31961,31963,31965,31967],{"class":30,"line":1394},[28,31962,30468],{"class":38},[28,31964,31491],{"class":34},[28,31966,31459],{"class":38},[28,31968,31496],{"class":34},[28,31970,31971,31973,31975,31977],{"class":30,"line":1406},[28,31972,30468],{"class":38},[28,31974,31508],{"class":34},[28,31976,31459],{"class":38},[28,31978,31513],{"class":34},[28,31980,31981],{"class":30,"line":1689},[28,31982,31983],{"class":105},"# 导入模型\n",[28,31985,31986,31988,31991,31993],{"class":30,"line":1694},[28,31987,30813],{"class":38},[28,31989,31990],{"class":34}," model ",[28,31992,30468],{"class":38},[28,31994,31995],{"class":34}," LeNet\n",[28,31997,31998,32000,32002,32004],{"class":30,"line":1700},[28,31999,30813],{"class":38},[28,32001,30816],{"class":34},[28,32003,30468],{"class":38},[28,32005,30821],{"class":34},[28,32007,32008],{"class":30,"line":1705},[28,32009,2477],{"emptyLinePlaceholder":144},[28,32011,32012],{"class":30,"line":1719},[28,32013,2477],{"emptyLinePlaceholder":144},[28,32015,32016],{"class":30,"line":1724},[28,32017,32018],{"class":105},"# 处理训练集与验证集函数--->划分数据集\n",[28,32020,32021,32024,32027],{"class":30,"line":1730},[28,32022,32023],{"class":38},"def",[28,32025,32026],{"class":2040}," train_val_data_process",[28,32028,32029],{"class":34},"():\n",[28,32031,32032,32035,32037,32039,32041],{"class":30,"line":1751},[28,32033,32034],{"class":34},"    train_data",[28,32036,39],{"class":38},[28,32038,31531],{"class":34},[28,32040,31539],{"class":320},[28,32042,31542],{"class":34},[28,32044,32045,32048,32050,32052],{"class":30,"line":1756},[28,32046,32047],{"class":5293},"                            train",[28,32049,39],{"class":38},[28,32051,31552],{"class":45},[28,32053,31542],{"class":34},[28,32055,32056,32059,32061,32063,32065,32067,32069],{"class":30,"line":1770},[28,32057,32058],{"class":5293},"                            transform",[28,32060,39],{"class":38},[28,32062,31569],{"class":34},[28,32064,31572],{"class":5293},[28,32066,39],{"class":38},[28,32068,1107],{"class":45},[28,32070,31580],{"class":34},[28,32072,32073,32076,32078,32080],{"class":30,"line":1775},[28,32074,32075],{"class":5293},"                            download",[28,32077,39],{"class":38},[28,32079,31552],{"class":45},[28,32081,227],{"class":34},[28,32083,32084,32087,32089,32092,32095,32097,32100,32102,32104,32107,32109,32111,32114,32116,32118],{"class":30,"line":1804},[28,32085,32086],{"class":34},"    train_data,val_data",[28,32088,39],{"class":38},[28,32090,32091],{"class":34},"Data.random_split(train_data,[",[28,32093,32094],{"class":45},"round",[28,32096,221],{"class":34},[28,32098,32099],{"class":45},"0.8",[28,32101,668],{"class":38},[28,32103,7435],{"class":45},[28,32105,32106],{"class":34},"(train_data)),",[28,32108,32094],{"class":45},[28,32110,221],{"class":34},[28,32112,32113],{"class":45},"0.2",[28,32115,668],{"class":38},[28,32117,7435],{"class":45},[28,32119,32120],{"class":34},"(train_data))])\n",[28,32122,32123,32126,32128,32131,32133,32135],{"class":30,"line":1809},[28,32124,32125],{"class":34},"    train_dataloader ",[28,32127,39],{"class":38},[28,32129,32130],{"class":34}," Data.DataLoader(",[28,32132,31613],{"class":5293},[28,32134,39],{"class":38},[28,32136,31618],{"class":34},[28,32138,32139,32142,32144,32147],{"class":30,"line":1826},[28,32140,32141],{"class":5293},"                                       batch_size",[28,32143,39],{"class":38},[28,32145,32146],{"class":45},"128",[28,32148,31542],{"class":34},[28,32150,32151,32154,32156,32158],{"class":30,"line":1831},[28,32152,32153],{"class":5293},"                                       shuffle",[28,32155,39],{"class":38},[28,32157,31552],{"class":45},[28,32159,31542],{"class":34},[28,32161,32162],{"class":30,"line":1836},[28,32163,32164],{"class":105},"                                       # 规定8个进程\n",[28,32166,32167,32170,32172,32174],{"class":30,"line":1841},[28,32168,32169],{"class":5293},"                                       num_workers",[28,32171,39],{"class":38},[28,32173,608],{"class":45},[28,32175,227],{"class":34},[28,32177,32178,32181,32183,32185,32187,32189],{"class":30,"line":1855},[28,32179,32180],{"class":34},"    val_dataloader",[28,32182,39],{"class":38},[28,32184,31610],{"class":34},[28,32186,31613],{"class":5293},[28,32188,39],{"class":38},[28,32190,32191],{"class":34},"val_data,\n",[28,32193,32194,32197,32199,32201],{"class":30,"line":1860},[28,32195,32196],{"class":5293},"                                   batch_size",[28,32198,39],{"class":38},[28,32200,32146],{"class":45},[28,32202,31542],{"class":34},[28,32204,32205,32208,32210,32212],{"class":30,"line":2654},[28,32206,32207],{"class":5293},"                                   shuffle",[28,32209,39],{"class":38},[28,32211,31552],{"class":45},[28,32213,31542],{"class":34},[28,32215,32216,32219,32221,32223],{"class":30,"line":2668},[28,32217,32218],{"class":5293},"                                   num_workers",[28,32220,39],{"class":38},[28,32222,608],{"class":45},[28,32224,227],{"class":34},[28,32226,32227,32229],{"class":30,"line":2676},[28,32228,4167],{"class":38},[28,32230,32231],{"class":34}," train_dataloader,val_dataloader\n",[28,32233,32234],{"class":30,"line":2681},[28,32235,2477],{"emptyLinePlaceholder":144},[28,32237,32238],{"class":30,"line":2687},[28,32239,32240],{"class":105},"# 验证是否出错\n",[28,32242,32243],{"class":30,"line":2693},[28,32244,32245],{"class":105},"# train_val_data_process()\n",[28,32247,32248],{"class":30,"line":2698},[28,32249,2477],{"emptyLinePlaceholder":144},[28,32251,32252],{"class":30,"line":8025},[28,32253,32254],{"class":105},"# 定义模型训练函数\n",[28,32256,32257,32259,32262],{"class":30,"line":8049},[28,32258,32023],{"class":38},[28,32260,32261],{"class":2040}," train_model_process",[28,32263,32264],{"class":34},"(model,train_dataloader,val_dataloader,num_epochs):\n",[28,32266,32267,32269,32271,32273,32275,32277,32279,32281,32284],{"class":30,"line":8054},[28,32268,31313],{"class":34},[28,32270,39],{"class":38},[28,32272,30527],{"class":34},[28,32274,31320],{"class":320},[28,32276,1781],{"class":38},[28,32278,31325],{"class":34},[28,32280,1778],{"class":38},[28,32282,32283],{"class":320}," 'cpu'",[28,32285,227],{"class":34},[28,32287,32288],{"class":30,"line":8060},[28,32289,2477],{"emptyLinePlaceholder":144},[28,32291,32292],{"class":30,"line":8087},[28,32293,2477],{"emptyLinePlaceholder":144},[28,32295,32296],{"class":30,"line":8092},[28,32297,32298],{"class":105},"    # 定义优化器\n",[28,32300,32301],{"class":30,"line":8098},[28,32302,32303],{"class":105},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[28,32305,32306],{"class":30,"line":8110},[28,32307,32308],{"class":105},"    # lr为学习率\n",[28,32310,32311,32314,32316,32319,32322,32324,32327],{"class":30,"line":8122},[28,32312,32313],{"class":34},"    optimizer",[28,32315,39],{"class":38},[28,32317,32318],{"class":34},"torch.optim.Adam(model.parameters(),",[28,32320,32321],{"class":5293},"lr",[28,32323,39],{"class":38},[28,32325,32326],{"class":45},"0.001",[28,32328,227],{"class":34},[28,32330,32331],{"class":30,"line":8134},[28,32332,2477],{"emptyLinePlaceholder":144},[28,32334,32335],{"class":30,"line":9793},[28,32336,32337],{"class":105},"    # 定义损失函数使用交叉熵损失函数\n",[28,32339,32340,32343,32345],{"class":30,"line":9818},[28,32341,32342],{"class":34},"    criterion",[28,32344,39],{"class":38},[28,32346,32347],{"class":34},"nn.CrossEntropyLoss()\n",[28,32349,32350],{"class":30,"line":9841},[28,32351,2477],{"emptyLinePlaceholder":144},[28,32353,32354],{"class":30,"line":9865},[28,32355,32356],{"class":105},"    # 将模型放到GPU中进行训练\n",[28,32358,32359,32361,32363],{"class":30,"line":9870},[28,32360,31365],{"class":34},[28,32362,39],{"class":38},[28,32364,32365],{"class":34},"model.to(device)\n",[28,32367,32368],{"class":30,"line":9875},[28,32369,32370],{"class":105},"    # 复制当前模型的参数\n",[28,32372,32373],{"class":30,"line":9880},[28,32374,32375],{"class":105},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[28,32377,32378],{"class":30,"line":9889},[28,32379,32380],{"class":105},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[28,32382,32383,32386,32388],{"class":30,"line":9894},[28,32384,32385],{"class":34},"    best_model_wts",[28,32387,39],{"class":38},[28,32389,32390],{"class":34},"copy.deepcopy(model.state_dict())\n",[28,32392,32393],{"class":30,"line":9900},[28,32394,2477],{"emptyLinePlaceholder":144},[28,32396,32397],{"class":30,"line":9921},[28,32398,2477],{"emptyLinePlaceholder":144},[28,32400,32401],{"class":30,"line":9927},[28,32402,32403],{"class":105},"    # 初始化参数\n",[28,32405,32406],{"class":30,"line":9941},[28,32407,32408],{"class":105},"    # 最高准确度\n",[28,32410,32411,32414,32416],{"class":30,"line":9947},[28,32412,32413],{"class":34},"    best_acc",[28,32415,39],{"class":38},[28,32417,32418],{"class":45},"0.0\n",[28,32420,32421],{"class":30,"line":9974},[28,32422,32423],{"class":105},"    # 训练集损失列表\n",[28,32425,32426,32429,32431],{"class":30,"line":9983},[28,32427,32428],{"class":34},"    train_loss_all",[28,32430,39],{"class":38},[28,32432,32433],{"class":34},"[]\n",[28,32435,32436],{"class":30,"line":9989},[28,32437,32438],{"class":105},"    # 验证集函数列表\n",[28,32440,32441,32444,32446],{"class":30,"line":9997},[28,32442,32443],{"class":34},"    val_loss_all",[28,32445,39],{"class":38},[28,32447,32433],{"class":34},[28,32449,32450],{"class":30,"line":10002},[28,32451,32452],{"class":105},"    # 训练集准确度列表\n",[28,32454,32455,32458,32460],{"class":30,"line":16681},[28,32456,32457],{"class":34},"    train_acc_all",[28,32459,39],{"class":38},[28,32461,32433],{"class":34},[28,32463,32464],{"class":30,"line":16687},[28,32465,32466],{"class":105},"    # 验证集准确度列表\n",[28,32468,32469,32472,32474],{"class":30,"line":16710},[28,32470,32471],{"class":34},"    val_acc_all",[28,32473,39],{"class":38},[28,32475,32433],{"class":34},[28,32477,32478],{"class":30,"line":16716},[28,32479,2477],{"emptyLinePlaceholder":144},[28,32481,32482],{"class":30,"line":16739},[28,32483,32484],{"class":105},"    # 保存当前时间--->方便看每轮训练的时间\n",[28,32486,32487,32490,32492],{"class":30,"line":16753},[28,32488,32489],{"class":34},"    since",[28,32491,39],{"class":38},[28,32493,32494],{"class":34},"time.time()\n",[28,32496,32497],{"class":30,"line":16773},[28,32498,2477],{"emptyLinePlaceholder":144},[28,32500,32501],{"class":30,"line":16779},[28,32502,2477],{"emptyLinePlaceholder":144},[28,32504,32505],{"class":30,"line":16790},[28,32506,32507],{"class":105},"    # 准备工作完成--->开始训练模型\n",[28,32509,32510,32512,32515,32517,32520],{"class":30,"line":16813},[28,32511,3278],{"class":38},[28,32513,32514],{"class":34}," epoch ",[28,32516,26121],{"class":38},[28,32518,32519],{"class":45}," range",[28,32521,32522],{"class":34},"(num_epochs):\n",[28,32524,32525,32528,32530,32533,32536,32538,32540,32542,32545,32547,32549],{"class":30,"line":16835},[28,32526,32527],{"class":45},"        print",[28,32529,221],{"class":34},[28,32531,32532],{"class":320},"\"Epoch ",[28,32534,32535],{"class":45},"{}",[28,32537,794],{"class":320},[28,32539,32535],{"class":45},[28,32541,465],{"class":320},[28,32543,32544],{"class":34},".format(epoch,num_epochs",[28,32546,742],{"class":38},[28,32548,46],{"class":45},[28,32550,30573],{"class":34},[28,32552,32553,32555,32557,32560,32562,32564],{"class":30,"line":16840},[28,32554,32527],{"class":45},[28,32556,221],{"class":34},[28,32558,32559],{"class":320},"\"-\"",[28,32561,668],{"class":38},[28,32563,659],{"class":45},[28,32565,227],{"class":34},[28,32567,32568],{"class":30,"line":16846},[28,32569,2477],{"emptyLinePlaceholder":144},[28,32571,32572],{"class":30,"line":16860},[28,32573,32574],{"class":105},"        # 初始化参数\n",[28,32576,32577],{"class":30,"line":16873},[28,32578,32579],{"class":105},"        # 训练集损失函数\n",[28,32581,32582,32585,32587],{"class":30,"line":16878},[28,32583,32584],{"class":34},"        train_loss",[28,32586,39],{"class":38},[28,32588,32418],{"class":45},[28,32590,32591],{"class":30,"line":16892},[28,32592,32593],{"class":105},"        # 训练集准确度\n",[28,32595,32596,32599,32601],{"class":30,"line":16897},[28,32597,32598],{"class":34},"        train_corrects",[28,32600,39],{"class":38},[28,32602,3162],{"class":45},[28,32604,32605],{"class":30,"line":16903},[28,32606,32607],{"class":105},"        # 验证集损失函数\n",[28,32609,32610,32613,32615],{"class":30,"line":16908},[28,32611,32612],{"class":34},"        val_loss",[28,32614,39],{"class":38},[28,32616,32418],{"class":45},[28,32618,32619],{"class":30,"line":16922},[28,32620,32621],{"class":105},"        # 验证集准确度\n",[28,32623,32624,32627,32629],{"class":30,"line":16927},[28,32625,32626],{"class":34},"        val_corrects",[28,32628,39],{"class":38},[28,32630,3162],{"class":45},[28,32632,32633],{"class":30,"line":16932},[28,32634,32635],{"class":105},"        # 训练集样本数量\n",[28,32637,32638,32641,32643],{"class":30,"line":16946},[28,32639,32640],{"class":34},"        train_num",[28,32642,39],{"class":38},[28,32644,3162],{"class":45},[28,32646,32647],{"class":30,"line":16958},[28,32648,32649],{"class":105},"        # 验证集样本数量\n",[28,32651,32652,32655,32657],{"class":30,"line":16963},[28,32653,32654],{"class":34},"        val_num",[28,32656,39],{"class":38},[28,32658,3162],{"class":45},[28,32660,32661],{"class":30,"line":16976},[28,32662,32663],{"class":105},"        # 将数据放到设备,并开始训练\n",[28,32665,32666,32668,32670,32672,32674],{"class":30,"line":16981},[28,32667,3480],{"class":38},[28,32669,31677],{"class":34},[28,32671,26121],{"class":38},[28,32673,31682],{"class":45},[28,32675,32676],{"class":34},"(train_dataloader):\n",[28,32678,32679],{"class":30,"line":16986},[28,32680,32681],{"class":105},"            # 将特征放入到训练设备\n",[28,32683,32684,32687,32689],{"class":30,"line":16991},[28,32685,32686],{"class":34},"            b_x",[28,32688,39],{"class":38},[28,32690,32691],{"class":34},"b_x.to(device)\n",[28,32693,32694],{"class":30,"line":17004},[28,32695,32696],{"class":105},"            # 将标签放入到训练设备当中\n",[28,32698,32699,32702,32704],{"class":30,"line":17009},[28,32700,32701],{"class":34},"            b_y",[28,32703,39],{"class":38},[28,32705,32706],{"class":34},"b_y.to(device)\n",[28,32708,32710],{"class":30,"line":32709},98,[28,32711,32712],{"class":105},"            # 设置模型为训练模式\n",[28,32714,32716],{"class":30,"line":32715},99,[28,32717,32718],{"class":34},"            model.train()\n",[28,32720,32722],{"class":30,"line":32721},100,[28,32723,32724],{"class":105},"            # 将数据放到模型当中,开始前向传播\n",[28,32726,32728],{"class":30,"line":32727},101,[28,32729,32730],{"class":105},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[28,32732,32734,32737,32739],{"class":30,"line":32733},102,[28,32735,32736],{"class":34},"            output",[28,32738,39],{"class":38},[28,32740,32741],{"class":34},"model(b_x)\n",[28,32743,32745],{"class":30,"line":32744},103,[28,32746,32747],{"class":105},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[28,32749,32751,32754,32756,32759,32762,32764,32766],{"class":30,"line":32750},104,[28,32752,32753],{"class":34},"            pre_lab",[28,32755,39],{"class":38},[28,32757,32758],{"class":34},"torch.argmax(output,",[28,32760,32761],{"class":5293},"dim",[28,32763,39],{"class":38},[28,32765,46],{"class":45},[28,32767,227],{"class":34},[28,32769,32771],{"class":30,"line":32770},105,[28,32772,32773],{"class":105},"            # 计算每一个batch的损失函数\n",[28,32775,32777,32780,32782],{"class":30,"line":32776},106,[28,32778,32779],{"class":34},"            loss",[28,32781,39],{"class":38},[28,32783,32784],{"class":34},"criterion(output,b_y)\n",[28,32786,32788],{"class":30,"line":32787},107,[28,32789,32790],{"class":105},"            # 将梯度初始化为0\n",[28,32792,32794],{"class":30,"line":32793},108,[28,32795,32796],{"class":34},"            optimizer.zero_grad()\n",[28,32798,32800],{"class":30,"line":32799},109,[28,32801,32802],{"class":105},"            # 梯度置为0后再进行反向传播\n",[28,32804,32806],{"class":30,"line":32805},110,[28,32807,32808],{"class":34},"            loss.backward()\n",[28,32810,32812],{"class":30,"line":32811},111,[28,32813,32814],{"class":105},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[28,32816,32818],{"class":30,"line":32817},112,[28,32819,32820],{"class":34},"            optimizer.step()\n",[28,32822,32824],{"class":30,"line":32823},113,[28,32825,32826],{"class":105},"            # loss.item()指的是batch的平均损失\n",[28,32828,32830,32833,32835,32838,32840,32843,32845],{"class":30,"line":32829},114,[28,32831,32832],{"class":34},"            train_loss",[28,32834,9554],{"class":38},[28,32836,32837],{"class":34},"loss.item()",[28,32839,668],{"class":38},[28,32841,32842],{"class":34},"b_x.size(",[28,32844,407],{"class":45},[28,32846,227],{"class":34},[28,32848,32850],{"class":30,"line":32849},115,[28,32851,32852],{"class":105},"            # 计算每个批次中正确预测的数量\n",[28,32854,32856,32859,32861,32864,32866],{"class":30,"line":32855},116,[28,32857,32858],{"class":34},"            train_corrects",[28,32860,9554],{"class":38},[28,32862,32863],{"class":34},"torch.sum(pre_lab",[28,32865,3026],{"class":38},[28,32867,32868],{"class":34},"b_y.data)\n",[28,32870,32872],{"class":30,"line":32871},117,[28,32873,32874],{"class":105},"            # 计算目前为止一共处理了多少样本\n",[28,32876,32878,32881,32883,32885,32887],{"class":30,"line":32877},118,[28,32879,32880],{"class":34},"            train_num",[28,32882,9554],{"class":38},[28,32884,32842],{"class":34},[28,32886,407],{"class":45},[28,32888,227],{"class":34},[28,32890,32892],{"class":30,"line":32891},119,[28,32893,32894],{"class":105},"        # 验证数据\n",[28,32896,32898,32900,32903,32905,32907],{"class":30,"line":32897},120,[28,32899,3480],{"class":38},[28,32901,32902],{"class":34}," step ,(b_x,b_y) ",[28,32904,26121],{"class":38},[28,32906,31682],{"class":45},[28,32908,32909],{"class":34},"(val_dataloader):\n",[28,32911,32913],{"class":30,"line":32912},121,[28,32914,32915],{"class":105},"            # 将特征放到验证设备当中\n",[28,32917,32919,32921,32923],{"class":30,"line":32918},122,[28,32920,32686],{"class":34},[28,32922,39],{"class":38},[28,32924,32691],{"class":34},[28,32926,32928],{"class":30,"line":32927},123,[28,32929,32930],{"class":105},"            # 将标签放到放到训练设备当中\n",[28,32932,32934,32936,32938],{"class":30,"line":32933},124,[28,32935,32701],{"class":34},[28,32937,39],{"class":38},[28,32939,32706],{"class":34},[28,32941,32943],{"class":30,"line":32942},125,[28,32944,32945],{"class":105},"            # 开启验证模式，设置模型为评估模式\n",[28,32947,32949],{"class":30,"line":32948},126,[28,32950,32951],{"class":34},"            model.eval()\n",[28,32953,32955,32958],{"class":30,"line":32954},127,[28,32956,32957],{"class":38},"            with",[28,32959,32960],{"class":34}," torch.no_grad():\n",[28,32962,32964],{"class":30,"line":32963},128,[28,32965,32966],{"class":105},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[28,32968,32970,32973,32975],{"class":30,"line":32969},129,[28,32971,32972],{"class":34},"                output ",[28,32974,39],{"class":38},[28,32976,32977],{"class":34}," model(b_x)\n",[28,32979,32981],{"class":30,"line":32980},130,[28,32982,32983],{"class":105},"                # 查找每一行中最大值对应的下标\n",[28,32985,32987,32990,32992,32995,32997,32999,33001],{"class":30,"line":32986},131,[28,32988,32989],{"class":34},"                pre_lab ",[28,32991,39],{"class":38},[28,32993,32994],{"class":34}," torch.argmax(output, ",[28,32996,32761],{"class":5293},[28,32998,39],{"class":38},[28,33000,46],{"class":45},[28,33002,227],{"class":34},[28,33004,33006],{"class":30,"line":33005},132,[28,33007,33008],{"class":105},"                # 计算验证集上的当前 batch 损失\n",[28,33010,33012,33015,33017],{"class":30,"line":33011},133,[28,33013,33014],{"class":34},"                val_batch_loss ",[28,33016,39],{"class":38},[28,33018,33019],{"class":34}," criterion(output, b_y)\n",[28,33021,33023],{"class":30,"line":33022},134,[28,33024,33025],{"class":105},"                # 对损失函数进行累加（按样本数加权）\n",[28,33027,33029,33032,33034,33037,33039,33042,33044],{"class":30,"line":33028},135,[28,33030,33031],{"class":34},"                val_loss ",[28,33033,9554],{"class":38},[28,33035,33036],{"class":34}," val_batch_loss.item() ",[28,33038,668],{"class":38},[28,33040,33041],{"class":34}," b_x.size(",[28,33043,407],{"class":45},[28,33045,227],{"class":34},[28,33047,33049,33052,33054,33057,33059],{"class":30,"line":33048},136,[28,33050,33051],{"class":34},"                val_corrects ",[28,33053,9554],{"class":38},[28,33055,33056],{"class":34}," torch.sum(pre_lab ",[28,33058,3026],{"class":38},[28,33060,33061],{"class":34}," b_y.data)\n",[28,33063,33065],{"class":30,"line":33064},137,[28,33066,33067],{"class":105},"                # 当前用于验证的样本数量\n",[28,33069,33071,33074,33076,33078,33080],{"class":30,"line":33070},138,[28,33072,33073],{"class":34},"            val_num ",[28,33075,9554],{"class":38},[28,33077,33041],{"class":34},[28,33079,407],{"class":45},[28,33081,227],{"class":34},[28,33083,33085],{"class":30,"line":33084},139,[28,33086,33087],{"class":105},"        # 计算并保存每一次迭代的loss值和准确率\n",[28,33089,33091],{"class":30,"line":33090},140,[28,33092,33093],{"class":105},"        # 计算并保存训练集的loss值\n",[28,33095,33097,33100,33102],{"class":30,"line":33096},141,[28,33098,33099],{"class":34},"        train_loss_all.append(train_loss",[28,33101,794],{"class":38},[28,33103,33104],{"class":34},"train_num)\n",[28,33106,33108],{"class":30,"line":33107},142,[28,33109,33110],{"class":105},"        # 取双精度\n",[28,33112,33114],{"class":30,"line":33113},143,[28,33115,33116],{"class":105},"        # 计算并保存训练集的准确率\n",[28,33118,33120,33123,33125],{"class":30,"line":33119},144,[28,33121,33122],{"class":34},"        train_acc_all.append(train_corrects.double().item()",[28,33124,794],{"class":38},[28,33126,33104],{"class":34},[28,33128,33130],{"class":30,"line":33129},145,[28,33131,33132],{"class":105},"        # 计算并保存验证集的loss值\n",[28,33134,33136,33139,33141],{"class":30,"line":33135},146,[28,33137,33138],{"class":34},"        val_loss_all.append(val_loss",[28,33140,794],{"class":38},[28,33142,33143],{"class":34},"val_num)\n",[28,33145,33147],{"class":30,"line":33146},147,[28,33148,33149],{"class":105},"        # 计算并保存验证集的准确率\n",[28,33151,33153,33156,33158],{"class":30,"line":33152},148,[28,33154,33155],{"class":34},"        val_acc_all.append(val_corrects.double().item()",[28,33157,794],{"class":38},[28,33159,33143],{"class":34},[28,33161,33163],{"class":30,"line":33162},149,[28,33164,2477],{"emptyLinePlaceholder":144},[28,33166,33168],{"class":30,"line":33167},150,[28,33169,33170],{"class":105},"        # 打印训练一轮的loss值和准确率\n",[28,33172,33174,33176,33178,33180,33182,33185,33187,33190,33192,33195,33197,33199,33201,33203,33206,33208,33210,33213,33215,33217],{"class":30,"line":33173},151,[28,33175,32527],{"class":45},[28,33177,221],{"class":34},[28,33179,3669],{"class":320},[28,33181,32535],{"class":45},[28,33183,33184],{"class":320},"train loss:",[28,33186,1102],{"class":45},[28,33188,33189],{"class":38},":.4f",[28,33191,1150],{"class":45},[28,33193,33194],{"class":320}," train acc:",[28,33196,1102],{"class":45},[28,33198,33189],{"class":38},[28,33200,1150],{"class":45},[28,33202,3669],{"class":320},[28,33204,33205],{"class":34},".format(epoch,train_loss_all[",[28,33207,742],{"class":38},[28,33209,46],{"class":45},[28,33211,33212],{"class":34},"],train_acc_all[",[28,33214,742],{"class":38},[28,33216,46],{"class":45},[28,33218,33219],{"class":34},"]))\n",[28,33221,33223,33225,33227,33229,33231,33234,33236,33238,33240,33243,33245,33247,33249,33251,33254,33256,33258,33261,33263,33265],{"class":30,"line":33222},152,[28,33224,32527],{"class":45},[28,33226,221],{"class":34},[28,33228,3669],{"class":320},[28,33230,32535],{"class":45},[28,33232,33233],{"class":320},"val loss:",[28,33235,1102],{"class":45},[28,33237,33189],{"class":38},[28,33239,1150],{"class":45},[28,33241,33242],{"class":320}," val acc:",[28,33244,1102],{"class":45},[28,33246,33189],{"class":38},[28,33248,1150],{"class":45},[28,33250,3669],{"class":320},[28,33252,33253],{"class":34},".format(epoch,val_loss_all[",[28,33255,742],{"class":38},[28,33257,46],{"class":45},[28,33259,33260],{"class":34},"],val_acc_all[",[28,33262,742],{"class":38},[28,33264,46],{"class":45},[28,33266,33219],{"class":34},[28,33268,33270],{"class":30,"line":33269},153,[28,33271,2477],{"emptyLinePlaceholder":144},[28,33273,33275],{"class":30,"line":33274},154,[28,33276,33277],{"class":105},"        # 判断准确度--->保存最优模型\n",[28,33279,33281,33283,33286,33288,33290,33292,33294],{"class":30,"line":33280},155,[28,33282,2574],{"class":38},[28,33284,33285],{"class":34}," val_acc_all[",[28,33287,742],{"class":38},[28,33289,46],{"class":45},[28,33291,119],{"class":34},[28,33293,1164],{"class":38},[28,33295,33296],{"class":34},"best_acc:\n",[28,33298,33300],{"class":30,"line":33299},156,[28,33301,33302],{"class":105},"            # 保存当前模型准确度\n",[28,33304,33306,33309,33311,33313,33316,33318,33320],{"class":30,"line":33305},157,[28,33307,33308],{"class":34},"            best_acc:",[28,33310,260],{"class":45},[28,33312,39],{"class":38},[28,33314,33315],{"class":34},"val_acc_all[",[28,33317,742],{"class":38},[28,33319,46],{"class":45},[28,33321,33322],{"class":34},"]\n",[28,33324,33326],{"class":30,"line":33325},158,[28,33327,33328],{"class":105},"            # 保存当前的准确度\n",[28,33330,33332],{"class":30,"line":33331},159,[28,33333,33334],{"class":105},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[28,33336,33338,33341,33343],{"class":30,"line":33337},160,[28,33339,33340],{"class":34},"            best_model_wts",[28,33342,39],{"class":38},[28,33344,32390],{"class":34},[28,33346,33348],{"class":30,"line":33347},161,[28,33349,2477],{"emptyLinePlaceholder":144},[28,33351,33353],{"class":30,"line":33352},162,[28,33354,33355],{"class":105},"        # 计算耗时\n",[28,33357,33359,33362,33364,33367,33369],{"class":30,"line":33358},163,[28,33360,33361],{"class":34},"        time_use",[28,33363,39],{"class":38},[28,33365,33366],{"class":34},"time.time()",[28,33368,742],{"class":38},[28,33370,33371],{"class":34},"since\n",[28,33373,33375,33377,33379,33382,33384,33387,33389,33391,33393,33395,33397,33400,33403,33406,33408,33411,33413,33415],{"class":30,"line":33374},164,[28,33376,32527],{"class":45},[28,33378,221],{"class":34},[28,33380,33381],{"class":320},"'训练和验证耗费的时间",[28,33383,1102],{"class":45},[28,33385,33386],{"class":38},":.0f",[28,33388,1150],{"class":45},[28,33390,754],{"class":320},[28,33392,1102],{"class":45},[28,33394,33386],{"class":38},[28,33396,1150],{"class":45},[28,33398,33399],{"class":320},"s'",[28,33401,33402],{"class":34},".format(time_use",[28,33404,33405],{"class":38},"\u002F\u002F",[28,33407,1113],{"class":45},[28,33409,33410],{"class":34},",time_use",[28,33412,542],{"class":38},[28,33414,1113],{"class":45},[28,33416,30573],{"class":34},[28,33418,33420],{"class":30,"line":33419},165,[28,33421,33422],{"class":105},"    # 选择最优参数\n",[28,33424,33426],{"class":30,"line":33425},166,[28,33427,33428],{"class":105},"    # 加载最高准确率下的模型参数\n",[28,33430,33432],{"class":30,"line":33431},167,[28,33433,33434],{"class":105},"    # model.load_state_dict(best_model_wts)\n",[28,33436,33438,33441,33444],{"class":30,"line":33437},168,[28,33439,33440],{"class":34},"    torch.save(model.state_dict(best_model_wts), ",[28,33442,33443],{"class":320},"'.\u002Fbest_model.pth'",[28,33445,227],{"class":34},[28,33447,33449],{"class":30,"line":33448},169,[28,33450,33451],{"class":105},"    # 或者写成\n",[28,33453,33455],{"class":30,"line":33454},170,[28,33456,33457],{"class":105},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[28,33459,33461],{"class":30,"line":33460},171,[28,33462,33463],{"class":105},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[28,33465,33467,33470,33472,33475,33478,33480],{"class":30,"line":33466},172,[28,33468,33469],{"class":34},"    train_process",[28,33471,39],{"class":38},[28,33473,33474],{"class":34},"pd.DataFrame(",[28,33476,33477],{"class":5293},"data",[28,33479,39],{"class":38},[28,33481,1623],{"class":34},[28,33483,33485,33488,33490,33493],{"class":30,"line":33484},173,[28,33486,33487],{"class":320},"        \"epoch\"",[28,33489,1065],{"class":34},[28,33491,33492],{"class":45},"range",[28,33494,33495],{"class":34},"(num_epochs),\n",[28,33497,33499,33502],{"class":30,"line":33498},174,[28,33500,33501],{"class":320},"        \"train_loss_all\"",[28,33503,33504],{"class":34},":train_loss_all,\n",[28,33506,33508,33511],{"class":30,"line":33507},175,[28,33509,33510],{"class":320},"        \"val_loss_all\"",[28,33512,33513],{"class":34},":val_loss_all,\n",[28,33515,33517,33520],{"class":30,"line":33516},176,[28,33518,33519],{"class":320},"        \"train_acc_all\"",[28,33521,33522],{"class":34},":train_acc_all,\n",[28,33524,33526,33529],{"class":30,"line":33525},177,[28,33527,33528],{"class":320},"        \"val_acc_all\"",[28,33530,33531],{"class":34},":val_acc_all\n",[28,33533,33535],{"class":30,"line":33534},178,[28,33536,33537],{"class":34},"    })\n",[28,33539,33541],{"class":30,"line":33540},179,[28,33542,33543],{"class":105},"    # 返回训练保存的过程\n",[28,33545,33547,33549],{"class":30,"line":33546},180,[28,33548,4167],{"class":38},[28,33550,33551],{"class":34}," train_process\n",[28,33553,33555],{"class":30,"line":33554},181,[28,33556,2477],{"emptyLinePlaceholder":144},[28,33558,33560],{"class":30,"line":33559},182,[28,33561,33562],{"class":105},"# 将loss值和精度按照图片的形式展示出来\n",[28,33564,33566,33568,33571],{"class":30,"line":33565},183,[28,33567,32023],{"class":38},[28,33569,33570],{"class":2040}," matplot_acc_loss",[28,33572,33573],{"class":34},"(train_process):\n",[28,33575,33577],{"class":30,"line":33576},184,[28,33578,33579],{"class":105},"    # 设置图的大小\n",[28,33581,33583,33586,33588,33590,33592,33594,33596,33598],{"class":30,"line":33582},185,[28,33584,33585],{"class":34},"    plt.figure(",[28,33587,31769],{"class":5293},[28,33589,39],{"class":38},[28,33591,221],{"class":34},[28,33593,68],{"class":45},[28,33595,49],{"class":34},[28,33597,507],{"class":45},[28,33599,30573],{"class":34},[28,33601,33603],{"class":30,"line":33602},186,[28,33604,33605],{"class":105},"    # 设置图中有几张图\n",[28,33607,33609],{"class":30,"line":33608},187,[28,33610,33611],{"class":105},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[28,33613,33615],{"class":30,"line":33614},188,[28,33616,33617],{"class":105},"    # ①loss图\n",[28,33619,33621,33623,33625,33627,33629,33631,33633],{"class":30,"line":33620},189,[28,33622,31803],{"class":34},[28,33624,46],{"class":45},[28,33626,49],{"class":34},[28,33628,52],{"class":45},[28,33630,49],{"class":34},[28,33632,46],{"class":45},[28,33634,227],{"class":34},[28,33636,33638],{"class":30,"line":33637},190,[28,33639,33640],{"class":105},"    # 补充:\n",[28,33642,33644],{"class":30,"line":33643},191,[28,33645,33646],{"class":105},"    # plt.subplot(nrows, ncols, index)\n",[28,33648,33650],{"class":30,"line":33649},192,[28,33651,33652],{"class":105},"    # nrows：行数\n",[28,33654,33656],{"class":30,"line":33655},193,[28,33657,33658],{"class":105},"    # ncols：列数\n",[28,33660,33662],{"class":30,"line":33661},194,[28,33663,33664],{"class":105},"    # index：目前选中第几个子图（从1开始）\n",[28,33666,33668,33671,33674,33677,33680,33682,33685,33687,33690],{"class":30,"line":33667},195,[28,33669,33670],{"class":34},"    plt.plot(train_process[",[28,33672,33673],{"class":320},"\"epoch\"",[28,33675,33676],{"class":34},"],train_process.train_loss_all,",[28,33678,33679],{"class":320},"'ro-'",[28,33681,49],{"class":34},[28,33683,33684],{"class":5293},"label",[28,33686,39],{"class":38},[28,33688,33689],{"class":320},"'train loss'",[28,33691,227],{"class":34},[28,33693,33695,33697,33699,33702,33705,33707,33709,33711,33714],{"class":30,"line":33694},196,[28,33696,33670],{"class":34},[28,33698,33673],{"class":320},[28,33700,33701],{"class":34},"],train_process.val_loss_all,",[28,33703,33704],{"class":320},"'bs--'",[28,33706,49],{"class":34},[28,33708,33684],{"class":5293},[28,33710,39],{"class":38},[28,33712,33713],{"class":320},"'val loss'",[28,33715,227],{"class":34},[28,33717,33719],{"class":30,"line":33718},197,[28,33720,33721],{"class":105},"    # 添加一个图例\n",[28,33723,33725],{"class":30,"line":33724},198,[28,33726,33727],{"class":34},"    plt.legend()\n",[28,33729,33731],{"class":30,"line":33730},199,[28,33732,33733],{"class":105},"    # 给轴添加标签\n",[28,33735,33737,33740,33743],{"class":30,"line":33736},200,[28,33738,33739],{"class":34},"    plt.xlabel(",[28,33741,33742],{"class":320},"'epoch'",[28,33744,227],{"class":34},[28,33746,33748,33751,33754],{"class":30,"line":33747},201,[28,33749,33750],{"class":34},"    plt.ylabel(",[28,33752,33753],{"class":320},"'loss'",[28,33755,227],{"class":34},[28,33757,33759],{"class":30,"line":33758},202,[28,33760,33761],{"class":105},"    # ②准确度图\n",[28,33763,33765,33767,33769,33771,33773,33775,33777],{"class":30,"line":33764},203,[28,33766,31803],{"class":34},[28,33768,46],{"class":45},[28,33770,49],{"class":34},[28,33772,52],{"class":45},[28,33774,49],{"class":34},[28,33776,52],{"class":45},[28,33778,227],{"class":34},[28,33780,33782,33784,33786,33789,33791,33793,33795,33797,33800],{"class":30,"line":33781},204,[28,33783,33670],{"class":34},[28,33785,33673],{"class":320},[28,33787,33788],{"class":34},"],train_process.train_acc_all,",[28,33790,33679],{"class":320},[28,33792,49],{"class":34},[28,33794,33684],{"class":5293},[28,33796,39],{"class":38},[28,33798,33799],{"class":320},"'train acc'",[28,33801,227],{"class":34},[28,33803,33805,33807,33809,33812,33814,33816,33818,33820,33823],{"class":30,"line":33804},205,[28,33806,33670],{"class":34},[28,33808,33673],{"class":320},[28,33810,33811],{"class":34},"],train_process.val_acc_all,",[28,33813,33704],{"class":320},[28,33815,49],{"class":34},[28,33817,33684],{"class":5293},[28,33819,39],{"class":38},[28,33821,33822],{"class":320},"'val acc'",[28,33824,227],{"class":34},[28,33826,33828],{"class":30,"line":33827},206,[28,33829,33830],{"class":105},"    # 添加图例\n",[28,33832,33834],{"class":30,"line":33833},207,[28,33835,33727],{"class":34},[28,33837,33839,33841,33843],{"class":30,"line":33838},208,[28,33840,33739],{"class":34},[28,33842,33673],{"class":320},[28,33844,227],{"class":34},[28,33846,33848,33850,33853],{"class":30,"line":33847},209,[28,33849,33750],{"class":34},[28,33851,33852],{"class":320},"\"acc\"",[28,33854,227],{"class":34},[28,33856,33858],{"class":30,"line":33857},210,[28,33859,33860],{"class":34},"    plt.show()\n",[28,33862,33864],{"class":30,"line":33863},211,[28,33865,2477],{"emptyLinePlaceholder":144},[28,33867,33869],{"class":30,"line":33868},212,[28,33870,33871],{"class":105},"# 正式开始训练:\n",[28,33873,33875,33877,33879,33881,33883],{"class":30,"line":33874},213,[28,33876,1608],{"class":38},[28,33878,31296],{"class":45},[28,33880,3026],{"class":38},[28,33882,31301],{"class":320},[28,33884,3816],{"class":34},[28,33886,33888],{"class":30,"line":33887},214,[28,33889,33890],{"class":105},"    # 将模型实例化\n",[28,33892,33894,33897,33899],{"class":30,"line":33893},215,[28,33895,33896],{"class":34},"    LeNet",[28,33898,39],{"class":38},[28,33900,33901],{"class":34},"LeNet()\n",[28,33903,33905,33908,33910],{"class":30,"line":33904},216,[28,33906,33907],{"class":34},"    train_dataloader,val_dataloader",[28,33909,39],{"class":38},[28,33911,33912],{"class":34},"train_val_data_process()\n",[28,33914,33916,33918,33920,33923,33926,33928,33930],{"class":30,"line":33915},217,[28,33917,33469],{"class":34},[28,33919,39],{"class":38},[28,33921,33922],{"class":34},"train_model_process(LeNet,train_dataloader,val_dataloader,",[28,33924,33925],{"class":5293},"num_epochs",[28,33927,39],{"class":38},[28,33929,102],{"class":45},[28,33931,227],{"class":34},[28,33933,33935],{"class":30,"line":33934},218,[28,33936,33937],{"class":34},"    matplot_acc_loss(train_process)\n",[14,33939,33940],{},"画图的补充点学习：",[14,33942,33943],{},[1539,33944],{"alt":23,"src":33945},"\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",[171,33947,33948],{"start":109},[174,33949,33950],{},"测试",[18,33952,33954],{"className":20,"code":33953,"language":22,"meta":23,"style":23},"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",[25,33955,33956,33962,33972,33984,33994,33999,34009,34019,34023,34028,34037,34054,34066,34083,34094,34110,34115,34126,34137,34148,34155,34159,34164,34174,34179,34196,34204,34208,34213,34222,34231,34235,34240,34245,34250,34257,34262,34274,34284,34294,34299,34303,34308,34317,34322,34338,34343,34348,34353,34367,34372,34386,34390,34395,34410,34415,34427,34431,34436,34448,34453,34461,34466,34471,34481,34486,34495,34500,34505,34509,34514,34519,34535,34543,34548,34553,34612,34618,34623,34634,34642,34650,34654,34659,34663,34668,34676,34681,34697,34702,34712,34722],{"__ignoreMap":23},[28,33957,33958,33960],{"class":30,"line":31},[28,33959,30468],{"class":38},[28,33961,30471],{"class":34},[28,33963,33964,33966,33968,33970],{"class":30,"line":94},[28,33965,30468],{"class":38},[28,33967,31491],{"class":34},[28,33969,31459],{"class":38},[28,33971,31496],{"class":34},[28,33973,33974,33976,33979,33981],{"class":30,"line":109},[28,33975,30813],{"class":38},[28,33977,33978],{"class":34}," jupyter_client.consoleapp ",[28,33980,30468],{"class":38},[28,33982,33983],{"class":34}," classes\n",[28,33985,33986,33988,33990,33992],{"class":30,"line":125},[28,33987,30813],{"class":38},[28,33989,31474],{"class":34},[28,33991,30468],{"class":38},[28,33993,31479],{"class":34},[28,33995,33996],{"class":30,"line":131},[28,33997,33998],{"class":105},"# 导入数据集\n",[28,34000,34001,34003,34005,34007],{"class":30,"line":1291},[28,34002,30813],{"class":38},[28,34004,31444],{"class":34},[28,34006,30468],{"class":38},[28,34008,31449],{"class":34},[28,34010,34011,34013,34015,34017],{"class":30,"line":1297},[28,34012,30813],{"class":38},[28,34014,31990],{"class":34},[28,34016,30468],{"class":38},[28,34018,31995],{"class":34},[28,34020,34021],{"class":30,"line":1388},[28,34022,2477],{"emptyLinePlaceholder":144},[28,34024,34025],{"class":30,"line":1394},[28,34026,34027],{"class":105},"# 测试数据处理\n",[28,34029,34030,34032,34035],{"class":30,"line":1406},[28,34031,32023],{"class":38},[28,34033,34034],{"class":2040}," test_data_process",[28,34036,32029],{"class":34},[28,34038,34039,34042,34044,34046,34048,34050,34052],{"class":30,"line":1689},[28,34040,34041],{"class":34},"    test_data",[28,34043,39],{"class":38},[28,34045,31531],{"class":34},[28,34047,31534],{"class":5293},[28,34049,39],{"class":38},[28,34051,31539],{"class":320},[28,34053,31542],{"class":34},[28,34055,34056,34059,34061,34064],{"class":30,"line":1694},[28,34057,34058],{"class":5293},"                           train",[28,34060,39],{"class":38},[28,34062,34063],{"class":45},"False",[28,34065,31542],{"class":34},[28,34067,34068,34071,34073,34075,34077,34079,34081],{"class":30,"line":1700},[28,34069,34070],{"class":5293},"                           transform",[28,34072,39],{"class":38},[28,34074,31569],{"class":34},[28,34076,31572],{"class":5293},[28,34078,39],{"class":38},[28,34080,1107],{"class":45},[28,34082,31580],{"class":34},[28,34084,34085,34088,34090,34092],{"class":30,"line":1705},[28,34086,34087],{"class":5293},"                           download",[28,34089,39],{"class":38},[28,34091,31552],{"class":45},[28,34093,227],{"class":34},[28,34095,34096,34099,34101,34103,34105,34107],{"class":30,"line":1719},[28,34097,34098],{"class":34},"    test_dataloader",[28,34100,39],{"class":38},[28,34102,31610],{"class":34},[28,34104,31613],{"class":5293},[28,34106,39],{"class":38},[28,34108,34109],{"class":34},"test_data,\n",[28,34111,34112],{"class":30,"line":1724},[28,34113,34114],{"class":105},"                                    # 这里是一张一张进行测试\n",[28,34116,34117,34120,34122,34124],{"class":30,"line":1730},[28,34118,34119],{"class":5293},"                                    batch_size",[28,34121,39],{"class":38},[28,34123,46],{"class":45},[28,34125,31542],{"class":34},[28,34127,34128,34131,34133,34135],{"class":30,"line":1751},[28,34129,34130],{"class":5293},"                                    shuffle",[28,34132,39],{"class":38},[28,34134,31552],{"class":45},[28,34136,31542],{"class":34},[28,34138,34139,34142,34144,34146],{"class":30,"line":1756},[28,34140,34141],{"class":5293},"                                    num_workers",[28,34143,39],{"class":38},[28,34145,407],{"class":45},[28,34147,227],{"class":34},[28,34149,34150,34152],{"class":30,"line":1770},[28,34151,4167],{"class":38},[28,34153,34154],{"class":34}," test_dataloader\n",[28,34156,34157],{"class":30,"line":1775},[28,34158,2477],{"emptyLinePlaceholder":144},[28,34160,34161],{"class":30,"line":1804},[28,34162,34163],{"class":105},"# 定义模型测试函数\n",[28,34165,34166,34168,34171],{"class":30,"line":1809},[28,34167,32023],{"class":38},[28,34169,34170],{"class":2040}," test_model_process",[28,34172,34173],{"class":34},"(model,test_dataloader):\n",[28,34175,34176],{"class":30,"line":1826},[28,34177,34178],{"class":105},"    # 将模型放到设备当中，先进行判断\n",[28,34180,34181,34183,34185,34187,34189,34191,34193],{"class":30,"line":1831},[28,34182,31313],{"class":34},[28,34184,39],{"class":38},[28,34186,31320],{"class":320},[28,34188,1781],{"class":38},[28,34190,31325],{"class":34},[28,34192,1778],{"class":38},[28,34194,34195],{"class":320}," \"cpu\"\n",[28,34197,34198,34200,34202],{"class":30,"line":1836},[28,34199,31365],{"class":34},[28,34201,39],{"class":38},[28,34203,32365],{"class":34},[28,34205,34206],{"class":30,"line":1841},[28,34207,2477],{"emptyLinePlaceholder":144},[28,34209,34210],{"class":30,"line":1855},[28,34211,34212],{"class":105},"    # 设置初始化参数\n",[28,34214,34215,34218,34220],{"class":30,"line":1860},[28,34216,34217],{"class":34},"    test_corrects",[28,34219,39],{"class":38},[28,34221,32418],{"class":45},[28,34223,34224,34227,34229],{"class":30,"line":2654},[28,34225,34226],{"class":34},"    test_num",[28,34228,39],{"class":38},[28,34230,3162],{"class":45},[28,34232,34233],{"class":30,"line":2668},[28,34234,2477],{"emptyLinePlaceholder":144},[28,34236,34237],{"class":30,"line":2676},[28,34238,34239],{"class":105},"    # 进行模型测试\n",[28,34241,34242],{"class":30,"line":2681},[28,34243,34244],{"class":105},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[28,34246,34247],{"class":30,"line":2687},[28,34248,34249],{"class":105},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[28,34251,34252,34255],{"class":30,"line":2693},[28,34253,34254],{"class":38},"    with",[28,34256,32960],{"class":34},[28,34258,34259],{"class":30,"line":2698},[28,34260,34261],{"class":105},"        # 从数据中进行\n",[28,34263,34264,34266,34269,34271],{"class":30,"line":8025},[28,34265,3480],{"class":38},[28,34267,34268],{"class":34}," test_data_x,test_data_y ",[28,34270,26121],{"class":38},[28,34272,34273],{"class":34}," test_dataloader:\n",[28,34275,34276,34279,34281],{"class":30,"line":8049},[28,34277,34278],{"class":34},"            test_data_x",[28,34280,39],{"class":38},[28,34282,34283],{"class":34},"test_data_x.to(device)\n",[28,34285,34286,34289,34291],{"class":30,"line":8054},[28,34287,34288],{"class":34},"            test_data_y",[28,34290,39],{"class":38},[28,34292,34293],{"class":34},"test_data_y.to(device)\n",[28,34295,34296],{"class":30,"line":8060},[28,34297,34298],{"class":105},"            # 设置为验证模式\n",[28,34300,34301],{"class":30,"line":8087},[28,34302,32951],{"class":34},[28,34304,34305],{"class":30,"line":8092},[28,34306,34307],{"class":105},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[28,34309,34310,34312,34314],{"class":30,"line":8098},[28,34311,32736],{"class":34},[28,34313,39],{"class":38},[28,34315,34316],{"class":34},"model(test_data_x)\n",[28,34318,34319],{"class":30,"line":8110},[28,34320,34321],{"class":105},"            # 查找每一行中最大值对应的下标\n",[28,34323,34324,34326,34328,34330,34332,34334,34336],{"class":30,"line":8122},[28,34325,32753],{"class":34},[28,34327,39],{"class":38},[28,34329,32758],{"class":34},[28,34331,32761],{"class":5293},[28,34333,39],{"class":38},[28,34335,46],{"class":45},[28,34337,227],{"class":34},[28,34339,34340],{"class":30,"line":8134},[28,34341,34342],{"class":105},"            # 计算正确率\n",[28,34344,34345],{"class":30,"line":9793},[28,34346,34347],{"class":105},"            # .data表示是一个不带梯度信息的tensor\n",[28,34349,34350],{"class":30,"line":9818},[28,34351,34352],{"class":105},"            # 如果预测正确，则准确度test_corrects加1\n",[28,34354,34355,34358,34360,34362,34364],{"class":30,"line":9841},[28,34356,34357],{"class":34},"            test_corrects",[28,34359,9554],{"class":38},[28,34361,32863],{"class":34},[28,34363,3026],{"class":38},[28,34365,34366],{"class":34},"test_data_y.data)\n",[28,34368,34369],{"class":30,"line":9865},[28,34370,34371],{"class":105},"            # 将所有的测试样本进行累计\n",[28,34373,34374,34377,34379,34382,34384],{"class":30,"line":9870},[28,34375,34376],{"class":34},"            test_num",[28,34378,9554],{"class":38},[28,34380,34381],{"class":34},"test_data_x.size(",[28,34383,407],{"class":45},[28,34385,227],{"class":34},[28,34387,34388],{"class":30,"line":9875},[28,34389,2477],{"emptyLinePlaceholder":144},[28,34391,34392],{"class":30,"line":9880},[28,34393,34394],{"class":105},"        # 计算准确度\n",[28,34396,34397,34400,34402,34405,34407],{"class":30,"line":9889},[28,34398,34399],{"class":34},"        test_acc",[28,34401,39],{"class":38},[28,34403,34404],{"class":34},"test_corrects.double().item()",[28,34406,794],{"class":38},[28,34408,34409],{"class":34},"test_num\n",[28,34411,34412],{"class":30,"line":9894},[28,34413,34414],{"class":105},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[28,34416,34417,34419,34421,34424],{"class":30,"line":9900},[28,34418,32527],{"class":45},[28,34420,221],{"class":34},[28,34422,34423],{"class":320},"\"测试的准确率：\"",[28,34425,34426],{"class":34},",test_acc)\n",[28,34428,34429],{"class":30,"line":9921},[28,34430,2477],{"emptyLinePlaceholder":144},[28,34432,34433],{"class":30,"line":9927},[28,34434,34435],{"class":105},"# 实现模型的测试功能\n",[28,34437,34438,34440,34442,34444,34446],{"class":30,"line":9941},[28,34439,1608],{"class":38},[28,34441,31296],{"class":45},[28,34443,3026],{"class":38},[28,34445,31301],{"class":320},[28,34447,3816],{"class":34},[28,34449,34450],{"class":30,"line":9947},[28,34451,34452],{"class":105},"    # 加载模型\n",[28,34454,34455,34457,34459],{"class":30,"line":9974},[28,34456,31365],{"class":34},[28,34458,39],{"class":38},[28,34460,33901],{"class":34},[28,34462,34463],{"class":30,"line":9983},[28,34464,34465],{"class":105},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[28,34467,34468],{"class":30,"line":9989},[28,34469,34470],{"class":105},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[28,34472,34473,34476,34479],{"class":30,"line":9997},[28,34474,34475],{"class":34},"    model.load_state_dict(torch.load(",[28,34477,34478],{"class":320},"'best_model.pth'",[28,34480,30573],{"class":34},[28,34482,34483],{"class":30,"line":10002},[28,34484,34485],{"class":105},"    # 数据加载\n",[28,34487,34488,34490,34492],{"class":30,"line":16681},[28,34489,34098],{"class":34},[28,34491,39],{"class":38},[28,34493,34494],{"class":34},"test_data_process()\n",[28,34496,34497],{"class":30,"line":16687},[28,34498,34499],{"class":105},"    # 加载模型测试的函数\n",[28,34501,34502],{"class":30,"line":16710},[28,34503,34504],{"class":34},"    test_model_process(model,test_dataloader)\n",[28,34506,34507],{"class":30,"line":16716},[28,34508,2477],{"emptyLinePlaceholder":144},[28,34510,34511],{"class":30,"line":16739},[28,34512,34513],{"class":105},"    # 验证集推理实现：\n",[28,34515,34516],{"class":30,"line":16753},[28,34517,34518],{"class":105},"    # 加载数据加载的更详细一些\n",[28,34520,34521,34523,34525,34527,34529,34531,34533],{"class":30,"line":16773},[28,34522,31313],{"class":34},[28,34524,39],{"class":38},[28,34526,31320],{"class":320},[28,34528,1781],{"class":38},[28,34530,31325],{"class":34},[28,34532,1778],{"class":38},[28,34534,34195],{"class":320},[28,34536,34537,34539,34541],{"class":30,"line":16779},[28,34538,31365],{"class":34},[28,34540,39],{"class":38},[28,34542,32365],{"class":34},[28,34544,34545],{"class":30,"line":16790},[28,34546,34547],{"class":105},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[28,34549,34550],{"class":30,"line":16813},[28,34551,34552],{"class":105},"    # 顺序不可改变\n",[28,34554,34555,34558,34560,34562,34565,34567,34570,34572,34575,34577,34580,34582,34585,34587,34590,34592,34595,34597,34600,34602,34605,34607,34610],{"class":30,"line":16835},[28,34556,34557],{"class":34},"    classes",[28,34559,39],{"class":38},[28,34561,1096],{"class":34},[28,34563,34564],{"class":320},"'T-shirt\u002Ftop'",[28,34566,49],{"class":34},[28,34568,34569],{"class":320},"'Trouser'",[28,34571,49],{"class":34},[28,34573,34574],{"class":320},"'Pullover'",[28,34576,49],{"class":34},[28,34578,34579],{"class":320},"'Dress'",[28,34581,49],{"class":34},[28,34583,34584],{"class":320},"'Coat'",[28,34586,49],{"class":34},[28,34588,34589],{"class":320},"'Sandal'",[28,34591,49],{"class":34},[28,34593,34594],{"class":320},"'Shirt'",[28,34596,49],{"class":34},[28,34598,34599],{"class":320},"'Sneaker'",[28,34601,49],{"class":34},[28,34603,34604],{"class":320},"'Bag'",[28,34606,49],{"class":34},[28,34608,34609],{"class":320},"'Ankle boot'",[28,34611,33322],{"class":34},[28,34613,34614,34616],{"class":30,"line":16840},[28,34615,34254],{"class":38},[28,34617,32960],{"class":34},[28,34619,34620],{"class":30,"line":16846},[28,34621,34622],{"class":105},"        # 将数据和标签都放到设备当中\n",[28,34624,34625,34627,34630,34632],{"class":30,"line":16860},[28,34626,3480],{"class":38},[28,34628,34629],{"class":34}," b_x,b_y ",[28,34631,26121],{"class":38},[28,34633,34273],{"class":34},[28,34635,34636,34638,34640],{"class":30,"line":16873},[28,34637,32686],{"class":34},[28,34639,39],{"class":38},[28,34641,32691],{"class":34},[28,34643,34644,34646,34648],{"class":30,"line":16878},[28,34645,32701],{"class":34},[28,34647,39],{"class":38},[28,34649,32706],{"class":34},[28,34651,34652],{"class":30,"line":16892},[28,34653,2477],{"emptyLinePlaceholder":144},[28,34655,34656],{"class":30,"line":16897},[28,34657,34658],{"class":105},"            # 设置模型为验证模式\n",[28,34660,34661],{"class":30,"line":16903},[28,34662,32951],{"class":34},[28,34664,34665],{"class":30,"line":16908},[28,34666,34667],{"class":105},"            # 模型推理结果\n",[28,34669,34670,34672,34674],{"class":30,"line":16922},[28,34671,32736],{"class":34},[28,34673,39],{"class":38},[28,34675,32741],{"class":34},[28,34677,34678],{"class":30,"line":16927},[28,34679,34680],{"class":105},"            # 获取最大下标，最大下标就是类别号\n",[28,34682,34683,34685,34687,34689,34691,34693,34695],{"class":30,"line":16932},[28,34684,32753],{"class":34},[28,34686,39],{"class":38},[28,34688,32758],{"class":34},[28,34690,32761],{"class":5293},[28,34692,39],{"class":38},[28,34694,46],{"class":45},[28,34696,227],{"class":34},[28,34698,34699],{"class":30,"line":16946},[28,34700,34701],{"class":105},"            # 取出张量中的数值\n",[28,34703,34704,34707,34709],{"class":30,"line":16958},[28,34705,34706],{"class":34},"            result",[28,34708,39],{"class":38},[28,34710,34711],{"class":34},"pre_lab.item()\n",[28,34713,34714,34717,34719],{"class":30,"line":16963},[28,34715,34716],{"class":34},"            label",[28,34718,39],{"class":38},[28,34720,34721],{"class":34},"b_y.item()\n",[28,34723,34724,34727,34729,34732,34735,34738,34740,34743],{"class":30,"line":16976},[28,34725,34726],{"class":45},"            print",[28,34728,221],{"class":34},[28,34730,34731],{"class":320},"\"预测值：\"",[28,34733,34734],{"class":34},",classes[result],",[28,34736,34737],{"class":320},"\"------\"",[28,34739,49],{"class":34},[28,34741,34742],{"class":320},"\"真实值：\"",[28,34744,34745],{"class":34},",classes[label])\n",[14,34747,34748],{},"（2）AlexNet",[171,34750,34751],{},[174,34752,34753],{},"神经网络构建",[18,34755,34757],{"className":20,"code":34756,"language":22,"meta":23,"style":23},"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",[25,34758,34759,34765,34775,34785,34797,34801,34818,34826,34841,34853,34895,34922,34965,34991,35035,35078,35121,35148,35152,35162,35167,35195,35214,35233,35237,35242,35250,35265,35275,35289,35299,35314,35329,35344,35355,35359,35364,35374,35389,35394,35408,35423,35435,35440,35451,35456,35462,35467,35479,35499,35504,35513],{"__ignoreMap":23},[28,34760,34761,34763],{"class":30,"line":31},[28,34762,30468],{"class":38},[28,34764,30471],{"class":34},[28,34766,34767,34769,34771,34773],{"class":30,"line":94},[28,34768,30813],{"class":38},[28,34770,30816],{"class":34},[28,34772,30468],{"class":38},[28,34774,30821],{"class":34},[28,34776,34777,34779,34781,34783],{"class":30,"line":109},[28,34778,30813],{"class":38},[28,34780,30833],{"class":34},[28,34782,30468],{"class":38},[28,34784,30838],{"class":34},[28,34786,34787,34789,34792,34794],{"class":30,"line":125},[28,34788,30468],{"class":38},[28,34790,34791],{"class":34}," torch.nn.functional ",[28,34793,31459],{"class":38},[28,34795,34796],{"class":34}," F\n",[28,34798,34799],{"class":30,"line":131},[28,34800,2477],{"emptyLinePlaceholder":144},[28,34802,34803,34805,34808,34810,34812,34814,34816],{"class":30,"line":1291},[28,34804,14771],{"class":38},[28,34806,34807],{"class":2040}," AlexNet",[28,34809,221],{"class":34},[28,34811,30854],{"class":2040},[28,34813,768],{"class":34},[28,34815,30859],{"class":2040},[28,34817,30862],{"class":34},[28,34819,34820,34822,34824],{"class":30,"line":1297},[28,34821,30877],{"class":38},[28,34823,30880],{"class":45},[28,34825,30883],{"class":34},[28,34827,34828,34830,34833,34835,34837,34839],{"class":30,"line":1388},[28,34829,30893],{"class":45},[28,34831,34832],{"class":34},"(AlexNet,",[28,34834,30899],{"class":45},[28,34836,30902],{"class":34},[28,34838,30905],{"class":45},[28,34840,2053],{"class":34},[28,34842,34843,34845,34848,34850],{"class":30,"line":1394},[28,34844,30921],{"class":45},[28,34846,34847],{"class":34},".ReLu",[28,34849,39],{"class":38},[28,34851,34852],{"class":34},"nn.ReLU()\n",[28,34854,34855,34857,34859,34861,34863,34865,34867,34869,34871,34873,34875,34877,34879,34881,34883,34885,34887,34889,34891,34893],{"class":30,"line":1406},[28,34856,30921],{"class":45},[28,34858,30924],{"class":34},[28,34860,39],{"class":38},[28,34862,30929],{"class":34},[28,34864,30932],{"class":5293},[28,34866,39],{"class":38},[28,34868,46],{"class":45},[28,34870,49],{"class":34},[28,34872,30941],{"class":5293},[28,34874,39],{"class":38},[28,34876,425],{"class":45},[28,34878,49],{"class":34},[28,34880,30950],{"class":5293},[28,34882,39],{"class":38},[28,34884,63],{"class":45},[28,34886,49],{"class":34},[28,34888,31005],{"class":5293},[28,34890,39],{"class":38},[28,34892,507],{"class":45},[28,34894,227],{"class":34},[28,34896,34897,34899,34901,34903,34906,34908,34910,34912,34914,34916,34918,34920],{"class":30,"line":1689},[28,34898,30921],{"class":45},[28,34900,30989],{"class":34},[28,34902,39],{"class":38},[28,34904,34905],{"class":34},"nn.MaxPool2d(",[28,34907,30950],{"class":5293},[28,34909,39],{"class":38},[28,34911,57],{"class":45},[28,34913,49],{"class":34},[28,34915,31005],{"class":5293},[28,34917,39],{"class":38},[28,34919,52],{"class":45},[28,34921,227],{"class":34},[28,34923,34924,34926,34928,34930,34932,34934,34936,34938,34940,34942,34944,34947,34949,34951,34953,34955,34957,34959,34961,34963],{"class":30,"line":1694},[28,34925,30921],{"class":45},[28,34927,31018],{"class":34},[28,34929,39],{"class":38},[28,34931,30929],{"class":34},[28,34933,30932],{"class":5293},[28,34935,39],{"class":38},[28,34937,425],{"class":45},[28,34939,49],{"class":34},[28,34941,30941],{"class":5293},[28,34943,39],{"class":38},[28,34945,34946],{"class":45},"256",[28,34948,49],{"class":34},[28,34950,30950],{"class":5293},[28,34952,39],{"class":38},[28,34954,533],{"class":45},[28,34956,49],{"class":34},[28,34958,30959],{"class":5293},[28,34960,39],{"class":38},[28,34962,52],{"class":45},[28,34964,227],{"class":34},[28,34966,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989],{"class":30,"line":1700},[28,34968,30921],{"class":45},[28,34970,31053],{"class":34},[28,34972,39],{"class":38},[28,34974,34905],{"class":34},[28,34976,30950],{"class":5293},[28,34978,39],{"class":38},[28,34980,57],{"class":45},[28,34982,49],{"class":34},[28,34984,31005],{"class":5293},[28,34986,39],{"class":38},[28,34988,52],{"class":45},[28,34990,227],{"class":34},[28,34992,34993,34995,34998,35000,35002,35004,35006,35008,35010,35012,35014,35017,35019,35021,35023,35025,35027,35029,35031,35033],{"class":30,"line":1705},[28,34994,30921],{"class":45},[28,34996,34997],{"class":34},".c5",[28,34999,39],{"class":38},[28,35001,30929],{"class":34},[28,35003,30932],{"class":5293},[28,35005,39],{"class":38},[28,35007,34946],{"class":45},[28,35009,49],{"class":34},[28,35011,30941],{"class":5293},[28,35013,39],{"class":38},[28,35015,35016],{"class":45},"384",[28,35018,49],{"class":34},[28,35020,30950],{"class":5293},[28,35022,39],{"class":38},[28,35024,57],{"class":45},[28,35026,49],{"class":34},[28,35028,30959],{"class":5293},[28,35030,39],{"class":38},[28,35032,46],{"class":45},[28,35034,227],{"class":34},[28,35036,35037,35039,35042,35044,35046,35048,35050,35052,35054,35056,35058,35060,35062,35064,35066,35068,35070,35072,35074,35076],{"class":30,"line":1719},[28,35038,30921],{"class":45},[28,35040,35041],{"class":34},".c6",[28,35043,39],{"class":38},[28,35045,30929],{"class":34},[28,35047,30932],{"class":5293},[28,35049,39],{"class":38},[28,35051,35016],{"class":45},[28,35053,49],{"class":34},[28,35055,30941],{"class":5293},[28,35057,39],{"class":38},[28,35059,35016],{"class":45},[28,35061,49],{"class":34},[28,35063,30950],{"class":5293},[28,35065,39],{"class":38},[28,35067,57],{"class":45},[28,35069,49],{"class":34},[28,35071,30959],{"class":5293},[28,35073,39],{"class":38},[28,35075,46],{"class":45},[28,35077,227],{"class":34},[28,35079,35080,35082,35085,35087,35089,35091,35093,35095,35097,35099,35101,35103,35105,35107,35109,35111,35113,35115,35117,35119],{"class":30,"line":1724},[28,35081,30921],{"class":45},[28,35083,35084],{"class":34},".c7",[28,35086,39],{"class":38},[28,35088,30929],{"class":34},[28,35090,30932],{"class":5293},[28,35092,39],{"class":38},[28,35094,35016],{"class":45},[28,35096,49],{"class":34},[28,35098,30941],{"class":5293},[28,35100,39],{"class":38},[28,35102,34946],{"class":45},[28,35104,49],{"class":34},[28,35106,30950],{"class":5293},[28,35108,39],{"class":38},[28,35110,57],{"class":45},[28,35112,49],{"class":34},[28,35114,30959],{"class":5293},[28,35116,39],{"class":38},[28,35118,46],{"class":45},[28,35120,227],{"class":34},[28,35122,35123,35125,35128,35130,35132,35134,35136,35138,35140,35142,35144,35146],{"class":30,"line":1730},[28,35124,30921],{"class":45},[28,35126,35127],{"class":34},".s8",[28,35129,39],{"class":38},[28,35131,34905],{"class":34},[28,35133,30950],{"class":5293},[28,35135,39],{"class":38},[28,35137,57],{"class":45},[28,35139,49],{"class":34},[28,35141,31005],{"class":5293},[28,35143,39],{"class":38},[28,35145,52],{"class":45},[28,35147,227],{"class":34},[28,35149,35150],{"class":30,"line":1751},[28,35151,31078],{"class":105},[28,35153,35154,35156,35158,35160],{"class":30,"line":1756},[28,35155,30921],{"class":45},[28,35157,31085],{"class":34},[28,35159,39],{"class":38},[28,35161,31090],{"class":34},[28,35163,35164],{"class":30,"line":1770},[28,35165,35166],{"class":105},"       # 定义全连接层\n",[28,35168,35169,35171,35174,35176,35178,35180,35182,35184,35186,35188,35190,35193],{"class":30,"line":1775},[28,35170,30921],{"class":45},[28,35172,35173],{"class":34},".f1",[28,35175,39],{"class":38},[28,35177,31107],{"class":34},[28,35179,558],{"class":45},[28,35181,668],{"class":38},[28,35183,558],{"class":45},[28,35185,668],{"class":38},[28,35187,34946],{"class":45},[28,35189,49],{"class":34},[28,35191,35192],{"class":45},"4096",[28,35194,227],{"class":34},[28,35196,35197,35199,35202,35204,35206,35208,35210,35212],{"class":30,"line":1804},[28,35198,30921],{"class":45},[28,35200,35201],{"class":34},".f2",[28,35203,39],{"class":38},[28,35205,31107],{"class":34},[28,35207,35192],{"class":45},[28,35209,49],{"class":34},[28,35211,35192],{"class":45},[28,35213,227],{"class":34},[28,35215,35216,35218,35221,35223,35225,35227,35229,35231],{"class":30,"line":1809},[28,35217,30921],{"class":45},[28,35219,35220],{"class":34},".f3",[28,35222,39],{"class":38},[28,35224,31107],{"class":34},[28,35226,35192],{"class":45},[28,35228,49],{"class":34},[28,35230,659],{"class":45},[28,35232,227],{"class":34},[28,35234,35235],{"class":30,"line":1826},[28,35236,2477],{"emptyLinePlaceholder":144},[28,35238,35239],{"class":30,"line":1831},[28,35240,35241],{"class":105},"    # 定义前向传播\n",[28,35243,35244,35246,35248],{"class":30,"line":1836},[28,35245,30877],{"class":38},[28,35247,31169],{"class":2040},[28,35249,31172],{"class":34},[28,35251,35252,35254,35256,35258,35261,35263],{"class":30,"line":1841},[28,35253,31177],{"class":34},[28,35255,39],{"class":38},[28,35257,30899],{"class":45},[28,35259,35260],{"class":34},".ReLu(",[28,35262,30899],{"class":45},[28,35264,31189],{"class":34},[28,35266,35267,35269,35271,35273],{"class":30,"line":1855},[28,35268,31177],{"class":34},[28,35270,39],{"class":38},[28,35272,30899],{"class":45},[28,35274,31200],{"class":34},[28,35276,35277,35279,35281,35283,35285,35287],{"class":30,"line":1860},[28,35278,31177],{"class":34},[28,35280,39],{"class":38},[28,35282,30899],{"class":45},[28,35284,35260],{"class":34},[28,35286,30899],{"class":45},[28,35288,31215],{"class":34},[28,35290,35291,35293,35295,35297],{"class":30,"line":2654},[28,35292,31177],{"class":34},[28,35294,39],{"class":38},[28,35296,30899],{"class":45},[28,35298,31226],{"class":34},[28,35300,35301,35303,35305,35307,35309,35311],{"class":30,"line":2668},[28,35302,31177],{"class":34},[28,35304,39],{"class":38},[28,35306,30899],{"class":45},[28,35308,35260],{"class":34},[28,35310,30899],{"class":45},[28,35312,35313],{"class":34},".c5(x))\n",[28,35315,35316,35318,35320,35322,35324,35326],{"class":30,"line":2676},[28,35317,31177],{"class":34},[28,35319,39],{"class":38},[28,35321,30899],{"class":45},[28,35323,35260],{"class":34},[28,35325,30899],{"class":45},[28,35327,35328],{"class":34},".c6(x))\n",[28,35330,35331,35333,35335,35337,35339,35341],{"class":30,"line":2681},[28,35332,31177],{"class":34},[28,35334,39],{"class":38},[28,35336,30899],{"class":45},[28,35338,35260],{"class":34},[28,35340,30899],{"class":45},[28,35342,35343],{"class":34},".c7(x))\n",[28,35345,35346,35348,35350,35352],{"class":30,"line":2687},[28,35347,31177],{"class":34},[28,35349,39],{"class":38},[28,35351,30899],{"class":45},[28,35353,35354],{"class":34},".s8(x)\n",[28,35356,35357],{"class":30,"line":2693},[28,35358,2477],{"emptyLinePlaceholder":144},[28,35360,35361],{"class":30,"line":2698},[28,35362,35363],{"class":105},"        # 展平加线性全连接层\n",[28,35365,35366,35368,35370,35372],{"class":30,"line":8025},[28,35367,31177],{"class":34},[28,35369,39],{"class":38},[28,35371,30899],{"class":45},[28,35373,31237],{"class":34},[28,35375,35376,35378,35380,35382,35384,35386],{"class":30,"line":8049},[28,35377,31177],{"class":34},[28,35379,39],{"class":38},[28,35381,30899],{"class":45},[28,35383,35260],{"class":34},[28,35385,30899],{"class":45},[28,35387,35388],{"class":34},".f1(x))\n",[28,35390,35391],{"class":30,"line":8054},[28,35392,35393],{"class":105},"        # 还需要dropout对神经元随机进行失活\n",[28,35395,35396,35398,35400,35403,35406],{"class":30,"line":8060},[28,35397,31177],{"class":34},[28,35399,39],{"class":38},[28,35401,35402],{"class":34},"F.dropout(x,",[28,35404,35405],{"class":45},"0.5",[28,35407,227],{"class":34},[28,35409,35410,35412,35414,35416,35418,35420],{"class":30,"line":8087},[28,35411,31177],{"class":34},[28,35413,39],{"class":38},[28,35415,30899],{"class":45},[28,35417,35260],{"class":34},[28,35419,30899],{"class":45},[28,35421,35422],{"class":34},".f2(x))\n",[28,35424,35425,35427,35429,35431,35433],{"class":30,"line":8092},[28,35426,31177],{"class":34},[28,35428,39],{"class":38},[28,35430,35402],{"class":34},[28,35432,35405],{"class":45},[28,35434,227],{"class":34},[28,35436,35437],{"class":30,"line":8098},[28,35438,35439],{"class":105},"        # 直接输出\n",[28,35441,35442,35444,35446,35448],{"class":30,"line":8110},[28,35443,31177],{"class":34},[28,35445,39],{"class":38},[28,35447,30899],{"class":45},[28,35449,35450],{"class":34},".f3(x)\n",[28,35452,35453],{"class":30,"line":8122},[28,35454,35455],{"class":105},"        # 前向传播输出\n",[28,35457,35458,35460],{"class":30,"line":8134},[28,35459,14829],{"class":38},[28,35461,31285],{"class":34},[28,35463,35464],{"class":30,"line":9793},[28,35465,35466],{"class":105},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[28,35468,35469,35471,35473,35475,35477],{"class":30,"line":9818},[28,35470,1608],{"class":38},[28,35472,31296],{"class":45},[28,35474,3026],{"class":38},[28,35476,31301],{"class":320},[28,35478,3816],{"class":34},[28,35480,35481,35483,35485,35487,35489,35491,35493,35495,35497],{"class":30,"line":9841},[28,35482,31313],{"class":34},[28,35484,39],{"class":38},[28,35486,30527],{"class":34},[28,35488,31320],{"class":320},[28,35490,1781],{"class":38},[28,35492,31325],{"class":34},[28,35494,1778],{"class":38},[28,35496,30552],{"class":320},[28,35498,227],{"class":34},[28,35500,35501],{"class":30,"line":9865},[28,35502,35503],{"class":105},"    # 模型实例化，然后将实例化的模型放到设备中\n",[28,35505,35506,35508,35510],{"class":30,"line":9870},[28,35507,31365],{"class":34},[28,35509,39],{"class":38},[28,35511,35512],{"class":34},"AlexNet().to(device)\n",[28,35514,35515,35517,35519,35521,35523,35526,35528,35530],{"class":30,"line":9875},[28,35516,31375],{"class":45},[28,35518,31378],{"class":34},[28,35520,46],{"class":45},[28,35522,49],{"class":34},[28,35524,35525],{"class":45},"227",[28,35527,49],{"class":34},[28,35529,35525],{"class":45},[28,35531,31391],{"class":34},[171,35533,35534],{"start":94},[174,35535,31404],{},[18,35537,35539],{"className":20,"code":35538,"language":22,"meta":23,"style":23},"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",[25,35540,35541,35547,35553,35563,35569,35579,35589,35599,35609,35619,35623,35634,35644,35648,35652,35656,35664,35676,35686,35702,35712,35744,35758,35768,35778,35782,35792,35806,35816,35826,35836,35842,35846,35850,35854,35858,35862,35870,35890,35894,35898,35902,35906,35910,35926,35930,35934,35942,35946,35950,35958,35962,35966,35970,35978,35982,35986,35990,35994,36002,36006,36014,36018,36026,36030,36038,36042,36050,36054,36058,36066,36070,36074,36078,36090,36114,36128,36132,36136,36140,36148,36152,36160,36164,36172,36176,36184,36188,36196,36200,36208,36212,36224,36228,36236,36240,36248,36252,36256,36260,36264,36272,36276,36292,36296,36304,36308,36312,36316,36320,36324,36328,36332,36348,36352,36364,36368,36380,36384,36396,36400,36408,36412,36420,36424,36428,36433,36439,36443,36452,36456,36473,36477,36486,36490,36508,36521,36526,36539,36543,36547,36555,36559,36563,36571,36575,36583,36587,36595,36599,36603,36645,36687,36691,36695,36711,36715,36731,36735,36739,36747,36751,36755,36767,36805,36810,36815,36824,36828,36842,36852,36858,36864,36870,36876,36880,36884,36890,36894,36898,36906,36910,36928,36932,36936,36940,36956,36960,36964,36968,36972,36976,36996,37016,37020,37024,37028,37036,37044,37048,37064,37084,37104,37108,37112,37120,37128,37132,37136,37140,37152,37156,37166,37174,37191],{"__ignoreMap":23},[28,35542,35543,35545],{"class":30,"line":31},[28,35544,30468],{"class":38},[28,35546,31898],{"class":34},[28,35548,35549,35551],{"class":30,"line":94},[28,35550,30468],{"class":38},[28,35552,31905],{"class":34},[28,35554,35555,35557,35559,35561],{"class":30,"line":109},[28,35556,30468],{"class":38},[28,35558,31916],{"class":34},[28,35560,31459],{"class":38},[28,35562,31921],{"class":34},[28,35564,35565,35567],{"class":30,"line":125},[28,35566,30468],{"class":38},[28,35568,30471],{"class":34},[28,35570,35571,35573,35575,35577],{"class":30,"line":131},[28,35572,30813],{"class":38},[28,35574,31491],{"class":34},[28,35576,30468],{"class":38},[28,35578,31938],{"class":34},[28,35580,35581,35583,35585,35587],{"class":30,"line":1291},[28,35582,30813],{"class":38},[28,35584,31444],{"class":34},[28,35586,30468],{"class":38},[28,35588,31449],{"class":34},[28,35590,35591,35593,35595,35597],{"class":30,"line":1297},[28,35592,30813],{"class":38},[28,35594,31474],{"class":34},[28,35596,30468],{"class":38},[28,35598,31479],{"class":34},[28,35600,35601,35603,35605,35607],{"class":30,"line":1388},[28,35602,30468],{"class":38},[28,35604,31491],{"class":34},[28,35606,31459],{"class":38},[28,35608,31496],{"class":34},[28,35610,35611,35613,35615,35617],{"class":30,"line":1394},[28,35612,30468],{"class":38},[28,35614,31508],{"class":34},[28,35616,31459],{"class":38},[28,35618,31513],{"class":34},[28,35620,35621],{"class":30,"line":1406},[28,35622,31983],{"class":105},[28,35624,35625,35627,35629,35631],{"class":30,"line":1689},[28,35626,30813],{"class":38},[28,35628,31990],{"class":34},[28,35630,30468],{"class":38},[28,35632,35633],{"class":34}," AlexNet\n",[28,35635,35636,35638,35640,35642],{"class":30,"line":1694},[28,35637,30813],{"class":38},[28,35639,30816],{"class":34},[28,35641,30468],{"class":38},[28,35643,30821],{"class":34},[28,35645,35646],{"class":30,"line":1700},[28,35647,2477],{"emptyLinePlaceholder":144},[28,35649,35650],{"class":30,"line":1705},[28,35651,2477],{"emptyLinePlaceholder":144},[28,35653,35654],{"class":30,"line":1719},[28,35655,32018],{"class":105},[28,35657,35658,35660,35662],{"class":30,"line":1724},[28,35659,32023],{"class":38},[28,35661,32026],{"class":2040},[28,35663,32029],{"class":34},[28,35665,35666,35668,35670,35672,35674],{"class":30,"line":1730},[28,35667,32034],{"class":34},[28,35669,39],{"class":38},[28,35671,31531],{"class":34},[28,35673,31539],{"class":320},[28,35675,31542],{"class":34},[28,35677,35678,35680,35682,35684],{"class":30,"line":1751},[28,35679,32047],{"class":5293},[28,35681,39],{"class":38},[28,35683,31552],{"class":45},[28,35685,31542],{"class":34},[28,35687,35688,35690,35692,35694,35696,35698,35700],{"class":30,"line":1756},[28,35689,32058],{"class":5293},[28,35691,39],{"class":38},[28,35693,31569],{"class":34},[28,35695,31572],{"class":5293},[28,35697,39],{"class":38},[28,35699,35525],{"class":45},[28,35701,31580],{"class":34},[28,35703,35704,35706,35708,35710],{"class":30,"line":1770},[28,35705,32075],{"class":5293},[28,35707,39],{"class":38},[28,35709,31552],{"class":45},[28,35711,227],{"class":34},[28,35713,35714,35716,35718,35720,35722,35724,35726,35728,35730,35732,35734,35736,35738,35740,35742],{"class":30,"line":1775},[28,35715,32086],{"class":34},[28,35717,39],{"class":38},[28,35719,32091],{"class":34},[28,35721,32094],{"class":45},[28,35723,221],{"class":34},[28,35725,32099],{"class":45},[28,35727,668],{"class":38},[28,35729,7435],{"class":45},[28,35731,32106],{"class":34},[28,35733,32094],{"class":45},[28,35735,221],{"class":34},[28,35737,32113],{"class":45},[28,35739,668],{"class":38},[28,35741,7435],{"class":45},[28,35743,32120],{"class":34},[28,35745,35746,35748,35750,35752,35754,35756],{"class":30,"line":1804},[28,35747,32125],{"class":34},[28,35749,39],{"class":38},[28,35751,32130],{"class":34},[28,35753,31613],{"class":5293},[28,35755,39],{"class":38},[28,35757,31618],{"class":34},[28,35759,35760,35762,35764,35766],{"class":30,"line":1809},[28,35761,32141],{"class":5293},[28,35763,39],{"class":38},[28,35765,32146],{"class":45},[28,35767,31542],{"class":34},[28,35769,35770,35772,35774,35776],{"class":30,"line":1826},[28,35771,32153],{"class":5293},[28,35773,39],{"class":38},[28,35775,31552],{"class":45},[28,35777,31542],{"class":34},[28,35779,35780],{"class":30,"line":1831},[28,35781,32164],{"class":105},[28,35783,35784,35786,35788,35790],{"class":30,"line":1836},[28,35785,32169],{"class":5293},[28,35787,39],{"class":38},[28,35789,608],{"class":45},[28,35791,227],{"class":34},[28,35793,35794,35796,35798,35800,35802,35804],{"class":30,"line":1841},[28,35795,32180],{"class":34},[28,35797,39],{"class":38},[28,35799,31610],{"class":34},[28,35801,31613],{"class":5293},[28,35803,39],{"class":38},[28,35805,32191],{"class":34},[28,35807,35808,35810,35812,35814],{"class":30,"line":1855},[28,35809,32196],{"class":5293},[28,35811,39],{"class":38},[28,35813,32146],{"class":45},[28,35815,31542],{"class":34},[28,35817,35818,35820,35822,35824],{"class":30,"line":1860},[28,35819,32207],{"class":5293},[28,35821,39],{"class":38},[28,35823,31552],{"class":45},[28,35825,31542],{"class":34},[28,35827,35828,35830,35832,35834],{"class":30,"line":2654},[28,35829,32218],{"class":5293},[28,35831,39],{"class":38},[28,35833,608],{"class":45},[28,35835,227],{"class":34},[28,35837,35838,35840],{"class":30,"line":2668},[28,35839,4167],{"class":38},[28,35841,32231],{"class":34},[28,35843,35844],{"class":30,"line":2676},[28,35845,2477],{"emptyLinePlaceholder":144},[28,35847,35848],{"class":30,"line":2681},[28,35849,32240],{"class":105},[28,35851,35852],{"class":30,"line":2687},[28,35853,32245],{"class":105},[28,35855,35856],{"class":30,"line":2693},[28,35857,2477],{"emptyLinePlaceholder":144},[28,35859,35860],{"class":30,"line":2698},[28,35861,32254],{"class":105},[28,35863,35864,35866,35868],{"class":30,"line":8025},[28,35865,32023],{"class":38},[28,35867,32261],{"class":2040},[28,35869,32264],{"class":34},[28,35871,35872,35874,35876,35878,35880,35882,35884,35886,35888],{"class":30,"line":8049},[28,35873,31313],{"class":34},[28,35875,39],{"class":38},[28,35877,30527],{"class":34},[28,35879,31320],{"class":320},[28,35881,1781],{"class":38},[28,35883,31325],{"class":34},[28,35885,1778],{"class":38},[28,35887,32283],{"class":320},[28,35889,227],{"class":34},[28,35891,35892],{"class":30,"line":8054},[28,35893,2477],{"emptyLinePlaceholder":144},[28,35895,35896],{"class":30,"line":8060},[28,35897,2477],{"emptyLinePlaceholder":144},[28,35899,35900],{"class":30,"line":8087},[28,35901,32298],{"class":105},[28,35903,35904],{"class":30,"line":8092},[28,35905,32303],{"class":105},[28,35907,35908],{"class":30,"line":8098},[28,35909,32308],{"class":105},[28,35911,35912,35914,35916,35918,35920,35922,35924],{"class":30,"line":8110},[28,35913,32313],{"class":34},[28,35915,39],{"class":38},[28,35917,32318],{"class":34},[28,35919,32321],{"class":5293},[28,35921,39],{"class":38},[28,35923,32326],{"class":45},[28,35925,227],{"class":34},[28,35927,35928],{"class":30,"line":8122},[28,35929,2477],{"emptyLinePlaceholder":144},[28,35931,35932],{"class":30,"line":8134},[28,35933,32337],{"class":105},[28,35935,35936,35938,35940],{"class":30,"line":9793},[28,35937,32342],{"class":34},[28,35939,39],{"class":38},[28,35941,32347],{"class":34},[28,35943,35944],{"class":30,"line":9818},[28,35945,2477],{"emptyLinePlaceholder":144},[28,35947,35948],{"class":30,"line":9841},[28,35949,32356],{"class":105},[28,35951,35952,35954,35956],{"class":30,"line":9865},[28,35953,31365],{"class":34},[28,35955,39],{"class":38},[28,35957,32365],{"class":34},[28,35959,35960],{"class":30,"line":9870},[28,35961,32370],{"class":105},[28,35963,35964],{"class":30,"line":9875},[28,35965,32375],{"class":105},[28,35967,35968],{"class":30,"line":9880},[28,35969,32380],{"class":105},[28,35971,35972,35974,35976],{"class":30,"line":9889},[28,35973,32385],{"class":34},[28,35975,39],{"class":38},[28,35977,32390],{"class":34},[28,35979,35980],{"class":30,"line":9894},[28,35981,2477],{"emptyLinePlaceholder":144},[28,35983,35984],{"class":30,"line":9900},[28,35985,2477],{"emptyLinePlaceholder":144},[28,35987,35988],{"class":30,"line":9921},[28,35989,32403],{"class":105},[28,35991,35992],{"class":30,"line":9927},[28,35993,32408],{"class":105},[28,35995,35996,35998,36000],{"class":30,"line":9941},[28,35997,32413],{"class":34},[28,35999,39],{"class":38},[28,36001,32418],{"class":45},[28,36003,36004],{"class":30,"line":9947},[28,36005,32423],{"class":105},[28,36007,36008,36010,36012],{"class":30,"line":9974},[28,36009,32428],{"class":34},[28,36011,39],{"class":38},[28,36013,32433],{"class":34},[28,36015,36016],{"class":30,"line":9983},[28,36017,32438],{"class":105},[28,36019,36020,36022,36024],{"class":30,"line":9989},[28,36021,32443],{"class":34},[28,36023,39],{"class":38},[28,36025,32433],{"class":34},[28,36027,36028],{"class":30,"line":9997},[28,36029,32452],{"class":105},[28,36031,36032,36034,36036],{"class":30,"line":10002},[28,36033,32457],{"class":34},[28,36035,39],{"class":38},[28,36037,32433],{"class":34},[28,36039,36040],{"class":30,"line":16681},[28,36041,32466],{"class":105},[28,36043,36044,36046,36048],{"class":30,"line":16687},[28,36045,32471],{"class":34},[28,36047,39],{"class":38},[28,36049,32433],{"class":34},[28,36051,36052],{"class":30,"line":16710},[28,36053,2477],{"emptyLinePlaceholder":144},[28,36055,36056],{"class":30,"line":16716},[28,36057,32484],{"class":105},[28,36059,36060,36062,36064],{"class":30,"line":16739},[28,36061,32489],{"class":34},[28,36063,39],{"class":38},[28,36065,32494],{"class":34},[28,36067,36068],{"class":30,"line":16753},[28,36069,2477],{"emptyLinePlaceholder":144},[28,36071,36072],{"class":30,"line":16773},[28,36073,2477],{"emptyLinePlaceholder":144},[28,36075,36076],{"class":30,"line":16779},[28,36077,32507],{"class":105},[28,36079,36080,36082,36084,36086,36088],{"class":30,"line":16790},[28,36081,3278],{"class":38},[28,36083,32514],{"class":34},[28,36085,26121],{"class":38},[28,36087,32519],{"class":45},[28,36089,32522],{"class":34},[28,36091,36092,36094,36096,36098,36100,36102,36104,36106,36108,36110,36112],{"class":30,"line":16813},[28,36093,32527],{"class":45},[28,36095,221],{"class":34},[28,36097,32532],{"class":320},[28,36099,32535],{"class":45},[28,36101,794],{"class":320},[28,36103,32535],{"class":45},[28,36105,465],{"class":320},[28,36107,32544],{"class":34},[28,36109,742],{"class":38},[28,36111,46],{"class":45},[28,36113,30573],{"class":34},[28,36115,36116,36118,36120,36122,36124,36126],{"class":30,"line":16835},[28,36117,32527],{"class":45},[28,36119,221],{"class":34},[28,36121,32559],{"class":320},[28,36123,668],{"class":38},[28,36125,659],{"class":45},[28,36127,227],{"class":34},[28,36129,36130],{"class":30,"line":16840},[28,36131,2477],{"emptyLinePlaceholder":144},[28,36133,36134],{"class":30,"line":16846},[28,36135,32574],{"class":105},[28,36137,36138],{"class":30,"line":16860},[28,36139,32579],{"class":105},[28,36141,36142,36144,36146],{"class":30,"line":16873},[28,36143,32584],{"class":34},[28,36145,39],{"class":38},[28,36147,32418],{"class":45},[28,36149,36150],{"class":30,"line":16878},[28,36151,32593],{"class":105},[28,36153,36154,36156,36158],{"class":30,"line":16892},[28,36155,32598],{"class":34},[28,36157,39],{"class":38},[28,36159,3162],{"class":45},[28,36161,36162],{"class":30,"line":16897},[28,36163,32607],{"class":105},[28,36165,36166,36168,36170],{"class":30,"line":16903},[28,36167,32612],{"class":34},[28,36169,39],{"class":38},[28,36171,32418],{"class":45},[28,36173,36174],{"class":30,"line":16908},[28,36175,32621],{"class":105},[28,36177,36178,36180,36182],{"class":30,"line":16922},[28,36179,32626],{"class":34},[28,36181,39],{"class":38},[28,36183,3162],{"class":45},[28,36185,36186],{"class":30,"line":16927},[28,36187,32635],{"class":105},[28,36189,36190,36192,36194],{"class":30,"line":16932},[28,36191,32640],{"class":34},[28,36193,39],{"class":38},[28,36195,3162],{"class":45},[28,36197,36198],{"class":30,"line":16946},[28,36199,32649],{"class":105},[28,36201,36202,36204,36206],{"class":30,"line":16958},[28,36203,32654],{"class":34},[28,36205,39],{"class":38},[28,36207,3162],{"class":45},[28,36209,36210],{"class":30,"line":16963},[28,36211,32663],{"class":105},[28,36213,36214,36216,36218,36220,36222],{"class":30,"line":16976},[28,36215,3480],{"class":38},[28,36217,31677],{"class":34},[28,36219,26121],{"class":38},[28,36221,31682],{"class":45},[28,36223,32676],{"class":34},[28,36225,36226],{"class":30,"line":16981},[28,36227,32681],{"class":105},[28,36229,36230,36232,36234],{"class":30,"line":16986},[28,36231,32686],{"class":34},[28,36233,39],{"class":38},[28,36235,32691],{"class":34},[28,36237,36238],{"class":30,"line":16991},[28,36239,32696],{"class":105},[28,36241,36242,36244,36246],{"class":30,"line":17004},[28,36243,32701],{"class":34},[28,36245,39],{"class":38},[28,36247,32706],{"class":34},[28,36249,36250],{"class":30,"line":17009},[28,36251,32712],{"class":105},[28,36253,36254],{"class":30,"line":32709},[28,36255,32718],{"class":34},[28,36257,36258],{"class":30,"line":32715},[28,36259,32724],{"class":105},[28,36261,36262],{"class":30,"line":32721},[28,36263,32730],{"class":105},[28,36265,36266,36268,36270],{"class":30,"line":32727},[28,36267,32736],{"class":34},[28,36269,39],{"class":38},[28,36271,32741],{"class":34},[28,36273,36274],{"class":30,"line":32733},[28,36275,32747],{"class":105},[28,36277,36278,36280,36282,36284,36286,36288,36290],{"class":30,"line":32744},[28,36279,32753],{"class":34},[28,36281,39],{"class":38},[28,36283,32758],{"class":34},[28,36285,32761],{"class":5293},[28,36287,39],{"class":38},[28,36289,46],{"class":45},[28,36291,227],{"class":34},[28,36293,36294],{"class":30,"line":32750},[28,36295,32773],{"class":105},[28,36297,36298,36300,36302],{"class":30,"line":32770},[28,36299,32779],{"class":34},[28,36301,39],{"class":38},[28,36303,32784],{"class":34},[28,36305,36306],{"class":30,"line":32776},[28,36307,32790],{"class":105},[28,36309,36310],{"class":30,"line":32787},[28,36311,32796],{"class":34},[28,36313,36314],{"class":30,"line":32793},[28,36315,32802],{"class":105},[28,36317,36318],{"class":30,"line":32799},[28,36319,32808],{"class":34},[28,36321,36322],{"class":30,"line":32805},[28,36323,32814],{"class":105},[28,36325,36326],{"class":30,"line":32811},[28,36327,32820],{"class":34},[28,36329,36330],{"class":30,"line":32817},[28,36331,32826],{"class":105},[28,36333,36334,36336,36338,36340,36342,36344,36346],{"class":30,"line":32823},[28,36335,32832],{"class":34},[28,36337,9554],{"class":38},[28,36339,32837],{"class":34},[28,36341,668],{"class":38},[28,36343,32842],{"class":34},[28,36345,407],{"class":45},[28,36347,227],{"class":34},[28,36349,36350],{"class":30,"line":32829},[28,36351,32852],{"class":105},[28,36353,36354,36356,36358,36360,36362],{"class":30,"line":32849},[28,36355,32858],{"class":34},[28,36357,9554],{"class":38},[28,36359,32863],{"class":34},[28,36361,3026],{"class":38},[28,36363,32868],{"class":34},[28,36365,36366],{"class":30,"line":32855},[28,36367,32874],{"class":105},[28,36369,36370,36372,36374,36376,36378],{"class":30,"line":32871},[28,36371,32880],{"class":34},[28,36373,9554],{"class":38},[28,36375,32842],{"class":34},[28,36377,407],{"class":45},[28,36379,227],{"class":34},[28,36381,36382],{"class":30,"line":32877},[28,36383,32894],{"class":105},[28,36385,36386,36388,36390,36392,36394],{"class":30,"line":32891},[28,36387,3480],{"class":38},[28,36389,32902],{"class":34},[28,36391,26121],{"class":38},[28,36393,31682],{"class":45},[28,36395,32909],{"class":34},[28,36397,36398],{"class":30,"line":32897},[28,36399,32915],{"class":105},[28,36401,36402,36404,36406],{"class":30,"line":32912},[28,36403,32686],{"class":34},[28,36405,39],{"class":38},[28,36407,32691],{"class":34},[28,36409,36410],{"class":30,"line":32918},[28,36411,32930],{"class":105},[28,36413,36414,36416,36418],{"class":30,"line":32927},[28,36415,32701],{"class":34},[28,36417,39],{"class":38},[28,36419,32706],{"class":34},[28,36421,36422],{"class":30,"line":32933},[28,36423,32945],{"class":105},[28,36425,36426],{"class":30,"line":32942},[28,36427,32951],{"class":34},[28,36429,36430],{"class":30,"line":32948},[28,36431,36432],{"class":105},"            # 验证时不计算梯度以节省内存\u002F计算\n",[28,36434,36435,36437],{"class":30,"line":32954},[28,36436,32957],{"class":38},[28,36438,32960],{"class":34},[28,36440,36441],{"class":30,"line":32963},[28,36442,32966],{"class":105},[28,36444,36445,36448,36450],{"class":30,"line":32969},[28,36446,36447],{"class":34},"                output",[28,36449,39],{"class":38},[28,36451,32741],{"class":34},[28,36453,36454],{"class":30,"line":32980},[28,36455,32983],{"class":105},[28,36457,36458,36461,36463,36465,36467,36469,36471],{"class":30,"line":32986},[28,36459,36460],{"class":34},"                pre_lab",[28,36462,39],{"class":38},[28,36464,32758],{"class":34},[28,36466,32761],{"class":5293},[28,36468,39],{"class":38},[28,36470,46],{"class":45},[28,36472,227],{"class":34},[28,36474,36475],{"class":30,"line":33005},[28,36476,33008],{"class":105},[28,36478,36479,36482,36484],{"class":30,"line":33011},[28,36480,36481],{"class":34},"                val_batch_loss",[28,36483,39],{"class":38},[28,36485,32784],{"class":34},[28,36487,36488],{"class":30,"line":33022},[28,36489,33025],{"class":105},[28,36491,36492,36495,36497,36500,36502,36504,36506],{"class":30,"line":33028},[28,36493,36494],{"class":34},"                val_loss",[28,36496,9554],{"class":38},[28,36498,36499],{"class":34},"val_batch_loss.item()",[28,36501,668],{"class":38},[28,36503,32842],{"class":34},[28,36505,407],{"class":45},[28,36507,227],{"class":34},[28,36509,36510,36513,36515,36517,36519],{"class":30,"line":33048},[28,36511,36512],{"class":34},"                val_corrects",[28,36514,9554],{"class":38},[28,36516,32863],{"class":34},[28,36518,3026],{"class":38},[28,36520,32868],{"class":34},[28,36522,36523],{"class":30,"line":33064},[28,36524,36525],{"class":105},"            # 当前用于验证的样本数量\n",[28,36527,36528,36531,36533,36535,36537],{"class":30,"line":33070},[28,36529,36530],{"class":34},"            val_num",[28,36532,9554],{"class":38},[28,36534,32842],{"class":34},[28,36536,407],{"class":45},[28,36538,227],{"class":34},[28,36540,36541],{"class":30,"line":33084},[28,36542,33087],{"class":105},[28,36544,36545],{"class":30,"line":33090},[28,36546,33093],{"class":105},[28,36548,36549,36551,36553],{"class":30,"line":33096},[28,36550,33099],{"class":34},[28,36552,794],{"class":38},[28,36554,33104],{"class":34},[28,36556,36557],{"class":30,"line":33107},[28,36558,33110],{"class":105},[28,36560,36561],{"class":30,"line":33113},[28,36562,33116],{"class":105},[28,36564,36565,36567,36569],{"class":30,"line":33119},[28,36566,33122],{"class":34},[28,36568,794],{"class":38},[28,36570,33104],{"class":34},[28,36572,36573],{"class":30,"line":33129},[28,36574,33132],{"class":105},[28,36576,36577,36579,36581],{"class":30,"line":33135},[28,36578,33138],{"class":34},[28,36580,794],{"class":38},[28,36582,33143],{"class":34},[28,36584,36585],{"class":30,"line":33146},[28,36586,33149],{"class":105},[28,36588,36589,36591,36593],{"class":30,"line":33152},[28,36590,33155],{"class":34},[28,36592,794],{"class":38},[28,36594,33143],{"class":34},[28,36596,36597],{"class":30,"line":33162},[28,36598,2477],{"emptyLinePlaceholder":144},[28,36600,36601],{"class":30,"line":33167},[28,36602,33170],{"class":105},[28,36604,36605,36607,36609,36611,36613,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641,36643],{"class":30,"line":33173},[28,36606,32527],{"class":45},[28,36608,221],{"class":34},[28,36610,3669],{"class":320},[28,36612,32535],{"class":45},[28,36614,33184],{"class":320},[28,36616,1102],{"class":45},[28,36618,33189],{"class":38},[28,36620,1150],{"class":45},[28,36622,33194],{"class":320},[28,36624,1102],{"class":45},[28,36626,33189],{"class":38},[28,36628,1150],{"class":45},[28,36630,3669],{"class":320},[28,36632,33205],{"class":34},[28,36634,742],{"class":38},[28,36636,46],{"class":45},[28,36638,33212],{"class":34},[28,36640,742],{"class":38},[28,36642,46],{"class":45},[28,36644,33219],{"class":34},[28,36646,36647,36649,36651,36653,36655,36657,36659,36661,36663,36665,36667,36669,36671,36673,36675,36677,36679,36681,36683,36685],{"class":30,"line":33222},[28,36648,32527],{"class":45},[28,36650,221],{"class":34},[28,36652,3669],{"class":320},[28,36654,32535],{"class":45},[28,36656,33233],{"class":320},[28,36658,1102],{"class":45},[28,36660,33189],{"class":38},[28,36662,1150],{"class":45},[28,36664,33242],{"class":320},[28,36666,1102],{"class":45},[28,36668,33189],{"class":38},[28,36670,1150],{"class":45},[28,36672,3669],{"class":320},[28,36674,33253],{"class":34},[28,36676,742],{"class":38},[28,36678,46],{"class":45},[28,36680,33260],{"class":34},[28,36682,742],{"class":38},[28,36684,46],{"class":45},[28,36686,33219],{"class":34},[28,36688,36689],{"class":30,"line":33269},[28,36690,2477],{"emptyLinePlaceholder":144},[28,36692,36693],{"class":30,"line":33274},[28,36694,33277],{"class":105},[28,36696,36697,36699,36701,36703,36705,36707,36709],{"class":30,"line":33280},[28,36698,2574],{"class":38},[28,36700,33285],{"class":34},[28,36702,742],{"class":38},[28,36704,46],{"class":45},[28,36706,119],{"class":34},[28,36708,1164],{"class":38},[28,36710,33296],{"class":34},[28,36712,36713],{"class":30,"line":33299},[28,36714,33302],{"class":105},[28,36716,36717,36719,36721,36723,36725,36727,36729],{"class":30,"line":33305},[28,36718,33308],{"class":34},[28,36720,260],{"class":45},[28,36722,39],{"class":38},[28,36724,33315],{"class":34},[28,36726,742],{"class":38},[28,36728,46],{"class":45},[28,36730,33322],{"class":34},[28,36732,36733],{"class":30,"line":33325},[28,36734,33328],{"class":105},[28,36736,36737],{"class":30,"line":33331},[28,36738,33334],{"class":105},[28,36740,36741,36743,36745],{"class":30,"line":33337},[28,36742,33340],{"class":34},[28,36744,39],{"class":38},[28,36746,32390],{"class":34},[28,36748,36749],{"class":30,"line":33347},[28,36750,2477],{"emptyLinePlaceholder":144},[28,36752,36753],{"class":30,"line":33352},[28,36754,33355],{"class":105},[28,36756,36757,36759,36761,36763,36765],{"class":30,"line":33358},[28,36758,33361],{"class":34},[28,36760,39],{"class":38},[28,36762,33366],{"class":34},[28,36764,742],{"class":38},[28,36766,33371],{"class":34},[28,36768,36769,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789,36791,36793,36795,36797,36799,36801,36803],{"class":30,"line":33374},[28,36770,32527],{"class":45},[28,36772,221],{"class":34},[28,36774,33381],{"class":320},[28,36776,1102],{"class":45},[28,36778,33386],{"class":38},[28,36780,1150],{"class":45},[28,36782,754],{"class":320},[28,36784,1102],{"class":45},[28,36786,33386],{"class":38},[28,36788,1150],{"class":45},[28,36790,33399],{"class":320},[28,36792,33402],{"class":34},[28,36794,33405],{"class":38},[28,36796,1113],{"class":45},[28,36798,33410],{"class":34},[28,36800,542],{"class":38},[28,36802,1113],{"class":45},[28,36804,30573],{"class":34},[28,36806,36807],{"class":30,"line":33419},[28,36808,36809],{"class":105},"    # 选择最优参数并保存\n",[28,36811,36812],{"class":30,"line":33425},[28,36813,36814],{"class":105},"    # 保存最佳模型权重字典\n",[28,36816,36817,36820,36822],{"class":30,"line":33431},[28,36818,36819],{"class":34},"    torch.save(best_model_wts,",[28,36821,33443],{"class":320},[28,36823,227],{"class":34},[28,36825,36826],{"class":30,"line":33437},[28,36827,33463],{"class":105},[28,36829,36830,36832,36834,36836,36838,36840],{"class":30,"line":33448},[28,36831,33469],{"class":34},[28,36833,39],{"class":38},[28,36835,33474],{"class":34},[28,36837,33477],{"class":5293},[28,36839,39],{"class":38},[28,36841,1623],{"class":34},[28,36843,36844,36846,36848,36850],{"class":30,"line":33454},[28,36845,33487],{"class":320},[28,36847,1065],{"class":34},[28,36849,33492],{"class":45},[28,36851,33495],{"class":34},[28,36853,36854,36856],{"class":30,"line":33460},[28,36855,33501],{"class":320},[28,36857,33504],{"class":34},[28,36859,36860,36862],{"class":30,"line":33466},[28,36861,33510],{"class":320},[28,36863,33513],{"class":34},[28,36865,36866,36868],{"class":30,"line":33484},[28,36867,33519],{"class":320},[28,36869,33522],{"class":34},[28,36871,36872,36874],{"class":30,"line":33498},[28,36873,33528],{"class":320},[28,36875,33531],{"class":34},[28,36877,36878],{"class":30,"line":33507},[28,36879,33537],{"class":34},[28,36881,36882],{"class":30,"line":33516},[28,36883,33543],{"class":105},[28,36885,36886,36888],{"class":30,"line":33525},[28,36887,4167],{"class":38},[28,36889,33551],{"class":34},[28,36891,36892],{"class":30,"line":33534},[28,36893,2477],{"emptyLinePlaceholder":144},[28,36895,36896],{"class":30,"line":33540},[28,36897,33562],{"class":105},[28,36899,36900,36902,36904],{"class":30,"line":33546},[28,36901,32023],{"class":38},[28,36903,33570],{"class":2040},[28,36905,33573],{"class":34},[28,36907,36908],{"class":30,"line":33554},[28,36909,33579],{"class":105},[28,36911,36912,36914,36916,36918,36920,36922,36924,36926],{"class":30,"line":33559},[28,36913,33585],{"class":34},[28,36915,31769],{"class":5293},[28,36917,39],{"class":38},[28,36919,221],{"class":34},[28,36921,68],{"class":45},[28,36923,49],{"class":34},[28,36925,507],{"class":45},[28,36927,30573],{"class":34},[28,36929,36930],{"class":30,"line":33565},[28,36931,33605],{"class":105},[28,36933,36934],{"class":30,"line":33576},[28,36935,33611],{"class":105},[28,36937,36938],{"class":30,"line":33582},[28,36939,33617],{"class":105},[28,36941,36942,36944,36946,36948,36950,36952,36954],{"class":30,"line":33602},[28,36943,31803],{"class":34},[28,36945,46],{"class":45},[28,36947,49],{"class":34},[28,36949,52],{"class":45},[28,36951,49],{"class":34},[28,36953,46],{"class":45},[28,36955,227],{"class":34},[28,36957,36958],{"class":30,"line":33608},[28,36959,33640],{"class":105},[28,36961,36962],{"class":30,"line":33614},[28,36963,33646],{"class":105},[28,36965,36966],{"class":30,"line":33620},[28,36967,33652],{"class":105},[28,36969,36970],{"class":30,"line":33637},[28,36971,33658],{"class":105},[28,36973,36974],{"class":30,"line":33643},[28,36975,33664],{"class":105},[28,36977,36978,36980,36982,36984,36986,36988,36990,36992,36994],{"class":30,"line":33649},[28,36979,33670],{"class":34},[28,36981,33673],{"class":320},[28,36983,33676],{"class":34},[28,36985,33679],{"class":320},[28,36987,49],{"class":34},[28,36989,33684],{"class":5293},[28,36991,39],{"class":38},[28,36993,33689],{"class":320},[28,36995,227],{"class":34},[28,36997,36998,37000,37002,37004,37006,37008,37010,37012,37014],{"class":30,"line":33655},[28,36999,33670],{"class":34},[28,37001,33673],{"class":320},[28,37003,33701],{"class":34},[28,37005,33704],{"class":320},[28,37007,49],{"class":34},[28,37009,33684],{"class":5293},[28,37011,39],{"class":38},[28,37013,33713],{"class":320},[28,37015,227],{"class":34},[28,37017,37018],{"class":30,"line":33661},[28,37019,33721],{"class":105},[28,37021,37022],{"class":30,"line":33667},[28,37023,33727],{"class":34},[28,37025,37026],{"class":30,"line":33694},[28,37027,33733],{"class":105},[28,37029,37030,37032,37034],{"class":30,"line":33718},[28,37031,33739],{"class":34},[28,37033,33742],{"class":320},[28,37035,227],{"class":34},[28,37037,37038,37040,37042],{"class":30,"line":33724},[28,37039,33750],{"class":34},[28,37041,33753],{"class":320},[28,37043,227],{"class":34},[28,37045,37046],{"class":30,"line":33730},[28,37047,33761],{"class":105},[28,37049,37050,37052,37054,37056,37058,37060,37062],{"class":30,"line":33736},[28,37051,31803],{"class":34},[28,37053,46],{"class":45},[28,37055,49],{"class":34},[28,37057,52],{"class":45},[28,37059,49],{"class":34},[28,37061,52],{"class":45},[28,37063,227],{"class":34},[28,37065,37066,37068,37070,37072,37074,37076,37078,37080,37082],{"class":30,"line":33747},[28,37067,33670],{"class":34},[28,37069,33673],{"class":320},[28,37071,33788],{"class":34},[28,37073,33679],{"class":320},[28,37075,49],{"class":34},[28,37077,33684],{"class":5293},[28,37079,39],{"class":38},[28,37081,33799],{"class":320},[28,37083,227],{"class":34},[28,37085,37086,37088,37090,37092,37094,37096,37098,37100,37102],{"class":30,"line":33758},[28,37087,33670],{"class":34},[28,37089,33673],{"class":320},[28,37091,33811],{"class":34},[28,37093,33704],{"class":320},[28,37095,49],{"class":34},[28,37097,33684],{"class":5293},[28,37099,39],{"class":38},[28,37101,33822],{"class":320},[28,37103,227],{"class":34},[28,37105,37106],{"class":30,"line":33764},[28,37107,33830],{"class":105},[28,37109,37110],{"class":30,"line":33781},[28,37111,33727],{"class":34},[28,37113,37114,37116,37118],{"class":30,"line":33804},[28,37115,33739],{"class":34},[28,37117,33673],{"class":320},[28,37119,227],{"class":34},[28,37121,37122,37124,37126],{"class":30,"line":33827},[28,37123,33750],{"class":34},[28,37125,33852],{"class":320},[28,37127,227],{"class":34},[28,37129,37130],{"class":30,"line":33833},[28,37131,33860],{"class":34},[28,37133,37134],{"class":30,"line":33838},[28,37135,2477],{"emptyLinePlaceholder":144},[28,37137,37138],{"class":30,"line":33847},[28,37139,33871],{"class":105},[28,37141,37142,37144,37146,37148,37150],{"class":30,"line":33857},[28,37143,1608],{"class":38},[28,37145,31296],{"class":45},[28,37147,3026],{"class":38},[28,37149,31301],{"class":320},[28,37151,3816],{"class":34},[28,37153,37154],{"class":30,"line":33863},[28,37155,33890],{"class":105},[28,37157,37158,37161,37163],{"class":30,"line":33868},[28,37159,37160],{"class":34},"    AlexNet",[28,37162,39],{"class":38},[28,37164,37165],{"class":34},"AlexNet()\n",[28,37167,37168,37170,37172],{"class":30,"line":33874},[28,37169,33907],{"class":34},[28,37171,39],{"class":38},[28,37173,33912],{"class":34},[28,37175,37176,37178,37180,37183,37185,37187,37189],{"class":30,"line":33887},[28,37177,33469],{"class":34},[28,37179,39],{"class":38},[28,37181,37182],{"class":34},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[28,37184,33925],{"class":5293},[28,37186,39],{"class":38},[28,37188,102],{"class":45},[28,37190,227],{"class":34},[28,37192,37193],{"class":30,"line":33893},[28,37194,33937],{"class":34},[171,37196,37197],{"start":109},[174,37198,33950],{},[18,37200,37202],{"className":20,"code":37201,"language":22,"meta":23,"style":23},"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",[25,37203,37204,37210,37220,37230,37240,37244,37254,37264,37275,37279,37283,37287,37295,37311,37321,37337,37347,37361,37365,37375,37385,37395,37401,37405,37409,37417,37421,37437,37445,37449,37453,37461,37469,37473,37477,37481,37485,37491,37495,37505,37513,37521,37525,37529,37533,37541,37545,37561,37565,37569,37573,37585,37589,37601,37605,37609,37621,37625,37635,37639,37643,37655,37659,37667,37671,37675,37683,37687,37695,37699,37703,37707,37711,37715,37731,37739,37743,37747,37795,37801,37805,37815,37823,37831,37835,37839,37843,37847,37855,37859,37875,37879,37887,37895],{"__ignoreMap":23},[28,37205,37206,37208],{"class":30,"line":31},[28,37207,30468],{"class":38},[28,37209,30471],{"class":34},[28,37211,37212,37214,37216,37218],{"class":30,"line":94},[28,37213,30468],{"class":38},[28,37215,31491],{"class":34},[28,37217,31459],{"class":38},[28,37219,31496],{"class":34},[28,37221,37222,37224,37226,37228],{"class":30,"line":109},[28,37223,30813],{"class":38},[28,37225,33978],{"class":34},[28,37227,30468],{"class":38},[28,37229,33983],{"class":34},[28,37231,37232,37234,37236,37238],{"class":30,"line":125},[28,37233,30813],{"class":38},[28,37235,31474],{"class":34},[28,37237,30468],{"class":38},[28,37239,31479],{"class":34},[28,37241,37242],{"class":30,"line":131},[28,37243,33998],{"class":105},[28,37245,37246,37248,37250,37252],{"class":30,"line":1291},[28,37247,30813],{"class":38},[28,37249,31444],{"class":34},[28,37251,30468],{"class":38},[28,37253,31449],{"class":34},[28,37255,37256,37258,37260,37262],{"class":30,"line":1297},[28,37257,30813],{"class":38},[28,37259,31990],{"class":34},[28,37261,30468],{"class":38},[28,37263,35633],{"class":34},[28,37265,37266,37268,37271,37273],{"class":30,"line":1388},[28,37267,30813],{"class":38},[28,37269,37270],{"class":34}," 练习.AlexNet.model ",[28,37272,30468],{"class":38},[28,37274,35633],{"class":34},[28,37276,37277],{"class":30,"line":1394},[28,37278,2477],{"emptyLinePlaceholder":144},[28,37280,37281],{"class":30,"line":1406},[28,37282,2477],{"emptyLinePlaceholder":144},[28,37284,37285],{"class":30,"line":1689},[28,37286,34027],{"class":105},[28,37288,37289,37291,37293],{"class":30,"line":1694},[28,37290,32023],{"class":38},[28,37292,34034],{"class":2040},[28,37294,32029],{"class":34},[28,37296,37297,37299,37301,37303,37305,37307,37309],{"class":30,"line":1700},[28,37298,34041],{"class":34},[28,37300,39],{"class":38},[28,37302,31531],{"class":34},[28,37304,31534],{"class":5293},[28,37306,39],{"class":38},[28,37308,31539],{"class":320},[28,37310,31542],{"class":34},[28,37312,37313,37315,37317,37319],{"class":30,"line":1705},[28,37314,34058],{"class":5293},[28,37316,39],{"class":38},[28,37318,34063],{"class":45},[28,37320,31542],{"class":34},[28,37322,37323,37325,37327,37329,37331,37333,37335],{"class":30,"line":1719},[28,37324,34070],{"class":5293},[28,37326,39],{"class":38},[28,37328,31569],{"class":34},[28,37330,31572],{"class":5293},[28,37332,39],{"class":38},[28,37334,35525],{"class":45},[28,37336,31580],{"class":34},[28,37338,37339,37341,37343,37345],{"class":30,"line":1724},[28,37340,34087],{"class":5293},[28,37342,39],{"class":38},[28,37344,31552],{"class":45},[28,37346,227],{"class":34},[28,37348,37349,37351,37353,37355,37357,37359],{"class":30,"line":1730},[28,37350,34098],{"class":34},[28,37352,39],{"class":38},[28,37354,31610],{"class":34},[28,37356,31613],{"class":5293},[28,37358,39],{"class":38},[28,37360,34109],{"class":34},[28,37362,37363],{"class":30,"line":1751},[28,37364,34114],{"class":105},[28,37366,37367,37369,37371,37373],{"class":30,"line":1756},[28,37368,34119],{"class":5293},[28,37370,39],{"class":38},[28,37372,46],{"class":45},[28,37374,31542],{"class":34},[28,37376,37377,37379,37381,37383],{"class":30,"line":1770},[28,37378,34130],{"class":5293},[28,37380,39],{"class":38},[28,37382,31552],{"class":45},[28,37384,31542],{"class":34},[28,37386,37387,37389,37391,37393],{"class":30,"line":1775},[28,37388,34141],{"class":5293},[28,37390,39],{"class":38},[28,37392,407],{"class":45},[28,37394,227],{"class":34},[28,37396,37397,37399],{"class":30,"line":1804},[28,37398,4167],{"class":38},[28,37400,34154],{"class":34},[28,37402,37403],{"class":30,"line":1809},[28,37404,2477],{"emptyLinePlaceholder":144},[28,37406,37407],{"class":30,"line":1826},[28,37408,34163],{"class":105},[28,37410,37411,37413,37415],{"class":30,"line":1831},[28,37412,32023],{"class":38},[28,37414,34170],{"class":2040},[28,37416,34173],{"class":34},[28,37418,37419],{"class":30,"line":1836},[28,37420,34178],{"class":105},[28,37422,37423,37425,37427,37429,37431,37433,37435],{"class":30,"line":1841},[28,37424,31313],{"class":34},[28,37426,39],{"class":38},[28,37428,31320],{"class":320},[28,37430,1781],{"class":38},[28,37432,31325],{"class":34},[28,37434,1778],{"class":38},[28,37436,34195],{"class":320},[28,37438,37439,37441,37443],{"class":30,"line":1855},[28,37440,31365],{"class":34},[28,37442,39],{"class":38},[28,37444,32365],{"class":34},[28,37446,37447],{"class":30,"line":1860},[28,37448,2477],{"emptyLinePlaceholder":144},[28,37450,37451],{"class":30,"line":2654},[28,37452,34212],{"class":105},[28,37454,37455,37457,37459],{"class":30,"line":2668},[28,37456,34217],{"class":34},[28,37458,39],{"class":38},[28,37460,32418],{"class":45},[28,37462,37463,37465,37467],{"class":30,"line":2676},[28,37464,34226],{"class":34},[28,37466,39],{"class":38},[28,37468,3162],{"class":45},[28,37470,37471],{"class":30,"line":2681},[28,37472,2477],{"emptyLinePlaceholder":144},[28,37474,37475],{"class":30,"line":2687},[28,37476,34239],{"class":105},[28,37478,37479],{"class":30,"line":2693},[28,37480,34244],{"class":105},[28,37482,37483],{"class":30,"line":2698},[28,37484,34249],{"class":105},[28,37486,37487,37489],{"class":30,"line":8025},[28,37488,34254],{"class":38},[28,37490,32960],{"class":34},[28,37492,37493],{"class":30,"line":8049},[28,37494,34261],{"class":105},[28,37496,37497,37499,37501,37503],{"class":30,"line":8054},[28,37498,3480],{"class":38},[28,37500,34268],{"class":34},[28,37502,26121],{"class":38},[28,37504,34273],{"class":34},[28,37506,37507,37509,37511],{"class":30,"line":8060},[28,37508,34278],{"class":34},[28,37510,39],{"class":38},[28,37512,34283],{"class":34},[28,37514,37515,37517,37519],{"class":30,"line":8087},[28,37516,34288],{"class":34},[28,37518,39],{"class":38},[28,37520,34293],{"class":34},[28,37522,37523],{"class":30,"line":8092},[28,37524,34298],{"class":105},[28,37526,37527],{"class":30,"line":8098},[28,37528,32951],{"class":34},[28,37530,37531],{"class":30,"line":8110},[28,37532,34307],{"class":105},[28,37534,37535,37537,37539],{"class":30,"line":8122},[28,37536,32736],{"class":34},[28,37538,39],{"class":38},[28,37540,34316],{"class":34},[28,37542,37543],{"class":30,"line":8134},[28,37544,34321],{"class":105},[28,37546,37547,37549,37551,37553,37555,37557,37559],{"class":30,"line":9793},[28,37548,32753],{"class":34},[28,37550,39],{"class":38},[28,37552,32758],{"class":34},[28,37554,32761],{"class":5293},[28,37556,39],{"class":38},[28,37558,46],{"class":45},[28,37560,227],{"class":34},[28,37562,37563],{"class":30,"line":9818},[28,37564,34342],{"class":105},[28,37566,37567],{"class":30,"line":9841},[28,37568,34347],{"class":105},[28,37570,37571],{"class":30,"line":9865},[28,37572,34352],{"class":105},[28,37574,37575,37577,37579,37581,37583],{"class":30,"line":9870},[28,37576,34357],{"class":34},[28,37578,9554],{"class":38},[28,37580,32863],{"class":34},[28,37582,3026],{"class":38},[28,37584,34366],{"class":34},[28,37586,37587],{"class":30,"line":9875},[28,37588,34371],{"class":105},[28,37590,37591,37593,37595,37597,37599],{"class":30,"line":9880},[28,37592,34376],{"class":34},[28,37594,9554],{"class":38},[28,37596,34381],{"class":34},[28,37598,407],{"class":45},[28,37600,227],{"class":34},[28,37602,37603],{"class":30,"line":9889},[28,37604,2477],{"emptyLinePlaceholder":144},[28,37606,37607],{"class":30,"line":9894},[28,37608,34394],{"class":105},[28,37610,37611,37613,37615,37617,37619],{"class":30,"line":9900},[28,37612,34399],{"class":34},[28,37614,39],{"class":38},[28,37616,34404],{"class":34},[28,37618,794],{"class":38},[28,37620,34409],{"class":34},[28,37622,37623],{"class":30,"line":9921},[28,37624,34414],{"class":105},[28,37626,37627,37629,37631,37633],{"class":30,"line":9927},[28,37628,32527],{"class":45},[28,37630,221],{"class":34},[28,37632,34423],{"class":320},[28,37634,34426],{"class":34},[28,37636,37637],{"class":30,"line":9941},[28,37638,2477],{"emptyLinePlaceholder":144},[28,37640,37641],{"class":30,"line":9947},[28,37642,34435],{"class":105},[28,37644,37645,37647,37649,37651,37653],{"class":30,"line":9974},[28,37646,1608],{"class":38},[28,37648,31296],{"class":45},[28,37650,3026],{"class":38},[28,37652,31301],{"class":320},[28,37654,3816],{"class":34},[28,37656,37657],{"class":30,"line":9983},[28,37658,34452],{"class":105},[28,37660,37661,37663,37665],{"class":30,"line":9989},[28,37662,31365],{"class":34},[28,37664,39],{"class":38},[28,37666,37165],{"class":34},[28,37668,37669],{"class":30,"line":9997},[28,37670,34465],{"class":105},[28,37672,37673],{"class":30,"line":10002},[28,37674,34470],{"class":105},[28,37676,37677,37679,37681],{"class":30,"line":16681},[28,37678,34475],{"class":34},[28,37680,34478],{"class":320},[28,37682,30573],{"class":34},[28,37684,37685],{"class":30,"line":16687},[28,37686,34485],{"class":105},[28,37688,37689,37691,37693],{"class":30,"line":16710},[28,37690,34098],{"class":34},[28,37692,39],{"class":38},[28,37694,34494],{"class":34},[28,37696,37697],{"class":30,"line":16716},[28,37698,34499],{"class":105},[28,37700,37701],{"class":30,"line":16739},[28,37702,34504],{"class":34},[28,37704,37705],{"class":30,"line":16753},[28,37706,2477],{"emptyLinePlaceholder":144},[28,37708,37709],{"class":30,"line":16773},[28,37710,34513],{"class":105},[28,37712,37713],{"class":30,"line":16779},[28,37714,34518],{"class":105},[28,37716,37717,37719,37721,37723,37725,37727,37729],{"class":30,"line":16790},[28,37718,31313],{"class":34},[28,37720,39],{"class":38},[28,37722,31320],{"class":320},[28,37724,1781],{"class":38},[28,37726,31325],{"class":34},[28,37728,1778],{"class":38},[28,37730,34195],{"class":320},[28,37732,37733,37735,37737],{"class":30,"line":16813},[28,37734,31365],{"class":34},[28,37736,39],{"class":38},[28,37738,32365],{"class":34},[28,37740,37741],{"class":30,"line":16835},[28,37742,34547],{"class":105},[28,37744,37745],{"class":30,"line":16840},[28,37746,34552],{"class":105},[28,37748,37749,37751,37753,37755,37757,37759,37761,37763,37765,37767,37769,37771,37773,37775,37777,37779,37781,37783,37785,37787,37789,37791,37793],{"class":30,"line":16846},[28,37750,34557],{"class":34},[28,37752,39],{"class":38},[28,37754,1096],{"class":34},[28,37756,34564],{"class":320},[28,37758,49],{"class":34},[28,37760,34569],{"class":320},[28,37762,49],{"class":34},[28,37764,34574],{"class":320},[28,37766,49],{"class":34},[28,37768,34579],{"class":320},[28,37770,49],{"class":34},[28,37772,34584],{"class":320},[28,37774,49],{"class":34},[28,37776,34589],{"class":320},[28,37778,49],{"class":34},[28,37780,34594],{"class":320},[28,37782,49],{"class":34},[28,37784,34599],{"class":320},[28,37786,49],{"class":34},[28,37788,34604],{"class":320},[28,37790,49],{"class":34},[28,37792,34609],{"class":320},[28,37794,33322],{"class":34},[28,37796,37797,37799],{"class":30,"line":16860},[28,37798,34254],{"class":38},[28,37800,32960],{"class":34},[28,37802,37803],{"class":30,"line":16873},[28,37804,34622],{"class":105},[28,37806,37807,37809,37811,37813],{"class":30,"line":16878},[28,37808,3480],{"class":38},[28,37810,34629],{"class":34},[28,37812,26121],{"class":38},[28,37814,34273],{"class":34},[28,37816,37817,37819,37821],{"class":30,"line":16892},[28,37818,32686],{"class":34},[28,37820,39],{"class":38},[28,37822,32691],{"class":34},[28,37824,37825,37827,37829],{"class":30,"line":16897},[28,37826,32701],{"class":34},[28,37828,39],{"class":38},[28,37830,32706],{"class":34},[28,37832,37833],{"class":30,"line":16903},[28,37834,2477],{"emptyLinePlaceholder":144},[28,37836,37837],{"class":30,"line":16908},[28,37838,34658],{"class":105},[28,37840,37841],{"class":30,"line":16922},[28,37842,32951],{"class":34},[28,37844,37845],{"class":30,"line":16927},[28,37846,34667],{"class":105},[28,37848,37849,37851,37853],{"class":30,"line":16932},[28,37850,32736],{"class":34},[28,37852,39],{"class":38},[28,37854,32741],{"class":34},[28,37856,37857],{"class":30,"line":16946},[28,37858,34680],{"class":105},[28,37860,37861,37863,37865,37867,37869,37871,37873],{"class":30,"line":16958},[28,37862,32753],{"class":34},[28,37864,39],{"class":38},[28,37866,32758],{"class":34},[28,37868,32761],{"class":5293},[28,37870,39],{"class":38},[28,37872,46],{"class":45},[28,37874,227],{"class":34},[28,37876,37877],{"class":30,"line":16963},[28,37878,34701],{"class":105},[28,37880,37881,37883,37885],{"class":30,"line":16976},[28,37882,34706],{"class":34},[28,37884,39],{"class":38},[28,37886,34711],{"class":34},[28,37888,37889,37891,37893],{"class":30,"line":16981},[28,37890,34716],{"class":34},[28,37892,39],{"class":38},[28,37894,34721],{"class":34},[28,37896,37897,37899,37901,37903,37905,37907,37909,37911],{"class":30,"line":16986},[28,37898,34726],{"class":45},[28,37900,221],{"class":34},[28,37902,34731],{"class":320},[28,37904,34734],{"class":34},[28,37906,34737],{"class":320},[28,37908,49],{"class":34},[28,37910,34742],{"class":320},[28,37912,34745],{"class":34},[188,37914,37916],{"id":37915},"_22vgg","2.2.VGG",[22075,37918,37920],{"id":37919},"_221原理","2.2.1.原理",[14,37922,37923],{},[1539,37924],{"alt":23,"src":37925},"\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,37927,37928],{},[1539,37929],{"alt":23,"src":37930},"\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,37932,37933],{},[1539,37934],{"alt":23,"src":37935},"\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,37937,37938],{},"参数详细描述：",[14,37940,37941],{},[1539,37942],{"alt":23,"src":37943},"\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,37945,37946],{},[1539,37947],{"alt":23,"src":37948},"\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,37950,37951],{},[1539,37952],{"alt":23,"src":37953},"\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,37955,37956],{},[1539,37957],{"alt":23,"src":37958},"\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,37960,37961],{},[1539,37962],{"alt":23,"src":37963},"\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",[22075,37965,37967],{"id":37966},"_222代码实现","2.2.2.代码实现",[171,37969,37970],{},[174,37971,37972],{},"网络搭建",[18,37974,37976],{"className":20,"code":37975,"language":22,"meta":23,"style":23},"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",[25,37977,37978,37984,37996,38006,38016,38020,38037,38045,38064,38069,38074,38086,38124,38129,38165,38169,38198,38203,38208,38219,38255,38259,38295,38299,38327,38331,38336,38347,38383,38387,38423,38427,38463,38467,38495,38499,38504,38515,38552,38556,38592,38596,38632,38636,38664,38668,38673,38684,38720,38724,38760,38764,38800,38804,38832,38836,38841,38852,38857,38862,38867,38888,38892,38904,38908,38920,38924,38928,38933,38938,38953,38958,38968,38973,38988,38993,39012,39017,39026,39031,39041,39046,39051,39065,39070,39084,39092,39096,39100,39108,39119,39130,39141,39152,39163,39174,39180,39184,39189,39202,39222,39228,39237],{"__ignoreMap":23},[28,37979,37980,37982],{"class":30,"line":31},[28,37981,30468],{"class":38},[28,37983,30471],{"class":34},[28,37985,37986,37988,37991,37993],{"class":30,"line":94},[28,37987,30813],{"class":38},[28,37989,37990],{"class":34}," sympy.core.sympify ",[28,37992,30468],{"class":38},[28,37994,37995],{"class":34}," kernS\n",[28,37997,37998,38000,38002,38004],{"class":30,"line":109},[28,37999,30813],{"class":38},[28,38001,30816],{"class":34},[28,38003,30468],{"class":38},[28,38005,30821],{"class":34},[28,38007,38008,38010,38012,38014],{"class":30,"line":125},[28,38009,30813],{"class":38},[28,38011,30833],{"class":34},[28,38013,30468],{"class":38},[28,38015,30838],{"class":34},[28,38017,38018],{"class":30,"line":131},[28,38019,2477],{"emptyLinePlaceholder":144},[28,38021,38022,38024,38027,38029,38031,38033,38035],{"class":30,"line":1291},[28,38023,14771],{"class":38},[28,38025,38026],{"class":2040}," VGG16",[28,38028,221],{"class":34},[28,38030,30854],{"class":2040},[28,38032,768],{"class":34},[28,38034,30859],{"class":2040},[28,38036,30862],{"class":34},[28,38038,38039,38041,38043],{"class":30,"line":1297},[28,38040,30877],{"class":38},[28,38042,30880],{"class":45},[28,38044,30883],{"class":34},[28,38046,38047,38049,38051,38054,38056,38058,38060,38062],{"class":30,"line":1388},[28,38048,30893],{"class":45},[28,38050,221],{"class":34},[28,38052,38053],{"class":45},"VGG16",[28,38055,12512],{"class":34},[28,38057,30899],{"class":45},[28,38059,30902],{"class":34},[28,38061,30905],{"class":45},[28,38063,2053],{"class":34},[28,38065,38066],{"class":30,"line":1394},[28,38067,38068],{"class":105},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[28,38070,38071],{"class":30,"line":1406},[28,38072,38073],{"class":105},"        # 这里用的是灰度图\n",[28,38075,38076,38078,38081,38083],{"class":30,"line":1689},[28,38077,30921],{"class":45},[28,38079,38080],{"class":34},".block1",[28,38082,39],{"class":38},[28,38084,38085],{"class":34},"nn.Sequential(\n",[28,38087,38088,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121],{"class":30,"line":1694},[28,38089,38090],{"class":34},"            nn.Conv2d(",[28,38092,30932],{"class":5293},[28,38094,39],{"class":38},[28,38096,46],{"class":45},[28,38098,49],{"class":34},[28,38100,30941],{"class":5293},[28,38102,39],{"class":38},[28,38104,419],{"class":45},[28,38106,49],{"class":34},[28,38108,30950],{"class":5293},[28,38110,39],{"class":38},[28,38112,57],{"class":45},[28,38114,49],{"class":34},[28,38116,30959],{"class":5293},[28,38118,39],{"class":38},[28,38120,46],{"class":45},[28,38122,38123],{"class":34},"),\n",[28,38125,38126],{"class":30,"line":1700},[28,38127,38128],{"class":34},"            nn.ReLU(),\n",[28,38130,38131,38133,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163],{"class":30,"line":1705},[28,38132,38090],{"class":34},[28,38134,30932],{"class":5293},[28,38136,39],{"class":38},[28,38138,419],{"class":45},[28,38140,49],{"class":34},[28,38142,30941],{"class":5293},[28,38144,39],{"class":38},[28,38146,419],{"class":45},[28,38148,49],{"class":34},[28,38150,30950],{"class":5293},[28,38152,39],{"class":38},[28,38154,57],{"class":45},[28,38156,49],{"class":34},[28,38158,30959],{"class":5293},[28,38160,39],{"class":38},[28,38162,46],{"class":45},[28,38164,38123],{"class":34},[28,38166,38167],{"class":30,"line":1719},[28,38168,38128],{"class":34},[28,38170,38171,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196],{"class":30,"line":1724},[28,38172,38173],{"class":34},"            nn.MaxPool2d(",[28,38175,30950],{"class":5293},[28,38177,39],{"class":38},[28,38179,52],{"class":45},[28,38181,49],{"class":34},[28,38183,31005],{"class":5293},[28,38185,39],{"class":38},[28,38187,52],{"class":45},[28,38189,49],{"class":34},[28,38191,30959],{"class":5293},[28,38193,39],{"class":38},[28,38195,407],{"class":45},[28,38197,227],{"class":34},[28,38199,38200],{"class":30,"line":1730},[28,38201,38202],{"class":34},"        )\n",[28,38204,38205],{"class":30,"line":1751},[28,38206,38207],{"class":105},"        # 第二层\n",[28,38209,38210,38212,38215,38217],{"class":30,"line":1756},[28,38211,30921],{"class":45},[28,38213,38214],{"class":34},".block2",[28,38216,39],{"class":38},[28,38218,38085],{"class":34},[28,38220,38221,38223,38225,38227,38229,38231,38233,38235,38237,38239,38241,38243,38245,38247,38249,38251,38253],{"class":30,"line":1770},[28,38222,38090],{"class":34},[28,38224,30932],{"class":5293},[28,38226,39],{"class":38},[28,38228,419],{"class":45},[28,38230,49],{"class":34},[28,38232,30941],{"class":5293},[28,38234,39],{"class":38},[28,38236,32146],{"class":45},[28,38238,49],{"class":34},[28,38240,30950],{"class":5293},[28,38242,39],{"class":38},[28,38244,57],{"class":45},[28,38246,49],{"class":34},[28,38248,30959],{"class":5293},[28,38250,39],{"class":38},[28,38252,46],{"class":45},[28,38254,38123],{"class":34},[28,38256,38257],{"class":30,"line":1775},[28,38258,38128],{"class":34},[28,38260,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293],{"class":30,"line":1804},[28,38262,38090],{"class":34},[28,38264,30932],{"class":5293},[28,38266,39],{"class":38},[28,38268,32146],{"class":45},[28,38270,49],{"class":34},[28,38272,30941],{"class":5293},[28,38274,39],{"class":38},[28,38276,32146],{"class":45},[28,38278,49],{"class":34},[28,38280,30950],{"class":5293},[28,38282,39],{"class":38},[28,38284,57],{"class":45},[28,38286,49],{"class":34},[28,38288,30959],{"class":5293},[28,38290,39],{"class":38},[28,38292,46],{"class":45},[28,38294,38123],{"class":34},[28,38296,38297],{"class":30,"line":1809},[28,38298,38128],{"class":34},[28,38300,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325],{"class":30,"line":1826},[28,38302,38173],{"class":34},[28,38304,30950],{"class":5293},[28,38306,39],{"class":38},[28,38308,52],{"class":45},[28,38310,49],{"class":34},[28,38312,31005],{"class":5293},[28,38314,39],{"class":38},[28,38316,52],{"class":45},[28,38318,49],{"class":34},[28,38320,30959],{"class":5293},[28,38322,39],{"class":38},[28,38324,407],{"class":45},[28,38326,227],{"class":34},[28,38328,38329],{"class":30,"line":1831},[28,38330,38202],{"class":34},[28,38332,38333],{"class":30,"line":1836},[28,38334,38335],{"class":105},"        # 第三层\n",[28,38337,38338,38340,38343,38345],{"class":30,"line":1841},[28,38339,30921],{"class":45},[28,38341,38342],{"class":34},".block3",[28,38344,39],{"class":38},[28,38346,38085],{"class":34},[28,38348,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377,38379,38381],{"class":30,"line":1855},[28,38350,38090],{"class":34},[28,38352,30932],{"class":5293},[28,38354,39],{"class":38},[28,38356,32146],{"class":45},[28,38358,49],{"class":34},[28,38360,30941],{"class":5293},[28,38362,39],{"class":38},[28,38364,34946],{"class":45},[28,38366,49],{"class":34},[28,38368,30950],{"class":5293},[28,38370,39],{"class":38},[28,38372,57],{"class":45},[28,38374,49],{"class":34},[28,38376,30959],{"class":5293},[28,38378,39],{"class":38},[28,38380,46],{"class":45},[28,38382,38123],{"class":34},[28,38384,38385],{"class":30,"line":1860},[28,38386,38128],{"class":34},[28,38388,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421],{"class":30,"line":2654},[28,38390,38090],{"class":34},[28,38392,30932],{"class":5293},[28,38394,39],{"class":38},[28,38396,34946],{"class":45},[28,38398,49],{"class":34},[28,38400,30941],{"class":5293},[28,38402,39],{"class":38},[28,38404,34946],{"class":45},[28,38406,49],{"class":34},[28,38408,30950],{"class":5293},[28,38410,39],{"class":38},[28,38412,57],{"class":45},[28,38414,49],{"class":34},[28,38416,30959],{"class":5293},[28,38418,39],{"class":38},[28,38420,46],{"class":45},[28,38422,38123],{"class":34},[28,38424,38425],{"class":30,"line":2668},[28,38426,38128],{"class":34},[28,38428,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461],{"class":30,"line":2676},[28,38430,38090],{"class":34},[28,38432,30932],{"class":5293},[28,38434,39],{"class":38},[28,38436,34946],{"class":45},[28,38438,49],{"class":34},[28,38440,30941],{"class":5293},[28,38442,39],{"class":38},[28,38444,34946],{"class":45},[28,38446,49],{"class":34},[28,38448,30950],{"class":5293},[28,38450,39],{"class":38},[28,38452,57],{"class":45},[28,38454,49],{"class":34},[28,38456,30959],{"class":5293},[28,38458,39],{"class":38},[28,38460,46],{"class":45},[28,38462,38123],{"class":34},[28,38464,38465],{"class":30,"line":2681},[28,38466,38128],{"class":34},[28,38468,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493],{"class":30,"line":2687},[28,38470,38173],{"class":34},[28,38472,30950],{"class":5293},[28,38474,39],{"class":38},[28,38476,52],{"class":45},[28,38478,49],{"class":34},[28,38480,31005],{"class":5293},[28,38482,39],{"class":38},[28,38484,52],{"class":45},[28,38486,49],{"class":34},[28,38488,30959],{"class":5293},[28,38490,39],{"class":38},[28,38492,407],{"class":45},[28,38494,227],{"class":34},[28,38496,38497],{"class":30,"line":2693},[28,38498,38202],{"class":34},[28,38500,38501],{"class":30,"line":2698},[28,38502,38503],{"class":105},"        # 第四层\n",[28,38505,38506,38508,38511,38513],{"class":30,"line":8025},[28,38507,30921],{"class":45},[28,38509,38510],{"class":34},".block4",[28,38512,39],{"class":38},[28,38514,38085],{"class":34},[28,38516,38517,38519,38521,38523,38525,38527,38529,38531,38534,38536,38538,38540,38542,38544,38546,38548,38550],{"class":30,"line":8049},[28,38518,38090],{"class":34},[28,38520,30932],{"class":5293},[28,38522,39],{"class":38},[28,38524,34946],{"class":45},[28,38526,49],{"class":34},[28,38528,30941],{"class":5293},[28,38530,39],{"class":38},[28,38532,38533],{"class":45},"512",[28,38535,49],{"class":34},[28,38537,30950],{"class":5293},[28,38539,39],{"class":38},[28,38541,57],{"class":45},[28,38543,49],{"class":34},[28,38545,30959],{"class":5293},[28,38547,39],{"class":38},[28,38549,46],{"class":45},[28,38551,38123],{"class":34},[28,38553,38554],{"class":30,"line":8054},[28,38555,38128],{"class":34},[28,38557,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590],{"class":30,"line":8060},[28,38559,38090],{"class":34},[28,38561,30932],{"class":5293},[28,38563,39],{"class":38},[28,38565,38533],{"class":45},[28,38567,49],{"class":34},[28,38569,30941],{"class":5293},[28,38571,39],{"class":38},[28,38573,38533],{"class":45},[28,38575,49],{"class":34},[28,38577,30950],{"class":5293},[28,38579,39],{"class":38},[28,38581,57],{"class":45},[28,38583,49],{"class":34},[28,38585,30959],{"class":5293},[28,38587,39],{"class":38},[28,38589,46],{"class":45},[28,38591,38123],{"class":34},[28,38593,38594],{"class":30,"line":8087},[28,38595,38128],{"class":34},[28,38597,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630],{"class":30,"line":8092},[28,38599,38090],{"class":34},[28,38601,30932],{"class":5293},[28,38603,39],{"class":38},[28,38605,38533],{"class":45},[28,38607,49],{"class":34},[28,38609,30941],{"class":5293},[28,38611,39],{"class":38},[28,38613,38533],{"class":45},[28,38615,49],{"class":34},[28,38617,30950],{"class":5293},[28,38619,39],{"class":38},[28,38621,57],{"class":45},[28,38623,49],{"class":34},[28,38625,30959],{"class":5293},[28,38627,39],{"class":38},[28,38629,46],{"class":45},[28,38631,38123],{"class":34},[28,38633,38634],{"class":30,"line":8098},[28,38635,38128],{"class":34},[28,38637,38638,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662],{"class":30,"line":8110},[28,38639,38173],{"class":34},[28,38641,30950],{"class":5293},[28,38643,39],{"class":38},[28,38645,52],{"class":45},[28,38647,49],{"class":34},[28,38649,31005],{"class":5293},[28,38651,39],{"class":38},[28,38653,52],{"class":45},[28,38655,49],{"class":34},[28,38657,30959],{"class":5293},[28,38659,39],{"class":38},[28,38661,407],{"class":45},[28,38663,227],{"class":34},[28,38665,38666],{"class":30,"line":8122},[28,38667,38202],{"class":34},[28,38669,38670],{"class":30,"line":8134},[28,38671,38672],{"class":105},"        # 第五层\n",[28,38674,38675,38677,38680,38682],{"class":30,"line":9793},[28,38676,30921],{"class":45},[28,38678,38679],{"class":34},".block5",[28,38681,39],{"class":38},[28,38683,38085],{"class":34},[28,38685,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718],{"class":30,"line":9818},[28,38687,38090],{"class":34},[28,38689,30932],{"class":5293},[28,38691,39],{"class":38},[28,38693,38533],{"class":45},[28,38695,49],{"class":34},[28,38697,30941],{"class":5293},[28,38699,39],{"class":38},[28,38701,38533],{"class":45},[28,38703,49],{"class":34},[28,38705,30950],{"class":5293},[28,38707,39],{"class":38},[28,38709,57],{"class":45},[28,38711,49],{"class":34},[28,38713,30959],{"class":5293},[28,38715,39],{"class":38},[28,38717,46],{"class":45},[28,38719,38123],{"class":34},[28,38721,38722],{"class":30,"line":9841},[28,38723,38128],{"class":34},[28,38725,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748,38750,38752,38754,38756,38758],{"class":30,"line":9865},[28,38727,38090],{"class":34},[28,38729,30932],{"class":5293},[28,38731,39],{"class":38},[28,38733,38533],{"class":45},[28,38735,49],{"class":34},[28,38737,30941],{"class":5293},[28,38739,39],{"class":38},[28,38741,38533],{"class":45},[28,38743,49],{"class":34},[28,38745,30950],{"class":5293},[28,38747,39],{"class":38},[28,38749,57],{"class":45},[28,38751,49],{"class":34},[28,38753,30959],{"class":5293},[28,38755,39],{"class":38},[28,38757,46],{"class":45},[28,38759,38123],{"class":34},[28,38761,38762],{"class":30,"line":9870},[28,38763,38128],{"class":34},[28,38765,38766,38768,38770,38772,38774,38776,38778,38780,38782,38784,38786,38788,38790,38792,38794,38796,38798],{"class":30,"line":9875},[28,38767,38090],{"class":34},[28,38769,30932],{"class":5293},[28,38771,39],{"class":38},[28,38773,38533],{"class":45},[28,38775,49],{"class":34},[28,38777,30941],{"class":5293},[28,38779,39],{"class":38},[28,38781,38533],{"class":45},[28,38783,49],{"class":34},[28,38785,30950],{"class":5293},[28,38787,39],{"class":38},[28,38789,57],{"class":45},[28,38791,49],{"class":34},[28,38793,30959],{"class":5293},[28,38795,39],{"class":38},[28,38797,46],{"class":45},[28,38799,38123],{"class":34},[28,38801,38802],{"class":30,"line":9880},[28,38803,38128],{"class":34},[28,38805,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830],{"class":30,"line":9889},[28,38807,38173],{"class":34},[28,38809,30950],{"class":5293},[28,38811,39],{"class":38},[28,38813,52],{"class":45},[28,38815,49],{"class":34},[28,38817,31005],{"class":5293},[28,38819,39],{"class":38},[28,38821,52],{"class":45},[28,38823,49],{"class":34},[28,38825,30959],{"class":5293},[28,38827,39],{"class":38},[28,38829,407],{"class":45},[28,38831,227],{"class":34},[28,38833,38834],{"class":30,"line":9894},[28,38835,38202],{"class":34},[28,38837,38838],{"class":30,"line":9900},[28,38839,38840],{"class":105},"        # 全连接层\n",[28,38842,38843,38845,38848,38850],{"class":30,"line":9921},[28,38844,30921],{"class":45},[28,38846,38847],{"class":34},".block6",[28,38849,39],{"class":38},[28,38851,38085],{"class":34},[28,38853,38854],{"class":30,"line":9927},[28,38855,38856],{"class":105},"            # 平展操作\n",[28,38858,38859],{"class":30,"line":9941},[28,38860,38861],{"class":105},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[28,38863,38864],{"class":30,"line":9947},[28,38865,38866],{"class":34},"            nn.Flatten(),\n",[28,38868,38869,38872,38874,38876,38878,38880,38882,38884,38886],{"class":30,"line":9974},[28,38870,38871],{"class":34},"            nn.Linear(",[28,38873,583],{"class":45},[28,38875,668],{"class":38},[28,38877,583],{"class":45},[28,38879,668],{"class":38},[28,38881,38533],{"class":45},[28,38883,49],{"class":34},[28,38885,34946],{"class":45},[28,38887,38123],{"class":34},[28,38889,38890],{"class":30,"line":9983},[28,38891,38128],{"class":34},[28,38893,38894,38896,38898,38900,38902],{"class":30,"line":9989},[28,38895,38871],{"class":34},[28,38897,34946],{"class":45},[28,38899,49],{"class":34},[28,38901,32146],{"class":45},[28,38903,38123],{"class":34},[28,38905,38906],{"class":30,"line":9997},[28,38907,38128],{"class":34},[28,38909,38910,38912,38914,38916,38918],{"class":30,"line":10002},[28,38911,38871],{"class":34},[28,38913,32146],{"class":45},[28,38915,49],{"class":34},[28,38917,659],{"class":45},[28,38919,227],{"class":34},[28,38921,38922],{"class":30,"line":16681},[28,38923,38202],{"class":34},[28,38925,38926],{"class":30,"line":16687},[28,38927,2477],{"emptyLinePlaceholder":144},[28,38929,38930],{"class":30,"line":16710},[28,38931,38932],{"class":105},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,38934,38935],{"class":30,"line":16716},[28,38936,38937],{"class":105},"        # 循环遍历模型\n",[28,38939,38940,38942,38945,38947,38950],{"class":30,"line":16739},[28,38941,3480],{"class":38},[28,38943,38944],{"class":34}," m ",[28,38946,26121],{"class":38},[28,38948,38949],{"class":45}," self",[28,38951,38952],{"class":34},".modules():\n",[28,38954,38955],{"class":30,"line":16753},[28,38956,38957],{"class":105},"            # print(m)\n",[28,38959,38960,38962,38965],{"class":30,"line":16773},[28,38961,4719],{"class":38},[28,38963,38964],{"class":45}," isinstance",[28,38966,38967],{"class":34},"(m,nn.Conv2d):\n",[28,38969,38970],{"class":30,"line":16779},[28,38971,38972],{"class":105},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,38974,38975,38978,38981,38983,38986],{"class":30,"line":16790},[28,38976,38977],{"class":34},"                nn.init.kaiming_normal_(m.weight,",[28,38979,38980],{"class":5293},"nonlinearity",[28,38982,39],{"class":38},[28,38984,38985],{"class":320},"'relu'",[28,38987,227],{"class":34},[28,38989,38990],{"class":30,"line":16813},[28,38991,38992],{"class":105},"                # 判断b参数是否存在\n",[28,38994,38995,38998,39001,39004,39007,39010],{"class":30,"line":16835},[28,38996,38997],{"class":38},"                if",[28,38999,39000],{"class":34}," m.bias ",[28,39002,39003],{"class":38},"is",[28,39005,39006],{"class":38}," not",[28,39008,39009],{"class":45}," None",[28,39011,3816],{"class":34},[28,39013,39014],{"class":30,"line":16840},[28,39015,39016],{"class":105},"                    # 如果参数不存在的化初始化b=0\n",[28,39018,39019,39022,39024],{"class":30,"line":16846},[28,39020,39021],{"class":34},"                    nn.init.constant_(m.bias,",[28,39023,407],{"class":45},[28,39025,227],{"class":34},[28,39027,39028],{"class":30,"line":16860},[28,39029,39030],{"class":105},"            # 全连接层初始化\n",[28,39032,39033,39036,39038],{"class":30,"line":16873},[28,39034,39035],{"class":38},"            elif",[28,39037,38964],{"class":45},[28,39039,39040],{"class":34},"(m,nn.Linear):\n",[28,39042,39043],{"class":30,"line":16878},[28,39044,39045],{"class":105},"                # 这个初始化方法是利用的是正太分布的方式\n",[28,39047,39048],{"class":30,"line":16892},[28,39049,39050],{"class":105},"                # 均值为0，方差为0.01\n",[28,39052,39053,39056,39058,39060,39063],{"class":30,"line":16897},[28,39054,39055],{"class":34},"                nn.init.normal_(m.weight,",[28,39057,407],{"class":45},[28,39059,49],{"class":34},[28,39061,39062],{"class":45},"0.01",[28,39064,227],{"class":34},[28,39066,39067],{"class":30,"line":16903},[28,39068,39069],{"class":105},"                # 初始化b参数\n",[28,39071,39072,39074,39076,39078,39080,39082],{"class":30,"line":16908},[28,39073,38997],{"class":38},[28,39075,39000],{"class":34},[28,39077,39003],{"class":38},[28,39079,39006],{"class":38},[28,39081,39009],{"class":45},[28,39083,3816],{"class":34},[28,39085,39086,39088,39090],{"class":30,"line":16922},[28,39087,39021],{"class":34},[28,39089,407],{"class":45},[28,39091,227],{"class":34},[28,39093,39094],{"class":30,"line":16927},[28,39095,2477],{"emptyLinePlaceholder":144},[28,39097,39098],{"class":30,"line":16932},[28,39099,35241],{"class":105},[28,39101,39102,39104,39106],{"class":30,"line":16946},[28,39103,30877],{"class":38},[28,39105,31169],{"class":2040},[28,39107,31172],{"class":34},[28,39109,39110,39112,39114,39116],{"class":30,"line":16958},[28,39111,31177],{"class":34},[28,39113,39],{"class":38},[28,39115,30899],{"class":45},[28,39117,39118],{"class":34},".block1(x)\n",[28,39120,39121,39123,39125,39127],{"class":30,"line":16963},[28,39122,31177],{"class":34},[28,39124,39],{"class":38},[28,39126,30899],{"class":45},[28,39128,39129],{"class":34},".block2(x)\n",[28,39131,39132,39134,39136,39138],{"class":30,"line":16976},[28,39133,31177],{"class":34},[28,39135,39],{"class":38},[28,39137,30899],{"class":45},[28,39139,39140],{"class":34},".block3(x)\n",[28,39142,39143,39145,39147,39149],{"class":30,"line":16981},[28,39144,31177],{"class":34},[28,39146,39],{"class":38},[28,39148,30899],{"class":45},[28,39150,39151],{"class":34},".block4(x)\n",[28,39153,39154,39156,39158,39160],{"class":30,"line":16986},[28,39155,31177],{"class":34},[28,39157,39],{"class":38},[28,39159,30899],{"class":45},[28,39161,39162],{"class":34},".block5(x)\n",[28,39164,39165,39167,39169,39171],{"class":30,"line":16991},[28,39166,31177],{"class":34},[28,39168,39],{"class":38},[28,39170,30899],{"class":45},[28,39172,39173],{"class":34},".block6(x)\n",[28,39175,39176,39178],{"class":30,"line":17004},[28,39177,14829],{"class":38},[28,39179,31285],{"class":34},[28,39181,39182],{"class":30,"line":17009},[28,39183,2477],{"emptyLinePlaceholder":144},[28,39185,39186],{"class":30,"line":32709},[28,39187,39188],{"class":105},"# 验证模型\n",[28,39190,39191,39193,39195,39197,39200],{"class":30,"line":32715},[28,39192,1608],{"class":38},[28,39194,31296],{"class":45},[28,39196,3026],{"class":38},[28,39198,39199],{"class":320},"'__main__'",[28,39201,3816],{"class":34},[28,39203,39204,39206,39208,39210,39212,39214,39216,39218,39220],{"class":30,"line":32721},[28,39205,31313],{"class":34},[28,39207,39],{"class":38},[28,39209,30527],{"class":34},[28,39211,31320],{"class":320},[28,39213,1781],{"class":38},[28,39215,31325],{"class":34},[28,39217,1778],{"class":38},[28,39219,30552],{"class":320},[28,39221,227],{"class":34},[28,39223,39224,39226],{"class":30,"line":32727},[28,39225,31375],{"class":45},[28,39227,30561],{"class":34},[28,39229,39230,39232,39234],{"class":30,"line":32733},[28,39231,31365],{"class":34},[28,39233,39],{"class":38},[28,39235,39236],{"class":34},"VGG16().to(device)\n",[28,39238,39239,39241,39243,39245,39247,39249,39251,39253],{"class":30,"line":32744},[28,39240,31375],{"class":45},[28,39242,31378],{"class":34},[28,39244,46],{"class":45},[28,39246,49],{"class":34},[28,39248,31577],{"class":45},[28,39250,49],{"class":34},[28,39252,31577],{"class":45},[28,39254,31391],{"class":34},[171,39256,39257],{"start":94},[174,39258,39259],{},"训练代码",[14,39261,39262],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39264,39265],{},"解决方式:",[14,39267,39268],{},"①权重初始化",[18,39270,39272],{"className":20,"code":39271,"language":22,"meta":23,"style":23},"# 权重初始化,保证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",[25,39273,39274,39279,39284,39296,39301,39309,39314,39327,39332,39346,39351,39360,39365,39374,39379,39384,39397,39402,39416],{"__ignoreMap":23},[28,39275,39276],{"class":30,"line":31},[28,39277,39278],{"class":105},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39280,39281],{"class":30,"line":94},[28,39282,39283],{"class":105},"# 循环遍历模型\n",[28,39285,39286,39288,39290,39292,39294],{"class":30,"line":109},[28,39287,3102],{"class":38},[28,39289,38944],{"class":34},[28,39291,26121],{"class":38},[28,39293,38949],{"class":45},[28,39295,38952],{"class":34},[28,39297,39298],{"class":30,"line":125},[28,39299,39300],{"class":105},"    # print(m)\n",[28,39302,39303,39305,39307],{"class":30,"line":131},[28,39304,3178],{"class":38},[28,39306,38964],{"class":45},[28,39308,38967],{"class":34},[28,39310,39311],{"class":30,"line":1291},[28,39312,39313],{"class":105},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39315,39316,39319,39321,39323,39325],{"class":30,"line":1297},[28,39317,39318],{"class":34},"        nn.init.kaiming_normal_(m.weight,",[28,39320,38980],{"class":5293},[28,39322,39],{"class":38},[28,39324,38985],{"class":320},[28,39326,227],{"class":34},[28,39328,39329],{"class":30,"line":1388},[28,39330,39331],{"class":105},"        # 判断b参数是否存在\n",[28,39333,39334,39336,39338,39340,39342,39344],{"class":30,"line":1394},[28,39335,2574],{"class":38},[28,39337,39000],{"class":34},[28,39339,39003],{"class":38},[28,39341,39006],{"class":38},[28,39343,39009],{"class":45},[28,39345,3816],{"class":34},[28,39347,39348],{"class":30,"line":1406},[28,39349,39350],{"class":105},"            # 如果参数不存在的化初始化b=0\n",[28,39352,39353,39356,39358],{"class":30,"line":1689},[28,39354,39355],{"class":34},"            nn.init.constant_(m.bias,",[28,39357,407],{"class":45},[28,39359,227],{"class":34},[28,39361,39362],{"class":30,"line":1694},[28,39363,39364],{"class":105},"    # 全连接层初始化\n",[28,39366,39367,39370,39372],{"class":30,"line":1700},[28,39368,39369],{"class":38},"    elif",[28,39371,38964],{"class":45},[28,39373,39040],{"class":34},[28,39375,39376],{"class":30,"line":1705},[28,39377,39378],{"class":105},"        # 这个初始化方法是利用的是正太分布的方式\n",[28,39380,39381],{"class":30,"line":1719},[28,39382,39383],{"class":105},"        # 均值为0，方差为0.01\n",[28,39385,39386,39389,39391,39393,39395],{"class":30,"line":1724},[28,39387,39388],{"class":34},"        nn.init.normal_(m.weight,",[28,39390,407],{"class":45},[28,39392,49],{"class":34},[28,39394,39062],{"class":45},[28,39396,227],{"class":34},[28,39398,39399],{"class":30,"line":1730},[28,39400,39401],{"class":105},"        # 初始化b参数\n",[28,39403,39404,39406,39408,39410,39412,39414],{"class":30,"line":1751},[28,39405,2574],{"class":38},[28,39407,39000],{"class":34},[28,39409,39003],{"class":38},[28,39411,39006],{"class":38},[28,39413,39009],{"class":45},[28,39415,3816],{"class":34},[28,39417,39418,39420,39422],{"class":30,"line":1756},[28,39419,39355],{"class":34},[28,39421,407],{"class":45},[28,39423,227],{"class":34},[14,39425,39426],{},"②尽可能地增加批次",[14,39428,39429],{},"训练完整代码：",[18,39431,39432],{"className":20,"code":37975,"language":22,"meta":23,"style":23},[25,39433,39434,39440,39450,39460,39470,39474,39490,39498,39516,39520,39524,39534,39570,39574,39610,39614,39642,39646,39650,39660,39696,39700,39736,39740,39768,39772,39776,39786,39822,39826,39862,39866,39902,39906,39934,39938,39942,39952,39988,39992,40028,40032,40068,40072,40100,40104,40108,40118,40154,40158,40194,40198,40234,40238,40266,40270,40274,40284,40288,40292,40296,40316,40320,40332,40336,40348,40352,40356,40360,40364,40376,40380,40388,40392,40404,40408,40422,40426,40434,40438,40446,40450,40454,40466,40470,40484,40492,40496,40500,40508,40518,40528,40538,40548,40558,40568,40574,40578,40582,40594,40614,40620,40628],{"__ignoreMap":23},[28,39435,39436,39438],{"class":30,"line":31},[28,39437,30468],{"class":38},[28,39439,30471],{"class":34},[28,39441,39442,39444,39446,39448],{"class":30,"line":94},[28,39443,30813],{"class":38},[28,39445,37990],{"class":34},[28,39447,30468],{"class":38},[28,39449,37995],{"class":34},[28,39451,39452,39454,39456,39458],{"class":30,"line":109},[28,39453,30813],{"class":38},[28,39455,30816],{"class":34},[28,39457,30468],{"class":38},[28,39459,30821],{"class":34},[28,39461,39462,39464,39466,39468],{"class":30,"line":125},[28,39463,30813],{"class":38},[28,39465,30833],{"class":34},[28,39467,30468],{"class":38},[28,39469,30838],{"class":34},[28,39471,39472],{"class":30,"line":131},[28,39473,2477],{"emptyLinePlaceholder":144},[28,39475,39476,39478,39480,39482,39484,39486,39488],{"class":30,"line":1291},[28,39477,14771],{"class":38},[28,39479,38026],{"class":2040},[28,39481,221],{"class":34},[28,39483,30854],{"class":2040},[28,39485,768],{"class":34},[28,39487,30859],{"class":2040},[28,39489,30862],{"class":34},[28,39491,39492,39494,39496],{"class":30,"line":1297},[28,39493,30877],{"class":38},[28,39495,30880],{"class":45},[28,39497,30883],{"class":34},[28,39499,39500,39502,39504,39506,39508,39510,39512,39514],{"class":30,"line":1388},[28,39501,30893],{"class":45},[28,39503,221],{"class":34},[28,39505,38053],{"class":45},[28,39507,12512],{"class":34},[28,39509,30899],{"class":45},[28,39511,30902],{"class":34},[28,39513,30905],{"class":45},[28,39515,2053],{"class":34},[28,39517,39518],{"class":30,"line":1394},[28,39519,38068],{"class":105},[28,39521,39522],{"class":30,"line":1406},[28,39523,38073],{"class":105},[28,39525,39526,39528,39530,39532],{"class":30,"line":1689},[28,39527,30921],{"class":45},[28,39529,38080],{"class":34},[28,39531,39],{"class":38},[28,39533,38085],{"class":34},[28,39535,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558,39560,39562,39564,39566,39568],{"class":30,"line":1694},[28,39537,38090],{"class":34},[28,39539,30932],{"class":5293},[28,39541,39],{"class":38},[28,39543,46],{"class":45},[28,39545,49],{"class":34},[28,39547,30941],{"class":5293},[28,39549,39],{"class":38},[28,39551,419],{"class":45},[28,39553,49],{"class":34},[28,39555,30950],{"class":5293},[28,39557,39],{"class":38},[28,39559,57],{"class":45},[28,39561,49],{"class":34},[28,39563,30959],{"class":5293},[28,39565,39],{"class":38},[28,39567,46],{"class":45},[28,39569,38123],{"class":34},[28,39571,39572],{"class":30,"line":1700},[28,39573,38128],{"class":34},[28,39575,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606,39608],{"class":30,"line":1705},[28,39577,38090],{"class":34},[28,39579,30932],{"class":5293},[28,39581,39],{"class":38},[28,39583,419],{"class":45},[28,39585,49],{"class":34},[28,39587,30941],{"class":5293},[28,39589,39],{"class":38},[28,39591,419],{"class":45},[28,39593,49],{"class":34},[28,39595,30950],{"class":5293},[28,39597,39],{"class":38},[28,39599,57],{"class":45},[28,39601,49],{"class":34},[28,39603,30959],{"class":5293},[28,39605,39],{"class":38},[28,39607,46],{"class":45},[28,39609,38123],{"class":34},[28,39611,39612],{"class":30,"line":1719},[28,39613,38128],{"class":34},[28,39615,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640],{"class":30,"line":1724},[28,39617,38173],{"class":34},[28,39619,30950],{"class":5293},[28,39621,39],{"class":38},[28,39623,52],{"class":45},[28,39625,49],{"class":34},[28,39627,31005],{"class":5293},[28,39629,39],{"class":38},[28,39631,52],{"class":45},[28,39633,49],{"class":34},[28,39635,30959],{"class":5293},[28,39637,39],{"class":38},[28,39639,407],{"class":45},[28,39641,227],{"class":34},[28,39643,39644],{"class":30,"line":1730},[28,39645,38202],{"class":34},[28,39647,39648],{"class":30,"line":1751},[28,39649,38207],{"class":105},[28,39651,39652,39654,39656,39658],{"class":30,"line":1756},[28,39653,30921],{"class":45},[28,39655,38214],{"class":34},[28,39657,39],{"class":38},[28,39659,38085],{"class":34},[28,39661,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692,39694],{"class":30,"line":1770},[28,39663,38090],{"class":34},[28,39665,30932],{"class":5293},[28,39667,39],{"class":38},[28,39669,419],{"class":45},[28,39671,49],{"class":34},[28,39673,30941],{"class":5293},[28,39675,39],{"class":38},[28,39677,32146],{"class":45},[28,39679,49],{"class":34},[28,39681,30950],{"class":5293},[28,39683,39],{"class":38},[28,39685,57],{"class":45},[28,39687,49],{"class":34},[28,39689,30959],{"class":5293},[28,39691,39],{"class":38},[28,39693,46],{"class":45},[28,39695,38123],{"class":34},[28,39697,39698],{"class":30,"line":1775},[28,39699,38128],{"class":34},[28,39701,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734],{"class":30,"line":1804},[28,39703,38090],{"class":34},[28,39705,30932],{"class":5293},[28,39707,39],{"class":38},[28,39709,32146],{"class":45},[28,39711,49],{"class":34},[28,39713,30941],{"class":5293},[28,39715,39],{"class":38},[28,39717,32146],{"class":45},[28,39719,49],{"class":34},[28,39721,30950],{"class":5293},[28,39723,39],{"class":38},[28,39725,57],{"class":45},[28,39727,49],{"class":34},[28,39729,30959],{"class":5293},[28,39731,39],{"class":38},[28,39733,46],{"class":45},[28,39735,38123],{"class":34},[28,39737,39738],{"class":30,"line":1809},[28,39739,38128],{"class":34},[28,39741,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766],{"class":30,"line":1826},[28,39743,38173],{"class":34},[28,39745,30950],{"class":5293},[28,39747,39],{"class":38},[28,39749,52],{"class":45},[28,39751,49],{"class":34},[28,39753,31005],{"class":5293},[28,39755,39],{"class":38},[28,39757,52],{"class":45},[28,39759,49],{"class":34},[28,39761,30959],{"class":5293},[28,39763,39],{"class":38},[28,39765,407],{"class":45},[28,39767,227],{"class":34},[28,39769,39770],{"class":30,"line":1831},[28,39771,38202],{"class":34},[28,39773,39774],{"class":30,"line":1836},[28,39775,38335],{"class":105},[28,39777,39778,39780,39782,39784],{"class":30,"line":1841},[28,39779,30921],{"class":45},[28,39781,38342],{"class":34},[28,39783,39],{"class":38},[28,39785,38085],{"class":34},[28,39787,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820],{"class":30,"line":1855},[28,39789,38090],{"class":34},[28,39791,30932],{"class":5293},[28,39793,39],{"class":38},[28,39795,32146],{"class":45},[28,39797,49],{"class":34},[28,39799,30941],{"class":5293},[28,39801,39],{"class":38},[28,39803,34946],{"class":45},[28,39805,49],{"class":34},[28,39807,30950],{"class":5293},[28,39809,39],{"class":38},[28,39811,57],{"class":45},[28,39813,49],{"class":34},[28,39815,30959],{"class":5293},[28,39817,39],{"class":38},[28,39819,46],{"class":45},[28,39821,38123],{"class":34},[28,39823,39824],{"class":30,"line":1860},[28,39825,38128],{"class":34},[28,39827,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860],{"class":30,"line":2654},[28,39829,38090],{"class":34},[28,39831,30932],{"class":5293},[28,39833,39],{"class":38},[28,39835,34946],{"class":45},[28,39837,49],{"class":34},[28,39839,30941],{"class":5293},[28,39841,39],{"class":38},[28,39843,34946],{"class":45},[28,39845,49],{"class":34},[28,39847,30950],{"class":5293},[28,39849,39],{"class":38},[28,39851,57],{"class":45},[28,39853,49],{"class":34},[28,39855,30959],{"class":5293},[28,39857,39],{"class":38},[28,39859,46],{"class":45},[28,39861,38123],{"class":34},[28,39863,39864],{"class":30,"line":2668},[28,39865,38128],{"class":34},[28,39867,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900],{"class":30,"line":2676},[28,39869,38090],{"class":34},[28,39871,30932],{"class":5293},[28,39873,39],{"class":38},[28,39875,34946],{"class":45},[28,39877,49],{"class":34},[28,39879,30941],{"class":5293},[28,39881,39],{"class":38},[28,39883,34946],{"class":45},[28,39885,49],{"class":34},[28,39887,30950],{"class":5293},[28,39889,39],{"class":38},[28,39891,57],{"class":45},[28,39893,49],{"class":34},[28,39895,30959],{"class":5293},[28,39897,39],{"class":38},[28,39899,46],{"class":45},[28,39901,38123],{"class":34},[28,39903,39904],{"class":30,"line":2681},[28,39905,38128],{"class":34},[28,39907,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932],{"class":30,"line":2687},[28,39909,38173],{"class":34},[28,39911,30950],{"class":5293},[28,39913,39],{"class":38},[28,39915,52],{"class":45},[28,39917,49],{"class":34},[28,39919,31005],{"class":5293},[28,39921,39],{"class":38},[28,39923,52],{"class":45},[28,39925,49],{"class":34},[28,39927,30959],{"class":5293},[28,39929,39],{"class":38},[28,39931,407],{"class":45},[28,39933,227],{"class":34},[28,39935,39936],{"class":30,"line":2693},[28,39937,38202],{"class":34},[28,39939,39940],{"class":30,"line":2698},[28,39941,38503],{"class":105},[28,39943,39944,39946,39948,39950],{"class":30,"line":8025},[28,39945,30921],{"class":45},[28,39947,38510],{"class":34},[28,39949,39],{"class":38},[28,39951,38085],{"class":34},[28,39953,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986],{"class":30,"line":8049},[28,39955,38090],{"class":34},[28,39957,30932],{"class":5293},[28,39959,39],{"class":38},[28,39961,34946],{"class":45},[28,39963,49],{"class":34},[28,39965,30941],{"class":5293},[28,39967,39],{"class":38},[28,39969,38533],{"class":45},[28,39971,49],{"class":34},[28,39973,30950],{"class":5293},[28,39975,39],{"class":38},[28,39977,57],{"class":45},[28,39979,49],{"class":34},[28,39981,30959],{"class":5293},[28,39983,39],{"class":38},[28,39985,46],{"class":45},[28,39987,38123],{"class":34},[28,39989,39990],{"class":30,"line":8054},[28,39991,38128],{"class":34},[28,39993,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026],{"class":30,"line":8060},[28,39995,38090],{"class":34},[28,39997,30932],{"class":5293},[28,39999,39],{"class":38},[28,40001,38533],{"class":45},[28,40003,49],{"class":34},[28,40005,30941],{"class":5293},[28,40007,39],{"class":38},[28,40009,38533],{"class":45},[28,40011,49],{"class":34},[28,40013,30950],{"class":5293},[28,40015,39],{"class":38},[28,40017,57],{"class":45},[28,40019,49],{"class":34},[28,40021,30959],{"class":5293},[28,40023,39],{"class":38},[28,40025,46],{"class":45},[28,40027,38123],{"class":34},[28,40029,40030],{"class":30,"line":8087},[28,40031,38128],{"class":34},[28,40033,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066],{"class":30,"line":8092},[28,40035,38090],{"class":34},[28,40037,30932],{"class":5293},[28,40039,39],{"class":38},[28,40041,38533],{"class":45},[28,40043,49],{"class":34},[28,40045,30941],{"class":5293},[28,40047,39],{"class":38},[28,40049,38533],{"class":45},[28,40051,49],{"class":34},[28,40053,30950],{"class":5293},[28,40055,39],{"class":38},[28,40057,57],{"class":45},[28,40059,49],{"class":34},[28,40061,30959],{"class":5293},[28,40063,39],{"class":38},[28,40065,46],{"class":45},[28,40067,38123],{"class":34},[28,40069,40070],{"class":30,"line":8098},[28,40071,38128],{"class":34},[28,40073,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098],{"class":30,"line":8110},[28,40075,38173],{"class":34},[28,40077,30950],{"class":5293},[28,40079,39],{"class":38},[28,40081,52],{"class":45},[28,40083,49],{"class":34},[28,40085,31005],{"class":5293},[28,40087,39],{"class":38},[28,40089,52],{"class":45},[28,40091,49],{"class":34},[28,40093,30959],{"class":5293},[28,40095,39],{"class":38},[28,40097,407],{"class":45},[28,40099,227],{"class":34},[28,40101,40102],{"class":30,"line":8122},[28,40103,38202],{"class":34},[28,40105,40106],{"class":30,"line":8134},[28,40107,38672],{"class":105},[28,40109,40110,40112,40114,40116],{"class":30,"line":9793},[28,40111,30921],{"class":45},[28,40113,38679],{"class":34},[28,40115,39],{"class":38},[28,40117,38085],{"class":34},[28,40119,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152],{"class":30,"line":9818},[28,40121,38090],{"class":34},[28,40123,30932],{"class":5293},[28,40125,39],{"class":38},[28,40127,38533],{"class":45},[28,40129,49],{"class":34},[28,40131,30941],{"class":5293},[28,40133,39],{"class":38},[28,40135,38533],{"class":45},[28,40137,49],{"class":34},[28,40139,30950],{"class":5293},[28,40141,39],{"class":38},[28,40143,57],{"class":45},[28,40145,49],{"class":34},[28,40147,30959],{"class":5293},[28,40149,39],{"class":38},[28,40151,46],{"class":45},[28,40153,38123],{"class":34},[28,40155,40156],{"class":30,"line":9841},[28,40157,38128],{"class":34},[28,40159,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192],{"class":30,"line":9865},[28,40161,38090],{"class":34},[28,40163,30932],{"class":5293},[28,40165,39],{"class":38},[28,40167,38533],{"class":45},[28,40169,49],{"class":34},[28,40171,30941],{"class":5293},[28,40173,39],{"class":38},[28,40175,38533],{"class":45},[28,40177,49],{"class":34},[28,40179,30950],{"class":5293},[28,40181,39],{"class":38},[28,40183,57],{"class":45},[28,40185,49],{"class":34},[28,40187,30959],{"class":5293},[28,40189,39],{"class":38},[28,40191,46],{"class":45},[28,40193,38123],{"class":34},[28,40195,40196],{"class":30,"line":9870},[28,40197,38128],{"class":34},[28,40199,40200,40202,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232],{"class":30,"line":9875},[28,40201,38090],{"class":34},[28,40203,30932],{"class":5293},[28,40205,39],{"class":38},[28,40207,38533],{"class":45},[28,40209,49],{"class":34},[28,40211,30941],{"class":5293},[28,40213,39],{"class":38},[28,40215,38533],{"class":45},[28,40217,49],{"class":34},[28,40219,30950],{"class":5293},[28,40221,39],{"class":38},[28,40223,57],{"class":45},[28,40225,49],{"class":34},[28,40227,30959],{"class":5293},[28,40229,39],{"class":38},[28,40231,46],{"class":45},[28,40233,38123],{"class":34},[28,40235,40236],{"class":30,"line":9880},[28,40237,38128],{"class":34},[28,40239,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264],{"class":30,"line":9889},[28,40241,38173],{"class":34},[28,40243,30950],{"class":5293},[28,40245,39],{"class":38},[28,40247,52],{"class":45},[28,40249,49],{"class":34},[28,40251,31005],{"class":5293},[28,40253,39],{"class":38},[28,40255,52],{"class":45},[28,40257,49],{"class":34},[28,40259,30959],{"class":5293},[28,40261,39],{"class":38},[28,40263,407],{"class":45},[28,40265,227],{"class":34},[28,40267,40268],{"class":30,"line":9894},[28,40269,38202],{"class":34},[28,40271,40272],{"class":30,"line":9900},[28,40273,38840],{"class":105},[28,40275,40276,40278,40280,40282],{"class":30,"line":9921},[28,40277,30921],{"class":45},[28,40279,38847],{"class":34},[28,40281,39],{"class":38},[28,40283,38085],{"class":34},[28,40285,40286],{"class":30,"line":9927},[28,40287,38856],{"class":105},[28,40289,40290],{"class":30,"line":9941},[28,40291,38861],{"class":105},[28,40293,40294],{"class":30,"line":9947},[28,40295,38866],{"class":34},[28,40297,40298,40300,40302,40304,40306,40308,40310,40312,40314],{"class":30,"line":9974},[28,40299,38871],{"class":34},[28,40301,583],{"class":45},[28,40303,668],{"class":38},[28,40305,583],{"class":45},[28,40307,668],{"class":38},[28,40309,38533],{"class":45},[28,40311,49],{"class":34},[28,40313,34946],{"class":45},[28,40315,38123],{"class":34},[28,40317,40318],{"class":30,"line":9983},[28,40319,38128],{"class":34},[28,40321,40322,40324,40326,40328,40330],{"class":30,"line":9989},[28,40323,38871],{"class":34},[28,40325,34946],{"class":45},[28,40327,49],{"class":34},[28,40329,32146],{"class":45},[28,40331,38123],{"class":34},[28,40333,40334],{"class":30,"line":9997},[28,40335,38128],{"class":34},[28,40337,40338,40340,40342,40344,40346],{"class":30,"line":10002},[28,40339,38871],{"class":34},[28,40341,32146],{"class":45},[28,40343,49],{"class":34},[28,40345,659],{"class":45},[28,40347,227],{"class":34},[28,40349,40350],{"class":30,"line":16681},[28,40351,38202],{"class":34},[28,40353,40354],{"class":30,"line":16687},[28,40355,2477],{"emptyLinePlaceholder":144},[28,40357,40358],{"class":30,"line":16710},[28,40359,38932],{"class":105},[28,40361,40362],{"class":30,"line":16716},[28,40363,38937],{"class":105},[28,40365,40366,40368,40370,40372,40374],{"class":30,"line":16739},[28,40367,3480],{"class":38},[28,40369,38944],{"class":34},[28,40371,26121],{"class":38},[28,40373,38949],{"class":45},[28,40375,38952],{"class":34},[28,40377,40378],{"class":30,"line":16753},[28,40379,38957],{"class":105},[28,40381,40382,40384,40386],{"class":30,"line":16773},[28,40383,4719],{"class":38},[28,40385,38964],{"class":45},[28,40387,38967],{"class":34},[28,40389,40390],{"class":30,"line":16779},[28,40391,38972],{"class":105},[28,40393,40394,40396,40398,40400,40402],{"class":30,"line":16790},[28,40395,38977],{"class":34},[28,40397,38980],{"class":5293},[28,40399,39],{"class":38},[28,40401,38985],{"class":320},[28,40403,227],{"class":34},[28,40405,40406],{"class":30,"line":16813},[28,40407,38992],{"class":105},[28,40409,40410,40412,40414,40416,40418,40420],{"class":30,"line":16835},[28,40411,38997],{"class":38},[28,40413,39000],{"class":34},[28,40415,39003],{"class":38},[28,40417,39006],{"class":38},[28,40419,39009],{"class":45},[28,40421,3816],{"class":34},[28,40423,40424],{"class":30,"line":16840},[28,40425,39016],{"class":105},[28,40427,40428,40430,40432],{"class":30,"line":16846},[28,40429,39021],{"class":34},[28,40431,407],{"class":45},[28,40433,227],{"class":34},[28,40435,40436],{"class":30,"line":16860},[28,40437,39030],{"class":105},[28,40439,40440,40442,40444],{"class":30,"line":16873},[28,40441,39035],{"class":38},[28,40443,38964],{"class":45},[28,40445,39040],{"class":34},[28,40447,40448],{"class":30,"line":16878},[28,40449,39045],{"class":105},[28,40451,40452],{"class":30,"line":16892},[28,40453,39050],{"class":105},[28,40455,40456,40458,40460,40462,40464],{"class":30,"line":16897},[28,40457,39055],{"class":34},[28,40459,407],{"class":45},[28,40461,49],{"class":34},[28,40463,39062],{"class":45},[28,40465,227],{"class":34},[28,40467,40468],{"class":30,"line":16903},[28,40469,39069],{"class":105},[28,40471,40472,40474,40476,40478,40480,40482],{"class":30,"line":16908},[28,40473,38997],{"class":38},[28,40475,39000],{"class":34},[28,40477,39003],{"class":38},[28,40479,39006],{"class":38},[28,40481,39009],{"class":45},[28,40483,3816],{"class":34},[28,40485,40486,40488,40490],{"class":30,"line":16922},[28,40487,39021],{"class":34},[28,40489,407],{"class":45},[28,40491,227],{"class":34},[28,40493,40494],{"class":30,"line":16927},[28,40495,2477],{"emptyLinePlaceholder":144},[28,40497,40498],{"class":30,"line":16932},[28,40499,35241],{"class":105},[28,40501,40502,40504,40506],{"class":30,"line":16946},[28,40503,30877],{"class":38},[28,40505,31169],{"class":2040},[28,40507,31172],{"class":34},[28,40509,40510,40512,40514,40516],{"class":30,"line":16958},[28,40511,31177],{"class":34},[28,40513,39],{"class":38},[28,40515,30899],{"class":45},[28,40517,39118],{"class":34},[28,40519,40520,40522,40524,40526],{"class":30,"line":16963},[28,40521,31177],{"class":34},[28,40523,39],{"class":38},[28,40525,30899],{"class":45},[28,40527,39129],{"class":34},[28,40529,40530,40532,40534,40536],{"class":30,"line":16976},[28,40531,31177],{"class":34},[28,40533,39],{"class":38},[28,40535,30899],{"class":45},[28,40537,39140],{"class":34},[28,40539,40540,40542,40544,40546],{"class":30,"line":16981},[28,40541,31177],{"class":34},[28,40543,39],{"class":38},[28,40545,30899],{"class":45},[28,40547,39151],{"class":34},[28,40549,40550,40552,40554,40556],{"class":30,"line":16986},[28,40551,31177],{"class":34},[28,40553,39],{"class":38},[28,40555,30899],{"class":45},[28,40557,39162],{"class":34},[28,40559,40560,40562,40564,40566],{"class":30,"line":16991},[28,40561,31177],{"class":34},[28,40563,39],{"class":38},[28,40565,30899],{"class":45},[28,40567,39173],{"class":34},[28,40569,40570,40572],{"class":30,"line":17004},[28,40571,14829],{"class":38},[28,40573,31285],{"class":34},[28,40575,40576],{"class":30,"line":17009},[28,40577,2477],{"emptyLinePlaceholder":144},[28,40579,40580],{"class":30,"line":32709},[28,40581,39188],{"class":105},[28,40583,40584,40586,40588,40590,40592],{"class":30,"line":32715},[28,40585,1608],{"class":38},[28,40587,31296],{"class":45},[28,40589,3026],{"class":38},[28,40591,39199],{"class":320},[28,40593,3816],{"class":34},[28,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612],{"class":30,"line":32721},[28,40597,31313],{"class":34},[28,40599,39],{"class":38},[28,40601,30527],{"class":34},[28,40603,31320],{"class":320},[28,40605,1781],{"class":38},[28,40607,31325],{"class":34},[28,40609,1778],{"class":38},[28,40611,30552],{"class":320},[28,40613,227],{"class":34},[28,40615,40616,40618],{"class":30,"line":32727},[28,40617,31375],{"class":45},[28,40619,30561],{"class":34},[28,40621,40622,40624,40626],{"class":30,"line":32733},[28,40623,31365],{"class":34},[28,40625,39],{"class":38},[28,40627,39236],{"class":34},[28,40629,40630,40632,40634,40636,40638,40640,40642,40644],{"class":30,"line":32744},[28,40631,31375],{"class":45},[28,40633,31378],{"class":34},[28,40635,46],{"class":45},[28,40637,49],{"class":34},[28,40639,31577],{"class":45},[28,40641,49],{"class":34},[28,40643,31577],{"class":45},[28,40645,31391],{"class":34},[171,40647,40648],{"start":109},[174,40649,40650],{},"测试代码",[18,40652,40654],{"className":20,"code":40653,"language":22,"meta":23,"style":23},"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",[25,40655,40656,40662,40672,40682,40686,40696,40707,40711,40715,40719,40727,40743,40753,40769,40779,40793,40797,40807,40817,40827,40833,40837,40841,40849,40853,40869,40877,40881,40885,40893,40901,40905,40909,40913,40917,40923,40927,40937,40945,40953,40957,40961,40965,40973,40977,40993,40997,41001,41005,41017,41021,41033,41037,41041,41053,41057,41067,41071,41075,41087,41091,41100,41104,41108,41116,41120,41128,41132,41136,41140,41144,41148,41164,41172,41176,41180,41228,41234,41238,41248,41256,41264,41268,41272,41276,41280,41288,41292,41308,41312,41320,41328],{"__ignoreMap":23},[28,40657,40658,40660],{"class":30,"line":31},[28,40659,30468],{"class":38},[28,40661,30471],{"class":34},[28,40663,40664,40666,40668,40670],{"class":30,"line":94},[28,40665,30468],{"class":38},[28,40667,31491],{"class":34},[28,40669,31459],{"class":38},[28,40671,31496],{"class":34},[28,40673,40674,40676,40678,40680],{"class":30,"line":109},[28,40675,30813],{"class":38},[28,40677,31474],{"class":34},[28,40679,30468],{"class":38},[28,40681,31479],{"class":34},[28,40683,40684],{"class":30,"line":125},[28,40685,33998],{"class":105},[28,40687,40688,40690,40692,40694],{"class":30,"line":131},[28,40689,30813],{"class":38},[28,40691,31444],{"class":34},[28,40693,30468],{"class":38},[28,40695,31449],{"class":34},[28,40697,40698,40700,40702,40704],{"class":30,"line":1291},[28,40699,30813],{"class":38},[28,40701,31990],{"class":34},[28,40703,30468],{"class":38},[28,40705,40706],{"class":45}," VGG16\n",[28,40708,40709],{"class":30,"line":1297},[28,40710,2477],{"emptyLinePlaceholder":144},[28,40712,40713],{"class":30,"line":1388},[28,40714,2477],{"emptyLinePlaceholder":144},[28,40716,40717],{"class":30,"line":1394},[28,40718,34027],{"class":105},[28,40720,40721,40723,40725],{"class":30,"line":1406},[28,40722,32023],{"class":38},[28,40724,34034],{"class":2040},[28,40726,32029],{"class":34},[28,40728,40729,40731,40733,40735,40737,40739,40741],{"class":30,"line":1689},[28,40730,34041],{"class":34},[28,40732,39],{"class":38},[28,40734,31531],{"class":34},[28,40736,31534],{"class":5293},[28,40738,39],{"class":38},[28,40740,31539],{"class":320},[28,40742,31542],{"class":34},[28,40744,40745,40747,40749,40751],{"class":30,"line":1694},[28,40746,34058],{"class":5293},[28,40748,39],{"class":38},[28,40750,34063],{"class":45},[28,40752,31542],{"class":34},[28,40754,40755,40757,40759,40761,40763,40765,40767],{"class":30,"line":1700},[28,40756,34070],{"class":5293},[28,40758,39],{"class":38},[28,40760,31569],{"class":34},[28,40762,31572],{"class":5293},[28,40764,39],{"class":38},[28,40766,31577],{"class":45},[28,40768,31580],{"class":34},[28,40770,40771,40773,40775,40777],{"class":30,"line":1705},[28,40772,34087],{"class":5293},[28,40774,39],{"class":38},[28,40776,31552],{"class":45},[28,40778,227],{"class":34},[28,40780,40781,40783,40785,40787,40789,40791],{"class":30,"line":1719},[28,40782,34098],{"class":34},[28,40784,39],{"class":38},[28,40786,31610],{"class":34},[28,40788,31613],{"class":5293},[28,40790,39],{"class":38},[28,40792,34109],{"class":34},[28,40794,40795],{"class":30,"line":1724},[28,40796,34114],{"class":105},[28,40798,40799,40801,40803,40805],{"class":30,"line":1730},[28,40800,34119],{"class":5293},[28,40802,39],{"class":38},[28,40804,46],{"class":45},[28,40806,31542],{"class":34},[28,40808,40809,40811,40813,40815],{"class":30,"line":1751},[28,40810,34130],{"class":5293},[28,40812,39],{"class":38},[28,40814,31552],{"class":45},[28,40816,31542],{"class":34},[28,40818,40819,40821,40823,40825],{"class":30,"line":1756},[28,40820,34141],{"class":5293},[28,40822,39],{"class":38},[28,40824,407],{"class":45},[28,40826,227],{"class":34},[28,40828,40829,40831],{"class":30,"line":1770},[28,40830,4167],{"class":38},[28,40832,34154],{"class":34},[28,40834,40835],{"class":30,"line":1775},[28,40836,2477],{"emptyLinePlaceholder":144},[28,40838,40839],{"class":30,"line":1804},[28,40840,34163],{"class":105},[28,40842,40843,40845,40847],{"class":30,"line":1809},[28,40844,32023],{"class":38},[28,40846,34170],{"class":2040},[28,40848,34173],{"class":34},[28,40850,40851],{"class":30,"line":1826},[28,40852,34178],{"class":105},[28,40854,40855,40857,40859,40861,40863,40865,40867],{"class":30,"line":1831},[28,40856,31313],{"class":34},[28,40858,39],{"class":38},[28,40860,31320],{"class":320},[28,40862,1781],{"class":38},[28,40864,31325],{"class":34},[28,40866,1778],{"class":38},[28,40868,34195],{"class":320},[28,40870,40871,40873,40875],{"class":30,"line":1836},[28,40872,31365],{"class":34},[28,40874,39],{"class":38},[28,40876,32365],{"class":34},[28,40878,40879],{"class":30,"line":1841},[28,40880,2477],{"emptyLinePlaceholder":144},[28,40882,40883],{"class":30,"line":1855},[28,40884,34212],{"class":105},[28,40886,40887,40889,40891],{"class":30,"line":1860},[28,40888,34217],{"class":34},[28,40890,39],{"class":38},[28,40892,32418],{"class":45},[28,40894,40895,40897,40899],{"class":30,"line":2654},[28,40896,34226],{"class":34},[28,40898,39],{"class":38},[28,40900,3162],{"class":45},[28,40902,40903],{"class":30,"line":2668},[28,40904,2477],{"emptyLinePlaceholder":144},[28,40906,40907],{"class":30,"line":2676},[28,40908,34239],{"class":105},[28,40910,40911],{"class":30,"line":2681},[28,40912,34244],{"class":105},[28,40914,40915],{"class":30,"line":2687},[28,40916,34249],{"class":105},[28,40918,40919,40921],{"class":30,"line":2693},[28,40920,34254],{"class":38},[28,40922,32960],{"class":34},[28,40924,40925],{"class":30,"line":2698},[28,40926,34261],{"class":105},[28,40928,40929,40931,40933,40935],{"class":30,"line":8025},[28,40930,3480],{"class":38},[28,40932,34268],{"class":34},[28,40934,26121],{"class":38},[28,40936,34273],{"class":34},[28,40938,40939,40941,40943],{"class":30,"line":8049},[28,40940,34278],{"class":34},[28,40942,39],{"class":38},[28,40944,34283],{"class":34},[28,40946,40947,40949,40951],{"class":30,"line":8054},[28,40948,34288],{"class":34},[28,40950,39],{"class":38},[28,40952,34293],{"class":34},[28,40954,40955],{"class":30,"line":8060},[28,40956,34298],{"class":105},[28,40958,40959],{"class":30,"line":8087},[28,40960,32951],{"class":34},[28,40962,40963],{"class":30,"line":8092},[28,40964,34307],{"class":105},[28,40966,40967,40969,40971],{"class":30,"line":8098},[28,40968,32736],{"class":34},[28,40970,39],{"class":38},[28,40972,34316],{"class":34},[28,40974,40975],{"class":30,"line":8110},[28,40976,34321],{"class":105},[28,40978,40979,40981,40983,40985,40987,40989,40991],{"class":30,"line":8122},[28,40980,32753],{"class":34},[28,40982,39],{"class":38},[28,40984,32758],{"class":34},[28,40986,32761],{"class":5293},[28,40988,39],{"class":38},[28,40990,46],{"class":45},[28,40992,227],{"class":34},[28,40994,40995],{"class":30,"line":8134},[28,40996,34342],{"class":105},[28,40998,40999],{"class":30,"line":9793},[28,41000,34347],{"class":105},[28,41002,41003],{"class":30,"line":9818},[28,41004,34352],{"class":105},[28,41006,41007,41009,41011,41013,41015],{"class":30,"line":9841},[28,41008,34357],{"class":34},[28,41010,9554],{"class":38},[28,41012,32863],{"class":34},[28,41014,3026],{"class":38},[28,41016,34366],{"class":34},[28,41018,41019],{"class":30,"line":9865},[28,41020,34371],{"class":105},[28,41022,41023,41025,41027,41029,41031],{"class":30,"line":9870},[28,41024,34376],{"class":34},[28,41026,9554],{"class":38},[28,41028,34381],{"class":34},[28,41030,407],{"class":45},[28,41032,227],{"class":34},[28,41034,41035],{"class":30,"line":9875},[28,41036,2477],{"emptyLinePlaceholder":144},[28,41038,41039],{"class":30,"line":9880},[28,41040,34394],{"class":105},[28,41042,41043,41045,41047,41049,41051],{"class":30,"line":9889},[28,41044,34399],{"class":34},[28,41046,39],{"class":38},[28,41048,34404],{"class":34},[28,41050,794],{"class":38},[28,41052,34409],{"class":34},[28,41054,41055],{"class":30,"line":9894},[28,41056,34414],{"class":105},[28,41058,41059,41061,41063,41065],{"class":30,"line":9900},[28,41060,32527],{"class":45},[28,41062,221],{"class":34},[28,41064,34423],{"class":320},[28,41066,34426],{"class":34},[28,41068,41069],{"class":30,"line":9921},[28,41070,2477],{"emptyLinePlaceholder":144},[28,41072,41073],{"class":30,"line":9927},[28,41074,34435],{"class":105},[28,41076,41077,41079,41081,41083,41085],{"class":30,"line":9941},[28,41078,1608],{"class":38},[28,41080,31296],{"class":45},[28,41082,3026],{"class":38},[28,41084,31301],{"class":320},[28,41086,3816],{"class":34},[28,41088,41089],{"class":30,"line":9947},[28,41090,34452],{"class":105},[28,41092,41093,41095,41097],{"class":30,"line":9974},[28,41094,31365],{"class":34},[28,41096,39],{"class":38},[28,41098,41099],{"class":34},"VGG16()\n",[28,41101,41102],{"class":30,"line":9983},[28,41103,34465],{"class":105},[28,41105,41106],{"class":30,"line":9989},[28,41107,34470],{"class":105},[28,41109,41110,41112,41114],{"class":30,"line":9997},[28,41111,34475],{"class":34},[28,41113,34478],{"class":320},[28,41115,30573],{"class":34},[28,41117,41118],{"class":30,"line":10002},[28,41119,34485],{"class":105},[28,41121,41122,41124,41126],{"class":30,"line":16681},[28,41123,34098],{"class":34},[28,41125,39],{"class":38},[28,41127,34494],{"class":34},[28,41129,41130],{"class":30,"line":16687},[28,41131,34499],{"class":105},[28,41133,41134],{"class":30,"line":16710},[28,41135,34504],{"class":34},[28,41137,41138],{"class":30,"line":16716},[28,41139,2477],{"emptyLinePlaceholder":144},[28,41141,41142],{"class":30,"line":16739},[28,41143,34513],{"class":105},[28,41145,41146],{"class":30,"line":16753},[28,41147,34518],{"class":105},[28,41149,41150,41152,41154,41156,41158,41160,41162],{"class":30,"line":16773},[28,41151,31313],{"class":34},[28,41153,39],{"class":38},[28,41155,31320],{"class":320},[28,41157,1781],{"class":38},[28,41159,31325],{"class":34},[28,41161,1778],{"class":38},[28,41163,34195],{"class":320},[28,41165,41166,41168,41170],{"class":30,"line":16779},[28,41167,31365],{"class":34},[28,41169,39],{"class":38},[28,41171,32365],{"class":34},[28,41173,41174],{"class":30,"line":16790},[28,41175,34547],{"class":105},[28,41177,41178],{"class":30,"line":16813},[28,41179,34552],{"class":105},[28,41181,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226],{"class":30,"line":16835},[28,41183,34557],{"class":34},[28,41185,39],{"class":38},[28,41187,1096],{"class":34},[28,41189,34564],{"class":320},[28,41191,49],{"class":34},[28,41193,34569],{"class":320},[28,41195,49],{"class":34},[28,41197,34574],{"class":320},[28,41199,49],{"class":34},[28,41201,34579],{"class":320},[28,41203,49],{"class":34},[28,41205,34584],{"class":320},[28,41207,49],{"class":34},[28,41209,34589],{"class":320},[28,41211,49],{"class":34},[28,41213,34594],{"class":320},[28,41215,49],{"class":34},[28,41217,34599],{"class":320},[28,41219,49],{"class":34},[28,41221,34604],{"class":320},[28,41223,49],{"class":34},[28,41225,34609],{"class":320},[28,41227,33322],{"class":34},[28,41229,41230,41232],{"class":30,"line":16840},[28,41231,34254],{"class":38},[28,41233,32960],{"class":34},[28,41235,41236],{"class":30,"line":16846},[28,41237,34622],{"class":105},[28,41239,41240,41242,41244,41246],{"class":30,"line":16860},[28,41241,3480],{"class":38},[28,41243,34629],{"class":34},[28,41245,26121],{"class":38},[28,41247,34273],{"class":34},[28,41249,41250,41252,41254],{"class":30,"line":16873},[28,41251,32686],{"class":34},[28,41253,39],{"class":38},[28,41255,32691],{"class":34},[28,41257,41258,41260,41262],{"class":30,"line":16878},[28,41259,32701],{"class":34},[28,41261,39],{"class":38},[28,41263,32706],{"class":34},[28,41265,41266],{"class":30,"line":16892},[28,41267,2477],{"emptyLinePlaceholder":144},[28,41269,41270],{"class":30,"line":16897},[28,41271,34658],{"class":105},[28,41273,41274],{"class":30,"line":16903},[28,41275,32951],{"class":34},[28,41277,41278],{"class":30,"line":16908},[28,41279,34667],{"class":105},[28,41281,41282,41284,41286],{"class":30,"line":16922},[28,41283,32736],{"class":34},[28,41285,39],{"class":38},[28,41287,32741],{"class":34},[28,41289,41290],{"class":30,"line":16927},[28,41291,34680],{"class":105},[28,41293,41294,41296,41298,41300,41302,41304,41306],{"class":30,"line":16932},[28,41295,32753],{"class":34},[28,41297,39],{"class":38},[28,41299,32758],{"class":34},[28,41301,32761],{"class":5293},[28,41303,39],{"class":38},[28,41305,46],{"class":45},[28,41307,227],{"class":34},[28,41309,41310],{"class":30,"line":16946},[28,41311,34701],{"class":105},[28,41313,41314,41316,41318],{"class":30,"line":16958},[28,41315,34706],{"class":34},[28,41317,39],{"class":38},[28,41319,34711],{"class":34},[28,41321,41322,41324,41326],{"class":30,"line":16963},[28,41323,34716],{"class":34},[28,41325,39],{"class":38},[28,41327,34721],{"class":34},[28,41329,41330,41332,41334,41336,41338,41340,41342,41344],{"class":30,"line":16976},[28,41331,34726],{"class":45},[28,41333,221],{"class":34},[28,41335,34731],{"class":320},[28,41337,34734],{"class":34},[28,41339,34737],{"class":320},[28,41341,49],{"class":34},[28,41343,34742],{"class":320},[28,41345,34745],{"class":34},[188,41347,41349],{"id":41348},"_23googlenet","2.3.GoogLeNet",[22075,41351,41353],{"id":41352},"_231原理","2.3.1.原理",[171,41355,41356],{},[174,41357,41358],{},"网络结构",[14,41360,41361],{},[1539,41362],{"alt":23,"src":41363},"\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,41365,41366],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41368,41369],{},[1539,41370],{"alt":23,"src":41371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41373,41374],{},[1539,41375],{"alt":23,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41378,41379],{},[1539,41380],{"alt":23,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[171,41383,41384],{"start":94},[174,41385,41386],{},"1x1卷积的优点",[14,41388,41389],{},[1539,41390],{"alt":23,"src":41391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[171,41393,41394],{"start":109},[174,41395,41396],{},"全局平均池化层优点",[14,41398,41399],{},[1539,41400],{"alt":23,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41403,41404],{},[1539,41405],{"alt":23,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[171,41408,41409],{"start":125},[174,41410,41411],{},"参数详细描述",[14,41413,41414],{},[1539,41415],{"alt":23,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41418,41419],{},[1539,41420],{"alt":23,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41423,41424],{},[1539,41425],{"alt":23,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41428,41429],{},[1539,41430],{"alt":23,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41433,41434],{},[1539,41435],{"alt":23,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41438,41439],{},[1539,41440],{"alt":23,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41443,41444],{},[1539,41445],{"alt":23,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41448,41449],{},[1539,41450],{"alt":23,"src":41451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41453,41454],{},[1539,41455],{"alt":23,"src":41456},"\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,41458,41459],{},[1539,41460],{"alt":23,"src":41461},"\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,41463,41464],{},[1539,41465],{"alt":23,"src":41466},"\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,41468,41469],{},[1539,41470],{"alt":23,"src":41471},"\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,41473,41474],{},[1539,41475],{"alt":23,"src":41476},"\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,41478,41479],{},[1539,41480],{"alt":23,"src":41481},"\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,41483,41484],{},[1539,41485],{"alt":23,"src":41486},"\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,41488,41489],{},[1539,41490],{"alt":23,"src":41491},"\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,41493,41494],{},[1539,41495],{"alt":23,"src":41496},"\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,41498,41499],{},[1539,41500],{"alt":23,"src":41501},"\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,41503,41504],{},[1539,41505],{"alt":23,"src":41506},"\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,41508,41509],{},[1539,41510],{"alt":23,"src":41511},"\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,41513,41514],{},[1539,41515],{"alt":23,"src":41516},"\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",[22075,41518,41520],{"id":41519},"_232代码实现","2.3.2.代码实现",[171,41522,41523],{},[174,41524,30787],{},[14,41526,41527],{},"根据原理一步一步搭建即可",[18,41529,41531],{"className":20,"code":41530,"language":22,"meta":23,"style":23},"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",[25,41532,41533,41539,41549,41559,41563,41580,41589,41604,41614,41619,41652,41657,41694,41741,41746,41782,41829,41834,41839,41874,41906,41910,41918,41934,41958,41983,42004,42009,42024,42028,42032,42037,42054,42059,42068,42083,42094,42138,42142,42170,42174,42185,42213,42217,42254,42258,42286,42290,42301,42337,42369,42397,42401,42412,42446,42478,42510,42543,42577,42605,42609,42620,42653,42685,42699,42703,42716,42720,42725,42737,42745,42767,42772,42777,42782,42787,42792,42797,42811,42819,42828,42841,42856,42865,42869,42877,42888,42899,42910,42921,42932,42938,42942,42947,42959,42979,42988],{"__ignoreMap":23},[28,41534,41535,41537],{"class":30,"line":31},[28,41536,30468],{"class":38},[28,41538,30471],{"class":34},[28,41540,41541,41543,41545,41547],{"class":30,"line":94},[28,41542,30813],{"class":38},[28,41544,30816],{"class":34},[28,41546,30468],{"class":38},[28,41548,30821],{"class":34},[28,41550,41551,41553,41555,41557],{"class":30,"line":109},[28,41552,30813],{"class":38},[28,41554,30833],{"class":34},[28,41556,30468],{"class":38},[28,41558,30838],{"class":34},[28,41560,41561],{"class":30,"line":125},[28,41562,2477],{"emptyLinePlaceholder":144},[28,41564,41565,41567,41570,41572,41574,41576,41578],{"class":30,"line":131},[28,41566,14771],{"class":38},[28,41568,41569],{"class":2040}," Inception",[28,41571,221],{"class":34},[28,41573,30854],{"class":2040},[28,41575,768],{"class":34},[28,41577,30859],{"class":2040},[28,41579,30862],{"class":34},[28,41581,41582,41584,41586],{"class":30,"line":1291},[28,41583,30877],{"class":38},[28,41585,30880],{"class":45},[28,41587,41588],{"class":34},"(self,in_channels,c1,c2,c3,c4):\n",[28,41590,41591,41593,41596,41598,41600,41602],{"class":30,"line":1297},[28,41592,30893],{"class":45},[28,41594,41595],{"class":34},"(Inception,",[28,41597,30899],{"class":45},[28,41599,30902],{"class":34},[28,41601,30905],{"class":45},[28,41603,2053],{"class":34},[28,41605,41606,41608,41610,41612],{"class":30,"line":1388},[28,41607,30921],{"class":45},[28,41609,34847],{"class":34},[28,41611,39],{"class":38},[28,41613,34852],{"class":34},[28,41615,41616],{"class":30,"line":1394},[28,41617,41618],{"class":105},"        # 路线1：定义1*1卷积\n",[28,41620,41621,41623,41626,41628,41630,41632,41634,41637,41639,41641,41644,41646,41648,41650],{"class":30,"line":1406},[28,41622,30921],{"class":45},[28,41624,41625],{"class":34},".p1_1",[28,41627,39],{"class":38},[28,41629,30929],{"class":34},[28,41631,30932],{"class":5293},[28,41633,39],{"class":38},[28,41635,41636],{"class":34},"in_channels,",[28,41638,30941],{"class":5293},[28,41640,39],{"class":38},[28,41642,41643],{"class":34},"c1,",[28,41645,30950],{"class":5293},[28,41647,39],{"class":38},[28,41649,46],{"class":45},[28,41651,227],{"class":34},[28,41653,41654],{"class":30,"line":1689},[28,41655,41656],{"class":105},"        # 路线2：定义1*1卷积和3*3\n",[28,41658,41659,41661,41664,41666,41668,41670,41672,41674,41676,41678,41681,41683,41686,41688,41690,41692],{"class":30,"line":1694},[28,41660,30921],{"class":45},[28,41662,41663],{"class":34},".p2_1",[28,41665,39],{"class":38},[28,41667,30929],{"class":34},[28,41669,30932],{"class":5293},[28,41671,39],{"class":38},[28,41673,41636],{"class":34},[28,41675,30941],{"class":5293},[28,41677,39],{"class":38},[28,41679,41680],{"class":34},"c2[",[28,41682,407],{"class":45},[28,41684,41685],{"class":34},"],",[28,41687,30950],{"class":5293},[28,41689,39],{"class":38},[28,41691,46],{"class":45},[28,41693,227],{"class":34},[28,41695,41696,41698,41701,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739],{"class":30,"line":1700},[28,41697,30921],{"class":45},[28,41699,41700],{"class":34},".p2_2",[28,41702,39],{"class":38},[28,41704,30929],{"class":34},[28,41706,30932],{"class":5293},[28,41708,39],{"class":38},[28,41710,41680],{"class":34},[28,41712,407],{"class":45},[28,41714,41685],{"class":34},[28,41716,30941],{"class":5293},[28,41718,39],{"class":38},[28,41720,41680],{"class":34},[28,41722,46],{"class":45},[28,41724,41685],{"class":34},[28,41726,30950],{"class":5293},[28,41728,39],{"class":38},[28,41730,57],{"class":45},[28,41732,49],{"class":34},[28,41734,30959],{"class":5293},[28,41736,39],{"class":38},[28,41738,46],{"class":45},[28,41740,227],{"class":34},[28,41742,41743],{"class":30,"line":1705},[28,41744,41745],{"class":105},"        # 路线3：定义1*1卷积和5*5\n",[28,41747,41748,41750,41753,41755,41757,41759,41761,41763,41765,41767,41770,41772,41774,41776,41778,41780],{"class":30,"line":1719},[28,41749,30921],{"class":45},[28,41751,41752],{"class":34},".p3_1",[28,41754,39],{"class":38},[28,41756,30929],{"class":34},[28,41758,30932],{"class":5293},[28,41760,39],{"class":38},[28,41762,41636],{"class":34},[28,41764,30941],{"class":5293},[28,41766,39],{"class":38},[28,41768,41769],{"class":34},"c3[",[28,41771,407],{"class":45},[28,41773,41685],{"class":34},[28,41775,30950],{"class":5293},[28,41777,39],{"class":38},[28,41779,46],{"class":45},[28,41781,227],{"class":34},[28,41783,41784,41786,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819,41821,41823,41825,41827],{"class":30,"line":1724},[28,41785,30921],{"class":45},[28,41787,41788],{"class":34},".p3_2",[28,41790,39],{"class":38},[28,41792,30929],{"class":34},[28,41794,30932],{"class":5293},[28,41796,39],{"class":38},[28,41798,41769],{"class":34},[28,41800,407],{"class":45},[28,41802,41685],{"class":34},[28,41804,30941],{"class":5293},[28,41806,39],{"class":38},[28,41808,41769],{"class":34},[28,41810,46],{"class":45},[28,41812,41685],{"class":34},[28,41814,30950],{"class":5293},[28,41816,39],{"class":38},[28,41818,533],{"class":45},[28,41820,49],{"class":34},[28,41822,30959],{"class":5293},[28,41824,39],{"class":38},[28,41826,52],{"class":45},[28,41828,227],{"class":34},[28,41830,41831],{"class":30,"line":1730},[28,41832,41833],{"class":105},"        # 路线4：定义3*3最大池化和1*1卷积\n",[28,41835,41836],{"class":30,"line":1751},[28,41837,41838],{"class":105},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[28,41840,41841,41843,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872],{"class":30,"line":1756},[28,41842,30921],{"class":45},[28,41844,41845],{"class":34},".p4_1",[28,41847,39],{"class":38},[28,41849,34905],{"class":34},[28,41851,30950],{"class":5293},[28,41853,39],{"class":38},[28,41855,57],{"class":45},[28,41857,49],{"class":34},[28,41859,31005],{"class":5293},[28,41861,39],{"class":38},[28,41863,46],{"class":45},[28,41865,49],{"class":34},[28,41867,30959],{"class":5293},[28,41869,39],{"class":38},[28,41871,46],{"class":45},[28,41873,227],{"class":34},[28,41875,41876,41878,41881,41883,41885,41887,41889,41891,41893,41895,41898,41900,41902,41904],{"class":30,"line":1770},[28,41877,30921],{"class":45},[28,41879,41880],{"class":34},".p4_2",[28,41882,39],{"class":38},[28,41884,30929],{"class":34},[28,41886,30932],{"class":5293},[28,41888,39],{"class":38},[28,41890,41636],{"class":34},[28,41892,30941],{"class":5293},[28,41894,39],{"class":38},[28,41896,41897],{"class":34},"c4,",[28,41899,30950],{"class":5293},[28,41901,39],{"class":38},[28,41903,46],{"class":45},[28,41905,227],{"class":34},[28,41907,41908],{"class":30,"line":1775},[28,41909,2477],{"emptyLinePlaceholder":144},[28,41911,41912,41914,41916],{"class":30,"line":1804},[28,41913,30877],{"class":38},[28,41915,31169],{"class":2040},[28,41917,31172],{"class":34},[28,41919,41920,41923,41925,41927,41929,41931],{"class":30,"line":1809},[28,41921,41922],{"class":34},"        p1",[28,41924,39],{"class":38},[28,41926,30899],{"class":45},[28,41928,35260],{"class":34},[28,41930,30899],{"class":45},[28,41932,41933],{"class":34},".p1_1(x))\n",[28,41935,41936,41938,41940,41942,41944,41946,41949,41951,41953,41955],{"class":30,"line":1826},[28,41937,7162],{"class":34},[28,41939,39],{"class":38},[28,41941,30899],{"class":45},[28,41943,35260],{"class":34},[28,41945,30899],{"class":45},[28,41947,41948],{"class":34},".p2_2(",[28,41950,30899],{"class":45},[28,41952,35260],{"class":34},[28,41954,30899],{"class":45},[28,41956,41957],{"class":34},".p2_1(x))))\n",[28,41959,41960,41963,41965,41967,41969,41971,41974,41976,41978,41980],{"class":30,"line":1831},[28,41961,41962],{"class":34},"        p3",[28,41964,39],{"class":38},[28,41966,30899],{"class":45},[28,41968,35260],{"class":34},[28,41970,30899],{"class":45},[28,41972,41973],{"class":34},".p3_2(",[28,41975,30899],{"class":45},[28,41977,35260],{"class":34},[28,41979,30899],{"class":45},[28,41981,41982],{"class":34},".p3_1(x))))\n",[28,41984,41985,41988,41990,41992,41994,41996,41999,42001],{"class":30,"line":1836},[28,41986,41987],{"class":34},"        p4",[28,41989,39],{"class":38},[28,41991,30899],{"class":45},[28,41993,35260],{"class":34},[28,41995,30899],{"class":45},[28,41997,41998],{"class":34},".p4_2(",[28,42000,30899],{"class":45},[28,42002,42003],{"class":34},".p4_1(x)))\n",[28,42005,42006],{"class":30,"line":1841},[28,42007,42008],{"class":105},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[28,42010,42011,42013,42016,42018,42020,42022],{"class":30,"line":1855},[28,42012,14829],{"class":38},[28,42014,42015],{"class":34}," torch.cat((p1,p2,p3,p4),",[28,42017,32761],{"class":5293},[28,42019,39],{"class":38},[28,42021,46],{"class":45},[28,42023,227],{"class":34},[28,42025,42026],{"class":30,"line":1860},[28,42027,2477],{"emptyLinePlaceholder":144},[28,42029,42030],{"class":30,"line":2654},[28,42031,2477],{"emptyLinePlaceholder":144},[28,42033,42034],{"class":30,"line":2668},[28,42035,42036],{"class":105},"# 搭建GoogLeNet网络\n",[28,42038,42039,42041,42044,42046,42048,42050,42052],{"class":30,"line":2676},[28,42040,14771],{"class":38},[28,42042,42043],{"class":2040}," GoogLeNet",[28,42045,221],{"class":34},[28,42047,30854],{"class":2040},[28,42049,768],{"class":34},[28,42051,30859],{"class":2040},[28,42053,30862],{"class":34},[28,42055,42056],{"class":30,"line":2681},[28,42057,42058],{"class":105},"    # 必须把Inception导入到里边\n",[28,42060,42061,42063,42065],{"class":30,"line":2687},[28,42062,30877],{"class":38},[28,42064,30880],{"class":45},[28,42066,42067],{"class":34},"(self,Inception):\n",[28,42069,42070,42072,42075,42077,42079,42081],{"class":30,"line":2693},[28,42071,30893],{"class":45},[28,42073,42074],{"class":34},"(GoogLeNet,",[28,42076,30899],{"class":45},[28,42078,30902],{"class":34},[28,42080,30905],{"class":45},[28,42082,2053],{"class":34},[28,42084,42085,42087,42090,42092],{"class":30,"line":2698},[28,42086,30921],{"class":45},[28,42088,42089],{"class":34},".b1",[28,42091,39],{"class":38},[28,42093,38085],{"class":34},[28,42095,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136],{"class":30,"line":8025},[28,42097,38090],{"class":34},[28,42099,30932],{"class":5293},[28,42101,39],{"class":38},[28,42103,46],{"class":45},[28,42105,49],{"class":34},[28,42107,30941],{"class":5293},[28,42109,39],{"class":38},[28,42111,419],{"class":45},[28,42113,49],{"class":34},[28,42115,30950],{"class":5293},[28,42117,39],{"class":38},[28,42119,583],{"class":45},[28,42121,49],{"class":34},[28,42123,31005],{"class":5293},[28,42125,39],{"class":38},[28,42127,52],{"class":45},[28,42129,49],{"class":34},[28,42131,30959],{"class":5293},[28,42133,39],{"class":38},[28,42135,57],{"class":45},[28,42137,38123],{"class":34},[28,42139,42140],{"class":30,"line":8049},[28,42141,38128],{"class":34},[28,42143,42144,42146,42148,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168],{"class":30,"line":8054},[28,42145,38173],{"class":34},[28,42147,30950],{"class":5293},[28,42149,39],{"class":38},[28,42151,57],{"class":45},[28,42153,49],{"class":34},[28,42155,31005],{"class":5293},[28,42157,39],{"class":38},[28,42159,52],{"class":45},[28,42161,49],{"class":34},[28,42163,30959],{"class":5293},[28,42165,39],{"class":38},[28,42167,46],{"class":45},[28,42169,227],{"class":34},[28,42171,42172],{"class":30,"line":8060},[28,42173,38202],{"class":34},[28,42175,42176,42178,42181,42183],{"class":30,"line":8087},[28,42177,30921],{"class":45},[28,42179,42180],{"class":34},".b2",[28,42182,39],{"class":38},[28,42184,38085],{"class":34},[28,42186,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209,42211],{"class":30,"line":8092},[28,42188,38090],{"class":34},[28,42190,30932],{"class":5293},[28,42192,39],{"class":38},[28,42194,419],{"class":45},[28,42196,49],{"class":34},[28,42198,30941],{"class":5293},[28,42200,39],{"class":38},[28,42202,419],{"class":45},[28,42204,49],{"class":34},[28,42206,30950],{"class":5293},[28,42208,39],{"class":38},[28,42210,46],{"class":45},[28,42212,38123],{"class":34},[28,42214,42215],{"class":30,"line":8098},[28,42216,38128],{"class":34},[28,42218,42219,42221,42223,42225,42227,42229,42231,42233,42236,42238,42240,42242,42244,42246,42248,42250,42252],{"class":30,"line":8110},[28,42220,38090],{"class":34},[28,42222,30932],{"class":5293},[28,42224,39],{"class":38},[28,42226,419],{"class":45},[28,42228,49],{"class":34},[28,42230,30941],{"class":5293},[28,42232,39],{"class":38},[28,42234,42235],{"class":45},"192",[28,42237,49],{"class":34},[28,42239,30950],{"class":5293},[28,42241,39],{"class":38},[28,42243,57],{"class":45},[28,42245,49],{"class":34},[28,42247,30959],{"class":5293},[28,42249,39],{"class":38},[28,42251,46],{"class":45},[28,42253,38123],{"class":34},[28,42255,42256],{"class":30,"line":8122},[28,42257,38128],{"class":34},[28,42259,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284],{"class":30,"line":8134},[28,42261,38173],{"class":34},[28,42263,30950],{"class":5293},[28,42265,39],{"class":38},[28,42267,57],{"class":45},[28,42269,49],{"class":34},[28,42271,31005],{"class":5293},[28,42273,39],{"class":38},[28,42275,52],{"class":45},[28,42277,49],{"class":34},[28,42279,30959],{"class":5293},[28,42281,39],{"class":38},[28,42283,46],{"class":45},[28,42285,227],{"class":34},[28,42287,42288],{"class":30,"line":9793},[28,42289,38202],{"class":34},[28,42291,42292,42294,42297,42299],{"class":30,"line":9818},[28,42293,30921],{"class":45},[28,42295,42296],{"class":34},".b3",[28,42298,39],{"class":38},[28,42300,38085],{"class":34},[28,42302,42303,42306,42308,42310,42312,42315,42317,42319,42321,42324,42326,42328,42330,42333,42335],{"class":30,"line":9841},[28,42304,42305],{"class":34},"            Inception(",[28,42307,42235],{"class":45},[28,42309,49],{"class":34},[28,42311,419],{"class":45},[28,42313,42314],{"class":34},",(",[28,42316,425],{"class":45},[28,42318,49],{"class":34},[28,42320,32146],{"class":45},[28,42322,42323],{"class":34},"),(",[28,42325,811],{"class":45},[28,42327,49],{"class":34},[28,42329,413],{"class":45},[28,42331,42332],{"class":34},"),",[28,42334,413],{"class":45},[28,42336,38123],{"class":34},[28,42338,42339,42341,42343,42345,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367],{"class":30,"line":9865},[28,42340,42305],{"class":34},[28,42342,34946],{"class":45},[28,42344,49],{"class":34},[28,42346,32146],{"class":45},[28,42348,42314],{"class":34},[28,42350,32146],{"class":45},[28,42352,49],{"class":34},[28,42354,42235],{"class":45},[28,42356,42323],{"class":34},[28,42358,413],{"class":45},[28,42360,49],{"class":34},[28,42362,425],{"class":45},[28,42364,42332],{"class":34},[28,42366,419],{"class":45},[28,42368,38123],{"class":34},[28,42370,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395],{"class":30,"line":9870},[28,42372,38173],{"class":34},[28,42374,30950],{"class":5293},[28,42376,39],{"class":38},[28,42378,57],{"class":45},[28,42380,49],{"class":34},[28,42382,31005],{"class":5293},[28,42384,39],{"class":38},[28,42386,52],{"class":45},[28,42388,49],{"class":34},[28,42390,30959],{"class":5293},[28,42392,39],{"class":38},[28,42394,46],{"class":45},[28,42396,227],{"class":34},[28,42398,42399],{"class":30,"line":9875},[28,42400,38202],{"class":34},[28,42402,42403,42405,42408,42410],{"class":30,"line":9880},[28,42404,30921],{"class":45},[28,42406,42407],{"class":34},".b4",[28,42409,39],{"class":38},[28,42411,38085],{"class":34},[28,42413,42414,42416,42419,42421,42423,42425,42427,42429,42432,42434,42436,42438,42440,42442,42444],{"class":30,"line":9889},[28,42415,42305],{"class":34},[28,42417,42418],{"class":45},"480",[28,42420,49],{"class":34},[28,42422,42235],{"class":45},[28,42424,42314],{"class":34},[28,42426,425],{"class":45},[28,42428,49],{"class":34},[28,42430,42431],{"class":45},"208",[28,42433,42323],{"class":34},[28,42435,811],{"class":45},[28,42437,49],{"class":34},[28,42439,817],{"class":45},[28,42441,42332],{"class":34},[28,42443,419],{"class":45},[28,42445,38123],{"class":34},[28,42447,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476],{"class":30,"line":9894},[28,42449,42305],{"class":34},[28,42451,38533],{"class":45},[28,42453,49],{"class":34},[28,42455,21125],{"class":45},[28,42457,42314],{"class":34},[28,42459,828],{"class":45},[28,42461,49],{"class":34},[28,42463,31577],{"class":45},[28,42465,42323],{"class":34},[28,42467,1006],{"class":45},[28,42469,49],{"class":34},[28,42471,419],{"class":45},[28,42473,42332],{"class":34},[28,42475,419],{"class":45},[28,42477,38123],{"class":34},[28,42479,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508],{"class":30,"line":9900},[28,42481,42305],{"class":34},[28,42483,38533],{"class":45},[28,42485,49],{"class":34},[28,42487,32146],{"class":45},[28,42489,42314],{"class":34},[28,42491,32146],{"class":45},[28,42493,49],{"class":34},[28,42495,34946],{"class":45},[28,42497,42323],{"class":34},[28,42499,1006],{"class":45},[28,42501,49],{"class":34},[28,42503,419],{"class":45},[28,42505,42332],{"class":34},[28,42507,419],{"class":45},[28,42509,38123],{"class":34},[28,42511,42512,42514,42516,42518,42520,42522,42524,42526,42529,42531,42533,42535,42537,42539,42541],{"class":30,"line":9921},[28,42513,42305],{"class":34},[28,42515,38533],{"class":45},[28,42517,49],{"class":34},[28,42519,828],{"class":45},[28,42521,42314],{"class":34},[28,42523,32146],{"class":45},[28,42525,49],{"class":34},[28,42527,42528],{"class":45},"288",[28,42530,42323],{"class":34},[28,42532,413],{"class":45},[28,42534,49],{"class":34},[28,42536,419],{"class":45},[28,42538,42332],{"class":34},[28,42540,419],{"class":45},[28,42542,38123],{"class":34},[28,42544,42545,42547,42550,42552,42554,42556,42558,42560,42563,42565,42567,42569,42571,42573,42575],{"class":30,"line":9927},[28,42546,42305],{"class":34},[28,42548,42549],{"class":45},"528",[28,42551,49],{"class":34},[28,42553,34946],{"class":45},[28,42555,42314],{"class":34},[28,42557,21125],{"class":45},[28,42559,49],{"class":34},[28,42561,42562],{"class":45},"320",[28,42564,42323],{"class":34},[28,42566,413],{"class":45},[28,42568,49],{"class":34},[28,42570,32146],{"class":45},[28,42572,42332],{"class":34},[28,42574,32146],{"class":45},[28,42576,38123],{"class":34},[28,42578,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597,42599,42601,42603],{"class":30,"line":9941},[28,42580,38173],{"class":34},[28,42582,30950],{"class":5293},[28,42584,39],{"class":38},[28,42586,57],{"class":45},[28,42588,49],{"class":34},[28,42590,31005],{"class":5293},[28,42592,39],{"class":38},[28,42594,52],{"class":45},[28,42596,49],{"class":34},[28,42598,30959],{"class":5293},[28,42600,39],{"class":38},[28,42602,46],{"class":45},[28,42604,227],{"class":34},[28,42606,42607],{"class":30,"line":9947},[28,42608,38202],{"class":34},[28,42610,42611,42613,42616,42618],{"class":30,"line":9974},[28,42612,30921],{"class":45},[28,42614,42615],{"class":34},".b5",[28,42617,39],{"class":38},[28,42619,38085],{"class":34},[28,42621,42622,42624,42627,42629,42631,42633,42635,42637,42639,42641,42643,42645,42647,42649,42651],{"class":30,"line":9983},[28,42623,42305],{"class":34},[28,42625,42626],{"class":45},"832",[28,42628,49],{"class":34},[28,42630,34946],{"class":45},[28,42632,42314],{"class":34},[28,42634,21125],{"class":45},[28,42636,49],{"class":34},[28,42638,42562],{"class":45},[28,42640,42323],{"class":34},[28,42642,413],{"class":45},[28,42644,49],{"class":34},[28,42646,32146],{"class":45},[28,42648,42332],{"class":34},[28,42650,32146],{"class":45},[28,42652,38123],{"class":34},[28,42654,42655,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683],{"class":30,"line":9989},[28,42656,42305],{"class":34},[28,42658,42626],{"class":45},[28,42660,49],{"class":34},[28,42662,35016],{"class":45},[28,42664,42314],{"class":34},[28,42666,42235],{"class":45},[28,42668,49],{"class":34},[28,42670,35016],{"class":45},[28,42672,42323],{"class":34},[28,42674,817],{"class":45},[28,42676,49],{"class":34},[28,42678,32146],{"class":45},[28,42680,42332],{"class":34},[28,42682,32146],{"class":45},[28,42684,38123],{"class":34},[28,42686,42687,42690,42692,42694,42696],{"class":30,"line":9997},[28,42688,42689],{"class":34},"            nn.AdaptiveAvgPool2d((",[28,42691,46],{"class":45},[28,42693,49],{"class":34},[28,42695,46],{"class":45},[28,42697,42698],{"class":34},")),\n",[28,42700,42701],{"class":30,"line":10002},[28,42702,38866],{"class":34},[28,42704,42705,42707,42710,42712,42714],{"class":30,"line":16681},[28,42706,38871],{"class":34},[28,42708,42709],{"class":45},"1024",[28,42711,49],{"class":34},[28,42713,659],{"class":45},[28,42715,227],{"class":34},[28,42717,42718],{"class":30,"line":16687},[28,42719,38202],{"class":34},[28,42721,42722],{"class":30,"line":16710},[28,42723,42724],{"class":105},"        # 对模型参数初始化\n",[28,42726,42727,42729,42731,42733,42735],{"class":30,"line":16716},[28,42728,3480],{"class":38},[28,42730,38944],{"class":34},[28,42732,26121],{"class":38},[28,42734,38949],{"class":45},[28,42736,38952],{"class":34},[28,42738,42739,42741,42743],{"class":30,"line":16739},[28,42740,4719],{"class":38},[28,42742,38964],{"class":45},[28,42744,38967],{"class":34},[28,42746,42747,42749,42752,42754,42757,42759,42761,42763,42765],{"class":30,"line":16753},[28,42748,38977],{"class":34},[28,42750,42751],{"class":5293},"mode",[28,42753,39],{"class":38},[28,42755,42756],{"class":320},"'fan_out'",[28,42758,49],{"class":34},[28,42760,38980],{"class":5293},[28,42762,39],{"class":38},[28,42764,38985],{"class":320},[28,42766,227],{"class":34},[28,42768,42769],{"class":30,"line":16773},[28,42770,42771],{"class":105},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[28,42773,42774],{"class":30,"line":16779},[28,42775,42776],{"class":105},"                # ② mode = 'fan_out'决定使用的fan值：\n",[28,42778,42779],{"class":30,"line":16790},[28,42780,42781],{"class":105},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[28,42783,42784],{"class":30,"line":16813},[28,42785,42786],{"class":105},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[28,42788,42789],{"class":30,"line":16835},[28,42790,42791],{"class":105},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[28,42793,42794],{"class":30,"line":16840},[28,42795,42796],{"class":105},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[28,42798,42799,42801,42803,42805,42807,42809],{"class":30,"line":16846},[28,42800,38997],{"class":38},[28,42802,39000],{"class":34},[28,42804,39003],{"class":38},[28,42806,39006],{"class":38},[28,42808,39009],{"class":45},[28,42810,3816],{"class":34},[28,42812,42813,42815,42817],{"class":30,"line":16860},[28,42814,39021],{"class":34},[28,42816,407],{"class":45},[28,42818,227],{"class":34},[28,42820,42821,42824,42826],{"class":30,"line":16873},[28,42822,42823],{"class":38},"                elif",[28,42825,38964],{"class":45},[28,42827,39040],{"class":34},[28,42829,42830,42833,42835,42837,42839],{"class":30,"line":16878},[28,42831,42832],{"class":34},"                    nn.init.normal_(m.weight,",[28,42834,407],{"class":45},[28,42836,49],{"class":34},[28,42838,39062],{"class":45},[28,42840,227],{"class":34},[28,42842,42843,42846,42848,42850,42852,42854],{"class":30,"line":16892},[28,42844,42845],{"class":38},"                    if",[28,42847,39000],{"class":34},[28,42849,39003],{"class":38},[28,42851,39006],{"class":38},[28,42853,39009],{"class":45},[28,42855,3816],{"class":34},[28,42857,42858,42861,42863],{"class":30,"line":16897},[28,42859,42860],{"class":34},"                        nn.init.constant_(m.bias,",[28,42862,407],{"class":45},[28,42864,227],{"class":34},[28,42866,42867],{"class":30,"line":16903},[28,42868,35241],{"class":105},[28,42870,42871,42873,42875],{"class":30,"line":16908},[28,42872,30877],{"class":38},[28,42874,31169],{"class":2040},[28,42876,31172],{"class":34},[28,42878,42879,42881,42883,42885],{"class":30,"line":16922},[28,42880,31177],{"class":34},[28,42882,39],{"class":38},[28,42884,30899],{"class":45},[28,42886,42887],{"class":34},".b1(x)\n",[28,42889,42890,42892,42894,42896],{"class":30,"line":16927},[28,42891,31177],{"class":34},[28,42893,39],{"class":38},[28,42895,30899],{"class":45},[28,42897,42898],{"class":34},".b2(x)\n",[28,42900,42901,42903,42905,42907],{"class":30,"line":16932},[28,42902,31177],{"class":34},[28,42904,39],{"class":38},[28,42906,30899],{"class":45},[28,42908,42909],{"class":34},".b3(x)\n",[28,42911,42912,42914,42916,42918],{"class":30,"line":16946},[28,42913,31177],{"class":34},[28,42915,39],{"class":38},[28,42917,30899],{"class":45},[28,42919,42920],{"class":34},".b4(x)\n",[28,42922,42923,42925,42927,42929],{"class":30,"line":16958},[28,42924,31177],{"class":34},[28,42926,39],{"class":38},[28,42928,30899],{"class":45},[28,42930,42931],{"class":34},".b5(x)\n",[28,42933,42934,42936],{"class":30,"line":16963},[28,42935,14829],{"class":38},[28,42937,31285],{"class":34},[28,42939,42940],{"class":30,"line":16976},[28,42941,2477],{"emptyLinePlaceholder":144},[28,42943,42944],{"class":30,"line":16981},[28,42945,42946],{"class":105},"# 模型展示\n",[28,42948,42949,42951,42953,42955,42957],{"class":30,"line":16986},[28,42950,1608],{"class":38},[28,42952,31296],{"class":45},[28,42954,3026],{"class":38},[28,42956,31301],{"class":320},[28,42958,3816],{"class":34},[28,42960,42961,42963,42965,42967,42969,42971,42973,42975,42977],{"class":30,"line":16991},[28,42962,31313],{"class":34},[28,42964,39],{"class":38},[28,42966,30527],{"class":34},[28,42968,31320],{"class":320},[28,42970,1781],{"class":38},[28,42972,31325],{"class":34},[28,42974,1778],{"class":38},[28,42976,30552],{"class":320},[28,42978,227],{"class":34},[28,42980,42981,42983,42985],{"class":30,"line":17004},[28,42982,31365],{"class":34},[28,42984,39],{"class":38},[28,42986,42987],{"class":34},"GoogLeNet(Inception).to(device)\n",[28,42989,42990,42992,42994,42996,42998,43000,43002,43004],{"class":30,"line":17009},[28,42991,31375],{"class":45},[28,42993,31378],{"class":34},[28,42995,46],{"class":45},[28,42997,49],{"class":34},[28,42999,31577],{"class":45},[28,43001,49],{"class":34},[28,43003,31577],{"class":45},[28,43005,31391],{"class":34},[171,43007,43008],{"start":94},[174,43009,39259],{},[18,43011,43013],{"className":20,"code":43012,"language":22,"meta":23,"style":23},"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",[25,43014,43015,43021,43027,43037,43043,43053,43063,43073,43083,43093,43097,43108,43118,43122,43126,43130,43138,43150,43160,43176,43186,43218,43232,43242,43252,43256,43266,43280,43290,43300,43310,43316,43320,43324,43328,43332,43336,43344,43364,43368,43372,43376,43380,43384,43400,43404,43408,43416,43420,43424,43432,43436,43440,43444,43452,43456,43460,43464,43468,43476,43480,43488,43492,43500,43504,43512,43516,43524,43528,43532,43540,43544,43548,43552,43564,43588,43602,43606,43610,43614,43622,43626,43634,43638,43646,43650,43658,43662,43670,43674,43682,43686,43698,43702,43710,43714,43722,43726,43730,43734,43738,43746,43750,43766,43770,43778,43782,43786,43790,43794,43798,43802,43806,43822,43826,43838,43842,43854,43858,43870,43874,43882,43886,43894,43898,43902,43906,43912,43916,43924,43928,43944,43948,43956,43960,43976,43988,43992,44004,44008,44012,44020,44024,44028,44036,44040,44048,44052,44060,44064,44068,44110,44152,44156,44160,44176,44180,44196,44200,44204,44212,44216,44220,44232,44270,44274,44278,44286,44290,44304,44314,44320,44326,44332,44338,44342,44346,44352,44356,44360,44368,44372,44390,44394,44398,44402,44418,44422,44426,44430,44434,44438,44458,44478,44482,44486,44490,44498,44506,44510,44526,44546,44566,44570,44574,44582,44590,44594,44598,44602,44614,44618,44628,44636,44653],{"__ignoreMap":23},[28,43016,43017,43019],{"class":30,"line":31},[28,43018,30468],{"class":38},[28,43020,31898],{"class":34},[28,43022,43023,43025],{"class":30,"line":94},[28,43024,30468],{"class":38},[28,43026,31905],{"class":34},[28,43028,43029,43031,43033,43035],{"class":30,"line":109},[28,43030,30468],{"class":38},[28,43032,31916],{"class":34},[28,43034,31459],{"class":38},[28,43036,31921],{"class":34},[28,43038,43039,43041],{"class":30,"line":125},[28,43040,30468],{"class":38},[28,43042,30471],{"class":34},[28,43044,43045,43047,43049,43051],{"class":30,"line":131},[28,43046,30813],{"class":38},[28,43048,31491],{"class":34},[28,43050,30468],{"class":38},[28,43052,31938],{"class":34},[28,43054,43055,43057,43059,43061],{"class":30,"line":1291},[28,43056,30813],{"class":38},[28,43058,31444],{"class":34},[28,43060,30468],{"class":38},[28,43062,31449],{"class":34},[28,43064,43065,43067,43069,43071],{"class":30,"line":1297},[28,43066,30813],{"class":38},[28,43068,31474],{"class":34},[28,43070,30468],{"class":38},[28,43072,31479],{"class":34},[28,43074,43075,43077,43079,43081],{"class":30,"line":1388},[28,43076,30468],{"class":38},[28,43078,31491],{"class":34},[28,43080,31459],{"class":38},[28,43082,31496],{"class":34},[28,43084,43085,43087,43089,43091],{"class":30,"line":1394},[28,43086,30468],{"class":38},[28,43088,31508],{"class":34},[28,43090,31459],{"class":38},[28,43092,31513],{"class":34},[28,43094,43095],{"class":30,"line":1406},[28,43096,31983],{"class":105},[28,43098,43099,43101,43103,43105],{"class":30,"line":1689},[28,43100,30813],{"class":38},[28,43102,31990],{"class":34},[28,43104,30468],{"class":38},[28,43106,43107],{"class":34}," GoogLeNet, Inception\n",[28,43109,43110,43112,43114,43116],{"class":30,"line":1694},[28,43111,30813],{"class":38},[28,43113,30816],{"class":34},[28,43115,30468],{"class":38},[28,43117,30821],{"class":34},[28,43119,43120],{"class":30,"line":1700},[28,43121,2477],{"emptyLinePlaceholder":144},[28,43123,43124],{"class":30,"line":1705},[28,43125,2477],{"emptyLinePlaceholder":144},[28,43127,43128],{"class":30,"line":1719},[28,43129,32018],{"class":105},[28,43131,43132,43134,43136],{"class":30,"line":1724},[28,43133,32023],{"class":38},[28,43135,32026],{"class":2040},[28,43137,32029],{"class":34},[28,43139,43140,43142,43144,43146,43148],{"class":30,"line":1730},[28,43141,32034],{"class":34},[28,43143,39],{"class":38},[28,43145,31531],{"class":34},[28,43147,31539],{"class":320},[28,43149,31542],{"class":34},[28,43151,43152,43154,43156,43158],{"class":30,"line":1751},[28,43153,32047],{"class":5293},[28,43155,39],{"class":38},[28,43157,31552],{"class":45},[28,43159,31542],{"class":34},[28,43161,43162,43164,43166,43168,43170,43172,43174],{"class":30,"line":1756},[28,43163,32058],{"class":5293},[28,43165,39],{"class":38},[28,43167,31569],{"class":34},[28,43169,31572],{"class":5293},[28,43171,39],{"class":38},[28,43173,35525],{"class":45},[28,43175,31580],{"class":34},[28,43177,43178,43180,43182,43184],{"class":30,"line":1770},[28,43179,32075],{"class":5293},[28,43181,39],{"class":38},[28,43183,31552],{"class":45},[28,43185,227],{"class":34},[28,43187,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210,43212,43214,43216],{"class":30,"line":1775},[28,43189,32086],{"class":34},[28,43191,39],{"class":38},[28,43193,32091],{"class":34},[28,43195,32094],{"class":45},[28,43197,221],{"class":34},[28,43199,32099],{"class":45},[28,43201,668],{"class":38},[28,43203,7435],{"class":45},[28,43205,32106],{"class":34},[28,43207,32094],{"class":45},[28,43209,221],{"class":34},[28,43211,32113],{"class":45},[28,43213,668],{"class":38},[28,43215,7435],{"class":45},[28,43217,32120],{"class":34},[28,43219,43220,43222,43224,43226,43228,43230],{"class":30,"line":1804},[28,43221,32125],{"class":34},[28,43223,39],{"class":38},[28,43225,32130],{"class":34},[28,43227,31613],{"class":5293},[28,43229,39],{"class":38},[28,43231,31618],{"class":34},[28,43233,43234,43236,43238,43240],{"class":30,"line":1809},[28,43235,32141],{"class":5293},[28,43237,39],{"class":38},[28,43239,413],{"class":45},[28,43241,31542],{"class":34},[28,43243,43244,43246,43248,43250],{"class":30,"line":1826},[28,43245,32153],{"class":5293},[28,43247,39],{"class":38},[28,43249,31552],{"class":45},[28,43251,31542],{"class":34},[28,43253,43254],{"class":30,"line":1831},[28,43255,32164],{"class":105},[28,43257,43258,43260,43262,43264],{"class":30,"line":1836},[28,43259,32169],{"class":5293},[28,43261,39],{"class":38},[28,43263,608],{"class":45},[28,43265,227],{"class":34},[28,43267,43268,43270,43272,43274,43276,43278],{"class":30,"line":1841},[28,43269,32180],{"class":34},[28,43271,39],{"class":38},[28,43273,31610],{"class":34},[28,43275,31613],{"class":5293},[28,43277,39],{"class":38},[28,43279,32191],{"class":34},[28,43281,43282,43284,43286,43288],{"class":30,"line":1855},[28,43283,32196],{"class":5293},[28,43285,39],{"class":38},[28,43287,413],{"class":45},[28,43289,31542],{"class":34},[28,43291,43292,43294,43296,43298],{"class":30,"line":1860},[28,43293,32207],{"class":5293},[28,43295,39],{"class":38},[28,43297,31552],{"class":45},[28,43299,31542],{"class":34},[28,43301,43302,43304,43306,43308],{"class":30,"line":2654},[28,43303,32218],{"class":5293},[28,43305,39],{"class":38},[28,43307,608],{"class":45},[28,43309,227],{"class":34},[28,43311,43312,43314],{"class":30,"line":2668},[28,43313,4167],{"class":38},[28,43315,32231],{"class":34},[28,43317,43318],{"class":30,"line":2676},[28,43319,2477],{"emptyLinePlaceholder":144},[28,43321,43322],{"class":30,"line":2681},[28,43323,32240],{"class":105},[28,43325,43326],{"class":30,"line":2687},[28,43327,32245],{"class":105},[28,43329,43330],{"class":30,"line":2693},[28,43331,2477],{"emptyLinePlaceholder":144},[28,43333,43334],{"class":30,"line":2698},[28,43335,32254],{"class":105},[28,43337,43338,43340,43342],{"class":30,"line":8025},[28,43339,32023],{"class":38},[28,43341,32261],{"class":2040},[28,43343,32264],{"class":34},[28,43345,43346,43348,43350,43352,43354,43356,43358,43360,43362],{"class":30,"line":8049},[28,43347,31313],{"class":34},[28,43349,39],{"class":38},[28,43351,30527],{"class":34},[28,43353,31320],{"class":320},[28,43355,1781],{"class":38},[28,43357,31325],{"class":34},[28,43359,1778],{"class":38},[28,43361,32283],{"class":320},[28,43363,227],{"class":34},[28,43365,43366],{"class":30,"line":8054},[28,43367,2477],{"emptyLinePlaceholder":144},[28,43369,43370],{"class":30,"line":8060},[28,43371,2477],{"emptyLinePlaceholder":144},[28,43373,43374],{"class":30,"line":8087},[28,43375,32298],{"class":105},[28,43377,43378],{"class":30,"line":8092},[28,43379,32303],{"class":105},[28,43381,43382],{"class":30,"line":8098},[28,43383,32308],{"class":105},[28,43385,43386,43388,43390,43392,43394,43396,43398],{"class":30,"line":8110},[28,43387,32313],{"class":34},[28,43389,39],{"class":38},[28,43391,32318],{"class":34},[28,43393,32321],{"class":5293},[28,43395,39],{"class":38},[28,43397,32326],{"class":45},[28,43399,227],{"class":34},[28,43401,43402],{"class":30,"line":8122},[28,43403,2477],{"emptyLinePlaceholder":144},[28,43405,43406],{"class":30,"line":8134},[28,43407,32337],{"class":105},[28,43409,43410,43412,43414],{"class":30,"line":9793},[28,43411,32342],{"class":34},[28,43413,39],{"class":38},[28,43415,32347],{"class":34},[28,43417,43418],{"class":30,"line":9818},[28,43419,2477],{"emptyLinePlaceholder":144},[28,43421,43422],{"class":30,"line":9841},[28,43423,32356],{"class":105},[28,43425,43426,43428,43430],{"class":30,"line":9865},[28,43427,31365],{"class":34},[28,43429,39],{"class":38},[28,43431,32365],{"class":34},[28,43433,43434],{"class":30,"line":9870},[28,43435,32370],{"class":105},[28,43437,43438],{"class":30,"line":9875},[28,43439,32375],{"class":105},[28,43441,43442],{"class":30,"line":9880},[28,43443,32380],{"class":105},[28,43445,43446,43448,43450],{"class":30,"line":9889},[28,43447,32385],{"class":34},[28,43449,39],{"class":38},[28,43451,32390],{"class":34},[28,43453,43454],{"class":30,"line":9894},[28,43455,2477],{"emptyLinePlaceholder":144},[28,43457,43458],{"class":30,"line":9900},[28,43459,2477],{"emptyLinePlaceholder":144},[28,43461,43462],{"class":30,"line":9921},[28,43463,32403],{"class":105},[28,43465,43466],{"class":30,"line":9927},[28,43467,32408],{"class":105},[28,43469,43470,43472,43474],{"class":30,"line":9941},[28,43471,32413],{"class":34},[28,43473,39],{"class":38},[28,43475,32418],{"class":45},[28,43477,43478],{"class":30,"line":9947},[28,43479,32423],{"class":105},[28,43481,43482,43484,43486],{"class":30,"line":9974},[28,43483,32428],{"class":34},[28,43485,39],{"class":38},[28,43487,32433],{"class":34},[28,43489,43490],{"class":30,"line":9983},[28,43491,32438],{"class":105},[28,43493,43494,43496,43498],{"class":30,"line":9989},[28,43495,32443],{"class":34},[28,43497,39],{"class":38},[28,43499,32433],{"class":34},[28,43501,43502],{"class":30,"line":9997},[28,43503,32452],{"class":105},[28,43505,43506,43508,43510],{"class":30,"line":10002},[28,43507,32457],{"class":34},[28,43509,39],{"class":38},[28,43511,32433],{"class":34},[28,43513,43514],{"class":30,"line":16681},[28,43515,32466],{"class":105},[28,43517,43518,43520,43522],{"class":30,"line":16687},[28,43519,32471],{"class":34},[28,43521,39],{"class":38},[28,43523,32433],{"class":34},[28,43525,43526],{"class":30,"line":16710},[28,43527,2477],{"emptyLinePlaceholder":144},[28,43529,43530],{"class":30,"line":16716},[28,43531,32484],{"class":105},[28,43533,43534,43536,43538],{"class":30,"line":16739},[28,43535,32489],{"class":34},[28,43537,39],{"class":38},[28,43539,32494],{"class":34},[28,43541,43542],{"class":30,"line":16753},[28,43543,2477],{"emptyLinePlaceholder":144},[28,43545,43546],{"class":30,"line":16773},[28,43547,2477],{"emptyLinePlaceholder":144},[28,43549,43550],{"class":30,"line":16779},[28,43551,32507],{"class":105},[28,43553,43554,43556,43558,43560,43562],{"class":30,"line":16790},[28,43555,3278],{"class":38},[28,43557,32514],{"class":34},[28,43559,26121],{"class":38},[28,43561,32519],{"class":45},[28,43563,32522],{"class":34},[28,43565,43566,43568,43570,43572,43574,43576,43578,43580,43582,43584,43586],{"class":30,"line":16813},[28,43567,32527],{"class":45},[28,43569,221],{"class":34},[28,43571,32532],{"class":320},[28,43573,32535],{"class":45},[28,43575,794],{"class":320},[28,43577,32535],{"class":45},[28,43579,465],{"class":320},[28,43581,32544],{"class":34},[28,43583,742],{"class":38},[28,43585,46],{"class":45},[28,43587,30573],{"class":34},[28,43589,43590,43592,43594,43596,43598,43600],{"class":30,"line":16835},[28,43591,32527],{"class":45},[28,43593,221],{"class":34},[28,43595,32559],{"class":320},[28,43597,668],{"class":38},[28,43599,659],{"class":45},[28,43601,227],{"class":34},[28,43603,43604],{"class":30,"line":16840},[28,43605,2477],{"emptyLinePlaceholder":144},[28,43607,43608],{"class":30,"line":16846},[28,43609,32574],{"class":105},[28,43611,43612],{"class":30,"line":16860},[28,43613,32579],{"class":105},[28,43615,43616,43618,43620],{"class":30,"line":16873},[28,43617,32584],{"class":34},[28,43619,39],{"class":38},[28,43621,32418],{"class":45},[28,43623,43624],{"class":30,"line":16878},[28,43625,32593],{"class":105},[28,43627,43628,43630,43632],{"class":30,"line":16892},[28,43629,32598],{"class":34},[28,43631,39],{"class":38},[28,43633,3162],{"class":45},[28,43635,43636],{"class":30,"line":16897},[28,43637,32607],{"class":105},[28,43639,43640,43642,43644],{"class":30,"line":16903},[28,43641,32612],{"class":34},[28,43643,39],{"class":38},[28,43645,32418],{"class":45},[28,43647,43648],{"class":30,"line":16908},[28,43649,32621],{"class":105},[28,43651,43652,43654,43656],{"class":30,"line":16922},[28,43653,32626],{"class":34},[28,43655,39],{"class":38},[28,43657,3162],{"class":45},[28,43659,43660],{"class":30,"line":16927},[28,43661,32635],{"class":105},[28,43663,43664,43666,43668],{"class":30,"line":16932},[28,43665,32640],{"class":34},[28,43667,39],{"class":38},[28,43669,3162],{"class":45},[28,43671,43672],{"class":30,"line":16946},[28,43673,32649],{"class":105},[28,43675,43676,43678,43680],{"class":30,"line":16958},[28,43677,32654],{"class":34},[28,43679,39],{"class":38},[28,43681,3162],{"class":45},[28,43683,43684],{"class":30,"line":16963},[28,43685,32663],{"class":105},[28,43687,43688,43690,43692,43694,43696],{"class":30,"line":16976},[28,43689,3480],{"class":38},[28,43691,31677],{"class":34},[28,43693,26121],{"class":38},[28,43695,31682],{"class":45},[28,43697,32676],{"class":34},[28,43699,43700],{"class":30,"line":16981},[28,43701,32681],{"class":105},[28,43703,43704,43706,43708],{"class":30,"line":16986},[28,43705,32686],{"class":34},[28,43707,39],{"class":38},[28,43709,32691],{"class":34},[28,43711,43712],{"class":30,"line":16991},[28,43713,32696],{"class":105},[28,43715,43716,43718,43720],{"class":30,"line":17004},[28,43717,32701],{"class":34},[28,43719,39],{"class":38},[28,43721,32706],{"class":34},[28,43723,43724],{"class":30,"line":17009},[28,43725,32712],{"class":105},[28,43727,43728],{"class":30,"line":32709},[28,43729,32718],{"class":34},[28,43731,43732],{"class":30,"line":32715},[28,43733,32724],{"class":105},[28,43735,43736],{"class":30,"line":32721},[28,43737,32730],{"class":105},[28,43739,43740,43742,43744],{"class":30,"line":32727},[28,43741,32736],{"class":34},[28,43743,39],{"class":38},[28,43745,32741],{"class":34},[28,43747,43748],{"class":30,"line":32733},[28,43749,32747],{"class":105},[28,43751,43752,43754,43756,43758,43760,43762,43764],{"class":30,"line":32744},[28,43753,32753],{"class":34},[28,43755,39],{"class":38},[28,43757,32758],{"class":34},[28,43759,32761],{"class":5293},[28,43761,39],{"class":38},[28,43763,46],{"class":45},[28,43765,227],{"class":34},[28,43767,43768],{"class":30,"line":32750},[28,43769,32773],{"class":105},[28,43771,43772,43774,43776],{"class":30,"line":32770},[28,43773,32779],{"class":34},[28,43775,39],{"class":38},[28,43777,32784],{"class":34},[28,43779,43780],{"class":30,"line":32776},[28,43781,32790],{"class":105},[28,43783,43784],{"class":30,"line":32787},[28,43785,32796],{"class":34},[28,43787,43788],{"class":30,"line":32793},[28,43789,32802],{"class":105},[28,43791,43792],{"class":30,"line":32799},[28,43793,32808],{"class":34},[28,43795,43796],{"class":30,"line":32805},[28,43797,32814],{"class":105},[28,43799,43800],{"class":30,"line":32811},[28,43801,32820],{"class":34},[28,43803,43804],{"class":30,"line":32817},[28,43805,32826],{"class":105},[28,43807,43808,43810,43812,43814,43816,43818,43820],{"class":30,"line":32823},[28,43809,32832],{"class":34},[28,43811,9554],{"class":38},[28,43813,32837],{"class":34},[28,43815,668],{"class":38},[28,43817,32842],{"class":34},[28,43819,407],{"class":45},[28,43821,227],{"class":34},[28,43823,43824],{"class":30,"line":32829},[28,43825,32852],{"class":105},[28,43827,43828,43830,43832,43834,43836],{"class":30,"line":32849},[28,43829,32858],{"class":34},[28,43831,9554],{"class":38},[28,43833,32863],{"class":34},[28,43835,3026],{"class":38},[28,43837,32868],{"class":34},[28,43839,43840],{"class":30,"line":32855},[28,43841,32874],{"class":105},[28,43843,43844,43846,43848,43850,43852],{"class":30,"line":32871},[28,43845,32880],{"class":34},[28,43847,9554],{"class":38},[28,43849,32842],{"class":34},[28,43851,407],{"class":45},[28,43853,227],{"class":34},[28,43855,43856],{"class":30,"line":32877},[28,43857,32894],{"class":105},[28,43859,43860,43862,43864,43866,43868],{"class":30,"line":32891},[28,43861,3480],{"class":38},[28,43863,32902],{"class":34},[28,43865,26121],{"class":38},[28,43867,31682],{"class":45},[28,43869,32909],{"class":34},[28,43871,43872],{"class":30,"line":32897},[28,43873,32915],{"class":105},[28,43875,43876,43878,43880],{"class":30,"line":32912},[28,43877,32686],{"class":34},[28,43879,39],{"class":38},[28,43881,32691],{"class":34},[28,43883,43884],{"class":30,"line":32918},[28,43885,32930],{"class":105},[28,43887,43888,43890,43892],{"class":30,"line":32927},[28,43889,32701],{"class":34},[28,43891,39],{"class":38},[28,43893,32706],{"class":34},[28,43895,43896],{"class":30,"line":32933},[28,43897,32945],{"class":105},[28,43899,43900],{"class":30,"line":32942},[28,43901,32951],{"class":34},[28,43903,43904],{"class":30,"line":32948},[28,43905,36432],{"class":105},[28,43907,43908,43910],{"class":30,"line":32954},[28,43909,32957],{"class":38},[28,43911,32960],{"class":34},[28,43913,43914],{"class":30,"line":32963},[28,43915,32966],{"class":105},[28,43917,43918,43920,43922],{"class":30,"line":32969},[28,43919,36447],{"class":34},[28,43921,39],{"class":38},[28,43923,32741],{"class":34},[28,43925,43926],{"class":30,"line":32980},[28,43927,32983],{"class":105},[28,43929,43930,43932,43934,43936,43938,43940,43942],{"class":30,"line":32986},[28,43931,36460],{"class":34},[28,43933,39],{"class":38},[28,43935,32758],{"class":34},[28,43937,32761],{"class":5293},[28,43939,39],{"class":38},[28,43941,46],{"class":45},[28,43943,227],{"class":34},[28,43945,43946],{"class":30,"line":33005},[28,43947,33008],{"class":105},[28,43949,43950,43952,43954],{"class":30,"line":33011},[28,43951,36481],{"class":34},[28,43953,39],{"class":38},[28,43955,32784],{"class":34},[28,43957,43958],{"class":30,"line":33022},[28,43959,33025],{"class":105},[28,43961,43962,43964,43966,43968,43970,43972,43974],{"class":30,"line":33028},[28,43963,36494],{"class":34},[28,43965,9554],{"class":38},[28,43967,36499],{"class":34},[28,43969,668],{"class":38},[28,43971,32842],{"class":34},[28,43973,407],{"class":45},[28,43975,227],{"class":34},[28,43977,43978,43980,43982,43984,43986],{"class":30,"line":33048},[28,43979,36512],{"class":34},[28,43981,9554],{"class":38},[28,43983,32863],{"class":34},[28,43985,3026],{"class":38},[28,43987,32868],{"class":34},[28,43989,43990],{"class":30,"line":33064},[28,43991,36525],{"class":105},[28,43993,43994,43996,43998,44000,44002],{"class":30,"line":33070},[28,43995,36530],{"class":34},[28,43997,9554],{"class":38},[28,43999,32842],{"class":34},[28,44001,407],{"class":45},[28,44003,227],{"class":34},[28,44005,44006],{"class":30,"line":33084},[28,44007,33087],{"class":105},[28,44009,44010],{"class":30,"line":33090},[28,44011,33093],{"class":105},[28,44013,44014,44016,44018],{"class":30,"line":33096},[28,44015,33099],{"class":34},[28,44017,794],{"class":38},[28,44019,33104],{"class":34},[28,44021,44022],{"class":30,"line":33107},[28,44023,33110],{"class":105},[28,44025,44026],{"class":30,"line":33113},[28,44027,33116],{"class":105},[28,44029,44030,44032,44034],{"class":30,"line":33119},[28,44031,33122],{"class":34},[28,44033,794],{"class":38},[28,44035,33104],{"class":34},[28,44037,44038],{"class":30,"line":33129},[28,44039,33132],{"class":105},[28,44041,44042,44044,44046],{"class":30,"line":33135},[28,44043,33138],{"class":34},[28,44045,794],{"class":38},[28,44047,33143],{"class":34},[28,44049,44050],{"class":30,"line":33146},[28,44051,33149],{"class":105},[28,44053,44054,44056,44058],{"class":30,"line":33152},[28,44055,33155],{"class":34},[28,44057,794],{"class":38},[28,44059,33143],{"class":34},[28,44061,44062],{"class":30,"line":33162},[28,44063,2477],{"emptyLinePlaceholder":144},[28,44065,44066],{"class":30,"line":33167},[28,44067,33170],{"class":105},[28,44069,44070,44072,44074,44076,44078,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102,44104,44106,44108],{"class":30,"line":33173},[28,44071,32527],{"class":45},[28,44073,221],{"class":34},[28,44075,3669],{"class":320},[28,44077,32535],{"class":45},[28,44079,33184],{"class":320},[28,44081,1102],{"class":45},[28,44083,33189],{"class":38},[28,44085,1150],{"class":45},[28,44087,33194],{"class":320},[28,44089,1102],{"class":45},[28,44091,33189],{"class":38},[28,44093,1150],{"class":45},[28,44095,3669],{"class":320},[28,44097,33205],{"class":34},[28,44099,742],{"class":38},[28,44101,46],{"class":45},[28,44103,33212],{"class":34},[28,44105,742],{"class":38},[28,44107,46],{"class":45},[28,44109,33219],{"class":34},[28,44111,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132,44134,44136,44138,44140,44142,44144,44146,44148,44150],{"class":30,"line":33222},[28,44113,32527],{"class":45},[28,44115,221],{"class":34},[28,44117,3669],{"class":320},[28,44119,32535],{"class":45},[28,44121,33233],{"class":320},[28,44123,1102],{"class":45},[28,44125,33189],{"class":38},[28,44127,1150],{"class":45},[28,44129,33242],{"class":320},[28,44131,1102],{"class":45},[28,44133,33189],{"class":38},[28,44135,1150],{"class":45},[28,44137,3669],{"class":320},[28,44139,33253],{"class":34},[28,44141,742],{"class":38},[28,44143,46],{"class":45},[28,44145,33260],{"class":34},[28,44147,742],{"class":38},[28,44149,46],{"class":45},[28,44151,33219],{"class":34},[28,44153,44154],{"class":30,"line":33269},[28,44155,2477],{"emptyLinePlaceholder":144},[28,44157,44158],{"class":30,"line":33274},[28,44159,33277],{"class":105},[28,44161,44162,44164,44166,44168,44170,44172,44174],{"class":30,"line":33280},[28,44163,2574],{"class":38},[28,44165,33285],{"class":34},[28,44167,742],{"class":38},[28,44169,46],{"class":45},[28,44171,119],{"class":34},[28,44173,1164],{"class":38},[28,44175,33296],{"class":34},[28,44177,44178],{"class":30,"line":33299},[28,44179,33302],{"class":105},[28,44181,44182,44184,44186,44188,44190,44192,44194],{"class":30,"line":33305},[28,44183,33308],{"class":34},[28,44185,260],{"class":45},[28,44187,39],{"class":38},[28,44189,33315],{"class":34},[28,44191,742],{"class":38},[28,44193,46],{"class":45},[28,44195,33322],{"class":34},[28,44197,44198],{"class":30,"line":33325},[28,44199,33328],{"class":105},[28,44201,44202],{"class":30,"line":33331},[28,44203,33334],{"class":105},[28,44205,44206,44208,44210],{"class":30,"line":33337},[28,44207,33340],{"class":34},[28,44209,39],{"class":38},[28,44211,32390],{"class":34},[28,44213,44214],{"class":30,"line":33347},[28,44215,2477],{"emptyLinePlaceholder":144},[28,44217,44218],{"class":30,"line":33352},[28,44219,33355],{"class":105},[28,44221,44222,44224,44226,44228,44230],{"class":30,"line":33358},[28,44223,33361],{"class":34},[28,44225,39],{"class":38},[28,44227,33366],{"class":34},[28,44229,742],{"class":38},[28,44231,33371],{"class":34},[28,44233,44234,44236,44238,44240,44242,44244,44246,44248,44250,44252,44254,44256,44258,44260,44262,44264,44266,44268],{"class":30,"line":33374},[28,44235,32527],{"class":45},[28,44237,221],{"class":34},[28,44239,33381],{"class":320},[28,44241,1102],{"class":45},[28,44243,33386],{"class":38},[28,44245,1150],{"class":45},[28,44247,754],{"class":320},[28,44249,1102],{"class":45},[28,44251,33386],{"class":38},[28,44253,1150],{"class":45},[28,44255,33399],{"class":320},[28,44257,33402],{"class":34},[28,44259,33405],{"class":38},[28,44261,1113],{"class":45},[28,44263,33410],{"class":34},[28,44265,542],{"class":38},[28,44267,1113],{"class":45},[28,44269,30573],{"class":34},[28,44271,44272],{"class":30,"line":33419},[28,44273,36809],{"class":105},[28,44275,44276],{"class":30,"line":33425},[28,44277,36814],{"class":105},[28,44279,44280,44282,44284],{"class":30,"line":33431},[28,44281,36819],{"class":34},[28,44283,33443],{"class":320},[28,44285,227],{"class":34},[28,44287,44288],{"class":30,"line":33437},[28,44289,33463],{"class":105},[28,44291,44292,44294,44296,44298,44300,44302],{"class":30,"line":33448},[28,44293,33469],{"class":34},[28,44295,39],{"class":38},[28,44297,33474],{"class":34},[28,44299,33477],{"class":5293},[28,44301,39],{"class":38},[28,44303,1623],{"class":34},[28,44305,44306,44308,44310,44312],{"class":30,"line":33454},[28,44307,33487],{"class":320},[28,44309,1065],{"class":34},[28,44311,33492],{"class":45},[28,44313,33495],{"class":34},[28,44315,44316,44318],{"class":30,"line":33460},[28,44317,33501],{"class":320},[28,44319,33504],{"class":34},[28,44321,44322,44324],{"class":30,"line":33466},[28,44323,33510],{"class":320},[28,44325,33513],{"class":34},[28,44327,44328,44330],{"class":30,"line":33484},[28,44329,33519],{"class":320},[28,44331,33522],{"class":34},[28,44333,44334,44336],{"class":30,"line":33498},[28,44335,33528],{"class":320},[28,44337,33531],{"class":34},[28,44339,44340],{"class":30,"line":33507},[28,44341,33537],{"class":34},[28,44343,44344],{"class":30,"line":33516},[28,44345,33543],{"class":105},[28,44347,44348,44350],{"class":30,"line":33525},[28,44349,4167],{"class":38},[28,44351,33551],{"class":34},[28,44353,44354],{"class":30,"line":33534},[28,44355,2477],{"emptyLinePlaceholder":144},[28,44357,44358],{"class":30,"line":33540},[28,44359,33562],{"class":105},[28,44361,44362,44364,44366],{"class":30,"line":33546},[28,44363,32023],{"class":38},[28,44365,33570],{"class":2040},[28,44367,33573],{"class":34},[28,44369,44370],{"class":30,"line":33554},[28,44371,33579],{"class":105},[28,44373,44374,44376,44378,44380,44382,44384,44386,44388],{"class":30,"line":33559},[28,44375,33585],{"class":34},[28,44377,31769],{"class":5293},[28,44379,39],{"class":38},[28,44381,221],{"class":34},[28,44383,68],{"class":45},[28,44385,49],{"class":34},[28,44387,507],{"class":45},[28,44389,30573],{"class":34},[28,44391,44392],{"class":30,"line":33565},[28,44393,33605],{"class":105},[28,44395,44396],{"class":30,"line":33576},[28,44397,33611],{"class":105},[28,44399,44400],{"class":30,"line":33582},[28,44401,33617],{"class":105},[28,44403,44404,44406,44408,44410,44412,44414,44416],{"class":30,"line":33602},[28,44405,31803],{"class":34},[28,44407,46],{"class":45},[28,44409,49],{"class":34},[28,44411,52],{"class":45},[28,44413,49],{"class":34},[28,44415,46],{"class":45},[28,44417,227],{"class":34},[28,44419,44420],{"class":30,"line":33608},[28,44421,33640],{"class":105},[28,44423,44424],{"class":30,"line":33614},[28,44425,33646],{"class":105},[28,44427,44428],{"class":30,"line":33620},[28,44429,33652],{"class":105},[28,44431,44432],{"class":30,"line":33637},[28,44433,33658],{"class":105},[28,44435,44436],{"class":30,"line":33643},[28,44437,33664],{"class":105},[28,44439,44440,44442,44444,44446,44448,44450,44452,44454,44456],{"class":30,"line":33649},[28,44441,33670],{"class":34},[28,44443,33673],{"class":320},[28,44445,33676],{"class":34},[28,44447,33679],{"class":320},[28,44449,49],{"class":34},[28,44451,33684],{"class":5293},[28,44453,39],{"class":38},[28,44455,33689],{"class":320},[28,44457,227],{"class":34},[28,44459,44460,44462,44464,44466,44468,44470,44472,44474,44476],{"class":30,"line":33655},[28,44461,33670],{"class":34},[28,44463,33673],{"class":320},[28,44465,33701],{"class":34},[28,44467,33704],{"class":320},[28,44469,49],{"class":34},[28,44471,33684],{"class":5293},[28,44473,39],{"class":38},[28,44475,33713],{"class":320},[28,44477,227],{"class":34},[28,44479,44480],{"class":30,"line":33661},[28,44481,33721],{"class":105},[28,44483,44484],{"class":30,"line":33667},[28,44485,33727],{"class":34},[28,44487,44488],{"class":30,"line":33694},[28,44489,33733],{"class":105},[28,44491,44492,44494,44496],{"class":30,"line":33718},[28,44493,33739],{"class":34},[28,44495,33742],{"class":320},[28,44497,227],{"class":34},[28,44499,44500,44502,44504],{"class":30,"line":33724},[28,44501,33750],{"class":34},[28,44503,33753],{"class":320},[28,44505,227],{"class":34},[28,44507,44508],{"class":30,"line":33730},[28,44509,33761],{"class":105},[28,44511,44512,44514,44516,44518,44520,44522,44524],{"class":30,"line":33736},[28,44513,31803],{"class":34},[28,44515,46],{"class":45},[28,44517,49],{"class":34},[28,44519,52],{"class":45},[28,44521,49],{"class":34},[28,44523,52],{"class":45},[28,44525,227],{"class":34},[28,44527,44528,44530,44532,44534,44536,44538,44540,44542,44544],{"class":30,"line":33747},[28,44529,33670],{"class":34},[28,44531,33673],{"class":320},[28,44533,33788],{"class":34},[28,44535,33679],{"class":320},[28,44537,49],{"class":34},[28,44539,33684],{"class":5293},[28,44541,39],{"class":38},[28,44543,33799],{"class":320},[28,44545,227],{"class":34},[28,44547,44548,44550,44552,44554,44556,44558,44560,44562,44564],{"class":30,"line":33758},[28,44549,33670],{"class":34},[28,44551,33673],{"class":320},[28,44553,33811],{"class":34},[28,44555,33704],{"class":320},[28,44557,49],{"class":34},[28,44559,33684],{"class":5293},[28,44561,39],{"class":38},[28,44563,33822],{"class":320},[28,44565,227],{"class":34},[28,44567,44568],{"class":30,"line":33764},[28,44569,33830],{"class":105},[28,44571,44572],{"class":30,"line":33781},[28,44573,33727],{"class":34},[28,44575,44576,44578,44580],{"class":30,"line":33804},[28,44577,33739],{"class":34},[28,44579,33673],{"class":320},[28,44581,227],{"class":34},[28,44583,44584,44586,44588],{"class":30,"line":33827},[28,44585,33750],{"class":34},[28,44587,33852],{"class":320},[28,44589,227],{"class":34},[28,44591,44592],{"class":30,"line":33833},[28,44593,33860],{"class":34},[28,44595,44596],{"class":30,"line":33838},[28,44597,2477],{"emptyLinePlaceholder":144},[28,44599,44600],{"class":30,"line":33847},[28,44601,33871],{"class":105},[28,44603,44604,44606,44608,44610,44612],{"class":30,"line":33857},[28,44605,1608],{"class":38},[28,44607,31296],{"class":45},[28,44609,3026],{"class":38},[28,44611,31301],{"class":320},[28,44613,3816],{"class":34},[28,44615,44616],{"class":30,"line":33863},[28,44617,33890],{"class":105},[28,44619,44620,44623,44625],{"class":30,"line":33868},[28,44621,44622],{"class":34},"    GoogLeNet",[28,44624,39],{"class":38},[28,44626,44627],{"class":34},"GoogLeNet(Inception)\n",[28,44629,44630,44632,44634],{"class":30,"line":33874},[28,44631,33907],{"class":34},[28,44633,39],{"class":38},[28,44635,33912],{"class":34},[28,44637,44638,44640,44642,44645,44647,44649,44651],{"class":30,"line":33887},[28,44639,33469],{"class":34},[28,44641,39],{"class":38},[28,44643,44644],{"class":34},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[28,44646,33925],{"class":5293},[28,44648,39],{"class":38},[28,44650,1155],{"class":45},[28,44652,227],{"class":34},[28,44654,44655],{"class":30,"line":33893},[28,44656,33937],{"class":34},[171,44658,44659],{"start":109},[174,44660,40650],{},[18,44662,44664],{"className":20,"code":44663,"language":22,"meta":23,"style":23},"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",[25,44665,44666,44672,44682,44692,44696,44706,44717,44721,44725,44729,44737,44753,44763,44779,44789,44803,44807,44817,44827,44837,44843,44847,44851,44859,44863,44879,44887,44891,44895,44903,44911,44915,44919,44923,44927,44933,44937,44947,44955,44963,44967,44971,44975,44983,44987,45003,45007,45011,45015,45027,45031,45043,45047,45051,45063,45067,45077,45081,45085,45097,45101,45109,45113,45117,45125,45129,45137,45141,45145,45149,45153,45157,45173,45181,45185,45189,45237,45243,45247,45257,45265,45273,45277,45281,45285,45289,45297,45301,45317,45321,45329,45337],{"__ignoreMap":23},[28,44667,44668,44670],{"class":30,"line":31},[28,44669,30468],{"class":38},[28,44671,30471],{"class":34},[28,44673,44674,44676,44678,44680],{"class":30,"line":94},[28,44675,30468],{"class":38},[28,44677,31491],{"class":34},[28,44679,31459],{"class":38},[28,44681,31496],{"class":34},[28,44683,44684,44686,44688,44690],{"class":30,"line":109},[28,44685,30813],{"class":38},[28,44687,31474],{"class":34},[28,44689,30468],{"class":38},[28,44691,31479],{"class":34},[28,44693,44694],{"class":30,"line":125},[28,44695,33998],{"class":105},[28,44697,44698,44700,44702,44704],{"class":30,"line":131},[28,44699,30813],{"class":38},[28,44701,31444],{"class":34},[28,44703,30468],{"class":38},[28,44705,31449],{"class":34},[28,44707,44708,44710,44712,44714],{"class":30,"line":1291},[28,44709,30813],{"class":38},[28,44711,31990],{"class":34},[28,44713,30468],{"class":38},[28,44715,44716],{"class":34}," GoogLeNet,Inception\n",[28,44718,44719],{"class":30,"line":1297},[28,44720,2477],{"emptyLinePlaceholder":144},[28,44722,44723],{"class":30,"line":1388},[28,44724,2477],{"emptyLinePlaceholder":144},[28,44726,44727],{"class":30,"line":1394},[28,44728,34027],{"class":105},[28,44730,44731,44733,44735],{"class":30,"line":1406},[28,44732,32023],{"class":38},[28,44734,34034],{"class":2040},[28,44736,32029],{"class":34},[28,44738,44739,44741,44743,44745,44747,44749,44751],{"class":30,"line":1689},[28,44740,34041],{"class":34},[28,44742,39],{"class":38},[28,44744,31531],{"class":34},[28,44746,31534],{"class":5293},[28,44748,39],{"class":38},[28,44750,31539],{"class":320},[28,44752,31542],{"class":34},[28,44754,44755,44757,44759,44761],{"class":30,"line":1694},[28,44756,34058],{"class":5293},[28,44758,39],{"class":38},[28,44760,34063],{"class":45},[28,44762,31542],{"class":34},[28,44764,44765,44767,44769,44771,44773,44775,44777],{"class":30,"line":1700},[28,44766,34070],{"class":5293},[28,44768,39],{"class":38},[28,44770,31569],{"class":34},[28,44772,31572],{"class":5293},[28,44774,39],{"class":38},[28,44776,35525],{"class":45},[28,44778,31580],{"class":34},[28,44780,44781,44783,44785,44787],{"class":30,"line":1705},[28,44782,34087],{"class":5293},[28,44784,39],{"class":38},[28,44786,31552],{"class":45},[28,44788,227],{"class":34},[28,44790,44791,44793,44795,44797,44799,44801],{"class":30,"line":1719},[28,44792,34098],{"class":34},[28,44794,39],{"class":38},[28,44796,31610],{"class":34},[28,44798,31613],{"class":5293},[28,44800,39],{"class":38},[28,44802,34109],{"class":34},[28,44804,44805],{"class":30,"line":1724},[28,44806,34114],{"class":105},[28,44808,44809,44811,44813,44815],{"class":30,"line":1730},[28,44810,34119],{"class":5293},[28,44812,39],{"class":38},[28,44814,46],{"class":45},[28,44816,31542],{"class":34},[28,44818,44819,44821,44823,44825],{"class":30,"line":1751},[28,44820,34130],{"class":5293},[28,44822,39],{"class":38},[28,44824,31552],{"class":45},[28,44826,31542],{"class":34},[28,44828,44829,44831,44833,44835],{"class":30,"line":1756},[28,44830,34141],{"class":5293},[28,44832,39],{"class":38},[28,44834,407],{"class":45},[28,44836,227],{"class":34},[28,44838,44839,44841],{"class":30,"line":1770},[28,44840,4167],{"class":38},[28,44842,34154],{"class":34},[28,44844,44845],{"class":30,"line":1775},[28,44846,2477],{"emptyLinePlaceholder":144},[28,44848,44849],{"class":30,"line":1804},[28,44850,34163],{"class":105},[28,44852,44853,44855,44857],{"class":30,"line":1809},[28,44854,32023],{"class":38},[28,44856,34170],{"class":2040},[28,44858,34173],{"class":34},[28,44860,44861],{"class":30,"line":1826},[28,44862,34178],{"class":105},[28,44864,44865,44867,44869,44871,44873,44875,44877],{"class":30,"line":1831},[28,44866,31313],{"class":34},[28,44868,39],{"class":38},[28,44870,31320],{"class":320},[28,44872,1781],{"class":38},[28,44874,31325],{"class":34},[28,44876,1778],{"class":38},[28,44878,34195],{"class":320},[28,44880,44881,44883,44885],{"class":30,"line":1836},[28,44882,31365],{"class":34},[28,44884,39],{"class":38},[28,44886,32365],{"class":34},[28,44888,44889],{"class":30,"line":1841},[28,44890,2477],{"emptyLinePlaceholder":144},[28,44892,44893],{"class":30,"line":1855},[28,44894,34212],{"class":105},[28,44896,44897,44899,44901],{"class":30,"line":1860},[28,44898,34217],{"class":34},[28,44900,39],{"class":38},[28,44902,32418],{"class":45},[28,44904,44905,44907,44909],{"class":30,"line":2654},[28,44906,34226],{"class":34},[28,44908,39],{"class":38},[28,44910,3162],{"class":45},[28,44912,44913],{"class":30,"line":2668},[28,44914,2477],{"emptyLinePlaceholder":144},[28,44916,44917],{"class":30,"line":2676},[28,44918,34239],{"class":105},[28,44920,44921],{"class":30,"line":2681},[28,44922,34244],{"class":105},[28,44924,44925],{"class":30,"line":2687},[28,44926,34249],{"class":105},[28,44928,44929,44931],{"class":30,"line":2693},[28,44930,34254],{"class":38},[28,44932,32960],{"class":34},[28,44934,44935],{"class":30,"line":2698},[28,44936,34261],{"class":105},[28,44938,44939,44941,44943,44945],{"class":30,"line":8025},[28,44940,3480],{"class":38},[28,44942,34268],{"class":34},[28,44944,26121],{"class":38},[28,44946,34273],{"class":34},[28,44948,44949,44951,44953],{"class":30,"line":8049},[28,44950,34278],{"class":34},[28,44952,39],{"class":38},[28,44954,34283],{"class":34},[28,44956,44957,44959,44961],{"class":30,"line":8054},[28,44958,34288],{"class":34},[28,44960,39],{"class":38},[28,44962,34293],{"class":34},[28,44964,44965],{"class":30,"line":8060},[28,44966,34298],{"class":105},[28,44968,44969],{"class":30,"line":8087},[28,44970,32951],{"class":34},[28,44972,44973],{"class":30,"line":8092},[28,44974,34307],{"class":105},[28,44976,44977,44979,44981],{"class":30,"line":8098},[28,44978,32736],{"class":34},[28,44980,39],{"class":38},[28,44982,34316],{"class":34},[28,44984,44985],{"class":30,"line":8110},[28,44986,34321],{"class":105},[28,44988,44989,44991,44993,44995,44997,44999,45001],{"class":30,"line":8122},[28,44990,32753],{"class":34},[28,44992,39],{"class":38},[28,44994,32758],{"class":34},[28,44996,32761],{"class":5293},[28,44998,39],{"class":38},[28,45000,46],{"class":45},[28,45002,227],{"class":34},[28,45004,45005],{"class":30,"line":8134},[28,45006,34342],{"class":105},[28,45008,45009],{"class":30,"line":9793},[28,45010,34347],{"class":105},[28,45012,45013],{"class":30,"line":9818},[28,45014,34352],{"class":105},[28,45016,45017,45019,45021,45023,45025],{"class":30,"line":9841},[28,45018,34357],{"class":34},[28,45020,9554],{"class":38},[28,45022,32863],{"class":34},[28,45024,3026],{"class":38},[28,45026,34366],{"class":34},[28,45028,45029],{"class":30,"line":9865},[28,45030,34371],{"class":105},[28,45032,45033,45035,45037,45039,45041],{"class":30,"line":9870},[28,45034,34376],{"class":34},[28,45036,9554],{"class":38},[28,45038,34381],{"class":34},[28,45040,407],{"class":45},[28,45042,227],{"class":34},[28,45044,45045],{"class":30,"line":9875},[28,45046,2477],{"emptyLinePlaceholder":144},[28,45048,45049],{"class":30,"line":9880},[28,45050,34394],{"class":105},[28,45052,45053,45055,45057,45059,45061],{"class":30,"line":9889},[28,45054,34399],{"class":34},[28,45056,39],{"class":38},[28,45058,34404],{"class":34},[28,45060,794],{"class":38},[28,45062,34409],{"class":34},[28,45064,45065],{"class":30,"line":9894},[28,45066,34414],{"class":105},[28,45068,45069,45071,45073,45075],{"class":30,"line":9900},[28,45070,32527],{"class":45},[28,45072,221],{"class":34},[28,45074,34423],{"class":320},[28,45076,34426],{"class":34},[28,45078,45079],{"class":30,"line":9921},[28,45080,2477],{"emptyLinePlaceholder":144},[28,45082,45083],{"class":30,"line":9927},[28,45084,34435],{"class":105},[28,45086,45087,45089,45091,45093,45095],{"class":30,"line":9941},[28,45088,1608],{"class":38},[28,45090,31296],{"class":45},[28,45092,3026],{"class":38},[28,45094,31301],{"class":320},[28,45096,3816],{"class":34},[28,45098,45099],{"class":30,"line":9947},[28,45100,34452],{"class":105},[28,45102,45103,45105,45107],{"class":30,"line":9974},[28,45104,31365],{"class":34},[28,45106,39],{"class":38},[28,45108,44627],{"class":34},[28,45110,45111],{"class":30,"line":9983},[28,45112,34465],{"class":105},[28,45114,45115],{"class":30,"line":9989},[28,45116,34470],{"class":105},[28,45118,45119,45121,45123],{"class":30,"line":9997},[28,45120,34475],{"class":34},[28,45122,34478],{"class":320},[28,45124,30573],{"class":34},[28,45126,45127],{"class":30,"line":10002},[28,45128,34485],{"class":105},[28,45130,45131,45133,45135],{"class":30,"line":16681},[28,45132,34098],{"class":34},[28,45134,39],{"class":38},[28,45136,34494],{"class":34},[28,45138,45139],{"class":30,"line":16687},[28,45140,34499],{"class":105},[28,45142,45143],{"class":30,"line":16710},[28,45144,34504],{"class":34},[28,45146,45147],{"class":30,"line":16716},[28,45148,2477],{"emptyLinePlaceholder":144},[28,45150,45151],{"class":30,"line":16739},[28,45152,34513],{"class":105},[28,45154,45155],{"class":30,"line":16753},[28,45156,34518],{"class":105},[28,45158,45159,45161,45163,45165,45167,45169,45171],{"class":30,"line":16773},[28,45160,31313],{"class":34},[28,45162,39],{"class":38},[28,45164,31320],{"class":320},[28,45166,1781],{"class":38},[28,45168,31325],{"class":34},[28,45170,1778],{"class":38},[28,45172,34195],{"class":320},[28,45174,45175,45177,45179],{"class":30,"line":16779},[28,45176,31365],{"class":34},[28,45178,39],{"class":38},[28,45180,32365],{"class":34},[28,45182,45183],{"class":30,"line":16790},[28,45184,34547],{"class":105},[28,45186,45187],{"class":30,"line":16813},[28,45188,34552],{"class":105},[28,45190,45191,45193,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235],{"class":30,"line":16835},[28,45192,34557],{"class":34},[28,45194,39],{"class":38},[28,45196,1096],{"class":34},[28,45198,34564],{"class":320},[28,45200,49],{"class":34},[28,45202,34569],{"class":320},[28,45204,49],{"class":34},[28,45206,34574],{"class":320},[28,45208,49],{"class":34},[28,45210,34579],{"class":320},[28,45212,49],{"class":34},[28,45214,34584],{"class":320},[28,45216,49],{"class":34},[28,45218,34589],{"class":320},[28,45220,49],{"class":34},[28,45222,34594],{"class":320},[28,45224,49],{"class":34},[28,45226,34599],{"class":320},[28,45228,49],{"class":34},[28,45230,34604],{"class":320},[28,45232,49],{"class":34},[28,45234,34609],{"class":320},[28,45236,33322],{"class":34},[28,45238,45239,45241],{"class":30,"line":16840},[28,45240,34254],{"class":38},[28,45242,32960],{"class":34},[28,45244,45245],{"class":30,"line":16846},[28,45246,34622],{"class":105},[28,45248,45249,45251,45253,45255],{"class":30,"line":16860},[28,45250,3480],{"class":38},[28,45252,34629],{"class":34},[28,45254,26121],{"class":38},[28,45256,34273],{"class":34},[28,45258,45259,45261,45263],{"class":30,"line":16873},[28,45260,32686],{"class":34},[28,45262,39],{"class":38},[28,45264,32691],{"class":34},[28,45266,45267,45269,45271],{"class":30,"line":16878},[28,45268,32701],{"class":34},[28,45270,39],{"class":38},[28,45272,32706],{"class":34},[28,45274,45275],{"class":30,"line":16892},[28,45276,2477],{"emptyLinePlaceholder":144},[28,45278,45279],{"class":30,"line":16897},[28,45280,34658],{"class":105},[28,45282,45283],{"class":30,"line":16903},[28,45284,32951],{"class":34},[28,45286,45287],{"class":30,"line":16908},[28,45288,34667],{"class":105},[28,45290,45291,45293,45295],{"class":30,"line":16922},[28,45292,32736],{"class":34},[28,45294,39],{"class":38},[28,45296,32741],{"class":34},[28,45298,45299],{"class":30,"line":16927},[28,45300,34680],{"class":105},[28,45302,45303,45305,45307,45309,45311,45313,45315],{"class":30,"line":16932},[28,45304,32753],{"class":34},[28,45306,39],{"class":38},[28,45308,32758],{"class":34},[28,45310,32761],{"class":5293},[28,45312,39],{"class":38},[28,45314,46],{"class":45},[28,45316,227],{"class":34},[28,45318,45319],{"class":30,"line":16946},[28,45320,34701],{"class":105},[28,45322,45323,45325,45327],{"class":30,"line":16958},[28,45324,34706],{"class":34},[28,45326,39],{"class":38},[28,45328,34711],{"class":34},[28,45330,45331,45333,45335],{"class":30,"line":16963},[28,45332,34716],{"class":34},[28,45334,39],{"class":38},[28,45336,34721],{"class":34},[28,45338,45339,45341,45343,45345,45347,45349,45351,45353],{"class":30,"line":16976},[28,45340,34726],{"class":45},[28,45342,221],{"class":34},[28,45344,34731],{"class":320},[28,45346,34734],{"class":34},[28,45348,34737],{"class":320},[28,45350,49],{"class":34},[28,45352,34742],{"class":320},[28,45354,34745],{"class":34},[188,45356,45358],{"id":45357},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45360,45361],{},"猫狗分类任务",[14,45363,45364],{},"划分数据集和验证集",[18,45366,45368],{"className":20,"code":45367,"language":22,"meta":23,"style":23},"# 创建脚本，用于划分数据集和验证集\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",[25,45369,45370,45375,45382,45387,45398,45405,45409,45419,45433,45442,45446,45451,45461,45481,45485,45490,45500,45511,45524,45528,45533,45542,45552,45563,45567,45572,45582,45586,45591,45596,45601,45606,45611,45615,45625,45652,45665,45677,45704,45709,45714,45728,45733,45745,45760,45775,45783,45787,45792,45798,45810,45823,45828,45833,45838,45888,45894,45898],{"__ignoreMap":23},[28,45371,45372],{"class":30,"line":31},[28,45373,45374],{"class":105},"# 创建脚本，用于划分数据集和验证集\n",[28,45376,45377,45379],{"class":30,"line":94},[28,45378,30468],{"class":38},[28,45380,45381],{"class":34}," os\n",[28,45383,45384],{"class":30,"line":109},[28,45385,45386],{"class":105},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[28,45388,45389,45391,45394,45396],{"class":30,"line":125},[28,45390,30813],{"class":38},[28,45392,45393],{"class":34}," shutil ",[28,45395,30468],{"class":38},[28,45397,31898],{"class":34},[28,45399,45400,45402],{"class":30,"line":131},[28,45401,30468],{"class":38},[28,45403,45404],{"class":34}," random\n",[28,45406,45407],{"class":30,"line":1291},[28,45408,2477],{"emptyLinePlaceholder":144},[28,45410,45411,45413,45416],{"class":30,"line":1297},[28,45412,32023],{"class":38},[28,45414,45415],{"class":2040}," mkfile",[28,45417,45418],{"class":34},"(file):\n",[28,45420,45421,45423,45425,45428,45431],{"class":30,"line":1388},[28,45422,3178],{"class":38},[28,45424,39006],{"class":38},[28,45426,45427],{"class":34}," os.path.exists(",[28,45429,45430],{"class":5293},"file",[28,45432,30862],{"class":34},[28,45434,45435,45438,45440],{"class":30,"line":1394},[28,45436,45437],{"class":34},"        os.makedirs(",[28,45439,45430],{"class":5293},[28,45441,227],{"class":34},[28,45443,45444],{"class":30,"line":1406},[28,45445,2477],{"emptyLinePlaceholder":144},[28,45447,45448],{"class":30,"line":1689},[28,45449,45450],{"class":105},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[28,45452,45453,45456,45458],{"class":30,"line":1694},[28,45454,45455],{"class":34},"file_path",[28,45457,39],{"class":38},[28,45459,45460],{"class":320},"'data_cat_dog'\n",[28,45462,45463,45466,45468,45471,45473,45476,45478],{"class":30,"line":1700},[28,45464,45465],{"class":34},"flower_class",[28,45467,39],{"class":38},[28,45469,45470],{"class":34},"[cla ",[28,45472,3102],{"class":38},[28,45474,45475],{"class":34}," cla ",[28,45477,26121],{"class":38},[28,45479,45480],{"class":34}," os.listdir(file_path)]\n",[28,45482,45483],{"class":30,"line":1705},[28,45484,2477],{"emptyLinePlaceholder":144},[28,45486,45487],{"class":30,"line":1719},[28,45488,45489],{"class":105},"# 创建训练集train文件夹\n",[28,45491,45492,45495,45498],{"class":30,"line":1724},[28,45493,45494],{"class":34},"mkfile(",[28,45496,45497],{"class":320},"'data\u002Ftrain'",[28,45499,227],{"class":34},[28,45501,45502,45504,45506,45508],{"class":30,"line":1730},[28,45503,3102],{"class":38},[28,45505,45475],{"class":34},[28,45507,26121],{"class":38},[28,45509,45510],{"class":34}," flower_class:\n",[28,45512,45513,45516,45519,45521],{"class":30,"line":1751},[28,45514,45515],{"class":34},"    mkfile(",[28,45517,45518],{"class":320},"'data\u002Ftrain\u002F'",[28,45520,693],{"class":38},[28,45522,45523],{"class":34},"cla)\n",[28,45525,45526],{"class":30,"line":1756},[28,45527,2477],{"emptyLinePlaceholder":144},[28,45529,45530],{"class":30,"line":1770},[28,45531,45532],{"class":105},"# 创建验证集val文件夹\n",[28,45534,45535,45537,45540],{"class":30,"line":1775},[28,45536,45494],{"class":34},[28,45538,45539],{"class":320},"'data\u002Ftest'",[28,45541,227],{"class":34},[28,45543,45544,45546,45548,45550],{"class":30,"line":1804},[28,45545,3102],{"class":38},[28,45547,45475],{"class":34},[28,45549,26121],{"class":38},[28,45551,45510],{"class":34},[28,45553,45554,45556,45559,45561],{"class":30,"line":1809},[28,45555,45515],{"class":34},[28,45557,45558],{"class":320},"'data\u002Ftest\u002F'",[28,45560,693],{"class":38},[28,45562,45523],{"class":34},[28,45564,45565],{"class":30,"line":1826},[28,45566,2477],{"emptyLinePlaceholder":144},[28,45568,45569],{"class":30,"line":1831},[28,45570,45571],{"class":105},"# 划分比例，训练集：测试集=9：1\n",[28,45573,45574,45577,45579],{"class":30,"line":1836},[28,45575,45576],{"class":34},"split_rate",[28,45578,39],{"class":38},[28,45580,45581],{"class":45},"0.1\n",[28,45583,45584],{"class":30,"line":1841},[28,45585,2477],{"emptyLinePlaceholder":144},[28,45587,45588],{"class":30,"line":1855},[28,45589,45590],{"class":105},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[28,45592,45593],{"class":30,"line":1860},[28,45594,45595],{"class":105},"# cla_path：当前类别的原始图片路径\n",[28,45597,45598],{"class":30,"line":2654},[28,45599,45600],{"class":105},"# images：当前类别下所有图片的文件名列表\n",[28,45602,45603],{"class":30,"line":2668},[28,45604,45605],{"class":105},"# num：该类别图片总数\n",[28,45607,45608],{"class":30,"line":2676},[28,45609,45610],{"class":105},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[28,45612,45613],{"class":30,"line":2681},[28,45614,2477],{"emptyLinePlaceholder":144},[28,45616,45617,45619,45621,45623],{"class":30,"line":2687},[28,45618,3102],{"class":38},[28,45620,45475],{"class":34},[28,45622,26121],{"class":38},[28,45624,45510],{"class":34},[28,45626,45627,45630,45632,45635,45637,45640,45643,45645,45647,45649],{"class":30,"line":2693},[28,45628,45629],{"class":34},"    cla_path ",[28,45631,39],{"class":38},[28,45633,45634],{"class":34}," file_path ",[28,45636,693],{"class":38},[28,45638,45639],{"class":320}," '\u002F'",[28,45641,45642],{"class":38}," +",[28,45644,45475],{"class":34},[28,45646,693],{"class":38},[28,45648,45639],{"class":320},[28,45650,45651],{"class":105},"  # 某一类别的子目录\n",[28,45653,45654,45657,45659,45662],{"class":30,"line":2698},[28,45655,45656],{"class":34},"    images ",[28,45658,39],{"class":38},[28,45660,45661],{"class":34}," os.listdir(cla_path)  ",[28,45663,45664],{"class":105},"# iamges 列表存储了该目录下所有图像的名称\n",[28,45666,45667,45670,45672,45674],{"class":30,"line":8025},[28,45668,45669],{"class":34},"    num ",[28,45671,39],{"class":38},[28,45673,7408],{"class":45},[28,45675,45676],{"class":34},"(images)\n",[28,45678,45679,45682,45684,45687,45689,45691,45693,45696,45698,45701],{"class":30,"line":8049},[28,45680,45681],{"class":34},"    eval_index ",[28,45683,39],{"class":38},[28,45685,45686],{"class":34}," random.sample(images, ",[28,45688,705],{"class":5293},[28,45690,39],{"class":38},[28,45692,224],{"class":45},[28,45694,45695],{"class":34},"(num ",[28,45697,668],{"class":38},[28,45699,45700],{"class":34}," split_rate))  ",[28,45702,45703],{"class":105},"# 从images列表中随机抽取 k 个图像名称\n",[28,45705,45706],{"class":30,"line":8054},[28,45707,45708],{"class":105},"    # 遍历该类别下的所有图片\n",[28,45710,45711],{"class":30,"line":8060},[28,45712,45713],{"class":105},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[28,45715,45716,45718,45721,45723,45725],{"class":30,"line":8087},[28,45717,3278],{"class":38},[28,45719,45720],{"class":34}," index, image ",[28,45722,26121],{"class":38},[28,45724,31682],{"class":45},[28,45726,45727],{"class":34},"(images):\n",[28,45729,45730],{"class":30,"line":8092},[28,45731,45732],{"class":105},"        # eval_index 中保存验证集val的图像名称\n",[28,45734,45735,45737,45740,45742],{"class":30,"line":8098},[28,45736,2574],{"class":38},[28,45738,45739],{"class":34}," image ",[28,45741,26121],{"class":38},[28,45743,45744],{"class":34}," eval_index:\n",[28,45746,45747,45750,45752,45755,45757],{"class":30,"line":8110},[28,45748,45749],{"class":34},"            image_path ",[28,45751,39],{"class":38},[28,45753,45754],{"class":34}," cla_path ",[28,45756,693],{"class":38},[28,45758,45759],{"class":34}," image\n",[28,45761,45762,45765,45767,45770,45772],{"class":30,"line":8122},[28,45763,45764],{"class":34},"            new_path ",[28,45766,39],{"class":38},[28,45768,45769],{"class":320}," 'data\u002Ftest\u002F'",[28,45771,45642],{"class":38},[28,45773,45774],{"class":34}," cla\n",[28,45776,45777,45780],{"class":30,"line":8134},[28,45778,45779],{"class":34},"            copy(image_path, new_path)  ",[28,45781,45782],{"class":105},"# 将选中的图像复制到新路径\n",[28,45784,45785],{"class":30,"line":9793},[28,45786,2477],{"emptyLinePlaceholder":144},[28,45788,45789],{"class":30,"line":9818},[28,45790,45791],{"class":105},"        # 其余的图像保存在训练集train中\n",[28,45793,45794,45796],{"class":30,"line":9841},[28,45795,2611],{"class":38},[28,45797,3816],{"class":34},[28,45799,45800,45802,45804,45806,45808],{"class":30,"line":9865},[28,45801,45749],{"class":34},[28,45803,39],{"class":38},[28,45805,45754],{"class":34},[28,45807,693],{"class":38},[28,45809,45759],{"class":34},[28,45811,45812,45814,45816,45819,45821],{"class":30,"line":9870},[28,45813,45764],{"class":34},[28,45815,39],{"class":38},[28,45817,45818],{"class":320}," 'data\u002Ftrain\u002F'",[28,45820,45642],{"class":38},[28,45822,45774],{"class":34},[28,45824,45825],{"class":30,"line":9875},[28,45826,45827],{"class":34},"            copy(image_path, new_path)\n",[28,45829,45830],{"class":30,"line":9880},[28,45831,45832],{"class":105},"            # 打印进度条信息\n",[28,45834,45835],{"class":30,"line":9889},[28,45836,45837],{"class":105},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[28,45839,45840,45842,45844,45846,45849,45851,45853,45856,45858,45860,45862,45865,45868,45870,45872,45875,45878,45880,45882,45885],{"class":30,"line":9894},[28,45841,32527],{"class":45},[28,45843,221],{"class":34},[28,45845,465],{"class":320},[28,45847,45848],{"class":45},"\\r",[28,45850,1096],{"class":320},[28,45852,32535],{"class":45},[28,45854,45855],{"class":320},"] processing [",[28,45857,32535],{"class":45},[28,45859,794],{"class":320},[28,45861,32535],{"class":45},[28,45863,45864],{"class":320},"]\"",[28,45866,45867],{"class":34},".format(cla, index ",[28,45869,693],{"class":38},[28,45871,25196],{"class":45},[28,45873,45874],{"class":34},", num), ",[28,45876,45877],{"class":5293},"end",[28,45879,39],{"class":38},[28,45881,7729],{"class":320},[28,45883,45884],{"class":34},")  ",[28,45886,45887],{"class":105},"# processing bar\n",[28,45889,45890,45892],{"class":30,"line":9900},[28,45891,31375],{"class":45},[28,45893,2053],{"class":34},[28,45895,45896],{"class":30,"line":9921},[28,45897,2477],{"emptyLinePlaceholder":144},[28,45899,45900,45902,45904,45907],{"class":30,"line":9927},[28,45901,30491],{"class":45},[28,45903,221],{"class":34},[28,45905,45906],{"class":320},"\"processing done!\"",[28,45908,227],{"class":34},[14,45910,45911],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22075,45913,45915],{"id":45914},"_242模型代码","2.4.2.模型代码",[14,45917,45918],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[18,45920,45922],{"className":20,"code":45921,"language":22,"meta":23,"style":23},"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",[25,45923,45924,45930,45940,45950,45954,45970,45978,45992,46002,46006,46036,46040,46074,46120,46124,46158,46204,46208,46212,46246,46276,46280,46288,46302,46324,46346,46364,46368,46382,46386,46390,46406,46410,46418,46432,46442,46486,46490,46518,46522,46532,46560,46564,46600,46604,46632,46636,46646,46678,46710,46738,46742,46752,46784,46816,46848,46880,46912,46940,46944,46954,46986,47018,47030,47034,47046,47050,47054,47066,47074,47094,47098,47102,47106,47110,47114,47118,47132,47140,47148,47160,47174,47182,47186,47194,47204,47214,47224,47234,47244,47250,47254,47258,47270,47290,47298],{"__ignoreMap":23},[28,45925,45926,45928],{"class":30,"line":31},[28,45927,30468],{"class":38},[28,45929,30471],{"class":34},[28,45931,45932,45934,45936,45938],{"class":30,"line":94},[28,45933,30813],{"class":38},[28,45935,30816],{"class":34},[28,45937,30468],{"class":38},[28,45939,30821],{"class":34},[28,45941,45942,45944,45946,45948],{"class":30,"line":109},[28,45943,30813],{"class":38},[28,45945,30833],{"class":34},[28,45947,30468],{"class":38},[28,45949,30838],{"class":34},[28,45951,45952],{"class":30,"line":125},[28,45953,2477],{"emptyLinePlaceholder":144},[28,45955,45956,45958,45960,45962,45964,45966,45968],{"class":30,"line":131},[28,45957,14771],{"class":38},[28,45959,41569],{"class":2040},[28,45961,221],{"class":34},[28,45963,30854],{"class":2040},[28,45965,768],{"class":34},[28,45967,30859],{"class":2040},[28,45969,30862],{"class":34},[28,45971,45972,45974,45976],{"class":30,"line":1291},[28,45973,30877],{"class":38},[28,45975,30880],{"class":45},[28,45977,41588],{"class":34},[28,45979,45980,45982,45984,45986,45988,45990],{"class":30,"line":1297},[28,45981,30893],{"class":45},[28,45983,41595],{"class":34},[28,45985,30899],{"class":45},[28,45987,30902],{"class":34},[28,45989,30905],{"class":45},[28,45991,2053],{"class":34},[28,45993,45994,45996,45998,46000],{"class":30,"line":1388},[28,45995,30921],{"class":45},[28,45997,34847],{"class":34},[28,45999,39],{"class":38},[28,46001,34852],{"class":34},[28,46003,46004],{"class":30,"line":1394},[28,46005,41618],{"class":105},[28,46007,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032,46034],{"class":30,"line":1406},[28,46009,30921],{"class":45},[28,46011,41625],{"class":34},[28,46013,39],{"class":38},[28,46015,30929],{"class":34},[28,46017,30932],{"class":5293},[28,46019,39],{"class":38},[28,46021,41636],{"class":34},[28,46023,30941],{"class":5293},[28,46025,39],{"class":38},[28,46027,41643],{"class":34},[28,46029,30950],{"class":5293},[28,46031,39],{"class":38},[28,46033,46],{"class":45},[28,46035,227],{"class":34},[28,46037,46038],{"class":30,"line":1689},[28,46039,41656],{"class":105},[28,46041,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072],{"class":30,"line":1694},[28,46043,30921],{"class":45},[28,46045,41663],{"class":34},[28,46047,39],{"class":38},[28,46049,30929],{"class":34},[28,46051,30932],{"class":5293},[28,46053,39],{"class":38},[28,46055,41636],{"class":34},[28,46057,30941],{"class":5293},[28,46059,39],{"class":38},[28,46061,41680],{"class":34},[28,46063,407],{"class":45},[28,46065,41685],{"class":34},[28,46067,30950],{"class":5293},[28,46069,39],{"class":38},[28,46071,46],{"class":45},[28,46073,227],{"class":34},[28,46075,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114,46116,46118],{"class":30,"line":1700},[28,46077,30921],{"class":45},[28,46079,41700],{"class":34},[28,46081,39],{"class":38},[28,46083,30929],{"class":34},[28,46085,30932],{"class":5293},[28,46087,39],{"class":38},[28,46089,41680],{"class":34},[28,46091,407],{"class":45},[28,46093,41685],{"class":34},[28,46095,30941],{"class":5293},[28,46097,39],{"class":38},[28,46099,41680],{"class":34},[28,46101,46],{"class":45},[28,46103,41685],{"class":34},[28,46105,30950],{"class":5293},[28,46107,39],{"class":38},[28,46109,57],{"class":45},[28,46111,49],{"class":34},[28,46113,30959],{"class":5293},[28,46115,39],{"class":38},[28,46117,46],{"class":45},[28,46119,227],{"class":34},[28,46121,46122],{"class":30,"line":1705},[28,46123,41745],{"class":105},[28,46125,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156],{"class":30,"line":1719},[28,46127,30921],{"class":45},[28,46129,41752],{"class":34},[28,46131,39],{"class":38},[28,46133,30929],{"class":34},[28,46135,30932],{"class":5293},[28,46137,39],{"class":38},[28,46139,41636],{"class":34},[28,46141,30941],{"class":5293},[28,46143,39],{"class":38},[28,46145,41769],{"class":34},[28,46147,407],{"class":45},[28,46149,41685],{"class":34},[28,46151,30950],{"class":5293},[28,46153,39],{"class":38},[28,46155,46],{"class":45},[28,46157,227],{"class":34},[28,46159,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192,46194,46196,46198,46200,46202],{"class":30,"line":1724},[28,46161,30921],{"class":45},[28,46163,41788],{"class":34},[28,46165,39],{"class":38},[28,46167,30929],{"class":34},[28,46169,30932],{"class":5293},[28,46171,39],{"class":38},[28,46173,41769],{"class":34},[28,46175,407],{"class":45},[28,46177,41685],{"class":34},[28,46179,30941],{"class":5293},[28,46181,39],{"class":38},[28,46183,41769],{"class":34},[28,46185,46],{"class":45},[28,46187,41685],{"class":34},[28,46189,30950],{"class":5293},[28,46191,39],{"class":38},[28,46193,533],{"class":45},[28,46195,49],{"class":34},[28,46197,30959],{"class":5293},[28,46199,39],{"class":38},[28,46201,52],{"class":45},[28,46203,227],{"class":34},[28,46205,46206],{"class":30,"line":1730},[28,46207,41833],{"class":105},[28,46209,46210],{"class":30,"line":1751},[28,46211,41838],{"class":105},[28,46213,46214,46216,46218,46220,46222,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244],{"class":30,"line":1756},[28,46215,30921],{"class":45},[28,46217,41845],{"class":34},[28,46219,39],{"class":38},[28,46221,34905],{"class":34},[28,46223,30950],{"class":5293},[28,46225,39],{"class":38},[28,46227,57],{"class":45},[28,46229,49],{"class":34},[28,46231,31005],{"class":5293},[28,46233,39],{"class":38},[28,46235,46],{"class":45},[28,46237,49],{"class":34},[28,46239,30959],{"class":5293},[28,46241,39],{"class":38},[28,46243,46],{"class":45},[28,46245,227],{"class":34},[28,46247,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268,46270,46272,46274],{"class":30,"line":1770},[28,46249,30921],{"class":45},[28,46251,41880],{"class":34},[28,46253,39],{"class":38},[28,46255,30929],{"class":34},[28,46257,30932],{"class":5293},[28,46259,39],{"class":38},[28,46261,41636],{"class":34},[28,46263,30941],{"class":5293},[28,46265,39],{"class":38},[28,46267,41897],{"class":34},[28,46269,30950],{"class":5293},[28,46271,39],{"class":38},[28,46273,46],{"class":45},[28,46275,227],{"class":34},[28,46277,46278],{"class":30,"line":1775},[28,46279,2477],{"emptyLinePlaceholder":144},[28,46281,46282,46284,46286],{"class":30,"line":1804},[28,46283,30877],{"class":38},[28,46285,31169],{"class":2040},[28,46287,31172],{"class":34},[28,46289,46290,46292,46294,46296,46298,46300],{"class":30,"line":1809},[28,46291,41922],{"class":34},[28,46293,39],{"class":38},[28,46295,30899],{"class":45},[28,46297,35260],{"class":34},[28,46299,30899],{"class":45},[28,46301,41933],{"class":34},[28,46303,46304,46306,46308,46310,46312,46314,46316,46318,46320,46322],{"class":30,"line":1826},[28,46305,7162],{"class":34},[28,46307,39],{"class":38},[28,46309,30899],{"class":45},[28,46311,35260],{"class":34},[28,46313,30899],{"class":45},[28,46315,41948],{"class":34},[28,46317,30899],{"class":45},[28,46319,35260],{"class":34},[28,46321,30899],{"class":45},[28,46323,41957],{"class":34},[28,46325,46326,46328,46330,46332,46334,46336,46338,46340,46342,46344],{"class":30,"line":1831},[28,46327,41962],{"class":34},[28,46329,39],{"class":38},[28,46331,30899],{"class":45},[28,46333,35260],{"class":34},[28,46335,30899],{"class":45},[28,46337,41973],{"class":34},[28,46339,30899],{"class":45},[28,46341,35260],{"class":34},[28,46343,30899],{"class":45},[28,46345,41982],{"class":34},[28,46347,46348,46350,46352,46354,46356,46358,46360,46362],{"class":30,"line":1836},[28,46349,41987],{"class":34},[28,46351,39],{"class":38},[28,46353,30899],{"class":45},[28,46355,35260],{"class":34},[28,46357,30899],{"class":45},[28,46359,41998],{"class":34},[28,46361,30899],{"class":45},[28,46363,42003],{"class":34},[28,46365,46366],{"class":30,"line":1841},[28,46367,42008],{"class":105},[28,46369,46370,46372,46374,46376,46378,46380],{"class":30,"line":1855},[28,46371,14829],{"class":38},[28,46373,42015],{"class":34},[28,46375,32761],{"class":5293},[28,46377,39],{"class":38},[28,46379,46],{"class":45},[28,46381,227],{"class":34},[28,46383,46384],{"class":30,"line":1860},[28,46385,2477],{"emptyLinePlaceholder":144},[28,46387,46388],{"class":30,"line":2654},[28,46389,42036],{"class":105},[28,46391,46392,46394,46396,46398,46400,46402,46404],{"class":30,"line":2668},[28,46393,14771],{"class":38},[28,46395,42043],{"class":2040},[28,46397,221],{"class":34},[28,46399,30854],{"class":2040},[28,46401,768],{"class":34},[28,46403,30859],{"class":2040},[28,46405,30862],{"class":34},[28,46407,46408],{"class":30,"line":2676},[28,46409,42058],{"class":105},[28,46411,46412,46414,46416],{"class":30,"line":2681},[28,46413,30877],{"class":38},[28,46415,30880],{"class":45},[28,46417,42067],{"class":34},[28,46419,46420,46422,46424,46426,46428,46430],{"class":30,"line":2687},[28,46421,30893],{"class":45},[28,46423,42074],{"class":34},[28,46425,30899],{"class":45},[28,46427,30902],{"class":34},[28,46429,30905],{"class":45},[28,46431,2053],{"class":34},[28,46433,46434,46436,46438,46440],{"class":30,"line":2693},[28,46435,30921],{"class":45},[28,46437,42089],{"class":34},[28,46439,39],{"class":38},[28,46441,38085],{"class":34},[28,46443,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484],{"class":30,"line":2698},[28,46445,38090],{"class":34},[28,46447,30932],{"class":5293},[28,46449,39],{"class":38},[28,46451,57],{"class":45},[28,46453,49],{"class":34},[28,46455,30941],{"class":5293},[28,46457,39],{"class":38},[28,46459,419],{"class":45},[28,46461,49],{"class":34},[28,46463,30950],{"class":5293},[28,46465,39],{"class":38},[28,46467,583],{"class":45},[28,46469,49],{"class":34},[28,46471,31005],{"class":5293},[28,46473,39],{"class":38},[28,46475,52],{"class":45},[28,46477,49],{"class":34},[28,46479,30959],{"class":5293},[28,46481,39],{"class":38},[28,46483,57],{"class":45},[28,46485,38123],{"class":34},[28,46487,46488],{"class":30,"line":8025},[28,46489,38128],{"class":34},[28,46491,46492,46494,46496,46498,46500,46502,46504,46506,46508,46510,46512,46514,46516],{"class":30,"line":8049},[28,46493,38173],{"class":34},[28,46495,30950],{"class":5293},[28,46497,39],{"class":38},[28,46499,57],{"class":45},[28,46501,49],{"class":34},[28,46503,31005],{"class":5293},[28,46505,39],{"class":38},[28,46507,52],{"class":45},[28,46509,49],{"class":34},[28,46511,30959],{"class":5293},[28,46513,39],{"class":38},[28,46515,46],{"class":45},[28,46517,227],{"class":34},[28,46519,46520],{"class":30,"line":8054},[28,46521,38202],{"class":34},[28,46523,46524,46526,46528,46530],{"class":30,"line":8060},[28,46525,30921],{"class":45},[28,46527,42180],{"class":34},[28,46529,39],{"class":38},[28,46531,38085],{"class":34},[28,46533,46534,46536,46538,46540,46542,46544,46546,46548,46550,46552,46554,46556,46558],{"class":30,"line":8087},[28,46535,38090],{"class":34},[28,46537,30932],{"class":5293},[28,46539,39],{"class":38},[28,46541,419],{"class":45},[28,46543,49],{"class":34},[28,46545,30941],{"class":5293},[28,46547,39],{"class":38},[28,46549,419],{"class":45},[28,46551,49],{"class":34},[28,46553,30950],{"class":5293},[28,46555,39],{"class":38},[28,46557,46],{"class":45},[28,46559,38123],{"class":34},[28,46561,46562],{"class":30,"line":8092},[28,46563,38128],{"class":34},[28,46565,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598],{"class":30,"line":8098},[28,46567,38090],{"class":34},[28,46569,30932],{"class":5293},[28,46571,39],{"class":38},[28,46573,419],{"class":45},[28,46575,49],{"class":34},[28,46577,30941],{"class":5293},[28,46579,39],{"class":38},[28,46581,42235],{"class":45},[28,46583,49],{"class":34},[28,46585,30950],{"class":5293},[28,46587,39],{"class":38},[28,46589,57],{"class":45},[28,46591,49],{"class":34},[28,46593,30959],{"class":5293},[28,46595,39],{"class":38},[28,46597,46],{"class":45},[28,46599,38123],{"class":34},[28,46601,46602],{"class":30,"line":8110},[28,46603,38128],{"class":34},[28,46605,46606,46608,46610,46612,46614,46616,46618,46620,46622,46624,46626,46628,46630],{"class":30,"line":8122},[28,46607,38173],{"class":34},[28,46609,30950],{"class":5293},[28,46611,39],{"class":38},[28,46613,57],{"class":45},[28,46615,49],{"class":34},[28,46617,31005],{"class":5293},[28,46619,39],{"class":38},[28,46621,52],{"class":45},[28,46623,49],{"class":34},[28,46625,30959],{"class":5293},[28,46627,39],{"class":38},[28,46629,46],{"class":45},[28,46631,227],{"class":34},[28,46633,46634],{"class":30,"line":8134},[28,46635,38202],{"class":34},[28,46637,46638,46640,46642,46644],{"class":30,"line":9793},[28,46639,30921],{"class":45},[28,46641,42296],{"class":34},[28,46643,39],{"class":38},[28,46645,38085],{"class":34},[28,46647,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676],{"class":30,"line":9818},[28,46649,42305],{"class":34},[28,46651,42235],{"class":45},[28,46653,49],{"class":34},[28,46655,419],{"class":45},[28,46657,42314],{"class":34},[28,46659,425],{"class":45},[28,46661,49],{"class":34},[28,46663,32146],{"class":45},[28,46665,42323],{"class":34},[28,46667,811],{"class":45},[28,46669,49],{"class":34},[28,46671,413],{"class":45},[28,46673,42332],{"class":34},[28,46675,413],{"class":45},[28,46677,38123],{"class":34},[28,46679,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708],{"class":30,"line":9841},[28,46681,42305],{"class":34},[28,46683,34946],{"class":45},[28,46685,49],{"class":34},[28,46687,32146],{"class":45},[28,46689,42314],{"class":34},[28,46691,32146],{"class":45},[28,46693,49],{"class":34},[28,46695,42235],{"class":45},[28,46697,42323],{"class":34},[28,46699,413],{"class":45},[28,46701,49],{"class":34},[28,46703,425],{"class":45},[28,46705,42332],{"class":34},[28,46707,419],{"class":45},[28,46709,38123],{"class":34},[28,46711,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736],{"class":30,"line":9865},[28,46713,38173],{"class":34},[28,46715,30950],{"class":5293},[28,46717,39],{"class":38},[28,46719,57],{"class":45},[28,46721,49],{"class":34},[28,46723,31005],{"class":5293},[28,46725,39],{"class":38},[28,46727,52],{"class":45},[28,46729,49],{"class":34},[28,46731,30959],{"class":5293},[28,46733,39],{"class":38},[28,46735,46],{"class":45},[28,46737,227],{"class":34},[28,46739,46740],{"class":30,"line":9870},[28,46741,38202],{"class":34},[28,46743,46744,46746,46748,46750],{"class":30,"line":9875},[28,46745,30921],{"class":45},[28,46747,42407],{"class":34},[28,46749,39],{"class":38},[28,46751,38085],{"class":34},[28,46753,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782],{"class":30,"line":9880},[28,46755,42305],{"class":34},[28,46757,42418],{"class":45},[28,46759,49],{"class":34},[28,46761,42235],{"class":45},[28,46763,42314],{"class":34},[28,46765,425],{"class":45},[28,46767,49],{"class":34},[28,46769,42431],{"class":45},[28,46771,42323],{"class":34},[28,46773,811],{"class":45},[28,46775,49],{"class":34},[28,46777,817],{"class":45},[28,46779,42332],{"class":34},[28,46781,419],{"class":45},[28,46783,38123],{"class":34},[28,46785,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814],{"class":30,"line":9889},[28,46787,42305],{"class":34},[28,46789,38533],{"class":45},[28,46791,49],{"class":34},[28,46793,21125],{"class":45},[28,46795,42314],{"class":34},[28,46797,828],{"class":45},[28,46799,49],{"class":34},[28,46801,31577],{"class":45},[28,46803,42323],{"class":34},[28,46805,1006],{"class":45},[28,46807,49],{"class":34},[28,46809,419],{"class":45},[28,46811,42332],{"class":34},[28,46813,419],{"class":45},[28,46815,38123],{"class":34},[28,46817,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846],{"class":30,"line":9894},[28,46819,42305],{"class":34},[28,46821,38533],{"class":45},[28,46823,49],{"class":34},[28,46825,32146],{"class":45},[28,46827,42314],{"class":34},[28,46829,32146],{"class":45},[28,46831,49],{"class":34},[28,46833,34946],{"class":45},[28,46835,42323],{"class":34},[28,46837,1006],{"class":45},[28,46839,49],{"class":34},[28,46841,419],{"class":45},[28,46843,42332],{"class":34},[28,46845,419],{"class":45},[28,46847,38123],{"class":34},[28,46849,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878],{"class":30,"line":9900},[28,46851,42305],{"class":34},[28,46853,38533],{"class":45},[28,46855,49],{"class":34},[28,46857,828],{"class":45},[28,46859,42314],{"class":34},[28,46861,32146],{"class":45},[28,46863,49],{"class":34},[28,46865,42528],{"class":45},[28,46867,42323],{"class":34},[28,46869,413],{"class":45},[28,46871,49],{"class":34},[28,46873,419],{"class":45},[28,46875,42332],{"class":34},[28,46877,419],{"class":45},[28,46879,38123],{"class":34},[28,46881,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910],{"class":30,"line":9921},[28,46883,42305],{"class":34},[28,46885,42549],{"class":45},[28,46887,49],{"class":34},[28,46889,34946],{"class":45},[28,46891,42314],{"class":34},[28,46893,21125],{"class":45},[28,46895,49],{"class":34},[28,46897,42562],{"class":45},[28,46899,42323],{"class":34},[28,46901,413],{"class":45},[28,46903,49],{"class":34},[28,46905,32146],{"class":45},[28,46907,42332],{"class":34},[28,46909,32146],{"class":45},[28,46911,38123],{"class":34},[28,46913,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938],{"class":30,"line":9927},[28,46915,38173],{"class":34},[28,46917,30950],{"class":5293},[28,46919,39],{"class":38},[28,46921,57],{"class":45},[28,46923,49],{"class":34},[28,46925,31005],{"class":5293},[28,46927,39],{"class":38},[28,46929,52],{"class":45},[28,46931,49],{"class":34},[28,46933,30959],{"class":5293},[28,46935,39],{"class":38},[28,46937,46],{"class":45},[28,46939,227],{"class":34},[28,46941,46942],{"class":30,"line":9941},[28,46943,38202],{"class":34},[28,46945,46946,46948,46950,46952],{"class":30,"line":9947},[28,46947,30921],{"class":45},[28,46949,42615],{"class":34},[28,46951,39],{"class":38},[28,46953,38085],{"class":34},[28,46955,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984],{"class":30,"line":9974},[28,46957,42305],{"class":34},[28,46959,42626],{"class":45},[28,46961,49],{"class":34},[28,46963,34946],{"class":45},[28,46965,42314],{"class":34},[28,46967,21125],{"class":45},[28,46969,49],{"class":34},[28,46971,42562],{"class":45},[28,46973,42323],{"class":34},[28,46975,413],{"class":45},[28,46977,49],{"class":34},[28,46979,32146],{"class":45},[28,46981,42332],{"class":34},[28,46983,32146],{"class":45},[28,46985,38123],{"class":34},[28,46987,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016],{"class":30,"line":9983},[28,46989,42305],{"class":34},[28,46991,42626],{"class":45},[28,46993,49],{"class":34},[28,46995,35016],{"class":45},[28,46997,42314],{"class":34},[28,46999,42235],{"class":45},[28,47001,49],{"class":34},[28,47003,35016],{"class":45},[28,47005,42323],{"class":34},[28,47007,817],{"class":45},[28,47009,49],{"class":34},[28,47011,32146],{"class":45},[28,47013,42332],{"class":34},[28,47015,32146],{"class":45},[28,47017,38123],{"class":34},[28,47019,47020,47022,47024,47026,47028],{"class":30,"line":9989},[28,47021,42689],{"class":34},[28,47023,46],{"class":45},[28,47025,49],{"class":34},[28,47027,46],{"class":45},[28,47029,42698],{"class":34},[28,47031,47032],{"class":30,"line":9997},[28,47033,38866],{"class":34},[28,47035,47036,47038,47040,47042,47044],{"class":30,"line":10002},[28,47037,38871],{"class":34},[28,47039,42709],{"class":45},[28,47041,49],{"class":34},[28,47043,52],{"class":45},[28,47045,227],{"class":34},[28,47047,47048],{"class":30,"line":16681},[28,47049,38202],{"class":34},[28,47051,47052],{"class":30,"line":16687},[28,47053,42724],{"class":105},[28,47055,47056,47058,47060,47062,47064],{"class":30,"line":16710},[28,47057,3480],{"class":38},[28,47059,38944],{"class":34},[28,47061,26121],{"class":38},[28,47063,38949],{"class":45},[28,47065,38952],{"class":34},[28,47067,47068,47070,47072],{"class":30,"line":16716},[28,47069,4719],{"class":38},[28,47071,38964],{"class":45},[28,47073,38967],{"class":34},[28,47075,47076,47078,47080,47082,47084,47086,47088,47090,47092],{"class":30,"line":16739},[28,47077,38977],{"class":34},[28,47079,42751],{"class":5293},[28,47081,39],{"class":38},[28,47083,42756],{"class":320},[28,47085,49],{"class":34},[28,47087,38980],{"class":5293},[28,47089,39],{"class":38},[28,47091,38985],{"class":320},[28,47093,227],{"class":34},[28,47095,47096],{"class":30,"line":16753},[28,47097,42771],{"class":105},[28,47099,47100],{"class":30,"line":16773},[28,47101,42776],{"class":105},[28,47103,47104],{"class":30,"line":16779},[28,47105,42781],{"class":105},[28,47107,47108],{"class":30,"line":16790},[28,47109,42786],{"class":105},[28,47111,47112],{"class":30,"line":16813},[28,47113,42791],{"class":105},[28,47115,47116],{"class":30,"line":16835},[28,47117,42796],{"class":105},[28,47119,47120,47122,47124,47126,47128,47130],{"class":30,"line":16840},[28,47121,38997],{"class":38},[28,47123,39000],{"class":34},[28,47125,39003],{"class":38},[28,47127,39006],{"class":38},[28,47129,39009],{"class":45},[28,47131,3816],{"class":34},[28,47133,47134,47136,47138],{"class":30,"line":16846},[28,47135,39021],{"class":34},[28,47137,407],{"class":45},[28,47139,227],{"class":34},[28,47141,47142,47144,47146],{"class":30,"line":16860},[28,47143,42823],{"class":38},[28,47145,38964],{"class":45},[28,47147,39040],{"class":34},[28,47149,47150,47152,47154,47156,47158],{"class":30,"line":16873},[28,47151,42832],{"class":34},[28,47153,407],{"class":45},[28,47155,49],{"class":34},[28,47157,39062],{"class":45},[28,47159,227],{"class":34},[28,47161,47162,47164,47166,47168,47170,47172],{"class":30,"line":16878},[28,47163,42845],{"class":38},[28,47165,39000],{"class":34},[28,47167,39003],{"class":38},[28,47169,39006],{"class":38},[28,47171,39009],{"class":45},[28,47173,3816],{"class":34},[28,47175,47176,47178,47180],{"class":30,"line":16892},[28,47177,42860],{"class":34},[28,47179,407],{"class":45},[28,47181,227],{"class":34},[28,47183,47184],{"class":30,"line":16897},[28,47185,35241],{"class":105},[28,47187,47188,47190,47192],{"class":30,"line":16903},[28,47189,30877],{"class":38},[28,47191,31169],{"class":2040},[28,47193,31172],{"class":34},[28,47195,47196,47198,47200,47202],{"class":30,"line":16908},[28,47197,31177],{"class":34},[28,47199,39],{"class":38},[28,47201,30899],{"class":45},[28,47203,42887],{"class":34},[28,47205,47206,47208,47210,47212],{"class":30,"line":16922},[28,47207,31177],{"class":34},[28,47209,39],{"class":38},[28,47211,30899],{"class":45},[28,47213,42898],{"class":34},[28,47215,47216,47218,47220,47222],{"class":30,"line":16927},[28,47217,31177],{"class":34},[28,47219,39],{"class":38},[28,47221,30899],{"class":45},[28,47223,42909],{"class":34},[28,47225,47226,47228,47230,47232],{"class":30,"line":16932},[28,47227,31177],{"class":34},[28,47229,39],{"class":38},[28,47231,30899],{"class":45},[28,47233,42920],{"class":34},[28,47235,47236,47238,47240,47242],{"class":30,"line":16946},[28,47237,31177],{"class":34},[28,47239,39],{"class":38},[28,47241,30899],{"class":45},[28,47243,42931],{"class":34},[28,47245,47246,47248],{"class":30,"line":16958},[28,47247,14829],{"class":38},[28,47249,31285],{"class":34},[28,47251,47252],{"class":30,"line":16963},[28,47253,2477],{"emptyLinePlaceholder":144},[28,47255,47256],{"class":30,"line":16976},[28,47257,42946],{"class":105},[28,47259,47260,47262,47264,47266,47268],{"class":30,"line":16981},[28,47261,1608],{"class":38},[28,47263,31296],{"class":45},[28,47265,3026],{"class":38},[28,47267,31301],{"class":320},[28,47269,3816],{"class":34},[28,47271,47272,47274,47276,47278,47280,47282,47284,47286,47288],{"class":30,"line":16986},[28,47273,31313],{"class":34},[28,47275,39],{"class":38},[28,47277,30527],{"class":34},[28,47279,31320],{"class":320},[28,47281,1781],{"class":38},[28,47283,31325],{"class":34},[28,47285,1778],{"class":38},[28,47287,30552],{"class":320},[28,47289,227],{"class":34},[28,47291,47292,47294,47296],{"class":30,"line":16991},[28,47293,31365],{"class":34},[28,47295,39],{"class":38},[28,47297,42987],{"class":34},[28,47299,47300,47302,47304,47306,47308,47310,47312,47314],{"class":30,"line":17004},[28,47301,31375],{"class":45},[28,47303,31378],{"class":34},[28,47305,46],{"class":45},[28,47307,49],{"class":34},[28,47309,31577],{"class":45},[28,47311,49],{"class":34},[28,47313,31577],{"class":45},[28,47315,31391],{"class":34},[22075,47317,47319],{"id":47318},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47321,47322],{},"计算图片的均值与方差，用于训练中归一化处理操作",[18,47324,47326],{"className":20,"code":47325,"language":22,"meta":23,"style":23},"# 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",[25,47327,47328,47333,47346,47351,47357,47362,47372,47376,47381,47391,47395,47400,47410,47427,47431,47436,47448,47460,47491,47500,47510,47520,47524,47529,47544,47548,47553,47558,47563,47573,47578,47603,47607,47612,47627,47631,47644,47648,47653,47658,47663,47668,47673,47683,47693,47716,47724,47732,47740,47744,47756,47760,47765,47769,47773,47780,47800,47824,47831,47845,47850,47855,47859,47873,47877,47889],{"__ignoreMap":23},[28,47329,47330],{"class":30,"line":31},[28,47331,47332],{"class":105},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[28,47334,47335,47337,47340,47343],{"class":30,"line":94},[28,47336,30813],{"class":38},[28,47338,47339],{"class":45}," PIL",[28,47341,47342],{"class":38}," import",[28,47344,47345],{"class":34}," Image\n",[28,47347,47348],{"class":30,"line":109},[28,47349,47350],{"class":105},"# os 用来处理文件夹和文件路径\n",[28,47352,47353,47355],{"class":30,"line":125},[28,47354,30468],{"class":38},[28,47356,45381],{"class":34},[28,47358,47359],{"class":30,"line":131},[28,47360,47361],{"class":105},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[28,47363,47364,47366,47368,47370],{"class":30,"line":1291},[28,47365,30468],{"class":38},[28,47367,31456],{"class":34},[28,47369,31459],{"class":38},[28,47371,31462],{"class":34},[28,47373,47374],{"class":30,"line":1297},[28,47375,2477],{"emptyLinePlaceholder":144},[28,47377,47378],{"class":30,"line":1388},[28,47379,47380],{"class":105},"# 文件夹路径，包含所有图片文件\n",[28,47382,47383,47386,47388],{"class":30,"line":1394},[28,47384,47385],{"class":34},"folder_path ",[28,47387,39],{"class":38},[28,47389,47390],{"class":320}," 'data_cat_dog'\n",[28,47392,47393],{"class":30,"line":1406},[28,47394,2477],{"emptyLinePlaceholder":144},[28,47396,47397],{"class":30,"line":1689},[28,47398,47399],{"class":105},"# 初始化累积变量\n",[28,47401,47402,47405,47407],{"class":30,"line":1694},[28,47403,47404],{"class":34},"total_pixels ",[28,47406,39],{"class":38},[28,47408,47409],{"class":45}," 0\n",[28,47411,47412,47415,47417,47420,47422,47424],{"class":30,"line":1700},[28,47413,47414],{"class":34},"sum_normalized_pixel_values ",[28,47416,39],{"class":38},[28,47418,47419],{"class":34}," np.zeros(",[28,47421,57],{"class":45},[28,47423,45884],{"class":34},[28,47425,47426],{"class":105},"# 如果是RGB图像，需要三个通道的均值和方差\n",[28,47428,47429],{"class":30,"line":1705},[28,47430,2477],{"emptyLinePlaceholder":144},[28,47432,47433],{"class":30,"line":1719},[28,47434,47435],{"class":105},"# 遍历文件夹中的图片文件\n",[28,47437,47438,47440,47443,47445],{"class":30,"line":1724},[28,47439,3102],{"class":38},[28,47441,47442],{"class":34}," root, dirs, files ",[28,47444,26121],{"class":38},[28,47446,47447],{"class":34}," os.walk(folder_path):\n",[28,47449,47450,47452,47455,47457],{"class":30,"line":1730},[28,47451,3278],{"class":38},[28,47453,47454],{"class":34}," filename ",[28,47456,26121],{"class":38},[28,47458,47459],{"class":34}," files:\n",[28,47461,47462,47464,47467,47470,47472,47475,47477,47480,47482,47485,47488],{"class":30,"line":1751},[28,47463,2574],{"class":38},[28,47465,47466],{"class":34}," filename.endswith((",[28,47468,47469],{"class":320},"'.jpg'",[28,47471,12512],{"class":34},[28,47473,47474],{"class":320},"'.jpeg'",[28,47476,12512],{"class":34},[28,47478,47479],{"class":320},"'.png'",[28,47481,12512],{"class":34},[28,47483,47484],{"class":320},"'.bmp'",[28,47486,47487],{"class":34},")):  ",[28,47489,47490],{"class":105},"# 可根据实际情况添加其他格式\n",[28,47492,47493,47495,47497],{"class":30,"line":1756},[28,47494,45749],{"class":34},[28,47496,39],{"class":38},[28,47498,47499],{"class":34}," os.path.join(root, filename)\n",[28,47501,47502,47505,47507],{"class":30,"line":1770},[28,47503,47504],{"class":34},"            image ",[28,47506,39],{"class":38},[28,47508,47509],{"class":34}," Image.open(image_path)\n",[28,47511,47512,47515,47517],{"class":30,"line":1775},[28,47513,47514],{"class":34},"            image_array ",[28,47516,39],{"class":38},[28,47518,47519],{"class":34}," np.array(image)\n",[28,47521,47522],{"class":30,"line":1804},[28,47523,2477],{"emptyLinePlaceholder":144},[28,47525,47526],{"class":30,"line":1809},[28,47527,47528],{"class":105},"            # 归一化像素值到0-1之间\n",[28,47530,47531,47534,47536,47539,47541],{"class":30,"line":1826},[28,47532,47533],{"class":34},"            normalized_image_array ",[28,47535,39],{"class":38},[28,47537,47538],{"class":34}," image_array ",[28,47540,794],{"class":38},[28,47542,47543],{"class":45}," 255.0\n",[28,47545,47546],{"class":30,"line":1831},[28,47547,2477],{"emptyLinePlaceholder":144},[28,47549,47550],{"class":30,"line":1836},[28,47551,47552],{"class":105},"            # print(image_path)\n",[28,47554,47555],{"class":30,"line":1841},[28,47556,47557],{"class":105},"            # print(normalized_image_array.shape)\n",[28,47559,47560],{"class":30,"line":1855},[28,47561,47562],{"class":105},"            # 累积归一化后的像素值和像素数量\n",[28,47564,47565,47568,47570],{"class":30,"line":1860},[28,47566,47567],{"class":34},"            total_pixels ",[28,47569,9554],{"class":38},[28,47571,47572],{"class":34}," normalized_image_array.size\n",[28,47574,47575],{"class":30,"line":2654},[28,47576,47577],{"class":105},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[28,47579,47580,47583,47585,47588,47591,47593,47595,47597,47599,47601],{"class":30,"line":2668},[28,47581,47582],{"class":34},"            sum_normalized_pixel_values ",[28,47584,9554],{"class":38},[28,47586,47587],{"class":34}," np.sum(normalized_image_array, ",[28,47589,47590],{"class":5293},"axis",[28,47592,39],{"class":38},[28,47594,221],{"class":34},[28,47596,407],{"class":45},[28,47598,12512],{"class":34},[28,47600,46],{"class":45},[28,47602,30573],{"class":34},[28,47604,47605],{"class":30,"line":2676},[28,47606,2477],{"emptyLinePlaceholder":144},[28,47608,47609],{"class":30,"line":2681},[28,47610,47611],{"class":105},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[28,47613,47614,47617,47619,47622,47624],{"class":30,"line":2687},[28,47615,47616],{"class":34},"mean ",[28,47618,39],{"class":38},[28,47620,47621],{"class":34}," sum_normalized_pixel_values ",[28,47623,794],{"class":38},[28,47625,47626],{"class":34}," total_pixels\n",[28,47628,47629],{"class":30,"line":2693},[28,47630,2477],{"emptyLinePlaceholder":144},[28,47632,47633,47636,47638,47640,47642],{"class":30,"line":2698},[28,47634,47635],{"class":34},"sum_squared_diff ",[28,47637,39],{"class":38},[28,47639,47419],{"class":34},[28,47641,57],{"class":45},[28,47643,227],{"class":34},[28,47645,47646],{"class":30,"line":8025},[28,47647,2477],{"emptyLinePlaceholder":144},[28,47649,47650],{"class":30,"line":8049},[28,47651,47652],{"class":105},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[28,47654,47655],{"class":30,"line":8054},[28,47656,47657],{"class":105},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[28,47659,47660],{"class":30,"line":8060},[28,47661,47662],{"class":105},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[28,47664,47665],{"class":30,"line":8087},[28,47666,47667],{"class":105},"# Image.open(image_path)：打开图片\n",[28,47669,47670],{"class":30,"line":8092},[28,47671,47672],{"class":105},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[28,47674,47675,47677,47679,47681],{"class":30,"line":8098},[28,47676,3102],{"class":38},[28,47678,47442],{"class":34},[28,47680,26121],{"class":38},[28,47682,47447],{"class":34},[28,47684,47685,47687,47689,47691],{"class":30,"line":8110},[28,47686,3278],{"class":38},[28,47688,47454],{"class":34},[28,47690,26121],{"class":38},[28,47692,47459],{"class":34},[28,47694,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713],{"class":30,"line":8122},[28,47696,2574],{"class":38},[28,47698,47466],{"class":34},[28,47700,47469],{"class":320},[28,47702,12512],{"class":34},[28,47704,47474],{"class":320},[28,47706,12512],{"class":34},[28,47708,47479],{"class":320},[28,47710,12512],{"class":34},[28,47712,47484],{"class":320},[28,47714,47715],{"class":34},")):\n",[28,47717,47718,47720,47722],{"class":30,"line":8134},[28,47719,45749],{"class":34},[28,47721,39],{"class":38},[28,47723,47499],{"class":34},[28,47725,47726,47728,47730],{"class":30,"line":9793},[28,47727,47504],{"class":34},[28,47729,39],{"class":38},[28,47731,47509],{"class":34},[28,47733,47734,47736,47738],{"class":30,"line":9818},[28,47735,47514],{"class":34},[28,47737,39],{"class":38},[28,47739,47519],{"class":34},[28,47741,47742],{"class":30,"line":9841},[28,47743,47528],{"class":105},[28,47745,47746,47748,47750,47752,47754],{"class":30,"line":9865},[28,47747,47533],{"class":34},[28,47749,39],{"class":38},[28,47751,47538],{"class":34},[28,47753,794],{"class":38},[28,47755,47543],{"class":45},[28,47757,47758],{"class":30,"line":9870},[28,47759,47557],{"class":105},[28,47761,47762],{"class":30,"line":9875},[28,47763,47764],{"class":105},"            # print(mean.shape)\n",[28,47766,47767],{"class":30,"line":9880},[28,47768,47552],{"class":105},[28,47770,47771],{"class":30,"line":9889},[28,47772,2477],{"emptyLinePlaceholder":144},[28,47774,47775,47778],{"class":30,"line":9894},[28,47776,47777],{"class":38},"            try",[28,47779,3816],{"class":34},[28,47781,47782,47785,47787,47790,47792,47795,47797],{"class":30,"line":9900},[28,47783,47784],{"class":34},"                diff ",[28,47786,39],{"class":38},[28,47788,47789],{"class":34}," (normalized_image_array ",[28,47791,742],{"class":38},[28,47793,47794],{"class":34}," mean) ",[28,47796,10738],{"class":38},[28,47798,47799],{"class":45}," 2\n",[28,47801,47802,47805,47807,47810,47812,47814,47816,47818,47820,47822],{"class":30,"line":9921},[28,47803,47804],{"class":34},"                sum_squared_diff ",[28,47806,9554],{"class":38},[28,47808,47809],{"class":34}," np.sum(diff, ",[28,47811,47590],{"class":5293},[28,47813,39],{"class":38},[28,47815,221],{"class":34},[28,47817,407],{"class":45},[28,47819,12512],{"class":34},[28,47821,46],{"class":45},[28,47823,30573],{"class":34},[28,47825,47826,47829],{"class":30,"line":9927},[28,47827,47828],{"class":38},"            except",[28,47830,3816],{"class":34},[28,47832,47833,47836,47838,47840,47843],{"class":30,"line":9941},[28,47834,47835],{"class":45},"                print",[28,47837,221],{"class":34},[28,47839,271],{"class":38},[28,47841,47842],{"class":320},"\"捕获到自定义异常\"",[28,47844,227],{"class":34},[28,47846,47847],{"class":30,"line":9947},[28,47848,47849],{"class":105},"            # diff = (normalized_image_array - mean) ** 2\n",[28,47851,47852],{"class":30,"line":9974},[28,47853,47854],{"class":105},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[28,47856,47857],{"class":30,"line":9983},[28,47858,2477],{"emptyLinePlaceholder":144},[28,47860,47861,47864,47866,47869,47871],{"class":30,"line":9989},[28,47862,47863],{"class":34},"variance ",[28,47865,39],{"class":38},[28,47867,47868],{"class":34}," sum_squared_diff ",[28,47870,794],{"class":38},[28,47872,47626],{"class":34},[28,47874,47875],{"class":30,"line":9997},[28,47876,2477],{"emptyLinePlaceholder":144},[28,47878,47879,47881,47883,47886],{"class":30,"line":10002},[28,47880,30491],{"class":45},[28,47882,221],{"class":34},[28,47884,47885],{"class":320},"\"Mean:\"",[28,47887,47888],{"class":34},", mean)\n",[28,47890,47891,47893,47895,47898],{"class":30,"line":16681},[28,47892,30491],{"class":45},[28,47894,221],{"class":34},[28,47896,47897],{"class":320},"\"Variance:\"",[28,47899,47900],{"class":34},", variance)\n",[18,47902,47904],{"className":20,"code":47903,"language":22,"meta":23,"style":23},"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",[25,47905,47906,47912,47918,47928,47934,47944,47958,47968,47978,47988,47992,48002,48012,48016,48020,48028,48033,48038,48057,48061,48066,48071,48076,48081,48121,48126,48136,48141,48154,48159,48164,48169,48174,48179,48183,48188,48193,48215,48219,48251,48265,48275,48285,48289,48299,48313,48323,48333,48343,48349,48353,48357,48361,48365,48369,48377,48397,48401,48405,48409,48413,48429,48433,48437,48445,48449,48453,48461,48465,48469,48473,48481,48485,48489,48493,48501,48505,48513,48517,48525,48529,48537,48541,48549,48553,48557,48565,48569,48573,48585,48609,48623,48627,48631,48635,48643,48647,48655,48659,48667,48671,48679,48683,48691,48695,48703,48707,48719,48723,48731,48735,48743,48747,48751,48755,48759,48767,48771,48787,48791,48799,48803,48807,48811,48815,48819,48823,48827,48843,48847,48859,48863,48875,48879,48891,48895,48903,48907,48915,48919,48923,48927,48933,48937,48945,48949,48965,48969,48977,48981,48997,49009,49013,49025,49029,49033,49041,49045,49049,49057,49061,49069,49073,49081,49085,49089,49131,49173,49177,49181,49197,49201,49217,49221,49225,49233,49237,49241,49253,49291,49295,49299,49307,49311,49325,49335,49341,49347,49353,49359,49363,49367,49373,49377,49381,49389,49393,49411,49415,49419,49423,49439,49443,49447,49451,49455,49459,49479,49499,49503,49507,49511,49519,49527,49531,49547,49567,49587,49591,49596,49605,49614,49619,49624,49629,49642,49647,49656,49665,49682],{"__ignoreMap":23},[28,47907,47908,47910],{"class":30,"line":31},[28,47909,30468],{"class":38},[28,47911,31898],{"class":34},[28,47913,47914,47916],{"class":30,"line":94},[28,47915,30468],{"class":38},[28,47917,31905],{"class":34},[28,47919,47920,47922,47924,47926],{"class":30,"line":109},[28,47921,30468],{"class":38},[28,47923,31916],{"class":34},[28,47925,31459],{"class":38},[28,47927,31921],{"class":34},[28,47929,47930,47932],{"class":30,"line":125},[28,47931,30468],{"class":38},[28,47933,30471],{"class":34},[28,47935,47936,47938,47940,47942],{"class":30,"line":131},[28,47937,30813],{"class":38},[28,47939,31491],{"class":34},[28,47941,30468],{"class":38},[28,47943,31938],{"class":34},[28,47945,47946,47948,47950,47952,47955],{"class":30,"line":1291},[28,47947,30813],{"class":38},[28,47949,31444],{"class":34},[28,47951,30468],{"class":38},[28,47953,47954],{"class":34}," ImageFolder ",[28,47956,47957],{"class":105},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[28,47959,47960,47962,47964,47966],{"class":30,"line":1297},[28,47961,30813],{"class":38},[28,47963,31474],{"class":34},[28,47965,30468],{"class":38},[28,47967,31479],{"class":34},[28,47969,47970,47972,47974,47976],{"class":30,"line":1388},[28,47971,30468],{"class":38},[28,47973,31491],{"class":34},[28,47975,31459],{"class":38},[28,47977,31496],{"class":34},[28,47979,47980,47982,47984,47986],{"class":30,"line":1394},[28,47981,30468],{"class":38},[28,47983,31508],{"class":34},[28,47985,31459],{"class":38},[28,47987,31513],{"class":34},[28,47989,47990],{"class":30,"line":1406},[28,47991,31983],{"class":105},[28,47993,47994,47996,47998,48000],{"class":30,"line":1689},[28,47995,30813],{"class":38},[28,47997,31990],{"class":34},[28,47999,30468],{"class":38},[28,48001,43107],{"class":34},[28,48003,48004,48006,48008,48010],{"class":30,"line":1694},[28,48005,30813],{"class":38},[28,48007,30816],{"class":34},[28,48009,30468],{"class":38},[28,48011,30821],{"class":34},[28,48013,48014],{"class":30,"line":1700},[28,48015,2477],{"emptyLinePlaceholder":144},[28,48017,48018],{"class":30,"line":1705},[28,48019,32018],{"class":105},[28,48021,48022,48024,48026],{"class":30,"line":1719},[28,48023,32023],{"class":38},[28,48025,32026],{"class":2040},[28,48027,32029],{"class":34},[28,48029,48030],{"class":30,"line":1724},[28,48031,48032],{"class":105},"    # 导入自己的数据集，并进行数据处理\n",[28,48034,48035],{"class":30,"line":1730},[28,48036,48037],{"class":105},"    # 定义数据集的路径\n",[28,48039,48040,48043,48045,48047,48049,48051,48055],{"class":30,"line":1751},[28,48041,48042],{"class":45},"    ROOT_PATH",[28,48044,39],{"class":38},[28,48046,880],{"class":38},[28,48048,465],{"class":320},[28,48050,768],{"class":45},[28,48052,48054],{"class":48053},"sA_wV","\u002Fdata\u002Ftrain",[28,48056,25211],{"class":320},[28,48058,48059],{"class":30,"line":1756},[28,48060,2477],{"emptyLinePlaceholder":144},[28,48062,48063],{"class":30,"line":1770},[28,48064,48065],{"class":105},"    # 定义归一化方法\n",[28,48067,48068],{"class":30,"line":1775},[28,48069,48070],{"class":105},"    # 这里需要先计算一下数据集的均值和方差\n",[28,48072,48073],{"class":30,"line":1804},[28,48074,48075],{"class":105},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[28,48077,48078],{"class":30,"line":1809},[28,48079,48080],{"class":105},"    # 第一个参数是均值，第二个参数是方差\n",[28,48082,48083,48086,48088,48091,48094,48096,48099,48101,48104,48106,48109,48111,48114,48116,48119],{"class":30,"line":1826},[28,48084,48085],{"class":34},"    normalize",[28,48087,39],{"class":38},[28,48089,48090],{"class":34},"transforms.Normalize([",[28,48092,48093],{"class":45},"0.162",[28,48095,49],{"class":34},[28,48097,48098],{"class":45},"0.151",[28,48100,49],{"class":34},[28,48102,48103],{"class":45},"0.138",[28,48105,60],{"class":34},[28,48107,48108],{"class":45},"0.058",[28,48110,49],{"class":34},[28,48112,48113],{"class":45},"0.052",[28,48115,49],{"class":34},[28,48117,48118],{"class":45},"0.048",[28,48120,4734],{"class":34},[28,48122,48123],{"class":30,"line":1831},[28,48124,48125],{"class":105},"    # 定义数据集处理方法变量\n",[28,48127,48128,48131,48133],{"class":30,"line":1836},[28,48129,48130],{"class":34},"    train_transform",[28,48132,39],{"class":38},[28,48134,48135],{"class":34},"transforms.Compose([\n",[28,48137,48138],{"class":30,"line":1841},[28,48139,48140],{"class":105},"        # 调整图像大小为224*224\n",[28,48142,48143,48146,48148,48150,48152],{"class":30,"line":1855},[28,48144,48145],{"class":34},"        transforms.Resize((",[28,48147,31577],{"class":45},[28,48149,49],{"class":34},[28,48151,31577],{"class":45},[28,48153,42698],{"class":34},[28,48155,48156],{"class":30,"line":1860},[28,48157,48158],{"class":105},"        # 将图像转换为张量\n",[28,48160,48161],{"class":30,"line":2654},[28,48162,48163],{"class":34},"        transforms.ToTensor(),\n",[28,48165,48166],{"class":30,"line":2668},[28,48167,48168],{"class":34},"        normalize])\n",[28,48170,48171],{"class":30,"line":2676},[28,48172,48173],{"class":105},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[28,48175,48176],{"class":30,"line":2681},[28,48177,48178],{"class":105},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[28,48180,48181],{"class":30,"line":2687},[28,48182,2477],{"emptyLinePlaceholder":144},[28,48184,48185],{"class":30,"line":2693},[28,48186,48187],{"class":105},"    # 加载数据集\n",[28,48189,48190],{"class":30,"line":2698},[28,48191,48192],{"class":105},"    # 传入数据集路径与处理方法\n",[28,48194,48195,48197,48199,48202,48205,48207,48210,48212],{"class":30,"line":8025},[28,48196,32034],{"class":34},[28,48198,39],{"class":38},[28,48200,48201],{"class":34},"ImageFolder(",[28,48203,48204],{"class":45},"ROOT_PATH",[28,48206,49],{"class":34},[28,48208,48209],{"class":5293},"transform",[28,48211,39],{"class":38},[28,48213,48214],{"class":34},"train_transform)\n",[28,48216,48217],{"class":30,"line":8049},[28,48218,2477],{"emptyLinePlaceholder":144},[28,48220,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245,48247,48249],{"class":30,"line":8054},[28,48222,32086],{"class":34},[28,48224,39],{"class":38},[28,48226,32091],{"class":34},[28,48228,32094],{"class":45},[28,48230,221],{"class":34},[28,48232,32099],{"class":45},[28,48234,668],{"class":38},[28,48236,7435],{"class":45},[28,48238,32106],{"class":34},[28,48240,32094],{"class":45},[28,48242,221],{"class":34},[28,48244,32113],{"class":45},[28,48246,668],{"class":38},[28,48248,7435],{"class":45},[28,48250,32120],{"class":34},[28,48252,48253,48255,48257,48259,48261,48263],{"class":30,"line":8060},[28,48254,32125],{"class":34},[28,48256,39],{"class":38},[28,48258,32130],{"class":34},[28,48260,31613],{"class":5293},[28,48262,39],{"class":38},[28,48264,31618],{"class":34},[28,48266,48267,48269,48271,48273],{"class":30,"line":8087},[28,48268,32141],{"class":5293},[28,48270,39],{"class":38},[28,48272,413],{"class":45},[28,48274,31542],{"class":34},[28,48276,48277,48279,48281,48283],{"class":30,"line":8092},[28,48278,32153],{"class":5293},[28,48280,39],{"class":38},[28,48282,31552],{"class":45},[28,48284,31542],{"class":34},[28,48286,48287],{"class":30,"line":8098},[28,48288,32164],{"class":105},[28,48290,48291,48293,48295,48297],{"class":30,"line":8110},[28,48292,32169],{"class":5293},[28,48294,39],{"class":38},[28,48296,608],{"class":45},[28,48298,227],{"class":34},[28,48300,48301,48303,48305,48307,48309,48311],{"class":30,"line":8122},[28,48302,32180],{"class":34},[28,48304,39],{"class":38},[28,48306,31610],{"class":34},[28,48308,31613],{"class":5293},[28,48310,39],{"class":38},[28,48312,32191],{"class":34},[28,48314,48315,48317,48319,48321],{"class":30,"line":8134},[28,48316,32196],{"class":5293},[28,48318,39],{"class":38},[28,48320,413],{"class":45},[28,48322,31542],{"class":34},[28,48324,48325,48327,48329,48331],{"class":30,"line":9793},[28,48326,32207],{"class":5293},[28,48328,39],{"class":38},[28,48330,31552],{"class":45},[28,48332,31542],{"class":34},[28,48334,48335,48337,48339,48341],{"class":30,"line":9818},[28,48336,32218],{"class":5293},[28,48338,39],{"class":38},[28,48340,608],{"class":45},[28,48342,227],{"class":34},[28,48344,48345,48347],{"class":30,"line":9841},[28,48346,4167],{"class":38},[28,48348,32231],{"class":34},[28,48350,48351],{"class":30,"line":9865},[28,48352,2477],{"emptyLinePlaceholder":144},[28,48354,48355],{"class":30,"line":9870},[28,48356,32240],{"class":105},[28,48358,48359],{"class":30,"line":9875},[28,48360,32245],{"class":105},[28,48362,48363],{"class":30,"line":9880},[28,48364,2477],{"emptyLinePlaceholder":144},[28,48366,48367],{"class":30,"line":9889},[28,48368,32254],{"class":105},[28,48370,48371,48373,48375],{"class":30,"line":9894},[28,48372,32023],{"class":38},[28,48374,32261],{"class":2040},[28,48376,32264],{"class":34},[28,48378,48379,48381,48383,48385,48387,48389,48391,48393,48395],{"class":30,"line":9900},[28,48380,31313],{"class":34},[28,48382,39],{"class":38},[28,48384,30527],{"class":34},[28,48386,31320],{"class":320},[28,48388,1781],{"class":38},[28,48390,31325],{"class":34},[28,48392,1778],{"class":38},[28,48394,32283],{"class":320},[28,48396,227],{"class":34},[28,48398,48399],{"class":30,"line":9921},[28,48400,2477],{"emptyLinePlaceholder":144},[28,48402,48403],{"class":30,"line":9927},[28,48404,32298],{"class":105},[28,48406,48407],{"class":30,"line":9941},[28,48408,32303],{"class":105},[28,48410,48411],{"class":30,"line":9947},[28,48412,32308],{"class":105},[28,48414,48415,48417,48419,48421,48423,48425,48427],{"class":30,"line":9974},[28,48416,32313],{"class":34},[28,48418,39],{"class":38},[28,48420,32318],{"class":34},[28,48422,32321],{"class":5293},[28,48424,39],{"class":38},[28,48426,32326],{"class":45},[28,48428,227],{"class":34},[28,48430,48431],{"class":30,"line":9983},[28,48432,2477],{"emptyLinePlaceholder":144},[28,48434,48435],{"class":30,"line":9989},[28,48436,32337],{"class":105},[28,48438,48439,48441,48443],{"class":30,"line":9997},[28,48440,32342],{"class":34},[28,48442,39],{"class":38},[28,48444,32347],{"class":34},[28,48446,48447],{"class":30,"line":10002},[28,48448,2477],{"emptyLinePlaceholder":144},[28,48450,48451],{"class":30,"line":16681},[28,48452,32356],{"class":105},[28,48454,48455,48457,48459],{"class":30,"line":16687},[28,48456,31365],{"class":34},[28,48458,39],{"class":38},[28,48460,32365],{"class":34},[28,48462,48463],{"class":30,"line":16710},[28,48464,32370],{"class":105},[28,48466,48467],{"class":30,"line":16716},[28,48468,32375],{"class":105},[28,48470,48471],{"class":30,"line":16739},[28,48472,32380],{"class":105},[28,48474,48475,48477,48479],{"class":30,"line":16753},[28,48476,32385],{"class":34},[28,48478,39],{"class":38},[28,48480,32390],{"class":34},[28,48482,48483],{"class":30,"line":16773},[28,48484,2477],{"emptyLinePlaceholder":144},[28,48486,48487],{"class":30,"line":16779},[28,48488,32403],{"class":105},[28,48490,48491],{"class":30,"line":16790},[28,48492,32408],{"class":105},[28,48494,48495,48497,48499],{"class":30,"line":16813},[28,48496,32413],{"class":34},[28,48498,39],{"class":38},[28,48500,32418],{"class":45},[28,48502,48503],{"class":30,"line":16835},[28,48504,32423],{"class":105},[28,48506,48507,48509,48511],{"class":30,"line":16840},[28,48508,32428],{"class":34},[28,48510,39],{"class":38},[28,48512,32433],{"class":34},[28,48514,48515],{"class":30,"line":16846},[28,48516,32438],{"class":105},[28,48518,48519,48521,48523],{"class":30,"line":16860},[28,48520,32443],{"class":34},[28,48522,39],{"class":38},[28,48524,32433],{"class":34},[28,48526,48527],{"class":30,"line":16873},[28,48528,32452],{"class":105},[28,48530,48531,48533,48535],{"class":30,"line":16878},[28,48532,32457],{"class":34},[28,48534,39],{"class":38},[28,48536,32433],{"class":34},[28,48538,48539],{"class":30,"line":16892},[28,48540,32466],{"class":105},[28,48542,48543,48545,48547],{"class":30,"line":16897},[28,48544,32471],{"class":34},[28,48546,39],{"class":38},[28,48548,32433],{"class":34},[28,48550,48551],{"class":30,"line":16903},[28,48552,2477],{"emptyLinePlaceholder":144},[28,48554,48555],{"class":30,"line":16908},[28,48556,32484],{"class":105},[28,48558,48559,48561,48563],{"class":30,"line":16922},[28,48560,32489],{"class":34},[28,48562,39],{"class":38},[28,48564,32494],{"class":34},[28,48566,48567],{"class":30,"line":16927},[28,48568,2477],{"emptyLinePlaceholder":144},[28,48570,48571],{"class":30,"line":16932},[28,48572,32507],{"class":105},[28,48574,48575,48577,48579,48581,48583],{"class":30,"line":16946},[28,48576,3278],{"class":38},[28,48578,32514],{"class":34},[28,48580,26121],{"class":38},[28,48582,32519],{"class":45},[28,48584,32522],{"class":34},[28,48586,48587,48589,48591,48593,48595,48597,48599,48601,48603,48605,48607],{"class":30,"line":16958},[28,48588,32527],{"class":45},[28,48590,221],{"class":34},[28,48592,32532],{"class":320},[28,48594,32535],{"class":45},[28,48596,794],{"class":320},[28,48598,32535],{"class":45},[28,48600,465],{"class":320},[28,48602,32544],{"class":34},[28,48604,742],{"class":38},[28,48606,46],{"class":45},[28,48608,30573],{"class":34},[28,48610,48611,48613,48615,48617,48619,48621],{"class":30,"line":16963},[28,48612,32527],{"class":45},[28,48614,221],{"class":34},[28,48616,32559],{"class":320},[28,48618,668],{"class":38},[28,48620,659],{"class":45},[28,48622,227],{"class":34},[28,48624,48625],{"class":30,"line":16976},[28,48626,2477],{"emptyLinePlaceholder":144},[28,48628,48629],{"class":30,"line":16981},[28,48630,32574],{"class":105},[28,48632,48633],{"class":30,"line":16986},[28,48634,32579],{"class":105},[28,48636,48637,48639,48641],{"class":30,"line":16991},[28,48638,32584],{"class":34},[28,48640,39],{"class":38},[28,48642,32418],{"class":45},[28,48644,48645],{"class":30,"line":17004},[28,48646,32593],{"class":105},[28,48648,48649,48651,48653],{"class":30,"line":17009},[28,48650,32598],{"class":34},[28,48652,39],{"class":38},[28,48654,3162],{"class":45},[28,48656,48657],{"class":30,"line":32709},[28,48658,32607],{"class":105},[28,48660,48661,48663,48665],{"class":30,"line":32715},[28,48662,32612],{"class":34},[28,48664,39],{"class":38},[28,48666,32418],{"class":45},[28,48668,48669],{"class":30,"line":32721},[28,48670,32621],{"class":105},[28,48672,48673,48675,48677],{"class":30,"line":32727},[28,48674,32626],{"class":34},[28,48676,39],{"class":38},[28,48678,3162],{"class":45},[28,48680,48681],{"class":30,"line":32733},[28,48682,32635],{"class":105},[28,48684,48685,48687,48689],{"class":30,"line":32744},[28,48686,32640],{"class":34},[28,48688,39],{"class":38},[28,48690,3162],{"class":45},[28,48692,48693],{"class":30,"line":32750},[28,48694,32649],{"class":105},[28,48696,48697,48699,48701],{"class":30,"line":32770},[28,48698,32654],{"class":34},[28,48700,39],{"class":38},[28,48702,3162],{"class":45},[28,48704,48705],{"class":30,"line":32776},[28,48706,32663],{"class":105},[28,48708,48709,48711,48713,48715,48717],{"class":30,"line":32787},[28,48710,3480],{"class":38},[28,48712,31677],{"class":34},[28,48714,26121],{"class":38},[28,48716,31682],{"class":45},[28,48718,32676],{"class":34},[28,48720,48721],{"class":30,"line":32793},[28,48722,32681],{"class":105},[28,48724,48725,48727,48729],{"class":30,"line":32799},[28,48726,32686],{"class":34},[28,48728,39],{"class":38},[28,48730,32691],{"class":34},[28,48732,48733],{"class":30,"line":32805},[28,48734,32696],{"class":105},[28,48736,48737,48739,48741],{"class":30,"line":32811},[28,48738,32701],{"class":34},[28,48740,39],{"class":38},[28,48742,32706],{"class":34},[28,48744,48745],{"class":30,"line":32817},[28,48746,32712],{"class":105},[28,48748,48749],{"class":30,"line":32823},[28,48750,32718],{"class":34},[28,48752,48753],{"class":30,"line":32829},[28,48754,32724],{"class":105},[28,48756,48757],{"class":30,"line":32849},[28,48758,32730],{"class":105},[28,48760,48761,48763,48765],{"class":30,"line":32855},[28,48762,32736],{"class":34},[28,48764,39],{"class":38},[28,48766,32741],{"class":34},[28,48768,48769],{"class":30,"line":32871},[28,48770,32747],{"class":105},[28,48772,48773,48775,48777,48779,48781,48783,48785],{"class":30,"line":32877},[28,48774,32753],{"class":34},[28,48776,39],{"class":38},[28,48778,32758],{"class":34},[28,48780,32761],{"class":5293},[28,48782,39],{"class":38},[28,48784,46],{"class":45},[28,48786,227],{"class":34},[28,48788,48789],{"class":30,"line":32891},[28,48790,32773],{"class":105},[28,48792,48793,48795,48797],{"class":30,"line":32897},[28,48794,32779],{"class":34},[28,48796,39],{"class":38},[28,48798,32784],{"class":34},[28,48800,48801],{"class":30,"line":32912},[28,48802,32790],{"class":105},[28,48804,48805],{"class":30,"line":32918},[28,48806,32796],{"class":34},[28,48808,48809],{"class":30,"line":32927},[28,48810,32802],{"class":105},[28,48812,48813],{"class":30,"line":32933},[28,48814,32808],{"class":34},[28,48816,48817],{"class":30,"line":32942},[28,48818,32814],{"class":105},[28,48820,48821],{"class":30,"line":32948},[28,48822,32820],{"class":34},[28,48824,48825],{"class":30,"line":32954},[28,48826,32826],{"class":105},[28,48828,48829,48831,48833,48835,48837,48839,48841],{"class":30,"line":32963},[28,48830,32832],{"class":34},[28,48832,9554],{"class":38},[28,48834,32837],{"class":34},[28,48836,668],{"class":38},[28,48838,32842],{"class":34},[28,48840,407],{"class":45},[28,48842,227],{"class":34},[28,48844,48845],{"class":30,"line":32969},[28,48846,32852],{"class":105},[28,48848,48849,48851,48853,48855,48857],{"class":30,"line":32980},[28,48850,32858],{"class":34},[28,48852,9554],{"class":38},[28,48854,32863],{"class":34},[28,48856,3026],{"class":38},[28,48858,32868],{"class":34},[28,48860,48861],{"class":30,"line":32986},[28,48862,32874],{"class":105},[28,48864,48865,48867,48869,48871,48873],{"class":30,"line":33005},[28,48866,32880],{"class":34},[28,48868,9554],{"class":38},[28,48870,32842],{"class":34},[28,48872,407],{"class":45},[28,48874,227],{"class":34},[28,48876,48877],{"class":30,"line":33011},[28,48878,32894],{"class":105},[28,48880,48881,48883,48885,48887,48889],{"class":30,"line":33022},[28,48882,3480],{"class":38},[28,48884,32902],{"class":34},[28,48886,26121],{"class":38},[28,48888,31682],{"class":45},[28,48890,32909],{"class":34},[28,48892,48893],{"class":30,"line":33028},[28,48894,32915],{"class":105},[28,48896,48897,48899,48901],{"class":30,"line":33048},[28,48898,32686],{"class":34},[28,48900,39],{"class":38},[28,48902,32691],{"class":34},[28,48904,48905],{"class":30,"line":33064},[28,48906,32930],{"class":105},[28,48908,48909,48911,48913],{"class":30,"line":33070},[28,48910,32701],{"class":34},[28,48912,39],{"class":38},[28,48914,32706],{"class":34},[28,48916,48917],{"class":30,"line":33084},[28,48918,32945],{"class":105},[28,48920,48921],{"class":30,"line":33090},[28,48922,32951],{"class":34},[28,48924,48925],{"class":30,"line":33096},[28,48926,36432],{"class":105},[28,48928,48929,48931],{"class":30,"line":33107},[28,48930,32957],{"class":38},[28,48932,32960],{"class":34},[28,48934,48935],{"class":30,"line":33113},[28,48936,32966],{"class":105},[28,48938,48939,48941,48943],{"class":30,"line":33119},[28,48940,36447],{"class":34},[28,48942,39],{"class":38},[28,48944,32741],{"class":34},[28,48946,48947],{"class":30,"line":33129},[28,48948,32983],{"class":105},[28,48950,48951,48953,48955,48957,48959,48961,48963],{"class":30,"line":33135},[28,48952,36460],{"class":34},[28,48954,39],{"class":38},[28,48956,32758],{"class":34},[28,48958,32761],{"class":5293},[28,48960,39],{"class":38},[28,48962,46],{"class":45},[28,48964,227],{"class":34},[28,48966,48967],{"class":30,"line":33146},[28,48968,33008],{"class":105},[28,48970,48971,48973,48975],{"class":30,"line":33152},[28,48972,36481],{"class":34},[28,48974,39],{"class":38},[28,48976,32784],{"class":34},[28,48978,48979],{"class":30,"line":33162},[28,48980,33025],{"class":105},[28,48982,48983,48985,48987,48989,48991,48993,48995],{"class":30,"line":33167},[28,48984,36494],{"class":34},[28,48986,9554],{"class":38},[28,48988,36499],{"class":34},[28,48990,668],{"class":38},[28,48992,32842],{"class":34},[28,48994,407],{"class":45},[28,48996,227],{"class":34},[28,48998,48999,49001,49003,49005,49007],{"class":30,"line":33173},[28,49000,36512],{"class":34},[28,49002,9554],{"class":38},[28,49004,32863],{"class":34},[28,49006,3026],{"class":38},[28,49008,32868],{"class":34},[28,49010,49011],{"class":30,"line":33222},[28,49012,36525],{"class":105},[28,49014,49015,49017,49019,49021,49023],{"class":30,"line":33269},[28,49016,36530],{"class":34},[28,49018,9554],{"class":38},[28,49020,32842],{"class":34},[28,49022,407],{"class":45},[28,49024,227],{"class":34},[28,49026,49027],{"class":30,"line":33274},[28,49028,33087],{"class":105},[28,49030,49031],{"class":30,"line":33280},[28,49032,33093],{"class":105},[28,49034,49035,49037,49039],{"class":30,"line":33299},[28,49036,33099],{"class":34},[28,49038,794],{"class":38},[28,49040,33104],{"class":34},[28,49042,49043],{"class":30,"line":33305},[28,49044,33110],{"class":105},[28,49046,49047],{"class":30,"line":33325},[28,49048,33116],{"class":105},[28,49050,49051,49053,49055],{"class":30,"line":33331},[28,49052,33122],{"class":34},[28,49054,794],{"class":38},[28,49056,33104],{"class":34},[28,49058,49059],{"class":30,"line":33337},[28,49060,33132],{"class":105},[28,49062,49063,49065,49067],{"class":30,"line":33347},[28,49064,33138],{"class":34},[28,49066,794],{"class":38},[28,49068,33143],{"class":34},[28,49070,49071],{"class":30,"line":33352},[28,49072,33149],{"class":105},[28,49074,49075,49077,49079],{"class":30,"line":33358},[28,49076,33155],{"class":34},[28,49078,794],{"class":38},[28,49080,33143],{"class":34},[28,49082,49083],{"class":30,"line":33374},[28,49084,2477],{"emptyLinePlaceholder":144},[28,49086,49087],{"class":30,"line":33419},[28,49088,33170],{"class":105},[28,49090,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129],{"class":30,"line":33425},[28,49092,32527],{"class":45},[28,49094,221],{"class":34},[28,49096,3669],{"class":320},[28,49098,32535],{"class":45},[28,49100,33184],{"class":320},[28,49102,1102],{"class":45},[28,49104,33189],{"class":38},[28,49106,1150],{"class":45},[28,49108,33194],{"class":320},[28,49110,1102],{"class":45},[28,49112,33189],{"class":38},[28,49114,1150],{"class":45},[28,49116,3669],{"class":320},[28,49118,33205],{"class":34},[28,49120,742],{"class":38},[28,49122,46],{"class":45},[28,49124,33212],{"class":34},[28,49126,742],{"class":38},[28,49128,46],{"class":45},[28,49130,33219],{"class":34},[28,49132,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171],{"class":30,"line":33431},[28,49134,32527],{"class":45},[28,49136,221],{"class":34},[28,49138,3669],{"class":320},[28,49140,32535],{"class":45},[28,49142,33233],{"class":320},[28,49144,1102],{"class":45},[28,49146,33189],{"class":38},[28,49148,1150],{"class":45},[28,49150,33242],{"class":320},[28,49152,1102],{"class":45},[28,49154,33189],{"class":38},[28,49156,1150],{"class":45},[28,49158,3669],{"class":320},[28,49160,33253],{"class":34},[28,49162,742],{"class":38},[28,49164,46],{"class":45},[28,49166,33260],{"class":34},[28,49168,742],{"class":38},[28,49170,46],{"class":45},[28,49172,33219],{"class":34},[28,49174,49175],{"class":30,"line":33437},[28,49176,2477],{"emptyLinePlaceholder":144},[28,49178,49179],{"class":30,"line":33448},[28,49180,33277],{"class":105},[28,49182,49183,49185,49187,49189,49191,49193,49195],{"class":30,"line":33454},[28,49184,2574],{"class":38},[28,49186,33285],{"class":34},[28,49188,742],{"class":38},[28,49190,46],{"class":45},[28,49192,119],{"class":34},[28,49194,1164],{"class":38},[28,49196,33296],{"class":34},[28,49198,49199],{"class":30,"line":33460},[28,49200,33302],{"class":105},[28,49202,49203,49205,49207,49209,49211,49213,49215],{"class":30,"line":33466},[28,49204,33308],{"class":34},[28,49206,260],{"class":45},[28,49208,39],{"class":38},[28,49210,33315],{"class":34},[28,49212,742],{"class":38},[28,49214,46],{"class":45},[28,49216,33322],{"class":34},[28,49218,49219],{"class":30,"line":33484},[28,49220,33328],{"class":105},[28,49222,49223],{"class":30,"line":33498},[28,49224,33334],{"class":105},[28,49226,49227,49229,49231],{"class":30,"line":33507},[28,49228,33340],{"class":34},[28,49230,39],{"class":38},[28,49232,32390],{"class":34},[28,49234,49235],{"class":30,"line":33516},[28,49236,2477],{"emptyLinePlaceholder":144},[28,49238,49239],{"class":30,"line":33525},[28,49240,33355],{"class":105},[28,49242,49243,49245,49247,49249,49251],{"class":30,"line":33534},[28,49244,33361],{"class":34},[28,49246,39],{"class":38},[28,49248,33366],{"class":34},[28,49250,742],{"class":38},[28,49252,33371],{"class":34},[28,49254,49255,49257,49259,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289],{"class":30,"line":33540},[28,49256,32527],{"class":45},[28,49258,221],{"class":34},[28,49260,33381],{"class":320},[28,49262,1102],{"class":45},[28,49264,33386],{"class":38},[28,49266,1150],{"class":45},[28,49268,754],{"class":320},[28,49270,1102],{"class":45},[28,49272,33386],{"class":38},[28,49274,1150],{"class":45},[28,49276,33399],{"class":320},[28,49278,33402],{"class":34},[28,49280,33405],{"class":38},[28,49282,1113],{"class":45},[28,49284,33410],{"class":34},[28,49286,542],{"class":38},[28,49288,1113],{"class":45},[28,49290,30573],{"class":34},[28,49292,49293],{"class":30,"line":33546},[28,49294,36809],{"class":105},[28,49296,49297],{"class":30,"line":33554},[28,49298,36814],{"class":105},[28,49300,49301,49303,49305],{"class":30,"line":33559},[28,49302,36819],{"class":34},[28,49304,33443],{"class":320},[28,49306,227],{"class":34},[28,49308,49309],{"class":30,"line":33565},[28,49310,33463],{"class":105},[28,49312,49313,49315,49317,49319,49321,49323],{"class":30,"line":33576},[28,49314,33469],{"class":34},[28,49316,39],{"class":38},[28,49318,33474],{"class":34},[28,49320,33477],{"class":5293},[28,49322,39],{"class":38},[28,49324,1623],{"class":34},[28,49326,49327,49329,49331,49333],{"class":30,"line":33582},[28,49328,33487],{"class":320},[28,49330,1065],{"class":34},[28,49332,33492],{"class":45},[28,49334,33495],{"class":34},[28,49336,49337,49339],{"class":30,"line":33602},[28,49338,33501],{"class":320},[28,49340,33504],{"class":34},[28,49342,49343,49345],{"class":30,"line":33608},[28,49344,33510],{"class":320},[28,49346,33513],{"class":34},[28,49348,49349,49351],{"class":30,"line":33614},[28,49350,33519],{"class":320},[28,49352,33522],{"class":34},[28,49354,49355,49357],{"class":30,"line":33620},[28,49356,33528],{"class":320},[28,49358,33531],{"class":34},[28,49360,49361],{"class":30,"line":33637},[28,49362,33537],{"class":34},[28,49364,49365],{"class":30,"line":33643},[28,49366,33543],{"class":105},[28,49368,49369,49371],{"class":30,"line":33649},[28,49370,4167],{"class":38},[28,49372,33551],{"class":34},[28,49374,49375],{"class":30,"line":33655},[28,49376,2477],{"emptyLinePlaceholder":144},[28,49378,49379],{"class":30,"line":33661},[28,49380,33562],{"class":105},[28,49382,49383,49385,49387],{"class":30,"line":33667},[28,49384,32023],{"class":38},[28,49386,33570],{"class":2040},[28,49388,33573],{"class":34},[28,49390,49391],{"class":30,"line":33694},[28,49392,33579],{"class":105},[28,49394,49395,49397,49399,49401,49403,49405,49407,49409],{"class":30,"line":33718},[28,49396,33585],{"class":34},[28,49398,31769],{"class":5293},[28,49400,39],{"class":38},[28,49402,221],{"class":34},[28,49404,68],{"class":45},[28,49406,49],{"class":34},[28,49408,507],{"class":45},[28,49410,30573],{"class":34},[28,49412,49413],{"class":30,"line":33724},[28,49414,33605],{"class":105},[28,49416,49417],{"class":30,"line":33730},[28,49418,33611],{"class":105},[28,49420,49421],{"class":30,"line":33736},[28,49422,33617],{"class":105},[28,49424,49425,49427,49429,49431,49433,49435,49437],{"class":30,"line":33747},[28,49426,31803],{"class":34},[28,49428,46],{"class":45},[28,49430,49],{"class":34},[28,49432,52],{"class":45},[28,49434,49],{"class":34},[28,49436,46],{"class":45},[28,49438,227],{"class":34},[28,49440,49441],{"class":30,"line":33758},[28,49442,33640],{"class":105},[28,49444,49445],{"class":30,"line":33764},[28,49446,33646],{"class":105},[28,49448,49449],{"class":30,"line":33781},[28,49450,33652],{"class":105},[28,49452,49453],{"class":30,"line":33804},[28,49454,33658],{"class":105},[28,49456,49457],{"class":30,"line":33827},[28,49458,33664],{"class":105},[28,49460,49461,49463,49465,49467,49469,49471,49473,49475,49477],{"class":30,"line":33833},[28,49462,33670],{"class":34},[28,49464,33673],{"class":320},[28,49466,33676],{"class":34},[28,49468,33679],{"class":320},[28,49470,49],{"class":34},[28,49472,33684],{"class":5293},[28,49474,39],{"class":38},[28,49476,33689],{"class":320},[28,49478,227],{"class":34},[28,49480,49481,49483,49485,49487,49489,49491,49493,49495,49497],{"class":30,"line":33838},[28,49482,33670],{"class":34},[28,49484,33673],{"class":320},[28,49486,33701],{"class":34},[28,49488,33704],{"class":320},[28,49490,49],{"class":34},[28,49492,33684],{"class":5293},[28,49494,39],{"class":38},[28,49496,33713],{"class":320},[28,49498,227],{"class":34},[28,49500,49501],{"class":30,"line":33847},[28,49502,33721],{"class":105},[28,49504,49505],{"class":30,"line":33857},[28,49506,33727],{"class":34},[28,49508,49509],{"class":30,"line":33863},[28,49510,33733],{"class":105},[28,49512,49513,49515,49517],{"class":30,"line":33868},[28,49514,33739],{"class":34},[28,49516,33742],{"class":320},[28,49518,227],{"class":34},[28,49520,49521,49523,49525],{"class":30,"line":33874},[28,49522,33750],{"class":34},[28,49524,33753],{"class":320},[28,49526,227],{"class":34},[28,49528,49529],{"class":30,"line":33887},[28,49530,33761],{"class":105},[28,49532,49533,49535,49537,49539,49541,49543,49545],{"class":30,"line":33893},[28,49534,31803],{"class":34},[28,49536,46],{"class":45},[28,49538,49],{"class":34},[28,49540,52],{"class":45},[28,49542,49],{"class":34},[28,49544,52],{"class":45},[28,49546,227],{"class":34},[28,49548,49549,49551,49553,49555,49557,49559,49561,49563,49565],{"class":30,"line":33904},[28,49550,33670],{"class":34},[28,49552,33673],{"class":320},[28,49554,33788],{"class":34},[28,49556,33679],{"class":320},[28,49558,49],{"class":34},[28,49560,33684],{"class":5293},[28,49562,39],{"class":38},[28,49564,33799],{"class":320},[28,49566,227],{"class":34},[28,49568,49569,49571,49573,49575,49577,49579,49581,49583,49585],{"class":30,"line":33915},[28,49570,33670],{"class":34},[28,49572,33673],{"class":320},[28,49574,33811],{"class":34},[28,49576,33704],{"class":320},[28,49578,49],{"class":34},[28,49580,33684],{"class":5293},[28,49582,39],{"class":38},[28,49584,33822],{"class":320},[28,49586,227],{"class":34},[28,49588,49589],{"class":30,"line":33934},[28,49590,33830],{"class":105},[28,49592,49594],{"class":30,"line":49593},219,[28,49595,33727],{"class":34},[28,49597,49599,49601,49603],{"class":30,"line":49598},220,[28,49600,33739],{"class":34},[28,49602,33673],{"class":320},[28,49604,227],{"class":34},[28,49606,49608,49610,49612],{"class":30,"line":49607},221,[28,49609,33750],{"class":34},[28,49611,33852],{"class":320},[28,49613,227],{"class":34},[28,49615,49617],{"class":30,"line":49616},222,[28,49618,33860],{"class":34},[28,49620,49622],{"class":30,"line":49621},223,[28,49623,2477],{"emptyLinePlaceholder":144},[28,49625,49627],{"class":30,"line":49626},224,[28,49628,33871],{"class":105},[28,49630,49632,49634,49636,49638,49640],{"class":30,"line":49631},225,[28,49633,1608],{"class":38},[28,49635,31296],{"class":45},[28,49637,3026],{"class":38},[28,49639,31301],{"class":320},[28,49641,3816],{"class":34},[28,49643,49645],{"class":30,"line":49644},226,[28,49646,33890],{"class":105},[28,49648,49650,49652,49654],{"class":30,"line":49649},227,[28,49651,44622],{"class":34},[28,49653,39],{"class":38},[28,49655,44627],{"class":34},[28,49657,49659,49661,49663],{"class":30,"line":49658},228,[28,49660,33907],{"class":34},[28,49662,39],{"class":38},[28,49664,33912],{"class":34},[28,49666,49668,49670,49672,49674,49676,49678,49680],{"class":30,"line":49667},229,[28,49669,33469],{"class":34},[28,49671,39],{"class":38},[28,49673,44644],{"class":34},[28,49675,33925],{"class":5293},[28,49677,39],{"class":38},[28,49679,1113],{"class":45},[28,49681,227],{"class":34},[28,49683,49685],{"class":30,"line":49684},230,[28,49686,33937],{"class":34},[22075,49688,49690],{"id":49689},"_242测试代码","2.4.2.测试代码",[14,49692,49693],{},"使用测试集进行测试与推理",[18,49695,49697],{"className":20,"code":49696,"language":22,"meta":23,"style":23},"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",[25,49698,49699,49705,49715,49725,49736,49746,49750,49754,49762,49767,49771,49788,49792,49796,49800,49804,49808,49840,49844,49852,49856,49868,49872,49876,49880,49884,49888,49892,49896,49900,49918,49932,49936,49946,49956,49966,49972,49976,49980,49988,49992,50008,50016,50020,50024,50032,50040,50044,50048,50052,50056,50062,50066,50076,50084,50092,50096,50100,50104,50112,50116,50132,50136,50140,50144,50156,50160,50172,50176,50180,50192,50196,50206,50210,50214,50226,50230,50238,50242,50246,50254,50258,50266,50270,50274,50278,50282,50286,50302,50310,50314,50318,50336,50342,50346,50356,50364,50372,50376,50380,50384,50388,50396,50400,50416,50420,50428,50436],{"__ignoreMap":23},[28,49700,49701,49703],{"class":30,"line":31},[28,49702,30468],{"class":38},[28,49704,30471],{"class":34},[28,49706,49707,49709,49711,49713],{"class":30,"line":94},[28,49708,30468],{"class":38},[28,49710,31491],{"class":34},[28,49712,31459],{"class":38},[28,49714,31496],{"class":34},[28,49716,49717,49719,49721,49723],{"class":30,"line":109},[28,49718,30813],{"class":38},[28,49720,31474],{"class":34},[28,49722,30468],{"class":38},[28,49724,31479],{"class":34},[28,49726,49727,49729,49731,49733],{"class":30,"line":125},[28,49728,30813],{"class":38},[28,49730,31444],{"class":34},[28,49732,30468],{"class":38},[28,49734,49735],{"class":34}," ImageFolder\n",[28,49737,49738,49740,49742,49744],{"class":30,"line":131},[28,49739,30813],{"class":38},[28,49741,31990],{"class":34},[28,49743,30468],{"class":38},[28,49745,44716],{"class":34},[28,49747,49748],{"class":30,"line":1291},[28,49749,2477],{"emptyLinePlaceholder":144},[28,49751,49752],{"class":30,"line":1297},[28,49753,34027],{"class":105},[28,49755,49756,49758,49760],{"class":30,"line":1388},[28,49757,32023],{"class":38},[28,49759,34034],{"class":2040},[28,49761,32029],{"class":34},[28,49763,49764],{"class":30,"line":1394},[28,49765,49766],{"class":105},"   # 导入自己的数据集，并进行数据处理\n",[28,49768,49769],{"class":30,"line":1406},[28,49770,48037],{"class":105},[28,49772,49773,49775,49777,49779,49781,49783,49786],{"class":30,"line":1689},[28,49774,48042],{"class":45},[28,49776,39],{"class":38},[28,49778,880],{"class":38},[28,49780,465],{"class":320},[28,49782,768],{"class":45},[28,49784,49785],{"class":48053},"\u002Fdata\u002Ftest",[28,49787,25211],{"class":320},[28,49789,49790],{"class":30,"line":1694},[28,49791,2477],{"emptyLinePlaceholder":144},[28,49793,49794],{"class":30,"line":1700},[28,49795,48065],{"class":105},[28,49797,49798],{"class":30,"line":1705},[28,49799,48070],{"class":105},[28,49801,49802],{"class":30,"line":1719},[28,49803,48075],{"class":105},[28,49805,49806],{"class":30,"line":1724},[28,49807,48080],{"class":105},[28,49809,49810,49812,49814,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838],{"class":30,"line":1730},[28,49811,48085],{"class":34},[28,49813,39],{"class":38},[28,49815,48090],{"class":34},[28,49817,48093],{"class":45},[28,49819,49],{"class":34},[28,49821,48098],{"class":45},[28,49823,49],{"class":34},[28,49825,48103],{"class":45},[28,49827,60],{"class":34},[28,49829,48108],{"class":45},[28,49831,49],{"class":34},[28,49833,48113],{"class":45},[28,49835,49],{"class":34},[28,49837,48118],{"class":45},[28,49839,4734],{"class":34},[28,49841,49842],{"class":30,"line":1751},[28,49843,48125],{"class":105},[28,49845,49846,49848,49850],{"class":30,"line":1756},[28,49847,48130],{"class":34},[28,49849,39],{"class":38},[28,49851,48135],{"class":34},[28,49853,49854],{"class":30,"line":1770},[28,49855,48140],{"class":105},[28,49857,49858,49860,49862,49864,49866],{"class":30,"line":1775},[28,49859,48145],{"class":34},[28,49861,31577],{"class":45},[28,49863,49],{"class":34},[28,49865,31577],{"class":45},[28,49867,42698],{"class":34},[28,49869,49870],{"class":30,"line":1804},[28,49871,48158],{"class":105},[28,49873,49874],{"class":30,"line":1809},[28,49875,48163],{"class":34},[28,49877,49878],{"class":30,"line":1826},[28,49879,48168],{"class":34},[28,49881,49882],{"class":30,"line":1831},[28,49883,48173],{"class":105},[28,49885,49886],{"class":30,"line":1836},[28,49887,48178],{"class":105},[28,49889,49890],{"class":30,"line":1841},[28,49891,2477],{"emptyLinePlaceholder":144},[28,49893,49894],{"class":30,"line":1855},[28,49895,48187],{"class":105},[28,49897,49898],{"class":30,"line":1860},[28,49899,48192],{"class":105},[28,49901,49902,49904,49906,49908,49910,49912,49914,49916],{"class":30,"line":2654},[28,49903,34041],{"class":34},[28,49905,39],{"class":38},[28,49907,48201],{"class":34},[28,49909,48204],{"class":45},[28,49911,49],{"class":34},[28,49913,48209],{"class":5293},[28,49915,39],{"class":38},[28,49917,48214],{"class":34},[28,49919,49920,49922,49924,49926,49928,49930],{"class":30,"line":2668},[28,49921,34098],{"class":34},[28,49923,39],{"class":38},[28,49925,31610],{"class":34},[28,49927,31613],{"class":5293},[28,49929,39],{"class":38},[28,49931,34109],{"class":34},[28,49933,49934],{"class":30,"line":2676},[28,49935,34114],{"class":105},[28,49937,49938,49940,49942,49944],{"class":30,"line":2681},[28,49939,34119],{"class":5293},[28,49941,39],{"class":38},[28,49943,46],{"class":45},[28,49945,31542],{"class":34},[28,49947,49948,49950,49952,49954],{"class":30,"line":2687},[28,49949,34130],{"class":5293},[28,49951,39],{"class":38},[28,49953,31552],{"class":45},[28,49955,31542],{"class":34},[28,49957,49958,49960,49962,49964],{"class":30,"line":2693},[28,49959,34141],{"class":5293},[28,49961,39],{"class":38},[28,49963,407],{"class":45},[28,49965,227],{"class":34},[28,49967,49968,49970],{"class":30,"line":2698},[28,49969,4167],{"class":38},[28,49971,34154],{"class":34},[28,49973,49974],{"class":30,"line":8025},[28,49975,2477],{"emptyLinePlaceholder":144},[28,49977,49978],{"class":30,"line":8049},[28,49979,34163],{"class":105},[28,49981,49982,49984,49986],{"class":30,"line":8054},[28,49983,32023],{"class":38},[28,49985,34170],{"class":2040},[28,49987,34173],{"class":34},[28,49989,49990],{"class":30,"line":8060},[28,49991,34178],{"class":105},[28,49993,49994,49996,49998,50000,50002,50004,50006],{"class":30,"line":8087},[28,49995,31313],{"class":34},[28,49997,39],{"class":38},[28,49999,31320],{"class":320},[28,50001,1781],{"class":38},[28,50003,31325],{"class":34},[28,50005,1778],{"class":38},[28,50007,34195],{"class":320},[28,50009,50010,50012,50014],{"class":30,"line":8092},[28,50011,31365],{"class":34},[28,50013,39],{"class":38},[28,50015,32365],{"class":34},[28,50017,50018],{"class":30,"line":8098},[28,50019,2477],{"emptyLinePlaceholder":144},[28,50021,50022],{"class":30,"line":8110},[28,50023,34212],{"class":105},[28,50025,50026,50028,50030],{"class":30,"line":8122},[28,50027,34217],{"class":34},[28,50029,39],{"class":38},[28,50031,32418],{"class":45},[28,50033,50034,50036,50038],{"class":30,"line":8134},[28,50035,34226],{"class":34},[28,50037,39],{"class":38},[28,50039,3162],{"class":45},[28,50041,50042],{"class":30,"line":9793},[28,50043,2477],{"emptyLinePlaceholder":144},[28,50045,50046],{"class":30,"line":9818},[28,50047,34239],{"class":105},[28,50049,50050],{"class":30,"line":9841},[28,50051,34244],{"class":105},[28,50053,50054],{"class":30,"line":9865},[28,50055,34249],{"class":105},[28,50057,50058,50060],{"class":30,"line":9870},[28,50059,34254],{"class":38},[28,50061,32960],{"class":34},[28,50063,50064],{"class":30,"line":9875},[28,50065,34261],{"class":105},[28,50067,50068,50070,50072,50074],{"class":30,"line":9880},[28,50069,3480],{"class":38},[28,50071,34268],{"class":34},[28,50073,26121],{"class":38},[28,50075,34273],{"class":34},[28,50077,50078,50080,50082],{"class":30,"line":9889},[28,50079,34278],{"class":34},[28,50081,39],{"class":38},[28,50083,34283],{"class":34},[28,50085,50086,50088,50090],{"class":30,"line":9894},[28,50087,34288],{"class":34},[28,50089,39],{"class":38},[28,50091,34293],{"class":34},[28,50093,50094],{"class":30,"line":9900},[28,50095,34298],{"class":105},[28,50097,50098],{"class":30,"line":9921},[28,50099,32951],{"class":34},[28,50101,50102],{"class":30,"line":9927},[28,50103,34307],{"class":105},[28,50105,50106,50108,50110],{"class":30,"line":9941},[28,50107,32736],{"class":34},[28,50109,39],{"class":38},[28,50111,34316],{"class":34},[28,50113,50114],{"class":30,"line":9947},[28,50115,34321],{"class":105},[28,50117,50118,50120,50122,50124,50126,50128,50130],{"class":30,"line":9974},[28,50119,32753],{"class":34},[28,50121,39],{"class":38},[28,50123,32758],{"class":34},[28,50125,32761],{"class":5293},[28,50127,39],{"class":38},[28,50129,46],{"class":45},[28,50131,227],{"class":34},[28,50133,50134],{"class":30,"line":9983},[28,50135,34342],{"class":105},[28,50137,50138],{"class":30,"line":9989},[28,50139,34347],{"class":105},[28,50141,50142],{"class":30,"line":9997},[28,50143,34352],{"class":105},[28,50145,50146,50148,50150,50152,50154],{"class":30,"line":10002},[28,50147,34357],{"class":34},[28,50149,9554],{"class":38},[28,50151,32863],{"class":34},[28,50153,3026],{"class":38},[28,50155,34366],{"class":34},[28,50157,50158],{"class":30,"line":16681},[28,50159,34371],{"class":105},[28,50161,50162,50164,50166,50168,50170],{"class":30,"line":16687},[28,50163,34376],{"class":34},[28,50165,9554],{"class":38},[28,50167,34381],{"class":34},[28,50169,407],{"class":45},[28,50171,227],{"class":34},[28,50173,50174],{"class":30,"line":16710},[28,50175,2477],{"emptyLinePlaceholder":144},[28,50177,50178],{"class":30,"line":16716},[28,50179,34394],{"class":105},[28,50181,50182,50184,50186,50188,50190],{"class":30,"line":16739},[28,50183,34399],{"class":34},[28,50185,39],{"class":38},[28,50187,34404],{"class":34},[28,50189,794],{"class":38},[28,50191,34409],{"class":34},[28,50193,50194],{"class":30,"line":16753},[28,50195,34414],{"class":105},[28,50197,50198,50200,50202,50204],{"class":30,"line":16773},[28,50199,32527],{"class":45},[28,50201,221],{"class":34},[28,50203,34423],{"class":320},[28,50205,34426],{"class":34},[28,50207,50208],{"class":30,"line":16779},[28,50209,2477],{"emptyLinePlaceholder":144},[28,50211,50212],{"class":30,"line":16790},[28,50213,34435],{"class":105},[28,50215,50216,50218,50220,50222,50224],{"class":30,"line":16813},[28,50217,1608],{"class":38},[28,50219,31296],{"class":45},[28,50221,3026],{"class":38},[28,50223,31301],{"class":320},[28,50225,3816],{"class":34},[28,50227,50228],{"class":30,"line":16835},[28,50229,34452],{"class":105},[28,50231,50232,50234,50236],{"class":30,"line":16840},[28,50233,31365],{"class":34},[28,50235,39],{"class":38},[28,50237,44627],{"class":34},[28,50239,50240],{"class":30,"line":16846},[28,50241,34465],{"class":105},[28,50243,50244],{"class":30,"line":16860},[28,50245,34470],{"class":105},[28,50247,50248,50250,50252],{"class":30,"line":16873},[28,50249,34475],{"class":34},[28,50251,34478],{"class":320},[28,50253,30573],{"class":34},[28,50255,50256],{"class":30,"line":16878},[28,50257,34485],{"class":105},[28,50259,50260,50262,50264],{"class":30,"line":16892},[28,50261,34098],{"class":34},[28,50263,39],{"class":38},[28,50265,34494],{"class":34},[28,50267,50268],{"class":30,"line":16897},[28,50269,34499],{"class":105},[28,50271,50272],{"class":30,"line":16903},[28,50273,34504],{"class":34},[28,50275,50276],{"class":30,"line":16908},[28,50277,2477],{"emptyLinePlaceholder":144},[28,50279,50280],{"class":30,"line":16922},[28,50281,34513],{"class":105},[28,50283,50284],{"class":30,"line":16927},[28,50285,34518],{"class":105},[28,50287,50288,50290,50292,50294,50296,50298,50300],{"class":30,"line":16932},[28,50289,31313],{"class":34},[28,50291,39],{"class":38},[28,50293,31320],{"class":320},[28,50295,1781],{"class":38},[28,50297,31325],{"class":34},[28,50299,1778],{"class":38},[28,50301,34195],{"class":320},[28,50303,50304,50306,50308],{"class":30,"line":16946},[28,50305,31365],{"class":34},[28,50307,39],{"class":38},[28,50309,32365],{"class":34},[28,50311,50312],{"class":30,"line":16958},[28,50313,34547],{"class":105},[28,50315,50316],{"class":30,"line":16963},[28,50317,34552],{"class":105},[28,50319,50320,50322,50324,50326,50329,50331,50334],{"class":30,"line":16976},[28,50321,34557],{"class":34},[28,50323,39],{"class":38},[28,50325,1096],{"class":34},[28,50327,50328],{"class":320},"'猫'",[28,50330,49],{"class":34},[28,50332,50333],{"class":320},"'狗'",[28,50335,33322],{"class":34},[28,50337,50338,50340],{"class":30,"line":16981},[28,50339,34254],{"class":38},[28,50341,32960],{"class":34},[28,50343,50344],{"class":30,"line":16986},[28,50345,34622],{"class":105},[28,50347,50348,50350,50352,50354],{"class":30,"line":16991},[28,50349,3480],{"class":38},[28,50351,34629],{"class":34},[28,50353,26121],{"class":38},[28,50355,34273],{"class":34},[28,50357,50358,50360,50362],{"class":30,"line":17004},[28,50359,32686],{"class":34},[28,50361,39],{"class":38},[28,50363,32691],{"class":34},[28,50365,50366,50368,50370],{"class":30,"line":17009},[28,50367,32701],{"class":34},[28,50369,39],{"class":38},[28,50371,32706],{"class":34},[28,50373,50374],{"class":30,"line":32709},[28,50375,2477],{"emptyLinePlaceholder":144},[28,50377,50378],{"class":30,"line":32715},[28,50379,34658],{"class":105},[28,50381,50382],{"class":30,"line":32721},[28,50383,32951],{"class":34},[28,50385,50386],{"class":30,"line":32727},[28,50387,34667],{"class":105},[28,50389,50390,50392,50394],{"class":30,"line":32733},[28,50391,32736],{"class":34},[28,50393,39],{"class":38},[28,50395,32741],{"class":34},[28,50397,50398],{"class":30,"line":32744},[28,50399,34680],{"class":105},[28,50401,50402,50404,50406,50408,50410,50412,50414],{"class":30,"line":32750},[28,50403,32753],{"class":34},[28,50405,39],{"class":38},[28,50407,32758],{"class":34},[28,50409,32761],{"class":5293},[28,50411,39],{"class":38},[28,50413,46],{"class":45},[28,50415,227],{"class":34},[28,50417,50418],{"class":30,"line":32770},[28,50419,34701],{"class":105},[28,50421,50422,50424,50426],{"class":30,"line":32776},[28,50423,34706],{"class":34},[28,50425,39],{"class":38},[28,50427,34711],{"class":34},[28,50429,50430,50432,50434],{"class":30,"line":32787},[28,50431,34716],{"class":34},[28,50433,39],{"class":38},[28,50435,34721],{"class":34},[28,50437,50438,50440,50442,50444,50446,50448,50450,50452],{"class":30,"line":32793},[28,50439,34726],{"class":45},[28,50441,221],{"class":34},[28,50443,34731],{"class":320},[28,50445,34734],{"class":34},[28,50447,34737],{"class":320},[28,50449,49],{"class":34},[28,50451,34742],{"class":320},[28,50453,34745],{"class":34},[136,50455,50456],{},"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":23,"searchDepth":94,"depth":94,"links":50458},[50459,50460,50461,50462],{"id":30667,"depth":109,"text":30668},{"id":37915,"depth":109,"text":37916},{"id":41348,"depth":109,"text":41349},{"id":45357,"depth":109,"text":45358},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30659,"description":141},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50469,"title":50470,"body":50471,"description":141,"extension":142,"meta":50478,"navigation":144,"path":50479,"seo":50480,"stem":50481,"__hash__":50482},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50472,"toc":50476},[50473],[10,50474,50470],{"id":50475},"_3yolo模型学习",{"title":23,"searchDepth":94,"depth":94,"links":50477},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50470,"description":141},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50484,"title":50485,"body":50486,"description":50493,"extension":142,"meta":50494,"navigation":144,"path":50496,"seo":50497,"stem":50498,"__hash__":50499},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50487,"toc":50491},[50488],[14,50489,50490],{},"yolo模型还未补充",{"title":23,"searchDepth":94,"depth":94,"links":50492},[],"深度学习学习",{"category":50495},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50485,"description":50493},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50501,"title":50502,"body":50503,"description":141,"extension":142,"meta":50528,"navigation":144,"path":50529,"seo":50530,"stem":50531,"__hash__":50532},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50504,"toc":50526},[50505,50508,50511,50516,50523],[10,50506,50502],{"id":50507},"_1工具",[14,50509,50510],{},"提示错误插件：有问题会提前报错",[14,50512,50513],{},[1539,50514],{"alt":23,"src":50515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50517,50518],{},[35,50519,50522],{"href":50520,"rel":50521},"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",[23942],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50524,50525],{},"alt键加上下箭头可以实现语句的移动",{"title":23,"searchDepth":94,"depth":94,"links":50527},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50502,"description":141},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50534,"title":50535,"body":50536,"description":141,"extension":142,"meta":53400,"navigation":144,"path":53401,"seo":53402,"stem":53403,"__hash__":53404},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50537,"toc":53351},[50538,50541,50545,50549,50554,50557,50562,50566,50573,50578,50585,50590,50597,50602,50606,50611,50614,50618,50623,50627,50632,50635,50638,50641,50644,50647,50650,50653,50656,50661,50666,50671,50675,50678,50681,50685,50690,50693,50701,50706,50723,50731,50736,50741,50746,50751,50756,50759,50764,50769,50773,50782,50787,50792,50796,50801,50804,50808,50813,50821,50826,50831,50834,50839,50844,50849,50852,50855,50858,50863,50868,50871,50876,50879,50884,50887,50890,50893,50898,50901,50904,50919,50924,50929,50934,50937,50940,50943,50957,50960,50965,50970,50973,50976,50979,50982,50985,50988,50991,50995,50999,51004,51008,51011,51016,51021,51024,51029,51032,51036,51041,51044,51047,51050,51053,51056,51059,51062,51065,51068,51072,51077,51082,51087,51090,51093,51097,51102,51105,51109,51112,51115,51120,51123,51126,51130,51134,51137,51142,51147,51150,51179,51184,51189,51194,51199,51203,51208,51212,51217,51220,51224,51228,51233,51237,51242,51247,51251,51256,51259,51261,51264,51269,51273,51278,51282,51286,51291,51296,51301,51306,51310,51315,51320,51325,51328,51331,51336,51339,51344,51349,51354,51359,51363,52170,52174,52517,52522,52525,52528,52531,52534,52537,52540,52543,52546,52548,52551,52553,52556,52560,52565,52568,52571,52574,52578,52583,52588,52608,52611,52615,52620,52625,52642,52646,52675,52679,52701,52703,52742,52750,52756,52760,52763,52766,52771,52776,52779,52782,52785,52790,52795,52798,52801,52804,52807,52810,52813,52816,52819,52822,52825,52828,52830,52833,52836,52839,52842,52845,52848,52851,52854,52858,52863,52866,52871,52874,52877,52880,52883,52886,52889,52892,52894,52897,52900,52903,52906,52909,52912,52916,52919,52928,52931,52936,52939,52944,52947,52950,52953,52956,52959,52962,52965,52969,52973,52976,52979,52984,52989,52994,52998,53003,53008,53011,53014,53017,53020,53023,53028,53031,53036,53038,53043,53046,53050,53055,53058,53061,53066,53070,53073,53078,53081,53084,53113,53118,53121,53124,53127,53130,53133,53137,53140,53226,53230,53233,53238,53243,53250,53253,53256,53259,53262,53265,53270,53275,53278,53281,53284,53287,53290,53293,53296,53299,53302,53304,53307,53311,53316,53321,53326,53329,53334,53339,53342,53345,53348],[10,50539,50535],{"id":50540},"_2基础语法",[159,50542,50544],{"id":50543},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[188,50546,50548],{"id":50547},"_211-js组成","2.1.1 js组成",[171,50550,50551],{},[174,50552,50553],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50555,50556],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[171,50558,50559],{"start":94},[174,50560,50561],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[188,50563,50565],{"id":50564},"_212-js书写位置","2.1.2 js书写位置",[171,50567,50568],{},[174,50569,50570],{},[365,50571,50572],{},"内部 JavaScript",[14,50574,50575],{},[1539,50576],{"alt":23,"src":50577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[171,50579,50580],{"start":94},[174,50581,50582],{},[365,50583,50584],{},"外部 JavaScript",[14,50586,50587],{},[1539,50588],{"alt":23,"src":50589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[171,50591,50592],{"start":109},[174,50593,50594],{},[365,50595,50596],{},"内联 JavaScript",[14,50598,50599],{},[1539,50600],{"alt":23,"src":50601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[188,50603,50605],{"id":50604},"_213-javascript注释","2.1.3 JavaScript注释",[14,50607,50608],{},[1539,50609],{"alt":23,"src":50610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50612,50613],{},"alt+shift+a一定要记住！",[188,50615,50617],{"id":50616},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50619,50620],{},[1539,50621],{"alt":23,"src":50622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[188,50624,50626],{"id":50625},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[171,50628,50629],{},[174,50630,50631],{},"输出语法：",[14,50633,50634],{},"①document.write('要出的内容')",[14,50636,50637],{},"向body内输出内容；",[14,50639,50640],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50642,50643],{},"②alert('要出的内容')",[14,50645,50646],{},"页面弹出警告对话框",[14,50648,50649],{},"③console.log('控制台打印')",[14,50651,50652],{},"控制台输出语法，程序员调试使用",[14,50654,50655],{},"输入log就行，自动生成：",[14,50657,50658],{},[1539,50659],{"alt":23,"src":50660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[171,50662,50663],{"start":94},[174,50664,50665],{},"输入语法：",[14,50667,50668],{},[1539,50669],{"alt":23,"src":50670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[188,50672,50674],{"id":50673},"_2116-字面量","21.1.6 字面量",[14,50676,50677],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50679,50680],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[159,50682,50684],{"id":50683},"_22-变量","2.2 变量",[171,50686,50687],{},[174,50688,50689],{},"变量声明",[14,50691,50692],{},"let 变量名",[1211,50694,50695,50698],{},[174,50696,50697],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[174,50699,50700],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[171,50702,50703],{"start":94},[174,50704,50705],{},"变量赋值",[18,50707,50711],{"className":50708,"code":50709,"language":50710,"meta":23,"style":23},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[25,50712,50713,50718],{"__ignoreMap":23},[28,50714,50715],{"class":30,"line":31},[28,50716,50717],{"class":34},"let age\n",[28,50719,50720],{"class":30,"line":94},[28,50721,50722],{"class":34},"age=18\n",[171,50724,50725,50728],{"start":109},[174,50726,50727],{},"连这些（变量的初始化）：let age=18",[174,50729,50730],{},"更新变量",[14,50732,50733],{},[1539,50734],{"alt":23,"src":50735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[171,50737,50738],{"start":131},[174,50739,50740],{},"声明多个变量",[14,50742,50743],{},[1539,50744],{"alt":23,"src":50745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[171,50747,50748],{"start":1291},[174,50749,50750],{},"变量命名规则与规范",[14,50752,50753],{},[1539,50754],{"alt":23,"src":50755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50757,50758],{},"遵守小驼峰！",[171,50760,50761],{"start":1297},[174,50762,50763],{},"变量拓展-let和var的区别",[14,50765,50766],{},[1539,50767],{"alt":23,"src":50768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[159,50770,50772],{"id":50771},"_23-数组","2.3 数组",[18,50774,50776],{"className":50708,"code":50775,"language":50710,"meta":23,"style":23},"let arr = []\n",[25,50777,50778],{"__ignoreMap":23},[28,50779,50780],{"class":30,"line":31},[28,50781,50775],{"class":34},[14,50783,50784],{},[1539,50785],{"alt":23,"src":50786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50788,50789],{},[1539,50790],{"alt":23,"src":50791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[159,50793,50795],{"id":50794},"_24-常量","2.4 常量",[14,50797,50798],{},[1539,50799],{"alt":23,"src":50800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50802,50803],{},"const — 类似于 let ，但是变量的值无法被修改",[159,50805,50807],{"id":50806},"_25-数据类型","2.5 数据类型",[14,50809,50810],{},[1539,50811],{"alt":23,"src":50812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[171,50814,50815,50818],{},[174,50816,50817],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[174,50819,50820],{},"算数运算符：",[14,50822,50823],{},[1539,50824],{"alt":23,"src":50825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[171,50827,50828],{"start":109},[174,50829,50830],{},"数字类型（Number）",[14,50832,50833],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50835,50836],{},[1539,50837],{"alt":23,"src":50838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[171,50840,50841],{"start":125},[174,50842,50843],{},"字符串类型（string）",[14,50845,50846],{},[1539,50847],{"alt":23,"src":50848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50850,50851],{},"反引号也是可以使用的",[14,50853,50854],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50856,50857],{},"例如：document.write(\"我今年\"+age+\"岁\")",[171,50859,50860],{"start":131},[174,50861,50862],{},"模板字符串",[14,50864,50865],{},[1539,50866],{"alt":23,"src":50867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50869,50870],{},"类似于python的字符串格式化",[171,50872,50873],{"start":1291},[174,50874,50875],{},"布尔类型",[14,50877,50878],{},"true 和 false",[171,50880,50881],{"start":1297},[174,50882,50883],{},"未定义类型（underfined）",[14,50885,50886],{},"表示没有赋值",[14,50888,50889],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50891,50892],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[171,50894,50895],{"start":1388},[174,50896,50897],{},"null（空类型）",[14,50899,50900],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50902,50903],{},"赋值了，但是内容为空",[18,50905,50907],{"className":50708,"code":50906,"language":50710,"meta":23,"style":23},"typeof null\n输出的是'object'，是一个对象数据类型\n",[25,50908,50909,50914],{"__ignoreMap":23},[28,50910,50911],{"class":30,"line":31},[28,50912,50913],{"class":34},"typeof null\n",[28,50915,50916],{"class":30,"line":94},[28,50917,50918],{"class":34},"输出的是'object'，是一个对象数据类型\n",[171,50920,50921],{"start":1394},[174,50922,50923],{},"控制台检测数据类型",[14,50925,50926],{},[1539,50927],{"alt":23,"src":50928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[171,50930,50931],{"start":1406},[174,50932,50933],{},"类型转换",[14,50935,50936],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50938,50939],{},"转换方式：隐式转换和显示转换",[14,50941,50942],{},"①隐式转换",[1211,50944,50945,50948,50951,50954],{},[174,50946,50947],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[174,50949,50950],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[174,50952,50953],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[174,50955,50956],{},"任何数据和字符串相加结果都是字符串",[14,50958,50959],{},"②显示转换",[14,50961,50962],{},[1539,50963],{"alt":23,"src":50964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50966,50967],{},[1539,50968],{"alt":23,"src":50969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50971,50972],{},"在输入的时候要用好隐式转换，简单写起来",[14,50974,50975],{},"let num = +prompt(’请输入数字：‘)",[14,50977,50978],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50980,50981],{},"console.log(parseInt('12.333px'))",[14,50983,50984],{},"输出为：12",[14,50986,50987],{},"console.log(parseInt('a'a'a12.333px'))",[14,50989,50990],{},"输出：NaN",[159,50992,50994],{"id":50993},"_26-运算符","2.6 运算符",[188,50996,50998],{"id":50997},"_261-赋值运算符","2.6.1 赋值运算符",[14,51000,51001],{},[1539,51002],{"alt":23,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[188,51005,51007],{"id":51006},"_262-一元运算符","2.6.2 一元运算符",[14,51009,51010],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51012,51013],{},[1539,51014],{"alt":23,"src":51015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51017,51018],{},[1539,51019],{"alt":23,"src":51020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51022,51023],{},"两者的区别：",[14,51025,51026],{},[1539,51027],{"alt":23,"src":51028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51030,51031],{},"前置先自加；后置后加，代码执行完之后再加",[188,51033,51035],{"id":51034},"_263-比较运算符","2.6.3 比较运算符",[14,51037,51038],{},[1539,51039],{"alt":23,"src":51040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51042,51043],{},"比较运算符也有隐式转换",[14,51045,51046],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51048,51049],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51051,51052],{},"要使用三等，开发的时候",[14,51054,51055],{},"NaN不等于任何人，包括它自己",[14,51057,51058],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51060,51061],{},"7\u002F10=0.7",[14,51063,51064],{},"最后：0.5+0.2=0.7",[14,51066,51067],{},"字符串比较，比较的是字符对应的ASCII码",[188,51069,51071],{"id":51070},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51073,51074],{},[1539,51075],{"alt":23,"src":51076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51078,51079],{},[1539,51080],{"alt":23,"src":51081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51083,51084],{},[1539,51085],{"alt":23,"src":51086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51088,51089],{},"上述题目选D",[14,51091,51092],{},"与真2假1；或真1假2",[188,51094,51096],{"id":51095},"_265-运算符优先级","2.6.5 运算符优先级",[14,51098,51099],{},[1539,51100],{"alt":23,"src":51101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51103,51104],{},"先算逻辑与，后算逻辑或",[159,51106,51108],{"id":51107},"_27-语句","2.7 语句",[14,51110,51111],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51113,51114],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51116,51117],{},[1539,51118],{"alt":23,"src":51119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51121,51122],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51124,51125],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[188,51127,51129],{"id":51128},"_271-分支语句","2.7.1 分支语句",[22075,51131,51133],{"id":51132},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51135,51136],{},"if语句单行简单的话，可以不写{}，写在一行就行",[171,51138,51139],{},[174,51140,51141],{},"单分支语句",[14,51143,51144],{},[1539,51145],{"alt":23,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51148,51149],{},"除了0，所有数字都为真",[18,51151,51153],{"className":50708,"code":51152,"language":50710,"meta":23,"style":23},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[25,51154,51155,51160,51165,51170,51174],{"__ignoreMap":23},[28,51156,51157],{"class":30,"line":31},[28,51158,51159],{"class":34},"if（0) {\n",[28,51161,51162],{"class":30,"line":94},[28,51163,51164],{"class":34},"    let a=1\n",[28,51166,51167],{"class":30,"line":109},[28,51168,51169],{"class":34},"    alert(typeof a)\n",[28,51171,51172],{"class":30,"line":125},[28,51173,1642],{"class":34},[28,51175,51176],{"class":30,"line":131},[28,51177,51178],{"class":34},"不输出，括号为假\n",[171,51180,51181],{"start":94},[174,51182,51183],{},"双分支语句",[14,51185,51186],{},[1539,51187],{"alt":23,"src":51188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[171,51190,51191],{"start":109},[174,51192,51193],{},"多分支语句",[14,51195,51196],{},[1539,51197],{"alt":23,"src":51198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22075,51200,51202],{"id":51201},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51204,51205],{},[1539,51206],{"alt":23,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22075,51209,51211],{"id":51210},"_2713-switch语句","2.7.1.3 switch语句",[14,51213,51214],{},[1539,51215],{"alt":23,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51218,51219],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[188,51221,51223],{"id":51222},"_272-循环语句","2.7.2 循环语句",[22075,51225,51227],{"id":51226},"_2721-断点演示","2.7.2.1 断点演示",[14,51229,51230],{},[1539,51231],{"alt":23,"src":51232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22075,51234,51236],{"id":51235},"_2722-while循环","2.7.2.2 while循环",[14,51238,51239],{},[1539,51240],{"alt":23,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51243,51244],{},[1539,51245],{"alt":23,"src":51246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22075,51248,51250],{"id":51249},"_2723-for循环","2.7.2.3 for循环",[14,51252,51253],{},[1539,51254],{"alt":23,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51257,51258],{},"for(;;) {",[14,51260,1150],{},[14,51262,51263],{},"表示无限循环",[14,51265,51266],{},[1539,51267],{"alt":23,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22075,51270,51272],{"id":51271},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51274,51275],{},[1539,51276],{"alt":23,"src":51277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[159,51279,51281],{"id":51280},"_28-数组","2.8 数组",[188,51283,51285],{"id":51284},"_281-基础认识","2.8.1 基础认识",[14,51287,51288],{},[1539,51289],{"alt":23,"src":51290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51292,51293],{},[1539,51294],{"alt":23,"src":51295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51297,51298],{},[1539,51299],{"alt":23,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51302,51303],{},[1539,51304],{"alt":23,"src":51305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[188,51307,51309],{"id":51308},"_282-操作数组","2.8.2 操作数组",[14,51311,51312],{},[1539,51313],{"alt":23,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[171,51316,51317],{},[174,51318,51319],{},"添加元素",[14,51321,51322],{},[1539,51323],{"alt":23,"src":51324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51326,51327],{},"console.log(arr.push('green'))",[14,51329,51330],{},"输出结果：为新数组的长度",[14,51332,51333],{},[1539,51334],{"alt":23,"src":51335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51337,51338],{},"push用的非常多，一定要记住",[171,51340,51341],{},[174,51342,51343],{},"删除元素",[14,51345,51346],{},[1539,51347],{"alt":23,"src":51348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51350,51351],{},[1539,51352],{"alt":23,"src":51353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51355,51356],{},[1539,51357],{"alt":23,"src":51358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[188,51360,51362],{"id":51361},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[18,51364,51366],{"className":50708,"code":51365,"language":50710,"meta":23,"style":23},"\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",[25,51367,51368,51383,51399,51403,51412,51430,51454,51476,51490,51498,51505,51517,51528,51532,51536,51543,51555,51570,51583,51602,51619,51634,51646,51658,51670,51674,51678,51689,51699,51711,51723,51735,51746,51750,51754,51766,51770,51784,51788,51792,51803,51817,51829,51843,51847,51856,51865,51869,51878,51882,51891,51896,51901,51914,51942,51947,51952,51977,51982,51986,51991,51996,52011,52015,52020,52050,52062,52078,52094,52108,52113,52120,52124,52129,52142,52150,52158,52162],{"__ignoreMap":23},[28,51369,51370,51373,51377,51380],{"class":30,"line":31},[28,51371,51372],{"class":34},"\u003C!",[28,51374,51376],{"class":51375},"s9eBZ","DOCTYPE",[28,51378,51379],{"class":2040}," html",[28,51381,51382],{"class":34},">\n",[28,51384,51385,51387,51389,51392,51394,51397],{"class":30,"line":94},[28,51386,99],{"class":34},[28,51388,50710],{"class":51375},[28,51390,51391],{"class":2040}," lang",[28,51393,39],{"class":34},[28,51395,51396],{"class":320},"\"en\"",[28,51398,51382],{"class":34},[28,51400,51401],{"class":30,"line":109},[28,51402,2477],{"emptyLinePlaceholder":144},[28,51404,51405,51407,51410],{"class":30,"line":125},[28,51406,99],{"class":34},[28,51408,51409],{"class":51375},"head",[28,51411,51382],{"class":34},[28,51413,51414,51417,51420,51423,51425,51428],{"class":30,"line":131},[28,51415,51416],{"class":34},"    \u003C",[28,51418,51419],{"class":51375},"meta",[28,51421,51422],{"class":2040}," charset",[28,51424,39],{"class":34},[28,51426,51427],{"class":320},"\"UTF-8\"",[28,51429,51382],{"class":34},[28,51431,51432,51434,51436,51439,51441,51444,51447,51449,51452],{"class":30,"line":1291},[28,51433,51416],{"class":34},[28,51435,51419],{"class":51375},[28,51437,51438],{"class":2040}," http-equiv",[28,51440,39],{"class":34},[28,51442,51443],{"class":320},"\"X-UA-Compatible\"",[28,51445,51446],{"class":2040}," content",[28,51448,39],{"class":34},[28,51450,51451],{"class":320},"\"IE=edge\"",[28,51453,51382],{"class":34},[28,51455,51456,51458,51460,51462,51464,51467,51469,51471,51474],{"class":30,"line":1297},[28,51457,51416],{"class":34},[28,51459,51419],{"class":51375},[28,51461,14997],{"class":2040},[28,51463,39],{"class":34},[28,51465,51466],{"class":320},"\"viewport\"",[28,51468,51446],{"class":2040},[28,51470,39],{"class":34},[28,51472,51473],{"class":320},"\"width=device-width, initial-scale=1.0\"",[28,51475,51382],{"class":34},[28,51477,51478,51480,51483,51486,51488],{"class":30,"line":1388},[28,51479,51416],{"class":34},[28,51481,51482],{"class":51375},"title",[28,51484,51485],{"class":34},">Document\u003C\u002F",[28,51487,51482],{"class":51375},[28,51489,51382],{"class":34},[28,51491,51492,51494,51496],{"class":30,"line":1394},[28,51493,51416],{"class":34},[28,51495,136],{"class":51375},[28,51497,51382],{"class":34},[28,51499,51500,51503],{"class":30,"line":1406},[28,51501,51502],{"class":51375},"        *",[28,51504,15649],{"class":34},[28,51506,51507,51510,51513,51515],{"class":30,"line":1689},[28,51508,51509],{"class":45},"            margin",[28,51511,51512],{"class":34},": ",[28,51514,407],{"class":45},[28,51516,1367],{"class":34},[28,51518,51519,51522,51524,51526],{"class":30,"line":1694},[28,51520,51521],{"class":45},"            padding",[28,51523,51512],{"class":34},[28,51525,407],{"class":45},[28,51527,1367],{"class":34},[28,51529,51530],{"class":30,"line":1700},[28,51531,2606],{"class":34},[28,51533,51534],{"class":30,"line":1705},[28,51535,2477],{"emptyLinePlaceholder":144},[28,51537,51538,51541],{"class":30,"line":1719},[28,51539,51540],{"class":2040},"        .box",[28,51542,15649],{"class":34},[28,51544,51545,51548,51550,51553],{"class":30,"line":1724},[28,51546,51547],{"class":45},"            display",[28,51549,51512],{"class":34},[28,51551,51552],{"class":45},"flex",[28,51554,1367],{"class":34},[28,51556,51557,51560,51562,51565,51568],{"class":30,"line":1730},[28,51558,51559],{"class":45},"            width",[28,51561,51512],{"class":34},[28,51563,51564],{"class":45},"700",[28,51566,51567],{"class":38},"px",[28,51569,1367],{"class":34},[28,51571,51572,51575,51577,51579,51581],{"class":30,"line":1751},[28,51573,51574],{"class":45},"            height",[28,51576,51512],{"class":34},[28,51578,4050],{"class":45},[28,51580,51567],{"class":38},[28,51582,1367],{"class":34},[28,51584,51585,51588,51590,51592,51594,51597,51600],{"class":30,"line":1756},[28,51586,51587],{"class":45},"            border-left",[28,51589,51512],{"class":34},[28,51591,46],{"class":45},[28,51593,51567],{"class":38},[28,51595,51596],{"class":45}," solid",[28,51598,51599],{"class":45}," pink",[28,51601,1367],{"class":34},[28,51603,51604,51607,51609,51611,51613,51615,51617],{"class":30,"line":1770},[28,51605,51606],{"class":45},"            border-bottom",[28,51608,51512],{"class":34},[28,51610,46],{"class":45},[28,51612,51567],{"class":38},[28,51614,51596],{"class":45},[28,51616,51599],{"class":45},[28,51618,1367],{"class":34},[28,51620,51621,51623,51625,51627,51629,51632],{"class":30,"line":1775},[28,51622,51509],{"class":45},[28,51624,51512],{"class":34},[28,51626,866],{"class":45},[28,51628,51567],{"class":38},[28,51630,51631],{"class":45}," auto",[28,51633,1367],{"class":34},[28,51635,51636,51639,51641,51644],{"class":30,"line":1804},[28,51637,51638],{"class":45},"            justify-content",[28,51640,51512],{"class":34},[28,51642,51643],{"class":45},"space-around",[28,51645,1367],{"class":34},[28,51647,51648,51651,51653,51656],{"class":30,"line":1809},[28,51649,51650],{"class":45},"            align-items",[28,51652,51512],{"class":34},[28,51654,51655],{"class":45},"flex-end",[28,51657,1367],{"class":34},[28,51659,51660,51663,51665,51668],{"class":30,"line":1826},[28,51661,51662],{"class":45},"            text-align",[28,51664,51512],{"class":34},[28,51666,51667],{"class":45},"center",[28,51669,1367],{"class":34},[28,51671,51672],{"class":30,"line":1831},[28,51673,2606],{"class":34},[28,51675,51676],{"class":30,"line":1836},[28,51677,2477],{"emptyLinePlaceholder":144},[28,51679,51680,51682,51684,51687],{"class":30,"line":1841},[28,51681,51540],{"class":2040},[28,51683,1164],{"class":38},[28,51685,51686],{"class":51375},"div",[28,51688,15649],{"class":34},[28,51690,51691,51693,51695,51697],{"class":30,"line":1855},[28,51692,51547],{"class":45},[28,51694,51512],{"class":34},[28,51696,51552],{"class":45},[28,51698,1367],{"class":34},[28,51700,51701,51703,51705,51707,51709],{"class":30,"line":1860},[28,51702,51559],{"class":45},[28,51704,51512],{"class":34},[28,51706,866],{"class":45},[28,51708,51567],{"class":38},[28,51710,1367],{"class":34},[28,51712,51713,51716,51718,51721],{"class":30,"line":2654},[28,51714,51715],{"class":45},"            background-color",[28,51717,51512],{"class":34},[28,51719,51720],{"class":45},"pink",[28,51722,1367],{"class":34},[28,51724,51725,51728,51730,51733],{"class":30,"line":2668},[28,51726,51727],{"class":45},"            flex-direction",[28,51729,51512],{"class":34},[28,51731,51732],{"class":45},"column",[28,51734,1367],{"class":34},[28,51736,51737,51739,51741,51744],{"class":30,"line":2676},[28,51738,51638],{"class":45},[28,51740,51512],{"class":34},[28,51742,51743],{"class":45},"space-between",[28,51745,1367],{"class":34},[28,51747,51748],{"class":30,"line":2681},[28,51749,2606],{"class":34},[28,51751,51752],{"class":30,"line":2687},[28,51753,2477],{"emptyLinePlaceholder":144},[28,51755,51756,51758,51761,51764],{"class":30,"line":2693},[28,51757,51540],{"class":2040},[28,51759,51760],{"class":51375}," div",[28,51762,51763],{"class":51375}," span",[28,51765,15649],{"class":34},[28,51767,51768],{"class":30,"line":2698},[28,51769,2477],{"emptyLinePlaceholder":144},[28,51771,51772,51775,51777,51780,51782],{"class":30,"line":8025},[28,51773,51774],{"class":45},"            margin-top",[28,51776,51512],{"class":34},[28,51778,51779],{"class":45},"-20",[28,51781,51567],{"class":38},[28,51783,1367],{"class":34},[28,51785,51786],{"class":30,"line":8049},[28,51787,2606],{"class":34},[28,51789,51790],{"class":30,"line":8054},[28,51791,2477],{"emptyLinePlaceholder":144},[28,51793,51794,51796,51798,51801],{"class":30,"line":8060},[28,51795,51540],{"class":2040},[28,51797,51760],{"class":51375},[28,51799,51800],{"class":51375}," h4",[28,51802,15649],{"class":34},[28,51804,51805,51808,51810,51813,51815],{"class":30,"line":8087},[28,51806,51807],{"class":45},"            margin-bottom",[28,51809,51512],{"class":34},[28,51811,51812],{"class":45},"-35",[28,51814,51567],{"class":38},[28,51816,1367],{"class":34},[28,51818,51819,51821,51823,51825,51827],{"class":30,"line":8092},[28,51820,51559],{"class":45},[28,51822,51512],{"class":34},[28,51824,570],{"class":45},[28,51826,51567],{"class":38},[28,51828,1367],{"class":34},[28,51830,51831,51834,51836,51839,51841],{"class":30,"line":8098},[28,51832,51833],{"class":45},"            margin-left",[28,51835,51512],{"class":34},[28,51837,51838],{"class":45},"-10",[28,51840,51567],{"class":38},[28,51842,1367],{"class":34},[28,51844,51845],{"class":30,"line":8110},[28,51846,2606],{"class":34},[28,51848,51849,51852,51854],{"class":30,"line":8122},[28,51850,51851],{"class":34},"    \u003C\u002F",[28,51853,136],{"class":51375},[28,51855,51382],{"class":34},[28,51857,51858,51861,51863],{"class":30,"line":8134},[28,51859,51860],{"class":34},"\u003C\u002F",[28,51862,51409],{"class":51375},[28,51864,51382],{"class":34},[28,51866,51867],{"class":30,"line":9793},[28,51868,2477],{"emptyLinePlaceholder":144},[28,51870,51871,51873,51876],{"class":30,"line":9818},[28,51872,99],{"class":34},[28,51874,51875],{"class":51375},"body",[28,51877,51382],{"class":34},[28,51879,51880],{"class":30,"line":9841},[28,51881,2477],{"emptyLinePlaceholder":144},[28,51883,51884,51886,51889],{"class":30,"line":9865},[28,51885,51416],{"class":34},[28,51887,51888],{"class":51375},"script",[28,51890,51382],{"class":34},[28,51892,51893],{"class":30,"line":9870},[28,51894,51895],{"class":105},"        \u002F\u002F 1. 四次弹框效果\n",[28,51897,51898],{"class":30,"line":9875},[28,51899,51900],{"class":105},"        \u002F\u002F 声明一个新的数组\n",[28,51902,51903,51906,51909,51911],{"class":30,"line":9880},[28,51904,51905],{"class":38},"        let",[28,51907,51908],{"class":34}," arr ",[28,51910,39],{"class":38},[28,51912,51913],{"class":34}," []\n",[28,51915,51916,51918,51920,51923,51925,51927,51929,51931,51933,51936,51938,51940],{"class":30,"line":9889},[28,51917,3480],{"class":38},[28,51919,1735],{"class":34},[28,51921,51922],{"class":38},"let",[28,51924,9515],{"class":34},[28,51926,39],{"class":38},[28,51928,25196],{"class":45},[28,51930,9522],{"class":34},[28,51932,1665],{"class":38},[28,51934,51935],{"class":45}," 4",[28,51937,3291],{"class":34},[28,51939,2369],{"class":38},[28,51941,12519],{"class":34},[28,51943,51944],{"class":30,"line":9894},[28,51945,51946],{"class":105},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[28,51948,51949],{"class":30,"line":9900},[28,51950,51951],{"class":105},"            \u002F\u002F arr.push(num)\n",[28,51953,51954,51957,51960,51962,51965,51967,51970,51972,51975],{"class":30,"line":9921},[28,51955,51956],{"class":34},"            arr.",[28,51958,51959],{"class":2040},"push",[28,51961,221],{"class":34},[28,51963,51964],{"class":2040},"prompt",[28,51966,221],{"class":34},[28,51968,51969],{"class":320},"`请输入第${",[28,51971,654],{"class":34},[28,51973,51974],{"class":320},"}季度的数据:`",[28,51976,30573],{"class":34},[28,51978,51979],{"class":30,"line":9927},[28,51980,51981],{"class":105},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[28,51983,51984],{"class":30,"line":9941},[28,51985,2606],{"class":34},[28,51987,51988],{"class":30,"line":9947},[28,51989,51990],{"class":105},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[28,51992,51993],{"class":30,"line":9974},[28,51994,51995],{"class":105},"        \u002F\u002F 盒子开头\n",[28,51997,51998,52001,52004,52006,52009],{"class":30,"line":9983},[28,51999,52000],{"class":34},"        document.",[28,52002,52003],{"class":2040},"write",[28,52005,221],{"class":34},[28,52007,52008],{"class":320},"` \u003Cdiv class=\"box\">`",[28,52010,227],{"class":34},[28,52012,52013],{"class":30,"line":9989},[28,52014,2477],{"emptyLinePlaceholder":144},[28,52016,52017],{"class":30,"line":9997},[28,52018,52019],{"class":105},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[28,52021,52022,52024,52026,52028,52030,52032,52034,52036,52038,52041,52044,52046,52048],{"class":30,"line":10002},[28,52023,3480],{"class":38},[28,52025,1735],{"class":34},[28,52027,51922],{"class":38},[28,52029,9515],{"class":34},[28,52031,39],{"class":38},[28,52033,4170],{"class":45},[28,52035,9522],{"class":34},[28,52037,99],{"class":38},[28,52039,52040],{"class":34}," arr.",[28,52042,52043],{"class":45},"length",[28,52045,3291],{"class":34},[28,52047,2369],{"class":38},[28,52049,12519],{"class":34},[28,52051,52052,52055,52057,52059],{"class":30,"line":16681},[28,52053,52054],{"class":34},"            document.",[28,52056,52003],{"class":2040},[28,52058,221],{"class":34},[28,52060,52061],{"class":320},"`\n",[28,52063,52064,52067,52069,52071,52073,52075],{"class":30,"line":16687},[28,52065,52066],{"class":320},"              \u003Cdiv style=\"height: ${",[28,52068,3957],{"class":34},[28,52070,1096],{"class":320},[28,52072,654],{"class":34},[28,52074,119],{"class":320},[28,52076,52077],{"class":320},"}px;\">\n",[28,52079,52080,52083,52085,52087,52089,52091],{"class":30,"line":16710},[28,52081,52082],{"class":320},"                \u003Cspan>${",[28,52084,3957],{"class":34},[28,52086,1096],{"class":320},[28,52088,654],{"class":34},[28,52090,119],{"class":320},[28,52092,52093],{"class":320},"}\u003C\u002Fspan>\n",[28,52095,52096,52099,52101,52103,52105],{"class":30,"line":16716},[28,52097,52098],{"class":320},"                \u003Ch4>第${",[28,52100,654],{"class":34},[28,52102,45642],{"class":38},[28,52104,25196],{"class":45},[28,52106,52107],{"class":320},"}季度\u003C\u002Fh4>\n",[28,52109,52110],{"class":30,"line":16739},[28,52111,52112],{"class":320},"              \u003C\u002Fdiv>          \n",[28,52114,52115,52118],{"class":30,"line":16753},[28,52116,52117],{"class":320},"            `",[28,52119,227],{"class":34},[28,52121,52122],{"class":30,"line":16773},[28,52123,2606],{"class":34},[28,52125,52126],{"class":30,"line":16779},[28,52127,52128],{"class":105},"        \u002F\u002F 盒子结尾\n",[28,52130,52131,52133,52135,52137,52140],{"class":30,"line":16790},[28,52132,52000],{"class":34},[28,52134,52003],{"class":2040},[28,52136,221],{"class":34},[28,52138,52139],{"class":320},"` \u003C\u002Fdiv>`",[28,52141,227],{"class":34},[28,52143,52144,52146,52148],{"class":30,"line":16813},[28,52145,51851],{"class":34},[28,52147,51888],{"class":51375},[28,52149,51382],{"class":34},[28,52151,52152,52154,52156],{"class":30,"line":16835},[28,52153,51860],{"class":34},[28,52155,51875],{"class":51375},[28,52157,51382],{"class":34},[28,52159,52160],{"class":30,"line":16840},[28,52161,2477],{"emptyLinePlaceholder":144},[28,52163,52164,52166,52168],{"class":30,"line":16846},[28,52165,51860],{"class":34},[28,52167,50710],{"class":51375},[28,52169,51382],{"class":34},[188,52171,52173],{"id":52172},"_284-冒泡排序","2.8.4 冒泡排序",[18,52175,52177],{"className":50708,"code":52176,"language":50710,"meta":23,"style":23},"\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",[25,52178,52179,52189,52203,52207,52215,52230,52250,52262,52270,52274,52282,52290,52322,52355,52392,52397,52416,52421,52434,52449,52465,52469,52474,52478,52488,52497,52505,52509],{"__ignoreMap":23},[28,52180,52181,52183,52185,52187],{"class":30,"line":31},[28,52182,51372],{"class":34},[28,52184,51376],{"class":51375},[28,52186,51379],{"class":2040},[28,52188,51382],{"class":34},[28,52190,52191,52193,52195,52197,52199,52201],{"class":30,"line":94},[28,52192,99],{"class":34},[28,52194,50710],{"class":51375},[28,52196,51391],{"class":2040},[28,52198,39],{"class":34},[28,52200,51396],{"class":320},[28,52202,51382],{"class":34},[28,52204,52205],{"class":30,"line":109},[28,52206,2477],{"emptyLinePlaceholder":144},[28,52208,52209,52211,52213],{"class":30,"line":125},[28,52210,99],{"class":34},[28,52212,51409],{"class":51375},[28,52214,51382],{"class":34},[28,52216,52217,52220,52222,52224,52226,52228],{"class":30,"line":131},[28,52218,52219],{"class":34},"  \u003C",[28,52221,51419],{"class":51375},[28,52223,51422],{"class":2040},[28,52225,39],{"class":34},[28,52227,51427],{"class":320},[28,52229,51382],{"class":34},[28,52231,52232,52234,52236,52238,52240,52242,52244,52246,52248],{"class":30,"line":1291},[28,52233,52219],{"class":34},[28,52235,51419],{"class":51375},[28,52237,14997],{"class":2040},[28,52239,39],{"class":34},[28,52241,51466],{"class":320},[28,52243,51446],{"class":2040},[28,52245,39],{"class":34},[28,52247,51473],{"class":320},[28,52249,51382],{"class":34},[28,52251,52252,52254,52256,52258,52260],{"class":30,"line":1297},[28,52253,52219],{"class":34},[28,52255,51482],{"class":51375},[28,52257,51485],{"class":34},[28,52259,51482],{"class":51375},[28,52261,51382],{"class":34},[28,52263,52264,52266,52268],{"class":30,"line":1388},[28,52265,51860],{"class":34},[28,52267,51409],{"class":51375},[28,52269,51382],{"class":34},[28,52271,52272],{"class":30,"line":1394},[28,52273,2477],{"emptyLinePlaceholder":144},[28,52275,52276,52278,52280],{"class":30,"line":1406},[28,52277,99],{"class":34},[28,52279,51875],{"class":51375},[28,52281,51382],{"class":34},[28,52283,52284,52286,52288],{"class":30,"line":1689},[28,52285,52219],{"class":34},[28,52287,51888],{"class":51375},[28,52289,51382],{"class":34},[28,52291,52292,52295,52297,52299,52302,52304,52306,52308,52310,52312,52314,52316,52318,52320],{"class":30,"line":1694},[28,52293,52294],{"class":38},"    let",[28,52296,51908],{"class":34},[28,52298,39],{"class":38},[28,52300,52301],{"class":34}," [",[28,52303,533],{"class":45},[28,52305,12512],{"class":34},[28,52307,507],{"class":45},[28,52309,12512],{"class":34},[28,52311,57],{"class":45},[28,52313,12512],{"class":34},[28,52315,52],{"class":45},[28,52317,12512],{"class":34},[28,52319,46],{"class":45},[28,52321,33322],{"class":34},[28,52323,52324,52326,52328,52330,52332,52334,52336,52338,52340,52342,52344,52347,52349,52351,52353],{"class":30,"line":1700},[28,52325,3278],{"class":38},[28,52327,1735],{"class":34},[28,52329,51922],{"class":38},[28,52331,9515],{"class":34},[28,52333,39],{"class":38},[28,52335,4170],{"class":45},[28,52337,9522],{"class":34},[28,52339,99],{"class":38},[28,52341,52040],{"class":34},[28,52343,52043],{"class":45},[28,52345,52346],{"class":38}," -",[28,52348,25196],{"class":45},[28,52350,3291],{"class":34},[28,52352,2369],{"class":38},[28,52354,12519],{"class":34},[28,52356,52357,52360,52362,52364,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386,52388,52390],{"class":30,"line":1705},[28,52358,52359],{"class":38},"      for",[28,52361,1735],{"class":34},[28,52363,51922],{"class":38},[28,52365,9577],{"class":34},[28,52367,39],{"class":38},[28,52369,4170],{"class":45},[28,52371,9584],{"class":34},[28,52373,99],{"class":38},[28,52375,52040],{"class":34},[28,52377,52043],{"class":45},[28,52379,52346],{"class":38},[28,52381,9515],{"class":34},[28,52383,742],{"class":38},[28,52385,25196],{"class":45},[28,52387,9591],{"class":34},[28,52389,2369],{"class":38},[28,52391,12519],{"class":34},[28,52393,52394],{"class":30,"line":1719},[28,52395,52396],{"class":105},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[28,52398,52399,52401,52404,52406,52409,52411,52413],{"class":30,"line":1724},[28,52400,2574],{"class":38},[28,52402,52403],{"class":34}," (arr[j] ",[28,52405,1164],{"class":38},[28,52407,52408],{"class":34}," arr[j ",[28,52410,693],{"class":38},[28,52412,25196],{"class":45},[28,52414,52415],{"class":34},"]) {\n",[28,52417,52418],{"class":30,"line":1730},[28,52419,52420],{"class":105},"          \u002F\u002F 交换两个变量\n",[28,52422,52423,52426,52429,52431],{"class":30,"line":1751},[28,52424,52425],{"class":38},"          let",[28,52427,52428],{"class":34}," tmp ",[28,52430,39],{"class":38},[28,52432,52433],{"class":34}," arr[j]\n",[28,52435,52436,52439,52441,52443,52445,52447],{"class":30,"line":1756},[28,52437,52438],{"class":34},"          arr[j] ",[28,52440,39],{"class":38},[28,52442,52408],{"class":34},[28,52444,693],{"class":38},[28,52446,25196],{"class":45},[28,52448,33322],{"class":34},[28,52450,52451,52454,52456,52458,52460,52462],{"class":30,"line":1770},[28,52452,52453],{"class":34},"          arr[j ",[28,52455,693],{"class":38},[28,52457,25196],{"class":45},[28,52459,4520],{"class":34},[28,52461,39],{"class":38},[28,52463,52464],{"class":34}," tmp\n",[28,52466,52467],{"class":30,"line":1775},[28,52468,2606],{"class":34},[28,52470,52471],{"class":30,"line":1804},[28,52472,52473],{"class":34},"      }\n",[28,52475,52476],{"class":30,"line":1809},[28,52477,2264],{"class":34},[28,52479,52480,52483,52485],{"class":30,"line":1826},[28,52481,52482],{"class":34},"    document.",[28,52484,52003],{"class":2040},[28,52486,52487],{"class":34},"(arr)\n",[28,52489,52490,52493,52495],{"class":30,"line":1831},[28,52491,52492],{"class":34},"  \u003C\u002F",[28,52494,51888],{"class":51375},[28,52496,51382],{"class":34},[28,52498,52499,52501,52503],{"class":30,"line":1836},[28,52500,51860],{"class":34},[28,52502,51875],{"class":51375},[28,52504,51382],{"class":34},[28,52506,52507],{"class":30,"line":1841},[28,52508,2477],{"emptyLinePlaceholder":144},[28,52510,52511,52513,52515],{"class":30,"line":1855},[28,52512,51860],{"class":34},[28,52514,50710],{"class":51375},[28,52516,51382],{"class":34},[14,52518,52519],{},[1539,52520],{"alt":23,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52523,52524],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52526,52527],{},"let arr = [4, 2, 5, 1, 3]",[14,52529,52530],{},"\u002F\u002F 1.升序排列写法",[14,52532,52533],{},"arr.sort(function (a, b) {",[14,52535,52536],{},"return a - b",[14,52538,52539],{},"})",[14,52541,52542],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52544,52545],{},"\u002F\u002F 降序排列写法",[14,52547,52533],{},[14,52549,52550],{},"return b - a",[14,52552,52539],{},[14,52554,52555],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[159,52557,52559],{"id":52558},"_29-函数","2.9 函数",[14,52561,52562],{},[1539,52563],{"alt":23,"src":52564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52566,52567],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52569,52570],{},"函数的声明用function",[14,52572,52573],{},"函数里边可以嵌套函数",[188,52575,52577],{"id":52576},"_291-函数传参","2.9.1 函数传参",[14,52579,52580],{},[1539,52581],{"alt":23,"src":52582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52584,52585],{},[1539,52586],{"alt":23,"src":52587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1211,52589,52590,52593,52596,52599,52602,52605],{},[174,52591,52592],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[174,52594,52595],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[174,52597,52598],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[174,52600,52601],{},"开发中尽量保持形参和实参个数一致",[174,52603,52604],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[174,52606,52607],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52609,52610],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[188,52612,52614],{"id":52613},"_292-函数的返回值","2.9.2 函数的返回值",[14,52616,52617],{},[1539,52618],{"alt":23,"src":52619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52621,52622],{},[1539,52623],{"alt":23,"src":52624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1211,52626,52627,52630,52633,52636,52639],{},[174,52628,52629],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[174,52631,52632],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[174,52634,52635],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[174,52637,52638],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[174,52640,52641],{},"断点调试:进入函数内部看执行过程F11",[188,52643,52645],{"id":52644},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[18,52647,52649],{"className":50708,"code":52648,"language":50710,"meta":23,"style":23},"    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",[25,52650,52651,52656,52661,52665,52670],{"__ignoreMap":23},[28,52652,52653],{"class":30,"line":31},[28,52654,52655],{"class":34},"    function fn(a, b) {\n",[28,52657,52658],{"class":30,"line":94},[28,52659,52660],{"class":34},"      console.log(a + b);\n",[28,52662,52663],{"class":30,"line":109},[28,52664,2264],{"class":34},[28,52666,52667],{"class":30,"line":125},[28,52668,52669],{"class":34},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[28,52671,52672],{"class":30,"line":131},[28,52673,52674],{"class":34},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[188,52676,52678],{"id":52677},"_294-作用域","2.9.4 作用域",[1211,52680,52681,52687,52692,52695,52698],{},[174,52682,52683,52684],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[365,52685,52686],{},"作用域",[174,52688,52689],{},[365,52690,52691],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[174,52693,52694],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[174,52696,52697],{},"函数内部可以直接所使用全局变量",[174,52699,52700],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52702,14710],{},[18,52704,52706],{"className":50708,"code":52705,"language":50710,"meta":23,"style":23},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[25,52707,52708,52713,52718,52722,52727,52732,52737],{"__ignoreMap":23},[28,52709,52710],{"class":30,"line":31},[28,52711,52712],{"class":34},"    function fun() {\n",[28,52714,52715],{"class":30,"line":94},[28,52716,52717],{"class":34},"      num = 10\n",[28,52719,52720],{"class":30,"line":109},[28,52721,2264],{"class":34},[28,52723,52724],{"class":30,"line":125},[28,52725,52726],{"class":34},"    fun()\n",[28,52728,52729],{"class":30,"line":131},[28,52730,52731],{"class":34},"    console.log(num)\n",[28,52733,52734],{"class":30,"line":1291},[28,52735,52736],{"class":34},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[28,52738,52739],{"class":30,"line":1297},[28,52740,52741],{"class":34},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1211,52743,52744,52747],{},[174,52745,52746],{},"函数内部的形参可以看做是局部变量",[174,52748,52749],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52751,52752,52753],{},"变量访问原则： ",[365,52754,52755],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[188,52757,52759],{"id":52758},"_295-匿名函数","2.9.5 匿名函数",[14,52761,52762],{},"函数可以分为具名函数和匿名函数",[14,52764,52765],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[171,52767,52768],{},[174,52769,52770],{},"函数表达式",[14,52772,52773],{},[1539,52774],{"alt":23,"src":52775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52777,52778],{},"里边也可以写参数",[14,52780,52781],{},"具名函数调用位置可以随意调整；",[14,52783,52784],{},"匿名函数函数表达式形式只能在声明后才可以使用",[171,52786,52787],{"start":94},[174,52788,52789],{},"立即执行函数",[14,52791,52792],{},[1539,52793],{"alt":23,"src":52794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52796,52797],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52799,52800],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52802,52803],{},"(function () {})();",[14,52805,52806],{},"不要落下最后的;",[14,52808,52809],{},"立即执行函数必须要加;",[14,52811,52812],{},"分号写前写后都没问题",[14,52814,52815],{},"写前：",[14,52817,52818],{},"(function() {})()",[14,52820,52821],{},";(function () {})();",[14,52823,52824],{},"写后:",[14,52826,52827],{},"(function() {})();",[14,52829,52803],{},[14,52831,52832],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52834,52835],{},"还有一种写法：",[14,52837,52838],{},"(function(){}());",[14,52840,52841],{},"或者:",[14,52843,52844],{},"!function(){}();",[14,52846,52847],{},"立即执行函数有时候也是可以加名字的：",[14,52849,52850],{},"(function flexible(window,document) {}(window,document));",[14,52852,52853],{},"省一些调用方法",[188,52855,52857],{"id":52856},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52859,52860],{},[1539,52861],{"alt":23,"src":52862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52864,52865],{},"这样就不用非得给x,y初始化了",[14,52867,52868],{},[1539,52869],{"alt":23,"src":52870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52872,52873],{},"代码执行时先看左边",[14,52875,52876],{},"例如：console.log(false && 3+5)",[14,52878,52879],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52881,52882],{},"&&都是真时，就返回最后一个真值",[14,52884,52885],{},"console.log(11 && 22)",[14,52887,52888],{},"输出22",[14,52890,52891],{},"逻辑与：遇真则真",[14,52893,14710],{},[14,52895,52896],{},"let age=1",[14,52898,52899],{},"console.log(11 || age++)",[14,52901,52902],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52904,52905],{},"console.log(11 || 22)",[14,52907,52908],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52910,52911],{},"||如果都是假的话，就取最后一个假的值了",[188,52913,52915],{"id":52914},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52917,52918],{},"显示转换：",[14,52920,52921,52924,52925],{},[365,52922,52923],{},"记忆","： ",[365,52926,52927],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52929,52930],{},"空字符串为假，其他字符串全为真",[14,52932,52933],{},[1539,52934],{"alt":23,"src":52935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52937,52938],{},"隐式转换：",[14,52940,52941],{},[1539,52942],{"alt":23,"src":52943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52945,52946],{},"隐式转换:",[14,52948,52949],{},"null+3=3",[14,52951,52952],{},"undefined+3=NaN",[14,52954,52955],{},"null==undefined 输出true,他两个都当0看",[14,52957,52958],{},"null===undefined 输出false",[14,52960,52961],{},"undefined做任何操作都是NaN",[14,52963,52964],{},"NaN不等于NaN，NaN表示计算错误",[159,52966,52968],{"id":52967},"_210-对象","2.10 对象",[188,52970,52972],{"id":52971},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52974,52975],{},"对象也是一种数据类型，里边的数据是无序的",[14,52977,52978],{},"对象由属性和方法组成",[14,52980,52981],{},[1539,52982],{"alt":23,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52985,52986],{},[1539,52987],{"alt":23,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52990,52991],{},[1539,52992],{"alt":23,"src":52993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[188,52995,52997],{"id":52996},"_2102-对象属性","2.10.2 对象属性",[14,52999,53000],{},[1539,53001],{"alt":23,"src":53002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[171,53004,53005],{},[174,53006,53007],{},"查询对象",[14,53009,53010],{},"对象名.属性 goods.uname",[14,53012,53013],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53015,53016],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53018,53019],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53021,53022],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[171,53024,53025],{"start":94},[174,53026,53027],{},"重新赋值",[14,53029,53030],{},"对象名.属性=新值",[171,53032,53033],{"start":109},[174,53034,53035],{},"增加新数据",[14,53037,53030],{},[171,53039,53040],{"start":125},[174,53041,53042],{},"删除对象中的属性",[14,53044,53045],{},"delete 对象名.属性",[188,53047,53049],{"id":53048},"_2103-对象方法","2.10.3 对象方法",[14,53051,53052],{},[1539,53053],{"alt":23,"src":53054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53056,53057],{},"后边跟的是匿名函数",[14,53059,53060],{},"对象外面的叫函数；对象内部的叫方法",[14,53062,53063],{},[1539,53064],{"alt":23,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[188,53067,53069],{"id":53068},"_2104-遍历对象","2.10.4 遍历对象",[14,53071,53072],{},"理解为加括号的python字典遍历",[14,53074,53075],{},[1539,53076],{"alt":23,"src":53077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53079,53080],{},"k是字符串类型",[14,53082,53083],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[18,53085,53087],{"className":50708,"code":53086,"language":50710,"meta":23,"style":23},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[25,53088,53089,53094,53099,53104,53109],{"__ignoreMap":23},[28,53090,53091],{"class":30,"line":31},[28,53092,53093],{"class":34},"   let arr = [1, 2, 3]\n",[28,53095,53096],{"class":30,"line":94},[28,53097,53098],{"class":34},"    for (let k in arr) {\n",[28,53100,53101],{"class":30,"line":109},[28,53102,53103],{"class":34},"      console.log(k)\n",[28,53105,53106],{"class":30,"line":125},[28,53107,53108],{"class":34},"      console.log(arr[k])\n",[28,53110,53111],{"class":30,"line":131},[28,53112,2264],{"class":34},[14,53114,53115],{},[1539,53116],{"alt":23,"src":53117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53119,53120],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53122,53123],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53125,53126],{},"for in 得到的k是属性名",[51888,53128,53129],{},"\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,53131,53132],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[188,53134,53136],{"id":53135},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53138,53139],{},"数组中放对象信息",[18,53141,53145],{"className":53142,"code":53143,"language":53144,"meta":23,"style":23},"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",[25,53146,53147,53155,53160,53165,53170,53175,53180,53185,53190,53195,53200,53205,53210,53214,53218],{"__ignoreMap":23},[28,53148,53149,53151,53153],{"class":30,"line":31},[28,53150,99],{"class":34},[28,53152,51888],{"class":51375},[28,53154,51382],{"class":34},[28,53156,53157],{"class":30,"line":94},[28,53158,53159],{"class":34},"    let students = [\n",[28,53161,53162],{"class":30,"line":109},[28,53163,53164],{"class":34},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[28,53166,53167],{"class":30,"line":125},[28,53168,53169],{"class":34},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[28,53171,53172],{"class":30,"line":131},[28,53173,53174],{"class":34},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[28,53176,53177],{"class":30,"line":1291},[28,53178,53179],{"class":34},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[28,53181,53182],{"class":30,"line":1297},[28,53183,53184],{"class":34},"    ]\n",[28,53186,53187],{"class":30,"line":1388},[28,53188,53189],{"class":34},"    for (let i = 0; i \u003C students.length; i++) {\n",[28,53191,53192],{"class":30,"line":1394},[28,53193,53194],{"class":34},"      for (let k in students[i]) {\n",[28,53196,53197],{"class":30,"line":1406},[28,53198,53199],{"class":34},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[28,53201,53202],{"class":30,"line":1689},[28,53203,53204],{"class":34},"        \u002F\u002F输出每个人的名字：\n",[28,53206,53207],{"class":30,"line":1694},[28,53208,53209],{"class":34},"        \u002F\u002Fconsole.log(students[i].name)\n",[28,53211,53212],{"class":30,"line":1700},[28,53213,52473],{"class":34},[28,53215,53216],{"class":30,"line":1705},[28,53217,2264],{"class":34},[28,53219,53220,53222,53224],{"class":30,"line":1719},[28,53221,52492],{"class":34},[28,53223,51888],{"class":51375},[28,53225,51382],{"class":34},[188,53227,53229],{"id":53228},"_2106-内置对象","2.10.6 内置对象",[14,53231,53232],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[171,53234,53235],{},[174,53236,53237],{},"数学对象Math",[14,53239,53240],{},[1539,53241],{"alt":23,"src":53242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53244,53245],{},[35,53246,53249],{"href":53247,"rel":53248},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23942],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53251,53252],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53254,53255],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53257,53258],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53260,53261],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53263,53264],{},"null属于对象数据类型",[171,53266,53267],{"start":94},[174,53268,53269],{},"生成任意范围随机数",[14,53271,53272],{},[1539,53273],{"alt":23,"src":53274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53276,53277],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53279,53280],{},"乘以几就取不到几",[14,53282,53283],{},"取数组中的随机元素：",[14,53285,53286],{},"let arr = ['red', 'green', 'blue']",[14,53288,53289],{},"let random = Math.floor(Math.random() * arr.length)",[14,53291,53292],{},"console.log(arr[random])",[14,53294,53295],{},"这个函数得到的是全闭区间",[14,53297,53298],{},"function getRandom(N, M) {",[14,53300,53301],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53303,1150],{},[14,53305,53306],{},"console.log(getRandom(4, 8))",[188,53308,53310],{"id":53309},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53312,53313],{},[1539,53314],{"alt":23,"src":53315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53317,53318],{},[1539,53319],{"alt":23,"src":53320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53322,53323],{},[1539,53324],{"alt":23,"src":53325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53327,53328],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53330,53331],{},[1539,53332],{"alt":23,"src":53333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53335,53336],{},[1539,53337],{"alt":23,"src":53338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53340,53341],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53343,53344],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53346,53347],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[136,53349,53350],{},"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":23,"searchDepth":94,"depth":94,"links":53352},[53353,53361,53362,53363,53364,53365,53372,53376,53382,53391],{"id":50543,"depth":94,"text":50544,"children":53354},[53355,53356,53357,53358,53359,53360],{"id":50547,"depth":109,"text":50548},{"id":50564,"depth":109,"text":50565},{"id":50604,"depth":109,"text":50605},{"id":50616,"depth":109,"text":50617},{"id":50625,"depth":109,"text":50626},{"id":50673,"depth":109,"text":50674},{"id":50683,"depth":94,"text":50684},{"id":50771,"depth":94,"text":50772},{"id":50794,"depth":94,"text":50795},{"id":50806,"depth":94,"text":50807},{"id":50993,"depth":94,"text":50994,"children":53366},[53367,53368,53369,53370,53371],{"id":50997,"depth":109,"text":50998},{"id":51006,"depth":109,"text":51007},{"id":51034,"depth":109,"text":51035},{"id":51070,"depth":109,"text":51071},{"id":51095,"depth":109,"text":51096},{"id":51107,"depth":94,"text":51108,"children":53373},[53374,53375],{"id":51128,"depth":109,"text":51129},{"id":51222,"depth":109,"text":51223},{"id":51280,"depth":94,"text":51281,"children":53377},[53378,53379,53380,53381],{"id":51284,"depth":109,"text":51285},{"id":51308,"depth":109,"text":51309},{"id":51361,"depth":109,"text":51362},{"id":52172,"depth":109,"text":52173},{"id":52558,"depth":94,"text":52559,"children":53383},[53384,53385,53386,53387,53388,53389,53390],{"id":52576,"depth":109,"text":52577},{"id":52613,"depth":109,"text":52614},{"id":52644,"depth":109,"text":52645},{"id":52677,"depth":109,"text":52678},{"id":52758,"depth":109,"text":52759},{"id":52856,"depth":109,"text":52857},{"id":52914,"depth":109,"text":52915},{"id":52967,"depth":94,"text":52968,"children":53392},[53393,53394,53395,53396,53397,53398,53399],{"id":52971,"depth":109,"text":52972},{"id":52996,"depth":109,"text":52997},{"id":53048,"depth":109,"text":53049},{"id":53068,"depth":109,"text":53069},{"id":53135,"depth":109,"text":53136},{"id":53228,"depth":109,"text":53229},{"id":53309,"depth":109,"text":53310},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50535,"description":141},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53406,"title":53407,"body":53408,"description":141,"extension":142,"meta":76748,"navigation":144,"path":76749,"seo":76750,"stem":76751,"__hash__":76752},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53409,"toc":76688},[53410,53413,53416,53419,53424,53427,53430,53433,53437,53441,53447,53452,53460,53467,53470,53474,53479,53484,53489,53492,53495,53506,53509,53513,53516,53519,53524,53529,53534,53537,53540,53632,53635,53640,53643,53648,53651,53654,53659,53662,53667,53671,53674,53688,53692,53697,53700,53703,53707,53712,53715,53719,53723,53728,53732,53737,53740,53743,53746,53749,53752,53755,53760,53765,53793,53796,53799,53802,53807,53810,53813,53816,53819,53823,53852,53856,53861,53866,53869,53872,53875,53880,53995,54000,54005,54166,54171,54174,54178,54183,54188,54191,54194,54197,54200,54203,54206,54209,54212,54215,54218,54221,54224,54227,54230,54232,54235,54238,54241,54246,54250,54647,54650,54656,54660,54665,55947,55952,55955,55958,55961,55966,57162,57166,57172,57177,57180,57185,57190,57194,57198,57203,57206,57211,57214,57217,57221,58129,58132,58136,58357,58360,58363,58366,58592,58595,58819,58822,58826,58831,58834,58837,59065,59068,59101,59104,59108,59113,59117,59120,59123,59126,59129,59132,59135,59138,59143,60423,60427,60430,61523,61527,61530,61533,61536,61539,61543,61546,61549,61551,61559,63040,63044,63047,63050,63053,63262,63265,63269,63273,63278,63283,63286,63289,63294,63298,63303,63306,63415,63419,63424,63429,63432,63435,63439,63444,63449,63454,63457,63460,63471,63474,63479,63484,63487,63490,63563,63567,63572,63575,63577,63588,63592,63597,64923,64926,64929,64932,64934,64937,64940,64943,64946,64949,64952,64955,64958,64961,64964,64967,64970,64972,64974,64977,64981,66075,66078,66081,66097,66111,66114,66119,66125,66130,66134,66138,66143,66147,66152,66594,66599,66602,66606,66611,66614,66617,66621,66626,66630,66635,66640,66644,66649,66654,66657,66662,66667,66671,66676,66681,66785,66788,66792,66797,67163,67166,67169,67172,67175,67178,67181,67184,67187,68483,68487,68492,68497,68500,68503,68506,68509,68511,68516,68521,68524,68528,68533,68538,68543,68546,68549,68552,68555,68558,68563,68566,68570,68575,68580,68584,68589,68592,68597,68600,68603,68606,68609,68612,68617,68620,68623,68626,68629,68633,68638,68641,68645,68650,68653,68656,68660,68689,68692,68696,68700,68705,68709,68714,68717,68720,68723,68726,68729,68732,68735,68738,68741,68744,68747,68750,68753,68756,68760,68765,68770,68773,68777,68781,68786,68789,68793,68796,68799,68804,68809,68814,68819,68824,68827,68830,68835,68840,68844,68849,68852,68857,68860,68863,68866,68869,68874,68877,68886,68890,68895,68898,68901,68905,68908,68913,68917,68920,68926,68932,68936,68962,68965,70526,70529,71025,71028,71033,71038,71043,71047,71052,71057,71062,71066,71071,71074,71077,71080,71083,71087,71090,71095,71098,71103,71107,71112,71115,71120,71125,71130,71133,71136,71141,71146,71149,71152,71156,71159,71164,71167,71172,71175,71180,71185,71190,71193,71198,71263,71266,71277,71281,71286,71458,71462,71467,71470,71473,71476,71480,71491,71495,71498,71503,71508,71511,71514,71517,71520,71523,71525,71528,71531,71534,71539,71542,71547,71550,71554,71557,71560,71574,71578,71581,71636,71641,71644,71647,71652,71655,71659,71664,71794,71798,71803,71808,71889,71894,71898,71901,71906,71911,71917,71920,71923,71926,71930,71935,71938,71949,71953,71970,75017,75021,75024,75027,75030,75051,75055,75058,75066,75069,75074,75077,75080,75085,75090,75094,75115,75119,75124,75127,75130,75133,75136,75140,75145,75148,75152,75157,75160,75165,75168,75173,75176,75181,76384,76388,76393,76396,76401,76685],[10,53411,53407],{"id":53412},"_3web-apis",[14,53414,53415],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53417,53418],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53420,53421],{},[1539,53422],{"alt":23,"src":53423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53425,53426],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53428,53429],{},"建议数组和对象使用 const 来声明",[14,53431,53432],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[159,53434,53436],{"id":53435},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[188,53438,53440],{"id":53439},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53442,53443,53446],{},[25,53444,53445],{},"document"," = HTML 文件解析后的对象化表示；",[14,53448,53449,53451],{},[25,53450,53445],{}," ≠ HTML 文件本身",[14,53453,53454,53459],{},[365,53455,53456],{},[25,53457,53458],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53461,53462,53466],{},[365,53463,53464],{},[25,53465,53445],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53468,53469],{},"document实际上为window.document的简写",[188,53471,53473],{"id":53472},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53475,53476],{},[1539,53477],{"alt":23,"src":53478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53480,53481],{},[1539,53482],{"alt":23,"src":53483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53485,53486],{},[1539,53487],{"alt":23,"src":53488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53490,53491],{},"console.dir()",[14,53493,53494],{},"dir用来打印对象",[1211,53496,53497,53500,53503],{},[174,53498,53499],{},"任何一个标签，都是一个对象",[174,53501,53502],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[174,53504,53505],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53507,53508],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[188,53510,53512],{"id":53511},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53514,53515],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53517,53518],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53520,53521],{},[365,53522,53523],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[171,53525,53526],{},[174,53527,53528],{},"利用CSS选择器来获取标签元素",[14,53530,53531],{},[1539,53532],{"alt":23,"src":53533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53535,53536],{},"里边的选择器必须必须加引号！！！",[14,53538,53539],{},"只选择第一个元素",[18,53541,53543],{"className":53142,"code":53542,"language":53144,"meta":23,"style":23},"\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",[25,53544,53545,53553,53574,53593,53601,53606,53611,53616,53624],{"__ignoreMap":23},[28,53546,53547,53549,53551],{"class":30,"line":31},[28,53548,99],{"class":34},[28,53550,51875],{"class":51375},[28,53552,51382],{"class":34},[28,53554,53555,53557,53559,53562,53564,53567,53570,53572],{"class":30,"line":94},[28,53556,52219],{"class":34},[28,53558,51686],{"class":51375},[28,53560,53561],{"class":2040}," class",[28,53563,39],{"class":34},[28,53565,53566],{"class":320},"\"box\"",[28,53568,53569],{"class":34},">123\u003C\u002F",[28,53571,51686],{"class":51375},[28,53573,51382],{"class":34},[28,53575,53576,53578,53580,53582,53584,53586,53589,53591],{"class":30,"line":109},[28,53577,52219],{"class":34},[28,53579,51686],{"class":51375},[28,53581,53561],{"class":2040},[28,53583,39],{"class":34},[28,53585,53566],{"class":320},[28,53587,53588],{"class":34},">456\u003C\u002F",[28,53590,51686],{"class":51375},[28,53592,51382],{"class":34},[28,53594,53595,53597,53599],{"class":30,"line":125},[28,53596,52219],{"class":34},[28,53598,51888],{"class":51375},[28,53600,51382],{"class":34},[28,53602,53603],{"class":30,"line":131},[28,53604,53605],{"class":34},"    \u002F\u002F 1.获取匹配的第一个元素\n",[28,53607,53608],{"class":30,"line":1291},[28,53609,53610],{"class":34},"    const box = document.querySelector('div')\n",[28,53612,53613],{"class":30,"line":1297},[28,53614,53615],{"class":34},"    console.dir(box)\n",[28,53617,53618,53620,53622],{"class":30,"line":1388},[28,53619,52492],{"class":34},[28,53621,51888],{"class":51375},[28,53623,51382],{"class":34},[28,53625,53626,53628,53630],{"class":30,"line":1394},[28,53627,51860],{"class":34},[28,53629,51875],{"class":51375},[28,53631,51382],{"class":34},[14,53633,53634],{},"只选123，不选456",[14,53636,53637],{},[1539,53638],{"alt":23,"src":53639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53641,53642],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53644,53645],{},[1539,53646],{"alt":23,"src":53647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53649,53650],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53652,53653],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[171,53655,53656],{"start":94},[174,53657,53658],{},"其他方法来获取标签元素",[14,53660,53661],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53663,53664],{},[1539,53665],{"alt":23,"src":53666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[188,53668,53670],{"id":53669},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53672,53673],{},"设置修改DOM元素内容有两种方式：",[1211,53675,53676,53679,53682,53685],{},[174,53677,53678],{},"元素.innerText=''",[174,53680,53681],{},"元素.innerHTML=''",[174,53683,53684],{},"不写字符串输出数字也是可以的",[174,53686,53687],{},"元素.innerHtml=1",[22075,53689,53691],{"id":53690},"_3131-innertext","3.1.3.1 innerText",[14,53693,53694],{},[1539,53695],{"alt":23,"src":53696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53698,53699],{},"思路：实现了修改盒子中的内容！",[14,53701,53702],{},"它只显示纯文本，不解析标签",[22075,53704,53706],{"id":53705},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53708,53709],{},[1539,53710],{"alt":23,"src":53711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53713,53714],{},"相比于innerText，他的强大之处在于可以解析标签",[188,53716,53718],{"id":53717},"_314-操作元素属性","3.1.4 操作元素属性",[22075,53720,53722],{"id":53721},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53724,53725],{},[1539,53726],{"alt":23,"src":53727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22075,53729,53731],{"id":53730},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53733,53734],{},[1539,53735],{"alt":23,"src":53736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53738,53739],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53741,53742],{},"div.style.backgroundColor = 'hotpink'",[14,53744,53745],{},"如果按照css的写法，-表示减，就会出错",[14,53747,53748],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53750,53751],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53753,53754],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53756,53757],{},[1539,53758],{"alt":23,"src":53759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53761,53762],{},[1539,53763],{"alt":23,"src":53764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[171,53766,53767,53770,53773,53776,53779,53782],{},[174,53768,53769],{},"className这个方式就是修改很多样式的时候来使用的！",[174,53771,53772],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[174,53774,53775],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[174,53777,53778],{},"className为属性名，如果还用class的话就导致与关键字冲突",[174,53780,53781],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[174,53783,53784,53785,53790],{},"解析标签的时候就变为了",[51686,53786],{"className":53787},[53788,53789],"nav","box",[53791,53792],"br",{},[14,53794,53795],{},"例子：",[51686,53797],{"className":53798},[53788],[51888,53800,53801],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53803,53804],{},[1539,53805],{"alt":23,"src":53806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53808,53809],{},"追加和删除类名用classList",[14,53811,53812],{},"常用于类似于开关的操作",[14,53814,53815],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53817,53818],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22075,53820,53822],{"id":53821},"_3143-牢记点","3.1.4.3 牢记点",[171,53824,53825,53828,53831,53834,53837,53840,53843,53846,53849],{},[174,53826,53827],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[174,53829,53830],{},"使用style属性操作css时不要忘记引号",[174,53832,53833],{},"使用className或者classList时也不要忘记引号",[174,53835,53836],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[174,53838,53839],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[174,53841,53842],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[174,53844,53845],{},"若： let arr=['1','2',3] arr[0]=1",[174,53847,53848],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[174,53850,53851],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[188,53853,53855],{"id":53854},"_315-操作表单元素","3.1.5 操作表单元素",[171,53857,53858],{},[174,53859,53860],{},"天生的属性",[14,53862,53863],{},[1539,53864],{"alt":23,"src":53865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53867,53868],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53870,53871],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53873,53874],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53876,53877],{},[1539,53878],{"alt":23,"src":53879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[18,53881,53883],{"className":50708,"code":53882,"language":50710,"meta":23,"style":23},"在复选框中如果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",[25,53884,53885,53890,53922,53927,53932,53937,53942,53946,53951,53956,53973,53985,53990],{"__ignoreMap":23},[28,53886,53887],{"class":30,"line":31},[28,53888,53889],{"class":34},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[28,53891,53892,53894,53897,53900,53902,53905,53907,53909,53911,53913,53915,53917,53920],{"class":30,"line":94},[28,53893,99],{"class":34},[28,53895,53896],{"class":51375},"input",[28,53898,53899],{"class":2040}," type",[28,53901,39],{"class":34},[28,53903,53904],{"class":320},"\"checkbox\"",[28,53906,14997],{"class":2040},[28,53908,39],{"class":34},[28,53910,7729],{"class":320},[28,53912,15036],{"class":2040},[28,53914,39],{"class":34},[28,53916,7729],{"class":320},[28,53918,53919],{"class":2040}," checked",[28,53921,51382],{"class":34},[28,53923,53924],{"class":30,"line":109},[28,53925,53926],{"class":34},"不选的话：\n",[28,53928,53929],{"class":30,"line":125},[28,53930,53931],{"class":34},"const input = document.querySelector('input')\n",[28,53933,53934],{"class":30,"line":131},[28,53935,53936],{"class":34},"input.checked=false\n",[28,53938,53939],{"class":30,"line":1291},[28,53940,53941],{"class":34},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[28,53943,53944],{"class":30,"line":1297},[28,53945,2477],{"emptyLinePlaceholder":144},[28,53947,53948],{"class":30,"line":1388},[28,53949,53950],{"class":34},"禁用按钮：\n",[28,53952,53953],{"class":30,"line":1394},[28,53954,53955],{"class":34},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[28,53957,53958,53960,53963,53966,53969,53971],{"class":30,"line":1406},[28,53959,99],{"class":34},[28,53961,53962],{"class":51375},"button",[28,53964,53965],{"class":2040}," disabled",[28,53967,53968],{"class":34},">点击\u003C\u002F",[28,53970,53962],{"class":51375},[28,53972,51382],{"class":34},[28,53974,53975,53977,53979,53981,53983],{"class":30,"line":1689},[28,53976,99],{"class":34},[28,53978,53962],{"class":51375},[28,53980,53968],{"class":34},[28,53982,53962],{"class":51375},[28,53984,51382],{"class":34},[28,53986,53987],{"class":30,"line":1694},[28,53988,53989],{"class":34},"const bt = document.querySelector('button')\n",[28,53991,53992],{"class":30,"line":1700},[28,53993,53994],{"class":34},"bt.disabled = false\n",[171,53996,53997],{"start":94},[174,53998,53999],{},"自定义属性",[14,54001,54002],{},[1539,54003],{"alt":23,"src":54004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[18,54006,54008],{"className":53142,"code":54007,"language":53144,"meta":23,"style":23},"\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",[25,54009,54010,54018,54046,54065,54084,54103,54122,54130,54135,54140,54145,54150,54158],{"__ignoreMap":23},[28,54011,54012,54014,54016],{"class":30,"line":31},[28,54013,99],{"class":34},[28,54015,51875],{"class":51375},[28,54017,51382],{"class":34},[28,54019,54020,54022,54024,54027,54029,54031,54034,54036,54039,54042,54044],{"class":30,"line":94},[28,54021,52219],{"class":34},[28,54023,51686],{"class":51375},[28,54025,54026],{"class":2040}," data-id",[28,54028,39],{"class":34},[28,54030,3755],{"class":320},[28,54032,54033],{"class":2040}," data-spm",[28,54035,39],{"class":34},[28,54037,54038],{"class":320},"\"我不知道\"",[28,54040,54041],{"class":34},">1\u003C\u002F",[28,54043,51686],{"class":51375},[28,54045,51382],{"class":34},[28,54047,54048,54050,54052,54054,54056,54058,54061,54063],{"class":30,"line":109},[28,54049,52219],{"class":34},[28,54051,51686],{"class":51375},[28,54053,54026],{"class":2040},[28,54055,39],{"class":34},[28,54057,3778],{"class":320},[28,54059,54060],{"class":34},">2\u003C\u002F",[28,54062,51686],{"class":51375},[28,54064,51382],{"class":34},[28,54066,54067,54069,54071,54073,54075,54077,54080,54082],{"class":30,"line":125},[28,54068,52219],{"class":34},[28,54070,51686],{"class":51375},[28,54072,54026],{"class":2040},[28,54074,39],{"class":34},[28,54076,3791],{"class":320},[28,54078,54079],{"class":34},">3\u003C\u002F",[28,54081,51686],{"class":51375},[28,54083,51382],{"class":34},[28,54085,54086,54088,54090,54092,54094,54096,54099,54101],{"class":30,"line":131},[28,54087,52219],{"class":34},[28,54089,51686],{"class":51375},[28,54091,54026],{"class":2040},[28,54093,39],{"class":34},[28,54095,3804],{"class":320},[28,54097,54098],{"class":34},">4\u003C\u002F",[28,54100,51686],{"class":51375},[28,54102,51382],{"class":34},[28,54104,54105,54107,54109,54111,54113,54115,54118,54120],{"class":30,"line":1291},[28,54106,52219],{"class":34},[28,54108,51686],{"class":51375},[28,54110,54026],{"class":2040},[28,54112,39],{"class":34},[28,54114,3825],{"class":320},[28,54116,54117],{"class":34},">5\u003C\u002F",[28,54119,51686],{"class":51375},[28,54121,51382],{"class":34},[28,54123,54124,54126,54128],{"class":30,"line":1297},[28,54125,52219],{"class":34},[28,54127,51888],{"class":51375},[28,54129,51382],{"class":34},[28,54131,54132],{"class":30,"line":1388},[28,54133,54134],{"class":34},"    const one = document.querySelector('div')\n",[28,54136,54137],{"class":30,"line":1394},[28,54138,54139],{"class":34},"    console.log(one.dataset)\n",[28,54141,54142],{"class":30,"line":1406},[28,54143,54144],{"class":34},"    console.log(one.dataset.id)\n",[28,54146,54147],{"class":30,"line":1689},[28,54148,54149],{"class":34},"    console.log(one.dataset.spm)\n",[28,54151,54152,54154,54156],{"class":30,"line":1694},[28,54153,52492],{"class":34},[28,54155,51888],{"class":51375},[28,54157,51382],{"class":34},[28,54159,54160,54162,54164],{"class":30,"line":1700},[28,54161,51860],{"class":34},[28,54163,51875],{"class":51375},[28,54165,51382],{"class":34},[14,54167,54168],{},[1539,54169],{"alt":23,"src":54170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54172,54173],{},"document.querySelector选择的是第一个对象（元素）",[188,54175,54177],{"id":54176},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54179,54180],{},[1539,54181],{"alt":23,"src":54182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54184,54185],{},[1539,54186],{"alt":23,"src":54187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54189,54190],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51888,54192,54193],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54195,54196],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51888,54198,54199],{},"\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,54201,54202],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54204,54205],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54207,54208],{},"单位为毫秒！！！",[14,54210,54211],{},"可以搭配匿名函数来用！！！",[14,54213,54214],{},"setInterval(function () {",[14,54216,54217],{},"alert('两秒执行一次')",[14,54219,54220],{},"}, 2000)",[14,54222,54223],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54225,54226],{},"function fn() {",[14,54228,54229],{},"document.write(1)",[14,54231,1150],{},[14,54233,54234],{},"setInterval(fn, 1000)",[14,54236,54237],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54239,54240],{},"setInterval('fn()', 1000)",[14,54242,54243],{},[1539,54244],{"alt":23,"src":54245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22075,54247,54249],{"id":54248},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[18,54251,54253],{"className":50708,"code":54252,"language":50710,"meta":23,"style":23},"\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",[25,54254,54255,54265,54279,54283,54291,54305,54325,54337,54345,54349,54357,54394,54399,54404,54409,54417,54425,54447,54455,54460,54482,54487,54492,54503,54508,54528,54536,54551,54566,54577,54582,54592,54602,54606,54615,54619,54627,54635,54639],{"__ignoreMap":23},[28,54256,54257,54259,54261,54263],{"class":30,"line":31},[28,54258,51372],{"class":34},[28,54260,51376],{"class":51375},[28,54262,51379],{"class":2040},[28,54264,51382],{"class":34},[28,54266,54267,54269,54271,54273,54275,54277],{"class":30,"line":94},[28,54268,99],{"class":34},[28,54270,50710],{"class":51375},[28,54272,51391],{"class":2040},[28,54274,39],{"class":34},[28,54276,51396],{"class":320},[28,54278,51382],{"class":34},[28,54280,54281],{"class":30,"line":109},[28,54282,2477],{"emptyLinePlaceholder":144},[28,54284,54285,54287,54289],{"class":30,"line":125},[28,54286,99],{"class":34},[28,54288,51409],{"class":51375},[28,54290,51382],{"class":34},[28,54292,54293,54295,54297,54299,54301,54303],{"class":30,"line":131},[28,54294,52219],{"class":34},[28,54296,51419],{"class":51375},[28,54298,51422],{"class":2040},[28,54300,39],{"class":34},[28,54302,51427],{"class":320},[28,54304,51382],{"class":34},[28,54306,54307,54309,54311,54313,54315,54317,54319,54321,54323],{"class":30,"line":1291},[28,54308,52219],{"class":34},[28,54310,51419],{"class":51375},[28,54312,14997],{"class":2040},[28,54314,39],{"class":34},[28,54316,51466],{"class":320},[28,54318,51446],{"class":2040},[28,54320,39],{"class":34},[28,54322,51473],{"class":320},[28,54324,51382],{"class":34},[28,54326,54327,54329,54331,54333,54335],{"class":30,"line":1297},[28,54328,52219],{"class":34},[28,54330,51482],{"class":51375},[28,54332,51485],{"class":34},[28,54334,51482],{"class":51375},[28,54336,51382],{"class":34},[28,54338,54339,54341,54343],{"class":30,"line":1388},[28,54340,51860],{"class":34},[28,54342,51409],{"class":51375},[28,54344,51382],{"class":34},[28,54346,54347],{"class":30,"line":1394},[28,54348,2477],{"emptyLinePlaceholder":144},[28,54350,54351,54353,54355],{"class":30,"line":1406},[28,54352,99],{"class":34},[28,54354,51875],{"class":51375},[28,54356,51382],{"class":34},[28,54358,54359,54361,54364,54366,54368,54370,54372,54374,54376,54379,54381,54384,54387,54389,54392],{"class":30,"line":1689},[28,54360,52219],{"class":34},[28,54362,54363],{"class":51375},"textarea",[28,54365,14997],{"class":2040},[28,54367,39],{"class":34},[28,54369,7729],{"class":320},[28,54371,15036],{"class":2040},[28,54373,39],{"class":34},[28,54375,7729],{"class":320},[28,54377,54378],{"class":2040}," cols",[28,54380,39],{"class":34},[28,54382,54383],{"class":320},"\"30\"",[28,54385,54386],{"class":2040}," rows",[28,54388,39],{"class":34},[28,54390,54391],{"class":320},"\"10\"",[28,54393,51382],{"class":34},[28,54395,54396],{"class":30,"line":1694},[28,54397,54398],{"class":34},"        用户注册协议\n",[28,54400,54401],{"class":30,"line":1700},[28,54402,54403],{"class":34},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[28,54405,54406],{"class":30,"line":1705},[28,54407,54408],{"class":34},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[28,54410,54411,54413,54415],{"class":30,"line":1719},[28,54412,51851],{"class":34},[28,54414,54363],{"class":51375},[28,54416,51382],{"class":34},[28,54418,54419,54421,54423],{"class":30,"line":1724},[28,54420,52219],{"class":34},[28,54422,53791],{"class":51375},[28,54424,51382],{"class":34},[28,54426,54427,54429,54431,54433,54435,54438,54440,54443,54445],{"class":30,"line":1730},[28,54428,52219],{"class":34},[28,54430,53962],{"class":51375},[28,54432,53561],{"class":2040},[28,54434,39],{"class":34},[28,54436,54437],{"class":320},"\"btn\"",[28,54439,53965],{"class":2040},[28,54441,54442],{"class":34},">我已经阅读用户协议(5)\u003C\u002F",[28,54444,53962],{"class":51375},[28,54446,51382],{"class":34},[28,54448,54449,54451,54453],{"class":30,"line":1751},[28,54450,52219],{"class":34},[28,54452,51888],{"class":51375},[28,54454,51382],{"class":34},[28,54456,54457],{"class":30,"line":1756},[28,54458,54459],{"class":105},"    \u002F\u002F 1. 获取元素\n",[28,54461,54462,54464,54467,54469,54472,54475,54477,54480],{"class":30,"line":1770},[28,54463,11298],{"class":38},[28,54465,54466],{"class":45}," btn",[28,54468,13641],{"class":38},[28,54470,54471],{"class":34}," document.",[28,54473,54474],{"class":2040},"querySelector",[28,54476,221],{"class":34},[28,54478,54479],{"class":320},"'.btn'",[28,54481,227],{"class":34},[28,54483,54484],{"class":30,"line":1775},[28,54485,54486],{"class":105},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[28,54488,54489],{"class":30,"line":1804},[28,54490,54491],{"class":105},"    \u002F\u002F 2. 倒计时\n",[28,54493,54494,54496,54498,54500],{"class":30,"line":1809},[28,54495,52294],{"class":38},[28,54497,9515],{"class":34},[28,54499,39],{"class":38},[28,54501,54502],{"class":45}," 5\n",[28,54504,54505],{"class":30,"line":1826},[28,54506,54507],{"class":105},"    \u002F\u002F 2.1 开启定时器\n",[28,54509,54510,54512,54515,54517,54520,54522,54525],{"class":30,"line":1831},[28,54511,52294],{"class":38},[28,54513,54514],{"class":34}," n ",[28,54516,39],{"class":38},[28,54518,54519],{"class":2040}," setInterval",[28,54521,221],{"class":34},[28,54523,54524],{"class":38},"function",[28,54526,54527],{"class":34}," () {\n",[28,54529,54530,54533],{"class":30,"line":1836},[28,54531,54532],{"class":34},"      i",[28,54534,54535],{"class":38},"--\n",[28,54537,54538,54541,54543,54546,54548],{"class":30,"line":1841},[28,54539,54540],{"class":34},"      btn.innerHTML ",[28,54542,39],{"class":38},[28,54544,54545],{"class":320}," `我已经阅读用户协议(${",[28,54547,654],{"class":34},[28,54549,54550],{"class":320},"})`\n",[28,54552,54553,54556,54559,54562,54564],{"class":30,"line":1855},[28,54554,54555],{"class":38},"      if",[28,54557,54558],{"class":34}," (i ",[28,54560,54561],{"class":38},"===",[28,54563,4170],{"class":45},[28,54565,12519],{"class":34},[28,54567,54568,54571,54574],{"class":30,"line":1860},[28,54569,54570],{"class":2040},"        clearInterval",[28,54572,54573],{"class":34},"(n)  ",[28,54575,54576],{"class":105},"\u002F\u002F 关闭定时器\n",[28,54578,54579],{"class":30,"line":2654},[28,54580,54581],{"class":105},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[28,54583,54584,54587,54589],{"class":30,"line":2668},[28,54585,54586],{"class":34},"        btn.disabled ",[28,54588,39],{"class":38},[28,54590,54591],{"class":45}," false\n",[28,54593,54594,54597,54599],{"class":30,"line":2676},[28,54595,54596],{"class":34},"        btn.innerHTML ",[28,54598,39],{"class":38},[28,54600,54601],{"class":320}," '同意'\n",[28,54603,54604],{"class":30,"line":2681},[28,54605,52473],{"class":34},[28,54607,54608,54611,54613],{"class":30,"line":2687},[28,54609,54610],{"class":34},"    }, ",[28,54612,6487],{"class":45},[28,54614,227],{"class":34},[28,54616,54617],{"class":30,"line":2693},[28,54618,2477],{"emptyLinePlaceholder":144},[28,54620,54621,54623,54625],{"class":30,"line":2698},[28,54622,52492],{"class":34},[28,54624,51888],{"class":51375},[28,54626,51382],{"class":34},[28,54628,54629,54631,54633],{"class":30,"line":8025},[28,54630,51860],{"class":34},[28,54632,51875],{"class":51375},[28,54634,51382],{"class":34},[28,54636,54637],{"class":30,"line":8049},[28,54638,2477],{"emptyLinePlaceholder":144},[28,54640,54641,54643,54645],{"class":30,"line":8054},[28,54642,51860],{"class":34},[28,54644,50710],{"class":51375},[28,54646,51382],{"class":34},[14,54648,54649],{},"不要一直想着用死循环,避免死循环",[14,54651,54652,54655],{},[25,54653,54654],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22075,54657,54659],{"id":54658},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[171,54661,54662],{},[174,54663,54664],{},"法1",[18,54666,54668],{"className":50708,"code":54667,"language":50710,"meta":23,"style":23},"\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",[25,54669,54670,54680,54694,54698,54706,54720,54740,54752,54760,54766,54777,54788,54792,54796,54803,54815,54819,54823,54830,54842,54856,54869,54883,54887,54891,54898,54909,54920,54931,54943,54955,54967,54971,54975,54983,54993,55006,55018,55031,55035,55039,55046,55056,55068,55080,55091,55102,55112,55124,55136,55140,55144,55153,55165,55177,55205,55218,55222,55226,55233,55244,55248,55256,55264,55268,55276,55290,55305,55329,55337,55352,55365,55373,55394,55406,55418,55430,55442,55454,55466,55478,55487,55495,55503,55511,55523,55546,55565,55584,55603,55622,55641,55660,55680,55684,55704,55723,55743,55764,55775,55792,55802,55812,55822,55827,55832,55837,55842,55867,55880,55884,55907,55911,55919,55927,55935,55939],{"__ignoreMap":23},[28,54671,54672,54674,54676,54678],{"class":30,"line":31},[28,54673,51372],{"class":34},[28,54675,51376],{"class":51375},[28,54677,51379],{"class":2040},[28,54679,51382],{"class":34},[28,54681,54682,54684,54686,54688,54690,54692],{"class":30,"line":94},[28,54683,99],{"class":34},[28,54685,50710],{"class":51375},[28,54687,51391],{"class":2040},[28,54689,39],{"class":34},[28,54691,51396],{"class":320},[28,54693,51382],{"class":34},[28,54695,54696],{"class":30,"line":109},[28,54697,2477],{"emptyLinePlaceholder":144},[28,54699,54700,54702,54704],{"class":30,"line":125},[28,54701,99],{"class":34},[28,54703,51409],{"class":51375},[28,54705,51382],{"class":34},[28,54707,54708,54710,54712,54714,54716,54718],{"class":30,"line":131},[28,54709,52219],{"class":34},[28,54711,51419],{"class":51375},[28,54713,51422],{"class":2040},[28,54715,39],{"class":34},[28,54717,51427],{"class":320},[28,54719,51382],{"class":34},[28,54721,54722,54724,54726,54728,54730,54732,54734,54736,54738],{"class":30,"line":1291},[28,54723,52219],{"class":34},[28,54725,51419],{"class":51375},[28,54727,14997],{"class":2040},[28,54729,39],{"class":34},[28,54731,51466],{"class":320},[28,54733,51446],{"class":2040},[28,54735,39],{"class":34},[28,54737,51473],{"class":320},[28,54739,51382],{"class":34},[28,54741,54742,54744,54746,54748,54750],{"class":30,"line":1297},[28,54743,52219],{"class":34},[28,54745,51482],{"class":51375},[28,54747,51485],{"class":34},[28,54749,51482],{"class":51375},[28,54751,51382],{"class":34},[28,54753,54754,54756,54758],{"class":30,"line":1388},[28,54755,52219],{"class":34},[28,54757,136],{"class":51375},[28,54759,51382],{"class":34},[28,54761,54762,54764],{"class":30,"line":1394},[28,54763,6480],{"class":51375},[28,54765,15649],{"class":34},[28,54767,54768,54771,54773,54775],{"class":30,"line":1406},[28,54769,54770],{"class":45},"      padding",[28,54772,51512],{"class":34},[28,54774,407],{"class":45},[28,54776,1367],{"class":34},[28,54778,54779,54782,54784,54786],{"class":30,"line":1689},[28,54780,54781],{"class":45},"      margin",[28,54783,51512],{"class":34},[28,54785,407],{"class":45},[28,54787,1367],{"class":34},[28,54789,54790],{"class":30,"line":1694},[28,54791,2264],{"class":34},[28,54793,54794],{"class":30,"line":1700},[28,54795,2477],{"emptyLinePlaceholder":144},[28,54797,54798,54801],{"class":30,"line":1705},[28,54799,54800],{"class":51375},"    li",[28,54802,15649],{"class":34},[28,54804,54805,54808,54810,54813],{"class":30,"line":1719},[28,54806,54807],{"class":45},"      list-style",[28,54809,51512],{"class":34},[28,54811,54812],{"class":45},"none",[28,54814,1367],{"class":34},[28,54816,54817],{"class":30,"line":1724},[28,54818,2264],{"class":34},[28,54820,54821],{"class":30,"line":1730},[28,54822,2477],{"emptyLinePlaceholder":144},[28,54824,54825,54828],{"class":30,"line":1751},[28,54826,54827],{"class":2040},"    .box",[28,54829,15649],{"class":34},[28,54831,54832,54835,54837,54840],{"class":30,"line":1756},[28,54833,54834],{"class":45},"      position",[28,54836,51512],{"class":34},[28,54838,54839],{"class":45},"relative",[28,54841,1367],{"class":34},[28,54843,54844,54847,54849,54852,54854],{"class":30,"line":1770},[28,54845,54846],{"class":45},"      width",[28,54848,51512],{"class":34},[28,54850,54851],{"class":45},"976",[28,54853,51567],{"class":38},[28,54855,1367],{"class":34},[28,54857,54858,54861,54863,54865,54867],{"class":30,"line":1775},[28,54859,54860],{"class":45},"      height",[28,54862,51512],{"class":34},[28,54864,1616],{"class":45},[28,54866,51567],{"class":38},[28,54868,1367],{"class":34},[28,54870,54871,54873,54875,54877,54879,54881],{"class":30,"line":1804},[28,54872,54781],{"class":45},[28,54874,51512],{"class":34},[28,54876,525],{"class":45},[28,54878,51567],{"class":38},[28,54880,51631],{"class":45},[28,54882,1367],{"class":34},[28,54884,54885],{"class":30,"line":1809},[28,54886,2264],{"class":34},[28,54888,54889],{"class":30,"line":1826},[28,54890,2477],{"emptyLinePlaceholder":144},[28,54892,54893,54896],{"class":30,"line":1831},[28,54894,54895],{"class":2040},"    .slider-footer",[28,54897,15649],{"class":34},[28,54899,54900,54902,54904,54907],{"class":30,"line":1836},[28,54901,54834],{"class":45},[28,54903,51512],{"class":34},[28,54905,54906],{"class":45},"absolute",[28,54908,1367],{"class":34},[28,54910,54911,54914,54916,54918],{"class":30,"line":1841},[28,54912,54913],{"class":45},"      left",[28,54915,51512],{"class":34},[28,54917,407],{"class":45},[28,54919,1367],{"class":34},[28,54921,54922,54925,54927,54929],{"class":30,"line":1855},[28,54923,54924],{"class":45},"      bottom",[28,54926,51512],{"class":34},[28,54928,407],{"class":45},[28,54930,1367],{"class":34},[28,54932,54933,54935,54937,54939,54941],{"class":30,"line":1860},[28,54934,54846],{"class":45},[28,54936,51512],{"class":34},[28,54938,525],{"class":45},[28,54940,542],{"class":38},[28,54942,1367],{"class":34},[28,54944,54945,54947,54949,54951,54953],{"class":30,"line":2654},[28,54946,54860],{"class":45},[28,54948,51512],{"class":34},[28,54950,785],{"class":45},[28,54952,542],{"class":38},[28,54954,1367],{"class":34},[28,54956,54957,54960,54962,54965],{"class":30,"line":2668},[28,54958,54959],{"class":45},"      background-color",[28,54961,51512],{"class":34},[28,54963,54964],{"class":45},"skyblue",[28,54966,1367],{"class":34},[28,54968,54969],{"class":30,"line":2676},[28,54970,2264],{"class":34},[28,54972,54973],{"class":30,"line":2681},[28,54974,2477],{"emptyLinePlaceholder":144},[28,54976,54977,54979,54981],{"class":30,"line":2687},[28,54978,54895],{"class":2040},[28,54980,6902],{"class":51375},[28,54982,15649],{"class":34},[28,54984,54985,54987,54989,54991],{"class":30,"line":2693},[28,54986,54834],{"class":45},[28,54988,51512],{"class":34},[28,54990,54906],{"class":45},[28,54992,1367],{"class":34},[28,54994,54995,54998,55000,55002,55004],{"class":30,"line":2698},[28,54996,54997],{"class":45},"      font-size",[28,54999,51512],{"class":34},[28,55001,1107],{"class":45},[28,55003,51567],{"class":38},[28,55005,1367],{"class":34},[28,55007,55008,55010,55012,55014,55016],{"class":30,"line":8025},[28,55009,54913],{"class":45},[28,55011,51512],{"class":34},[28,55013,102],{"class":45},[28,55015,51567],{"class":38},[28,55017,1367],{"class":34},[28,55019,55020,55023,55025,55027,55029],{"class":30,"line":8049},[28,55021,55022],{"class":45},"      top",[28,55024,51512],{"class":34},[28,55026,533],{"class":45},[28,55028,51567],{"class":38},[28,55030,1367],{"class":34},[28,55032,55033],{"class":30,"line":8054},[28,55034,2264],{"class":34},[28,55036,55037],{"class":30,"line":8060},[28,55038,2477],{"emptyLinePlaceholder":144},[28,55040,55041,55044],{"class":30,"line":8087},[28,55042,55043],{"class":51375},"    ul",[28,55045,15649],{"class":34},[28,55047,55048,55050,55052,55054],{"class":30,"line":8092},[28,55049,54834],{"class":45},[28,55051,51512],{"class":34},[28,55053,54906],{"class":45},[28,55055,1367],{"class":34},[28,55057,55058,55060,55062,55064,55066],{"class":30,"line":8098},[28,55059,55022],{"class":45},[28,55061,51512],{"class":34},[28,55063,987],{"class":45},[28,55065,51567],{"class":38},[28,55067,1367],{"class":34},[28,55069,55070,55072,55074,55076,55078],{"class":30,"line":8110},[28,55071,54913],{"class":45},[28,55073,51512],{"class":34},[28,55075,102],{"class":45},[28,55077,51567],{"class":38},[28,55079,1367],{"class":34},[28,55081,55082,55085,55087,55089],{"class":30,"line":8122},[28,55083,55084],{"class":45},"      display",[28,55086,51512],{"class":34},[28,55088,51552],{"class":45},[28,55090,1367],{"class":34},[28,55092,55093,55096,55098,55100],{"class":30,"line":8134},[28,55094,55095],{"class":45},"      justify-content",[28,55097,51512],{"class":34},[28,55099,51743],{"class":45},[28,55101,1367],{"class":34},[28,55103,55104,55106,55108,55110],{"class":30,"line":9793},[28,55105,54834],{"class":45},[28,55107,51512],{"class":34},[28,55109,54906],{"class":45},[28,55111,1367],{"class":34},[28,55113,55114,55116,55118,55120,55122],{"class":30,"line":9818},[28,55115,54846],{"class":45},[28,55117,51512],{"class":34},[28,55119,4069],{"class":45},[28,55121,51567],{"class":38},[28,55123,1367],{"class":34},[28,55125,55126,55128,55130,55132,55134],{"class":30,"line":9841},[28,55127,54860],{"class":45},[28,55129,51512],{"class":34},[28,55131,102],{"class":45},[28,55133,51567],{"class":38},[28,55135,1367],{"class":34},[28,55137,55138],{"class":30,"line":9865},[28,55139,2264],{"class":34},[28,55141,55142],{"class":30,"line":9870},[28,55143,2477],{"emptyLinePlaceholder":144},[28,55145,55146,55148,55151],{"class":30,"line":9875},[28,55147,55043],{"class":51375},[28,55149,55150],{"class":51375}," li",[28,55152,15649],{"class":34},[28,55154,55155,55157,55159,55161,55163],{"class":30,"line":9880},[28,55156,54846],{"class":45},[28,55158,51512],{"class":34},[28,55160,102],{"class":45},[28,55162,51567],{"class":38},[28,55164,1367],{"class":34},[28,55166,55167,55169,55171,55173,55175],{"class":30,"line":9889},[28,55168,54860],{"class":45},[28,55170,51512],{"class":34},[28,55172,102],{"class":45},[28,55174,51567],{"class":38},[28,55176,1367],{"class":34},[28,55178,55179,55181,55183,55186,55188,55190,55192,55194,55196,55198,55200,55203],{"class":30,"line":9894},[28,55180,54959],{"class":45},[28,55182,51512],{"class":34},[28,55184,55185],{"class":45},"rgba",[28,55187,221],{"class":34},[28,55189,407],{"class":45},[28,55191,12512],{"class":34},[28,55193,407],{"class":45},[28,55195,12512],{"class":34},[28,55197,407],{"class":45},[28,55199,12512],{"class":34},[28,55201,55202],{"class":45},".4",[28,55204,2796],{"class":34},[28,55206,55207,55210,55212,55214,55216],{"class":30,"line":9900},[28,55208,55209],{"class":45},"      border-radius",[28,55211,51512],{"class":34},[28,55213,659],{"class":45},[28,55215,51567],{"class":38},[28,55217,1367],{"class":34},[28,55219,55220],{"class":30,"line":9921},[28,55221,2264],{"class":34},[28,55223,55224],{"class":30,"line":9927},[28,55225,2477],{"emptyLinePlaceholder":144},[28,55227,55228,55231],{"class":30,"line":9941},[28,55229,55230],{"class":2040},"    .activate",[28,55232,15649],{"class":34},[28,55234,55235,55237,55239,55242],{"class":30,"line":9947},[28,55236,54959],{"class":45},[28,55238,51512],{"class":34},[28,55240,55241],{"class":45},"#f7f7f7",[28,55243,1367],{"class":34},[28,55245,55246],{"class":30,"line":9974},[28,55247,2264],{"class":34},[28,55249,55250,55252,55254],{"class":30,"line":9983},[28,55251,52492],{"class":34},[28,55253,136],{"class":51375},[28,55255,51382],{"class":34},[28,55257,55258,55260,55262],{"class":30,"line":9989},[28,55259,51860],{"class":34},[28,55261,51409],{"class":51375},[28,55263,51382],{"class":34},[28,55265,55266],{"class":30,"line":9997},[28,55267,2477],{"emptyLinePlaceholder":144},[28,55269,55270,55272,55274],{"class":30,"line":10002},[28,55271,99],{"class":34},[28,55273,51875],{"class":51375},[28,55275,51382],{"class":34},[28,55277,55278,55280,55282,55284,55286,55288],{"class":30,"line":16681},[28,55279,52219],{"class":34},[28,55281,51686],{"class":51375},[28,55283,53561],{"class":2040},[28,55285,39],{"class":34},[28,55287,53566],{"class":320},[28,55289,51382],{"class":34},[28,55291,55292,55294,55296,55298,55300,55303],{"class":30,"line":16687},[28,55293,51416],{"class":34},[28,55295,51686],{"class":51375},[28,55297,53561],{"class":2040},[28,55299,39],{"class":34},[28,55301,55302],{"class":320},"\"slider-wrapper\"",[28,55304,51382],{"class":34},[28,55306,55307,55310,55312,55315,55317,55320,55323,55325,55327],{"class":30,"line":16710},[28,55308,55309],{"class":34},"      \u003C",[28,55311,1539],{"class":51375},[28,55313,55314],{"class":2040}," src",[28,55316,39],{"class":34},[28,55318,55319],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,55321,55322],{"class":2040}," alt",[28,55324,39],{"class":34},[28,55326,7729],{"class":320},[28,55328,51382],{"class":34},[28,55330,55331,55333,55335],{"class":30,"line":16716},[28,55332,51851],{"class":34},[28,55334,51686],{"class":51375},[28,55336,51382],{"class":34},[28,55338,55339,55341,55343,55345,55347,55350],{"class":30,"line":16739},[28,55340,51416],{"class":34},[28,55342,51686],{"class":51375},[28,55344,53561],{"class":2040},[28,55346,39],{"class":34},[28,55348,55349],{"class":320},"\"slider-footer\"",[28,55351,51382],{"class":34},[28,55353,55354,55356,55358,55361,55363],{"class":30,"line":16753},[28,55355,55309],{"class":34},[28,55357,14],{"class":51375},[28,55359,55360],{"class":34},">对人类来说会不会太超前了?\u003C\u002F",[28,55362,14],{"class":51375},[28,55364,51382],{"class":34},[28,55366,55367,55369,55371],{"class":30,"line":16773},[28,55368,55309],{"class":34},[28,55370,1211],{"class":51375},[28,55372,51382],{"class":34},[28,55374,55375,55378,55380,55382,55384,55387,55390,55392],{"class":30,"line":16779},[28,55376,55377],{"class":34},"        \u003C",[28,55379,174],{"class":51375},[28,55381,53561],{"class":2040},[28,55383,39],{"class":34},[28,55385,55386],{"class":320},"\"activate\"",[28,55388,55389],{"class":34},">\u003C\u002F",[28,55391,174],{"class":51375},[28,55393,51382],{"class":34},[28,55395,55396,55398,55400,55402,55404],{"class":30,"line":16790},[28,55397,55377],{"class":34},[28,55399,174],{"class":51375},[28,55401,55389],{"class":34},[28,55403,174],{"class":51375},[28,55405,51382],{"class":34},[28,55407,55408,55410,55412,55414,55416],{"class":30,"line":16813},[28,55409,55377],{"class":34},[28,55411,174],{"class":51375},[28,55413,55389],{"class":34},[28,55415,174],{"class":51375},[28,55417,51382],{"class":34},[28,55419,55420,55422,55424,55426,55428],{"class":30,"line":16835},[28,55421,55377],{"class":34},[28,55423,174],{"class":51375},[28,55425,55389],{"class":34},[28,55427,174],{"class":51375},[28,55429,51382],{"class":34},[28,55431,55432,55434,55436,55438,55440],{"class":30,"line":16840},[28,55433,55377],{"class":34},[28,55435,174],{"class":51375},[28,55437,55389],{"class":34},[28,55439,174],{"class":51375},[28,55441,51382],{"class":34},[28,55443,55444,55446,55448,55450,55452],{"class":30,"line":16846},[28,55445,55377],{"class":34},[28,55447,174],{"class":51375},[28,55449,55389],{"class":34},[28,55451,174],{"class":51375},[28,55453,51382],{"class":34},[28,55455,55456,55458,55460,55462,55464],{"class":30,"line":16860},[28,55457,55377],{"class":34},[28,55459,174],{"class":51375},[28,55461,55389],{"class":34},[28,55463,174],{"class":51375},[28,55465,51382],{"class":34},[28,55467,55468,55470,55472,55474,55476],{"class":30,"line":16873},[28,55469,55377],{"class":34},[28,55471,174],{"class":51375},[28,55473,55389],{"class":34},[28,55475,174],{"class":51375},[28,55477,51382],{"class":34},[28,55479,55480,55483,55485],{"class":30,"line":16878},[28,55481,55482],{"class":34},"      \u003C\u002F",[28,55484,1211],{"class":51375},[28,55486,51382],{"class":34},[28,55488,55489,55491,55493],{"class":30,"line":16892},[28,55490,51851],{"class":34},[28,55492,51686],{"class":51375},[28,55494,51382],{"class":34},[28,55496,55497,55499,55501],{"class":30,"line":16897},[28,55498,52492],{"class":34},[28,55500,51686],{"class":51375},[28,55502,51382],{"class":34},[28,55504,55505,55507,55509],{"class":30,"line":16903},[28,55506,52219],{"class":34},[28,55508,51888],{"class":51375},[28,55510,51382],{"class":34},[28,55512,55513,55515,55518,55520],{"class":30,"line":16908},[28,55514,11298],{"class":38},[28,55516,55517],{"class":45}," arrImage",[28,55519,13641],{"class":38},[28,55521,55522],{"class":34}," [\n",[28,55524,55525,55528,55531,55534,55537,55540,55543],{"class":30,"line":16922},[28,55526,55527],{"class":34},"      { url: ",[28,55529,55530],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[28,55532,55533],{"class":34},", title: ",[28,55535,55536],{"class":320},"'对人类来说会不会太超前了?'",[28,55538,55539],{"class":34},", color: ",[28,55541,55542],{"class":320},"'rgba(100,67,68)'",[28,55544,55545],{"class":34}," },\n",[28,55547,55548,55550,55553,55555,55558,55560,55563],{"class":30,"line":16927},[28,55549,55527],{"class":34},[28,55551,55552],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[28,55554,55533],{"class":34},[28,55556,55557],{"class":320},"'开启剑与雪的黑暗传说!'",[28,55559,55539],{"class":34},[28,55561,55562],{"class":320},"'rgba(43,35,26)'",[28,55564,55545],{"class":34},[28,55566,55567,55569,55572,55574,55577,55579,55582],{"class":30,"line":16932},[28,55568,55527],{"class":34},[28,55570,55571],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[28,55573,55533],{"class":34},[28,55575,55576],{"class":320},"'真正的jo厨出现了!'",[28,55578,55539],{"class":34},[28,55580,55581],{"class":320},"'rgba(36,31,33)'",[28,55583,55545],{"class":34},[28,55585,55586,55588,55591,55593,55596,55598,55601],{"class":30,"line":16946},[28,55587,55527],{"class":34},[28,55589,55590],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[28,55592,55533],{"class":34},[28,55594,55595],{"class":320},"'李玉刚:让世界通过b站看到东方大国文化'",[28,55597,55539],{"class":34},[28,55599,55600],{"class":320},"'rgba(139,98,66)'",[28,55602,55545],{"class":34},[28,55604,55605,55607,55610,55612,55615,55617,55620],{"class":30,"line":16958},[28,55606,55527],{"class":34},[28,55608,55609],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[28,55611,55533],{"class":34},[28,55613,55614],{"class":320},"'快来分享你的寒假日常吧'",[28,55616,55539],{"class":34},[28,55618,55619],{"class":320},"'rgba(67,90,92)'",[28,55621,55545],{"class":34},[28,55623,55624,55626,55629,55631,55634,55636,55639],{"class":30,"line":16963},[28,55625,55527],{"class":34},[28,55627,55628],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[28,55630,55533],{"class":34},[28,55632,55633],{"class":320},"'哔哩哔哩小年YEAR'",[28,55635,55539],{"class":34},[28,55637,55638],{"class":320},"'rgba(166,131,143)'",[28,55640,55545],{"class":34},[28,55642,55643,55645,55648,55650,55653,55655,55658],{"class":30,"line":16976},[28,55644,55527],{"class":34},[28,55646,55647],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[28,55649,55533],{"class":34},[28,55651,55652],{"class":320},"'一站式解决你的电脑配置问题'",[28,55654,55539],{"class":34},[28,55656,55657],{"class":320},"'rgba(53,29,25)'",[28,55659,55545],{"class":34},[28,55661,55662,55664,55667,55669,55672,55674,55677],{"class":30,"line":16981},[28,55663,55527],{"class":34},[28,55665,55666],{"class":320},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[28,55668,55533],{"class":34},[28,55670,55671],{"class":320},"'谁不想和小猫咪贴贴呢?'",[28,55673,55539],{"class":34},[28,55675,55676],{"class":320},"'rgba(99,72,114)'",[28,55678,55679],{"class":34}," }\n",[28,55681,55682],{"class":30,"line":16986},[28,55683,53184],{"class":34},[28,55685,55686,55688,55691,55693,55695,55697,55699,55702],{"class":30,"line":16991},[28,55687,11298],{"class":38},[28,55689,55690],{"class":45}," img",[28,55692,13641],{"class":38},[28,55694,54471],{"class":34},[28,55696,54474],{"class":2040},[28,55698,221],{"class":34},[28,55700,55701],{"class":320},"'.slider-wrapper img'",[28,55703,227],{"class":34},[28,55705,55706,55708,55710,55712,55714,55716,55718,55721],{"class":30,"line":17004},[28,55707,11298],{"class":38},[28,55709,6902],{"class":45},[28,55711,13641],{"class":38},[28,55713,54471],{"class":34},[28,55715,54474],{"class":2040},[28,55717,221],{"class":34},[28,55719,55720],{"class":320},"'.slider-footer p'",[28,55722,227],{"class":34},[28,55724,55725,55727,55730,55732,55734,55736,55738,55741],{"class":30,"line":17009},[28,55726,11298],{"class":38},[28,55728,55729],{"class":45}," color",[28,55731,13641],{"class":38},[28,55733,54471],{"class":34},[28,55735,54474],{"class":2040},[28,55737,221],{"class":34},[28,55739,55740],{"class":320},"'.slider-footer'",[28,55742,227],{"class":34},[28,55744,55745,55747,55750,55752,55754,55757,55759,55762],{"class":30,"line":32709},[28,55746,11298],{"class":38},[28,55748,55749],{"class":45}," lis",[28,55751,13641],{"class":38},[28,55753,54471],{"class":34},[28,55755,55756],{"class":2040},"querySelectorAll",[28,55758,221],{"class":34},[28,55760,55761],{"class":320},"'.slider-footer ul li'",[28,55763,227],{"class":34},[28,55765,55766,55768,55770,55772],{"class":30,"line":32715},[28,55767,52294],{"class":38},[28,55769,9515],{"class":34},[28,55771,39],{"class":38},[28,55773,55774],{"class":45}," 1\n",[28,55776,55777,55779,55782,55784,55786,55788,55790],{"class":30,"line":32721},[28,55778,52294],{"class":38},[28,55780,55781],{"class":34}," timer ",[28,55783,39],{"class":38},[28,55785,54519],{"class":2040},[28,55787,221],{"class":34},[28,55789,54524],{"class":38},[28,55791,54527],{"class":34},[28,55793,55794,55797,55799],{"class":30,"line":32727},[28,55795,55796],{"class":34},"      img.src ",[28,55798,39],{"class":38},[28,55800,55801],{"class":34}," arrImage[i].url\n",[28,55803,55804,55807,55809],{"class":30,"line":32733},[28,55805,55806],{"class":34},"      p.innerHTML ",[28,55808,39],{"class":38},[28,55810,55811],{"class":34}," arrImage[i].title\n",[28,55813,55814,55817,55819],{"class":30,"line":32744},[28,55815,55816],{"class":34},"      color.style.backgroundColor ",[28,55818,39],{"class":38},[28,55820,55821],{"class":34}," arrImage[i].color\n",[28,55823,55824],{"class":30,"line":32750},[28,55825,55826],{"class":105},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[28,55828,55829],{"class":30,"line":32770},[28,55830,55831],{"class":105},"      \u002F\u002F li.classList.add('activate')\n",[28,55833,55834],{"class":30,"line":32776},[28,55835,55836],{"class":105},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[28,55838,55839],{"class":30,"line":32787},[28,55840,55841],{"class":105},"      \u002F\u002F lis[i].classList.remove('activate')\n",[28,55843,55844,55847,55849,55851,55854,55857,55860,55862,55865],{"class":30,"line":32793},[28,55845,55846],{"class":34},"      document.",[28,55848,54474],{"class":2040},[28,55850,221],{"class":34},[28,55852,55853],{"class":320},"'.activate'",[28,55855,55856],{"class":34},")?.classList.",[28,55858,55859],{"class":2040},"toggle",[28,55861,221],{"class":34},[28,55863,55864],{"class":320},"'activate'",[28,55866,227],{"class":34},[28,55868,55869,55872,55874,55876,55878],{"class":30,"line":32799},[28,55870,55871],{"class":34},"      lis[i].classList.",[28,55873,5411],{"class":2040},[28,55875,221],{"class":34},[28,55877,55864],{"class":320},[28,55879,227],{"class":34},[28,55881,55882],{"class":30,"line":32805},[28,55883,2477],{"emptyLinePlaceholder":144},[28,55885,55886,55889,55891,55893,55895,55897,55899,55901,55904],{"class":30,"line":32811},[28,55887,55888],{"class":34},"      i ",[28,55890,39],{"class":38},[28,55892,54558],{"class":34},[28,55894,693],{"class":38},[28,55896,25196],{"class":45},[28,55898,13791],{"class":34},[28,55900,542],{"class":38},[28,55902,55903],{"class":34}," arrImage.",[28,55905,55906],{"class":45},"length\n",[28,55908,55909],{"class":30,"line":32817},[28,55910,2477],{"emptyLinePlaceholder":144},[28,55912,55913,55915,55917],{"class":30,"line":32823},[28,55914,54610],{"class":34},[28,55916,6487],{"class":45},[28,55918,227],{"class":34},[28,55920,55921,55923,55925],{"class":30,"line":32829},[28,55922,52492],{"class":34},[28,55924,51888],{"class":51375},[28,55926,51382],{"class":34},[28,55928,55929,55931,55933],{"class":30,"line":32849},[28,55930,51860],{"class":34},[28,55932,51875],{"class":51375},[28,55934,51382],{"class":34},[28,55936,55937],{"class":30,"line":32855},[28,55938,2477],{"emptyLinePlaceholder":144},[28,55940,55941,55943,55945],{"class":30,"line":32871},[28,55942,51860],{"class":34},[28,55944,50710],{"class":51375},[28,55946,51382],{"class":34},[14,55948,55949],{},[1539,55950],{"alt":23,"src":55951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55953,55954],{},"?.就是短路保护,确保输出正常进行",[14,55956,55957],{},"不要忘记取余%,有时候可以用",[14,55959,55960],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[171,55962,55963],{"start":94},[174,55964,55965],{},"法2",[18,55967,55969],{"className":50708,"code":55968,"language":50710,"meta":23,"style":23},"\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",[25,55970,55971,55981,55995,55999,56007,56021,56041,56053,56061,56067,56077,56087,56091,56095,56101,56111,56115,56119,56125,56135,56147,56159,56173,56177,56181,56187,56197,56207,56217,56229,56241,56251,56255,56259,56267,56277,56289,56301,56313,56317,56321,56327,56337,56349,56361,56371,56381,56391,56403,56415,56419,56423,56431,56443,56455,56481,56493,56497,56501,56507,56517,56521,56529,56537,56541,56549,56563,56577,56597,56605,56619,56631,56639,56657,56669,56681,56693,56705,56717,56729,56741,56749,56757,56765,56773,56784,56800,56816,56832,56848,56864,56880,56896,56912,56916,56921,56939,56957,56967,56972,56977,56988,56994,57009,57018,57022,57027,57036,57041,57050,57055,57060,57065,57088,57118,57122,57130,57134,57142,57150,57154],{"__ignoreMap":23},[28,55972,55973,55975,55977,55979],{"class":30,"line":31},[28,55974,51372],{"class":34},[28,55976,51376],{"class":51375},[28,55978,51379],{"class":2040},[28,55980,51382],{"class":34},[28,55982,55983,55985,55987,55989,55991,55993],{"class":30,"line":94},[28,55984,99],{"class":34},[28,55986,50710],{"class":51375},[28,55988,51391],{"class":2040},[28,55990,39],{"class":34},[28,55992,51396],{"class":320},[28,55994,51382],{"class":34},[28,55996,55997],{"class":30,"line":109},[28,55998,2477],{"emptyLinePlaceholder":144},[28,56000,56001,56003,56005],{"class":30,"line":125},[28,56002,99],{"class":34},[28,56004,51409],{"class":51375},[28,56006,51382],{"class":34},[28,56008,56009,56011,56013,56015,56017,56019],{"class":30,"line":131},[28,56010,52219],{"class":34},[28,56012,51419],{"class":51375},[28,56014,51422],{"class":2040},[28,56016,39],{"class":34},[28,56018,51427],{"class":320},[28,56020,51382],{"class":34},[28,56022,56023,56025,56027,56029,56031,56033,56035,56037,56039],{"class":30,"line":1291},[28,56024,52219],{"class":34},[28,56026,51419],{"class":51375},[28,56028,14997],{"class":2040},[28,56030,39],{"class":34},[28,56032,51466],{"class":320},[28,56034,51446],{"class":2040},[28,56036,39],{"class":34},[28,56038,51473],{"class":320},[28,56040,51382],{"class":34},[28,56042,56043,56045,56047,56049,56051],{"class":30,"line":1297},[28,56044,52219],{"class":34},[28,56046,51482],{"class":51375},[28,56048,51485],{"class":34},[28,56050,51482],{"class":51375},[28,56052,51382],{"class":34},[28,56054,56055,56057,56059],{"class":30,"line":1388},[28,56056,52219],{"class":34},[28,56058,136],{"class":51375},[28,56060,51382],{"class":34},[28,56062,56063,56065],{"class":30,"line":1394},[28,56064,6480],{"class":51375},[28,56066,15649],{"class":34},[28,56068,56069,56071,56073,56075],{"class":30,"line":1406},[28,56070,54770],{"class":45},[28,56072,51512],{"class":34},[28,56074,407],{"class":45},[28,56076,1367],{"class":34},[28,56078,56079,56081,56083,56085],{"class":30,"line":1689},[28,56080,54781],{"class":45},[28,56082,51512],{"class":34},[28,56084,407],{"class":45},[28,56086,1367],{"class":34},[28,56088,56089],{"class":30,"line":1694},[28,56090,2264],{"class":34},[28,56092,56093],{"class":30,"line":1700},[28,56094,2477],{"emptyLinePlaceholder":144},[28,56096,56097,56099],{"class":30,"line":1705},[28,56098,54800],{"class":51375},[28,56100,15649],{"class":34},[28,56102,56103,56105,56107,56109],{"class":30,"line":1719},[28,56104,54807],{"class":45},[28,56106,51512],{"class":34},[28,56108,54812],{"class":45},[28,56110,1367],{"class":34},[28,56112,56113],{"class":30,"line":1724},[28,56114,2264],{"class":34},[28,56116,56117],{"class":30,"line":1730},[28,56118,2477],{"emptyLinePlaceholder":144},[28,56120,56121,56123],{"class":30,"line":1751},[28,56122,54827],{"class":2040},[28,56124,15649],{"class":34},[28,56126,56127,56129,56131,56133],{"class":30,"line":1756},[28,56128,54834],{"class":45},[28,56130,51512],{"class":34},[28,56132,54839],{"class":45},[28,56134,1367],{"class":34},[28,56136,56137,56139,56141,56143,56145],{"class":30,"line":1770},[28,56138,54846],{"class":45},[28,56140,51512],{"class":34},[28,56142,54851],{"class":45},[28,56144,51567],{"class":38},[28,56146,1367],{"class":34},[28,56148,56149,56151,56153,56155,56157],{"class":30,"line":1775},[28,56150,54860],{"class":45},[28,56152,51512],{"class":34},[28,56154,1616],{"class":45},[28,56156,51567],{"class":38},[28,56158,1367],{"class":34},[28,56160,56161,56163,56165,56167,56169,56171],{"class":30,"line":1804},[28,56162,54781],{"class":45},[28,56164,51512],{"class":34},[28,56166,525],{"class":45},[28,56168,51567],{"class":38},[28,56170,51631],{"class":45},[28,56172,1367],{"class":34},[28,56174,56175],{"class":30,"line":1809},[28,56176,2264],{"class":34},[28,56178,56179],{"class":30,"line":1826},[28,56180,2477],{"emptyLinePlaceholder":144},[28,56182,56183,56185],{"class":30,"line":1831},[28,56184,54895],{"class":2040},[28,56186,15649],{"class":34},[28,56188,56189,56191,56193,56195],{"class":30,"line":1836},[28,56190,54834],{"class":45},[28,56192,51512],{"class":34},[28,56194,54906],{"class":45},[28,56196,1367],{"class":34},[28,56198,56199,56201,56203,56205],{"class":30,"line":1841},[28,56200,54913],{"class":45},[28,56202,51512],{"class":34},[28,56204,407],{"class":45},[28,56206,1367],{"class":34},[28,56208,56209,56211,56213,56215],{"class":30,"line":1855},[28,56210,54924],{"class":45},[28,56212,51512],{"class":34},[28,56214,407],{"class":45},[28,56216,1367],{"class":34},[28,56218,56219,56221,56223,56225,56227],{"class":30,"line":1860},[28,56220,54846],{"class":45},[28,56222,51512],{"class":34},[28,56224,525],{"class":45},[28,56226,542],{"class":38},[28,56228,1367],{"class":34},[28,56230,56231,56233,56235,56237,56239],{"class":30,"line":2654},[28,56232,54860],{"class":45},[28,56234,51512],{"class":34},[28,56236,785],{"class":45},[28,56238,542],{"class":38},[28,56240,1367],{"class":34},[28,56242,56243,56245,56247,56249],{"class":30,"line":2668},[28,56244,54959],{"class":45},[28,56246,51512],{"class":34},[28,56248,54964],{"class":45},[28,56250,1367],{"class":34},[28,56252,56253],{"class":30,"line":2676},[28,56254,2264],{"class":34},[28,56256,56257],{"class":30,"line":2681},[28,56258,2477],{"emptyLinePlaceholder":144},[28,56260,56261,56263,56265],{"class":30,"line":2687},[28,56262,54895],{"class":2040},[28,56264,6902],{"class":51375},[28,56266,15649],{"class":34},[28,56268,56269,56271,56273,56275],{"class":30,"line":2693},[28,56270,54834],{"class":45},[28,56272,51512],{"class":34},[28,56274,54906],{"class":45},[28,56276,1367],{"class":34},[28,56278,56279,56281,56283,56285,56287],{"class":30,"line":2698},[28,56280,54997],{"class":45},[28,56282,51512],{"class":34},[28,56284,1107],{"class":45},[28,56286,51567],{"class":38},[28,56288,1367],{"class":34},[28,56290,56291,56293,56295,56297,56299],{"class":30,"line":8025},[28,56292,54913],{"class":45},[28,56294,51512],{"class":34},[28,56296,102],{"class":45},[28,56298,51567],{"class":38},[28,56300,1367],{"class":34},[28,56302,56303,56305,56307,56309,56311],{"class":30,"line":8049},[28,56304,55022],{"class":45},[28,56306,51512],{"class":34},[28,56308,533],{"class":45},[28,56310,51567],{"class":38},[28,56312,1367],{"class":34},[28,56314,56315],{"class":30,"line":8054},[28,56316,2264],{"class":34},[28,56318,56319],{"class":30,"line":8060},[28,56320,2477],{"emptyLinePlaceholder":144},[28,56322,56323,56325],{"class":30,"line":8087},[28,56324,55043],{"class":51375},[28,56326,15649],{"class":34},[28,56328,56329,56331,56333,56335],{"class":30,"line":8092},[28,56330,54834],{"class":45},[28,56332,51512],{"class":34},[28,56334,54906],{"class":45},[28,56336,1367],{"class":34},[28,56338,56339,56341,56343,56345,56347],{"class":30,"line":8098},[28,56340,55022],{"class":45},[28,56342,51512],{"class":34},[28,56344,987],{"class":45},[28,56346,51567],{"class":38},[28,56348,1367],{"class":34},[28,56350,56351,56353,56355,56357,56359],{"class":30,"line":8110},[28,56352,54913],{"class":45},[28,56354,51512],{"class":34},[28,56356,102],{"class":45},[28,56358,51567],{"class":38},[28,56360,1367],{"class":34},[28,56362,56363,56365,56367,56369],{"class":30,"line":8122},[28,56364,55084],{"class":45},[28,56366,51512],{"class":34},[28,56368,51552],{"class":45},[28,56370,1367],{"class":34},[28,56372,56373,56375,56377,56379],{"class":30,"line":8134},[28,56374,55095],{"class":45},[28,56376,51512],{"class":34},[28,56378,51743],{"class":45},[28,56380,1367],{"class":34},[28,56382,56383,56385,56387,56389],{"class":30,"line":9793},[28,56384,54834],{"class":45},[28,56386,51512],{"class":34},[28,56388,54906],{"class":45},[28,56390,1367],{"class":34},[28,56392,56393,56395,56397,56399,56401],{"class":30,"line":9818},[28,56394,54846],{"class":45},[28,56396,51512],{"class":34},[28,56398,4069],{"class":45},[28,56400,51567],{"class":38},[28,56402,1367],{"class":34},[28,56404,56405,56407,56409,56411,56413],{"class":30,"line":9841},[28,56406,54860],{"class":45},[28,56408,51512],{"class":34},[28,56410,102],{"class":45},[28,56412,51567],{"class":38},[28,56414,1367],{"class":34},[28,56416,56417],{"class":30,"line":9865},[28,56418,2264],{"class":34},[28,56420,56421],{"class":30,"line":9870},[28,56422,2477],{"emptyLinePlaceholder":144},[28,56424,56425,56427,56429],{"class":30,"line":9875},[28,56426,55043],{"class":51375},[28,56428,55150],{"class":51375},[28,56430,15649],{"class":34},[28,56432,56433,56435,56437,56439,56441],{"class":30,"line":9880},[28,56434,54846],{"class":45},[28,56436,51512],{"class":34},[28,56438,102],{"class":45},[28,56440,51567],{"class":38},[28,56442,1367],{"class":34},[28,56444,56445,56447,56449,56451,56453],{"class":30,"line":9889},[28,56446,54860],{"class":45},[28,56448,51512],{"class":34},[28,56450,102],{"class":45},[28,56452,51567],{"class":38},[28,56454,1367],{"class":34},[28,56456,56457,56459,56461,56463,56465,56467,56469,56471,56473,56475,56477,56479],{"class":30,"line":9894},[28,56458,54959],{"class":45},[28,56460,51512],{"class":34},[28,56462,55185],{"class":45},[28,56464,221],{"class":34},[28,56466,407],{"class":45},[28,56468,12512],{"class":34},[28,56470,407],{"class":45},[28,56472,12512],{"class":34},[28,56474,407],{"class":45},[28,56476,12512],{"class":34},[28,56478,55202],{"class":45},[28,56480,2796],{"class":34},[28,56482,56483,56485,56487,56489,56491],{"class":30,"line":9900},[28,56484,55209],{"class":45},[28,56486,51512],{"class":34},[28,56488,659],{"class":45},[28,56490,51567],{"class":38},[28,56492,1367],{"class":34},[28,56494,56495],{"class":30,"line":9921},[28,56496,2264],{"class":34},[28,56498,56499],{"class":30,"line":9927},[28,56500,2477],{"emptyLinePlaceholder":144},[28,56502,56503,56505],{"class":30,"line":9941},[28,56504,55230],{"class":2040},[28,56506,15649],{"class":34},[28,56508,56509,56511,56513,56515],{"class":30,"line":9947},[28,56510,54959],{"class":45},[28,56512,51512],{"class":34},[28,56514,55241],{"class":45},[28,56516,1367],{"class":34},[28,56518,56519],{"class":30,"line":9974},[28,56520,2264],{"class":34},[28,56522,56523,56525,56527],{"class":30,"line":9983},[28,56524,52492],{"class":34},[28,56526,136],{"class":51375},[28,56528,51382],{"class":34},[28,56530,56531,56533,56535],{"class":30,"line":9989},[28,56532,51860],{"class":34},[28,56534,51409],{"class":51375},[28,56536,51382],{"class":34},[28,56538,56539],{"class":30,"line":9997},[28,56540,2477],{"emptyLinePlaceholder":144},[28,56542,56543,56545,56547],{"class":30,"line":10002},[28,56544,99],{"class":34},[28,56546,51875],{"class":51375},[28,56548,51382],{"class":34},[28,56550,56551,56553,56555,56557,56559,56561],{"class":30,"line":16681},[28,56552,52219],{"class":34},[28,56554,51686],{"class":51375},[28,56556,53561],{"class":2040},[28,56558,39],{"class":34},[28,56560,53566],{"class":320},[28,56562,51382],{"class":34},[28,56564,56565,56567,56569,56571,56573,56575],{"class":30,"line":16687},[28,56566,51416],{"class":34},[28,56568,51686],{"class":51375},[28,56570,53561],{"class":2040},[28,56572,39],{"class":34},[28,56574,55302],{"class":320},[28,56576,51382],{"class":34},[28,56578,56579,56581,56583,56585,56587,56589,56591,56593,56595],{"class":30,"line":16710},[28,56580,55309],{"class":34},[28,56582,1539],{"class":51375},[28,56584,55314],{"class":2040},[28,56586,39],{"class":34},[28,56588,55319],{"class":320},[28,56590,55322],{"class":2040},[28,56592,39],{"class":34},[28,56594,7729],{"class":320},[28,56596,51382],{"class":34},[28,56598,56599,56601,56603],{"class":30,"line":16716},[28,56600,51851],{"class":34},[28,56602,51686],{"class":51375},[28,56604,51382],{"class":34},[28,56606,56607,56609,56611,56613,56615,56617],{"class":30,"line":16739},[28,56608,51416],{"class":34},[28,56610,51686],{"class":51375},[28,56612,53561],{"class":2040},[28,56614,39],{"class":34},[28,56616,55349],{"class":320},[28,56618,51382],{"class":34},[28,56620,56621,56623,56625,56627,56629],{"class":30,"line":16753},[28,56622,55309],{"class":34},[28,56624,14],{"class":51375},[28,56626,55360],{"class":34},[28,56628,14],{"class":51375},[28,56630,51382],{"class":34},[28,56632,56633,56635,56637],{"class":30,"line":16773},[28,56634,55309],{"class":34},[28,56636,1211],{"class":51375},[28,56638,51382],{"class":34},[28,56640,56641,56643,56645,56647,56649,56651,56653,56655],{"class":30,"line":16779},[28,56642,55377],{"class":34},[28,56644,174],{"class":51375},[28,56646,53561],{"class":2040},[28,56648,39],{"class":34},[28,56650,55386],{"class":320},[28,56652,55389],{"class":34},[28,56654,174],{"class":51375},[28,56656,51382],{"class":34},[28,56658,56659,56661,56663,56665,56667],{"class":30,"line":16790},[28,56660,55377],{"class":34},[28,56662,174],{"class":51375},[28,56664,55389],{"class":34},[28,56666,174],{"class":51375},[28,56668,51382],{"class":34},[28,56670,56671,56673,56675,56677,56679],{"class":30,"line":16813},[28,56672,55377],{"class":34},[28,56674,174],{"class":51375},[28,56676,55389],{"class":34},[28,56678,174],{"class":51375},[28,56680,51382],{"class":34},[28,56682,56683,56685,56687,56689,56691],{"class":30,"line":16835},[28,56684,55377],{"class":34},[28,56686,174],{"class":51375},[28,56688,55389],{"class":34},[28,56690,174],{"class":51375},[28,56692,51382],{"class":34},[28,56694,56695,56697,56699,56701,56703],{"class":30,"line":16840},[28,56696,55377],{"class":34},[28,56698,174],{"class":51375},[28,56700,55389],{"class":34},[28,56702,174],{"class":51375},[28,56704,51382],{"class":34},[28,56706,56707,56709,56711,56713,56715],{"class":30,"line":16846},[28,56708,55377],{"class":34},[28,56710,174],{"class":51375},[28,56712,55389],{"class":34},[28,56714,174],{"class":51375},[28,56716,51382],{"class":34},[28,56718,56719,56721,56723,56725,56727],{"class":30,"line":16860},[28,56720,55377],{"class":34},[28,56722,174],{"class":51375},[28,56724,55389],{"class":34},[28,56726,174],{"class":51375},[28,56728,51382],{"class":34},[28,56730,56731,56733,56735,56737,56739],{"class":30,"line":16873},[28,56732,55377],{"class":34},[28,56734,174],{"class":51375},[28,56736,55389],{"class":34},[28,56738,174],{"class":51375},[28,56740,51382],{"class":34},[28,56742,56743,56745,56747],{"class":30,"line":16878},[28,56744,55482],{"class":34},[28,56746,1211],{"class":51375},[28,56748,51382],{"class":34},[28,56750,56751,56753,56755],{"class":30,"line":16892},[28,56752,51851],{"class":34},[28,56754,51686],{"class":51375},[28,56756,51382],{"class":34},[28,56758,56759,56761,56763],{"class":30,"line":16897},[28,56760,52492],{"class":34},[28,56762,51686],{"class":51375},[28,56764,51382],{"class":34},[28,56766,56767,56769,56771],{"class":30,"line":16903},[28,56768,52219],{"class":34},[28,56770,51888],{"class":51375},[28,56772,51382],{"class":34},[28,56774,56775,56777,56780,56782],{"class":30,"line":16908},[28,56776,11298],{"class":38},[28,56778,56779],{"class":45}," sliderData",[28,56781,13641],{"class":38},[28,56783,55522],{"class":34},[28,56785,56786,56788,56790,56792,56794,56796,56798],{"class":30,"line":16922},[28,56787,55527],{"class":34},[28,56789,55530],{"class":320},[28,56791,55533],{"class":34},[28,56793,55536],{"class":320},[28,56795,55539],{"class":34},[28,56797,55542],{"class":320},[28,56799,55545],{"class":34},[28,56801,56802,56804,56806,56808,56810,56812,56814],{"class":30,"line":16927},[28,56803,55527],{"class":34},[28,56805,55552],{"class":320},[28,56807,55533],{"class":34},[28,56809,55557],{"class":320},[28,56811,55539],{"class":34},[28,56813,55562],{"class":320},[28,56815,55545],{"class":34},[28,56817,56818,56820,56822,56824,56826,56828,56830],{"class":30,"line":16932},[28,56819,55527],{"class":34},[28,56821,55571],{"class":320},[28,56823,55533],{"class":34},[28,56825,55576],{"class":320},[28,56827,55539],{"class":34},[28,56829,55581],{"class":320},[28,56831,55545],{"class":34},[28,56833,56834,56836,56838,56840,56842,56844,56846],{"class":30,"line":16946},[28,56835,55527],{"class":34},[28,56837,55590],{"class":320},[28,56839,55533],{"class":34},[28,56841,55595],{"class":320},[28,56843,55539],{"class":34},[28,56845,55600],{"class":320},[28,56847,55545],{"class":34},[28,56849,56850,56852,56854,56856,56858,56860,56862],{"class":30,"line":16958},[28,56851,55527],{"class":34},[28,56853,55609],{"class":320},[28,56855,55533],{"class":34},[28,56857,55614],{"class":320},[28,56859,55539],{"class":34},[28,56861,55619],{"class":320},[28,56863,55545],{"class":34},[28,56865,56866,56868,56870,56872,56874,56876,56878],{"class":30,"line":16963},[28,56867,55527],{"class":34},[28,56869,55628],{"class":320},[28,56871,55533],{"class":34},[28,56873,55633],{"class":320},[28,56875,55539],{"class":34},[28,56877,55638],{"class":320},[28,56879,55545],{"class":34},[28,56881,56882,56884,56886,56888,56890,56892,56894],{"class":30,"line":16976},[28,56883,55527],{"class":34},[28,56885,55647],{"class":320},[28,56887,55533],{"class":34},[28,56889,55652],{"class":320},[28,56891,55539],{"class":34},[28,56893,55657],{"class":320},[28,56895,55545],{"class":34},[28,56897,56898,56900,56902,56904,56906,56908,56910],{"class":30,"line":16981},[28,56899,55527],{"class":34},[28,56901,55666],{"class":320},[28,56903,55533],{"class":34},[28,56905,55671],{"class":320},[28,56907,55539],{"class":34},[28,56909,55676],{"class":320},[28,56911,55679],{"class":34},[28,56913,56914],{"class":30,"line":16986},[28,56915,53184],{"class":34},[28,56917,56918],{"class":30,"line":16991},[28,56919,56920],{"class":105},"    \u002F\u002F 1.获取元素\n",[28,56922,56923,56925,56927,56929,56931,56933,56935,56937],{"class":30,"line":17004},[28,56924,11298],{"class":38},[28,56926,55690],{"class":45},[28,56928,13641],{"class":38},[28,56930,54471],{"class":34},[28,56932,54474],{"class":2040},[28,56934,221],{"class":34},[28,56936,55701],{"class":320},[28,56938,227],{"class":34},[28,56940,56941,56943,56945,56947,56949,56951,56953,56955],{"class":30,"line":17009},[28,56942,11298],{"class":38},[28,56944,6902],{"class":45},[28,56946,13641],{"class":38},[28,56948,54471],{"class":34},[28,56950,54474],{"class":2040},[28,56952,221],{"class":34},[28,56954,55720],{"class":320},[28,56956,227],{"class":34},[28,56958,56959,56961,56963,56965],{"class":30,"line":32709},[28,56960,52294],{"class":38},[28,56962,9515],{"class":34},[28,56964,39],{"class":38},[28,56966,47409],{"class":45},[28,56968,56969],{"class":30,"line":32715},[28,56970,56971],{"class":105},"    \u002F\u002F 2.开启定时器\n",[28,56973,56974],{"class":30,"line":32721},[28,56975,56976],{"class":105},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[28,56978,56979,56982,56984,56986],{"class":30,"line":32727},[28,56980,56981],{"class":2040},"    setInterval",[28,56983,221],{"class":34},[28,56985,54524],{"class":38},[28,56987,54527],{"class":34},[28,56989,56990,56992],{"class":30,"line":32733},[28,56991,54532],{"class":34},[28,56993,2779],{"class":38},[28,56995,56996,56998,57000,57002,57005,57007],{"class":30,"line":32744},[28,56997,54555],{"class":38},[28,56999,54558],{"class":34},[28,57001,1787],{"class":38},[28,57003,57004],{"class":34}," sliderData.",[28,57006,52043],{"class":45},[28,57008,12519],{"class":34},[28,57010,57011,57014,57016],{"class":30,"line":32750},[28,57012,57013],{"class":34},"        i ",[28,57015,39],{"class":38},[28,57017,47409],{"class":45},[28,57019,57020],{"class":30,"line":32770},[28,57021,52473],{"class":34},[28,57023,57024],{"class":30,"line":32776},[28,57025,57026],{"class":105},"      \u002F\u002F 更换图片路径\n",[28,57028,57029,57031,57033],{"class":30,"line":32787},[28,57030,55796],{"class":34},[28,57032,39],{"class":38},[28,57034,57035],{"class":34}," sliderData[i].url\n",[28,57037,57038],{"class":30,"line":32793},[28,57039,57040],{"class":105},"      \u002F\u002F 把文字写到p里面\n",[28,57042,57043,57045,57047],{"class":30,"line":32799},[28,57044,55806],{"class":34},[28,57046,39],{"class":38},[28,57048,57049],{"class":34}," sliderData[i].title\n",[28,57051,57052],{"class":30,"line":32805},[28,57053,57054],{"class":105},"      \u002F\u002F 小圆点\n",[28,57056,57057],{"class":30,"line":32811},[28,57058,57059],{"class":105},"      \u002F\u002F 先删除以前的active\n",[28,57061,57062],{"class":30,"line":32817},[28,57063,57064],{"class":105},"      \u002F\u002F 只让当前li添加active\n",[28,57066,57067,57069,57071,57073,57076,57079,57082,57084,57086],{"class":30,"line":32823},[28,57068,55846],{"class":34},[28,57070,54474],{"class":2040},[28,57072,221],{"class":34},[28,57074,57075],{"class":320},"'.slider-footer .activate'",[28,57077,57078],{"class":34},").classList.",[28,57080,57081],{"class":2040},"remove",[28,57083,221],{"class":34},[28,57085,55864],{"class":320},[28,57087,227],{"class":34},[28,57089,57090,57092,57094,57096,57099,57101,57103,57105,57108,57110,57112,57114,57116],{"class":30,"line":32829},[28,57091,55846],{"class":34},[28,57093,54474],{"class":2040},[28,57095,221],{"class":34},[28,57097,57098],{"class":320},"`.slider-footer ul li:nth-child(${",[28,57100,654],{"class":34},[28,57102,45642],{"class":38},[28,57104,25196],{"class":45},[28,57106,57107],{"class":320},"})`",[28,57109,57078],{"class":34},[28,57111,5411],{"class":2040},[28,57113,221],{"class":34},[28,57115,55864],{"class":320},[28,57117,227],{"class":34},[28,57119,57120],{"class":30,"line":32849},[28,57121,2477],{"emptyLinePlaceholder":144},[28,57123,57124,57126,57128],{"class":30,"line":32855},[28,57125,54610],{"class":34},[28,57127,6487],{"class":45},[28,57129,227],{"class":34},[28,57131,57132],{"class":30,"line":32871},[28,57133,2477],{"emptyLinePlaceholder":144},[28,57135,57136,57138,57140],{"class":30,"line":32877},[28,57137,52492],{"class":34},[28,57139,51888],{"class":51375},[28,57141,51382],{"class":34},[28,57143,57144,57146,57148],{"class":30,"line":32891},[28,57145,51860],{"class":34},[28,57147,51875],{"class":51375},[28,57149,51382],{"class":34},[28,57151,57152],{"class":30,"line":32897},[28,57153,2477],{"emptyLinePlaceholder":144},[28,57155,57156,57158,57160],{"class":30,"line":32912},[28,57157,51860],{"class":34},[28,57159,50710],{"class":51375},[28,57161,51382],{"class":34},[188,57163,57165],{"id":57164},"_317-重要知识点","3.1.7 重要知识点",[14,57167,57168,57169],{},"浏览器在渲染文本时， ",[365,57170,57171],{},"没有空格或换行符就没有“断行点”",[14,57173,57174],{},[1539,57175],{"alt":23,"src":57176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57178,57179],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57181,57182],{},[1539,57183],{"alt":23,"src":57184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57186,57187],{},[1539,57188],{"alt":23,"src":57189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[159,57191,57193],{"id":57192},"_32-dom事件基础","3.2 DOM事件基础",[188,57195,57197],{"id":57196},"_321-事件监听","3.2.1 事件监听",[14,57199,57200],{},[1539,57201],{"alt":23,"src":57202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57204,57205],{},"事件监听有响应的发生",[14,57207,57208],{},[1539,57209],{"alt":23,"src":57210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57212,57213],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57215,57216],{},"对于有名函数,要执行的函数名后边不要加()",[188,57218,57220],{"id":57219},"_322-随机点名案例","3.2.2 随机点名案例",[18,57222,57224],{"className":50708,"code":57223,"language":50710,"meta":23,"style":23},"\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",[25,57225,57226,57236,57250,57254,57262,57276,57296,57308,57316,57322,57332,57342,57346,57350,57357,57368,57372,57376,57382,57394,57408,57418,57430,57443,57447,57451,57458,57462,57475,57487,57499,57503,57507,57511,57518,57528,57532,57536,57545,57557,57569,57584,57588,57596,57604,57608,57616,57629,57643,57656,57676,57684,57699,57719,57739,57747,57751,57759,57764,57800,57820,57825,57844,57849,57860,57865,57876,57881,57900,57915,57920,57946,57956,57965,57970,57986,57991,57996,58001,58016,58020,58024,58029,58048,58065,58073,58078,58093,58097,58101,58109,58117,58121],{"__ignoreMap":23},[28,57227,57228,57230,57232,57234],{"class":30,"line":31},[28,57229,51372],{"class":34},[28,57231,51376],{"class":51375},[28,57233,51379],{"class":2040},[28,57235,51382],{"class":34},[28,57237,57238,57240,57242,57244,57246,57248],{"class":30,"line":94},[28,57239,99],{"class":34},[28,57241,50710],{"class":51375},[28,57243,51391],{"class":2040},[28,57245,39],{"class":34},[28,57247,51396],{"class":320},[28,57249,51382],{"class":34},[28,57251,57252],{"class":30,"line":109},[28,57253,2477],{"emptyLinePlaceholder":144},[28,57255,57256,57258,57260],{"class":30,"line":125},[28,57257,99],{"class":34},[28,57259,51409],{"class":51375},[28,57261,51382],{"class":34},[28,57263,57264,57266,57268,57270,57272,57274],{"class":30,"line":131},[28,57265,52219],{"class":34},[28,57267,51419],{"class":51375},[28,57269,51422],{"class":2040},[28,57271,39],{"class":34},[28,57273,51427],{"class":320},[28,57275,51382],{"class":34},[28,57277,57278,57280,57282,57284,57286,57288,57290,57292,57294],{"class":30,"line":1291},[28,57279,52219],{"class":34},[28,57281,51419],{"class":51375},[28,57283,14997],{"class":2040},[28,57285,39],{"class":34},[28,57287,51466],{"class":320},[28,57289,51446],{"class":2040},[28,57291,39],{"class":34},[28,57293,51473],{"class":320},[28,57295,51382],{"class":34},[28,57297,57298,57300,57302,57304,57306],{"class":30,"line":1297},[28,57299,52219],{"class":34},[28,57301,51482],{"class":51375},[28,57303,51485],{"class":34},[28,57305,51482],{"class":51375},[28,57307,51382],{"class":34},[28,57309,57310,57312,57314],{"class":30,"line":1388},[28,57311,52219],{"class":34},[28,57313,136],{"class":51375},[28,57315,51382],{"class":34},[28,57317,57318,57320],{"class":30,"line":1394},[28,57319,6480],{"class":51375},[28,57321,15649],{"class":34},[28,57323,57324,57326,57328,57330],{"class":30,"line":1406},[28,57325,54781],{"class":45},[28,57327,51512],{"class":34},[28,57329,407],{"class":45},[28,57331,1367],{"class":34},[28,57333,57334,57336,57338,57340],{"class":30,"line":1689},[28,57335,54770],{"class":45},[28,57337,51512],{"class":34},[28,57339,407],{"class":45},[28,57341,1367],{"class":34},[28,57343,57344],{"class":30,"line":1694},[28,57345,2264],{"class":34},[28,57347,57348],{"class":30,"line":1700},[28,57349,2477],{"emptyLinePlaceholder":144},[28,57351,57352,57355],{"class":30,"line":1705},[28,57353,57354],{"class":51375},"    h2",[28,57356,15649],{"class":34},[28,57358,57359,57362,57364,57366],{"class":30,"line":1719},[28,57360,57361],{"class":45},"      text-align",[28,57363,51512],{"class":34},[28,57365,51667],{"class":45},[28,57367,1367],{"class":34},[28,57369,57370],{"class":30,"line":1724},[28,57371,2264],{"class":34},[28,57373,57374],{"class":30,"line":1730},[28,57375,2477],{"emptyLinePlaceholder":144},[28,57377,57378,57380],{"class":30,"line":1751},[28,57379,54827],{"class":2040},[28,57381,15649],{"class":34},[28,57383,57384,57386,57388,57390,57392],{"class":30,"line":1756},[28,57385,54846],{"class":45},[28,57387,51512],{"class":34},[28,57389,1616],{"class":45},[28,57391,51567],{"class":38},[28,57393,1367],{"class":34},[28,57395,57396,57398,57400,57402,57404,57406],{"class":30,"line":1770},[28,57397,54781],{"class":45},[28,57399,51512],{"class":34},[28,57401,866],{"class":45},[28,57403,51567],{"class":38},[28,57405,51631],{"class":45},[28,57407,1367],{"class":34},[28,57409,57410,57412,57414,57416],{"class":30,"line":1775},[28,57411,55084],{"class":45},[28,57413,51512],{"class":34},[28,57415,51552],{"class":45},[28,57417,1367],{"class":34},[28,57419,57420,57422,57424,57426,57428],{"class":30,"line":1804},[28,57421,54997],{"class":45},[28,57423,51512],{"class":34},[28,57425,1031],{"class":45},[28,57427,51567],{"class":38},[28,57429,1367],{"class":34},[28,57431,57432,57435,57437,57439,57441],{"class":30,"line":1809},[28,57433,57434],{"class":45},"      line-height",[28,57436,51512],{"class":34},[28,57438,614],{"class":45},[28,57440,51567],{"class":38},[28,57442,1367],{"class":34},[28,57444,57445],{"class":30,"line":1826},[28,57446,2264],{"class":34},[28,57448,57449],{"class":30,"line":1831},[28,57450,2477],{"emptyLinePlaceholder":144},[28,57452,57453,57456],{"class":30,"line":1836},[28,57454,57455],{"class":2040},"    .qs",[28,57457,15649],{"class":34},[28,57459,57460],{"class":30,"line":1841},[28,57461,2477],{"emptyLinePlaceholder":144},[28,57463,57464,57466,57468,57471,57473],{"class":30,"line":1855},[28,57465,54846],{"class":45},[28,57467,51512],{"class":34},[28,57469,57470],{"class":45},"450",[28,57472,51567],{"class":38},[28,57474,1367],{"class":34},[28,57476,57477,57479,57481,57483,57485],{"class":30,"line":1860},[28,57478,54860],{"class":45},[28,57480,51512],{"class":34},[28,57482,614],{"class":45},[28,57484,51567],{"class":38},[28,57486,1367],{"class":34},[28,57488,57489,57492,57494,57497],{"class":30,"line":2654},[28,57490,57491],{"class":45},"      color",[28,57493,51512],{"class":34},[28,57495,57496],{"class":45},"red",[28,57498,1367],{"class":34},[28,57500,57501],{"class":30,"line":2668},[28,57502,2477],{"emptyLinePlaceholder":144},[28,57504,57505],{"class":30,"line":2676},[28,57506,2264],{"class":34},[28,57508,57509],{"class":30,"line":2681},[28,57510,2477],{"emptyLinePlaceholder":144},[28,57512,57513,57516],{"class":30,"line":2687},[28,57514,57515],{"class":2040},"    .btns",[28,57517,15649],{"class":34},[28,57519,57520,57522,57524,57526],{"class":30,"line":2693},[28,57521,57361],{"class":45},[28,57523,51512],{"class":34},[28,57525,51667],{"class":45},[28,57527,1367],{"class":34},[28,57529,57530],{"class":30,"line":2698},[28,57531,2264],{"class":34},[28,57533,57534],{"class":30,"line":8025},[28,57535,2477],{"emptyLinePlaceholder":144},[28,57537,57538,57540,57543],{"class":30,"line":8049},[28,57539,57515],{"class":2040},[28,57541,57542],{"class":51375}," button",[28,57544,15649],{"class":34},[28,57546,57547,57549,57551,57553,57555],{"class":30,"line":8054},[28,57548,54846],{"class":45},[28,57550,51512],{"class":34},[28,57552,1023],{"class":45},[28,57554,51567],{"class":38},[28,57556,1367],{"class":34},[28,57558,57559,57561,57563,57565,57567],{"class":30,"line":8060},[28,57560,54860],{"class":45},[28,57562,51512],{"class":34},[28,57564,487],{"class":45},[28,57566,51567],{"class":38},[28,57568,1367],{"class":34},[28,57570,57571,57573,57575,57577,57580,57582],{"class":30,"line":8087},[28,57572,54781],{"class":45},[28,57574,51512],{"class":34},[28,57576,407],{"class":45},[28,57578,57579],{"class":45}," 50",[28,57581,51567],{"class":38},[28,57583,1367],{"class":34},[28,57585,57586],{"class":30,"line":8092},[28,57587,2264],{"class":34},[28,57589,57590,57592,57594],{"class":30,"line":8098},[28,57591,52492],{"class":34},[28,57593,136],{"class":51375},[28,57595,51382],{"class":34},[28,57597,57598,57600,57602],{"class":30,"line":8110},[28,57599,51860],{"class":34},[28,57601,51409],{"class":51375},[28,57603,51382],{"class":34},[28,57605,57606],{"class":30,"line":8122},[28,57607,2477],{"emptyLinePlaceholder":144},[28,57609,57610,57612,57614],{"class":30,"line":8134},[28,57611,99],{"class":34},[28,57613,51875],{"class":51375},[28,57615,51382],{"class":34},[28,57617,57618,57620,57622,57625,57627],{"class":30,"line":9793},[28,57619,52219],{"class":34},[28,57621,159],{"class":51375},[28,57623,57624],{"class":34},">随机点名\u003C\u002F",[28,57626,159],{"class":51375},[28,57628,51382],{"class":34},[28,57630,57631,57633,57635,57637,57639,57641],{"class":30,"line":9818},[28,57632,52219],{"class":34},[28,57634,51686],{"class":51375},[28,57636,53561],{"class":2040},[28,57638,39],{"class":34},[28,57640,53566],{"class":320},[28,57642,51382],{"class":34},[28,57644,57645,57647,57649,57652,57654],{"class":30,"line":9841},[28,57646,51416],{"class":34},[28,57648,28],{"class":51375},[28,57650,57651],{"class":34},">名字是：\u003C\u002F",[28,57653,28],{"class":51375},[28,57655,51382],{"class":34},[28,57657,57658,57660,57662,57664,57666,57669,57672,57674],{"class":30,"line":9865},[28,57659,51416],{"class":34},[28,57661,51686],{"class":51375},[28,57663,53561],{"class":2040},[28,57665,39],{"class":34},[28,57667,57668],{"class":320},"\"qs\"",[28,57670,57671],{"class":34},">这里显示姓名\u003C\u002F",[28,57673,51686],{"class":51375},[28,57675,51382],{"class":34},[28,57677,57678,57680,57682],{"class":30,"line":9870},[28,57679,52492],{"class":34},[28,57681,51686],{"class":51375},[28,57683,51382],{"class":34},[28,57685,57686,57688,57690,57692,57694,57697],{"class":30,"line":9875},[28,57687,52219],{"class":34},[28,57689,51686],{"class":51375},[28,57691,53561],{"class":2040},[28,57693,39],{"class":34},[28,57695,57696],{"class":320},"\"btns\"",[28,57698,51382],{"class":34},[28,57700,57701,57703,57705,57707,57709,57712,57715,57717],{"class":30,"line":9880},[28,57702,51416],{"class":34},[28,57704,53962],{"class":51375},[28,57706,53561],{"class":2040},[28,57708,39],{"class":34},[28,57710,57711],{"class":320},"\"start\"",[28,57713,57714],{"class":34},">开始\u003C\u002F",[28,57716,53962],{"class":51375},[28,57718,51382],{"class":34},[28,57720,57721,57723,57725,57727,57729,57732,57735,57737],{"class":30,"line":9889},[28,57722,51416],{"class":34},[28,57724,53962],{"class":51375},[28,57726,53561],{"class":2040},[28,57728,39],{"class":34},[28,57730,57731],{"class":320},"\"end\"",[28,57733,57734],{"class":34},">结束\u003C\u002F",[28,57736,53962],{"class":51375},[28,57738,51382],{"class":34},[28,57740,57741,57743,57745],{"class":30,"line":9894},[28,57742,52492],{"class":34},[28,57744,51686],{"class":51375},[28,57746,51382],{"class":34},[28,57748,57749],{"class":30,"line":9900},[28,57750,2477],{"emptyLinePlaceholder":144},[28,57752,57753,57755,57757],{"class":30,"line":9921},[28,57754,52219],{"class":34},[28,57756,51888],{"class":51375},[28,57758,51382],{"class":34},[28,57760,57761],{"class":30,"line":9927},[28,57762,57763],{"class":105},"    \u002F\u002F 数据数组\n",[28,57765,57766,57768,57771,57773,57775,57778,57780,57783,57785,57788,57790,57793,57795,57798],{"class":30,"line":9941},[28,57767,11298],{"class":38},[28,57769,57770],{"class":45}," arr",[28,57772,13641],{"class":38},[28,57774,52301],{"class":34},[28,57776,57777],{"class":320},"'马超'",[28,57779,12512],{"class":34},[28,57781,57782],{"class":320},"'黄忠'",[28,57784,12512],{"class":34},[28,57786,57787],{"class":320},"'赵云'",[28,57789,12512],{"class":34},[28,57791,57792],{"class":320},"'关羽'",[28,57794,12512],{"class":34},[28,57796,57797],{"class":320},"'张飞'",[28,57799,33322],{"class":34},[28,57801,57802,57804,57807,57809,57811,57813,57815,57818],{"class":30,"line":9947},[28,57803,11298],{"class":38},[28,57805,57806],{"class":45}," qs",[28,57808,13641],{"class":38},[28,57810,54471],{"class":34},[28,57812,54474],{"class":2040},[28,57814,221],{"class":34},[28,57816,57817],{"class":320},"'.qs'",[28,57819,227],{"class":34},[28,57821,57822],{"class":30,"line":9974},[28,57823,57824],{"class":105},"    \u002F\u002F 1.业务1.开始按钮模块\n",[28,57826,57827,57829,57831,57833,57835,57837,57839,57842],{"class":30,"line":9983},[28,57828,11298],{"class":38},[28,57830,4261],{"class":45},[28,57832,13641],{"class":38},[28,57834,54471],{"class":34},[28,57836,54474],{"class":2040},[28,57838,221],{"class":34},[28,57840,57841],{"class":320},"'.start'",[28,57843,227],{"class":34},[28,57845,57846],{"class":30,"line":9989},[28,57847,57848],{"class":105},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[28,57850,57851,57853,57856,57858],{"class":30,"line":9997},[28,57852,52294],{"class":38},[28,57854,57855],{"class":34}," timerId ",[28,57857,39],{"class":38},[28,57859,47409],{"class":45},[28,57861,57862],{"class":30,"line":10002},[28,57863,57864],{"class":105},"    \u002F\u002F 随机号要全局变量\n",[28,57866,57867,57869,57872,57874],{"class":30,"line":16681},[28,57868,52294],{"class":38},[28,57870,57871],{"class":34}," random ",[28,57873,39],{"class":38},[28,57875,47409],{"class":45},[28,57877,57878],{"class":30,"line":16687},[28,57879,57880],{"class":105},"    \u002F\u002F 1.1 添加点击事件\n",[28,57882,57883,57886,57889,57891,57894,57896,57898],{"class":30,"line":16710},[28,57884,57885],{"class":34},"    start.",[28,57887,57888],{"class":2040},"addEventListener",[28,57890,221],{"class":34},[28,57892,57893],{"class":320},"'click'",[28,57895,12512],{"class":34},[28,57897,54524],{"class":38},[28,57899,54527],{"class":34},[28,57901,57902,57905,57907,57909,57911,57913],{"class":30,"line":16716},[28,57903,57904],{"class":34},"      timerId ",[28,57906,39],{"class":38},[28,57908,54519],{"class":2040},[28,57910,221],{"class":34},[28,57912,54524],{"class":38},[28,57914,54527],{"class":34},[28,57916,57917],{"class":30,"line":16739},[28,57918,57919],{"class":105},"        \u002F\u002F 随机数\n",[28,57921,57922,57925,57927,57930,57933,57936,57938,57940,57942,57944],{"class":30,"line":16753},[28,57923,57924],{"class":34},"        random ",[28,57926,39],{"class":38},[28,57928,57929],{"class":2040}," parseInt",[28,57931,57932],{"class":34},"(Math.",[28,57934,57935],{"class":2040},"random",[28,57937,13127],{"class":34},[28,57939,668],{"class":38},[28,57941,52040],{"class":34},[28,57943,52043],{"class":45},[28,57945,227],{"class":34},[28,57947,57948,57951,57953],{"class":30,"line":16773},[28,57949,57950],{"class":34},"        qs.innerHTML ",[28,57952,39],{"class":38},[28,57954,57955],{"class":34}," arr[random]\n",[28,57957,57958,57961,57963],{"class":30,"line":16779},[28,57959,57960],{"class":34},"      }, ",[28,57962,487],{"class":45},[28,57964,227],{"class":34},[28,57966,57967],{"class":30,"line":16790},[28,57968,57969],{"class":105},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[28,57971,57972,57974,57977,57979,57982,57984],{"class":30,"line":16813},[28,57973,54555],{"class":38},[28,57975,57976],{"class":34}," (arr.",[28,57978,52043],{"class":45},[28,57980,57981],{"class":38}," ===",[28,57983,25196],{"class":45},[28,57985,12519],{"class":34},[28,57987,57988],{"class":30,"line":16835},[28,57989,57990],{"class":105},"        \u002F\u002F start.disabled = true\n",[28,57992,57993],{"class":30,"line":16840},[28,57994,57995],{"class":105},"        \u002F\u002F end.disabled = true\n",[28,57997,57998],{"class":30,"line":16846},[28,57999,58000],{"class":105},"        \u002F\u002F 可以合起来写\n",[28,58002,58003,58006,58008,58011,58013],{"class":30,"line":16860},[28,58004,58005],{"class":34},"        start.disabled ",[28,58007,39],{"class":38},[28,58009,58010],{"class":34}," end.disabled ",[28,58012,39],{"class":38},[28,58014,58015],{"class":45}," true\n",[28,58017,58018],{"class":30,"line":16873},[28,58019,52473],{"class":34},[28,58021,58022],{"class":30,"line":16878},[28,58023,33537],{"class":34},[28,58025,58026],{"class":30,"line":16892},[28,58027,58028],{"class":105},"    \u002F\u002F 1.2 关闭按钮模块\n",[28,58030,58031,58033,58035,58037,58039,58041,58043,58046],{"class":30,"line":16897},[28,58032,11298],{"class":38},[28,58034,4277],{"class":45},[28,58036,13641],{"class":38},[28,58038,54471],{"class":34},[28,58040,54474],{"class":2040},[28,58042,221],{"class":34},[28,58044,58045],{"class":320},"'.end'",[28,58047,227],{"class":34},[28,58049,58050,58053,58055,58057,58059,58061,58063],{"class":30,"line":16903},[28,58051,58052],{"class":34},"    end.",[28,58054,57888],{"class":2040},[28,58056,221],{"class":34},[28,58058,57893],{"class":320},[28,58060,12512],{"class":34},[28,58062,54524],{"class":38},[28,58064,54527],{"class":34},[28,58066,58067,58070],{"class":30,"line":16908},[28,58068,58069],{"class":2040},"      clearInterval",[28,58071,58072],{"class":34},"(timerId)\n",[28,58074,58075],{"class":30,"line":16922},[28,58076,58077],{"class":105},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[28,58079,58080,58083,58086,58089,58091],{"class":30,"line":16927},[28,58081,58082],{"class":34},"      arr.",[28,58084,58085],{"class":2040},"splice",[28,58087,58088],{"class":34},"(random, ",[28,58090,46],{"class":45},[28,58092,227],{"class":34},[28,58094,58095],{"class":30,"line":16932},[28,58096,33537],{"class":34},[28,58098,58099],{"class":30,"line":16946},[28,58100,2477],{"emptyLinePlaceholder":144},[28,58102,58103,58105,58107],{"class":30,"line":16958},[28,58104,52492],{"class":34},[28,58106,51888],{"class":51375},[28,58108,51382],{"class":34},[28,58110,58111,58113,58115],{"class":30,"line":16963},[28,58112,51860],{"class":34},[28,58114,51875],{"class":51375},[28,58116,51382],{"class":34},[28,58118,58119],{"class":30,"line":16976},[28,58120,2477],{"emptyLinePlaceholder":144},[28,58122,58123,58125,58127],{"class":30,"line":16981},[28,58124,51860],{"class":34},[28,58126,50710],{"class":51375},[28,58128,51382],{"class":34},[14,58130,58131],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[188,58133,58135],{"id":58134},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[18,58137,58139],{"className":50708,"code":58138,"language":50710,"meta":23,"style":23},"\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",[25,58140,58141,58151,58165,58169,58177,58191,58211,58223,58231,58235,58243,58255,58263,58282,58299,58315,58325,58329,58337,58345,58349],{"__ignoreMap":23},[28,58142,58143,58145,58147,58149],{"class":30,"line":31},[28,58144,51372],{"class":34},[28,58146,51376],{"class":51375},[28,58148,51379],{"class":2040},[28,58150,51382],{"class":34},[28,58152,58153,58155,58157,58159,58161,58163],{"class":30,"line":94},[28,58154,99],{"class":34},[28,58156,50710],{"class":51375},[28,58158,51391],{"class":2040},[28,58160,39],{"class":34},[28,58162,51396],{"class":320},[28,58164,51382],{"class":34},[28,58166,58167],{"class":30,"line":109},[28,58168,2477],{"emptyLinePlaceholder":144},[28,58170,58171,58173,58175],{"class":30,"line":125},[28,58172,99],{"class":34},[28,58174,51409],{"class":51375},[28,58176,51382],{"class":34},[28,58178,58179,58181,58183,58185,58187,58189],{"class":30,"line":131},[28,58180,52219],{"class":34},[28,58182,51419],{"class":51375},[28,58184,51422],{"class":2040},[28,58186,39],{"class":34},[28,58188,51427],{"class":320},[28,58190,51382],{"class":34},[28,58192,58193,58195,58197,58199,58201,58203,58205,58207,58209],{"class":30,"line":1291},[28,58194,52219],{"class":34},[28,58196,51419],{"class":51375},[28,58198,14997],{"class":2040},[28,58200,39],{"class":34},[28,58202,51466],{"class":320},[28,58204,51446],{"class":2040},[28,58206,39],{"class":34},[28,58208,51473],{"class":320},[28,58210,51382],{"class":34},[28,58212,58213,58215,58217,58219,58221],{"class":30,"line":1297},[28,58214,52219],{"class":34},[28,58216,51482],{"class":51375},[28,58218,51485],{"class":34},[28,58220,51482],{"class":51375},[28,58222,51382],{"class":34},[28,58224,58225,58227,58229],{"class":30,"line":1388},[28,58226,51860],{"class":34},[28,58228,51409],{"class":51375},[28,58230,51382],{"class":34},[28,58232,58233],{"class":30,"line":1394},[28,58234,2477],{"emptyLinePlaceholder":144},[28,58236,58237,58239,58241],{"class":30,"line":1406},[28,58238,99],{"class":34},[28,58240,51875],{"class":51375},[28,58242,51382],{"class":34},[28,58244,58245,58247,58249,58251,58253],{"class":30,"line":1689},[28,58246,52219],{"class":34},[28,58248,53962],{"class":51375},[28,58250,53968],{"class":34},[28,58252,53962],{"class":51375},[28,58254,51382],{"class":34},[28,58256,58257,58259,58261],{"class":30,"line":1694},[28,58258,52219],{"class":34},[28,58260,51888],{"class":51375},[28,58262,51382],{"class":34},[28,58264,58265,58267,58269,58271,58273,58275,58277,58280],{"class":30,"line":1700},[28,58266,11298],{"class":38},[28,58268,54466],{"class":45},[28,58270,13641],{"class":38},[28,58272,54471],{"class":34},[28,58274,54474],{"class":2040},[28,58276,221],{"class":34},[28,58278,58279],{"class":320},"'button'",[28,58281,227],{"class":34},[28,58283,58284,58287,58289,58291,58293,58295,58297],{"class":30,"line":1705},[28,58285,58286],{"class":34},"    btn.",[28,58288,57888],{"class":2040},[28,58290,221],{"class":34},[28,58292,57893],{"class":320},[28,58294,12512],{"class":34},[28,58296,54524],{"class":38},[28,58298,54527],{"class":34},[28,58300,58301,58304,58306,58308,58311,58313],{"class":30,"line":1719},[28,58302,58303],{"class":38},"      const",[28,58305,2317],{"class":45},[28,58307,13641],{"class":38},[28,58309,58310],{"class":34}," Math.",[28,58312,57935],{"class":2040},[28,58314,2053],{"class":34},[28,58316,58317,58320,58323],{"class":30,"line":1724},[28,58318,58319],{"class":34},"      console.",[28,58321,58322],{"class":2040},"log",[28,58324,234],{"class":34},[28,58326,58327],{"class":30,"line":1730},[28,58328,33537],{"class":34},[28,58330,58331,58333,58335],{"class":30,"line":1751},[28,58332,52492],{"class":34},[28,58334,51888],{"class":51375},[28,58336,51382],{"class":34},[28,58338,58339,58341,58343],{"class":30,"line":1756},[28,58340,51860],{"class":34},[28,58342,51875],{"class":51375},[28,58344,51382],{"class":34},[28,58346,58347],{"class":30,"line":1770},[28,58348,2477],{"emptyLinePlaceholder":144},[28,58350,58351,58353,58355],{"class":30,"line":1775},[28,58352,51860],{"class":34},[28,58354,50710],{"class":51375},[28,58356,51382],{"class":34},[14,58358,58359],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58361,58362],{},"常量不可以重新赋值",[14,58364,58365],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[18,58367,58369],{"className":50708,"code":58368,"language":50710,"meta":23,"style":23},"\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",[25,58370,58371,58381,58395,58399,58407,58421,58441,58453,58461,58465,58473,58485,58493,58504,58522,58538,58552,58560,58564,58572,58580,58584],{"__ignoreMap":23},[28,58372,58373,58375,58377,58379],{"class":30,"line":31},[28,58374,51372],{"class":34},[28,58376,51376],{"class":51375},[28,58378,51379],{"class":2040},[28,58380,51382],{"class":34},[28,58382,58383,58385,58387,58389,58391,58393],{"class":30,"line":94},[28,58384,99],{"class":34},[28,58386,50710],{"class":51375},[28,58388,51391],{"class":2040},[28,58390,39],{"class":34},[28,58392,51396],{"class":320},[28,58394,51382],{"class":34},[28,58396,58397],{"class":30,"line":109},[28,58398,2477],{"emptyLinePlaceholder":144},[28,58400,58401,58403,58405],{"class":30,"line":125},[28,58402,99],{"class":34},[28,58404,51409],{"class":51375},[28,58406,51382],{"class":34},[28,58408,58409,58411,58413,58415,58417,58419],{"class":30,"line":131},[28,58410,52219],{"class":34},[28,58412,51419],{"class":51375},[28,58414,51422],{"class":2040},[28,58416,39],{"class":34},[28,58418,51427],{"class":320},[28,58420,51382],{"class":34},[28,58422,58423,58425,58427,58429,58431,58433,58435,58437,58439],{"class":30,"line":1291},[28,58424,52219],{"class":34},[28,58426,51419],{"class":51375},[28,58428,14997],{"class":2040},[28,58430,39],{"class":34},[28,58432,51466],{"class":320},[28,58434,51446],{"class":2040},[28,58436,39],{"class":34},[28,58438,51473],{"class":320},[28,58440,51382],{"class":34},[28,58442,58443,58445,58447,58449,58451],{"class":30,"line":1297},[28,58444,52219],{"class":34},[28,58446,51482],{"class":51375},[28,58448,51485],{"class":34},[28,58450,51482],{"class":51375},[28,58452,51382],{"class":34},[28,58454,58455,58457,58459],{"class":30,"line":1388},[28,58456,51860],{"class":34},[28,58458,51409],{"class":51375},[28,58460,51382],{"class":34},[28,58462,58463],{"class":30,"line":1394},[28,58464,2477],{"emptyLinePlaceholder":144},[28,58466,58467,58469,58471],{"class":30,"line":1406},[28,58468,99],{"class":34},[28,58470,51875],{"class":51375},[28,58472,51382],{"class":34},[28,58474,58475,58477,58479,58481,58483],{"class":30,"line":1689},[28,58476,52219],{"class":34},[28,58478,53962],{"class":51375},[28,58480,53968],{"class":34},[28,58482,53962],{"class":51375},[28,58484,51382],{"class":34},[28,58486,58487,58489,58491],{"class":30,"line":1694},[28,58488,52219],{"class":34},[28,58490,51888],{"class":51375},[28,58492,51382],{"class":34},[28,58494,58495,58497,58499,58501],{"class":30,"line":1700},[28,58496,11298],{"class":38},[28,58498,2317],{"class":45},[28,58500,13641],{"class":38},[28,58502,58503],{"class":45}," 10\n",[28,58505,58506,58508,58510,58512,58514,58516,58518,58520],{"class":30,"line":1705},[28,58507,11298],{"class":38},[28,58509,54466],{"class":45},[28,58511,13641],{"class":38},[28,58513,54471],{"class":34},[28,58515,54474],{"class":2040},[28,58517,221],{"class":34},[28,58519,58279],{"class":320},[28,58521,227],{"class":34},[28,58523,58524,58526,58528,58530,58532,58534,58536],{"class":30,"line":1719},[28,58525,58286],{"class":34},[28,58527,57888],{"class":2040},[28,58529,221],{"class":34},[28,58531,57893],{"class":320},[28,58533,12512],{"class":34},[28,58535,54524],{"class":38},[28,58537,54527],{"class":34},[28,58539,58540,58542,58544,58546,58548,58550],{"class":30,"line":1724},[28,58541,58303],{"class":38},[28,58543,2317],{"class":45},[28,58545,13641],{"class":38},[28,58547,58310],{"class":34},[28,58549,57935],{"class":2040},[28,58551,2053],{"class":34},[28,58553,58554,58556,58558],{"class":30,"line":1730},[28,58555,58319],{"class":34},[28,58557,58322],{"class":2040},[28,58559,234],{"class":34},[28,58561,58562],{"class":30,"line":1751},[28,58563,33537],{"class":34},[28,58565,58566,58568,58570],{"class":30,"line":1756},[28,58567,52492],{"class":34},[28,58569,51888],{"class":51375},[28,58571,51382],{"class":34},[28,58573,58574,58576,58578],{"class":30,"line":1770},[28,58575,51860],{"class":34},[28,58577,51875],{"class":51375},[28,58579,51382],{"class":34},[28,58581,58582],{"class":30,"line":1775},[28,58583,2477],{"emptyLinePlaceholder":144},[28,58585,58586,58588,58590],{"class":30,"line":1804},[28,58587,51860],{"class":34},[28,58589,50710],{"class":51375},[28,58591,51382],{"class":34},[14,58593,58594],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[18,58596,58598],{"className":50708,"code":58597,"language":50710,"meta":23,"style":23},"\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",[25,58599,58600,58610,58624,58628,58636,58650,58670,58682,58690,58694,58702,58714,58722,58732,58750,58766,58779,58787,58791,58799,58807,58811],{"__ignoreMap":23},[28,58601,58602,58604,58606,58608],{"class":30,"line":31},[28,58603,51372],{"class":34},[28,58605,51376],{"class":51375},[28,58607,51379],{"class":2040},[28,58609,51382],{"class":34},[28,58611,58612,58614,58616,58618,58620,58622],{"class":30,"line":94},[28,58613,99],{"class":34},[28,58615,50710],{"class":51375},[28,58617,51391],{"class":2040},[28,58619,39],{"class":34},[28,58621,51396],{"class":320},[28,58623,51382],{"class":34},[28,58625,58626],{"class":30,"line":109},[28,58627,2477],{"emptyLinePlaceholder":144},[28,58629,58630,58632,58634],{"class":30,"line":125},[28,58631,99],{"class":34},[28,58633,51409],{"class":51375},[28,58635,51382],{"class":34},[28,58637,58638,58640,58642,58644,58646,58648],{"class":30,"line":131},[28,58639,52219],{"class":34},[28,58641,51419],{"class":51375},[28,58643,51422],{"class":2040},[28,58645,39],{"class":34},[28,58647,51427],{"class":320},[28,58649,51382],{"class":34},[28,58651,58652,58654,58656,58658,58660,58662,58664,58666,58668],{"class":30,"line":1291},[28,58653,52219],{"class":34},[28,58655,51419],{"class":51375},[28,58657,14997],{"class":2040},[28,58659,39],{"class":34},[28,58661,51466],{"class":320},[28,58663,51446],{"class":2040},[28,58665,39],{"class":34},[28,58667,51473],{"class":320},[28,58669,51382],{"class":34},[28,58671,58672,58674,58676,58678,58680],{"class":30,"line":1297},[28,58673,52219],{"class":34},[28,58675,51482],{"class":51375},[28,58677,51485],{"class":34},[28,58679,51482],{"class":51375},[28,58681,51382],{"class":34},[28,58683,58684,58686,58688],{"class":30,"line":1388},[28,58685,51860],{"class":34},[28,58687,51409],{"class":51375},[28,58689,51382],{"class":34},[28,58691,58692],{"class":30,"line":1394},[28,58693,2477],{"emptyLinePlaceholder":144},[28,58695,58696,58698,58700],{"class":30,"line":1406},[28,58697,99],{"class":34},[28,58699,51875],{"class":51375},[28,58701,51382],{"class":34},[28,58703,58704,58706,58708,58710,58712],{"class":30,"line":1689},[28,58705,52219],{"class":34},[28,58707,53962],{"class":51375},[28,58709,53968],{"class":34},[28,58711,53962],{"class":51375},[28,58713,51382],{"class":34},[28,58715,58716,58718,58720],{"class":30,"line":1694},[28,58717,52219],{"class":34},[28,58719,51888],{"class":51375},[28,58721,51382],{"class":34},[28,58723,58724,58726,58728,58730],{"class":30,"line":1700},[28,58725,11298],{"class":38},[28,58727,2317],{"class":45},[28,58729,13641],{"class":38},[28,58731,58503],{"class":45},[28,58733,58734,58736,58738,58740,58742,58744,58746,58748],{"class":30,"line":1705},[28,58735,11298],{"class":38},[28,58737,54466],{"class":45},[28,58739,13641],{"class":38},[28,58741,54471],{"class":34},[28,58743,54474],{"class":2040},[28,58745,221],{"class":34},[28,58747,58279],{"class":320},[28,58749,227],{"class":34},[28,58751,58752,58754,58756,58758,58760,58762,58764],{"class":30,"line":1719},[28,58753,58286],{"class":34},[28,58755,57888],{"class":2040},[28,58757,221],{"class":34},[28,58759,57893],{"class":320},[28,58761,12512],{"class":34},[28,58763,54524],{"class":38},[28,58765,54527],{"class":34},[28,58767,58768,58771,58773,58775,58777],{"class":30,"line":1724},[28,58769,58770],{"class":34},"      num ",[28,58772,39],{"class":38},[28,58774,58310],{"class":34},[28,58776,57935],{"class":2040},[28,58778,2053],{"class":34},[28,58780,58781,58783,58785],{"class":30,"line":1730},[28,58782,58319],{"class":34},[28,58784,58322],{"class":2040},[28,58786,234],{"class":34},[28,58788,58789],{"class":30,"line":1751},[28,58790,33537],{"class":34},[28,58792,58793,58795,58797],{"class":30,"line":1756},[28,58794,52492],{"class":34},[28,58796,51888],{"class":51375},[28,58798,51382],{"class":34},[28,58800,58801,58803,58805],{"class":30,"line":1770},[28,58802,51860],{"class":34},[28,58804,51875],{"class":51375},[28,58806,51382],{"class":34},[28,58808,58809],{"class":30,"line":1775},[28,58810,2477],{"emptyLinePlaceholder":144},[28,58812,58813,58815,58817],{"class":30,"line":1804},[28,58814,51860],{"class":34},[28,58816,50710],{"class":51375},[28,58818,51382],{"class":34},[14,58820,58821],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[188,58823,58825],{"id":58824},"_324-事件监听版本","3.2.4 事件监听版本",[14,58827,58828],{},[1539,58829],{"alt":23,"src":58830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58832,58833],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58835,58836],{},"这种方式会覆盖前边的事件监听:",[18,58838,58840],{"className":50708,"code":58839,"language":50710,"meta":23,"style":23},"\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",[25,58841,58842,58852,58866,58870,58878,58892,58912,58924,58932,58936,58944,58956,58964,58982,58996,59007,59011,59023,59033,59037,59045,59053,59057],{"__ignoreMap":23},[28,58843,58844,58846,58848,58850],{"class":30,"line":31},[28,58845,51372],{"class":34},[28,58847,51376],{"class":51375},[28,58849,51379],{"class":2040},[28,58851,51382],{"class":34},[28,58853,58854,58856,58858,58860,58862,58864],{"class":30,"line":94},[28,58855,99],{"class":34},[28,58857,50710],{"class":51375},[28,58859,51391],{"class":2040},[28,58861,39],{"class":34},[28,58863,51396],{"class":320},[28,58865,51382],{"class":34},[28,58867,58868],{"class":30,"line":109},[28,58869,2477],{"emptyLinePlaceholder":144},[28,58871,58872,58874,58876],{"class":30,"line":125},[28,58873,99],{"class":34},[28,58875,51409],{"class":51375},[28,58877,51382],{"class":34},[28,58879,58880,58882,58884,58886,58888,58890],{"class":30,"line":131},[28,58881,52219],{"class":34},[28,58883,51419],{"class":51375},[28,58885,51422],{"class":2040},[28,58887,39],{"class":34},[28,58889,51427],{"class":320},[28,58891,51382],{"class":34},[28,58893,58894,58896,58898,58900,58902,58904,58906,58908,58910],{"class":30,"line":1291},[28,58895,52219],{"class":34},[28,58897,51419],{"class":51375},[28,58899,14997],{"class":2040},[28,58901,39],{"class":34},[28,58903,51466],{"class":320},[28,58905,51446],{"class":2040},[28,58907,39],{"class":34},[28,58909,51473],{"class":320},[28,58911,51382],{"class":34},[28,58913,58914,58916,58918,58920,58922],{"class":30,"line":1297},[28,58915,52219],{"class":34},[28,58917,51482],{"class":51375},[28,58919,51485],{"class":34},[28,58921,51482],{"class":51375},[28,58923,51382],{"class":34},[28,58925,58926,58928,58930],{"class":30,"line":1388},[28,58927,51860],{"class":34},[28,58929,51409],{"class":51375},[28,58931,51382],{"class":34},[28,58933,58934],{"class":30,"line":1394},[28,58935,2477],{"emptyLinePlaceholder":144},[28,58937,58938,58940,58942],{"class":30,"line":1406},[28,58939,99],{"class":34},[28,58941,51875],{"class":51375},[28,58943,51382],{"class":34},[28,58945,58946,58948,58950,58952,58954],{"class":30,"line":1689},[28,58947,52219],{"class":34},[28,58949,53962],{"class":51375},[28,58951,53968],{"class":34},[28,58953,53962],{"class":51375},[28,58955,51382],{"class":34},[28,58957,58958,58960,58962],{"class":30,"line":1694},[28,58959,52219],{"class":34},[28,58961,51888],{"class":51375},[28,58963,51382],{"class":34},[28,58965,58966,58968,58970,58972,58974,58976,58978,58980],{"class":30,"line":1700},[28,58967,11298],{"class":38},[28,58969,54466],{"class":45},[28,58971,13641],{"class":38},[28,58973,54471],{"class":34},[28,58975,54474],{"class":2040},[28,58977,221],{"class":34},[28,58979,58279],{"class":320},[28,58981,227],{"class":34},[28,58983,58984,58986,58989,58991,58994],{"class":30,"line":1705},[28,58985,58286],{"class":34},[28,58987,58988],{"class":2040},"onclick",[28,58990,13641],{"class":38},[28,58992,58993],{"class":38}," function",[28,58995,54527],{"class":34},[28,58997,58998,59001,59003,59005],{"class":30,"line":1719},[28,58999,59000],{"class":2040},"      alert",[28,59002,221],{"class":34},[28,59004,63],{"class":45},[28,59006,227],{"class":34},[28,59008,59009],{"class":30,"line":1724},[28,59010,2264],{"class":34},[28,59012,59013,59015,59017,59019,59021],{"class":30,"line":1730},[28,59014,58286],{"class":34},[28,59016,58988],{"class":2040},[28,59018,13641],{"class":38},[28,59020,58993],{"class":38},[28,59022,54527],{"class":34},[28,59024,59025,59027,59029,59031],{"class":30,"line":1751},[28,59026,59000],{"class":2040},[28,59028,221],{"class":34},[28,59030,83],{"class":45},[28,59032,227],{"class":34},[28,59034,59035],{"class":30,"line":1756},[28,59036,2264],{"class":34},[28,59038,59039,59041,59043],{"class":30,"line":1770},[28,59040,52492],{"class":34},[28,59042,51888],{"class":51375},[28,59044,51382],{"class":34},[28,59046,59047,59049,59051],{"class":30,"line":1775},[28,59048,51860],{"class":34},[28,59050,51875],{"class":51375},[28,59052,51382],{"class":34},[28,59054,59055],{"class":30,"line":1804},[28,59056,2477],{"emptyLinePlaceholder":144},[28,59058,59059,59061,59063],{"class":30,"line":1809},[28,59060,51860],{"class":34},[28,59062,50710],{"class":51375},[28,59064,51382],{"class":34},[14,59066,59067],{},"只要点击就输出结果为22,前边11被覆盖了",[18,59069,59071],{"className":50708,"code":59070,"language":50710,"meta":23,"style":23},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[25,59072,59073,59078,59083,59087,59092,59097],{"__ignoreMap":23},[28,59074,59075],{"class":30,"line":31},[28,59076,59077],{"class":34},"  btn.addEventListener('click', function () {\n",[28,59079,59080],{"class":30,"line":94},[28,59081,59082],{"class":34},"      alert(11)\n",[28,59084,59085],{"class":30,"line":109},[28,59086,33537],{"class":34},[28,59088,59089],{"class":30,"line":125},[28,59090,59091],{"class":34},"    btn.addEventListener('click', function () {\n",[28,59093,59094],{"class":30,"line":131},[28,59095,59096],{"class":34},"      alert(22)\n",[28,59098,59099],{"class":30,"line":1291},[28,59100,33537],{"class":34},[14,59102,59103],{},"点击第一次输出11,第二次点击为22",[188,59105,59107],{"id":59106},"_325-事件类型","3.2.5 事件类型",[14,59109,59110],{},[1539,59111],{"alt":23,"src":59112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22075,59114,59116],{"id":59115},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59118,59119],{},"补充知识:",[14,59121,59122],{},"轮播图自动播放模块,可以使用",[14,59124,59125],{},"let timerId = setInterval(function () {",[14,59127,59128],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59130,59131],{},"用js方法模拟进行点击事件,click必须加()",[14,59133,59134],{},"next.click()",[14,59136,59137],{},"}, 1000)",[14,59139,59140],{},[1539,59141],{"alt":23,"src":59142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[18,59144,59146],{"className":53142,"code":59145,"language":53144,"meta":23,"style":23},"\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",[25,59147,59148,59152,59162,59176,59180,59188,59203,59223,59243,59256,59264,59269,59274,59278,59282,59287,59292,59297,59302,59306,59310,59315,59320,59325,59329,59333,59338,59342,59347,59352,59356,59360,59365,59370,59375,59380,59385,59389,59393,59398,59403,59408,59413,59418,59422,59426,59431,59436,59441,59446,59451,59456,59461,59466,59471,59476,59480,59484,59489,59494,59498,59502,59507,59512,59516,59521,59526,59530,59534,59539,59543,59548,59553,59557,59562,59566,59570,59575,59580,59585,59590,59595,59600,59605,59609,59613,59617,59622,59627,59632,59637,59641,59649,59657,59661,59669,59684,59698,59719,59727,59741,59754,59769,59788,59800,59812,59824,59836,59848,59860,59872,59880,59895,59919,59943,59951,59959,59967,59975,59980,59985,59990,59995,60000,60005,60010,60015,60020,60025,60029,60034,60039,60044,60049,60054,60059,60064,60069,60074,60078,60083,60088,60093,60098,60103,60108,60113,60118,60123,60128,60133,60138,60142,60146,60151,60156,60161,60165,60170,60175,60180,60185,60190,60194,60199,60203,60207,60211,60215,60219,60223,60228,60233,60238,60243,60248,60253,60258,60263,60268,60272,60276,60281,60286,60291,60296,60301,60305,60310,60315,60320,60325,60330,60335,60339,60343,60348,60352,60357,60361,60366,60371,60376,60381,60386,60391,60395,60403,60411,60415],{"__ignoreMap":23},[28,59149,59150],{"class":30,"line":31},[28,59151,2477],{"emptyLinePlaceholder":144},[28,59153,59154,59156,59158,59160],{"class":30,"line":94},[28,59155,51372],{"class":34},[28,59157,51376],{"class":38},[28,59159,51379],{"class":45},[28,59161,51382],{"class":34},[28,59163,59164,59166,59168,59170,59172,59174],{"class":30,"line":109},[28,59165,99],{"class":34},[28,59167,50710],{"class":51375},[28,59169,51391],{"class":2040},[28,59171,39],{"class":34},[28,59173,51396],{"class":320},[28,59175,51382],{"class":34},[28,59177,59178],{"class":30,"line":125},[28,59179,2477],{"emptyLinePlaceholder":144},[28,59181,59182,59184,59186],{"class":30,"line":131},[28,59183,99],{"class":34},[28,59185,51409],{"class":51375},[28,59187,51382],{"class":34},[28,59189,59190,59192,59194,59196,59198,59200],{"class":30,"line":1291},[28,59191,52219],{"class":34},[28,59193,51419],{"class":51375},[28,59195,51422],{"class":2040},[28,59197,39],{"class":34},[28,59199,51427],{"class":320},[28,59201,59202],{"class":34}," \u002F>\n",[28,59204,59205,59207,59209,59211,59213,59215,59217,59219,59221],{"class":30,"line":1297},[28,59206,52219],{"class":34},[28,59208,51419],{"class":51375},[28,59210,51438],{"class":2040},[28,59212,39],{"class":34},[28,59214,51443],{"class":320},[28,59216,51446],{"class":2040},[28,59218,39],{"class":34},[28,59220,51451],{"class":320},[28,59222,59202],{"class":34},[28,59224,59225,59227,59229,59231,59233,59235,59237,59239,59241],{"class":30,"line":1388},[28,59226,52219],{"class":34},[28,59228,51419],{"class":51375},[28,59230,14997],{"class":2040},[28,59232,39],{"class":34},[28,59234,51466],{"class":320},[28,59236,51446],{"class":2040},[28,59238,39],{"class":34},[28,59240,51473],{"class":320},[28,59242,59202],{"class":34},[28,59244,59245,59247,59249,59252,59254],{"class":30,"line":1394},[28,59246,52219],{"class":34},[28,59248,51482],{"class":51375},[28,59250,59251],{"class":34},">轮播图点击切换\u003C\u002F",[28,59253,51482],{"class":51375},[28,59255,51382],{"class":34},[28,59257,59258,59260,59262],{"class":30,"line":1406},[28,59259,52219],{"class":34},[28,59261,136],{"class":51375},[28,59263,51382],{"class":34},[28,59265,59266],{"class":30,"line":1689},[28,59267,59268],{"class":34},"    * {\n",[28,59270,59271],{"class":30,"line":1694},[28,59272,59273],{"class":34},"      box-sizing: border-box;\n",[28,59275,59276],{"class":30,"line":1700},[28,59277,2264],{"class":34},[28,59279,59280],{"class":30,"line":1705},[28,59281,2477],{"emptyLinePlaceholder":144},[28,59283,59284],{"class":30,"line":1719},[28,59285,59286],{"class":34},"    .slider {\n",[28,59288,59289],{"class":30,"line":1724},[28,59290,59291],{"class":34},"      width: 560px;\n",[28,59293,59294],{"class":30,"line":1730},[28,59295,59296],{"class":34},"      height: 400px;\n",[28,59298,59299],{"class":30,"line":1751},[28,59300,59301],{"class":34},"      overflow: hidden;\n",[28,59303,59304],{"class":30,"line":1756},[28,59305,2264],{"class":34},[28,59307,59308],{"class":30,"line":1770},[28,59309,2477],{"emptyLinePlaceholder":144},[28,59311,59312],{"class":30,"line":1775},[28,59313,59314],{"class":34},"    .slider-wrapper {\n",[28,59316,59317],{"class":30,"line":1804},[28,59318,59319],{"class":34},"      width: 100%;\n",[28,59321,59322],{"class":30,"line":1809},[28,59323,59324],{"class":34},"      height: 320px;\n",[28,59326,59327],{"class":30,"line":1826},[28,59328,2264],{"class":34},[28,59330,59331],{"class":30,"line":1831},[28,59332,2477],{"emptyLinePlaceholder":144},[28,59334,59335],{"class":30,"line":1836},[28,59336,59337],{"class":34},"    .slider-wrapper img {\n",[28,59339,59340],{"class":30,"line":1841},[28,59341,59319],{"class":34},[28,59343,59344],{"class":30,"line":1855},[28,59345,59346],{"class":34},"      height: 100%;\n",[28,59348,59349],{"class":30,"line":1860},[28,59350,59351],{"class":34},"      display: block;\n",[28,59353,59354],{"class":30,"line":2654},[28,59355,2264],{"class":34},[28,59357,59358],{"class":30,"line":2668},[28,59359,2477],{"emptyLinePlaceholder":144},[28,59361,59362],{"class":30,"line":2676},[28,59363,59364],{"class":34},"    .slider-footer {\n",[28,59366,59367],{"class":30,"line":2681},[28,59368,59369],{"class":34},"      height: 80px;\n",[28,59371,59372],{"class":30,"line":2687},[28,59373,59374],{"class":34},"      background-color: rgb(100, 67, 68);\n",[28,59376,59377],{"class":30,"line":2693},[28,59378,59379],{"class":34},"      padding: 12px 12px 0 12px;\n",[28,59381,59382],{"class":30,"line":2698},[28,59383,59384],{"class":34},"      position: relative;\n",[28,59386,59387],{"class":30,"line":8025},[28,59388,2264],{"class":34},[28,59390,59391],{"class":30,"line":8049},[28,59392,2477],{"emptyLinePlaceholder":144},[28,59394,59395],{"class":30,"line":8054},[28,59396,59397],{"class":34},"    .slider-footer .toggle {\n",[28,59399,59400],{"class":30,"line":8060},[28,59401,59402],{"class":34},"      position: absolute;\n",[28,59404,59405],{"class":30,"line":8087},[28,59406,59407],{"class":34},"      right: 0;\n",[28,59409,59410],{"class":30,"line":8092},[28,59411,59412],{"class":34},"      top: 12px;\n",[28,59414,59415],{"class":30,"line":8098},[28,59416,59417],{"class":34},"      display: flex;\n",[28,59419,59420],{"class":30,"line":8110},[28,59421,2264],{"class":34},[28,59423,59424],{"class":30,"line":8122},[28,59425,2477],{"emptyLinePlaceholder":144},[28,59427,59428],{"class":30,"line":8134},[28,59429,59430],{"class":34},"    .slider-footer .toggle button {\n",[28,59432,59433],{"class":30,"line":9793},[28,59434,59435],{"class":34},"      margin-right: 12px;\n",[28,59437,59438],{"class":30,"line":9818},[28,59439,59440],{"class":34},"      width: 28px;\n",[28,59442,59443],{"class":30,"line":9841},[28,59444,59445],{"class":34},"      height: 28px;\n",[28,59447,59448],{"class":30,"line":9865},[28,59449,59450],{"class":34},"      appearance: none;\n",[28,59452,59453],{"class":30,"line":9870},[28,59454,59455],{"class":34},"      border: none;\n",[28,59457,59458],{"class":30,"line":9875},[28,59459,59460],{"class":34},"      background: rgba(255, 255, 255, 0.1);\n",[28,59462,59463],{"class":30,"line":9880},[28,59464,59465],{"class":34},"      color: #fff;\n",[28,59467,59468],{"class":30,"line":9889},[28,59469,59470],{"class":34},"      border-radius: 4px;\n",[28,59472,59473],{"class":30,"line":9894},[28,59474,59475],{"class":34},"      cursor: pointer;\n",[28,59477,59478],{"class":30,"line":9900},[28,59479,2264],{"class":34},[28,59481,59482],{"class":30,"line":9921},[28,59483,2477],{"emptyLinePlaceholder":144},[28,59485,59486],{"class":30,"line":9927},[28,59487,59488],{"class":34},"    .slider-footer .toggle button:hover {\n",[28,59490,59491],{"class":30,"line":9941},[28,59492,59493],{"class":34},"      background: rgba(255, 255, 255, 0.2);\n",[28,59495,59496],{"class":30,"line":9947},[28,59497,2264],{"class":34},[28,59499,59500],{"class":30,"line":9974},[28,59501,2477],{"emptyLinePlaceholder":144},[28,59503,59504],{"class":30,"line":9983},[28,59505,59506],{"class":34},"    .slider-footer p {\n",[28,59508,59509],{"class":30,"line":9989},[28,59510,59511],{"class":34},"      margin: 0;\n",[28,59513,59514],{"class":30,"line":9997},[28,59515,59465],{"class":34},[28,59517,59518],{"class":30,"line":10002},[28,59519,59520],{"class":34},"      font-size: 18px;\n",[28,59522,59523],{"class":30,"line":16681},[28,59524,59525],{"class":34},"      margin-bottom: 10px;\n",[28,59527,59528],{"class":30,"line":16687},[28,59529,2264],{"class":34},[28,59531,59532],{"class":30,"line":16710},[28,59533,2477],{"emptyLinePlaceholder":144},[28,59535,59536],{"class":30,"line":16716},[28,59537,59538],{"class":34},"    .slider-indicator {\n",[28,59540,59541],{"class":30,"line":16739},[28,59542,59511],{"class":34},[28,59544,59545],{"class":30,"line":16753},[28,59546,59547],{"class":34},"      padding: 0;\n",[28,59549,59550],{"class":30,"line":16773},[28,59551,59552],{"class":34},"      list-style: none;\n",[28,59554,59555],{"class":30,"line":16779},[28,59556,59417],{"class":34},[28,59558,59559],{"class":30,"line":16790},[28,59560,59561],{"class":34},"      align-items: center;\n",[28,59563,59564],{"class":30,"line":16813},[28,59565,2264],{"class":34},[28,59567,59568],{"class":30,"line":16835},[28,59569,2477],{"emptyLinePlaceholder":144},[28,59571,59572],{"class":30,"line":16840},[28,59573,59574],{"class":34},"    .slider-indicator li {\n",[28,59576,59577],{"class":30,"line":16846},[28,59578,59579],{"class":34},"      width: 8px;\n",[28,59581,59582],{"class":30,"line":16860},[28,59583,59584],{"class":34},"      height: 8px;\n",[28,59586,59587],{"class":30,"line":16873},[28,59588,59589],{"class":34},"      margin: 4px;\n",[28,59591,59592],{"class":30,"line":16878},[28,59593,59594],{"class":34},"      border-radius: 50%;\n",[28,59596,59597],{"class":30,"line":16892},[28,59598,59599],{"class":34},"      background: #fff;\n",[28,59601,59602],{"class":30,"line":16897},[28,59603,59604],{"class":34},"      opacity: 0.4;\n",[28,59606,59607],{"class":30,"line":16903},[28,59608,59475],{"class":34},[28,59610,59611],{"class":30,"line":16908},[28,59612,2264],{"class":34},[28,59614,59615],{"class":30,"line":16922},[28,59616,2477],{"emptyLinePlaceholder":144},[28,59618,59619],{"class":30,"line":16927},[28,59620,59621],{"class":34},"    .slider-indicator li.active {\n",[28,59623,59624],{"class":30,"line":16932},[28,59625,59626],{"class":34},"      width: 12px;\n",[28,59628,59629],{"class":30,"line":16946},[28,59630,59631],{"class":34},"      height: 12px;\n",[28,59633,59634],{"class":30,"line":16958},[28,59635,59636],{"class":34},"      opacity: 1;\n",[28,59638,59639],{"class":30,"line":16963},[28,59640,2264],{"class":34},[28,59642,59643,59645,59647],{"class":30,"line":16976},[28,59644,52492],{"class":34},[28,59646,136],{"class":51375},[28,59648,51382],{"class":34},[28,59650,59651,59653,59655],{"class":30,"line":16981},[28,59652,51860],{"class":34},[28,59654,51409],{"class":51375},[28,59656,51382],{"class":34},[28,59658,59659],{"class":30,"line":16986},[28,59660,2477],{"emptyLinePlaceholder":144},[28,59662,59663,59665,59667],{"class":30,"line":16991},[28,59664,99],{"class":34},[28,59666,51875],{"class":51375},[28,59668,51382],{"class":34},[28,59670,59671,59673,59675,59677,59679,59682],{"class":30,"line":17004},[28,59672,52219],{"class":34},[28,59674,51686],{"class":51375},[28,59676,53561],{"class":2040},[28,59678,39],{"class":34},[28,59680,59681],{"class":320},"\"slider\"",[28,59683,51382],{"class":34},[28,59685,59686,59688,59690,59692,59694,59696],{"class":30,"line":17009},[28,59687,51416],{"class":34},[28,59689,51686],{"class":51375},[28,59691,53561],{"class":2040},[28,59693,39],{"class":34},[28,59695,55302],{"class":320},[28,59697,51382],{"class":34},[28,59699,59700,59702,59704,59706,59708,59711,59713,59715,59717],{"class":30,"line":32709},[28,59701,55309],{"class":34},[28,59703,1539],{"class":51375},[28,59705,55314],{"class":2040},[28,59707,39],{"class":34},[28,59709,59710],{"class":320},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,59712,55322],{"class":2040},[28,59714,39],{"class":34},[28,59716,7729],{"class":320},[28,59718,59202],{"class":34},[28,59720,59721,59723,59725],{"class":30,"line":32715},[28,59722,51851],{"class":34},[28,59724,51686],{"class":51375},[28,59726,51382],{"class":34},[28,59728,59729,59731,59733,59735,59737,59739],{"class":30,"line":32721},[28,59730,51416],{"class":34},[28,59732,51686],{"class":51375},[28,59734,53561],{"class":2040},[28,59736,39],{"class":34},[28,59738,55349],{"class":320},[28,59740,51382],{"class":34},[28,59742,59743,59745,59747,59750,59752],{"class":30,"line":32727},[28,59744,55309],{"class":34},[28,59746,14],{"class":51375},[28,59748,59749],{"class":34},">对人类来说会不会太超前了？\u003C\u002F",[28,59751,14],{"class":51375},[28,59753,51382],{"class":34},[28,59755,59756,59758,59760,59762,59764,59767],{"class":30,"line":32733},[28,59757,55309],{"class":34},[28,59759,1211],{"class":51375},[28,59761,53561],{"class":2040},[28,59763,39],{"class":34},[28,59765,59766],{"class":320},"\"slider-indicator\"",[28,59768,51382],{"class":34},[28,59770,59771,59773,59775,59777,59779,59782,59784,59786],{"class":30,"line":32744},[28,59772,55377],{"class":34},[28,59774,174],{"class":51375},[28,59776,53561],{"class":2040},[28,59778,39],{"class":34},[28,59780,59781],{"class":320},"\"active\"",[28,59783,55389],{"class":34},[28,59785,174],{"class":51375},[28,59787,51382],{"class":34},[28,59789,59790,59792,59794,59796,59798],{"class":30,"line":32750},[28,59791,55377],{"class":34},[28,59793,174],{"class":51375},[28,59795,55389],{"class":34},[28,59797,174],{"class":51375},[28,59799,51382],{"class":34},[28,59801,59802,59804,59806,59808,59810],{"class":30,"line":32770},[28,59803,55377],{"class":34},[28,59805,174],{"class":51375},[28,59807,55389],{"class":34},[28,59809,174],{"class":51375},[28,59811,51382],{"class":34},[28,59813,59814,59816,59818,59820,59822],{"class":30,"line":32776},[28,59815,55377],{"class":34},[28,59817,174],{"class":51375},[28,59819,55389],{"class":34},[28,59821,174],{"class":51375},[28,59823,51382],{"class":34},[28,59825,59826,59828,59830,59832,59834],{"class":30,"line":32787},[28,59827,55377],{"class":34},[28,59829,174],{"class":51375},[28,59831,55389],{"class":34},[28,59833,174],{"class":51375},[28,59835,51382],{"class":34},[28,59837,59838,59840,59842,59844,59846],{"class":30,"line":32793},[28,59839,55377],{"class":34},[28,59841,174],{"class":51375},[28,59843,55389],{"class":34},[28,59845,174],{"class":51375},[28,59847,51382],{"class":34},[28,59849,59850,59852,59854,59856,59858],{"class":30,"line":32799},[28,59851,55377],{"class":34},[28,59853,174],{"class":51375},[28,59855,55389],{"class":34},[28,59857,174],{"class":51375},[28,59859,51382],{"class":34},[28,59861,59862,59864,59866,59868,59870],{"class":30,"line":32805},[28,59863,55377],{"class":34},[28,59865,174],{"class":51375},[28,59867,55389],{"class":34},[28,59869,174],{"class":51375},[28,59871,51382],{"class":34},[28,59873,59874,59876,59878],{"class":30,"line":32811},[28,59875,55482],{"class":34},[28,59877,1211],{"class":51375},[28,59879,51382],{"class":34},[28,59881,59882,59884,59886,59888,59890,59893],{"class":30,"line":32817},[28,59883,55309],{"class":34},[28,59885,51686],{"class":51375},[28,59887,53561],{"class":2040},[28,59889,39],{"class":34},[28,59891,59892],{"class":320},"\"toggle\"",[28,59894,51382],{"class":34},[28,59896,59897,59899,59901,59903,59905,59908,59910,59913,59915,59917],{"class":30,"line":32823},[28,59898,55377],{"class":34},[28,59900,53962],{"class":51375},[28,59902,53561],{"class":2040},[28,59904,39],{"class":34},[28,59906,59907],{"class":320},"\"prev\"",[28,59909,1164],{"class":34},[28,59911,59912],{"class":45},"&lt;",[28,59914,51860],{"class":34},[28,59916,53962],{"class":51375},[28,59918,51382],{"class":34},[28,59920,59921,59923,59925,59927,59929,59932,59934,59937,59939,59941],{"class":30,"line":32829},[28,59922,55377],{"class":34},[28,59924,53962],{"class":51375},[28,59926,53561],{"class":2040},[28,59928,39],{"class":34},[28,59930,59931],{"class":320},"\"next\"",[28,59933,1164],{"class":34},[28,59935,59936],{"class":45},"&gt;",[28,59938,51860],{"class":34},[28,59940,53962],{"class":51375},[28,59942,51382],{"class":34},[28,59944,59945,59947,59949],{"class":30,"line":32849},[28,59946,55482],{"class":34},[28,59948,51686],{"class":51375},[28,59950,51382],{"class":34},[28,59952,59953,59955,59957],{"class":30,"line":32855},[28,59954,51851],{"class":34},[28,59956,51686],{"class":51375},[28,59958,51382],{"class":34},[28,59960,59961,59963,59965],{"class":30,"line":32871},[28,59962,52492],{"class":34},[28,59964,51686],{"class":51375},[28,59966,51382],{"class":34},[28,59968,59969,59971,59973],{"class":30,"line":32877},[28,59970,52219],{"class":34},[28,59972,51888],{"class":51375},[28,59974,51382],{"class":34},[28,59976,59977],{"class":30,"line":32891},[28,59978,59979],{"class":34},"    \u002F\u002F 1. 初始数据\n",[28,59981,59982],{"class":30,"line":32897},[28,59983,59984],{"class":34},"    const data = [\n",[28,59986,59987],{"class":30,"line":32912},[28,59988,59989],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[28,59991,59992],{"class":30,"line":32918},[28,59993,59994],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[28,59996,59997],{"class":30,"line":32927},[28,59998,59999],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[28,60001,60002],{"class":30,"line":32933},[28,60003,60004],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[28,60006,60007],{"class":30,"line":32942},[28,60008,60009],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[28,60011,60012],{"class":30,"line":32948},[28,60013,60014],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[28,60016,60017],{"class":30,"line":32954},[28,60018,60019],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[28,60021,60022],{"class":30,"line":32963},[28,60023,60024],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[28,60026,60027],{"class":30,"line":32969},[28,60028,53184],{"class":34},[28,60030,60031],{"class":30,"line":32980},[28,60032,60033],{"class":34},"    \u002F\u002F 获取元素\n",[28,60035,60036],{"class":30,"line":32986},[28,60037,60038],{"class":34},"    const img = document.querySelector('.slider-wrapper img')\n",[28,60040,60041],{"class":30,"line":33005},[28,60042,60043],{"class":34},"    const p = document.querySelector('.slider-footer p')\n",[28,60045,60046],{"class":30,"line":33011},[28,60047,60048],{"class":34},"    const footer = document.querySelector('.slider-footer')\n",[28,60050,60051],{"class":30,"line":33022},[28,60052,60053],{"class":34},"    \u002F\u002F 1. 右按钮业务\n",[28,60055,60056],{"class":30,"line":33028},[28,60057,60058],{"class":34},"    \u002F\u002F 1.1 获取右侧按钮 \n",[28,60060,60061],{"class":30,"line":33048},[28,60062,60063],{"class":34},"    const next = document.querySelector('.next')\n",[28,60065,60066],{"class":30,"line":33064},[28,60067,60068],{"class":34},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[28,60070,60071],{"class":30,"line":33070},[28,60072,60073],{"class":34},"    \u002F\u002F 1.2 注册点击事件\n",[28,60075,60076],{"class":30,"line":33084},[28,60077,2477],{"emptyLinePlaceholder":144},[28,60079,60080],{"class":30,"line":33090},[28,60081,60082],{"class":34},"    next.addEventListener('click', function () {\n",[28,60084,60085],{"class":30,"line":33096},[28,60086,60087],{"class":34},"      \u002F\u002F console.log(11)\n",[28,60089,60090],{"class":30,"line":33107},[28,60091,60092],{"class":34},"      i++\n",[28,60094,60095],{"class":30,"line":33113},[28,60096,60097],{"class":34},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[28,60099,60100],{"class":30,"line":33119},[28,60101,60102],{"class":34},"      \u002F\u002F if (i >= 8) {\n",[28,60104,60105],{"class":30,"line":33129},[28,60106,60107],{"class":34},"      \u002F\u002F   i = 0\n",[28,60109,60110],{"class":30,"line":33135},[28,60111,60112],{"class":34},"      \u002F\u002F }\n",[28,60114,60115],{"class":30,"line":33146},[28,60116,60117],{"class":34},"      i = i >= data.length ? 0 : i\n",[28,60119,60120],{"class":30,"line":33152},[28,60121,60122],{"class":34},"      \u002F\u002F 1.3 得到对应的对象\n",[28,60124,60125],{"class":30,"line":33162},[28,60126,60127],{"class":34},"      \u002F\u002F console.log(data[i])\n",[28,60129,60130],{"class":30,"line":33167},[28,60131,60132],{"class":34},"      \u002F\u002F 调用函数\n",[28,60134,60135],{"class":30,"line":33173},[28,60136,60137],{"class":34},"      toggle()\n",[28,60139,60140],{"class":30,"line":33222},[28,60141,33537],{"class":34},[28,60143,60144],{"class":30,"line":33269},[28,60145,2477],{"emptyLinePlaceholder":144},[28,60147,60148],{"class":30,"line":33274},[28,60149,60150],{"class":34},"    \u002F\u002F 2. 左侧按钮业务\n",[28,60152,60153],{"class":30,"line":33280},[28,60154,60155],{"class":34},"    \u002F\u002F 2.1 获取左侧按钮 \n",[28,60157,60158],{"class":30,"line":33299},[28,60159,60160],{"class":34},"    const prev = document.querySelector('.prev')\n",[28,60162,60163],{"class":30,"line":33305},[28,60164,60073],{"class":34},[28,60166,60167],{"class":30,"line":33325},[28,60168,60169],{"class":34},"    prev.addEventListener('click', function () {\n",[28,60171,60172],{"class":30,"line":33331},[28,60173,60174],{"class":34},"      i--\n",[28,60176,60177],{"class":30,"line":33337},[28,60178,60179],{"class":34},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[28,60181,60182],{"class":30,"line":33347},[28,60183,60184],{"class":34},"      \u002F\u002F if (i \u003C 0) {\n",[28,60186,60187],{"class":30,"line":33352},[28,60188,60189],{"class":34},"      \u002F\u002F   i = 7\n",[28,60191,60192],{"class":30,"line":33358},[28,60193,60112],{"class":34},[28,60195,60196],{"class":30,"line":33374},[28,60197,60198],{"class":34},"      i = i \u003C 0 ? data.length - 1 : i\n",[28,60200,60201],{"class":30,"line":33419},[28,60202,60122],{"class":34},[28,60204,60205],{"class":30,"line":33425},[28,60206,60127],{"class":34},[28,60208,60209],{"class":30,"line":33431},[28,60210,60132],{"class":34},[28,60212,60213],{"class":30,"line":33437},[28,60214,60137],{"class":34},[28,60216,60217],{"class":30,"line":33448},[28,60218,33537],{"class":34},[28,60220,60221],{"class":30,"line":33454},[28,60222,2477],{"emptyLinePlaceholder":144},[28,60224,60225],{"class":30,"line":33460},[28,60226,60227],{"class":34},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[28,60229,60230],{"class":30,"line":33466},[28,60231,60232],{"class":34},"    function toggle() {\n",[28,60234,60235],{"class":30,"line":33484},[28,60236,60237],{"class":34},"      \u002F\u002F 1.4 渲染对应的数据\n",[28,60239,60240],{"class":30,"line":33498},[28,60241,60242],{"class":34},"      img.src = data[i].url\n",[28,60244,60245],{"class":30,"line":33507},[28,60246,60247],{"class":34},"      p.innerHTML = data[i].title\n",[28,60249,60250],{"class":30,"line":33516},[28,60251,60252],{"class":34},"      footer.style.backgroundColor = data[i].color\n",[28,60254,60255],{"class":30,"line":33525},[28,60256,60257],{"class":34},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[28,60259,60260],{"class":30,"line":33534},[28,60261,60262],{"class":34},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[28,60264,60265],{"class":30,"line":33540},[28,60266,60267],{"class":34},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[28,60269,60270],{"class":30,"line":33546},[28,60271,2264],{"class":34},[28,60273,60274],{"class":30,"line":33554},[28,60275,2477],{"emptyLinePlaceholder":144},[28,60277,60278],{"class":30,"line":33559},[28,60279,60280],{"class":34},"    \u002F\u002F 3. 自动播放模块\n",[28,60282,60283],{"class":30,"line":33565},[28,60284,60285],{"class":34},"    let timerId = setInterval(function () {\n",[28,60287,60288],{"class":30,"line":33576},[28,60289,60290],{"class":34},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60292,60293],{"class":30,"line":33582},[28,60294,60295],{"class":34},"      next.click()\n",[28,60297,60298],{"class":30,"line":33602},[28,60299,60300],{"class":34},"    }, 1000)\n",[28,60302,60303],{"class":30,"line":33608},[28,60304,2477],{"emptyLinePlaceholder":144},[28,60306,60307],{"class":30,"line":33614},[28,60308,60309],{"class":34},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[28,60311,60312],{"class":30,"line":33620},[28,60313,60314],{"class":34},"    const slider = document.querySelector('.slider')\n",[28,60316,60317],{"class":30,"line":33637},[28,60318,60319],{"class":34},"    \u002F\u002F 注册事件\n",[28,60321,60322],{"class":30,"line":33643},[28,60323,60324],{"class":34},"    slider.addEventListener('mouseenter', function () {\n",[28,60326,60327],{"class":30,"line":33649},[28,60328,60329],{"class":34},"      \u002F\u002F 停止定时器\n",[28,60331,60332],{"class":30,"line":33655},[28,60333,60334],{"class":34},"      clearInterval(timerId)\n",[28,60336,60337],{"class":30,"line":33661},[28,60338,33537],{"class":34},[28,60340,60341],{"class":30,"line":33667},[28,60342,2477],{"emptyLinePlaceholder":144},[28,60344,60345],{"class":30,"line":33694},[28,60346,60347],{"class":34},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[28,60349,60350],{"class":30,"line":33718},[28,60351,60319],{"class":34},[28,60353,60354],{"class":30,"line":33724},[28,60355,60356],{"class":34},"    slider.addEventListener('mouseleave', function () {\n",[28,60358,60359],{"class":30,"line":33730},[28,60360,60329],{"class":34},[28,60362,60363],{"class":30,"line":33736},[28,60364,60365],{"class":34},"      if (timerId) clearInterval(timerId)\n",[28,60367,60368],{"class":30,"line":33747},[28,60369,60370],{"class":34},"      \u002F\u002F 开启定时器\n",[28,60372,60373],{"class":30,"line":33758},[28,60374,60375],{"class":34},"      timerId = setInterval(function () {\n",[28,60377,60378],{"class":30,"line":33764},[28,60379,60380],{"class":34},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60382,60383],{"class":30,"line":33781},[28,60384,60385],{"class":34},"        next.click()\n",[28,60387,60388],{"class":30,"line":33804},[28,60389,60390],{"class":34},"      }, 1000)\n",[28,60392,60393],{"class":30,"line":33827},[28,60394,33537],{"class":34},[28,60396,60397,60399,60401],{"class":30,"line":33833},[28,60398,52492],{"class":34},[28,60400,51888],{"class":51375},[28,60402,51382],{"class":34},[28,60404,60405,60407,60409],{"class":30,"line":33838},[28,60406,51860],{"class":34},[28,60408,51875],{"class":51375},[28,60410,51382],{"class":34},[28,60412,60413],{"class":30,"line":33847},[28,60414,2477],{"emptyLinePlaceholder":144},[28,60416,60417,60419,60421],{"class":30,"line":33857},[28,60418,51860],{"class":34},[28,60420,50710],{"class":51375},[28,60422,51382],{"class":34},[22075,60424,60426],{"id":60425},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60428,60429],{},"小米搜索框案例：",[18,60431,60433],{"className":50708,"code":60432,"language":50710,"meta":23,"style":23},"\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",[25,60434,60435,60445,60459,60463,60471,60485,60505,60525,60537,60545,60551,60561,60571,60583,60587,60591,60598,60602,60613,60617,60621,60628,60639,60652,60666,60670,60674,60683,60695,60707,60721,60734,60747,60765,60776,60780,60784,60793,60810,60814,60818,60825,60835,60845,60856,60869,60881,60897,60908,60920,60924,60928,60936,60947,60964,60976,60988,60999,61003,61007,61018,61029,61033,61041,61045,61053,61057,61065,61080,61103,61118,61149,61176,61203,61230,61257,61284,61311,61320,61328,61336,61341,61361,61381,61386,61391,61409,61414,61424,61429,61443,61448,61453,61470,61479,61491,61495,61503,61511,61515],{"__ignoreMap":23},[28,60436,60437,60439,60441,60443],{"class":30,"line":31},[28,60438,51372],{"class":34},[28,60440,51376],{"class":51375},[28,60442,51379],{"class":2040},[28,60444,51382],{"class":34},[28,60446,60447,60449,60451,60453,60455,60457],{"class":30,"line":94},[28,60448,99],{"class":34},[28,60450,50710],{"class":51375},[28,60452,51391],{"class":2040},[28,60454,39],{"class":34},[28,60456,51396],{"class":320},[28,60458,51382],{"class":34},[28,60460,60461],{"class":30,"line":109},[28,60462,2477],{"emptyLinePlaceholder":144},[28,60464,60465,60467,60469],{"class":30,"line":125},[28,60466,99],{"class":34},[28,60468,51409],{"class":51375},[28,60470,51382],{"class":34},[28,60472,60473,60475,60477,60479,60481,60483],{"class":30,"line":131},[28,60474,51416],{"class":34},[28,60476,51419],{"class":51375},[28,60478,51422],{"class":2040},[28,60480,39],{"class":34},[28,60482,51427],{"class":320},[28,60484,51382],{"class":34},[28,60486,60487,60489,60491,60493,60495,60497,60499,60501,60503],{"class":30,"line":1291},[28,60488,51416],{"class":34},[28,60490,51419],{"class":51375},[28,60492,51438],{"class":2040},[28,60494,39],{"class":34},[28,60496,51443],{"class":320},[28,60498,51446],{"class":2040},[28,60500,39],{"class":34},[28,60502,51451],{"class":320},[28,60504,51382],{"class":34},[28,60506,60507,60509,60511,60513,60515,60517,60519,60521,60523],{"class":30,"line":1297},[28,60508,51416],{"class":34},[28,60510,51419],{"class":51375},[28,60512,14997],{"class":2040},[28,60514,39],{"class":34},[28,60516,51466],{"class":320},[28,60518,51446],{"class":2040},[28,60520,39],{"class":34},[28,60522,51473],{"class":320},[28,60524,51382],{"class":34},[28,60526,60527,60529,60531,60533,60535],{"class":30,"line":1388},[28,60528,51416],{"class":34},[28,60530,51482],{"class":51375},[28,60532,51485],{"class":34},[28,60534,51482],{"class":51375},[28,60536,51382],{"class":34},[28,60538,60539,60541,60543],{"class":30,"line":1394},[28,60540,51416],{"class":34},[28,60542,136],{"class":51375},[28,60544,51382],{"class":34},[28,60546,60547,60549],{"class":30,"line":1406},[28,60548,51502],{"class":51375},[28,60550,15649],{"class":34},[28,60552,60553,60555,60557,60559],{"class":30,"line":1689},[28,60554,51509],{"class":45},[28,60556,51512],{"class":34},[28,60558,407],{"class":45},[28,60560,1367],{"class":34},[28,60562,60563,60565,60567,60569],{"class":30,"line":1694},[28,60564,51521],{"class":45},[28,60566,51512],{"class":34},[28,60568,407],{"class":45},[28,60570,1367],{"class":34},[28,60572,60573,60576,60578,60581],{"class":30,"line":1700},[28,60574,60575],{"class":45},"            box-sizing",[28,60577,51512],{"class":34},[28,60579,60580],{"class":45},"border-box",[28,60582,1367],{"class":34},[28,60584,60585],{"class":30,"line":1705},[28,60586,2606],{"class":34},[28,60588,60589],{"class":30,"line":1719},[28,60590,2477],{"emptyLinePlaceholder":144},[28,60592,60593,60596],{"class":30,"line":1724},[28,60594,60595],{"class":51375},"        ul",[28,60597,15649],{"class":34},[28,60599,60600],{"class":30,"line":1730},[28,60601,2477],{"emptyLinePlaceholder":144},[28,60603,60604,60607,60609,60611],{"class":30,"line":1751},[28,60605,60606],{"class":45},"            list-style",[28,60608,51512],{"class":34},[28,60610,54812],{"class":45},[28,60612,1367],{"class":34},[28,60614,60615],{"class":30,"line":1756},[28,60616,2606],{"class":34},[28,60618,60619],{"class":30,"line":1770},[28,60620,2477],{"emptyLinePlaceholder":144},[28,60622,60623,60626],{"class":30,"line":1775},[28,60624,60625],{"class":2040},"        .mi",[28,60627,15649],{"class":34},[28,60629,60630,60633,60635,60637],{"class":30,"line":1804},[28,60631,60632],{"class":45},"            position",[28,60634,51512],{"class":34},[28,60636,54839],{"class":45},[28,60638,1367],{"class":34},[28,60640,60641,60643,60645,60648,60650],{"class":30,"line":1809},[28,60642,51559],{"class":45},[28,60644,51512],{"class":34},[28,60646,60647],{"class":45},"223",[28,60649,51567],{"class":38},[28,60651,1367],{"class":34},[28,60653,60654,60656,60658,60660,60662,60664],{"class":30,"line":1826},[28,60655,51509],{"class":45},[28,60657,51512],{"class":34},[28,60659,525],{"class":45},[28,60661,51567],{"class":38},[28,60663,51631],{"class":45},[28,60665,1367],{"class":34},[28,60667,60668],{"class":30,"line":1831},[28,60669,2606],{"class":34},[28,60671,60672],{"class":30,"line":1836},[28,60673,2477],{"emptyLinePlaceholder":144},[28,60675,60676,60678,60681],{"class":30,"line":1841},[28,60677,60625],{"class":2040},[28,60679,60680],{"class":51375}," input",[28,60682,15649],{"class":34},[28,60684,60685,60687,60689,60691,60693],{"class":30,"line":1855},[28,60686,51559],{"class":45},[28,60688,51512],{"class":34},[28,60690,60647],{"class":45},[28,60692,51567],{"class":38},[28,60694,1367],{"class":34},[28,60696,60697,60699,60701,60703,60705],{"class":30,"line":1860},[28,60698,51574],{"class":45},[28,60700,51512],{"class":34},[28,60702,817],{"class":45},[28,60704,51567],{"class":38},[28,60706,1367],{"class":34},[28,60708,60709,60711,60713,60715,60717,60719],{"class":30,"line":2654},[28,60710,51521],{"class":45},[28,60712,51512],{"class":34},[28,60714,407],{"class":45},[28,60716,2115],{"class":45},[28,60718,51567],{"class":38},[28,60720,1367],{"class":34},[28,60722,60723,60726,60728,60730,60732],{"class":30,"line":2668},[28,60724,60725],{"class":45},"            font-size",[28,60727,51512],{"class":34},[28,60729,759],{"class":45},[28,60731,51567],{"class":38},[28,60733,1367],{"class":34},[28,60735,60736,60739,60741,60743,60745],{"class":30,"line":2676},[28,60737,60738],{"class":45},"            line-height",[28,60740,51512],{"class":34},[28,60742,817],{"class":45},[28,60744,51567],{"class":38},[28,60746,1367],{"class":34},[28,60748,60749,60752,60754,60756,60758,60760,60763],{"class":30,"line":2681},[28,60750,60751],{"class":45},"            border",[28,60753,51512],{"class":34},[28,60755,46],{"class":45},[28,60757,51567],{"class":38},[28,60759,51596],{"class":45},[28,60761,60762],{"class":45}," #e0e0e0",[28,60764,1367],{"class":34},[28,60766,60767,60770,60772,60774],{"class":30,"line":2687},[28,60768,60769],{"class":45},"            outline",[28,60771,51512],{"class":34},[28,60773,54812],{"class":45},[28,60775,1367],{"class":34},[28,60777,60778],{"class":30,"line":2693},[28,60779,2606],{"class":34},[28,60781,60782],{"class":30,"line":2698},[28,60783,2477],{"emptyLinePlaceholder":144},[28,60785,60786,60788,60791],{"class":30,"line":8025},[28,60787,60625],{"class":2040},[28,60789,60790],{"class":2040}," .search",[28,60792,15649],{"class":34},[28,60794,60795,60797,60799,60801,60803,60805,60808],{"class":30,"line":8049},[28,60796,60751],{"class":45},[28,60798,51512],{"class":34},[28,60800,46],{"class":45},[28,60802,51567],{"class":38},[28,60804,51596],{"class":45},[28,60806,60807],{"class":45}," #ff6700",[28,60809,1367],{"class":34},[28,60811,60812],{"class":30,"line":8054},[28,60813,2606],{"class":34},[28,60815,60816],{"class":30,"line":8060},[28,60817,2477],{"emptyLinePlaceholder":144},[28,60819,60820,60823],{"class":30,"line":8087},[28,60821,60822],{"class":2040},"        .result-list",[28,60824,15649],{"class":34},[28,60826,60827,60829,60831,60833],{"class":30,"line":8092},[28,60828,51547],{"class":45},[28,60830,51512],{"class":34},[28,60832,54812],{"class":45},[28,60834,1367],{"class":34},[28,60836,60837,60839,60841,60843],{"class":30,"line":8098},[28,60838,60632],{"class":45},[28,60840,51512],{"class":34},[28,60842,54906],{"class":45},[28,60844,1367],{"class":34},[28,60846,60847,60850,60852,60854],{"class":30,"line":8110},[28,60848,60849],{"class":45},"            left",[28,60851,51512],{"class":34},[28,60853,407],{"class":45},[28,60855,1367],{"class":34},[28,60857,60858,60861,60863,60865,60867],{"class":30,"line":8122},[28,60859,60860],{"class":45},"            top",[28,60862,51512],{"class":34},[28,60864,817],{"class":45},[28,60866,51567],{"class":38},[28,60868,1367],{"class":34},[28,60870,60871,60873,60875,60877,60879],{"class":30,"line":8134},[28,60872,51559],{"class":45},[28,60874,51512],{"class":34},[28,60876,60647],{"class":45},[28,60878,51567],{"class":38},[28,60880,1367],{"class":34},[28,60882,60883,60885,60887,60889,60891,60893,60895],{"class":30,"line":9793},[28,60884,60751],{"class":45},[28,60886,51512],{"class":34},[28,60888,46],{"class":45},[28,60890,51567],{"class":38},[28,60892,51596],{"class":45},[28,60894,60807],{"class":45},[28,60896,1367],{"class":34},[28,60898,60899,60902,60904,60906],{"class":30,"line":9818},[28,60900,60901],{"class":45},"            border-top",[28,60903,51512],{"class":34},[28,60905,407],{"class":45},[28,60907,1367],{"class":34},[28,60909,60910,60913,60915,60918],{"class":30,"line":9841},[28,60911,60912],{"class":45},"            background",[28,60914,51512],{"class":34},[28,60916,60917],{"class":45},"#fff",[28,60919,1367],{"class":34},[28,60921,60922],{"class":30,"line":9865},[28,60923,2606],{"class":34},[28,60925,60926],{"class":30,"line":9870},[28,60927,2477],{"emptyLinePlaceholder":144},[28,60929,60930,60932,60934],{"class":30,"line":9875},[28,60931,60822],{"class":2040},[28,60933,1475],{"class":51375},[28,60935,15649],{"class":34},[28,60937,60938,60940,60942,60945],{"class":30,"line":9880},[28,60939,51547],{"class":45},[28,60941,51512],{"class":34},[28,60943,60944],{"class":45},"block",[28,60946,1367],{"class":34},[28,60948,60949,60951,60953,60955,60957,60960,60962],{"class":30,"line":9889},[28,60950,51521],{"class":45},[28,60952,51512],{"class":34},[28,60954,558],{"class":45},[28,60956,51567],{"class":38},[28,60958,60959],{"class":45}," 15",[28,60961,51567],{"class":38},[28,60963,1367],{"class":34},[28,60965,60966,60968,60970,60972,60974],{"class":30,"line":9894},[28,60967,60725],{"class":45},[28,60969,51512],{"class":34},[28,60971,68],{"class":45},[28,60973,51567],{"class":38},[28,60975,1367],{"class":34},[28,60977,60978,60981,60983,60986],{"class":30,"line":9900},[28,60979,60980],{"class":45},"            color",[28,60982,51512],{"class":34},[28,60984,60985],{"class":45},"#424242",[28,60987,1367],{"class":34},[28,60989,60990,60993,60995,60997],{"class":30,"line":9921},[28,60991,60992],{"class":45},"            text-decoration",[28,60994,51512],{"class":34},[28,60996,54812],{"class":45},[28,60998,1367],{"class":34},[28,61000,61001],{"class":30,"line":9927},[28,61002,2606],{"class":34},[28,61004,61005],{"class":30,"line":9941},[28,61006,2477],{"emptyLinePlaceholder":144},[28,61008,61009,61011,61013,61016],{"class":30,"line":9947},[28,61010,60822],{"class":2040},[28,61012,1475],{"class":51375},[28,61014,61015],{"class":2040},":hover",[28,61017,15649],{"class":34},[28,61019,61020,61022,61024,61027],{"class":30,"line":9974},[28,61021,51715],{"class":45},[28,61023,51512],{"class":34},[28,61025,61026],{"class":45},"#eee",[28,61028,1367],{"class":34},[28,61030,61031],{"class":30,"line":9983},[28,61032,2606],{"class":34},[28,61034,61035,61037,61039],{"class":30,"line":9989},[28,61036,51851],{"class":34},[28,61038,136],{"class":51375},[28,61040,51382],{"class":34},[28,61042,61043],{"class":30,"line":9997},[28,61044,2477],{"emptyLinePlaceholder":144},[28,61046,61047,61049,61051],{"class":30,"line":10002},[28,61048,51860],{"class":34},[28,61050,51409],{"class":51375},[28,61052,51382],{"class":34},[28,61054,61055],{"class":30,"line":16681},[28,61056,2477],{"emptyLinePlaceholder":144},[28,61058,61059,61061,61063],{"class":30,"line":16687},[28,61060,99],{"class":34},[28,61062,51875],{"class":51375},[28,61064,51382],{"class":34},[28,61066,61067,61069,61071,61073,61075,61078],{"class":30,"line":16710},[28,61068,51416],{"class":34},[28,61070,51686],{"class":51375},[28,61072,53561],{"class":2040},[28,61074,39],{"class":34},[28,61076,61077],{"class":320},"\"mi\"",[28,61079,51382],{"class":34},[28,61081,61082,61084,61086,61088,61090,61093,61096,61098,61101],{"class":30,"line":16716},[28,61083,55377],{"class":34},[28,61085,53896],{"class":51375},[28,61087,53899],{"class":2040},[28,61089,39],{"class":34},[28,61091,61092],{"class":320},"\"search\"",[28,61094,61095],{"class":2040}," placeholder",[28,61097,39],{"class":34},[28,61099,61100],{"class":320},"\"小米笔记本\"",[28,61102,51382],{"class":34},[28,61104,61105,61107,61109,61111,61113,61116],{"class":30,"line":16739},[28,61106,55377],{"class":34},[28,61108,1211],{"class":51375},[28,61110,53561],{"class":2040},[28,61112,39],{"class":34},[28,61114,61115],{"class":320},"\"result-list\"",[28,61117,51382],{"class":34},[28,61119,61120,61123,61125,61128,61130,61133,61135,61138,61141,61143,61145,61147],{"class":30,"line":16753},[28,61121,61122],{"class":34},"            \u003C",[28,61124,174],{"class":51375},[28,61126,61127],{"class":34},">\u003C",[28,61129,35],{"class":51375},[28,61131,61132],{"class":2040}," href",[28,61134,39],{"class":34},[28,61136,61137],{"class":320},"\"#\"",[28,61139,61140],{"class":34},">全部商品\u003C\u002F",[28,61142,35],{"class":51375},[28,61144,55389],{"class":34},[28,61146,174],{"class":51375},[28,61148,51382],{"class":34},[28,61150,61151,61153,61155,61157,61159,61161,61163,61165,61168,61170,61172,61174],{"class":30,"line":16773},[28,61152,61122],{"class":34},[28,61154,174],{"class":51375},[28,61156,61127],{"class":34},[28,61158,35],{"class":51375},[28,61160,61132],{"class":2040},[28,61162,39],{"class":34},[28,61164,61137],{"class":320},[28,61166,61167],{"class":34},">小米11\u003C\u002F",[28,61169,35],{"class":51375},[28,61171,55389],{"class":34},[28,61173,174],{"class":51375},[28,61175,51382],{"class":34},[28,61177,61178,61180,61182,61184,61186,61188,61190,61192,61195,61197,61199,61201],{"class":30,"line":16779},[28,61179,61122],{"class":34},[28,61181,174],{"class":51375},[28,61183,61127],{"class":34},[28,61185,35],{"class":51375},[28,61187,61132],{"class":2040},[28,61189,39],{"class":34},[28,61191,61137],{"class":320},[28,61193,61194],{"class":34},">小米10S\u003C\u002F",[28,61196,35],{"class":51375},[28,61198,55389],{"class":34},[28,61200,174],{"class":51375},[28,61202,51382],{"class":34},[28,61204,61205,61207,61209,61211,61213,61215,61217,61219,61222,61224,61226,61228],{"class":30,"line":16790},[28,61206,61122],{"class":34},[28,61208,174],{"class":51375},[28,61210,61127],{"class":34},[28,61212,35],{"class":51375},[28,61214,61132],{"class":2040},[28,61216,39],{"class":34},[28,61218,61137],{"class":320},[28,61220,61221],{"class":34},">小米笔记本\u003C\u002F",[28,61223,35],{"class":51375},[28,61225,55389],{"class":34},[28,61227,174],{"class":51375},[28,61229,51382],{"class":34},[28,61231,61232,61234,61236,61238,61240,61242,61244,61246,61249,61251,61253,61255],{"class":30,"line":16813},[28,61233,61122],{"class":34},[28,61235,174],{"class":51375},[28,61237,61127],{"class":34},[28,61239,35],{"class":51375},[28,61241,61132],{"class":2040},[28,61243,39],{"class":34},[28,61245,61137],{"class":320},[28,61247,61248],{"class":34},">小米手机\u003C\u002F",[28,61250,35],{"class":51375},[28,61252,55389],{"class":34},[28,61254,174],{"class":51375},[28,61256,51382],{"class":34},[28,61258,61259,61261,61263,61265,61267,61269,61271,61273,61276,61278,61280,61282],{"class":30,"line":16835},[28,61260,61122],{"class":34},[28,61262,174],{"class":51375},[28,61264,61127],{"class":34},[28,61266,35],{"class":51375},[28,61268,61132],{"class":2040},[28,61270,39],{"class":34},[28,61272,61137],{"class":320},[28,61274,61275],{"class":34},">黑鲨4\u003C\u002F",[28,61277,35],{"class":51375},[28,61279,55389],{"class":34},[28,61281,174],{"class":51375},[28,61283,51382],{"class":34},[28,61285,61286,61288,61290,61292,61294,61296,61298,61300,61303,61305,61307,61309],{"class":30,"line":16840},[28,61287,61122],{"class":34},[28,61289,174],{"class":51375},[28,61291,61127],{"class":34},[28,61293,35],{"class":51375},[28,61295,61132],{"class":2040},[28,61297,39],{"class":34},[28,61299,61137],{"class":320},[28,61301,61302],{"class":34},">空调\u003C\u002F",[28,61304,35],{"class":51375},[28,61306,55389],{"class":34},[28,61308,174],{"class":51375},[28,61310,51382],{"class":34},[28,61312,61313,61316,61318],{"class":30,"line":16846},[28,61314,61315],{"class":34},"        \u003C\u002F",[28,61317,1211],{"class":51375},[28,61319,51382],{"class":34},[28,61321,61322,61324,61326],{"class":30,"line":16860},[28,61323,51851],{"class":34},[28,61325,51686],{"class":51375},[28,61327,51382],{"class":34},[28,61329,61330,61332,61334],{"class":30,"line":16873},[28,61331,51416],{"class":34},[28,61333,51888],{"class":51375},[28,61335,51382],{"class":34},[28,61337,61338],{"class":30,"line":16878},[28,61339,61340],{"class":105},"        \u002F\u002F 1. 获取元素\n",[28,61342,61343,61346,61348,61350,61352,61354,61356,61359],{"class":30,"line":16892},[28,61344,61345],{"class":38},"        const",[28,61347,60680],{"class":45},[28,61349,13641],{"class":38},[28,61351,54471],{"class":34},[28,61353,54474],{"class":2040},[28,61355,221],{"class":34},[28,61357,61358],{"class":320},"'[type=search]'",[28,61360,227],{"class":34},[28,61362,61363,61365,61368,61370,61372,61374,61376,61379],{"class":30,"line":16897},[28,61364,61345],{"class":38},[28,61366,61367],{"class":45}," ul",[28,61369,13641],{"class":38},[28,61371,54471],{"class":34},[28,61373,54474],{"class":2040},[28,61375,221],{"class":34},[28,61377,61378],{"class":320},"'.result-list'",[28,61380,227],{"class":34},[28,61382,61383],{"class":30,"line":16903},[28,61384,61385],{"class":105},"        \u002F\u002F console.log(input)\n",[28,61387,61388],{"class":30,"line":16908},[28,61389,61390],{"class":105},"        \u002F\u002F 2. 监听事件 获得焦点\n",[28,61392,61393,61396,61398,61400,61403,61405,61407],{"class":30,"line":16922},[28,61394,61395],{"class":34},"        input.",[28,61397,57888],{"class":2040},[28,61399,221],{"class":34},[28,61401,61402],{"class":320},"'focus'",[28,61404,12512],{"class":34},[28,61406,54524],{"class":38},[28,61408,54527],{"class":34},[28,61410,61411],{"class":30,"line":16927},[28,61412,61413],{"class":105},"            \u002F\u002F ul显示\n",[28,61415,61416,61419,61421],{"class":30,"line":16932},[28,61417,61418],{"class":34},"            ul.style.display ",[28,61420,39],{"class":38},[28,61422,61423],{"class":320}," 'block'\n",[28,61425,61426],{"class":30,"line":16946},[28,61427,61428],{"class":105},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[28,61430,61431,61434,61436,61438,61441],{"class":30,"line":16958},[28,61432,61433],{"class":34},"            input.classList.",[28,61435,5411],{"class":2040},[28,61437,221],{"class":34},[28,61439,61440],{"class":320},"'search'",[28,61442,227],{"class":34},[28,61444,61445],{"class":30,"line":16963},[28,61446,61447],{"class":34},"        })\n",[28,61449,61450],{"class":30,"line":16976},[28,61451,61452],{"class":105},"        \u002F\u002F 3. 监听事件 失去焦点\n",[28,61454,61455,61457,61459,61461,61464,61466,61468],{"class":30,"line":16981},[28,61456,61395],{"class":34},[28,61458,57888],{"class":2040},[28,61460,221],{"class":34},[28,61462,61463],{"class":320},"'blur'",[28,61465,12512],{"class":34},[28,61467,54524],{"class":38},[28,61469,54527],{"class":34},[28,61471,61472,61474,61476],{"class":30,"line":16986},[28,61473,61418],{"class":34},[28,61475,39],{"class":38},[28,61477,61478],{"class":320}," 'none'\n",[28,61480,61481,61483,61485,61487,61489],{"class":30,"line":16991},[28,61482,61433],{"class":34},[28,61484,57081],{"class":2040},[28,61486,221],{"class":34},[28,61488,61440],{"class":320},[28,61490,227],{"class":34},[28,61492,61493],{"class":30,"line":17004},[28,61494,61447],{"class":34},[28,61496,61497,61499,61501],{"class":30,"line":17009},[28,61498,51851],{"class":34},[28,61500,51888],{"class":51375},[28,61502,51382],{"class":34},[28,61504,61505,61507,61509],{"class":30,"line":32709},[28,61506,51860],{"class":34},[28,61508,51875],{"class":51375},[28,61510,51382],{"class":34},[28,61512,61513],{"class":30,"line":32715},[28,61514,2477],{"emptyLinePlaceholder":144},[28,61516,61517,61519,61521],{"class":30,"line":32721},[28,61518,51860],{"class":34},[28,61520,50710],{"class":51375},[28,61522,51382],{"class":34},[22075,61524,61526],{"id":61525},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61528,61529],{},"评论字数统计案例",[14,61531,61532],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61534,61535],{},"牢记focus伪类选择器",[51419,61537],{"charSet":61538},"UTF-8",[51419,61540],{"name":61541,"content":61542},"viewport","width=device-width, initial-scale=1.0",[51482,61544,61545],{},"Document",[136,61547,61548],{},"\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",[53896,61550],{"type":5264},[1211,61552,61553,61556],{},[174,61554,61555],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[174,61557,61558],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[18,61560,61562],{"className":50708,"code":61561,"language":50710,"meta":23,"style":23},"\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",[25,61563,61564,61574,61588,61592,61600,61614,61634,61654,61667,61675,61682,61695,61709,61719,61729,61733,61737,61744,61756,61768,61780,61792,61821,61834,61838,61842,61851,61862,61874,61885,61896,61908,61919,61931,61947,61959,61963,61967,61978,61989,61999,62011,62015,62019,62027,62038,62048,62059,62071,62084,62096,62108,62112,62116,62125,62137,62148,62161,62172,62186,62190,62194,62201,62213,62225,62235,62239,62243,62252,62264,62274,62278,62282,62293,62303,62322,62335,62339,62343,62353,62363,62367,62371,62382,62393,62405,62417,62421,62425,62436,62447,62461,62465,62469,62480,62490,62502,62506,62514,62522,62526,62534,62549,62568,62608,62621,62629,62643,62663,62671,62686,62709,62727,62742,62762,62782,62802,62810,62818,62826,62834,62854,62874,62879,62896,62905,62909,62914,62930,62938,62942,62947,62964,62969,62994,62998,63002,63007,63012,63020,63028,63032],{"__ignoreMap":23},[28,61565,61566,61568,61570,61572],{"class":30,"line":31},[28,61567,51372],{"class":34},[28,61569,51376],{"class":51375},[28,61571,51379],{"class":2040},[28,61573,51382],{"class":34},[28,61575,61576,61578,61580,61582,61584,61586],{"class":30,"line":94},[28,61577,99],{"class":34},[28,61579,50710],{"class":51375},[28,61581,51391],{"class":2040},[28,61583,39],{"class":34},[28,61585,51396],{"class":320},[28,61587,51382],{"class":34},[28,61589,61590],{"class":30,"line":109},[28,61591,2477],{"emptyLinePlaceholder":144},[28,61593,61594,61596,61598],{"class":30,"line":125},[28,61595,99],{"class":34},[28,61597,51409],{"class":51375},[28,61599,51382],{"class":34},[28,61601,61602,61604,61606,61608,61610,61612],{"class":30,"line":131},[28,61603,52219],{"class":34},[28,61605,51419],{"class":51375},[28,61607,51422],{"class":2040},[28,61609,39],{"class":34},[28,61611,51427],{"class":320},[28,61613,51382],{"class":34},[28,61615,61616,61618,61620,61622,61624,61626,61628,61630,61632],{"class":30,"line":1291},[28,61617,52219],{"class":34},[28,61619,51419],{"class":51375},[28,61621,51438],{"class":2040},[28,61623,39],{"class":34},[28,61625,51443],{"class":320},[28,61627,51446],{"class":2040},[28,61629,39],{"class":34},[28,61631,51451],{"class":320},[28,61633,51382],{"class":34},[28,61635,61636,61638,61640,61642,61644,61646,61648,61650,61652],{"class":30,"line":1297},[28,61637,52219],{"class":34},[28,61639,51419],{"class":51375},[28,61641,14997],{"class":2040},[28,61643,39],{"class":34},[28,61645,51466],{"class":320},[28,61647,51446],{"class":2040},[28,61649,39],{"class":34},[28,61651,51473],{"class":320},[28,61653,51382],{"class":34},[28,61655,61656,61658,61660,61663,61665],{"class":30,"line":1388},[28,61657,52219],{"class":34},[28,61659,51482],{"class":51375},[28,61661,61662],{"class":34},">评论回车发布\u003C\u002F",[28,61664,51482],{"class":51375},[28,61666,51382],{"class":34},[28,61668,61669,61671,61673],{"class":30,"line":1394},[28,61670,52219],{"class":34},[28,61672,136],{"class":51375},[28,61674,51382],{"class":34},[28,61676,61677,61680],{"class":30,"line":1406},[28,61678,61679],{"class":2040},"    .wrapper",[28,61681,15649],{"class":34},[28,61683,61684,61687,61689,61691,61693],{"class":30,"line":1689},[28,61685,61686],{"class":45},"      min-width",[28,61688,51512],{"class":34},[28,61690,4064],{"class":45},[28,61692,51567],{"class":38},[28,61694,1367],{"class":34},[28,61696,61697,61700,61702,61705,61707],{"class":30,"line":1694},[28,61698,61699],{"class":45},"      max-width",[28,61701,51512],{"class":34},[28,61703,61704],{"class":45},"800",[28,61706,51567],{"class":38},[28,61708,1367],{"class":34},[28,61710,61711,61713,61715,61717],{"class":30,"line":1700},[28,61712,55084],{"class":45},[28,61714,51512],{"class":34},[28,61716,51552],{"class":45},[28,61718,1367],{"class":34},[28,61720,61721,61723,61725,61727],{"class":30,"line":1705},[28,61722,55095],{"class":45},[28,61724,51512],{"class":34},[28,61726,51655],{"class":45},[28,61728,1367],{"class":34},[28,61730,61731],{"class":30,"line":1719},[28,61732,2264],{"class":34},[28,61734,61735],{"class":30,"line":1724},[28,61736,2477],{"emptyLinePlaceholder":144},[28,61738,61739,61742],{"class":30,"line":1730},[28,61740,61741],{"class":2040},"    .avatar",[28,61743,15649],{"class":34},[28,61745,61746,61748,61750,61752,61754],{"class":30,"line":1751},[28,61747,54846],{"class":45},[28,61749,51512],{"class":34},[28,61751,817],{"class":45},[28,61753,51567],{"class":38},[28,61755,1367],{"class":34},[28,61757,61758,61760,61762,61764,61766],{"class":30,"line":1756},[28,61759,54860],{"class":45},[28,61761,51512],{"class":34},[28,61763,817],{"class":45},[28,61765,51567],{"class":38},[28,61767,1367],{"class":34},[28,61769,61770,61772,61774,61776,61778],{"class":30,"line":1770},[28,61771,55209],{"class":45},[28,61773,51512],{"class":34},[28,61775,866],{"class":45},[28,61777,542],{"class":38},[28,61779,1367],{"class":34},[28,61781,61782,61785,61787,61790],{"class":30,"line":1775},[28,61783,61784],{"class":45},"      overflow",[28,61786,51512],{"class":34},[28,61788,61789],{"class":45},"hidden",[28,61791,1367],{"class":34},[28,61793,61794,61797,61799,61802,61804,61807,61809,61812,61814,61816,61819],{"class":30,"line":1804},[28,61795,61796],{"class":45},"      background",[28,61798,51512],{"class":34},[28,61800,61801],{"class":45},"url",[28,61803,221],{"class":34},[28,61805,61806],{"class":5293},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[28,61808,13791],{"class":34},[28,61810,61811],{"class":45},"no-repeat",[28,61813,17221],{"class":45},[28,61815,25056],{"class":34},[28,61817,61818],{"class":45},"cover",[28,61820,1367],{"class":34},[28,61822,61823,61826,61828,61830,61832],{"class":30,"line":1809},[28,61824,61825],{"class":45},"      margin-right",[28,61827,51512],{"class":34},[28,61829,102],{"class":45},[28,61831,51567],{"class":38},[28,61833,1367],{"class":34},[28,61835,61836],{"class":30,"line":1826},[28,61837,2264],{"class":34},[28,61839,61840],{"class":30,"line":1831},[28,61841,2477],{"emptyLinePlaceholder":144},[28,61843,61844,61846,61849],{"class":30,"line":1836},[28,61845,61679],{"class":2040},[28,61847,61848],{"class":51375}," textarea",[28,61850,15649],{"class":34},[28,61852,61853,61856,61858,61860],{"class":30,"line":1841},[28,61854,61855],{"class":45},"      outline",[28,61857,51512],{"class":34},[28,61859,54812],{"class":45},[28,61861,1367],{"class":34},[28,61863,61864,61867,61869,61872],{"class":30,"line":1855},[28,61865,61866],{"class":45},"      border-color",[28,61868,51512],{"class":34},[28,61870,61871],{"class":45},"transparent",[28,61873,1367],{"class":34},[28,61875,61876,61879,61881,61883],{"class":30,"line":1860},[28,61877,61878],{"class":45},"      resize",[28,61880,51512],{"class":34},[28,61882,54812],{"class":45},[28,61884,1367],{"class":34},[28,61886,61887,61889,61891,61894],{"class":30,"line":2654},[28,61888,61796],{"class":45},[28,61890,51512],{"class":34},[28,61892,61893],{"class":45},"#f5f5f5",[28,61895,1367],{"class":34},[28,61897,61898,61900,61902,61904,61906],{"class":30,"line":2668},[28,61899,55209],{"class":45},[28,61901,51512],{"class":34},[28,61903,507],{"class":45},[28,61905,51567],{"class":38},[28,61907,1367],{"class":34},[28,61909,61910,61913,61915,61917],{"class":30,"line":2676},[28,61911,61912],{"class":45},"      flex",[28,61914,51512],{"class":34},[28,61916,46],{"class":45},[28,61918,1367],{"class":34},[28,61920,61921,61923,61925,61927,61929],{"class":30,"line":2681},[28,61922,54770],{"class":45},[28,61924,51512],{"class":34},[28,61926,659],{"class":45},[28,61928,51567],{"class":38},[28,61930,1367],{"class":34},[28,61932,61933,61936,61938,61940,61943,61945],{"class":30,"line":2687},[28,61934,61935],{"class":45},"      transition",[28,61937,51512],{"class":34},[28,61939,28199],{"class":45},[28,61941,61942],{"class":45}," 0.5",[28,61944,905],{"class":38},[28,61946,1367],{"class":34},[28,61948,61949,61951,61953,61955,61957],{"class":30,"line":2693},[28,61950,54860],{"class":45},[28,61952,51512],{"class":34},[28,61954,1155],{"class":45},[28,61956,51567],{"class":38},[28,61958,1367],{"class":34},[28,61960,61961],{"class":30,"line":2698},[28,61962,2264],{"class":34},[28,61964,61965],{"class":30,"line":8025},[28,61966,2477],{"emptyLinePlaceholder":144},[28,61968,61969,61971,61973,61976],{"class":30,"line":8049},[28,61970,61679],{"class":2040},[28,61972,61848],{"class":51375},[28,61974,61975],{"class":2040},":focus",[28,61977,15649],{"class":34},[28,61979,61980,61982,61984,61987],{"class":30,"line":8054},[28,61981,61866],{"class":45},[28,61983,51512],{"class":34},[28,61985,61986],{"class":45},"#e4e4e4",[28,61988,1367],{"class":34},[28,61990,61991,61993,61995,61997],{"class":30,"line":8060},[28,61992,61796],{"class":45},[28,61994,51512],{"class":34},[28,61996,60917],{"class":45},[28,61998,1367],{"class":34},[28,62000,62001,62003,62005,62007,62009],{"class":30,"line":8087},[28,62002,54860],{"class":45},[28,62004,51512],{"class":34},[28,62006,866],{"class":45},[28,62008,51567],{"class":38},[28,62010,1367],{"class":34},[28,62012,62013],{"class":30,"line":8092},[28,62014,2264],{"class":34},[28,62016,62017],{"class":30,"line":8098},[28,62018,2477],{"emptyLinePlaceholder":144},[28,62020,62021,62023,62025],{"class":30,"line":8110},[28,62022,61679],{"class":2040},[28,62024,57542],{"class":51375},[28,62026,15649],{"class":34},[28,62028,62029,62031,62033,62036],{"class":30,"line":8122},[28,62030,61796],{"class":45},[28,62032,51512],{"class":34},[28,62034,62035],{"class":45},"#00aeec",[28,62037,1367],{"class":34},[28,62039,62040,62042,62044,62046],{"class":30,"line":8134},[28,62041,57491],{"class":45},[28,62043,51512],{"class":34},[28,62045,60917],{"class":45},[28,62047,1367],{"class":34},[28,62049,62050,62053,62055,62057],{"class":30,"line":9793},[28,62051,62052],{"class":45},"      border",[28,62054,51512],{"class":34},[28,62056,54812],{"class":45},[28,62058,1367],{"class":34},[28,62060,62061,62063,62065,62067,62069],{"class":30,"line":9818},[28,62062,55209],{"class":45},[28,62064,51512],{"class":34},[28,62066,507],{"class":45},[28,62068,51567],{"class":38},[28,62070,1367],{"class":34},[28,62072,62073,62076,62078,62080,62082],{"class":30,"line":9841},[28,62074,62075],{"class":45},"      margin-left",[28,62077,51512],{"class":34},[28,62079,659],{"class":45},[28,62081,51567],{"class":38},[28,62083,1367],{"class":34},[28,62085,62086,62088,62090,62092,62094],{"class":30,"line":9865},[28,62087,54846],{"class":45},[28,62089,51512],{"class":34},[28,62091,570],{"class":45},[28,62093,51567],{"class":38},[28,62095,1367],{"class":34},[28,62097,62098,62101,62103,62106],{"class":30,"line":9870},[28,62099,62100],{"class":45},"      cursor",[28,62102,51512],{"class":34},[28,62104,62105],{"class":45},"pointer",[28,62107,1367],{"class":34},[28,62109,62110],{"class":30,"line":9875},[28,62111,2264],{"class":34},[28,62113,62114],{"class":30,"line":9880},[28,62115,2477],{"emptyLinePlaceholder":144},[28,62117,62118,62120,62123],{"class":30,"line":9889},[28,62119,61679],{"class":2040},[28,62121,62122],{"class":2040}," .total",[28,62124,15649],{"class":34},[28,62126,62127,62129,62131,62133,62135],{"class":30,"line":9894},[28,62128,61825],{"class":45},[28,62130,51512],{"class":34},[28,62132,822],{"class":45},[28,62134,51567],{"class":38},[28,62136,1367],{"class":34},[28,62138,62139,62141,62143,62146],{"class":30,"line":9900},[28,62140,57491],{"class":45},[28,62142,51512],{"class":34},[28,62144,62145],{"class":45},"#999",[28,62147,1367],{"class":34},[28,62149,62150,62153,62155,62157,62159],{"class":30,"line":9921},[28,62151,62152],{"class":45},"      margin-top",[28,62154,51512],{"class":34},[28,62156,533],{"class":45},[28,62158,51567],{"class":38},[28,62160,1367],{"class":34},[28,62162,62163,62166,62168,62170],{"class":30,"line":9927},[28,62164,62165],{"class":45},"      opacity",[28,62167,51512],{"class":34},[28,62169,407],{"class":45},[28,62171,1367],{"class":34},[28,62173,62174,62176,62178,62180,62182,62184],{"class":30,"line":9941},[28,62175,61935],{"class":45},[28,62177,51512],{"class":34},[28,62179,28199],{"class":45},[28,62181,61942],{"class":45},[28,62183,905],{"class":38},[28,62185,1367],{"class":34},[28,62187,62188],{"class":30,"line":9947},[28,62189,2264],{"class":34},[28,62191,62192],{"class":30,"line":9974},[28,62193,2477],{"emptyLinePlaceholder":144},[28,62195,62196,62199],{"class":30,"line":9983},[28,62197,62198],{"class":2040},"    .list",[28,62200,15649],{"class":34},[28,62202,62203,62205,62207,62209,62211],{"class":30,"line":9989},[28,62204,61686],{"class":45},[28,62206,51512],{"class":34},[28,62208,4064],{"class":45},[28,62210,51567],{"class":38},[28,62212,1367],{"class":34},[28,62214,62215,62217,62219,62221,62223],{"class":30,"line":9997},[28,62216,61699],{"class":45},[28,62218,51512],{"class":34},[28,62220,61704],{"class":45},[28,62222,51567],{"class":38},[28,62224,1367],{"class":34},[28,62226,62227,62229,62231,62233],{"class":30,"line":10002},[28,62228,55084],{"class":45},[28,62230,51512],{"class":34},[28,62232,51552],{"class":45},[28,62234,1367],{"class":34},[28,62236,62237],{"class":30,"line":16681},[28,62238,2264],{"class":34},[28,62240,62241],{"class":30,"line":16687},[28,62242,2477],{"emptyLinePlaceholder":144},[28,62244,62245,62247,62250],{"class":30,"line":16710},[28,62246,62198],{"class":2040},[28,62248,62249],{"class":2040}," .item",[28,62251,15649],{"class":34},[28,62253,62254,62256,62258,62260,62262],{"class":30,"line":16716},[28,62255,54846],{"class":45},[28,62257,51512],{"class":34},[28,62259,525],{"class":45},[28,62261,542],{"class":38},[28,62263,1367],{"class":34},[28,62265,62266,62268,62270,62272],{"class":30,"line":16739},[28,62267,55084],{"class":45},[28,62269,51512],{"class":34},[28,62271,51552],{"class":45},[28,62273,1367],{"class":34},[28,62275,62276],{"class":30,"line":16753},[28,62277,2264],{"class":34},[28,62279,62280],{"class":30,"line":16773},[28,62281,2477],{"emptyLinePlaceholder":144},[28,62283,62284,62286,62288,62291],{"class":30,"line":16779},[28,62285,62198],{"class":2040},[28,62287,62249],{"class":2040},[28,62289,62290],{"class":2040}," .info",[28,62292,15649],{"class":34},[28,62294,62295,62297,62299,62301],{"class":30,"line":16790},[28,62296,61912],{"class":45},[28,62298,51512],{"class":34},[28,62300,46],{"class":45},[28,62302,1367],{"class":34},[28,62304,62305,62308,62310,62312,62314,62317,62320],{"class":30,"line":16813},[28,62306,62307],{"class":45},"      border-bottom",[28,62309,51512],{"class":34},[28,62311,46],{"class":45},[28,62313,51567],{"class":38},[28,62315,62316],{"class":45}," dashed",[28,62318,62319],{"class":45}," #e4e4e4",[28,62321,1367],{"class":34},[28,62323,62324,62327,62329,62331,62333],{"class":30,"line":16835},[28,62325,62326],{"class":45},"      padding-bottom",[28,62328,51512],{"class":34},[28,62330,659],{"class":45},[28,62332,51567],{"class":38},[28,62334,1367],{"class":34},[28,62336,62337],{"class":30,"line":16840},[28,62338,2264],{"class":34},[28,62340,62341],{"class":30,"line":16846},[28,62342,2477],{"emptyLinePlaceholder":144},[28,62344,62345,62347,62349,62351],{"class":30,"line":16860},[28,62346,62198],{"class":2040},[28,62348,62249],{"class":2040},[28,62350,6902],{"class":51375},[28,62352,15649],{"class":34},[28,62354,62355,62357,62359,62361],{"class":30,"line":16873},[28,62356,54781],{"class":45},[28,62358,51512],{"class":34},[28,62360,407],{"class":45},[28,62362,1367],{"class":34},[28,62364,62365],{"class":30,"line":16878},[28,62366,2264],{"class":34},[28,62368,62369],{"class":30,"line":16892},[28,62370,2477],{"emptyLinePlaceholder":144},[28,62372,62373,62375,62377,62380],{"class":30,"line":16897},[28,62374,62198],{"class":2040},[28,62376,62249],{"class":2040},[28,62378,62379],{"class":2040}," .name",[28,62381,15649],{"class":34},[28,62383,62384,62386,62388,62391],{"class":30,"line":16903},[28,62385,57491],{"class":45},[28,62387,51512],{"class":34},[28,62389,62390],{"class":45},"#FB7299",[28,62392,1367],{"class":34},[28,62394,62395,62397,62399,62401,62403],{"class":30,"line":16908},[28,62396,54997],{"class":45},[28,62398,51512],{"class":34},[28,62400,759],{"class":45},[28,62402,51567],{"class":38},[28,62404,1367],{"class":34},[28,62406,62407,62410,62412,62415],{"class":30,"line":16922},[28,62408,62409],{"class":45},"      font-weight",[28,62411,51512],{"class":34},[28,62413,62414],{"class":45},"bold",[28,62416,1367],{"class":34},[28,62418,62419],{"class":30,"line":16927},[28,62420,2264],{"class":34},[28,62422,62423],{"class":30,"line":16932},[28,62424,2477],{"emptyLinePlaceholder":144},[28,62426,62427,62429,62431,62434],{"class":30,"line":16946},[28,62428,62198],{"class":2040},[28,62430,62249],{"class":2040},[28,62432,62433],{"class":2040}," .text",[28,62435,15649],{"class":34},[28,62437,62438,62440,62442,62445],{"class":30,"line":16958},[28,62439,57491],{"class":45},[28,62441,51512],{"class":34},[28,62443,62444],{"class":45},"#333",[28,62446,1367],{"class":34},[28,62448,62449,62451,62453,62455,62457,62459],{"class":30,"line":16963},[28,62450,54770],{"class":45},[28,62452,51512],{"class":34},[28,62454,659],{"class":45},[28,62456,51567],{"class":38},[28,62458,4170],{"class":45},[28,62460,1367],{"class":34},[28,62462,62463],{"class":30,"line":16976},[28,62464,2264],{"class":34},[28,62466,62467],{"class":30,"line":16981},[28,62468,2477],{"emptyLinePlaceholder":144},[28,62470,62471,62473,62475,62478],{"class":30,"line":16986},[28,62472,62198],{"class":2040},[28,62474,62249],{"class":2040},[28,62476,62477],{"class":2040}," .time",[28,62479,15649],{"class":34},[28,62481,62482,62484,62486,62488],{"class":30,"line":16991},[28,62483,57491],{"class":45},[28,62485,51512],{"class":34},[28,62487,62145],{"class":45},[28,62489,1367],{"class":34},[28,62491,62492,62494,62496,62498,62500],{"class":30,"line":17004},[28,62493,54997],{"class":45},[28,62495,51512],{"class":34},[28,62497,68],{"class":45},[28,62499,51567],{"class":38},[28,62501,1367],{"class":34},[28,62503,62504],{"class":30,"line":17009},[28,62505,2264],{"class":34},[28,62507,62508,62510,62512],{"class":30,"line":32709},[28,62509,52492],{"class":34},[28,62511,136],{"class":51375},[28,62513,51382],{"class":34},[28,62515,62516,62518,62520],{"class":30,"line":32715},[28,62517,51860],{"class":34},[28,62519,51409],{"class":51375},[28,62521,51382],{"class":34},[28,62523,62524],{"class":30,"line":32721},[28,62525,2477],{"emptyLinePlaceholder":144},[28,62527,62528,62530,62532],{"class":30,"line":32727},[28,62529,99],{"class":34},[28,62531,51875],{"class":51375},[28,62533,51382],{"class":34},[28,62535,62536,62538,62540,62542,62544,62547],{"class":30,"line":32733},[28,62537,52219],{"class":34},[28,62539,51686],{"class":51375},[28,62541,53561],{"class":2040},[28,62543,39],{"class":34},[28,62545,62546],{"class":320},"\"wrapper\"",[28,62548,51382],{"class":34},[28,62550,62551,62553,62555,62557,62559,62562,62564,62566],{"class":30,"line":32744},[28,62552,51416],{"class":34},[28,62554,654],{"class":51375},[28,62556,53561],{"class":2040},[28,62558,39],{"class":34},[28,62560,62561],{"class":320},"\"avatar\"",[28,62563,55389],{"class":34},[28,62565,654],{"class":51375},[28,62567,51382],{"class":34},[28,62569,62570,62572,62574,62576,62578,62581,62583,62585,62588,62590,62592,62594,62597,62599,62602,62604,62606],{"class":30,"line":32750},[28,62571,51416],{"class":34},[28,62573,54363],{"class":51375},[28,62575,15036],{"class":2040},[28,62577,39],{"class":34},[28,62579,62580],{"class":320},"\"tx\"",[28,62582,61095],{"class":2040},[28,62584,39],{"class":34},[28,62586,62587],{"class":320},"\"发一条友善的评论\"",[28,62589,54386],{"class":2040},[28,62591,39],{"class":34},[28,62593,3778],{"class":320},[28,62595,62596],{"class":2040}," maxlength",[28,62598,39],{"class":34},[28,62600,62601],{"class":320},"\"200\"",[28,62603,55389],{"class":34},[28,62605,54363],{"class":51375},[28,62607,51382],{"class":34},[28,62609,62610,62612,62614,62617,62619],{"class":30,"line":32770},[28,62611,51416],{"class":34},[28,62613,53962],{"class":51375},[28,62615,62616],{"class":34},">发布\u003C\u002F",[28,62618,53962],{"class":51375},[28,62620,51382],{"class":34},[28,62622,62623,62625,62627],{"class":30,"line":32776},[28,62624,52492],{"class":34},[28,62626,51686],{"class":51375},[28,62628,51382],{"class":34},[28,62630,62631,62633,62635,62637,62639,62641],{"class":30,"line":32787},[28,62632,52219],{"class":34},[28,62634,51686],{"class":51375},[28,62636,53561],{"class":2040},[28,62638,39],{"class":34},[28,62640,62546],{"class":320},[28,62642,51382],{"class":34},[28,62644,62645,62647,62649,62651,62653,62656,62659,62661],{"class":30,"line":32793},[28,62646,51416],{"class":34},[28,62648,28],{"class":51375},[28,62650,53561],{"class":2040},[28,62652,39],{"class":34},[28,62654,62655],{"class":320},"\"total\"",[28,62657,62658],{"class":34},">0\u002F200字\u003C\u002F",[28,62660,28],{"class":51375},[28,62662,51382],{"class":34},[28,62664,62665,62667,62669],{"class":30,"line":32799},[28,62666,52492],{"class":34},[28,62668,51686],{"class":51375},[28,62670,51382],{"class":34},[28,62672,62673,62675,62677,62679,62681,62684],{"class":30,"line":32805},[28,62674,52219],{"class":34},[28,62676,51686],{"class":51375},[28,62678,53561],{"class":2040},[28,62680,39],{"class":34},[28,62682,62683],{"class":320},"\"list\"",[28,62685,51382],{"class":34},[28,62687,62688,62690,62692,62694,62696,62699,62702,62704,62707],{"class":30,"line":32811},[28,62689,51416],{"class":34},[28,62691,51686],{"class":51375},[28,62693,53561],{"class":2040},[28,62695,39],{"class":34},[28,62697,62698],{"class":320},"\"item\"",[28,62700,62701],{"class":2040}," style",[28,62703,39],{"class":34},[28,62705,62706],{"class":320},"\"display: none;\"",[28,62708,51382],{"class":34},[28,62710,62711,62713,62715,62717,62719,62721,62723,62725],{"class":30,"line":32817},[28,62712,55309],{"class":34},[28,62714,654],{"class":51375},[28,62716,53561],{"class":2040},[28,62718,39],{"class":34},[28,62720,62561],{"class":320},[28,62722,55389],{"class":34},[28,62724,654],{"class":51375},[28,62726,51382],{"class":34},[28,62728,62729,62731,62733,62735,62737,62740],{"class":30,"line":32823},[28,62730,55309],{"class":34},[28,62732,51686],{"class":51375},[28,62734,53561],{"class":2040},[28,62736,39],{"class":34},[28,62738,62739],{"class":320},"\"info\"",[28,62741,51382],{"class":34},[28,62743,62744,62746,62748,62750,62752,62755,62758,62760],{"class":30,"line":32829},[28,62745,55377],{"class":34},[28,62747,14],{"class":51375},[28,62749,53561],{"class":2040},[28,62751,39],{"class":34},[28,62753,62754],{"class":320},"\"name\"",[28,62756,62757],{"class":34},">清风徐来\u003C\u002F",[28,62759,14],{"class":51375},[28,62761,51382],{"class":34},[28,62763,62764,62766,62768,62770,62772,62775,62778,62780],{"class":30,"line":32849},[28,62765,55377],{"class":34},[28,62767,14],{"class":51375},[28,62769,53561],{"class":2040},[28,62771,39],{"class":34},[28,62773,62774],{"class":320},"\"text\"",[28,62776,62777],{"class":34},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[28,62779,14],{"class":51375},[28,62781,51382],{"class":34},[28,62783,62784,62786,62788,62790,62792,62795,62798,62800],{"class":30,"line":32855},[28,62785,55377],{"class":34},[28,62787,14],{"class":51375},[28,62789,53561],{"class":2040},[28,62791,39],{"class":34},[28,62793,62794],{"class":320},"\"time\"",[28,62796,62797],{"class":34},">2022-10-10 20:29:21\u003C\u002F",[28,62799,14],{"class":51375},[28,62801,51382],{"class":34},[28,62803,62804,62806,62808],{"class":30,"line":32871},[28,62805,55482],{"class":34},[28,62807,51686],{"class":51375},[28,62809,51382],{"class":34},[28,62811,62812,62814,62816],{"class":30,"line":32877},[28,62813,51851],{"class":34},[28,62815,51686],{"class":51375},[28,62817,51382],{"class":34},[28,62819,62820,62822,62824],{"class":30,"line":32891},[28,62821,52492],{"class":34},[28,62823,51686],{"class":51375},[28,62825,51382],{"class":34},[28,62827,62828,62830,62832],{"class":30,"line":32897},[28,62829,52219],{"class":34},[28,62831,51888],{"class":51375},[28,62833,51382],{"class":34},[28,62835,62836,62838,62841,62843,62845,62847,62849,62852],{"class":30,"line":32912},[28,62837,11298],{"class":38},[28,62839,62840],{"class":45}," tx",[28,62842,13641],{"class":38},[28,62844,54471],{"class":34},[28,62846,54474],{"class":2040},[28,62848,221],{"class":34},[28,62850,62851],{"class":320},"'#tx'",[28,62853,227],{"class":34},[28,62855,62856,62858,62861,62863,62865,62867,62869,62872],{"class":30,"line":32918},[28,62857,11298],{"class":38},[28,62859,62860],{"class":45}," total",[28,62862,13641],{"class":38},[28,62864,54471],{"class":34},[28,62866,54474],{"class":2040},[28,62868,221],{"class":34},[28,62870,62871],{"class":320},"'.total'",[28,62873,227],{"class":34},[28,62875,62876],{"class":30,"line":32927},[28,62877,62878],{"class":105},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[28,62880,62881,62884,62886,62888,62890,62892,62894],{"class":30,"line":32933},[28,62882,62883],{"class":34},"    tx.",[28,62885,57888],{"class":2040},[28,62887,221],{"class":34},[28,62889,61402],{"class":320},[28,62891,12512],{"class":34},[28,62893,54524],{"class":38},[28,62895,54527],{"class":34},[28,62897,62898,62901,62903],{"class":30,"line":32942},[28,62899,62900],{"class":34},"      total.style.opacity ",[28,62902,39],{"class":38},[28,62904,55774],{"class":45},[28,62906,62907],{"class":30,"line":32948},[28,62908,33537],{"class":34},[28,62910,62911],{"class":30,"line":32954},[28,62912,62913],{"class":105},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[28,62915,62916,62918,62920,62922,62924,62926,62928],{"class":30,"line":32963},[28,62917,62883],{"class":34},[28,62919,57888],{"class":2040},[28,62921,221],{"class":34},[28,62923,61463],{"class":320},[28,62925,12512],{"class":34},[28,62927,54524],{"class":38},[28,62929,54527],{"class":34},[28,62931,62932,62934,62936],{"class":30,"line":32969},[28,62933,62900],{"class":34},[28,62935,39],{"class":38},[28,62937,47409],{"class":45},[28,62939,62940],{"class":30,"line":32980},[28,62941,33537],{"class":34},[28,62943,62944],{"class":30,"line":32986},[28,62945,62946],{"class":105},"    \u002F\u002F 3. 检测用户输入\n",[28,62948,62949,62951,62953,62955,62958,62960,62962],{"class":30,"line":33005},[28,62950,62883],{"class":34},[28,62952,57888],{"class":2040},[28,62954,221],{"class":34},[28,62956,62957],{"class":320},"'input'",[28,62959,12512],{"class":34},[28,62961,54524],{"class":38},[28,62963,54527],{"class":34},[28,62965,62966],{"class":30,"line":33011},[28,62967,62968],{"class":105},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[28,62970,62971,62974,62976,62979,62982,62984,62987,62989,62991],{"class":30,"line":33022},[28,62972,62973],{"class":34},"      total.innerHTML ",[28,62975,39],{"class":38},[28,62977,62978],{"class":320}," `${",[28,62980,62981],{"class":34},"tx",[28,62983,768],{"class":320},[28,62985,62986],{"class":34},"value",[28,62988,768],{"class":320},[28,62990,52043],{"class":45},[28,62992,62993],{"class":320},"}\u002F200字`\n",[28,62995,62996],{"class":30,"line":33028},[28,62997,33537],{"class":34},[28,62999,63000],{"class":30,"line":33048},[28,63001,2477],{"emptyLinePlaceholder":144},[28,63003,63004],{"class":30,"line":33064},[28,63005,63006],{"class":105},"    \u002F\u002F const str = 'andy'\n",[28,63008,63009],{"class":30,"line":33070},[28,63010,63011],{"class":105},"    \u002F\u002F console.log(str.length)\n",[28,63013,63014,63016,63018],{"class":30,"line":33084},[28,63015,52492],{"class":34},[28,63017,51888],{"class":51375},[28,63019,51382],{"class":34},[28,63021,63022,63024,63026],{"class":30,"line":33090},[28,63023,51860],{"class":34},[28,63025,51875],{"class":51375},[28,63027,51382],{"class":34},[28,63029,63030],{"class":30,"line":33096},[28,63031,2477],{"emptyLinePlaceholder":144},[28,63033,63034,63036,63038],{"class":30,"line":33107},[28,63035,51860],{"class":34},[28,63037,50710],{"class":51375},[28,63039,51382],{"class":34},[22075,63041,63043],{"id":63042},"_3254-change事件","3.2.5.4 change事件",[14,63045,63046],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63048,63049],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63051,63052],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[18,63054,63056],{"className":50708,"code":63055,"language":50710,"meta":23,"style":23},"\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",[25,63057,63058,63068,63082,63086,63094,63108,63128,63140,63148,63152,63160,63174,63182,63200,63218,63230,63234,63242,63250,63254],{"__ignoreMap":23},[28,63059,63060,63062,63064,63066],{"class":30,"line":31},[28,63061,51372],{"class":34},[28,63063,51376],{"class":51375},[28,63065,51379],{"class":2040},[28,63067,51382],{"class":34},[28,63069,63070,63072,63074,63076,63078,63080],{"class":30,"line":94},[28,63071,99],{"class":34},[28,63073,50710],{"class":51375},[28,63075,51391],{"class":2040},[28,63077,39],{"class":34},[28,63079,51396],{"class":320},[28,63081,51382],{"class":34},[28,63083,63084],{"class":30,"line":109},[28,63085,2477],{"emptyLinePlaceholder":144},[28,63087,63088,63090,63092],{"class":30,"line":125},[28,63089,99],{"class":34},[28,63091,51409],{"class":51375},[28,63093,51382],{"class":34},[28,63095,63096,63098,63100,63102,63104,63106],{"class":30,"line":131},[28,63097,52219],{"class":34},[28,63099,51419],{"class":51375},[28,63101,51422],{"class":2040},[28,63103,39],{"class":34},[28,63105,51427],{"class":320},[28,63107,51382],{"class":34},[28,63109,63110,63112,63114,63116,63118,63120,63122,63124,63126],{"class":30,"line":1291},[28,63111,52219],{"class":34},[28,63113,51419],{"class":51375},[28,63115,14997],{"class":2040},[28,63117,39],{"class":34},[28,63119,51466],{"class":320},[28,63121,51446],{"class":2040},[28,63123,39],{"class":34},[28,63125,51473],{"class":320},[28,63127,51382],{"class":34},[28,63129,63130,63132,63134,63136,63138],{"class":30,"line":1297},[28,63131,52219],{"class":34},[28,63133,51482],{"class":51375},[28,63135,51485],{"class":34},[28,63137,51482],{"class":51375},[28,63139,51382],{"class":34},[28,63141,63142,63144,63146],{"class":30,"line":1388},[28,63143,51860],{"class":34},[28,63145,51409],{"class":51375},[28,63147,51382],{"class":34},[28,63149,63150],{"class":30,"line":1394},[28,63151,2477],{"emptyLinePlaceholder":144},[28,63153,63154,63156,63158],{"class":30,"line":1406},[28,63155,99],{"class":34},[28,63157,51875],{"class":51375},[28,63159,51382],{"class":34},[28,63161,63162,63164,63166,63168,63170,63172],{"class":30,"line":1689},[28,63163,52219],{"class":34},[28,63165,53896],{"class":51375},[28,63167,53899],{"class":2040},[28,63169,39],{"class":34},[28,63171,62774],{"class":320},[28,63173,51382],{"class":34},[28,63175,63176,63178,63180],{"class":30,"line":1694},[28,63177,52219],{"class":34},[28,63179,51888],{"class":51375},[28,63181,51382],{"class":34},[28,63183,63184,63186,63188,63190,63192,63194,63196,63198],{"class":30,"line":1700},[28,63185,11298],{"class":38},[28,63187,60680],{"class":45},[28,63189,13641],{"class":38},[28,63191,54471],{"class":34},[28,63193,54474],{"class":2040},[28,63195,221],{"class":34},[28,63197,62957],{"class":320},[28,63199,227],{"class":34},[28,63201,63202,63205,63207,63209,63212,63214,63216],{"class":30,"line":1705},[28,63203,63204],{"class":34},"    input.",[28,63206,57888],{"class":2040},[28,63208,221],{"class":34},[28,63210,63211],{"class":320},"'change'",[28,63213,12512],{"class":34},[28,63215,54524],{"class":38},[28,63217,54527],{"class":34},[28,63219,63220,63222,63224,63226,63228],{"class":30,"line":1719},[28,63221,58319],{"class":34},[28,63223,58322],{"class":2040},[28,63225,221],{"class":34},[28,63227,803],{"class":45},[28,63229,227],{"class":34},[28,63231,63232],{"class":30,"line":1724},[28,63233,33537],{"class":34},[28,63235,63236,63238,63240],{"class":30,"line":1730},[28,63237,52492],{"class":34},[28,63239,51888],{"class":51375},[28,63241,51382],{"class":34},[28,63243,63244,63246,63248],{"class":30,"line":1751},[28,63245,51860],{"class":34},[28,63247,51875],{"class":51375},[28,63249,51382],{"class":34},[28,63251,63252],{"class":30,"line":1756},[28,63253,2477],{"emptyLinePlaceholder":144},[28,63255,63256,63258,63260],{"class":30,"line":1770},[28,63257,51860],{"class":34},[28,63259,50710],{"class":51375},[28,63261,51382],{"class":34},[14,63263,63264],{},"总结：内容发生改变才回去触发",[188,63266,63268],{"id":63267},"_326-事件对象","3.2.6 事件对象",[22075,63270,63272],{"id":63271},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63274,63275],{},[1539,63276],{"alt":23,"src":63277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63279,63280],{},[1539,63281],{"alt":23,"src":63282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63284,63285],{},"点击一次，就输出了事件对象，它是个对象",[14,63287,63288],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63290,63291],{},[1539,63292],{"alt":23,"src":63293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22075,63295,63297],{"id":63296},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63299,63300],{},[1539,63301],{"alt":23,"src":63302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63304,63305],{},"实现按特殊字符才是实现打印输出效果：",[18,63307,63309],{"className":53142,"code":63308,"language":53144,"meta":23,"style":23},"\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",[25,63310,63311,63319,63324,63338,63346,63351,63356,63361,63366,63371,63376,63381,63386,63391,63395,63399,63407],{"__ignoreMap":23},[28,63312,63313,63315,63317],{"class":30,"line":31},[28,63314,99],{"class":34},[28,63316,51875],{"class":51375},[28,63318,51382],{"class":34},[28,63320,63321],{"class":30,"line":94},[28,63322,63323],{"class":105},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[28,63325,63326,63328,63330,63332,63334,63336],{"class":30,"line":109},[28,63327,52219],{"class":34},[28,63329,53896],{"class":51375},[28,63331,53899],{"class":2040},[28,63333,39],{"class":34},[28,63335,62774],{"class":320},[28,63337,51382],{"class":34},[28,63339,63340,63342,63344],{"class":30,"line":125},[28,63341,52219],{"class":34},[28,63343,51888],{"class":51375},[28,63345,51382],{"class":34},[28,63347,63348],{"class":30,"line":131},[28,63349,63350],{"class":34},"    \u002F\u002F const btn = document.querySelector('button')\n",[28,63352,63353],{"class":30,"line":1291},[28,63354,63355],{"class":34},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[28,63357,63358],{"class":30,"line":1297},[28,63359,63360],{"class":34},"    \u002F\u002F   console.log(e);\n",[28,63362,63363],{"class":30,"line":1388},[28,63364,63365],{"class":34},"    \u002F\u002F })\n",[28,63367,63368],{"class":30,"line":1394},[28,63369,63370],{"class":34},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[28,63372,63373],{"class":30,"line":1406},[28,63374,63375],{"class":34},"    const input = document.querySelector('input')\n",[28,63377,63378],{"class":30,"line":1689},[28,63379,63380],{"class":34},"    input.addEventListener('keyup', function (e) {\n",[28,63382,63383],{"class":30,"line":1694},[28,63384,63385],{"class":34},"      if (e.key === 'Enter') {\n",[28,63387,63388],{"class":30,"line":1700},[28,63389,63390],{"class":34},"        console.log('我按下了回车键')\n",[28,63392,63393],{"class":30,"line":1705},[28,63394,52473],{"class":34},[28,63396,63397],{"class":30,"line":1719},[28,63398,33537],{"class":34},[28,63400,63401,63403,63405],{"class":30,"line":1724},[28,63402,52492],{"class":34},[28,63404,51888],{"class":51375},[28,63406,51382],{"class":34},[28,63408,63409,63411,63413],{"class":30,"line":1730},[28,63410,51860],{"class":34},[28,63412,51875],{"class":51375},[28,63414,51382],{"class":34},[22075,63416,63418],{"id":63417},"_3263-trim方法","3.2.6.3 trim方法",[14,63420,63421],{},[1539,63422],{"alt":23,"src":63423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63425,63426],{},[1539,63427],{"alt":23,"src":63428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63430,63431],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63433,63434],{},"str.trim()",[188,63436,63438],{"id":63437},"_327-环境对象","3.2.7 环境对象",[14,63440,63441],{},[1539,63442],{"alt":23,"src":63443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63445,63446],{},[1539,63447],{"alt":23,"src":63448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63450,63451],{},[1539,63452],{"alt":23,"src":63453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63455,63456],{},"实际函数调用是window.fn()",[14,63458,63459],{},"普通函数里面this指向的是window",[1211,63461,63462,63465,63468],{},[174,63463,63464],{},"在普通函数下，this指向的是window",[174,63466,63467],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[174,63469,63470],{},"箭头函数没有this",[14,63472,63473],{},"粗略记法就是：谁调用，this就指向谁",[14,63475,63476],{},[1539,63477],{"alt":23,"src":63478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63480,63481],{},[1539,63482],{"alt":23,"src":63483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63485,63486],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63488,63489],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[18,63491,63493],{"className":53142,"code":63492,"language":53144,"meta":23,"style":23},"\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",[25,63494,63495,63503,63515,63523,63528,63533,63538,63543,63547,63555],{"__ignoreMap":23},[28,63496,63497,63499,63501],{"class":30,"line":31},[28,63498,99],{"class":34},[28,63500,51875],{"class":51375},[28,63502,51382],{"class":34},[28,63504,63505,63507,63509,63511,63513],{"class":30,"line":94},[28,63506,52219],{"class":34},[28,63508,53962],{"class":51375},[28,63510,53968],{"class":34},[28,63512,53962],{"class":51375},[28,63514,51382],{"class":34},[28,63516,63517,63519,63521],{"class":30,"line":109},[28,63518,52219],{"class":34},[28,63520,51888],{"class":51375},[28,63522,51382],{"class":34},[28,63524,63525],{"class":30,"line":125},[28,63526,63527],{"class":34},"    const button = document.querySelector('button')\n",[28,63529,63530],{"class":30,"line":131},[28,63531,63532],{"class":34},"    button.addEventListener('click', function () {\n",[28,63534,63535],{"class":30,"line":1291},[28,63536,63537],{"class":34},"      \u002F\u002F console.log(this);\n",[28,63539,63540],{"class":30,"line":1297},[28,63541,63542],{"class":34},"      this.style.color = 'pink'\n",[28,63544,63545],{"class":30,"line":1388},[28,63546,33537],{"class":34},[28,63548,63549,63551,63553],{"class":30,"line":1394},[28,63550,52492],{"class":34},[28,63552,51888],{"class":51375},[28,63554,51382],{"class":34},[28,63556,63557,63559,63561],{"class":30,"line":1406},[28,63558,51860],{"class":34},[28,63560,51875],{"class":51375},[28,63562,51382],{"class":34},[188,63564,63566],{"id":63565},"_328-回调函数","3.2.8 回调函数",[14,63568,63569],{},[1539,63570],{"alt":23,"src":63571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63573,63574],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63576,11409],{},[1211,63578,63579,63582,63585],{},[174,63580,63581],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[174,63583,63584],{},"回调函数本质还是函数，只不过把它当成参数使用",[174,63586,63587],{},"使用匿名函数做为回调函数比较常见",[188,63589,63591],{"id":63590},"_329-tab栏切换","3.2.9 tab栏切换",[14,63593,63594],{},[1539,63595],{"alt":23,"src":63596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[18,63598,63600],{"className":50708,"code":63599,"language":50710,"meta":23,"style":23},"\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",[25,63601,63602,63612,63626,63630,63638,63652,63672,63692,63705,63713,63719,63729,63739,63743,63747,63754,63767,63780,63792,63808,63812,63816,63823,63835,63847,63859,63869,63879,63883,63887,63896,63908,63919,63931,63935,63939,63947,63957,63967,63977,63981,63985,63995,64009,64021,64025,64029,64041,64052,64069,64079,64083,64087,64102,64113,64123,64127,64131,64138,64153,64157,64161,64169,64179,64183,64187,64196,64206,64210,64218,64226,64230,64238,64253,64268,64281,64289,64323,64350,64377,64404,64431,64439,64447,64462,64499,64534,64569,64604,64639,64647,64655,64663,64668,64673,64693,64698,64727,64732,64737,64755,64760,64765,64770,64792,64797,64813,64817,64822,64827,64848,64853,64882,64886,64891,64895,64903,64911,64915],{"__ignoreMap":23},[28,63603,63604,63606,63608,63610],{"class":30,"line":31},[28,63605,51372],{"class":34},[28,63607,51376],{"class":51375},[28,63609,51379],{"class":2040},[28,63611,51382],{"class":34},[28,63613,63614,63616,63618,63620,63622,63624],{"class":30,"line":94},[28,63615,99],{"class":34},[28,63617,50710],{"class":51375},[28,63619,51391],{"class":2040},[28,63621,39],{"class":34},[28,63623,51396],{"class":320},[28,63625,51382],{"class":34},[28,63627,63628],{"class":30,"line":109},[28,63629,2477],{"emptyLinePlaceholder":144},[28,63631,63632,63634,63636],{"class":30,"line":125},[28,63633,99],{"class":34},[28,63635,51409],{"class":51375},[28,63637,51382],{"class":34},[28,63639,63640,63642,63644,63646,63648,63650],{"class":30,"line":131},[28,63641,52219],{"class":34},[28,63643,51419],{"class":51375},[28,63645,51422],{"class":2040},[28,63647,39],{"class":34},[28,63649,51427],{"class":320},[28,63651,59202],{"class":34},[28,63653,63654,63656,63658,63660,63662,63664,63666,63668,63670],{"class":30,"line":1291},[28,63655,52219],{"class":34},[28,63657,51419],{"class":51375},[28,63659,51438],{"class":2040},[28,63661,39],{"class":34},[28,63663,51443],{"class":320},[28,63665,51446],{"class":2040},[28,63667,39],{"class":34},[28,63669,51451],{"class":320},[28,63671,59202],{"class":34},[28,63673,63674,63676,63678,63680,63682,63684,63686,63688,63690],{"class":30,"line":1297},[28,63675,52219],{"class":34},[28,63677,51419],{"class":51375},[28,63679,14997],{"class":2040},[28,63681,39],{"class":34},[28,63683,51466],{"class":320},[28,63685,51446],{"class":2040},[28,63687,39],{"class":34},[28,63689,51473],{"class":320},[28,63691,59202],{"class":34},[28,63693,63694,63696,63698,63701,63703],{"class":30,"line":1388},[28,63695,52219],{"class":34},[28,63697,51482],{"class":51375},[28,63699,63700],{"class":34},">tab栏切换\u003C\u002F",[28,63702,51482],{"class":51375},[28,63704,51382],{"class":34},[28,63706,63707,63709,63711],{"class":30,"line":1394},[28,63708,52219],{"class":34},[28,63710,136],{"class":51375},[28,63712,51382],{"class":34},[28,63714,63715,63717],{"class":30,"line":1406},[28,63716,6480],{"class":51375},[28,63718,15649],{"class":34},[28,63720,63721,63723,63725,63727],{"class":30,"line":1689},[28,63722,54781],{"class":45},[28,63724,51512],{"class":34},[28,63726,407],{"class":45},[28,63728,1367],{"class":34},[28,63730,63731,63733,63735,63737],{"class":30,"line":1694},[28,63732,54770],{"class":45},[28,63734,51512],{"class":34},[28,63736,407],{"class":45},[28,63738,1367],{"class":34},[28,63740,63741],{"class":30,"line":1700},[28,63742,2264],{"class":34},[28,63744,63745],{"class":30,"line":1705},[28,63746,2477],{"emptyLinePlaceholder":144},[28,63748,63749,63752],{"class":30,"line":1719},[28,63750,63751],{"class":2040},"    .tab",[28,63753,15649],{"class":34},[28,63755,63756,63758,63760,63763,63765],{"class":30,"line":1724},[28,63757,54846],{"class":45},[28,63759,51512],{"class":34},[28,63761,63762],{"class":45},"590",[28,63764,51567],{"class":38},[28,63766,1367],{"class":34},[28,63768,63769,63771,63773,63776,63778],{"class":30,"line":1730},[28,63770,54860],{"class":45},[28,63772,51512],{"class":34},[28,63774,63775],{"class":45},"340",[28,63777,51567],{"class":38},[28,63779,1367],{"class":34},[28,63781,63782,63784,63786,63788,63790],{"class":30,"line":1751},[28,63783,54781],{"class":45},[28,63785,51512],{"class":34},[28,63787,102],{"class":45},[28,63789,51567],{"class":38},[28,63791,1367],{"class":34},[28,63793,63794,63796,63798,63800,63802,63804,63806],{"class":30,"line":1756},[28,63795,62052],{"class":45},[28,63797,51512],{"class":34},[28,63799,46],{"class":45},[28,63801,51567],{"class":38},[28,63803,51596],{"class":45},[28,63805,62319],{"class":45},[28,63807,1367],{"class":34},[28,63809,63810],{"class":30,"line":1770},[28,63811,2264],{"class":34},[28,63813,63814],{"class":30,"line":1775},[28,63815,2477],{"emptyLinePlaceholder":144},[28,63817,63818,63821],{"class":30,"line":1804},[28,63819,63820],{"class":2040},"    .tab-nav",[28,63822,15649],{"class":34},[28,63824,63825,63827,63829,63831,63833],{"class":30,"line":1809},[28,63826,54846],{"class":45},[28,63828,51512],{"class":34},[28,63830,525],{"class":45},[28,63832,542],{"class":38},[28,63834,1367],{"class":34},[28,63836,63837,63839,63841,63843,63845],{"class":30,"line":1826},[28,63838,54860],{"class":45},[28,63840,51512],{"class":34},[28,63842,1113],{"class":45},[28,63844,51567],{"class":38},[28,63846,1367],{"class":34},[28,63848,63849,63851,63853,63855,63857],{"class":30,"line":1831},[28,63850,57434],{"class":45},[28,63852,51512],{"class":34},[28,63854,1113],{"class":45},[28,63856,51567],{"class":38},[28,63858,1367],{"class":34},[28,63860,63861,63863,63865,63867],{"class":30,"line":1836},[28,63862,55084],{"class":45},[28,63864,51512],{"class":34},[28,63866,51552],{"class":45},[28,63868,1367],{"class":34},[28,63870,63871,63873,63875,63877],{"class":30,"line":1841},[28,63872,55095],{"class":45},[28,63874,51512],{"class":34},[28,63876,51743],{"class":45},[28,63878,1367],{"class":34},[28,63880,63881],{"class":30,"line":1855},[28,63882,2264],{"class":34},[28,63884,63885],{"class":30,"line":1860},[28,63886,2477],{"emptyLinePlaceholder":144},[28,63888,63889,63891,63894],{"class":30,"line":2654},[28,63890,63820],{"class":2040},[28,63892,63893],{"class":51375}," h3",[28,63895,15649],{"class":34},[28,63897,63898,63900,63902,63904,63906],{"class":30,"line":2668},[28,63899,54997],{"class":45},[28,63901,51512],{"class":34},[28,63903,1006],{"class":45},[28,63905,51567],{"class":38},[28,63907,1367],{"class":34},[28,63909,63910,63912,63914,63917],{"class":30,"line":2676},[28,63911,62409],{"class":45},[28,63913,51512],{"class":34},[28,63915,63916],{"class":45},"normal",[28,63918,1367],{"class":34},[28,63920,63921,63923,63925,63927,63929],{"class":30,"line":2681},[28,63922,62075],{"class":45},[28,63924,51512],{"class":34},[28,63926,102],{"class":45},[28,63928,51567],{"class":38},[28,63930,1367],{"class":34},[28,63932,63933],{"class":30,"line":2687},[28,63934,2264],{"class":34},[28,63936,63937],{"class":30,"line":2693},[28,63938,2477],{"emptyLinePlaceholder":144},[28,63940,63941,63943,63945],{"class":30,"line":2698},[28,63942,63820],{"class":2040},[28,63944,61367],{"class":51375},[28,63946,15649],{"class":34},[28,63948,63949,63951,63953,63955],{"class":30,"line":8025},[28,63950,54807],{"class":45},[28,63952,51512],{"class":34},[28,63954,54812],{"class":45},[28,63956,1367],{"class":34},[28,63958,63959,63961,63963,63965],{"class":30,"line":8049},[28,63960,55084],{"class":45},[28,63962,51512],{"class":34},[28,63964,51552],{"class":45},[28,63966,1367],{"class":34},[28,63968,63969,63971,63973,63975],{"class":30,"line":8054},[28,63970,55095],{"class":45},[28,63972,51512],{"class":34},[28,63974,51655],{"class":45},[28,63976,1367],{"class":34},[28,63978,63979],{"class":30,"line":8060},[28,63980,2264],{"class":34},[28,63982,63983],{"class":30,"line":8087},[28,63984,2477],{"emptyLinePlaceholder":144},[28,63986,63987,63989,63991,63993],{"class":30,"line":8092},[28,63988,63820],{"class":2040},[28,63990,61367],{"class":51375},[28,63992,55150],{"class":51375},[28,63994,15649],{"class":34},[28,63996,63997,63999,64001,64003,64005,64007],{"class":30,"line":8098},[28,63998,54781],{"class":45},[28,64000,51512],{"class":34},[28,64002,407],{"class":45},[28,64004,9027],{"class":45},[28,64006,51567],{"class":38},[28,64008,1367],{"class":34},[28,64010,64011,64013,64015,64017,64019],{"class":30,"line":8110},[28,64012,54997],{"class":45},[28,64014,51512],{"class":34},[28,64016,759],{"class":45},[28,64018,51567],{"class":38},[28,64020,1367],{"class":34},[28,64022,64023],{"class":30,"line":8122},[28,64024,2264],{"class":34},[28,64026,64027],{"class":30,"line":8134},[28,64028,2477],{"emptyLinePlaceholder":144},[28,64030,64031,64033,64035,64037,64039],{"class":30,"line":9793},[28,64032,63820],{"class":2040},[28,64034,61367],{"class":51375},[28,64036,55150],{"class":51375},[28,64038,1475],{"class":51375},[28,64040,15649],{"class":34},[28,64042,64043,64046,64048,64050],{"class":30,"line":9818},[28,64044,64045],{"class":45},"      text-decoration",[28,64047,51512],{"class":34},[28,64049,54812],{"class":45},[28,64051,1367],{"class":34},[28,64053,64054,64056,64058,64060,64062,64064,64067],{"class":30,"line":9841},[28,64055,62307],{"class":45},[28,64057,51512],{"class":34},[28,64059,52],{"class":45},[28,64061,51567],{"class":38},[28,64063,51596],{"class":45},[28,64065,64066],{"class":45}," transparent",[28,64068,1367],{"class":34},[28,64070,64071,64073,64075,64077],{"class":30,"line":9865},[28,64072,57491],{"class":45},[28,64074,51512],{"class":34},[28,64076,62444],{"class":45},[28,64078,1367],{"class":34},[28,64080,64081],{"class":30,"line":9870},[28,64082,2264],{"class":34},[28,64084,64085],{"class":30,"line":9875},[28,64086,2477],{"emptyLinePlaceholder":144},[28,64088,64089,64091,64093,64095,64097,64100],{"class":30,"line":9880},[28,64090,63820],{"class":2040},[28,64092,61367],{"class":51375},[28,64094,55150],{"class":51375},[28,64096,1475],{"class":51375},[28,64098,64099],{"class":2040},".active",[28,64101,15649],{"class":34},[28,64103,64104,64106,64108,64111],{"class":30,"line":9889},[28,64105,61866],{"class":45},[28,64107,51512],{"class":34},[28,64109,64110],{"class":45},"#e1251b",[28,64112,1367],{"class":34},[28,64114,64115,64117,64119,64121],{"class":30,"line":9894},[28,64116,57491],{"class":45},[28,64118,51512],{"class":34},[28,64120,64110],{"class":45},[28,64122,1367],{"class":34},[28,64124,64125],{"class":30,"line":9900},[28,64126,2264],{"class":34},[28,64128,64129],{"class":30,"line":9921},[28,64130,2477],{"emptyLinePlaceholder":144},[28,64132,64133,64136],{"class":30,"line":9927},[28,64134,64135],{"class":2040},"    .tab-content",[28,64137,15649],{"class":34},[28,64139,64140,64142,64144,64146,64149,64151],{"class":30,"line":9941},[28,64141,54770],{"class":45},[28,64143,51512],{"class":34},[28,64145,407],{"class":45},[28,64147,64148],{"class":45}," 16",[28,64150,51567],{"class":38},[28,64152,1367],{"class":34},[28,64154,64155],{"class":30,"line":9947},[28,64156,2264],{"class":34},[28,64158,64159],{"class":30,"line":9974},[28,64160,2477],{"emptyLinePlaceholder":144},[28,64162,64163,64165,64167],{"class":30,"line":9983},[28,64164,64135],{"class":2040},[28,64166,62249],{"class":2040},[28,64168,15649],{"class":34},[28,64170,64171,64173,64175,64177],{"class":30,"line":9989},[28,64172,55084],{"class":45},[28,64174,51512],{"class":34},[28,64176,54812],{"class":45},[28,64178,1367],{"class":34},[28,64180,64181],{"class":30,"line":9997},[28,64182,2264],{"class":34},[28,64184,64185],{"class":30,"line":10002},[28,64186,2477],{"emptyLinePlaceholder":144},[28,64188,64189,64191,64194],{"class":30,"line":16681},[28,64190,64135],{"class":2040},[28,64192,64193],{"class":2040}," .item.active",[28,64195,15649],{"class":34},[28,64197,64198,64200,64202,64204],{"class":30,"line":16687},[28,64199,55084],{"class":45},[28,64201,51512],{"class":34},[28,64203,60944],{"class":45},[28,64205,1367],{"class":34},[28,64207,64208],{"class":30,"line":16710},[28,64209,2264],{"class":34},[28,64211,64212,64214,64216],{"class":30,"line":16716},[28,64213,52492],{"class":34},[28,64215,136],{"class":51375},[28,64217,51382],{"class":34},[28,64219,64220,64222,64224],{"class":30,"line":16739},[28,64221,51860],{"class":34},[28,64223,51409],{"class":51375},[28,64225,51382],{"class":34},[28,64227,64228],{"class":30,"line":16753},[28,64229,2477],{"emptyLinePlaceholder":144},[28,64231,64232,64234,64236],{"class":30,"line":16773},[28,64233,99],{"class":34},[28,64235,51875],{"class":51375},[28,64237,51382],{"class":34},[28,64239,64240,64242,64244,64246,64248,64251],{"class":30,"line":16779},[28,64241,52219],{"class":34},[28,64243,51686],{"class":51375},[28,64245,53561],{"class":2040},[28,64247,39],{"class":34},[28,64249,64250],{"class":320},"\"tab\"",[28,64252,51382],{"class":34},[28,64254,64255,64257,64259,64261,64263,64266],{"class":30,"line":16790},[28,64256,51416],{"class":34},[28,64258,51686],{"class":51375},[28,64260,53561],{"class":2040},[28,64262,39],{"class":34},[28,64264,64265],{"class":320},"\"tab-nav\"",[28,64267,51382],{"class":34},[28,64269,64270,64272,64274,64277,64279],{"class":30,"line":16813},[28,64271,55309],{"class":34},[28,64273,188],{"class":51375},[28,64275,64276],{"class":34},">每日特价\u003C\u002F",[28,64278,188],{"class":51375},[28,64280,51382],{"class":34},[28,64282,64283,64285,64287],{"class":30,"line":16835},[28,64284,55309],{"class":34},[28,64286,1211],{"class":51375},[28,64288,51382],{"class":34},[28,64290,64291,64293,64295,64297,64299,64301,64303,64305,64307,64309,64312,64315,64317,64319,64321],{"class":30,"line":16840},[28,64292,55377],{"class":34},[28,64294,174],{"class":51375},[28,64296,61127],{"class":34},[28,64298,35],{"class":51375},[28,64300,53561],{"class":2040},[28,64302,39],{"class":34},[28,64304,59781],{"class":320},[28,64306,61132],{"class":2040},[28,64308,39],{"class":34},[28,64310,64311],{"class":320},"\"javascript:;\"",[28,64313,64314],{"class":34},">精选\u003C\u002F",[28,64316,35],{"class":51375},[28,64318,55389],{"class":34},[28,64320,174],{"class":51375},[28,64322,51382],{"class":34},[28,64324,64325,64327,64329,64331,64333,64335,64337,64339,64342,64344,64346,64348],{"class":30,"line":16846},[28,64326,55377],{"class":34},[28,64328,174],{"class":51375},[28,64330,61127],{"class":34},[28,64332,35],{"class":51375},[28,64334,61132],{"class":2040},[28,64336,39],{"class":34},[28,64338,64311],{"class":320},[28,64340,64341],{"class":34},">美食\u003C\u002F",[28,64343,35],{"class":51375},[28,64345,55389],{"class":34},[28,64347,174],{"class":51375},[28,64349,51382],{"class":34},[28,64351,64352,64354,64356,64358,64360,64362,64364,64366,64369,64371,64373,64375],{"class":30,"line":16860},[28,64353,55377],{"class":34},[28,64355,174],{"class":51375},[28,64357,61127],{"class":34},[28,64359,35],{"class":51375},[28,64361,61132],{"class":2040},[28,64363,39],{"class":34},[28,64365,64311],{"class":320},[28,64367,64368],{"class":34},">百货\u003C\u002F",[28,64370,35],{"class":51375},[28,64372,55389],{"class":34},[28,64374,174],{"class":51375},[28,64376,51382],{"class":34},[28,64378,64379,64381,64383,64385,64387,64389,64391,64393,64396,64398,64400,64402],{"class":30,"line":16873},[28,64380,55377],{"class":34},[28,64382,174],{"class":51375},[28,64384,61127],{"class":34},[28,64386,35],{"class":51375},[28,64388,61132],{"class":2040},[28,64390,39],{"class":34},[28,64392,64311],{"class":320},[28,64394,64395],{"class":34},">个护\u003C\u002F",[28,64397,35],{"class":51375},[28,64399,55389],{"class":34},[28,64401,174],{"class":51375},[28,64403,51382],{"class":34},[28,64405,64406,64408,64410,64412,64414,64416,64418,64420,64423,64425,64427,64429],{"class":30,"line":16878},[28,64407,55377],{"class":34},[28,64409,174],{"class":51375},[28,64411,61127],{"class":34},[28,64413,35],{"class":51375},[28,64415,61132],{"class":2040},[28,64417,39],{"class":34},[28,64419,64311],{"class":320},[28,64421,64422],{"class":34},">预告\u003C\u002F",[28,64424,35],{"class":51375},[28,64426,55389],{"class":34},[28,64428,174],{"class":51375},[28,64430,51382],{"class":34},[28,64432,64433,64435,64437],{"class":30,"line":16892},[28,64434,55482],{"class":34},[28,64436,1211],{"class":51375},[28,64438,51382],{"class":34},[28,64440,64441,64443,64445],{"class":30,"line":16897},[28,64442,51851],{"class":34},[28,64444,51686],{"class":51375},[28,64446,51382],{"class":34},[28,64448,64449,64451,64453,64455,64457,64460],{"class":30,"line":16903},[28,64450,51416],{"class":34},[28,64452,51686],{"class":51375},[28,64454,53561],{"class":2040},[28,64456,39],{"class":34},[28,64458,64459],{"class":320},"\"tab-content\"",[28,64461,51382],{"class":34},[28,64463,64464,64466,64468,64470,64472,64475,64477,64479,64481,64483,64486,64488,64490,64492,64495,64497],{"class":30,"line":16908},[28,64465,55309],{"class":34},[28,64467,51686],{"class":51375},[28,64469,53561],{"class":2040},[28,64471,39],{"class":34},[28,64473,64474],{"class":320},"\"item active\"",[28,64476,61127],{"class":34},[28,64478,1539],{"class":51375},[28,64480,55314],{"class":2040},[28,64482,39],{"class":34},[28,64484,64485],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[28,64487,55322],{"class":2040},[28,64489,39],{"class":34},[28,64491,7729],{"class":320},[28,64493,64494],{"class":34}," \u002F>\u003C\u002F",[28,64496,51686],{"class":51375},[28,64498,51382],{"class":34},[28,64500,64501,64503,64505,64507,64509,64511,64513,64515,64517,64519,64522,64524,64526,64528,64530,64532],{"class":30,"line":16922},[28,64502,55309],{"class":34},[28,64504,51686],{"class":51375},[28,64506,53561],{"class":2040},[28,64508,39],{"class":34},[28,64510,62698],{"class":320},[28,64512,61127],{"class":34},[28,64514,1539],{"class":51375},[28,64516,55314],{"class":2040},[28,64518,39],{"class":34},[28,64520,64521],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[28,64523,55322],{"class":2040},[28,64525,39],{"class":34},[28,64527,7729],{"class":320},[28,64529,64494],{"class":34},[28,64531,51686],{"class":51375},[28,64533,51382],{"class":34},[28,64535,64536,64538,64540,64542,64544,64546,64548,64550,64552,64554,64557,64559,64561,64563,64565,64567],{"class":30,"line":16927},[28,64537,55309],{"class":34},[28,64539,51686],{"class":51375},[28,64541,53561],{"class":2040},[28,64543,39],{"class":34},[28,64545,62698],{"class":320},[28,64547,61127],{"class":34},[28,64549,1539],{"class":51375},[28,64551,55314],{"class":2040},[28,64553,39],{"class":34},[28,64555,64556],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[28,64558,55322],{"class":2040},[28,64560,39],{"class":34},[28,64562,7729],{"class":320},[28,64564,64494],{"class":34},[28,64566,51686],{"class":51375},[28,64568,51382],{"class":34},[28,64570,64571,64573,64575,64577,64579,64581,64583,64585,64587,64589,64592,64594,64596,64598,64600,64602],{"class":30,"line":16932},[28,64572,55309],{"class":34},[28,64574,51686],{"class":51375},[28,64576,53561],{"class":2040},[28,64578,39],{"class":34},[28,64580,62698],{"class":320},[28,64582,61127],{"class":34},[28,64584,1539],{"class":51375},[28,64586,55314],{"class":2040},[28,64588,39],{"class":34},[28,64590,64591],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[28,64593,55322],{"class":2040},[28,64595,39],{"class":34},[28,64597,7729],{"class":320},[28,64599,64494],{"class":34},[28,64601,51686],{"class":51375},[28,64603,51382],{"class":34},[28,64605,64606,64608,64610,64612,64614,64616,64618,64620,64622,64624,64627,64629,64631,64633,64635,64637],{"class":30,"line":16946},[28,64607,55309],{"class":34},[28,64609,51686],{"class":51375},[28,64611,53561],{"class":2040},[28,64613,39],{"class":34},[28,64615,62698],{"class":320},[28,64617,61127],{"class":34},[28,64619,1539],{"class":51375},[28,64621,55314],{"class":2040},[28,64623,39],{"class":34},[28,64625,64626],{"class":320},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[28,64628,55322],{"class":2040},[28,64630,39],{"class":34},[28,64632,7729],{"class":320},[28,64634,64494],{"class":34},[28,64636,51686],{"class":51375},[28,64638,51382],{"class":34},[28,64640,64641,64643,64645],{"class":30,"line":16958},[28,64642,51851],{"class":34},[28,64644,51686],{"class":51375},[28,64646,51382],{"class":34},[28,64648,64649,64651,64653],{"class":30,"line":16963},[28,64650,52492],{"class":34},[28,64652,51686],{"class":51375},[28,64654,51382],{"class":34},[28,64656,64657,64659,64661],{"class":30,"line":16976},[28,64658,52219],{"class":34},[28,64660,51888],{"class":51375},[28,64662,51382],{"class":34},[28,64664,64665],{"class":30,"line":16981},[28,64666,64667],{"class":105},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[28,64669,64670],{"class":30,"line":16986},[28,64671,64672],{"class":105},"    \u002F\u002F 1.1 获取 a 元素 \n",[28,64674,64675,64677,64680,64682,64684,64686,64688,64691],{"class":30,"line":16991},[28,64676,11298],{"class":38},[28,64678,64679],{"class":45}," as",[28,64681,13641],{"class":38},[28,64683,54471],{"class":34},[28,64685,55756],{"class":2040},[28,64687,221],{"class":34},[28,64689,64690],{"class":320},"'.tab-nav a'",[28,64692,227],{"class":34},[28,64694,64695],{"class":30,"line":17004},[28,64696,64697],{"class":105},"    \u002F\u002F console.log(as) \n",[28,64699,64700,64702,64704,64706,64708,64710,64712,64714,64716,64719,64721,64723,64725],{"class":30,"line":17009},[28,64701,3278],{"class":38},[28,64703,1735],{"class":34},[28,64705,51922],{"class":38},[28,64707,9515],{"class":34},[28,64709,39],{"class":38},[28,64711,4170],{"class":45},[28,64713,9522],{"class":34},[28,64715,99],{"class":38},[28,64717,64718],{"class":34}," as.",[28,64720,52043],{"class":45},[28,64722,3291],{"class":34},[28,64724,2369],{"class":38},[28,64726,12519],{"class":34},[28,64728,64729],{"class":30,"line":32709},[28,64730,64731],{"class":105},"      \u002F\u002F console.log(as[i])\n",[28,64733,64734],{"class":30,"line":32715},[28,64735,64736],{"class":105},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[28,64738,64739,64742,64744,64746,64749,64751,64753],{"class":30,"line":32721},[28,64740,64741],{"class":34},"      as[i].",[28,64743,57888],{"class":2040},[28,64745,221],{"class":34},[28,64747,64748],{"class":320},"'mouseenter'",[28,64750,12512],{"class":34},[28,64752,54524],{"class":38},[28,64754,54527],{"class":34},[28,64756,64757],{"class":30,"line":32727},[28,64758,64759],{"class":105},"        \u002F\u002F console.log('鼠标经过')\n",[28,64761,64762],{"class":30,"line":32733},[28,64763,64764],{"class":105},"        \u002F\u002F 排他思想  \n",[28,64766,64767],{"class":30,"line":32744},[28,64768,64769],{"class":105},"        \u002F\u002F 干掉别人 移除类active\n",[28,64771,64772,64774,64776,64778,64781,64783,64785,64787,64790],{"class":30,"line":32750},[28,64773,52000],{"class":34},[28,64775,54474],{"class":2040},[28,64777,221],{"class":34},[28,64779,64780],{"class":320},"'.tab-nav .active'",[28,64782,57078],{"class":34},[28,64784,57081],{"class":2040},[28,64786,221],{"class":34},[28,64788,64789],{"class":320},"'active'",[28,64791,227],{"class":34},[28,64793,64794],{"class":30,"line":32770},[28,64795,64796],{"class":105},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[28,64798,64799,64802,64805,64807,64809,64811],{"class":30,"line":32776},[28,64800,64801],{"class":45},"        this",[28,64803,64804],{"class":34},".classList.",[28,64806,5411],{"class":2040},[28,64808,221],{"class":34},[28,64810,64789],{"class":320},[28,64812,227],{"class":34},[28,64814,64815],{"class":30,"line":32787},[28,64816,2477],{"emptyLinePlaceholder":144},[28,64818,64819],{"class":30,"line":32793},[28,64820,64821],{"class":105},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[28,64823,64824],{"class":30,"line":32799},[28,64825,64826],{"class":105},"        \u002F\u002F 干掉别人\n",[28,64828,64829,64831,64833,64835,64838,64840,64842,64844,64846],{"class":30,"line":32805},[28,64830,52000],{"class":34},[28,64832,54474],{"class":2040},[28,64834,221],{"class":34},[28,64836,64837],{"class":320},"'.tab-content .active'",[28,64839,57078],{"class":34},[28,64841,57081],{"class":2040},[28,64843,221],{"class":34},[28,64845,64789],{"class":320},[28,64847,227],{"class":34},[28,64849,64850],{"class":30,"line":32811},[28,64851,64852],{"class":105},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[28,64854,64855,64857,64859,64861,64864,64866,64868,64870,64872,64874,64876,64878,64880],{"class":30,"line":32817},[28,64856,52000],{"class":34},[28,64858,54474],{"class":2040},[28,64860,221],{"class":34},[28,64862,64863],{"class":320},"`.tab-content .item:nth-child(${",[28,64865,654],{"class":34},[28,64867,45642],{"class":38},[28,64869,25196],{"class":45},[28,64871,57107],{"class":320},[28,64873,57078],{"class":34},[28,64875,5411],{"class":2040},[28,64877,221],{"class":34},[28,64879,64789],{"class":320},[28,64881,227],{"class":34},[28,64883,64884],{"class":30,"line":32823},[28,64885,2477],{"emptyLinePlaceholder":144},[28,64887,64888],{"class":30,"line":32829},[28,64889,64890],{"class":34},"      })\n",[28,64892,64893],{"class":30,"line":32849},[28,64894,2264],{"class":34},[28,64896,64897,64899,64901],{"class":30,"line":32855},[28,64898,52492],{"class":34},[28,64900,51888],{"class":51375},[28,64902,51382],{"class":34},[28,64904,64905,64907,64909],{"class":30,"line":32871},[28,64906,51860],{"class":34},[28,64908,51875],{"class":51375},[28,64910,51382],{"class":34},[28,64912,64913],{"class":30,"line":32877},[28,64914,2477],{"emptyLinePlaceholder":144},[28,64916,64917,64919,64921],{"class":30,"line":32891},[28,64918,51860],{"class":34},[28,64920,50710],{"class":51375},[28,64922,51382],{"class":34},[14,64924,64925],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64927,64928],{},"在监听事件中，this指向的就是他的调用者",[14,64930,64931],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64933,53795],{},[14,64935,64936],{},"(function () {",[14,64938,64939],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64941,64942],{},"list.addEventListener('click', function (e) {",[14,64944,64945],{},"if (e.target.tagName === 'A') {",[14,64947,64948],{},"\u002F\u002F 排他思想",[14,64950,64951],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64953,64954],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64956,64957],{},"\u002F\u002F console.log(old);",[14,64959,64960],{},"\u002F\u002F 判断",[14,64962,64963],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64965,64966],{},"if (old) old.classList.remove('active')",[14,64968,64969],{},"e.target.classList.add('active')",[14,64971,1150],{},[14,64973,52539],{},[14,64975,64976],{},"})();",[188,64978,64980],{"id":64979},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[18,64982,64984],{"className":50708,"code":64983,"language":50710,"meta":23,"style":23},"\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",[25,64985,64986,64996,65000,65008,65012,65026,65040,65052,65060,65066,65076,65086,65090,65094,65101,65113,65124,65141,65154,65168,65178,65182,65186,65193,65204,65222,65232,65244,65248,65252,65259,65276,65287,65299,65303,65307,65314,65326,65330,65338,65346,65350,65358,65366,65374,65389,65433,65441,65454,65467,65480,65488,65496,65504,65532,65540,65552,65565,65578,65586,65594,65602,65628,65636,65649,65661,65674,65682,65690,65698,65724,65732,65745,65757,65770,65778,65786,65794,65799,65819,65824,65844,65849,65866,65871,65879,65884,65913,65926,65930,65934,65939,65943,65971,65976,65993,65998,66003,66008,66013,66039,66043,66047,66055,66063,66067],{"__ignoreMap":23},[28,64987,64988,64990,64992,64994],{"class":30,"line":31},[28,64989,51372],{"class":34},[28,64991,51376],{"class":51375},[28,64993,51379],{"class":2040},[28,64995,51382],{"class":34},[28,64997,64998],{"class":30,"line":94},[28,64999,2477],{"emptyLinePlaceholder":144},[28,65001,65002,65004,65006],{"class":30,"line":109},[28,65003,99],{"class":34},[28,65005,50710],{"class":51375},[28,65007,51382],{"class":34},[28,65009,65010],{"class":30,"line":125},[28,65011,2477],{"emptyLinePlaceholder":144},[28,65013,65014,65016,65018,65020,65022,65024],{"class":30,"line":131},[28,65015,99],{"class":34},[28,65017,51409],{"class":51375},[28,65019,51391],{"class":2040},[28,65021,39],{"class":34},[28,65023,51396],{"class":320},[28,65025,51382],{"class":34},[28,65027,65028,65030,65032,65034,65036,65038],{"class":30,"line":1291},[28,65029,52219],{"class":34},[28,65031,51419],{"class":51375},[28,65033,51422],{"class":2040},[28,65035,39],{"class":34},[28,65037,51427],{"class":320},[28,65039,51382],{"class":34},[28,65041,65042,65044,65046,65048,65050],{"class":30,"line":1297},[28,65043,52219],{"class":34},[28,65045,51482],{"class":51375},[28,65047,55389],{"class":34},[28,65049,51482],{"class":51375},[28,65051,51382],{"class":34},[28,65053,65054,65056,65058],{"class":30,"line":1388},[28,65055,52219],{"class":34},[28,65057,136],{"class":51375},[28,65059,51382],{"class":34},[28,65061,65062,65064],{"class":30,"line":1394},[28,65063,6480],{"class":51375},[28,65065,15649],{"class":34},[28,65067,65068,65070,65072,65074],{"class":30,"line":1406},[28,65069,54781],{"class":45},[28,65071,51512],{"class":34},[28,65073,407],{"class":45},[28,65075,1367],{"class":34},[28,65077,65078,65080,65082,65084],{"class":30,"line":1689},[28,65079,54770],{"class":45},[28,65081,51512],{"class":34},[28,65083,407],{"class":45},[28,65085,1367],{"class":34},[28,65087,65088],{"class":30,"line":1694},[28,65089,2264],{"class":34},[28,65091,65092],{"class":30,"line":1700},[28,65093,2477],{"emptyLinePlaceholder":144},[28,65095,65096,65099],{"class":30,"line":1705},[28,65097,65098],{"class":51375},"    table",[28,65100,15649],{"class":34},[28,65102,65103,65106,65108,65111],{"class":30,"line":1719},[28,65104,65105],{"class":45},"      border-collapse",[28,65107,51512],{"class":34},[28,65109,65110],{"class":45},"collapse",[28,65112,1367],{"class":34},[28,65114,65115,65118,65120,65122],{"class":30,"line":1724},[28,65116,65117],{"class":45},"      border-spacing",[28,65119,51512],{"class":34},[28,65121,407],{"class":45},[28,65123,1367],{"class":34},[28,65125,65126,65128,65130,65132,65134,65136,65139],{"class":30,"line":1730},[28,65127,62052],{"class":45},[28,65129,51512],{"class":34},[28,65131,46],{"class":45},[28,65133,51567],{"class":38},[28,65135,51596],{"class":45},[28,65137,65138],{"class":45}," #c0c0c0",[28,65140,1367],{"class":34},[28,65142,65143,65145,65147,65150,65152],{"class":30,"line":1751},[28,65144,54846],{"class":45},[28,65146,51512],{"class":34},[28,65148,65149],{"class":45},"500",[28,65151,51567],{"class":38},[28,65153,1367],{"class":34},[28,65155,65156,65158,65160,65162,65164,65166],{"class":30,"line":1756},[28,65157,54781],{"class":45},[28,65159,51512],{"class":34},[28,65161,525],{"class":45},[28,65163,51567],{"class":38},[28,65165,51631],{"class":45},[28,65167,1367],{"class":34},[28,65169,65170,65172,65174,65176],{"class":30,"line":1770},[28,65171,57361],{"class":45},[28,65173,51512],{"class":34},[28,65175,51667],{"class":45},[28,65177,1367],{"class":34},[28,65179,65180],{"class":30,"line":1775},[28,65181,2264],{"class":34},[28,65183,65184],{"class":30,"line":1804},[28,65185,2477],{"emptyLinePlaceholder":144},[28,65187,65188,65191],{"class":30,"line":1809},[28,65189,65190],{"class":51375},"    th",[28,65192,15649],{"class":34},[28,65194,65195,65197,65199,65202],{"class":30,"line":1826},[28,65196,54959],{"class":45},[28,65198,51512],{"class":34},[28,65200,65201],{"class":45},"#09c",[28,65203,1367],{"class":34},[28,65205,65206,65209,65211,65213,65215,65217,65220],{"class":30,"line":1831},[28,65207,65208],{"class":45},"      font",[28,65210,51512],{"class":34},[28,65212,62414],{"class":45},[28,65214,64148],{"class":45},[28,65216,51567],{"class":38},[28,65218,65219],{"class":320}," \"微软雅黑\"",[28,65221,1367],{"class":34},[28,65223,65224,65226,65228,65230],{"class":30,"line":1836},[28,65225,57491],{"class":45},[28,65227,51512],{"class":34},[28,65229,60917],{"class":45},[28,65231,1367],{"class":34},[28,65233,65234,65236,65238,65240,65242],{"class":30,"line":1841},[28,65235,54860],{"class":45},[28,65237,51512],{"class":34},[28,65239,1006],{"class":45},[28,65241,51567],{"class":38},[28,65243,1367],{"class":34},[28,65245,65246],{"class":30,"line":1855},[28,65247,2264],{"class":34},[28,65249,65250],{"class":30,"line":1860},[28,65251,2477],{"emptyLinePlaceholder":144},[28,65253,65254,65257],{"class":30,"line":2654},[28,65255,65256],{"class":51375},"    td",[28,65258,15649],{"class":34},[28,65260,65261,65263,65265,65267,65269,65271,65274],{"class":30,"line":2668},[28,65262,62052],{"class":45},[28,65264,51512],{"class":34},[28,65266,46],{"class":45},[28,65268,51567],{"class":38},[28,65270,51596],{"class":45},[28,65272,65273],{"class":45}," #d0d0d0",[28,65275,1367],{"class":34},[28,65277,65278,65280,65282,65285],{"class":30,"line":2676},[28,65279,57491],{"class":45},[28,65281,51512],{"class":34},[28,65283,65284],{"class":45},"#404060",[28,65286,1367],{"class":34},[28,65288,65289,65291,65293,65295,65297],{"class":30,"line":2681},[28,65290,54770],{"class":45},[28,65292,51512],{"class":34},[28,65294,659],{"class":45},[28,65296,51567],{"class":38},[28,65298,1367],{"class":34},[28,65300,65301],{"class":30,"line":2687},[28,65302,2264],{"class":34},[28,65304,65305],{"class":30,"line":2693},[28,65306,2477],{"emptyLinePlaceholder":144},[28,65308,65309,65312],{"class":30,"line":2698},[28,65310,65311],{"class":2040},"    .allCheck",[28,65313,15649],{"class":34},[28,65315,65316,65318,65320,65322,65324],{"class":30,"line":8025},[28,65317,54846],{"class":45},[28,65319,51512],{"class":34},[28,65321,822],{"class":45},[28,65323,51567],{"class":38},[28,65325,1367],{"class":34},[28,65327,65328],{"class":30,"line":8049},[28,65329,2264],{"class":34},[28,65331,65332,65334,65336],{"class":30,"line":8054},[28,65333,52492],{"class":34},[28,65335,136],{"class":51375},[28,65337,51382],{"class":34},[28,65339,65340,65342,65344],{"class":30,"line":8060},[28,65341,51860],{"class":34},[28,65343,51409],{"class":51375},[28,65345,51382],{"class":34},[28,65347,65348],{"class":30,"line":8087},[28,65349,2477],{"emptyLinePlaceholder":144},[28,65351,65352,65354,65356],{"class":30,"line":8092},[28,65353,99],{"class":34},[28,65355,51875],{"class":51375},[28,65357,51382],{"class":34},[28,65359,65360,65362,65364],{"class":30,"line":8098},[28,65361,52219],{"class":34},[28,65363,353],{"class":51375},[28,65365,51382],{"class":34},[28,65367,65368,65370,65372],{"class":30,"line":8110},[28,65369,51416],{"class":34},[28,65371,359],{"class":51375},[28,65373,51382],{"class":34},[28,65375,65376,65378,65380,65382,65384,65387],{"class":30,"line":8122},[28,65377,55309],{"class":34},[28,65379,362],{"class":51375},[28,65381,53561],{"class":2040},[28,65383,39],{"class":34},[28,65385,65386],{"class":320},"\"allCheck\"",[28,65388,51382],{"class":34},[28,65390,65391,65393,65395,65397,65399,65401,65403,65405,65407,65409,65411,65414,65417,65419,65421,65423,65426,65429,65431],{"class":30,"line":8134},[28,65392,55377],{"class":34},[28,65394,53896],{"class":51375},[28,65396,53899],{"class":2040},[28,65398,39],{"class":34},[28,65400,53904],{"class":320},[28,65402,14997],{"class":2040},[28,65404,39],{"class":34},[28,65406,7729],{"class":320},[28,65408,15036],{"class":2040},[28,65410,39],{"class":34},[28,65412,65413],{"class":320},"\"checkAll\"",[28,65415,65416],{"class":34},"> \u003C",[28,65418,28],{"class":51375},[28,65420,53561],{"class":2040},[28,65422,39],{"class":34},[28,65424,65425],{"class":320},"\"all\"",[28,65427,65428],{"class":34},">全选\u003C\u002F",[28,65430,28],{"class":51375},[28,65432,51382],{"class":34},[28,65434,65435,65437,65439],{"class":30,"line":9793},[28,65436,55482],{"class":34},[28,65438,362],{"class":51375},[28,65440,51382],{"class":34},[28,65442,65443,65445,65447,65450,65452],{"class":30,"line":9818},[28,65444,55309],{"class":34},[28,65446,362],{"class":51375},[28,65448,65449],{"class":34},">商品\u003C\u002F",[28,65451,362],{"class":51375},[28,65453,51382],{"class":34},[28,65455,65456,65458,65460,65463,65465],{"class":30,"line":9841},[28,65457,55309],{"class":34},[28,65459,362],{"class":51375},[28,65461,65462],{"class":34},">商家\u003C\u002F",[28,65464,362],{"class":51375},[28,65466,51382],{"class":34},[28,65468,65469,65471,65473,65476,65478],{"class":30,"line":9865},[28,65470,55309],{"class":34},[28,65472,362],{"class":51375},[28,65474,65475],{"class":34},">价格\u003C\u002F",[28,65477,362],{"class":51375},[28,65479,51382],{"class":34},[28,65481,65482,65484,65486],{"class":30,"line":9870},[28,65483,51851],{"class":34},[28,65485,359],{"class":51375},[28,65487,51382],{"class":34},[28,65489,65490,65492,65494],{"class":30,"line":9875},[28,65491,51416],{"class":34},[28,65493,359],{"class":51375},[28,65495,51382],{"class":34},[28,65497,65498,65500,65502],{"class":30,"line":9880},[28,65499,55309],{"class":34},[28,65501,405],{"class":51375},[28,65503,51382],{"class":34},[28,65505,65506,65508,65510,65512,65514,65516,65518,65520,65523,65525,65527,65530],{"class":30,"line":9889},[28,65507,55377],{"class":34},[28,65509,53896],{"class":51375},[28,65511,53899],{"class":2040},[28,65513,39],{"class":34},[28,65515,53904],{"class":320},[28,65517,14997],{"class":2040},[28,65519,39],{"class":34},[28,65521,65522],{"class":320},"\"check\"",[28,65524,53561],{"class":2040},[28,65526,39],{"class":34},[28,65528,65529],{"class":320},"\"ck\"",[28,65531,51382],{"class":34},[28,65533,65534,65536,65538],{"class":30,"line":9894},[28,65535,55482],{"class":34},[28,65537,405],{"class":51375},[28,65539,51382],{"class":34},[28,65541,65542,65544,65546,65548,65550],{"class":30,"line":9900},[28,65543,55309],{"class":34},[28,65545,405],{"class":51375},[28,65547,61248],{"class":34},[28,65549,405],{"class":51375},[28,65551,51382],{"class":34},[28,65553,65554,65556,65558,65561,65563],{"class":30,"line":9921},[28,65555,55309],{"class":34},[28,65557,405],{"class":51375},[28,65559,65560],{"class":34},">小米\u003C\u002F",[28,65562,405],{"class":51375},[28,65564,51382],{"class":34},[28,65566,65567,65569,65571,65574,65576],{"class":30,"line":9927},[28,65568,55309],{"class":34},[28,65570,405],{"class":51375},[28,65572,65573],{"class":34},">￥1999\u003C\u002F",[28,65575,405],{"class":51375},[28,65577,51382],{"class":34},[28,65579,65580,65582,65584],{"class":30,"line":9941},[28,65581,51851],{"class":34},[28,65583,359],{"class":51375},[28,65585,51382],{"class":34},[28,65587,65588,65590,65592],{"class":30,"line":9947},[28,65589,51416],{"class":34},[28,65591,359],{"class":51375},[28,65593,51382],{"class":34},[28,65595,65596,65598,65600],{"class":30,"line":9974},[28,65597,55309],{"class":34},[28,65599,405],{"class":51375},[28,65601,51382],{"class":34},[28,65603,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622,65624,65626],{"class":30,"line":9983},[28,65605,55377],{"class":34},[28,65607,53896],{"class":51375},[28,65609,53899],{"class":2040},[28,65611,39],{"class":34},[28,65613,53904],{"class":320},[28,65615,14997],{"class":2040},[28,65617,39],{"class":34},[28,65619,65522],{"class":320},[28,65621,53561],{"class":2040},[28,65623,39],{"class":34},[28,65625,65529],{"class":320},[28,65627,51382],{"class":34},[28,65629,65630,65632,65634],{"class":30,"line":9989},[28,65631,55482],{"class":34},[28,65633,405],{"class":51375},[28,65635,51382],{"class":34},[28,65637,65638,65640,65642,65645,65647],{"class":30,"line":9997},[28,65639,55309],{"class":34},[28,65641,405],{"class":51375},[28,65643,65644],{"class":34},">小米净水器\u003C\u002F",[28,65646,405],{"class":51375},[28,65648,51382],{"class":34},[28,65650,65651,65653,65655,65657,65659],{"class":30,"line":10002},[28,65652,55309],{"class":34},[28,65654,405],{"class":51375},[28,65656,65560],{"class":34},[28,65658,405],{"class":51375},[28,65660,51382],{"class":34},[28,65662,65663,65665,65667,65670,65672],{"class":30,"line":16681},[28,65664,55309],{"class":34},[28,65666,405],{"class":51375},[28,65668,65669],{"class":34},">￥4999\u003C\u002F",[28,65671,405],{"class":51375},[28,65673,51382],{"class":34},[28,65675,65676,65678,65680],{"class":30,"line":16687},[28,65677,51851],{"class":34},[28,65679,359],{"class":51375},[28,65681,51382],{"class":34},[28,65683,65684,65686,65688],{"class":30,"line":16710},[28,65685,51416],{"class":34},[28,65687,359],{"class":51375},[28,65689,51382],{"class":34},[28,65691,65692,65694,65696],{"class":30,"line":16716},[28,65693,55309],{"class":34},[28,65695,405],{"class":51375},[28,65697,51382],{"class":34},[28,65699,65700,65702,65704,65706,65708,65710,65712,65714,65716,65718,65720,65722],{"class":30,"line":16739},[28,65701,55377],{"class":34},[28,65703,53896],{"class":51375},[28,65705,53899],{"class":2040},[28,65707,39],{"class":34},[28,65709,53904],{"class":320},[28,65711,14997],{"class":2040},[28,65713,39],{"class":34},[28,65715,65522],{"class":320},[28,65717,53561],{"class":2040},[28,65719,39],{"class":34},[28,65721,65529],{"class":320},[28,65723,51382],{"class":34},[28,65725,65726,65728,65730],{"class":30,"line":16753},[28,65727,55482],{"class":34},[28,65729,405],{"class":51375},[28,65731,51382],{"class":34},[28,65733,65734,65736,65738,65741,65743],{"class":30,"line":16773},[28,65735,55309],{"class":34},[28,65737,405],{"class":51375},[28,65739,65740],{"class":34},">小米电视\u003C\u002F",[28,65742,405],{"class":51375},[28,65744,51382],{"class":34},[28,65746,65747,65749,65751,65753,65755],{"class":30,"line":16779},[28,65748,55309],{"class":34},[28,65750,405],{"class":51375},[28,65752,65560],{"class":34},[28,65754,405],{"class":51375},[28,65756,51382],{"class":34},[28,65758,65759,65761,65763,65766,65768],{"class":30,"line":16790},[28,65760,55309],{"class":34},[28,65762,405],{"class":51375},[28,65764,65765],{"class":34},">￥5999\u003C\u002F",[28,65767,405],{"class":51375},[28,65769,51382],{"class":34},[28,65771,65772,65774,65776],{"class":30,"line":16813},[28,65773,51851],{"class":34},[28,65775,359],{"class":51375},[28,65777,51382],{"class":34},[28,65779,65780,65782,65784],{"class":30,"line":16835},[28,65781,52492],{"class":34},[28,65783,353],{"class":51375},[28,65785,51382],{"class":34},[28,65787,65788,65790,65792],{"class":30,"line":16840},[28,65789,52219],{"class":34},[28,65791,51888],{"class":51375},[28,65793,51382],{"class":34},[28,65795,65796],{"class":30,"line":16846},[28,65797,65798],{"class":105},"    \u002F\u002F 1. 获取大复选框\n",[28,65800,65801,65803,65806,65808,65810,65812,65814,65817],{"class":30,"line":16860},[28,65802,11298],{"class":38},[28,65804,65805],{"class":45}," checkAll",[28,65807,13641],{"class":38},[28,65809,54471],{"class":34},[28,65811,54474],{"class":2040},[28,65813,221],{"class":34},[28,65815,65816],{"class":320},"'#checkAll'",[28,65818,227],{"class":34},[28,65820,65821],{"class":30,"line":16873},[28,65822,65823],{"class":105},"    \u002F\u002F 2. 获取所有的小复选框\n",[28,65825,65826,65828,65831,65833,65835,65837,65839,65842],{"class":30,"line":16878},[28,65827,11298],{"class":38},[28,65829,65830],{"class":45}," cks",[28,65832,13641],{"class":38},[28,65834,54471],{"class":34},[28,65836,55756],{"class":2040},[28,65838,221],{"class":34},[28,65840,65841],{"class":320},"'.ck'",[28,65843,227],{"class":34},[28,65845,65846],{"class":30,"line":16892},[28,65847,65848],{"class":105},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[28,65850,65851,65854,65856,65858,65860,65862,65864],{"class":30,"line":16897},[28,65852,65853],{"class":34},"    checkAll.",[28,65855,57888],{"class":2040},[28,65857,221],{"class":34},[28,65859,57893],{"class":320},[28,65861,12512],{"class":34},[28,65863,54524],{"class":38},[28,65865,54527],{"class":34},[28,65867,65868],{"class":30,"line":16903},[28,65869,65870],{"class":105},"      \u002F\u002F 得到当前大复选框的选中状态\n",[28,65872,65873,65876],{"class":30,"line":16908},[28,65874,65875],{"class":105},"      \u002F\u002F console.log(checkAll.checked)",[28,65877,65878],{"class":105},"  \u002F\u002F 得到 是 true 或者是 false\n",[28,65880,65881],{"class":30,"line":16922},[28,65882,65883],{"class":105},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[28,65885,65886,65888,65890,65892,65894,65896,65898,65900,65902,65905,65907,65909,65911],{"class":30,"line":16927},[28,65887,52359],{"class":38},[28,65889,1735],{"class":34},[28,65891,51922],{"class":38},[28,65893,9515],{"class":34},[28,65895,39],{"class":38},[28,65897,4170],{"class":45},[28,65899,9522],{"class":34},[28,65901,99],{"class":38},[28,65903,65904],{"class":34}," cks.",[28,65906,52043],{"class":45},[28,65908,3291],{"class":34},[28,65910,2369],{"class":38},[28,65912,12519],{"class":34},[28,65914,65915,65918,65920,65923],{"class":30,"line":16932},[28,65916,65917],{"class":34},"        cks[i].checked ",[28,65919,39],{"class":38},[28,65921,65922],{"class":45}," this",[28,65924,65925],{"class":34},".checked\n",[28,65927,65928],{"class":30,"line":16946},[28,65929,52473],{"class":34},[28,65931,65932],{"class":30,"line":16958},[28,65933,33537],{"class":34},[28,65935,65936],{"class":30,"line":16963},[28,65937,65938],{"class":105},"    \u002F\u002F 5. 小复选框控制大复选框\n",[28,65940,65941],{"class":30,"line":16976},[28,65942,2477],{"emptyLinePlaceholder":144},[28,65944,65945,65947,65949,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969],{"class":30,"line":16981},[28,65946,3278],{"class":38},[28,65948,1735],{"class":34},[28,65950,51922],{"class":38},[28,65952,9515],{"class":34},[28,65954,39],{"class":38},[28,65956,4170],{"class":45},[28,65958,9522],{"class":34},[28,65960,99],{"class":38},[28,65962,65904],{"class":34},[28,65964,52043],{"class":45},[28,65966,3291],{"class":34},[28,65968,2369],{"class":38},[28,65970,12519],{"class":34},[28,65972,65973],{"class":30,"line":16986},[28,65974,65975],{"class":105},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[28,65977,65978,65981,65983,65985,65987,65989,65991],{"class":30,"line":16991},[28,65979,65980],{"class":34},"      cks[i].",[28,65982,57888],{"class":2040},[28,65984,221],{"class":34},[28,65986,57893],{"class":320},[28,65988,12512],{"class":34},[28,65990,54524],{"class":38},[28,65992,54527],{"class":34},[28,65994,65995],{"class":30,"line":17004},[28,65996,65997],{"class":105},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[28,65999,66000],{"class":30,"line":17009},[28,66001,66002],{"class":105},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[28,66004,66005],{"class":30,"line":32709},[28,66006,66007],{"class":105},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[28,66009,66010],{"class":30,"line":32715},[28,66011,66012],{"class":105},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[28,66014,66015,66018,66020,66022,66024,66026,66029,66031,66033,66035,66037],{"class":30,"line":32721},[28,66016,66017],{"class":34},"        checkAll.checked ",[28,66019,39],{"class":38},[28,66021,54471],{"class":34},[28,66023,55756],{"class":2040},[28,66025,221],{"class":34},[28,66027,66028],{"class":320},"'.ck:checked'",[28,66030,30902],{"class":34},[28,66032,52043],{"class":45},[28,66034,57981],{"class":38},[28,66036,65904],{"class":34},[28,66038,55906],{"class":45},[28,66040,66041],{"class":30,"line":32727},[28,66042,64890],{"class":34},[28,66044,66045],{"class":30,"line":32733},[28,66046,2264],{"class":34},[28,66048,66049,66051,66053],{"class":30,"line":32744},[28,66050,52492],{"class":34},[28,66052,51888],{"class":51375},[28,66054,51382],{"class":34},[28,66056,66057,66059,66061],{"class":30,"line":32750},[28,66058,51860],{"class":34},[28,66060,51875],{"class":51375},[28,66062,51382],{"class":34},[28,66064,66065],{"class":30,"line":32770},[28,66066,2477],{"emptyLinePlaceholder":144},[28,66068,66069,66071,66073],{"class":30,"line":32776},[28,66070,51860],{"class":34},[28,66072,50710],{"class":51375},[28,66074,51382],{"class":34},[14,66076,66077],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66079,66080],{},"用好之间比较得到的布尔值！！！",[14,66082,66083,66084,66087,66088,1735,66091,794,66093,66096],{},"在 JS 里访问的时候，",[25,66085,66086],{},"checkbox.checked"," 是一个 ",[365,66089,66090],{},"布尔值",[25,66092,1439],{},[25,66094,66095],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66098,66099,66100,66103,66104],{},"HTML 的 ",[25,66101,66102],{},"checked=\"checked\""," 只是 ",[365,66105,66106,66107,66110],{},"初始值；JS 的 ",[25,66108,66109],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66112,66113],{},"：checked是一个伪类选择器",[14,66115,66116],{},[1539,66117],{"alt":23,"src":66118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66120,66121,66124],{},[66122,66123],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66126,66127],{},[1539,66128],{"alt":23,"src":66129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[159,66131,66133],{"id":66132},"_33-dom事件进阶","3.3 DOM事件进阶",[188,66135,66137],{"id":66136},"_331-事件流","3.3.1 事件流",[14,66139,66140],{},[1539,66141],{"alt":23,"src":66142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22075,66144,66146],{"id":66145},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66148,66149],{},[1539,66150],{"alt":23,"src":66151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[18,66153,66155],{"className":50708,"code":66154,"language":50710,"meta":23,"style":23},"\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",[25,66156,66157,66167,66181,66185,66193,66207,66227,66239,66247,66254,66266,66278,66288,66292,66296,66303,66315,66327,66337,66341,66349,66357,66361,66369,66384,66403,66411,66419,66439,66459,66475,66486,66494,66511,66522,66530,66547,66558,66566,66574,66582,66586],{"__ignoreMap":23},[28,66158,66159,66161,66163,66165],{"class":30,"line":31},[28,66160,51372],{"class":34},[28,66162,51376],{"class":51375},[28,66164,51379],{"class":2040},[28,66166,51382],{"class":34},[28,66168,66169,66171,66173,66175,66177,66179],{"class":30,"line":94},[28,66170,99],{"class":34},[28,66172,50710],{"class":51375},[28,66174,51391],{"class":2040},[28,66176,39],{"class":34},[28,66178,51396],{"class":320},[28,66180,51382],{"class":34},[28,66182,66183],{"class":30,"line":109},[28,66184,2477],{"emptyLinePlaceholder":144},[28,66186,66187,66189,66191],{"class":30,"line":125},[28,66188,99],{"class":34},[28,66190,51409],{"class":51375},[28,66192,51382],{"class":34},[28,66194,66195,66197,66199,66201,66203,66205],{"class":30,"line":131},[28,66196,52219],{"class":34},[28,66198,51419],{"class":51375},[28,66200,51422],{"class":2040},[28,66202,39],{"class":34},[28,66204,51427],{"class":320},[28,66206,51382],{"class":34},[28,66208,66209,66211,66213,66215,66217,66219,66221,66223,66225],{"class":30,"line":1291},[28,66210,52219],{"class":34},[28,66212,51419],{"class":51375},[28,66214,14997],{"class":2040},[28,66216,39],{"class":34},[28,66218,51466],{"class":320},[28,66220,51446],{"class":2040},[28,66222,39],{"class":34},[28,66224,51473],{"class":320},[28,66226,51382],{"class":34},[28,66228,66229,66231,66233,66235,66237],{"class":30,"line":1297},[28,66230,52219],{"class":34},[28,66232,51482],{"class":51375},[28,66234,51485],{"class":34},[28,66236,51482],{"class":51375},[28,66238,51382],{"class":34},[28,66240,66241,66243,66245],{"class":30,"line":1388},[28,66242,52219],{"class":34},[28,66244,136],{"class":51375},[28,66246,51382],{"class":34},[28,66248,66249,66252],{"class":30,"line":1394},[28,66250,66251],{"class":2040},"    .father",[28,66253,15649],{"class":34},[28,66255,66256,66258,66260,66262,66264],{"class":30,"line":1406},[28,66257,54846],{"class":45},[28,66259,51512],{"class":34},[28,66261,65149],{"class":45},[28,66263,51567],{"class":38},[28,66265,1367],{"class":34},[28,66267,66268,66270,66272,66274,66276],{"class":30,"line":1689},[28,66269,54860],{"class":45},[28,66271,51512],{"class":34},[28,66273,65149],{"class":45},[28,66275,51567],{"class":38},[28,66277,1367],{"class":34},[28,66279,66280,66282,66284,66286],{"class":30,"line":1694},[28,66281,54959],{"class":45},[28,66283,51512],{"class":34},[28,66285,51720],{"class":45},[28,66287,1367],{"class":34},[28,66289,66290],{"class":30,"line":1700},[28,66291,2264],{"class":34},[28,66293,66294],{"class":30,"line":1705},[28,66295,2477],{"emptyLinePlaceholder":144},[28,66297,66298,66301],{"class":30,"line":1719},[28,66299,66300],{"class":2040},"    .son",[28,66302,15649],{"class":34},[28,66304,66305,66307,66309,66311,66313],{"class":30,"line":1724},[28,66306,54846],{"class":45},[28,66308,51512],{"class":34},[28,66310,1799],{"class":45},[28,66312,51567],{"class":38},[28,66314,1367],{"class":34},[28,66316,66317,66319,66321,66323,66325],{"class":30,"line":1730},[28,66318,54860],{"class":45},[28,66320,51512],{"class":34},[28,66322,1799],{"class":45},[28,66324,51567],{"class":38},[28,66326,1367],{"class":34},[28,66328,66329,66331,66333,66335],{"class":30,"line":1751},[28,66330,54959],{"class":45},[28,66332,51512],{"class":34},[28,66334,54964],{"class":45},[28,66336,1367],{"class":34},[28,66338,66339],{"class":30,"line":1756},[28,66340,2264],{"class":34},[28,66342,66343,66345,66347],{"class":30,"line":1770},[28,66344,52492],{"class":34},[28,66346,136],{"class":51375},[28,66348,51382],{"class":34},[28,66350,66351,66353,66355],{"class":30,"line":1775},[28,66352,51860],{"class":34},[28,66354,51409],{"class":51375},[28,66356,51382],{"class":34},[28,66358,66359],{"class":30,"line":1804},[28,66360,2477],{"emptyLinePlaceholder":144},[28,66362,66363,66365,66367],{"class":30,"line":1809},[28,66364,99],{"class":34},[28,66366,51875],{"class":51375},[28,66368,51382],{"class":34},[28,66370,66371,66373,66375,66377,66379,66382],{"class":30,"line":1826},[28,66372,52219],{"class":34},[28,66374,51686],{"class":51375},[28,66376,53561],{"class":2040},[28,66378,39],{"class":34},[28,66380,66381],{"class":320},"\"father\"",[28,66383,51382],{"class":34},[28,66385,66386,66388,66390,66392,66394,66397,66399,66401],{"class":30,"line":1831},[28,66387,51416],{"class":34},[28,66389,51686],{"class":51375},[28,66391,53561],{"class":2040},[28,66393,39],{"class":34},[28,66395,66396],{"class":320},"\"son\"",[28,66398,55389],{"class":34},[28,66400,51686],{"class":51375},[28,66402,51382],{"class":34},[28,66404,66405,66407,66409],{"class":30,"line":1836},[28,66406,52492],{"class":34},[28,66408,51686],{"class":51375},[28,66410,51382],{"class":34},[28,66412,66413,66415,66417],{"class":30,"line":1841},[28,66414,52219],{"class":34},[28,66416,51888],{"class":51375},[28,66418,51382],{"class":34},[28,66420,66421,66423,66426,66428,66430,66432,66434,66437],{"class":30,"line":1855},[28,66422,11298],{"class":38},[28,66424,66425],{"class":45}," fa",[28,66427,13641],{"class":38},[28,66429,54471],{"class":34},[28,66431,54474],{"class":2040},[28,66433,221],{"class":34},[28,66435,66436],{"class":320},"'.father'",[28,66438,227],{"class":34},[28,66440,66441,66443,66446,66448,66450,66452,66454,66457],{"class":30,"line":1860},[28,66442,11298],{"class":38},[28,66444,66445],{"class":45}," son",[28,66447,13641],{"class":38},[28,66449,54471],{"class":34},[28,66451,54474],{"class":2040},[28,66453,221],{"class":34},[28,66455,66456],{"class":320},"'.son'",[28,66458,227],{"class":34},[28,66460,66461,66463,66465,66467,66469,66471,66473],{"class":30,"line":2654},[28,66462,52482],{"class":34},[28,66464,57888],{"class":2040},[28,66466,221],{"class":34},[28,66468,57893],{"class":320},[28,66470,12512],{"class":34},[28,66472,54524],{"class":38},[28,66474,54527],{"class":34},[28,66476,66477,66479,66481,66484],{"class":30,"line":2668},[28,66478,59000],{"class":2040},[28,66480,221],{"class":34},[28,66482,66483],{"class":320},"'woshiu1'",[28,66485,227],{"class":34},[28,66487,66488,66490,66492],{"class":30,"line":2676},[28,66489,54610],{"class":34},[28,66491,1439],{"class":45},[28,66493,227],{"class":34},[28,66495,66496,66499,66501,66503,66505,66507,66509],{"class":30,"line":2681},[28,66497,66498],{"class":34},"    fa.",[28,66500,57888],{"class":2040},[28,66502,221],{"class":34},[28,66504,57893],{"class":320},[28,66506,12512],{"class":34},[28,66508,54524],{"class":38},[28,66510,54527],{"class":34},[28,66512,66513,66515,66517,66520],{"class":30,"line":2687},[28,66514,59000],{"class":2040},[28,66516,221],{"class":34},[28,66518,66519],{"class":320},"'1'",[28,66521,227],{"class":34},[28,66523,66524,66526,66528],{"class":30,"line":2693},[28,66525,54610],{"class":34},[28,66527,1439],{"class":45},[28,66529,227],{"class":34},[28,66531,66532,66535,66537,66539,66541,66543,66545],{"class":30,"line":2698},[28,66533,66534],{"class":34},"    son.",[28,66536,57888],{"class":2040},[28,66538,221],{"class":34},[28,66540,57893],{"class":320},[28,66542,12512],{"class":34},[28,66544,54524],{"class":38},[28,66546,54527],{"class":34},[28,66548,66549,66551,66553,66556],{"class":30,"line":8025},[28,66550,59000],{"class":2040},[28,66552,221],{"class":34},[28,66554,66555],{"class":320},"'2'",[28,66557,227],{"class":34},[28,66559,66560,66562,66564],{"class":30,"line":8049},[28,66561,54610],{"class":34},[28,66563,1439],{"class":45},[28,66565,227],{"class":34},[28,66567,66568,66570,66572],{"class":30,"line":8054},[28,66569,52492],{"class":34},[28,66571,51888],{"class":51375},[28,66573,51382],{"class":34},[28,66575,66576,66578,66580],{"class":30,"line":8060},[28,66577,51860],{"class":34},[28,66579,51875],{"class":51375},[28,66581,51382],{"class":34},[28,66583,66584],{"class":30,"line":8087},[28,66585,2477],{"emptyLinePlaceholder":144},[28,66587,66588,66590,66592],{"class":30,"line":8092},[28,66589,51860],{"class":34},[28,66591,50710],{"class":51375},[28,66593,51382],{"class":34},[14,66595,66596],{},[1539,66597],{"alt":23,"src":66598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66600,66601],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22075,66603,66605],{"id":66604},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66607,66608],{},[1539,66609],{"alt":23,"src":66610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66612,66613],{},"反着来",[14,66615,66616],{},"注意是同名事件，比如都是‘click’",[22075,66618,66620],{"id":66619},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66622,66623],{},[1539,66624],{"alt":23,"src":66625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22075,66627,66629],{"id":66628},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66631,66632],{},[1539,66633],{"alt":23,"src":66634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66636,66637],{},[1539,66638],{"alt":23,"src":66639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22075,66641,66643],{"id":66642},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[171,66645,66646],{},[174,66647,66648],{},"事件类型的区别",[14,66650,66651],{},[1539,66652],{"alt":23,"src":66653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66655,66656],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[171,66658,66659],{"start":94},[174,66660,66661],{},"注册事件的区别",[14,66663,66664],{},[1539,66665],{"alt":23,"src":66666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22075,66668,66670],{"id":66669},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66672,66673],{},[1539,66674],{"alt":23,"src":66675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66677,66678],{},[1539,66679],{"alt":23,"src":66680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[18,66682,66684],{"className":53142,"code":66683,"language":53144,"meta":23,"style":23},"\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",[25,66685,66686,66694,66711,66734,66742,66747,66752,66757,66761,66769,66777],{"__ignoreMap":23},[28,66687,66688,66690,66692],{"class":30,"line":31},[28,66689,99],{"class":34},[28,66691,51875],{"class":51375},[28,66693,51382],{"class":34},[28,66695,66696,66698,66701,66704,66706,66709],{"class":30,"line":94},[28,66697,52219],{"class":34},[28,66699,66700],{"class":51375},"form",[28,66702,66703],{"class":2040}," action",[28,66705,39],{"class":34},[28,66707,66708],{"class":320},"\"http:\u002F\u002Fwww.itcast.cn\"",[28,66710,51382],{"class":34},[28,66712,66713,66715,66717,66719,66721,66724,66727,66729,66732],{"class":30,"line":109},[28,66714,51416],{"class":34},[28,66716,53896],{"class":51375},[28,66718,53899],{"class":2040},[28,66720,39],{"class":34},[28,66722,66723],{"class":320},"\"submit\"",[28,66725,66726],{"class":2040}," value",[28,66728,39],{"class":34},[28,66730,66731],{"class":320},"\"免费注册\"",[28,66733,51382],{"class":34},[28,66735,66736,66738,66740],{"class":30,"line":125},[28,66737,51416],{"class":34},[28,66739,51888],{"class":51375},[28,66741,51382],{"class":34},[28,66743,66744],{"class":30,"line":131},[28,66745,66746],{"class":34},"      const form = document.querySelector('form')\n",[28,66748,66749],{"class":30,"line":1291},[28,66750,66751],{"class":34},"      form.addEventListener('submit', function (e) {\n",[28,66753,66754],{"class":30,"line":1297},[28,66755,66756],{"class":34},"        e.preventDefault()\n",[28,66758,66759],{"class":30,"line":1388},[28,66760,64890],{"class":34},[28,66762,66763,66765,66767],{"class":30,"line":1394},[28,66764,51851],{"class":34},[28,66766,51888],{"class":51375},[28,66768,51382],{"class":34},[28,66770,66771,66773,66775],{"class":30,"line":1406},[28,66772,52492],{"class":34},[28,66774,66700],{"class":51375},[28,66776,51382],{"class":34},[28,66778,66779,66781,66783],{"class":30,"line":1689},[28,66780,51860],{"class":34},[28,66782,51875],{"class":51375},[28,66784,51382],{"class":34},[14,66786,66787],{},"点击不在跳转！！！",[188,66789,66791],{"id":66790},"_332-事件委托","3.3.2 事件委托",[14,66793,66794],{},[1539,66795],{"alt":23,"src":66796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[18,66798,66800],{"className":50708,"code":66799,"language":50710,"meta":23,"style":23},"\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",[25,66801,66802,66812,66826,66830,66838,66852,66872,66884,66892,66896,66904,66912,66924,66936,66948,66960,66972,66985,66993,67001,67006,67025,67046,67051,67056,67061,67066,67075,67079,67089,67093,67098,67103,67117,67127,67131,67135,67143,67151,67155],{"__ignoreMap":23},[28,66803,66804,66806,66808,66810],{"class":30,"line":31},[28,66805,51372],{"class":34},[28,66807,51376],{"class":51375},[28,66809,51379],{"class":2040},[28,66811,51382],{"class":34},[28,66813,66814,66816,66818,66820,66822,66824],{"class":30,"line":94},[28,66815,99],{"class":34},[28,66817,50710],{"class":51375},[28,66819,51391],{"class":2040},[28,66821,39],{"class":34},[28,66823,51396],{"class":320},[28,66825,51382],{"class":34},[28,66827,66828],{"class":30,"line":109},[28,66829,2477],{"emptyLinePlaceholder":144},[28,66831,66832,66834,66836],{"class":30,"line":125},[28,66833,99],{"class":34},[28,66835,51409],{"class":51375},[28,66837,51382],{"class":34},[28,66839,66840,66842,66844,66846,66848,66850],{"class":30,"line":131},[28,66841,52219],{"class":34},[28,66843,51419],{"class":51375},[28,66845,51422],{"class":2040},[28,66847,39],{"class":34},[28,66849,51427],{"class":320},[28,66851,51382],{"class":34},[28,66853,66854,66856,66858,66860,66862,66864,66866,66868,66870],{"class":30,"line":1291},[28,66855,52219],{"class":34},[28,66857,51419],{"class":51375},[28,66859,14997],{"class":2040},[28,66861,39],{"class":34},[28,66863,51466],{"class":320},[28,66865,51446],{"class":2040},[28,66867,39],{"class":34},[28,66869,51473],{"class":320},[28,66871,51382],{"class":34},[28,66873,66874,66876,66878,66880,66882],{"class":30,"line":1297},[28,66875,52219],{"class":34},[28,66877,51482],{"class":51375},[28,66879,51485],{"class":34},[28,66881,51482],{"class":51375},[28,66883,51382],{"class":34},[28,66885,66886,66888,66890],{"class":30,"line":1388},[28,66887,51860],{"class":34},[28,66889,51409],{"class":51375},[28,66891,51382],{"class":34},[28,66893,66894],{"class":30,"line":1394},[28,66895,2477],{"emptyLinePlaceholder":144},[28,66897,66898,66900,66902],{"class":30,"line":1406},[28,66899,99],{"class":34},[28,66901,51875],{"class":51375},[28,66903,51382],{"class":34},[28,66905,66906,66908,66910],{"class":30,"line":1689},[28,66907,52219],{"class":34},[28,66909,1211],{"class":51375},[28,66911,51382],{"class":34},[28,66913,66914,66916,66918,66920,66922],{"class":30,"line":1694},[28,66915,51416],{"class":34},[28,66917,174],{"class":51375},[28,66919,54041],{"class":34},[28,66921,174],{"class":51375},[28,66923,51382],{"class":34},[28,66925,66926,66928,66930,66932,66934],{"class":30,"line":1700},[28,66927,51416],{"class":34},[28,66929,174],{"class":51375},[28,66931,54060],{"class":34},[28,66933,174],{"class":51375},[28,66935,51382],{"class":34},[28,66937,66938,66940,66942,66944,66946],{"class":30,"line":1705},[28,66939,51416],{"class":34},[28,66941,174],{"class":51375},[28,66943,54079],{"class":34},[28,66945,174],{"class":51375},[28,66947,51382],{"class":34},[28,66949,66950,66952,66954,66956,66958],{"class":30,"line":1719},[28,66951,51416],{"class":34},[28,66953,174],{"class":51375},[28,66955,54098],{"class":34},[28,66957,174],{"class":51375},[28,66959,51382],{"class":34},[28,66961,66962,66964,66966,66968,66970],{"class":30,"line":1724},[28,66963,51416],{"class":34},[28,66965,174],{"class":51375},[28,66967,54117],{"class":34},[28,66969,174],{"class":51375},[28,66971,51382],{"class":34},[28,66973,66974,66976,66978,66981,66983],{"class":30,"line":1730},[28,66975,51416],{"class":34},[28,66977,14],{"class":51375},[28,66979,66980],{"class":34},">我不需要变色\u003C\u002F",[28,66982,14],{"class":51375},[28,66984,51382],{"class":34},[28,66986,66987,66989,66991],{"class":30,"line":1751},[28,66988,52492],{"class":34},[28,66990,1211],{"class":51375},[28,66992,51382],{"class":34},[28,66994,66995,66997,66999],{"class":30,"line":1756},[28,66996,52219],{"class":34},[28,66998,51888],{"class":51375},[28,67000,51382],{"class":34},[28,67002,67003],{"class":30,"line":1770},[28,67004,67005],{"class":105},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[28,67007,67008,67010,67012,67014,67016,67018,67020,67023],{"class":30,"line":1775},[28,67009,11298],{"class":38},[28,67011,61367],{"class":45},[28,67013,13641],{"class":38},[28,67015,54471],{"class":34},[28,67017,54474],{"class":2040},[28,67019,221],{"class":34},[28,67021,67022],{"class":320},"'ul'",[28,67024,227],{"class":34},[28,67026,67027,67030,67032,67034,67036,67038,67040,67042,67044],{"class":30,"line":1804},[28,67028,67029],{"class":34},"    ul.",[28,67031,57888],{"class":2040},[28,67033,221],{"class":34},[28,67035,57893],{"class":320},[28,67037,12512],{"class":34},[28,67039,54524],{"class":38},[28,67041,1735],{"class":34},[28,67043,291],{"class":5293},[28,67045,12519],{"class":34},[28,67047,67048],{"class":30,"line":1809},[28,67049,67050],{"class":105},"      \u002F\u002F alert(1)\n",[28,67052,67053],{"class":30,"line":1826},[28,67054,67055],{"class":105},"      \u002F\u002F e.target就是我们点击的对象\n",[28,67057,67058],{"class":30,"line":1831},[28,67059,67060],{"class":105},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[28,67062,67063],{"class":30,"line":1836},[28,67064,67065],{"class":105},"      \u002F\u002F e.target.style.color = 'red'\n",[28,67067,67068,67070,67072],{"class":30,"line":1841},[28,67069,58319],{"class":34},[28,67071,58322],{"class":2040},[28,67073,67074],{"class":34},"(e)\n",[28,67076,67077],{"class":30,"line":1855},[28,67078,2477],{"emptyLinePlaceholder":144},[28,67080,67081,67083,67086],{"class":30,"line":1860},[28,67082,58319],{"class":34},[28,67084,67085],{"class":2040},"dir",[28,67087,67088],{"class":34},"(e.target)\n",[28,67090,67091],{"class":30,"line":2654},[28,67092,2477],{"emptyLinePlaceholder":144},[28,67094,67095],{"class":30,"line":2668},[28,67096,67097],{"class":105},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[28,67099,67100],{"class":30,"line":2676},[28,67101,67102],{"class":105},"      \u002F\u002F 通过tagName来进行判断\n",[28,67104,67105,67107,67110,67112,67115],{"class":30,"line":2681},[28,67106,54555],{"class":38},[28,67108,67109],{"class":34}," (e.target.tagName ",[28,67111,54561],{"class":38},[28,67113,67114],{"class":320}," 'LI'",[28,67116,12519],{"class":34},[28,67118,67119,67122,67124],{"class":30,"line":2687},[28,67120,67121],{"class":34},"        e.target.style.color ",[28,67123,39],{"class":38},[28,67125,67126],{"class":320}," 'red'\n",[28,67128,67129],{"class":30,"line":2693},[28,67130,52473],{"class":34},[28,67132,67133],{"class":30,"line":2698},[28,67134,33537],{"class":34},[28,67136,67137,67139,67141],{"class":30,"line":8025},[28,67138,52492],{"class":34},[28,67140,51888],{"class":51375},[28,67142,51382],{"class":34},[28,67144,67145,67147,67149],{"class":30,"line":8049},[28,67146,51860],{"class":34},[28,67148,51875],{"class":51375},[28,67150,51382],{"class":34},[28,67152,67153],{"class":30,"line":8054},[28,67154,2477],{"emptyLinePlaceholder":144},[28,67156,67157,67159,67161],{"class":30,"line":8060},[28,67158,51860],{"class":34},[28,67160,50710],{"class":51375},[28,67162,51382],{"class":34},[14,67164,67165],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67167,67168],{},"if(e.target.ragName==='P') {}",[14,67170,67171],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67173,67174],{},"通过事件委托的方式实现tab栏切换改造：",[14,67176,67177],{},"一定要记住自定义属性！！！！！！",[14,67179,67180],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67182,67183],{},"id是自定义的属性名",[14,67185,67186],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[18,67188,67190],{"className":50708,"code":67189,"language":50710,"meta":23,"style":23},"\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",[25,67191,67192,67202,67216,67220,67228,67242,67262,67282,67294,67302,67308,67318,67328,67332,67336,67342,67354,67366,67378,67394,67398,67402,67408,67420,67432,67444,67454,67464,67468,67472,67480,67492,67502,67514,67518,67522,67530,67540,67550,67560,67564,67568,67578,67592,67604,67608,67612,67624,67634,67650,67660,67664,67668,67682,67692,67702,67706,67710,67716,67730,67734,67738,67746,67756,67760,67764,67773,67783,67787,67795,67803,67807,67815,67829,67843,67855,67863,67902,67934,67966,67998,68030,68038,68046,68060,68094,68128,68162,68196,68230,68238,68246,68254,68259,68264,68283,68288,68308,68316,68321,68334,68355,68368,68372,68377,68382,68395,68415,68443,68447,68451,68455,68463,68471,68475],{"__ignoreMap":23},[28,67193,67194,67196,67198,67200],{"class":30,"line":31},[28,67195,51372],{"class":34},[28,67197,51376],{"class":51375},[28,67199,51379],{"class":2040},[28,67201,51382],{"class":34},[28,67203,67204,67206,67208,67210,67212,67214],{"class":30,"line":94},[28,67205,99],{"class":34},[28,67207,50710],{"class":51375},[28,67209,51391],{"class":2040},[28,67211,39],{"class":34},[28,67213,51396],{"class":320},[28,67215,51382],{"class":34},[28,67217,67218],{"class":30,"line":109},[28,67219,2477],{"emptyLinePlaceholder":144},[28,67221,67222,67224,67226],{"class":30,"line":125},[28,67223,99],{"class":34},[28,67225,51409],{"class":51375},[28,67227,51382],{"class":34},[28,67229,67230,67232,67234,67236,67238,67240],{"class":30,"line":131},[28,67231,52219],{"class":34},[28,67233,51419],{"class":51375},[28,67235,51422],{"class":2040},[28,67237,39],{"class":34},[28,67239,51427],{"class":320},[28,67241,59202],{"class":34},[28,67243,67244,67246,67248,67250,67252,67254,67256,67258,67260],{"class":30,"line":1291},[28,67245,52219],{"class":34},[28,67247,51419],{"class":51375},[28,67249,51438],{"class":2040},[28,67251,39],{"class":34},[28,67253,51443],{"class":320},[28,67255,51446],{"class":2040},[28,67257,39],{"class":34},[28,67259,51451],{"class":320},[28,67261,59202],{"class":34},[28,67263,67264,67266,67268,67270,67272,67274,67276,67278,67280],{"class":30,"line":1297},[28,67265,52219],{"class":34},[28,67267,51419],{"class":51375},[28,67269,14997],{"class":2040},[28,67271,39],{"class":34},[28,67273,51466],{"class":320},[28,67275,51446],{"class":2040},[28,67277,39],{"class":34},[28,67279,51473],{"class":320},[28,67281,59202],{"class":34},[28,67283,67284,67286,67288,67290,67292],{"class":30,"line":1388},[28,67285,52219],{"class":34},[28,67287,51482],{"class":51375},[28,67289,63700],{"class":34},[28,67291,51482],{"class":51375},[28,67293,51382],{"class":34},[28,67295,67296,67298,67300],{"class":30,"line":1394},[28,67297,52219],{"class":34},[28,67299,136],{"class":51375},[28,67301,51382],{"class":34},[28,67303,67304,67306],{"class":30,"line":1406},[28,67305,6480],{"class":51375},[28,67307,15649],{"class":34},[28,67309,67310,67312,67314,67316],{"class":30,"line":1689},[28,67311,54781],{"class":45},[28,67313,51512],{"class":34},[28,67315,407],{"class":45},[28,67317,1367],{"class":34},[28,67319,67320,67322,67324,67326],{"class":30,"line":1694},[28,67321,54770],{"class":45},[28,67323,51512],{"class":34},[28,67325,407],{"class":45},[28,67327,1367],{"class":34},[28,67329,67330],{"class":30,"line":1700},[28,67331,2264],{"class":34},[28,67333,67334],{"class":30,"line":1705},[28,67335,2477],{"emptyLinePlaceholder":144},[28,67337,67338,67340],{"class":30,"line":1719},[28,67339,63751],{"class":2040},[28,67341,15649],{"class":34},[28,67343,67344,67346,67348,67350,67352],{"class":30,"line":1724},[28,67345,54846],{"class":45},[28,67347,51512],{"class":34},[28,67349,63762],{"class":45},[28,67351,51567],{"class":38},[28,67353,1367],{"class":34},[28,67355,67356,67358,67360,67362,67364],{"class":30,"line":1730},[28,67357,54860],{"class":45},[28,67359,51512],{"class":34},[28,67361,63775],{"class":45},[28,67363,51567],{"class":38},[28,67365,1367],{"class":34},[28,67367,67368,67370,67372,67374,67376],{"class":30,"line":1751},[28,67369,54781],{"class":45},[28,67371,51512],{"class":34},[28,67373,102],{"class":45},[28,67375,51567],{"class":38},[28,67377,1367],{"class":34},[28,67379,67380,67382,67384,67386,67388,67390,67392],{"class":30,"line":1756},[28,67381,62052],{"class":45},[28,67383,51512],{"class":34},[28,67385,46],{"class":45},[28,67387,51567],{"class":38},[28,67389,51596],{"class":45},[28,67391,62319],{"class":45},[28,67393,1367],{"class":34},[28,67395,67396],{"class":30,"line":1770},[28,67397,2264],{"class":34},[28,67399,67400],{"class":30,"line":1775},[28,67401,2477],{"emptyLinePlaceholder":144},[28,67403,67404,67406],{"class":30,"line":1804},[28,67405,63820],{"class":2040},[28,67407,15649],{"class":34},[28,67409,67410,67412,67414,67416,67418],{"class":30,"line":1809},[28,67411,54846],{"class":45},[28,67413,51512],{"class":34},[28,67415,525],{"class":45},[28,67417,542],{"class":38},[28,67419,1367],{"class":34},[28,67421,67422,67424,67426,67428,67430],{"class":30,"line":1826},[28,67423,54860],{"class":45},[28,67425,51512],{"class":34},[28,67427,1113],{"class":45},[28,67429,51567],{"class":38},[28,67431,1367],{"class":34},[28,67433,67434,67436,67438,67440,67442],{"class":30,"line":1831},[28,67435,57434],{"class":45},[28,67437,51512],{"class":34},[28,67439,1113],{"class":45},[28,67441,51567],{"class":38},[28,67443,1367],{"class":34},[28,67445,67446,67448,67450,67452],{"class":30,"line":1836},[28,67447,55084],{"class":45},[28,67449,51512],{"class":34},[28,67451,51552],{"class":45},[28,67453,1367],{"class":34},[28,67455,67456,67458,67460,67462],{"class":30,"line":1841},[28,67457,55095],{"class":45},[28,67459,51512],{"class":34},[28,67461,51743],{"class":45},[28,67463,1367],{"class":34},[28,67465,67466],{"class":30,"line":1855},[28,67467,2264],{"class":34},[28,67469,67470],{"class":30,"line":1860},[28,67471,2477],{"emptyLinePlaceholder":144},[28,67473,67474,67476,67478],{"class":30,"line":2654},[28,67475,63820],{"class":2040},[28,67477,63893],{"class":51375},[28,67479,15649],{"class":34},[28,67481,67482,67484,67486,67488,67490],{"class":30,"line":2668},[28,67483,54997],{"class":45},[28,67485,51512],{"class":34},[28,67487,1006],{"class":45},[28,67489,51567],{"class":38},[28,67491,1367],{"class":34},[28,67493,67494,67496,67498,67500],{"class":30,"line":2676},[28,67495,62409],{"class":45},[28,67497,51512],{"class":34},[28,67499,63916],{"class":45},[28,67501,1367],{"class":34},[28,67503,67504,67506,67508,67510,67512],{"class":30,"line":2681},[28,67505,62075],{"class":45},[28,67507,51512],{"class":34},[28,67509,102],{"class":45},[28,67511,51567],{"class":38},[28,67513,1367],{"class":34},[28,67515,67516],{"class":30,"line":2687},[28,67517,2264],{"class":34},[28,67519,67520],{"class":30,"line":2693},[28,67521,2477],{"emptyLinePlaceholder":144},[28,67523,67524,67526,67528],{"class":30,"line":2698},[28,67525,63820],{"class":2040},[28,67527,61367],{"class":51375},[28,67529,15649],{"class":34},[28,67531,67532,67534,67536,67538],{"class":30,"line":8025},[28,67533,54807],{"class":45},[28,67535,51512],{"class":34},[28,67537,54812],{"class":45},[28,67539,1367],{"class":34},[28,67541,67542,67544,67546,67548],{"class":30,"line":8049},[28,67543,55084],{"class":45},[28,67545,51512],{"class":34},[28,67547,51552],{"class":45},[28,67549,1367],{"class":34},[28,67551,67552,67554,67556,67558],{"class":30,"line":8054},[28,67553,55095],{"class":45},[28,67555,51512],{"class":34},[28,67557,51655],{"class":45},[28,67559,1367],{"class":34},[28,67561,67562],{"class":30,"line":8060},[28,67563,2264],{"class":34},[28,67565,67566],{"class":30,"line":8087},[28,67567,2477],{"emptyLinePlaceholder":144},[28,67569,67570,67572,67574,67576],{"class":30,"line":8092},[28,67571,63820],{"class":2040},[28,67573,61367],{"class":51375},[28,67575,55150],{"class":51375},[28,67577,15649],{"class":34},[28,67579,67580,67582,67584,67586,67588,67590],{"class":30,"line":8098},[28,67581,54781],{"class":45},[28,67583,51512],{"class":34},[28,67585,407],{"class":45},[28,67587,9027],{"class":45},[28,67589,51567],{"class":38},[28,67591,1367],{"class":34},[28,67593,67594,67596,67598,67600,67602],{"class":30,"line":8110},[28,67595,54997],{"class":45},[28,67597,51512],{"class":34},[28,67599,759],{"class":45},[28,67601,51567],{"class":38},[28,67603,1367],{"class":34},[28,67605,67606],{"class":30,"line":8122},[28,67607,2264],{"class":34},[28,67609,67610],{"class":30,"line":8134},[28,67611,2477],{"emptyLinePlaceholder":144},[28,67613,67614,67616,67618,67620,67622],{"class":30,"line":9793},[28,67615,63820],{"class":2040},[28,67617,61367],{"class":51375},[28,67619,55150],{"class":51375},[28,67621,1475],{"class":51375},[28,67623,15649],{"class":34},[28,67625,67626,67628,67630,67632],{"class":30,"line":9818},[28,67627,64045],{"class":45},[28,67629,51512],{"class":34},[28,67631,54812],{"class":45},[28,67633,1367],{"class":34},[28,67635,67636,67638,67640,67642,67644,67646,67648],{"class":30,"line":9841},[28,67637,62307],{"class":45},[28,67639,51512],{"class":34},[28,67641,52],{"class":45},[28,67643,51567],{"class":38},[28,67645,51596],{"class":45},[28,67647,64066],{"class":45},[28,67649,1367],{"class":34},[28,67651,67652,67654,67656,67658],{"class":30,"line":9865},[28,67653,57491],{"class":45},[28,67655,51512],{"class":34},[28,67657,62444],{"class":45},[28,67659,1367],{"class":34},[28,67661,67662],{"class":30,"line":9870},[28,67663,2264],{"class":34},[28,67665,67666],{"class":30,"line":9875},[28,67667,2477],{"emptyLinePlaceholder":144},[28,67669,67670,67672,67674,67676,67678,67680],{"class":30,"line":9880},[28,67671,63820],{"class":2040},[28,67673,61367],{"class":51375},[28,67675,55150],{"class":51375},[28,67677,1475],{"class":51375},[28,67679,64099],{"class":2040},[28,67681,15649],{"class":34},[28,67683,67684,67686,67688,67690],{"class":30,"line":9889},[28,67685,61866],{"class":45},[28,67687,51512],{"class":34},[28,67689,64110],{"class":45},[28,67691,1367],{"class":34},[28,67693,67694,67696,67698,67700],{"class":30,"line":9894},[28,67695,57491],{"class":45},[28,67697,51512],{"class":34},[28,67699,64110],{"class":45},[28,67701,1367],{"class":34},[28,67703,67704],{"class":30,"line":9900},[28,67705,2264],{"class":34},[28,67707,67708],{"class":30,"line":9921},[28,67709,2477],{"emptyLinePlaceholder":144},[28,67711,67712,67714],{"class":30,"line":9927},[28,67713,64135],{"class":2040},[28,67715,15649],{"class":34},[28,67717,67718,67720,67722,67724,67726,67728],{"class":30,"line":9941},[28,67719,54770],{"class":45},[28,67721,51512],{"class":34},[28,67723,407],{"class":45},[28,67725,64148],{"class":45},[28,67727,51567],{"class":38},[28,67729,1367],{"class":34},[28,67731,67732],{"class":30,"line":9947},[28,67733,2264],{"class":34},[28,67735,67736],{"class":30,"line":9974},[28,67737,2477],{"emptyLinePlaceholder":144},[28,67739,67740,67742,67744],{"class":30,"line":9983},[28,67741,64135],{"class":2040},[28,67743,62249],{"class":2040},[28,67745,15649],{"class":34},[28,67747,67748,67750,67752,67754],{"class":30,"line":9989},[28,67749,55084],{"class":45},[28,67751,51512],{"class":34},[28,67753,54812],{"class":45},[28,67755,1367],{"class":34},[28,67757,67758],{"class":30,"line":9997},[28,67759,2264],{"class":34},[28,67761,67762],{"class":30,"line":10002},[28,67763,2477],{"emptyLinePlaceholder":144},[28,67765,67766,67768,67771],{"class":30,"line":16681},[28,67767,64135],{"class":2040},[28,67769,67770],{"class":2040}," .active",[28,67772,15649],{"class":34},[28,67774,67775,67777,67779,67781],{"class":30,"line":16687},[28,67776,55084],{"class":45},[28,67778,51512],{"class":34},[28,67780,60944],{"class":45},[28,67782,1367],{"class":34},[28,67784,67785],{"class":30,"line":16710},[28,67786,2264],{"class":34},[28,67788,67789,67791,67793],{"class":30,"line":16716},[28,67790,52492],{"class":34},[28,67792,136],{"class":51375},[28,67794,51382],{"class":34},[28,67796,67797,67799,67801],{"class":30,"line":16739},[28,67798,51860],{"class":34},[28,67800,51409],{"class":51375},[28,67802,51382],{"class":34},[28,67804,67805],{"class":30,"line":16753},[28,67806,2477],{"emptyLinePlaceholder":144},[28,67808,67809,67811,67813],{"class":30,"line":16773},[28,67810,99],{"class":34},[28,67812,51875],{"class":51375},[28,67814,51382],{"class":34},[28,67816,67817,67819,67821,67823,67825,67827],{"class":30,"line":16779},[28,67818,52219],{"class":34},[28,67820,51686],{"class":51375},[28,67822,53561],{"class":2040},[28,67824,39],{"class":34},[28,67826,64250],{"class":320},[28,67828,51382],{"class":34},[28,67830,67831,67833,67835,67837,67839,67841],{"class":30,"line":16790},[28,67832,51416],{"class":34},[28,67834,51686],{"class":51375},[28,67836,53561],{"class":2040},[28,67838,39],{"class":34},[28,67840,64265],{"class":320},[28,67842,51382],{"class":34},[28,67844,67845,67847,67849,67851,67853],{"class":30,"line":16813},[28,67846,55309],{"class":34},[28,67848,188],{"class":51375},[28,67850,64276],{"class":34},[28,67852,188],{"class":51375},[28,67854,51382],{"class":34},[28,67856,67857,67859,67861],{"class":30,"line":16835},[28,67858,55309],{"class":34},[28,67860,1211],{"class":51375},[28,67862,51382],{"class":34},[28,67864,67865,67867,67869,67871,67873,67875,67877,67879,67881,67883,67885,67887,67889,67892,67894,67896,67898,67900],{"class":30,"line":16840},[28,67866,55377],{"class":34},[28,67868,174],{"class":51375},[28,67870,61127],{"class":34},[28,67872,35],{"class":51375},[28,67874,53561],{"class":2040},[28,67876,39],{"class":34},[28,67878,59781],{"class":320},[28,67880,61132],{"class":2040},[28,67882,39],{"class":34},[28,67884,64311],{"class":320},[28,67886,54026],{"class":2040},[28,67888,39],{"class":34},[28,67890,67891],{"class":320},"\"0\"",[28,67893,64314],{"class":34},[28,67895,35],{"class":51375},[28,67897,55389],{"class":34},[28,67899,174],{"class":51375},[28,67901,51382],{"class":34},[28,67903,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932],{"class":30,"line":16846},[28,67905,55377],{"class":34},[28,67907,174],{"class":51375},[28,67909,61127],{"class":34},[28,67911,35],{"class":51375},[28,67913,61132],{"class":2040},[28,67915,39],{"class":34},[28,67917,64311],{"class":320},[28,67919,54026],{"class":2040},[28,67921,39],{"class":34},[28,67923,3755],{"class":320},[28,67925,64341],{"class":34},[28,67927,35],{"class":51375},[28,67929,55389],{"class":34},[28,67931,174],{"class":51375},[28,67933,51382],{"class":34},[28,67935,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964],{"class":30,"line":16860},[28,67937,55377],{"class":34},[28,67939,174],{"class":51375},[28,67941,61127],{"class":34},[28,67943,35],{"class":51375},[28,67945,61132],{"class":2040},[28,67947,39],{"class":34},[28,67949,64311],{"class":320},[28,67951,54026],{"class":2040},[28,67953,39],{"class":34},[28,67955,3778],{"class":320},[28,67957,64368],{"class":34},[28,67959,35],{"class":51375},[28,67961,55389],{"class":34},[28,67963,174],{"class":51375},[28,67965,51382],{"class":34},[28,67967,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996],{"class":30,"line":16873},[28,67969,55377],{"class":34},[28,67971,174],{"class":51375},[28,67973,61127],{"class":34},[28,67975,35],{"class":51375},[28,67977,61132],{"class":2040},[28,67979,39],{"class":34},[28,67981,64311],{"class":320},[28,67983,54026],{"class":2040},[28,67985,39],{"class":34},[28,67987,3791],{"class":320},[28,67989,64395],{"class":34},[28,67991,35],{"class":51375},[28,67993,55389],{"class":34},[28,67995,174],{"class":51375},[28,67997,51382],{"class":34},[28,67999,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028],{"class":30,"line":16878},[28,68001,55377],{"class":34},[28,68003,174],{"class":51375},[28,68005,61127],{"class":34},[28,68007,35],{"class":51375},[28,68009,61132],{"class":2040},[28,68011,39],{"class":34},[28,68013,64311],{"class":320},[28,68015,54026],{"class":2040},[28,68017,39],{"class":34},[28,68019,3804],{"class":320},[28,68021,64422],{"class":34},[28,68023,35],{"class":51375},[28,68025,55389],{"class":34},[28,68027,174],{"class":51375},[28,68029,51382],{"class":34},[28,68031,68032,68034,68036],{"class":30,"line":16892},[28,68033,55482],{"class":34},[28,68035,1211],{"class":51375},[28,68037,51382],{"class":34},[28,68039,68040,68042,68044],{"class":30,"line":16897},[28,68041,51851],{"class":34},[28,68043,51686],{"class":51375},[28,68045,51382],{"class":34},[28,68047,68048,68050,68052,68054,68056,68058],{"class":30,"line":16903},[28,68049,51416],{"class":34},[28,68051,51686],{"class":51375},[28,68053,53561],{"class":2040},[28,68055,39],{"class":34},[28,68057,64459],{"class":320},[28,68059,51382],{"class":34},[28,68061,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092],{"class":30,"line":16908},[28,68063,55309],{"class":34},[28,68065,51686],{"class":51375},[28,68067,53561],{"class":2040},[28,68069,39],{"class":34},[28,68071,64474],{"class":320},[28,68073,61127],{"class":34},[28,68075,1539],{"class":51375},[28,68077,55314],{"class":2040},[28,68079,39],{"class":34},[28,68081,64485],{"class":320},[28,68083,55322],{"class":2040},[28,68085,39],{"class":34},[28,68087,7729],{"class":320},[28,68089,64494],{"class":34},[28,68091,51686],{"class":51375},[28,68093,51382],{"class":34},[28,68095,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126],{"class":30,"line":16922},[28,68097,55309],{"class":34},[28,68099,51686],{"class":51375},[28,68101,53561],{"class":2040},[28,68103,39],{"class":34},[28,68105,62698],{"class":320},[28,68107,61127],{"class":34},[28,68109,1539],{"class":51375},[28,68111,55314],{"class":2040},[28,68113,39],{"class":34},[28,68115,64521],{"class":320},[28,68117,55322],{"class":2040},[28,68119,39],{"class":34},[28,68121,7729],{"class":320},[28,68123,64494],{"class":34},[28,68125,51686],{"class":51375},[28,68127,51382],{"class":34},[28,68129,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160],{"class":30,"line":16927},[28,68131,55309],{"class":34},[28,68133,51686],{"class":51375},[28,68135,53561],{"class":2040},[28,68137,39],{"class":34},[28,68139,62698],{"class":320},[28,68141,61127],{"class":34},[28,68143,1539],{"class":51375},[28,68145,55314],{"class":2040},[28,68147,39],{"class":34},[28,68149,64556],{"class":320},[28,68151,55322],{"class":2040},[28,68153,39],{"class":34},[28,68155,7729],{"class":320},[28,68157,64494],{"class":34},[28,68159,51686],{"class":51375},[28,68161,51382],{"class":34},[28,68163,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194],{"class":30,"line":16932},[28,68165,55309],{"class":34},[28,68167,51686],{"class":51375},[28,68169,53561],{"class":2040},[28,68171,39],{"class":34},[28,68173,62698],{"class":320},[28,68175,61127],{"class":34},[28,68177,1539],{"class":51375},[28,68179,55314],{"class":2040},[28,68181,39],{"class":34},[28,68183,64591],{"class":320},[28,68185,55322],{"class":2040},[28,68187,39],{"class":34},[28,68189,7729],{"class":320},[28,68191,64494],{"class":34},[28,68193,51686],{"class":51375},[28,68195,51382],{"class":34},[28,68197,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228],{"class":30,"line":16946},[28,68199,55309],{"class":34},[28,68201,51686],{"class":51375},[28,68203,53561],{"class":2040},[28,68205,39],{"class":34},[28,68207,62698],{"class":320},[28,68209,61127],{"class":34},[28,68211,1539],{"class":51375},[28,68213,55314],{"class":2040},[28,68215,39],{"class":34},[28,68217,64626],{"class":320},[28,68219,55322],{"class":2040},[28,68221,39],{"class":34},[28,68223,7729],{"class":320},[28,68225,64494],{"class":34},[28,68227,51686],{"class":51375},[28,68229,51382],{"class":34},[28,68231,68232,68234,68236],{"class":30,"line":16958},[28,68233,51851],{"class":34},[28,68235,51686],{"class":51375},[28,68237,51382],{"class":34},[28,68239,68240,68242,68244],{"class":30,"line":16963},[28,68241,52492],{"class":34},[28,68243,51686],{"class":51375},[28,68245,51382],{"class":34},[28,68247,68248,68250,68252],{"class":30,"line":16976},[28,68249,52219],{"class":34},[28,68251,51888],{"class":51375},[28,68253,51382],{"class":34},[28,68255,68256],{"class":30,"line":16981},[28,68257,68258],{"class":105},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[28,68260,68261],{"class":30,"line":16986},[28,68262,68263],{"class":105},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[28,68265,68266,68268,68270,68272,68274,68276,68278,68281],{"class":30,"line":16991},[28,68267,11298],{"class":38},[28,68269,61367],{"class":45},[28,68271,13641],{"class":38},[28,68273,54471],{"class":34},[28,68275,54474],{"class":2040},[28,68277,221],{"class":34},[28,68279,68280],{"class":320},"'.tab-nav ul'",[28,68282,227],{"class":34},[28,68284,68285],{"class":30,"line":17004},[28,68286,68287],{"class":105},"    \u002F\u002F 2.添加事件\n",[28,68289,68290,68292,68294,68296,68298,68300,68302,68304,68306],{"class":30,"line":17009},[28,68291,67029],{"class":34},[28,68293,57888],{"class":2040},[28,68295,221],{"class":34},[28,68297,57893],{"class":320},[28,68299,12512],{"class":34},[28,68301,54524],{"class":38},[28,68303,1735],{"class":34},[28,68305,291],{"class":5293},[28,68307,12519],{"class":34},[28,68309,68310,68312,68314],{"class":30,"line":32709},[28,68311,58319],{"class":34},[28,68313,67085],{"class":2040},[28,68315,67088],{"class":34},[28,68317,68318],{"class":30,"line":32715},[28,68319,68320],{"class":105},"      \u002F\u002Fe.targer是我们点击的对象\n",[28,68322,68323,68325,68327,68329,68332],{"class":30,"line":32721},[28,68324,54555],{"class":38},[28,68326,67109],{"class":34},[28,68328,54561],{"class":38},[28,68330,68331],{"class":320}," 'A'",[28,68333,12519],{"class":34},[28,68335,68336,68338,68340,68342,68345,68347,68349,68351,68353],{"class":30,"line":32727},[28,68337,52000],{"class":34},[28,68339,54474],{"class":2040},[28,68341,221],{"class":34},[28,68343,68344],{"class":320},"'.active'",[28,68346,57078],{"class":34},[28,68348,57081],{"class":2040},[28,68350,221],{"class":34},[28,68352,64789],{"class":320},[28,68354,227],{"class":34},[28,68356,68357,68360,68362,68364,68366],{"class":30,"line":32733},[28,68358,68359],{"class":34},"        e.target.classList.",[28,68361,5411],{"class":2040},[28,68363,221],{"class":34},[28,68365,64789],{"class":320},[28,68367,227],{"class":34},[28,68369,68370],{"class":30,"line":32744},[28,68371,2477],{"emptyLinePlaceholder":144},[28,68373,68374],{"class":30,"line":32750},[28,68375,68376],{"class":105},"        \u002F\u002F 下面大盒子模块\n",[28,68378,68379],{"class":30,"line":32770},[28,68380,68381],{"class":105},"        \u002F\u002F console.log(e.target.dataset.id)\n",[28,68383,68384,68386,68388,68390,68392],{"class":30,"line":32776},[28,68385,61345],{"class":38},[28,68387,3109],{"class":45},[28,68389,13641],{"class":38},[28,68391,45642],{"class":38},[28,68393,68394],{"class":34},"e.target.dataset.id\n",[28,68396,68397,68399,68401,68403,68405,68407,68409,68411,68413],{"class":30,"line":32787},[28,68398,52000],{"class":34},[28,68400,54474],{"class":2040},[28,68402,221],{"class":34},[28,68404,64837],{"class":320},[28,68406,57078],{"class":34},[28,68408,57081],{"class":2040},[28,68410,221],{"class":34},[28,68412,64789],{"class":320},[28,68414,227],{"class":34},[28,68416,68417,68419,68421,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441],{"class":30,"line":32793},[28,68418,52000],{"class":34},[28,68420,54474],{"class":2040},[28,68422,221],{"class":34},[28,68424,64863],{"class":320},[28,68426,654],{"class":34},[28,68428,45642],{"class":38},[28,68430,25196],{"class":45},[28,68432,57107],{"class":320},[28,68434,57078],{"class":34},[28,68436,5411],{"class":2040},[28,68438,221],{"class":34},[28,68440,64789],{"class":320},[28,68442,227],{"class":34},[28,68444,68445],{"class":30,"line":32799},[28,68446,2477],{"emptyLinePlaceholder":144},[28,68448,68449],{"class":30,"line":32805},[28,68450,52473],{"class":34},[28,68452,68453],{"class":30,"line":32811},[28,68454,33537],{"class":34},[28,68456,68457,68459,68461],{"class":30,"line":32817},[28,68458,52492],{"class":34},[28,68460,51888],{"class":51375},[28,68462,51382],{"class":34},[28,68464,68465,68467,68469],{"class":30,"line":32823},[28,68466,51860],{"class":34},[28,68468,51875],{"class":51375},[28,68470,51382],{"class":34},[28,68472,68473],{"class":30,"line":32829},[28,68474,2477],{"emptyLinePlaceholder":144},[28,68476,68477,68479,68481],{"class":30,"line":32849},[28,68478,51860],{"class":34},[28,68480,50710],{"class":51375},[28,68482,51382],{"class":34},[188,68484,68486],{"id":68485},"_333-页面加载事件","3.3.3 页面加载事件",[171,68488,68489],{},[174,68490,68491],{},"load",[14,68493,68494],{},[1539,68495],{"alt":23,"src":68496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68498,68499],{},"window代表整个窗口，比document还要大",[14,68501,68502],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68504,68505],{},"img.addEventListener('load', function () {",[14,68507,68508],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68510,52539],{},[171,68512,68513],{"start":94},[174,68514,68515],{},"DOMContentLoaded",[14,68517,68518],{},[1539,68519],{"alt":23,"src":68520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68522,68523],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[188,68525,68527],{"id":68526},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68529,68530],{},[1539,68531],{"alt":23,"src":68532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68534,68535],{},[1539,68536],{"alt":23,"src":68537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68539,68540],{},[1539,68541],{"alt":23,"src":68542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68544,68545],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68547,68548],{},"获得的是数字型数据，不带单位",[14,68550,68551],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68553,68554],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68556,68557],{},"它是通过document.documentElement来获取",[14,68559,68560],{},[1539,68561],{"alt":23,"src":68562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68564,68565],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[188,68567,68569],{"id":68568},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68571,68572],{},[1539,68573],{"alt":23,"src":68574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68576,68577],{},[1539,68578],{"alt":23,"src":68579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[188,68581,68583],{"id":68582},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68585,68586],{},[1539,68587],{"alt":23,"src":68588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68590,68591],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68593,68594],{},[1539,68595],{"alt":23,"src":68596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68598,68599],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68601,68602],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68604,68605],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68607,68608],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68610,68611],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68613,68614],{},[1539,68615],{"alt":23,"src":68616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68618,68619],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68621,68622],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68624,68625],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68627,68628],{},"e.pageX-box.getBoundingClientRect()",[188,68630,68632],{"id":68631},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68634,68635],{},[1539,68636],{"alt":23,"src":68637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68639,68640],{},"这个是相对于视口来说的，它是个方法，不是属性值",[188,68642,68644],{"id":68643},"_338-总结","3.3.8 总结",[14,68646,68647],{},[1539,68648],{"alt":23,"src":68649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68651,68652],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68654,68655],{},"修改盒子的宽高只能通过width和height来实现",[188,68657,68659],{"id":68658},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[18,68661,68663],{"className":50708,"code":68662,"language":50710,"meta":23,"style":23},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[25,68664,68665,68670,68675,68680,68685],{"__ignoreMap":23},[28,68666,68667],{"class":30,"line":31},[28,68668,68669],{"class":34},"\u002F* 页面滑动 *\u002F\n",[28,68671,68672],{"class":30,"line":94},[28,68673,68674],{"class":34},"html {\n",[28,68676,68677],{"class":30,"line":109},[28,68678,68679],{"class":34},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[28,68681,68682],{"class":30,"line":125},[28,68683,68684],{"class":34},"  scroll-behavior: smooth;\n",[28,68686,68687],{"class":30,"line":131},[28,68688,1642],{"class":34},[14,68690,68691],{},"默认是auto",[188,68693,68695],{"id":68694},"_3310-日期对象","3.3.10 日期对象",[22075,68697,68699],{"id":68698},"_33101-实例化","3.3.10.1 实例化",[14,68701,68702],{},[1539,68703],{"alt":23,"src":68704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22075,68706,68708],{"id":68707},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68710,68711],{},[1539,68712],{"alt":23,"src":68713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68715,68716],{},"月份+1",[14,68718,68719],{},"老外认为第一天为0，星期天",[14,68721,68722],{},"方法使用的时候必须要跟括号",[14,68724,68725],{},"快速获得日期",[14,68727,68728],{},"\u002F\u002F 得到年月日",[14,68730,68731],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68733,68734],{},"\u002F\u002F 得到当地日期",[14,68736,68737],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68739,68740],{},"\u002F\u002F 得到当地时间",[14,68742,68743],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68745,68746],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68748,68749],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51888,68751,68752],{},"\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,68754,68755],{},"学会去封装函数！",[22075,68757,68759],{"id":68758},"_33103-时间戳","3.3.10.3 时间戳",[14,68761,68762],{},[1539,68763],{"alt":23,"src":68764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68766,68767],{},[1539,68768],{"alt":23,"src":68769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68771,68772],{},"三种方法记住一个就可以",[188,68774,68776],{"id":68775},"_3311-节点操作","3.3.11 节点操作",[22075,68778,68780],{"id":68779},"_33111-dom节点","3.3.11.1 DOM节点",[14,68782,68783],{},[1539,68784],{"alt":23,"src":68785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68787,68788],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22075,68790,68792],{"id":68791},"_33112-查找节点","3.3.11.2 查找节点",[14,68794,68795],{},"前边的document.querySelector()是获取的元素",[14,68797,68798],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68800,68801],{},[1539,68802],{"alt":23,"src":68803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[171,68805,68806],{},[174,68807,68808],{},"父节点",[14,68810,68811],{},[1539,68812],{"alt":23,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[171,68815,68816],{"start":94},[174,68817,68818],{},"子节点",[14,68820,68821],{},[1539,68822],{"alt":23,"src":68823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68825,68826],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68828,68829],{},"children获得的是伪数组，是亲儿子",[171,68831,68832],{"start":109},[174,68833,68834],{},"兄弟节点",[14,68836,68837],{},[1539,68838],{"alt":23,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22075,68841,68843],{"id":68842},"_33113-增加节点","3.3.11.3 增加节点",[14,68845,68846],{},[1539,68847],{"alt":23,"src":68848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68850,68851],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68853,68854],{},[1539,68855],{"alt":23,"src":68856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68858,68859],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68861,68862],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68864,68865],{},"例：",[51888,68867,68868],{},"\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,68870,68871],{},[1539,68872],{"alt":23,"src":68873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68875,68876],{},"false只克隆标签，里边的内容不会克隆过来",[18,68878,68880],{"className":50708,"code":68879,"language":50710,"meta":23,"style":23},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[25,68881,68882],{"__ignoreMap":23},[28,68883,68884],{"class":30,"line":31},[28,68885,68879],{"class":34},[22075,68887,68889],{"id":68888},"_33114-删除节点","3.3.11.4 删除节点",[14,68891,68892],{},[1539,68893],{"alt":23,"src":68894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68896,68897],{},"父亲删儿子",[14,68899,68900],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[188,68902,68904],{"id":68903},"_3312-m端事件","3.3.12 M端事件",[14,68906,68907],{},"M端就是移动端",[14,68909,68910],{},[1539,68911],{"alt":23,"src":68912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[188,68914,68916],{"id":68915},"_3313-插件","3.3.13 插件",[14,68918,68919],{},"要熟悉官网！！！",[14,68921,68922],{},[35,68923,68924],{"href":68924,"rel":68925},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23942],[14,68927,68928],{},[35,68929,68930],{"href":68930,"rel":68931},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23942],[188,68933,68935],{"id":68934},"_3314-学生信息表","3.3.14 学生信息表",[171,68937,68938,68941,68944,68947,68950,68953,68956,68959],{},[174,68939,68940],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[174,68942,68943],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[174,68945,68946],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[174,68948,68949],{},"用好表单元素自带的属性，value,name等",[174,68951,68952],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[174,68954,68955],{},"不要忘记事件对象",[174,68957,68958],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[174,68960,68961],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68963,68964],{},"结构：",[18,68966,68968],{"className":50708,"code":68967,"language":50710,"meta":23,"style":23},"\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",[25,68969,68970,68980,68994,68998,69006,69020,69040,69061,69074,69098,69106,69110,69118,69131,69152,69180,69208,69213,69235,69255,69274,69282,69310,69332,69352,69372,69392,69412,69432,69440,69460,69468,69472,69485,69493,69501,69509,69522,69535,69548,69561,69574,69587,69600,69608,69616,69624,69629,69634,69639,69644,69649,69654,69659,69664,69669,69674,69679,69684,69689,69697,69705,69713,69717,69737,69756,69776,69796,69816,69836,69840,69845,69865,69870,69880,69885,69890,69910,69932,69937,69947,69951,69955,69960,69965,69994,70008,70023,70027,70031,70035,70040,70051,70064,70069,70074,70079,70084,70089,70093,70098,70103,70112,70117,70122,70134,70139,70146,70150,70155,70165,70170,70180,70185,70213,70234,70244,70264,70282,70299,70316,70333,70350,70354,70364,70369,70374,70379,70390,70394,70398,70402,70407,70412,70433,70445,70450,70455,70460,70474,70479,70486,70490,70494,70502,70506,70514,70518],{"__ignoreMap":23},[28,68971,68972,68974,68976,68978],{"class":30,"line":31},[28,68973,51372],{"class":34},[28,68975,51376],{"class":51375},[28,68977,51379],{"class":2040},[28,68979,51382],{"class":34},[28,68981,68982,68984,68986,68988,68990,68992],{"class":30,"line":94},[28,68983,99],{"class":34},[28,68985,50710],{"class":51375},[28,68987,51391],{"class":2040},[28,68989,39],{"class":34},[28,68991,51396],{"class":320},[28,68993,51382],{"class":34},[28,68995,68996],{"class":30,"line":109},[28,68997,2477],{"emptyLinePlaceholder":144},[28,68999,69000,69002,69004],{"class":30,"line":125},[28,69001,99],{"class":34},[28,69003,51409],{"class":51375},[28,69005,51382],{"class":34},[28,69007,69008,69010,69012,69014,69016,69018],{"class":30,"line":131},[28,69009,52219],{"class":34},[28,69011,51419],{"class":51375},[28,69013,51422],{"class":2040},[28,69015,39],{"class":34},[28,69017,51427],{"class":320},[28,69019,59202],{"class":34},[28,69021,69022,69024,69026,69028,69030,69032,69034,69036,69038],{"class":30,"line":1291},[28,69023,52219],{"class":34},[28,69025,51419],{"class":51375},[28,69027,14997],{"class":2040},[28,69029,39],{"class":34},[28,69031,51466],{"class":320},[28,69033,51446],{"class":2040},[28,69035,39],{"class":34},[28,69037,51473],{"class":320},[28,69039,59202],{"class":34},[28,69041,69042,69044,69046,69048,69050,69052,69054,69056,69059],{"class":30,"line":1297},[28,69043,52219],{"class":34},[28,69045,51419],{"class":51375},[28,69047,51438],{"class":2040},[28,69049,39],{"class":34},[28,69051,51443],{"class":320},[28,69053,51446],{"class":2040},[28,69055,39],{"class":34},[28,69057,69058],{"class":320},"\"ie=edge\"",[28,69060,59202],{"class":34},[28,69062,69063,69065,69067,69070,69072],{"class":30,"line":1388},[28,69064,52219],{"class":34},[28,69066,51482],{"class":51375},[28,69068,69069],{"class":34},">学生信息管理\u003C\u002F",[28,69071,51482],{"class":51375},[28,69073,51382],{"class":34},[28,69075,69076,69078,69081,69084,69086,69089,69091,69093,69096],{"class":30,"line":1394},[28,69077,52219],{"class":34},[28,69079,69080],{"class":51375},"link",[28,69082,69083],{"class":2040}," rel",[28,69085,39],{"class":34},[28,69087,69088],{"class":320},"\"stylesheet\"",[28,69090,61132],{"class":2040},[28,69092,39],{"class":34},[28,69094,69095],{"class":320},"\"css\u002Findex.css\"",[28,69097,59202],{"class":34},[28,69099,69100,69102,69104],{"class":30,"line":1406},[28,69101,51860],{"class":34},[28,69103,51409],{"class":51375},[28,69105,51382],{"class":34},[28,69107,69108],{"class":30,"line":1689},[28,69109,2477],{"emptyLinePlaceholder":144},[28,69111,69112,69114,69116],{"class":30,"line":1694},[28,69113,99],{"class":34},[28,69115,51875],{"class":51375},[28,69117,51382],{"class":34},[28,69119,69120,69122,69124,69127,69129],{"class":30,"line":1700},[28,69121,52219],{"class":34},[28,69123,10],{"class":51375},[28,69125,69126],{"class":34},">新增学员\u003C\u002F",[28,69128,10],{"class":51375},[28,69130,51382],{"class":34},[28,69132,69133,69135,69137,69139,69141,69143,69146,69148,69150],{"class":30,"line":1705},[28,69134,52219],{"class":34},[28,69136,66700],{"class":51375},[28,69138,53561],{"class":2040},[28,69140,39],{"class":34},[28,69142,62739],{"class":320},[28,69144,69145],{"class":2040}," autocomplete",[28,69147,39],{"class":34},[28,69149,31852],{"class":320},[28,69151,51382],{"class":34},[28,69153,69154,69157,69159,69161,69163,69165,69167,69169,69172,69174,69176,69178],{"class":30,"line":1719},[28,69155,69156],{"class":34},"    姓名：\u003C",[28,69158,53896],{"class":51375},[28,69160,53899],{"class":2040},[28,69162,39],{"class":34},[28,69164,62774],{"class":320},[28,69166,53561],{"class":2040},[28,69168,39],{"class":34},[28,69170,69171],{"class":320},"\"uname\"",[28,69173,14997],{"class":2040},[28,69175,39],{"class":34},[28,69177,69171],{"class":320},[28,69179,59202],{"class":34},[28,69181,69182,69185,69187,69189,69191,69193,69195,69197,69200,69202,69204,69206],{"class":30,"line":1724},[28,69183,69184],{"class":34},"    年龄：\u003C",[28,69186,53896],{"class":51375},[28,69188,53899],{"class":2040},[28,69190,39],{"class":34},[28,69192,62774],{"class":320},[28,69194,53561],{"class":2040},[28,69196,39],{"class":34},[28,69198,69199],{"class":320},"\"age\"",[28,69201,14997],{"class":2040},[28,69203,39],{"class":34},[28,69205,69199],{"class":320},[28,69207,59202],{"class":34},[28,69209,69210],{"class":30,"line":1730},[28,69211,69212],{"class":34},"    性别:\n",[28,69214,69215,69217,69220,69222,69224,69227,69229,69231,69233],{"class":30,"line":1751},[28,69216,51416],{"class":34},[28,69218,69219],{"class":51375},"select",[28,69221,14997],{"class":2040},[28,69223,39],{"class":34},[28,69225,69226],{"class":320},"\"gender\"",[28,69228,53561],{"class":2040},[28,69230,39],{"class":34},[28,69232,69226],{"class":320},[28,69234,51382],{"class":34},[28,69236,69237,69239,69242,69244,69246,69248,69251,69253],{"class":30,"line":1756},[28,69238,55309],{"class":34},[28,69240,69241],{"class":51375},"option",[28,69243,66726],{"class":2040},[28,69245,39],{"class":34},[28,69247,10038],{"class":320},[28,69249,69250],{"class":34},">男\u003C\u002F",[28,69252,69241],{"class":51375},[28,69254,51382],{"class":34},[28,69256,69257,69259,69261,69263,69265,69267,69270,69272],{"class":30,"line":1770},[28,69258,55309],{"class":34},[28,69260,69241],{"class":51375},[28,69262,66726],{"class":2040},[28,69264,39],{"class":34},[28,69266,10107],{"class":320},[28,69268,69269],{"class":34},">女\u003C\u002F",[28,69271,69241],{"class":51375},[28,69273,51382],{"class":34},[28,69275,69276,69278,69280],{"class":30,"line":1775},[28,69277,51851],{"class":34},[28,69279,69219],{"class":51375},[28,69281,51382],{"class":34},[28,69283,69284,69287,69289,69291,69293,69295,69297,69299,69302,69304,69306,69308],{"class":30,"line":1804},[28,69285,69286],{"class":34},"    薪资：\u003C",[28,69288,53896],{"class":51375},[28,69290,53899],{"class":2040},[28,69292,39],{"class":34},[28,69294,62774],{"class":320},[28,69296,53561],{"class":2040},[28,69298,39],{"class":34},[28,69300,69301],{"class":320},"\"salary\"",[28,69303,14997],{"class":2040},[28,69305,39],{"class":34},[28,69307,69301],{"class":320},[28,69309,59202],{"class":34},[28,69311,69312,69315,69317,69319,69321,69324,69326,69328,69330],{"class":30,"line":1809},[28,69313,69314],{"class":34},"    就业城市：\u003C",[28,69316,69219],{"class":51375},[28,69318,14997],{"class":2040},[28,69320,39],{"class":34},[28,69322,69323],{"class":320},"\"city\"",[28,69325,53561],{"class":2040},[28,69327,39],{"class":34},[28,69329,69323],{"class":320},[28,69331,51382],{"class":34},[28,69333,69334,69336,69338,69340,69342,69345,69348,69350],{"class":30,"line":1826},[28,69335,55309],{"class":34},[28,69337,69241],{"class":51375},[28,69339,66726],{"class":2040},[28,69341,39],{"class":34},[28,69343,69344],{"class":320},"\"北京\"",[28,69346,69347],{"class":34},">北京\u003C\u002F",[28,69349,69241],{"class":51375},[28,69351,51382],{"class":34},[28,69353,69354,69356,69358,69360,69362,69365,69368,69370],{"class":30,"line":1831},[28,69355,55309],{"class":34},[28,69357,69241],{"class":51375},[28,69359,66726],{"class":2040},[28,69361,39],{"class":34},[28,69363,69364],{"class":320},"\"上海\"",[28,69366,69367],{"class":34},">上海\u003C\u002F",[28,69369,69241],{"class":51375},[28,69371,51382],{"class":34},[28,69373,69374,69376,69378,69380,69382,69385,69388,69390],{"class":30,"line":1836},[28,69375,55309],{"class":34},[28,69377,69241],{"class":51375},[28,69379,66726],{"class":2040},[28,69381,39],{"class":34},[28,69383,69384],{"class":320},"\"广州\"",[28,69386,69387],{"class":34},">广州\u003C\u002F",[28,69389,69241],{"class":51375},[28,69391,51382],{"class":34},[28,69393,69394,69396,69398,69400,69402,69405,69408,69410],{"class":30,"line":1841},[28,69395,55309],{"class":34},[28,69397,69241],{"class":51375},[28,69399,66726],{"class":2040},[28,69401,39],{"class":34},[28,69403,69404],{"class":320},"\"深圳\"",[28,69406,69407],{"class":34},">深圳\u003C\u002F",[28,69409,69241],{"class":51375},[28,69411,51382],{"class":34},[28,69413,69414,69416,69418,69420,69422,69425,69428,69430],{"class":30,"line":1855},[28,69415,55309],{"class":34},[28,69417,69241],{"class":51375},[28,69419,66726],{"class":2040},[28,69421,39],{"class":34},[28,69423,69424],{"class":320},"\"曹县\"",[28,69426,69427],{"class":34},">曹县\u003C\u002F",[28,69429,69241],{"class":51375},[28,69431,51382],{"class":34},[28,69433,69434,69436,69438],{"class":30,"line":1860},[28,69435,51851],{"class":34},[28,69437,69219],{"class":51375},[28,69439,51382],{"class":34},[28,69441,69442,69444,69446,69448,69450,69453,69456,69458],{"class":30,"line":2654},[28,69443,51416],{"class":34},[28,69445,53962],{"class":51375},[28,69447,53561],{"class":2040},[28,69449,39],{"class":34},[28,69451,69452],{"class":320},"\"add\"",[28,69454,69455],{"class":34},">录入\u003C\u002F",[28,69457,53962],{"class":51375},[28,69459,51382],{"class":34},[28,69461,69462,69464,69466],{"class":30,"line":2668},[28,69463,52492],{"class":34},[28,69465,66700],{"class":51375},[28,69467,51382],{"class":34},[28,69469,69470],{"class":30,"line":2676},[28,69471,2477],{"emptyLinePlaceholder":144},[28,69473,69474,69476,69478,69481,69483],{"class":30,"line":2681},[28,69475,52219],{"class":34},[28,69477,10],{"class":51375},[28,69479,69480],{"class":34},">就业榜\u003C\u002F",[28,69482,10],{"class":51375},[28,69484,51382],{"class":34},[28,69486,69487,69489,69491],{"class":30,"line":2687},[28,69488,52219],{"class":34},[28,69490,353],{"class":51375},[28,69492,51382],{"class":34},[28,69494,69495,69497,69499],{"class":30,"line":2693},[28,69496,51416],{"class":34},[28,69498,356],{"class":51375},[28,69500,51382],{"class":34},[28,69502,69503,69505,69507],{"class":30,"line":2698},[28,69504,55309],{"class":34},[28,69506,359],{"class":51375},[28,69508,51382],{"class":34},[28,69510,69511,69513,69515,69518,69520],{"class":30,"line":8025},[28,69512,55377],{"class":34},[28,69514,362],{"class":51375},[28,69516,69517],{"class":34},">序号\u003C\u002F",[28,69519,362],{"class":51375},[28,69521,51382],{"class":34},[28,69523,69524,69526,69528,69531,69533],{"class":30,"line":8049},[28,69525,55377],{"class":34},[28,69527,362],{"class":51375},[28,69529,69530],{"class":34},">姓名\u003C\u002F",[28,69532,362],{"class":51375},[28,69534,51382],{"class":34},[28,69536,69537,69539,69541,69544,69546],{"class":30,"line":8054},[28,69538,55377],{"class":34},[28,69540,362],{"class":51375},[28,69542,69543],{"class":34},">年龄\u003C\u002F",[28,69545,362],{"class":51375},[28,69547,51382],{"class":34},[28,69549,69550,69552,69554,69557,69559],{"class":30,"line":8060},[28,69551,55377],{"class":34},[28,69553,362],{"class":51375},[28,69555,69556],{"class":34},">性别\u003C\u002F",[28,69558,362],{"class":51375},[28,69560,51382],{"class":34},[28,69562,69563,69565,69567,69570,69572],{"class":30,"line":8087},[28,69564,55377],{"class":34},[28,69566,362],{"class":51375},[28,69568,69569],{"class":34},">薪资\u003C\u002F",[28,69571,362],{"class":51375},[28,69573,51382],{"class":34},[28,69575,69576,69578,69580,69583,69585],{"class":30,"line":8092},[28,69577,55377],{"class":34},[28,69579,362],{"class":51375},[28,69581,69582],{"class":34},">就业城市\u003C\u002F",[28,69584,362],{"class":51375},[28,69586,51382],{"class":34},[28,69588,69589,69591,69593,69596,69598],{"class":30,"line":8098},[28,69590,55377],{"class":34},[28,69592,362],{"class":51375},[28,69594,69595],{"class":34},">操作\u003C\u002F",[28,69597,362],{"class":51375},[28,69599,51382],{"class":34},[28,69601,69602,69604,69606],{"class":30,"line":8110},[28,69603,55482],{"class":34},[28,69605,359],{"class":51375},[28,69607,51382],{"class":34},[28,69609,69610,69612,69614],{"class":30,"line":8122},[28,69611,51851],{"class":34},[28,69613,356],{"class":51375},[28,69615,51382],{"class":34},[28,69617,69618,69620,69622],{"class":30,"line":8134},[28,69619,51416],{"class":34},[28,69621,400],{"class":51375},[28,69623,51382],{"class":34},[28,69625,69626],{"class":30,"line":9793},[28,69627,69628],{"class":105},"      \u003C!-- \n",[28,69630,69631],{"class":30,"line":9818},[28,69632,69633],{"class":105},"        \u003Ctr>\n",[28,69635,69636],{"class":30,"line":9841},[28,69637,69638],{"class":105},"          \u003Ctd>1001\u003C\u002Ftd>\n",[28,69640,69641],{"class":30,"line":9865},[28,69642,69643],{"class":105},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[28,69645,69646],{"class":30,"line":9870},[28,69647,69648],{"class":105},"          \u003Ctd>19\u003C\u002Ftd>\n",[28,69650,69651],{"class":30,"line":9875},[28,69652,69653],{"class":105},"          \u003Ctd>男\u003C\u002Ftd>\n",[28,69655,69656],{"class":30,"line":9880},[28,69657,69658],{"class":105},"          \u003Ctd>15000\u003C\u002Ftd>\n",[28,69660,69661],{"class":30,"line":9889},[28,69662,69663],{"class":105},"          \u003Ctd>上海\u003C\u002Ftd>\n",[28,69665,69666],{"class":30,"line":9894},[28,69667,69668],{"class":105},"          \u003Ctd>\n",[28,69670,69671],{"class":30,"line":9900},[28,69672,69673],{"class":105},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[28,69675,69676],{"class":30,"line":9921},[28,69677,69678],{"class":105},"          \u003C\u002Ftd>\n",[28,69680,69681],{"class":30,"line":9927},[28,69682,69683],{"class":105},"        \u003C\u002Ftr> \n",[28,69685,69686],{"class":30,"line":9941},[28,69687,69688],{"class":105},"        -->\n",[28,69690,69691,69693,69695],{"class":30,"line":9947},[28,69692,51851],{"class":34},[28,69694,400],{"class":51375},[28,69696,51382],{"class":34},[28,69698,69699,69701,69703],{"class":30,"line":9974},[28,69700,52492],{"class":34},[28,69702,353],{"class":51375},[28,69704,51382],{"class":34},[28,69706,69707,69709,69711],{"class":30,"line":9983},[28,69708,52219],{"class":34},[28,69710,51888],{"class":51375},[28,69712,51382],{"class":34},[28,69714,69715],{"class":30,"line":9989},[28,69716,60033],{"class":105},[28,69718,69719,69721,69724,69726,69728,69730,69732,69735],{"class":30,"line":9997},[28,69720,11298],{"class":38},[28,69722,69723],{"class":45}," uname",[28,69725,13641],{"class":38},[28,69727,54471],{"class":34},[28,69729,54474],{"class":2040},[28,69731,221],{"class":34},[28,69733,69734],{"class":320},"'.uname'",[28,69736,227],{"class":34},[28,69738,69739,69741,69743,69745,69747,69749,69751,69754],{"class":30,"line":10002},[28,69740,11298],{"class":38},[28,69742,15766],{"class":45},[28,69744,13641],{"class":38},[28,69746,54471],{"class":34},[28,69748,54474],{"class":2040},[28,69750,221],{"class":34},[28,69752,69753],{"class":320},"'.age'",[28,69755,227],{"class":34},[28,69757,69758,69760,69763,69765,69767,69769,69771,69774],{"class":30,"line":16681},[28,69759,11298],{"class":38},[28,69761,69762],{"class":45}," gender",[28,69764,13641],{"class":38},[28,69766,54471],{"class":34},[28,69768,54474],{"class":2040},[28,69770,221],{"class":34},[28,69772,69773],{"class":320},"'.gender'",[28,69775,227],{"class":34},[28,69777,69778,69780,69783,69785,69787,69789,69791,69794],{"class":30,"line":16687},[28,69779,11298],{"class":38},[28,69781,69782],{"class":45}," salary",[28,69784,13641],{"class":38},[28,69786,54471],{"class":34},[28,69788,54474],{"class":2040},[28,69790,221],{"class":34},[28,69792,69793],{"class":320},"'.salary'",[28,69795,227],{"class":34},[28,69797,69798,69800,69803,69805,69807,69809,69811,69814],{"class":30,"line":16710},[28,69799,11298],{"class":38},[28,69801,69802],{"class":45}," city",[28,69804,13641],{"class":38},[28,69806,54471],{"class":34},[28,69808,54474],{"class":2040},[28,69810,221],{"class":34},[28,69812,69813],{"class":320},"'.city'",[28,69815,227],{"class":34},[28,69817,69818,69820,69823,69825,69827,69829,69831,69834],{"class":30,"line":16716},[28,69819,11298],{"class":38},[28,69821,69822],{"class":45}," tbody",[28,69824,13641],{"class":38},[28,69826,54471],{"class":34},[28,69828,54474],{"class":2040},[28,69830,221],{"class":34},[28,69832,69833],{"class":320},"'tbody'",[28,69835,227],{"class":34},[28,69837,69838],{"class":30,"line":16739},[28,69839,2477],{"emptyLinePlaceholder":144},[28,69841,69842],{"class":30,"line":16753},[28,69843,69844],{"class":105},"    \u002F\u002F 获取所有带有name属性的元素\n",[28,69846,69847,69849,69852,69854,69856,69858,69860,69863],{"class":30,"line":16773},[28,69848,11298],{"class":38},[28,69850,69851],{"class":45}," items",[28,69853,13641],{"class":38},[28,69855,54471],{"class":34},[28,69857,55756],{"class":2040},[28,69859,221],{"class":34},[28,69861,69862],{"class":320},"'[name]'",[28,69864,227],{"class":34},[28,69866,69867],{"class":30,"line":16779},[28,69868,69869],{"class":105},"    \u002F\u002F 声明一个空的数组\n",[28,69871,69872,69874,69876,69878],{"class":30,"line":16790},[28,69873,11298],{"class":38},[28,69875,57770],{"class":45},[28,69877,13641],{"class":38},[28,69879,51913],{"class":34},[28,69881,69882],{"class":30,"line":16813},[28,69883,69884],{"class":105},"    \u002F\u002F 1.录入模块\n",[28,69886,69887],{"class":30,"line":16835},[28,69888,69889],{"class":105},"    \u002F\u002F 1.1这是一个表单提交事件\n",[28,69891,69892,69894,69897,69899,69901,69903,69905,69908],{"class":30,"line":16840},[28,69893,11298],{"class":38},[28,69895,69896],{"class":45}," info",[28,69898,13641],{"class":38},[28,69900,54471],{"class":34},[28,69902,54474],{"class":2040},[28,69904,221],{"class":34},[28,69906,69907],{"class":320},"'.info'",[28,69909,227],{"class":34},[28,69911,69912,69915,69917,69919,69922,69924,69926,69928,69930],{"class":30,"line":16846},[28,69913,69914],{"class":34},"    info.",[28,69916,57888],{"class":2040},[28,69918,221],{"class":34},[28,69920,69921],{"class":320},"'submit'",[28,69923,12512],{"class":34},[28,69925,54524],{"class":38},[28,69927,1735],{"class":34},[28,69929,291],{"class":5293},[28,69931,12519],{"class":34},[28,69933,69934],{"class":30,"line":16860},[28,69935,69936],{"class":105},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[28,69938,69939,69942,69945],{"class":30,"line":16873},[28,69940,69941],{"class":34},"      e.",[28,69943,69944],{"class":2040},"preventDefault",[28,69946,2053],{"class":34},[28,69948,69949],{"class":30,"line":16878},[28,69950,60087],{"class":105},[28,69952,69953],{"class":30,"line":16892},[28,69954,2477],{"emptyLinePlaceholder":144},[28,69956,69957],{"class":30,"line":16897},[28,69958,69959],{"class":105},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[28,69961,69962],{"class":30,"line":16903},[28,69963,69964],{"class":105},"      \u002F\u002F 先遍历循环\n",[28,69966,69967,69969,69971,69973,69975,69977,69979,69981,69983,69986,69988,69990,69992],{"class":30,"line":16908},[28,69968,52359],{"class":38},[28,69970,1735],{"class":34},[28,69972,51922],{"class":38},[28,69974,9515],{"class":34},[28,69976,39],{"class":38},[28,69978,4170],{"class":45},[28,69980,9522],{"class":34},[28,69982,99],{"class":38},[28,69984,69985],{"class":34}," items.",[28,69987,52043],{"class":45},[28,69989,3291],{"class":34},[28,69991,2369],{"class":38},[28,69993,12519],{"class":34},[28,69995,69996,69998,70001,70003,70006],{"class":30,"line":16922},[28,69997,2574],{"class":38},[28,69999,70000],{"class":34}," (items[i].value ",[28,70002,54561],{"class":38},[28,70004,70005],{"class":320}," ''",[28,70007,12519],{"class":34},[28,70009,70010,70013,70016,70018,70021],{"class":30,"line":16927},[28,70011,70012],{"class":38},"          return",[28,70014,70015],{"class":2040}," alert",[28,70017,221],{"class":34},[28,70019,70020],{"class":320},"'输入内容不能为空'",[28,70022,227],{"class":34},[28,70024,70025],{"class":30,"line":16932},[28,70026,2606],{"class":34},[28,70028,70029],{"class":30,"line":16946},[28,70030,52473],{"class":34},[28,70032,70033],{"class":30,"line":16958},[28,70034,2477],{"emptyLinePlaceholder":144},[28,70036,70037],{"class":30,"line":16963},[28,70038,70039],{"class":105},"      \u002F\u002F 创建新的对象\n",[28,70041,70042,70044,70047,70049],{"class":30,"line":16976},[28,70043,58303],{"class":38},[28,70045,70046],{"class":45}," obj",[28,70048,13641],{"class":38},[28,70050,15649],{"class":34},[28,70052,70053,70056,70058,70060,70062],{"class":30,"line":16981},[28,70054,70055],{"class":34},"        stuID: arr.",[28,70057,52043],{"class":45},[28,70059,45642],{"class":38},[28,70061,25196],{"class":45},[28,70063,31542],{"class":34},[28,70065,70066],{"class":30,"line":16986},[28,70067,70068],{"class":34},"        uname: uname.value,\n",[28,70070,70071],{"class":30,"line":16991},[28,70072,70073],{"class":34},"        age: age.value,\n",[28,70075,70076],{"class":30,"line":17004},[28,70077,70078],{"class":34},"        gender: gender.value,\n",[28,70080,70081],{"class":30,"line":17009},[28,70082,70083],{"class":34},"        salary: salary.value,\n",[28,70085,70086],{"class":30,"line":32709},[28,70087,70088],{"class":34},"        city: city.value\n",[28,70090,70091],{"class":30,"line":32715},[28,70092,52473],{"class":34},[28,70094,70095],{"class":30,"line":32721},[28,70096,70097],{"class":105},"      \u002F\u002F console.log(obj);\n",[28,70099,70100],{"class":30,"line":32727},[28,70101,70102],{"class":105},"      \u002F\u002F 追加到数组里面\n",[28,70104,70105,70107,70109],{"class":30,"line":32733},[28,70106,58082],{"class":34},[28,70108,51959],{"class":2040},[28,70110,70111],{"class":34},"(obj)\n",[28,70113,70114],{"class":30,"line":32744},[28,70115,70116],{"class":105},"      \u002F\u002F console.log(arr);\n",[28,70118,70119],{"class":30,"line":32750},[28,70120,70121],{"class":105},"      \u002F\u002F 清空表单  reset重置表单\n",[28,70123,70124,70127,70129,70132],{"class":30,"line":32770},[28,70125,70126],{"class":45},"      this",[28,70128,768],{"class":34},[28,70130,70131],{"class":2040},"reset",[28,70133,2053],{"class":34},[28,70135,70136],{"class":30,"line":32776},[28,70137,70138],{"class":105},"      \u002F\u002F 调用渲染函数\n",[28,70140,70141,70144],{"class":30,"line":32787},[28,70142,70143],{"class":2040},"      render",[28,70145,2053],{"class":34},[28,70147,70148],{"class":30,"line":32793},[28,70149,33537],{"class":34},[28,70151,70152],{"class":30,"line":32799},[28,70153,70154],{"class":105},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[28,70156,70157,70160,70163],{"class":30,"line":32805},[28,70158,70159],{"class":38},"    function",[28,70161,70162],{"class":2040}," render",[28,70164,10930],{"class":34},[28,70166,70167],{"class":30,"line":32811},[28,70168,70169],{"class":105},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[28,70171,70172,70175,70177],{"class":30,"line":32817},[28,70173,70174],{"class":34},"      tbody.innerHTML ",[28,70176,39],{"class":38},[28,70178,70179],{"class":320}," ''\n",[28,70181,70182],{"class":30,"line":32823},[28,70183,70184],{"class":105},"      \u002F\u002F 遍历数组\n",[28,70186,70187,70189,70191,70193,70195,70197,70199,70201,70203,70205,70207,70209,70211],{"class":30,"line":32829},[28,70188,52359],{"class":38},[28,70190,1735],{"class":34},[28,70192,51922],{"class":38},[28,70194,9515],{"class":34},[28,70196,39],{"class":38},[28,70198,4170],{"class":45},[28,70200,9522],{"class":34},[28,70202,99],{"class":38},[28,70204,52040],{"class":34},[28,70206,52043],{"class":45},[28,70208,3291],{"class":34},[28,70210,2369],{"class":38},[28,70212,12519],{"class":34},[28,70214,70215,70217,70220,70222,70224,70227,70229,70232],{"class":30,"line":32849},[28,70216,61345],{"class":38},[28,70218,70219],{"class":45}," tr",[28,70221,13641],{"class":38},[28,70223,54471],{"class":34},[28,70225,70226],{"class":2040},"createElement",[28,70228,221],{"class":34},[28,70230,70231],{"class":320},"'tr'",[28,70233,227],{"class":34},[28,70235,70236,70239,70241],{"class":30,"line":32855},[28,70237,70238],{"class":34},"        tr.innerHTML ",[28,70240,39],{"class":38},[28,70242,70243],{"class":320}," `\n",[28,70245,70246,70249,70251,70253,70255,70258,70261],{"class":30,"line":32871},[28,70247,70248],{"class":320},"        \u003Ctd>${",[28,70250,3957],{"class":34},[28,70252,1096],{"class":320},[28,70254,654],{"class":34},[28,70256,70257],{"class":320},"].",[28,70259,70260],{"class":34},"stuID",[28,70262,70263],{"class":320},"}\u003C\u002Ftd>\n",[28,70265,70266,70269,70271,70273,70275,70277,70280],{"class":30,"line":32877},[28,70267,70268],{"class":320},"          \u003Ctd>${",[28,70270,3957],{"class":34},[28,70272,1096],{"class":320},[28,70274,654],{"class":34},[28,70276,70257],{"class":320},[28,70278,70279],{"class":34},"uname",[28,70281,70263],{"class":320},[28,70283,70284,70286,70288,70290,70292,70294,70297],{"class":30,"line":32891},[28,70285,70268],{"class":320},[28,70287,3957],{"class":34},[28,70289,1096],{"class":320},[28,70291,654],{"class":34},[28,70293,70257],{"class":320},[28,70295,70296],{"class":34},"age",[28,70298,70263],{"class":320},[28,70300,70301,70303,70305,70307,70309,70311,70314],{"class":30,"line":32897},[28,70302,70268],{"class":320},[28,70304,3957],{"class":34},[28,70306,1096],{"class":320},[28,70308,654],{"class":34},[28,70310,70257],{"class":320},[28,70312,70313],{"class":34},"gender",[28,70315,70263],{"class":320},[28,70317,70318,70320,70322,70324,70326,70328,70331],{"class":30,"line":32912},[28,70319,70268],{"class":320},[28,70321,3957],{"class":34},[28,70323,1096],{"class":320},[28,70325,654],{"class":34},[28,70327,70257],{"class":320},[28,70329,70330],{"class":34},"salary",[28,70332,70263],{"class":320},[28,70334,70335,70337,70339,70341,70343,70345,70348],{"class":30,"line":32918},[28,70336,70268],{"class":320},[28,70338,3957],{"class":34},[28,70340,1096],{"class":320},[28,70342,654],{"class":34},[28,70344,70257],{"class":320},[28,70346,70347],{"class":34},"city",[28,70349,70263],{"class":320},[28,70351,70352],{"class":30,"line":32927},[28,70353,69668],{"class":320},[28,70355,70356,70359,70361],{"class":30,"line":32933},[28,70357,70358],{"class":320},"            \u003Ca href=\"javascript:\" data-id=${",[28,70360,654],{"class":34},[28,70362,70363],{"class":320},"}>删除\u003C\u002Fa>\n",[28,70365,70366],{"class":30,"line":32942},[28,70367,70368],{"class":320},"          \u003C\u002Ftd> \n",[28,70370,70371],{"class":30,"line":32948},[28,70372,70373],{"class":320},"          `\n",[28,70375,70376],{"class":30,"line":32954},[28,70377,70378],{"class":105},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[28,70380,70381,70384,70387],{"class":30,"line":32963},[28,70382,70383],{"class":34},"        tbody.",[28,70385,70386],{"class":2040},"appendChild",[28,70388,70389],{"class":34},"(tr)\n",[28,70391,70392],{"class":30,"line":32969},[28,70393,52473],{"class":34},[28,70395,70396],{"class":30,"line":32980},[28,70397,2264],{"class":34},[28,70399,70400],{"class":30,"line":32986},[28,70401,2477],{"emptyLinePlaceholder":144},[28,70403,70404],{"class":30,"line":33005},[28,70405,70406],{"class":105},"    \u002F\u002F 3.删除委托\n",[28,70408,70409],{"class":30,"line":33011},[28,70410,70411],{"class":105},"    \u002F\u002F 3.1 事件委托 tbody\n",[28,70413,70414,70417,70419,70421,70423,70425,70427,70429,70431],{"class":30,"line":33022},[28,70415,70416],{"class":34},"    tbody.",[28,70418,57888],{"class":2040},[28,70420,221],{"class":34},[28,70422,57893],{"class":320},[28,70424,12512],{"class":34},[28,70426,54524],{"class":38},[28,70428,1735],{"class":34},[28,70430,291],{"class":5293},[28,70432,12519],{"class":34},[28,70434,70435,70437,70439,70441,70443],{"class":30,"line":33028},[28,70436,54555],{"class":38},[28,70438,67109],{"class":34},[28,70440,54561],{"class":38},[28,70442,68331],{"class":320},[28,70444,12519],{"class":34},[28,70446,70447],{"class":30,"line":33048},[28,70448,70449],{"class":105},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[28,70451,70452],{"class":30,"line":33064},[28,70453,70454],{"class":105},"        \u002F\u002F console.log(e.target.dataset.id);\n",[28,70456,70457],{"class":30,"line":33070},[28,70458,70459],{"class":105},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[28,70461,70462,70465,70467,70470,70472],{"class":30,"line":33084},[28,70463,70464],{"class":34},"        arr.",[28,70466,58085],{"class":2040},[28,70468,70469],{"class":34},"(e.target.dataset.id, ",[28,70471,46],{"class":45},[28,70473,227],{"class":34},[28,70475,70476],{"class":30,"line":33090},[28,70477,70478],{"class":105},"        \u002F\u002F 重新渲染一次\n",[28,70480,70481,70484],{"class":30,"line":33096},[28,70482,70483],{"class":2040},"        render",[28,70485,2053],{"class":34},[28,70487,70488],{"class":30,"line":33107},[28,70489,52473],{"class":34},[28,70491,70492],{"class":30,"line":33113},[28,70493,33537],{"class":34},[28,70495,70496,70498,70500],{"class":30,"line":33119},[28,70497,52492],{"class":34},[28,70499,51888],{"class":51375},[28,70501,51382],{"class":34},[28,70503,70504],{"class":30,"line":33129},[28,70505,2477],{"emptyLinePlaceholder":144},[28,70507,70508,70510,70512],{"class":30,"line":33135},[28,70509,51860],{"class":34},[28,70511,51875],{"class":51375},[28,70513,51382],{"class":34},[28,70515,70516],{"class":30,"line":33146},[28,70517,2477],{"emptyLinePlaceholder":144},[28,70519,70520,70522,70524],{"class":30,"line":33152},[28,70521,51860],{"class":34},[28,70523,50710],{"class":51375},[28,70525,51382],{"class":34},[14,70527,70528],{},"样式：",[18,70530,70534],{"className":70531,"code":70532,"language":70533,"meta":23,"style":23},"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",[25,70535,70536,70541,70551,70560,70564,70568,70573,70583,70588,70592,70597,70607,70612,70621,70625,70629,70634,70639,70649,70659,70664,70668,70673,70682,70692,70697,70707,70717,70721,70726,70734,70738,70743,70748,70753,70761,70770,70774,70779,70788,70792,70797,70806,70810,70815,70824,70833,70841,70845,70850,70859,70869,70878,70888,70894,70903,70913,70923,70927,70932,70941,70949,70959,70967,70976,70985,70995,71003,71007,71012,71021],{"__ignoreMap":23},[28,70537,70538],{"class":30,"line":31},[28,70539,70540],{"class":34},"* {\n",[28,70542,70543,70546,70548],{"class":30,"line":94},[28,70544,70545],{"class":51375},"  margin",[28,70547,51512],{"class":34},[28,70549,70550],{"class":320},"0;\n",[28,70552,70553,70556,70558],{"class":30,"line":109},[28,70554,70555],{"class":320},"  padding",[28,70557,51512],{"class":34},[28,70559,70550],{"class":320},[28,70561,70562],{"class":30,"line":125},[28,70563,1642],{"class":34},[28,70565,70566],{"class":30,"line":131},[28,70567,2477],{"emptyLinePlaceholder":144},[28,70569,70570],{"class":30,"line":1291},[28,70571,70572],{"class":320},"a {\n",[28,70574,70575,70578,70580],{"class":30,"line":1297},[28,70576,70577],{"class":51375},"  text-decoration",[28,70579,51512],{"class":34},[28,70581,70582],{"class":320},"none;\n",[28,70584,70585],{"class":30,"line":1388},[28,70586,70587],{"class":320},"  color:#721c24;\n",[28,70589,70590],{"class":30,"line":1394},[28,70591,1642],{"class":34},[28,70593,70594],{"class":30,"line":1406},[28,70595,70596],{"class":320},"h1 {\n",[28,70598,70599,70602,70604],{"class":30,"line":1689},[28,70600,70601],{"class":51375},"  text-align",[28,70603,51512],{"class":34},[28,70605,70606],{"class":320},"center;\n",[28,70608,70609],{"class":30,"line":1694},[28,70610,70611],{"class":320},"  color:#333;\n",[28,70613,70614,70616,70618],{"class":30,"line":1700},[28,70615,70545],{"class":51375},[28,70617,51512],{"class":34},[28,70619,70620],{"class":320},"20px 0;\n",[28,70622,70623],{"class":30,"line":1705},[28,70624,2751],{"class":34},[28,70626,70627],{"class":30,"line":1719},[28,70628,1642],{"class":34},[28,70630,70631],{"class":30,"line":1724},[28,70632,70633],{"class":320},"table {\n",[28,70635,70636],{"class":30,"line":1730},[28,70637,70638],{"class":320},"  margin:0 auto;\n",[28,70640,70641,70644,70646],{"class":30,"line":1751},[28,70642,70643],{"class":51375},"  width",[28,70645,51512],{"class":34},[28,70647,70648],{"class":320},"800px;\n",[28,70650,70651,70654,70656],{"class":30,"line":1756},[28,70652,70653],{"class":51375},"  border-collapse",[28,70655,51512],{"class":34},[28,70657,70658],{"class":320},"collapse;\n",[28,70660,70661],{"class":30,"line":1770},[28,70662,70663],{"class":320},"  color:#004085;\n",[28,70665,70666],{"class":30,"line":1775},[28,70667,1642],{"class":34},[28,70669,70670],{"class":30,"line":1804},[28,70671,70672],{"class":320},"th {\n",[28,70674,70675,70677,70679],{"class":30,"line":1809},[28,70676,70555],{"class":51375},[28,70678,51512],{"class":34},[28,70680,70681],{"class":320},"10px;\n",[28,70683,70684,70687,70689],{"class":30,"line":1826},[28,70685,70686],{"class":51375},"  background",[28,70688,51512],{"class":34},[28,70690,70691],{"class":105},"#cfe5ff;\n",[28,70693,70694],{"class":30,"line":1831},[28,70695,70696],{"class":34},"  \n",[28,70698,70699,70702,70704],{"class":30,"line":1836},[28,70700,70701],{"class":51375},"  font-size",[28,70703,51512],{"class":34},[28,70705,70706],{"class":320},"20px;\n",[28,70708,70709,70712,70714],{"class":30,"line":1841},[28,70710,70711],{"class":51375},"  font-weight",[28,70713,51512],{"class":34},[28,70715,70716],{"class":320},"400;\n",[28,70718,70719],{"class":30,"line":1855},[28,70720,1642],{"class":34},[28,70722,70723],{"class":30,"line":1860},[28,70724,70725],{"class":320},"td,th {\n",[28,70727,70728,70731],{"class":30,"line":2654},[28,70729,70730],{"class":320},"  border:1px solid",[28,70732,70733],{"class":105}," #b8daff;\n",[28,70735,70736],{"class":30,"line":2668},[28,70737,1642],{"class":34},[28,70739,70740],{"class":30,"line":2676},[28,70741,70742],{"class":320},"td {\n",[28,70744,70745],{"class":30,"line":2681},[28,70746,70747],{"class":320},"  padding:10px;\n",[28,70749,70750],{"class":30,"line":2687},[28,70751,70752],{"class":320},"  color:#666;\n",[28,70754,70755,70757,70759],{"class":30,"line":2693},[28,70756,70601],{"class":51375},[28,70758,51512],{"class":34},[28,70760,70606],{"class":320},[28,70762,70763,70765,70767],{"class":30,"line":2698},[28,70764,70701],{"class":51375},[28,70766,51512],{"class":34},[28,70768,70769],{"class":320},"16px;\n",[28,70771,70772],{"class":30,"line":8025},[28,70773,1642],{"class":34},[28,70775,70776],{"class":30,"line":8049},[28,70777,70778],{"class":320},"tbody tr {\n",[28,70780,70781,70783,70785],{"class":30,"line":8054},[28,70782,70686],{"class":51375},[28,70784,51512],{"class":34},[28,70786,70787],{"class":105},"#fff;\n",[28,70789,70790],{"class":30,"line":8060},[28,70791,1642],{"class":34},[28,70793,70794],{"class":30,"line":8087},[28,70795,70796],{"class":320},"tbody tr:hover {\n",[28,70798,70799,70801,70803],{"class":30,"line":8092},[28,70800,70686],{"class":51375},[28,70802,51512],{"class":34},[28,70804,70805],{"class":105},"#e1ecf8;\n",[28,70807,70808],{"class":30,"line":8098},[28,70809,1642],{"class":34},[28,70811,70812],{"class":30,"line":8110},[28,70813,70814],{"class":320},".info {\n",[28,70816,70817,70819,70821],{"class":30,"line":8122},[28,70818,70643],{"class":51375},[28,70820,51512],{"class":34},[28,70822,70823],{"class":320},"900px;\n",[28,70825,70826,70828,70830],{"class":30,"line":8134},[28,70827,70545],{"class":51375},[28,70829,51512],{"class":34},[28,70831,70832],{"class":320},"50px auto;\n",[28,70834,70835,70837,70839],{"class":30,"line":9793},[28,70836,70601],{"class":51375},[28,70838,51512],{"class":34},[28,70840,70606],{"class":320},[28,70842,70843],{"class":30,"line":9818},[28,70844,1642],{"class":34},[28,70846,70847],{"class":30,"line":9841},[28,70848,70849],{"class":320},".info  input, .info select {\n",[28,70851,70852,70854,70856],{"class":30,"line":9865},[28,70853,70643],{"class":51375},[28,70855,51512],{"class":34},[28,70857,70858],{"class":320},"80px;\n",[28,70860,70861,70864,70866],{"class":30,"line":9870},[28,70862,70863],{"class":51375},"  height",[28,70865,51512],{"class":34},[28,70867,70868],{"class":320},"27px;\n",[28,70870,70871,70874,70876],{"class":30,"line":9875},[28,70872,70873],{"class":51375},"  outline",[28,70875,51512],{"class":34},[28,70877,70582],{"class":320},[28,70879,70880,70883,70885],{"class":30,"line":9880},[28,70881,70882],{"class":51375},"  border-radius",[28,70884,51512],{"class":34},[28,70886,70887],{"class":320},"5px;\n",[28,70889,70890,70892],{"class":30,"line":9889},[28,70891,70730],{"class":320},[28,70893,70733],{"class":105},[28,70895,70896,70899,70901],{"class":30,"line":9894},[28,70897,70898],{"class":51375},"  padding-left",[28,70900,51512],{"class":34},[28,70902,70887],{"class":320},[28,70904,70905,70908,70910],{"class":30,"line":9900},[28,70906,70907],{"class":51375},"  box-sizing",[28,70909,51512],{"class":34},[28,70911,70912],{"class":320},"border-box;\n",[28,70914,70915,70918,70920],{"class":30,"line":9921},[28,70916,70917],{"class":51375},"  margin-right",[28,70919,51512],{"class":34},[28,70921,70922],{"class":320},"15px;\n",[28,70924,70925],{"class":30,"line":9927},[28,70926,1642],{"class":34},[28,70928,70929],{"class":30,"line":9941},[28,70930,70931],{"class":320},".info button {\n",[28,70933,70934,70936,70938],{"class":30,"line":9947},[28,70935,70643],{"class":51375},[28,70937,51512],{"class":34},[28,70939,70940],{"class":320},"60px;\n",[28,70942,70943,70945,70947],{"class":30,"line":9974},[28,70944,70863],{"class":51375},[28,70946,51512],{"class":34},[28,70948,70868],{"class":320},[28,70950,70951,70954,70956],{"class":30,"line":9983},[28,70952,70953],{"class":51375},"  background-color",[28,70955,51512],{"class":34},[28,70957,70958],{"class":105},"#004085;\n",[28,70960,70961,70963,70965],{"class":30,"line":9989},[28,70962,70873],{"class":51375},[28,70964,51512],{"class":34},[28,70966,70582],{"class":320},[28,70968,70969,70972,70974],{"class":30,"line":9997},[28,70970,70971],{"class":51375},"  border",[28,70973,51512],{"class":34},[28,70975,70550],{"class":320},[28,70977,70978,70981,70983],{"class":30,"line":10002},[28,70979,70980],{"class":51375},"  color",[28,70982,51512],{"class":34},[28,70984,70787],{"class":105},[28,70986,70987,70990,70992],{"class":30,"line":16681},[28,70988,70989],{"class":51375},"  cursor",[28,70991,51512],{"class":34},[28,70993,70994],{"class":320},"pointer;\n",[28,70996,70997,70999,71001],{"class":30,"line":16687},[28,70998,70882],{"class":51375},[28,71000,51512],{"class":34},[28,71002,70887],{"class":320},[28,71004,71005],{"class":30,"line":16710},[28,71006,1642],{"class":34},[28,71008,71009],{"class":30,"line":16716},[28,71010,71011],{"class":320},".info .age {\n",[28,71013,71014,71016,71018],{"class":30,"line":16739},[28,71015,70643],{"class":51375},[28,71017,51512],{"class":34},[28,71019,71020],{"class":320},"50px;\n",[28,71022,71023],{"class":30,"line":16753},[28,71024,1642],{"class":34},[14,71026,71027],{},"思路：",[14,71029,71030],{},[1539,71031],{"alt":23,"src":71032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71034,71035],{},[1539,71036],{"alt":23,"src":71037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71039,71040],{},[1539,71041],{"alt":23,"src":71042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[188,71044,71046],{"id":71045},"_3315-重绘回流","3.3.15 重绘回流",[14,71048,71049],{},[1539,71050],{"alt":23,"src":71051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71053,71054],{},[1539,71055],{"alt":23,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71058,71059],{},[1539,71060],{"alt":23,"src":71061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[159,71063,71065],{"id":71064},"_34-bom","3.4 BOM",[14,71067,71068],{},[1539,71069],{"alt":23,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71072,71073],{},"平时写的document省略了window而已，实际上是window.document",[14,71075,71076],{},"函数也是这样，调用的时候实际为window.fn()",[14,71078,71079],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71081,71082],{},"window大部分情况下可以省略",[188,71084,71086],{"id":71085},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71088,71089],{},"只执行一次",[14,71091,71092],{},[1539,71093],{"alt":23,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71096,71097],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71099,71100],{},[1539,71101],{"alt":23,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[188,71104,71106],{"id":71105},"_342-js执行机制","3.4.2 JS执行机制",[14,71108,71109],{},[1539,71110],{"alt":23,"src":71111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71113,71114],{},"两个的结果都是1111 3333 2222",[14,71116,71117],{},[1539,71118],{"alt":23,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71121,71122],{},[1539,71123],{"alt":23,"src":71124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71126,71127],{},[1539,71128],{"alt":23,"src":71129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71131,71132],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71134,71135],{},"工作流程：",[14,71137,71138],{},[1539,71139],{"alt":23,"src":71140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71142,71143],{},[1539,71144],{"alt":23,"src":71145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71147,71148],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71150,71151],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[188,71153,71155],{"id":71154},"_343-location对象","3.4.3 location对象",[14,71157,71158],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71160,71161],{},[1539,71162],{"alt":23,"src":71163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71165,71166],{},"href可以跳转页面",[171,71168,71169],{},[174,71170,71171],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71173,71174],{},"search得到提交信息之后网站后边的地址",[14,71176,71177],{},[1539,71178],{"alt":23,"src":71179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71181,71182],{},[1539,71183],{"alt":23,"src":71184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[171,71186,71187],{"start":94},[174,71188,71189],{},"hash:这个获取单页面应用#后边的地址",[14,71191,71192],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71194,71195],{},[1539,71196],{"alt":23,"src":71197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[18,71199,71201],{"className":53142,"code":71200,"language":53144,"meta":23,"style":23},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[25,71202,71203,71223,71243],{"__ignoreMap":23},[28,71204,71205,71207,71209,71211,71213,71216,71219,71221],{"class":30,"line":31},[28,71206,52219],{"class":34},[28,71208,35],{"class":51375},[28,71210,61132],{"class":2040},[28,71212,39],{"class":34},[28,71214,71215],{"class":320},"\"#\u002Fmy\"",[28,71217,71218],{"class":34},">我的\u003C\u002F",[28,71220,35],{"class":51375},[28,71222,51382],{"class":34},[28,71224,71225,71227,71229,71231,71233,71236,71239,71241],{"class":30,"line":94},[28,71226,52219],{"class":34},[28,71228,35],{"class":51375},[28,71230,61132],{"class":2040},[28,71232,39],{"class":34},[28,71234,71235],{"class":320},"\"#\u002Ffriend\"",[28,71237,71238],{"class":34},">关注\u003C\u002F",[28,71240,35],{"class":51375},[28,71242,51382],{"class":34},[28,71244,71245,71247,71249,71251,71253,71256,71259,71261],{"class":30,"line":109},[28,71246,52219],{"class":34},[28,71248,35],{"class":51375},[28,71250,61132],{"class":2040},[28,71252,39],{"class":34},[28,71254,71255],{"class":320},"\"#\u002Fdownload\"",[28,71257,71258],{"class":34},">下载\u003C\u002F",[28,71260,35],{"class":51375},[28,71262,51382],{"class":34},[14,71264,71265],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[171,71267,71268],{"start":109},[174,71269,71270,71271,71273,71274,71276],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53791,71272],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53791,71275],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[188,71278,71280],{"id":71279},"_345-navigator对象","3.4.5 navigator对象",[14,71282,71283],{},[1539,71284],{"alt":23,"src":71285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[18,71287,71291],{"className":71288,"code":71289,"language":71290,"meta":23,"style":23},"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",[25,71292,71293,71298,71309,71321,71326,71377,71418,71423,71436,71448,71453],{"__ignoreMap":23},[28,71294,71295],{"class":30,"line":31},[28,71296,71297],{"class":105},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[28,71299,71300,71302,71304,71306],{"class":30,"line":94},[28,71301,441],{"class":38},[28,71303,221],{"class":34},[28,71305,54524],{"class":38},[28,71307,71308],{"class":34}," () { \n",[28,71310,71311,71313,71316,71318],{"class":30,"line":109},[28,71312,6869],{"class":38},[28,71314,71315],{"class":45}," userAgent",[28,71317,13641],{"class":38},[28,71319,71320],{"class":34}," navigator.userAgent \n",[28,71322,71323],{"class":30,"line":125},[28,71324,71325],{"class":105},"\u002F\u002F 验证是否为Android或iPhone \n",[28,71327,71328,71330,71333,71335,71338,71341,71343,71345,71348,71350,71353,71357,71359,71361,71363,71366,71368,71370,71372,71374],{"class":30,"line":131},[28,71329,6869],{"class":38},[28,71331,71332],{"class":45}," android",[28,71334,13641],{"class":38},[28,71336,71337],{"class":34}," userAgent.",[28,71339,71340],{"class":2040},"match",[28,71342,221],{"class":34},[28,71344,794],{"class":320},[28,71346,71347],{"class":48053},"(Android);",[28,71349,1190],{"class":38},[28,71351,71352],{"class":45},"[\\s",[28,71354,71356],{"class":71355},"snhLl","\\\u002F",[28,71358,119],{"class":45},[28,71360,693],{"class":38},[28,71362,221],{"class":48053},[28,71364,71365],{"class":45},"[\\d.]",[28,71367,693],{"class":38},[28,71369,642],{"class":48053},[28,71371,1190],{"class":38},[28,71373,794],{"class":320},[28,71375,71376],{"class":34},") \n",[28,71378,71379,71381,71384,71386,71388,71390,71392,71394,71397,71400,71403,71405,71407,71410,71412,71414,71416],{"class":30,"line":1291},[28,71380,6869],{"class":38},[28,71382,71383],{"class":45}," iphone",[28,71385,13641],{"class":38},[28,71387,71337],{"class":34},[28,71389,71340],{"class":2040},[28,71391,221],{"class":34},[28,71393,794],{"class":320},[28,71395,71396],{"class":48053},"(iPhone",[28,71398,71399],{"class":45},"\\s",[28,71401,71402],{"class":48053},"OS)",[28,71404,71399],{"class":45},[28,71406,221],{"class":48053},[28,71408,71409],{"class":45},"[\\d_]",[28,71411,693],{"class":38},[28,71413,642],{"class":48053},[28,71415,794],{"class":320},[28,71417,71376],{"class":34},[28,71419,71420],{"class":30,"line":1297},[28,71421,71422],{"class":105},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[28,71424,71425,71427,71430,71433],{"class":30,"line":1388},[28,71426,1608],{"class":38},[28,71428,71429],{"class":34}," (android ",[28,71431,71432],{"class":38},"||",[28,71434,71435],{"class":34}," iphone) { \n",[28,71437,71438,71441,71443,71446],{"class":30,"line":1394},[28,71439,71440],{"class":34},"location.href ",[28,71442,39],{"class":38},[28,71444,71445],{"class":320}," 'http:\u002F\u002Fm.itcast.cn'",[28,71447,2751],{"class":34},[28,71449,71450],{"class":30,"line":1406},[28,71451,71452],{"class":34},"} \n",[28,71454,71455],{"class":30,"line":1689},[28,71456,71457],{"class":34},"})()\n",[188,71459,71461],{"id":71460},"_346-histroy对象","3.4.6 histroy对象",[14,71463,71464],{},[1539,71465],{"alt":23,"src":71466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71468,71469],{},"浏览器地址的前进与后退!!!",[14,71471,71472],{},"history.back() 等效于 history.go(-1)",[14,71474,71475],{},"history.forward() 等效于 history.go(1)",[159,71477,71479],{"id":71478},"_35-本地存储","3.5 本地存储",[171,71481,71482,71485,71488],{},[174,71483,71484],{},"数据存储在用户浏览器中",[174,71486,71487],{},"设置、读取方便、甚至页面刷新不丢失数据",[174,71489,71490],{},"容量较大，sessionStorage和localStorage约 5M 左右",[188,71492,71494],{"id":71493},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71496,71497],{},"只能存储字符串",[14,71499,71500],{},[1539,71501],{"alt":23,"src":71502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71504,71505],{},[1539,71506],{"alt":23,"src":71507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71509,71510],{},"键值对要加引号,不然就会当变量来看了",[14,71512,71513],{},"localStorage.setItem('uname', 'pink')",[14,71515,71516],{},"刷新之后信息不再丢失",[14,71518,71519],{},"操作key,value会跟着变",[14,71521,71522],{},"删除只删除键就可以,即名字",[14,71524,71513],{},[14,71526,71527],{},"改:",[14,71529,71530],{},"localStorage.setItem('uname','red')",[14,71532,71533],{},"有这个键就是改,没有这个键就是改",[14,71535,71536],{},[1539,71537],{"alt":23,"src":71538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71540,71541],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71543,71544],{},[1539,71545],{"alt":23,"src":71546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71548,71549],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[188,71551,71553],{"id":71552},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71555,71556],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71558,71559],{},"特性:",[171,71561,71562,71565,71568,71571],{},[174,71563,71564],{},"生命周期为关闭浏览器窗口",[174,71566,71567],{},"在同一个窗口(页面)下数据可以共享",[174,71569,71570],{},"以键值对的形式存储使用",[174,71572,71573],{},"用法跟localStorage 基本相同",[188,71575,71577],{"id":71576},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71579,71580],{},"本地只能存储字符串,无法直接存储复杂数据类型",[18,71582,71584],{"className":53142,"code":71583,"language":53144,"meta":23,"style":23},"\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",[25,71585,71586,71594,71599,71604,71609,71614,71618,71623,71628],{"__ignoreMap":23},[28,71587,71588,71590,71592],{"class":30,"line":31},[28,71589,99],{"class":34},[28,71591,51888],{"class":51375},[28,71593,51382],{"class":34},[28,71595,71596],{"class":30,"line":94},[28,71597,71598],{"class":34},"    const obj = {\n",[28,71600,71601],{"class":30,"line":109},[28,71602,71603],{"class":34},"      uname: 'pink老师',\n",[28,71605,71606],{"class":30,"line":125},[28,71607,71608],{"class":34},"      age: 18,\n",[28,71610,71611],{"class":30,"line":131},[28,71612,71613],{"class":34},"      gender: '女'\n",[28,71615,71616],{"class":30,"line":1291},[28,71617,2264],{"class":34},[28,71619,71620],{"class":30,"line":1297},[28,71621,71622],{"class":34},"    \u002F\u002F 存储复杂数据类型\n",[28,71624,71625],{"class":30,"line":1388},[28,71626,71627],{"class":34},"    localStorage.setItem('obj', obj)\n",[28,71629,71630,71632,71634],{"class":30,"line":1394},[28,71631,52492],{"class":34},[28,71633,51888],{"class":51375},[28,71635,51382],{"class":34},[14,71637,71638],{},[1539,71639],{"alt":23,"src":71640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71642,71643],{},"如果获取一下数据:",[14,71645,71646],{},"log(localStorage.getItem('obj'))",[14,71648,71649],{},[1539,71650],{"alt":23,"src":71651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71653,71654],{},"发现直接存对象是使用不了的!!!",[22075,71656,71658],{"id":71657},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71660,71661],{},[1539,71662],{"alt":23,"src":71663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[18,71665,71667],{"className":50708,"code":71666,"language":50710,"meta":23,"style":23},"\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",[25,71668,71669,71677,71687,71697,71706,71714,71718,71722,71748,71767,71775,71779,71784,71789],{"__ignoreMap":23},[28,71670,71671,71673,71675],{"class":30,"line":31},[28,71672,99],{"class":34},[28,71674,51888],{"class":51375},[28,71676,51382],{"class":34},[28,71678,71679,71681,71683,71685],{"class":30,"line":94},[28,71680,11298],{"class":38},[28,71682,70046],{"class":45},[28,71684,13641],{"class":38},[28,71686,15649],{"class":34},[28,71688,71689,71692,71695],{"class":30,"line":109},[28,71690,71691],{"class":34},"      uname: ",[28,71693,71694],{"class":320},"'pink老师'",[28,71696,31542],{"class":34},[28,71698,71699,71702,71704],{"class":30,"line":125},[28,71700,71701],{"class":34},"      age: ",[28,71703,860],{"class":45},[28,71705,31542],{"class":34},[28,71707,71708,71711],{"class":30,"line":131},[28,71709,71710],{"class":34},"      gender: ",[28,71712,71713],{"class":320},"'女'\n",[28,71715,71716],{"class":30,"line":1291},[28,71717,2264],{"class":34},[28,71719,71720],{"class":30,"line":1297},[28,71721,71622],{"class":105},[28,71723,71724,71727,71730,71732,71735,71737,71740,71742,71745],{"class":30,"line":1388},[28,71725,71726],{"class":34},"  localStorage.",[28,71728,71729],{"class":2040},"setItem",[28,71731,221],{"class":34},[28,71733,71734],{"class":320},"'obj'",[28,71736,12512],{"class":34},[28,71738,71739],{"class":45},"JSON",[28,71741,768],{"class":34},[28,71743,71744],{"class":2040},"stringify",[28,71746,71747],{"class":34},"(obj))\n",[28,71749,71750,71753,71755,71758,71761,71763,71765],{"class":30,"line":1394},[28,71751,71752],{"class":34},"  console.",[28,71754,58322],{"class":2040},[28,71756,71757],{"class":34},"(localStorage.",[28,71759,71760],{"class":2040},"getItem",[28,71762,221],{"class":34},[28,71764,71734],{"class":320},[28,71766,30573],{"class":34},[28,71768,71769,71771,71773],{"class":30,"line":1406},[28,71770,52492],{"class":34},[28,71772,51888],{"class":51375},[28,71774,51382],{"class":34},[28,71776,71777],{"class":30,"line":1689},[28,71778,70696],{"class":34},[28,71780,71781],{"class":30,"line":1694},[28,71782,71783],{"class":34},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[28,71785,71786],{"class":30,"line":1700},[28,71787,71788],{"class":34},"  类型是字符串的\n",[28,71790,71791],{"class":30,"line":1705},[28,71792,71793],{"class":34},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22075,71795,71797],{"id":71796},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71799,71800],{},[1539,71801],{"alt":23,"src":71802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71804,71805],{},[1539,71806],{"alt":23,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[18,71809,71811],{"className":53142,"code":71810,"language":53144,"meta":23,"style":23},"  \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",[25,71812,71813,71821,71825,71829,71833,71837,71841,71846,71851,71856,71861,71866,71871,71876,71881],{"__ignoreMap":23},[28,71814,71815,71817,71819],{"class":30,"line":31},[28,71816,52219],{"class":34},[28,71818,51888],{"class":51375},[28,71820,51382],{"class":34},[28,71822,71823],{"class":30,"line":94},[28,71824,71598],{"class":34},[28,71826,71827],{"class":30,"line":109},[28,71828,71603],{"class":34},[28,71830,71831],{"class":30,"line":125},[28,71832,71608],{"class":34},[28,71834,71835],{"class":30,"line":131},[28,71836,71613],{"class":34},[28,71838,71839],{"class":30,"line":1291},[28,71840,2264],{"class":34},[28,71842,71843],{"class":30,"line":1297},[28,71844,71845],{"class":34},"    \u002F\u002F 1.存储复杂数据类型\n",[28,71847,71848],{"class":30,"line":1388},[28,71849,71850],{"class":34},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[28,71852,71853],{"class":30,"line":1394},[28,71854,71855],{"class":34},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[28,71857,71858],{"class":30,"line":1406},[28,71859,71860],{"class":34},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[28,71862,71863],{"class":30,"line":1689},[28,71864,71865],{"class":34},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[28,71867,71868],{"class":30,"line":1694},[28,71869,71870],{"class":34},"    \u002F\u002F 取\n",[28,71872,71873],{"class":30,"line":1700},[28,71874,71875],{"class":34},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[28,71877,71878],{"class":30,"line":1705},[28,71879,71880],{"class":34},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[28,71882,71883,71885,71887],{"class":30,"line":1719},[28,71884,52492],{"class":34},[28,71886,51888],{"class":51375},[28,71888,51382],{"class":34},[14,71890,71891],{},[1539,71892],{"alt":23,"src":71893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[188,71895,71897],{"id":71896},"_356-数组map方法","3.5.6 数组map方法",[14,71899,71900],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71902,71903],{},[1539,71904],{"alt":23,"src":71905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71907,71908],{},[1539,71909],{"alt":23,"src":71910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71912,71913,71916],{},[365,71914,71915],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71918,71919],{},"map有返回值，但是forEach没有返回值",[14,71921,71922],{},"map是个方法。用的时候要加 ()",[14,71924,71925],{},"map返回的是一个数组",[188,71927,71929],{"id":71928},"_357-数组中join方法","3.5.7 数组中join方法",[14,71931,71932],{},[1539,71933],{"alt":23,"src":71934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71936,71937],{},"类似于python中拼接字符串一样！",[171,71939,71940,71943,71946],{},[174,71941,71942],{},"小括号为空则逗号分开",[174,71944,71945],{},"小括号为空字符串 ''，则元素之间没有分隔符",[174,71947,71948],{},"小括号用啥符号就用进行分割",[188,71950,71952],{"id":71951},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[171,71954,71955,71958,71961,71964,71967],{},[174,71956,71957],{},"记住本地时间获取快速方式：new Date().toDateString()",[174,71959,71960],{},"尽量减少DOM操作，用好map+join的渲染方式",[174,71962,71963],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[174,71965,71966],{},"return可以实现函数的结束",[174,71968,71969],{},"禁止跳转是 preventDefault() 不要忘记",[18,71971,71973],{"className":50708,"code":71972,"language":50710,"meta":23,"style":23},"\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",[25,71974,71975,71985,71999,72003,72011,72025,72045,72057,72065,72071,72081,72091,72095,72099,72105,72115,72127,72131,72135,72142,72154,72168,72178,72182,72186,72193,72200,72207,72219,72231,72241,72253,72257,72261,72268,72275,72287,72299,72309,72321,72351,72355,72359,72366,72378,72390,72414,72424,72434,72438,72442,72450,72461,72473,72485,72497,72514,72526,72538,72542,72546,72553,72565,72577,72589,72600,72618,72631,72643,72667,72678,72682,72686,72694,72704,72708,72712,72718,72730,72741,72751,72755,72759,72765,72787,72791,72795,72801,72807,72819,72829,72841,72871,72884,72901,72905,72909,72920,72942,72952,72956,72960,72973,72983,72995,73007,73019,73031,73041,73051,73061,73072,73085,73089,73097,73105,73109,73117,73130,73150,73183,73216,73249,73275,73293,73311,73319,73345,73363,73381,73399,73417,73435,73443,73451,73469,73477,73506,73514,73522,73530,73543,73555,73567,73579,73591,73603,73616,73628,73636,73644,73652,73657,73662,73666,73670,73674,73678,73682,73686,73691,73696,73701,73706,73714,73722,73730,73735,73740,73745,73750,73755,73760,73765,73770,73775,73780,73785,73790,73795,73800,73804,73809,73814,73824,73833,73837,73842,73851,73867,73909,73949,73988,74053,74061,74065,74070,74088,74096,74101,74106,74136,74142,74147,74160,74172,74184,74196,74208,74220,74232,74236,74246,74250,74255,74260,74264,74273,74277,74282,74287,74306,74311,74331,74335,74340,74344,74349,74367,74385,74403,74422,74441,74460,74465,74471,74492,74498,74507,74513,74519,74525,74552,74565,74570,74580,74586,74592,74598,74604,74609,74615,74621,74627,74633,74666,74671,74676,74681,74686,74692,74698,74704,74715,74720,74726,74733,74747,74753,74777,74782,74787,74793,74799,74820,74826,74839,74845,74851,74857,74863,74868,74874,74880,74886,74904,74918,74924,74932,74938,74960,74965,74970,74975,74980,74985,74994,75003,75008],{"__ignoreMap":23},[28,71976,71977,71979,71981,71983],{"class":30,"line":31},[28,71978,51372],{"class":34},[28,71980,51376],{"class":51375},[28,71982,51379],{"class":2040},[28,71984,51382],{"class":34},[28,71986,71987,71989,71991,71993,71995,71997],{"class":30,"line":94},[28,71988,99],{"class":34},[28,71990,50710],{"class":51375},[28,71992,51391],{"class":2040},[28,71994,39],{"class":34},[28,71996,51396],{"class":320},[28,71998,51382],{"class":34},[28,72000,72001],{"class":30,"line":109},[28,72002,2477],{"emptyLinePlaceholder":144},[28,72004,72005,72007,72009],{"class":30,"line":125},[28,72006,99],{"class":34},[28,72008,51409],{"class":51375},[28,72010,51382],{"class":34},[28,72012,72013,72015,72017,72019,72021,72023],{"class":30,"line":131},[28,72014,52219],{"class":34},[28,72016,51419],{"class":51375},[28,72018,51422],{"class":2040},[28,72020,39],{"class":34},[28,72022,51427],{"class":320},[28,72024,51382],{"class":34},[28,72026,72027,72029,72031,72033,72035,72037,72039,72041,72043],{"class":30,"line":1291},[28,72028,52219],{"class":34},[28,72030,51419],{"class":51375},[28,72032,14997],{"class":2040},[28,72034,39],{"class":34},[28,72036,51466],{"class":320},[28,72038,51446],{"class":2040},[28,72040,39],{"class":34},[28,72042,51473],{"class":320},[28,72044,51382],{"class":34},[28,72046,72047,72049,72051,72053,72055],{"class":30,"line":1297},[28,72048,52219],{"class":34},[28,72050,51482],{"class":51375},[28,72052,51485],{"class":34},[28,72054,51482],{"class":51375},[28,72056,51382],{"class":34},[28,72058,72059,72061,72063],{"class":30,"line":1388},[28,72060,52219],{"class":34},[28,72062,136],{"class":51375},[28,72064,51382],{"class":34},[28,72066,72067,72069],{"class":30,"line":1394},[28,72068,6480],{"class":51375},[28,72070,15649],{"class":34},[28,72072,72073,72075,72077,72079],{"class":30,"line":1406},[28,72074,54770],{"class":45},[28,72076,51512],{"class":34},[28,72078,407],{"class":45},[28,72080,1367],{"class":34},[28,72082,72083,72085,72087,72089],{"class":30,"line":1689},[28,72084,54781],{"class":45},[28,72086,51512],{"class":34},[28,72088,407],{"class":45},[28,72090,1367],{"class":34},[28,72092,72093],{"class":30,"line":1694},[28,72094,2264],{"class":34},[28,72096,72097],{"class":30,"line":1700},[28,72098,2477],{"emptyLinePlaceholder":144},[28,72100,72101,72103],{"class":30,"line":1705},[28,72102,57354],{"class":51375},[28,72104,15649],{"class":34},[28,72106,72107,72109,72111,72113],{"class":30,"line":1719},[28,72108,57361],{"class":45},[28,72110,51512],{"class":34},[28,72112,51667],{"class":45},[28,72114,1367],{"class":34},[28,72116,72117,72119,72121,72123,72125],{"class":30,"line":1724},[28,72118,62152],{"class":45},[28,72120,51512],{"class":34},[28,72122,102],{"class":45},[28,72124,51567],{"class":38},[28,72126,1367],{"class":34},[28,72128,72129],{"class":30,"line":1730},[28,72130,2264],{"class":34},[28,72132,72133],{"class":30,"line":1751},[28,72134,2477],{"emptyLinePlaceholder":144},[28,72136,72137,72140],{"class":30,"line":1756},[28,72138,72139],{"class":2040},"    .info",[28,72141,15649],{"class":34},[28,72143,72144,72146,72148,72150,72152],{"class":30,"line":1770},[28,72145,54846],{"class":45},[28,72147,51512],{"class":34},[28,72149,51564],{"class":45},[28,72151,51567],{"class":38},[28,72153,1367],{"class":34},[28,72155,72156,72158,72160,72162,72164,72166],{"class":30,"line":1775},[28,72157,54781],{"class":45},[28,72159,51512],{"class":34},[28,72161,659],{"class":45},[28,72163,51567],{"class":38},[28,72165,51631],{"class":45},[28,72167,1367],{"class":34},[28,72169,72170,72172,72174,72176],{"class":30,"line":1804},[28,72171,57361],{"class":45},[28,72173,51512],{"class":34},[28,72175,51667],{"class":45},[28,72177,1367],{"class":34},[28,72179,72180],{"class":30,"line":1809},[28,72181,2264],{"class":34},[28,72183,72184],{"class":30,"line":1826},[28,72185,2477],{"emptyLinePlaceholder":144},[28,72187,72188,72191],{"class":30,"line":1831},[28,72189,72190],{"class":2040},"    .uname",[28,72192,31542],{"class":34},[28,72194,72195,72198],{"class":30,"line":1836},[28,72196,72197],{"class":2040},"    .age",[28,72199,31542],{"class":34},[28,72201,72202,72205],{"class":30,"line":1841},[28,72203,72204],{"class":2040},"    .salary",[28,72206,15649],{"class":34},[28,72208,72209,72211,72213,72215,72217],{"class":30,"line":1855},[28,72210,54846],{"class":45},[28,72212,51512],{"class":34},[28,72214,525],{"class":45},[28,72216,51567],{"class":38},[28,72218,1367],{"class":34},[28,72220,72221,72223,72225,72227,72229],{"class":30,"line":1860},[28,72222,54860],{"class":45},[28,72224,51512],{"class":34},[28,72226,102],{"class":45},[28,72228,51567],{"class":38},[28,72230,1367],{"class":34},[28,72232,72233,72235,72237,72239],{"class":30,"line":2654},[28,72234,61855],{"class":45},[28,72236,51512],{"class":34},[28,72238,54812],{"class":45},[28,72240,1367],{"class":34},[28,72242,72243,72245,72247,72249,72251],{"class":30,"line":2668},[28,72244,61825],{"class":45},[28,72246,51512],{"class":34},[28,72248,785],{"class":45},[28,72250,51567],{"class":38},[28,72252,1367],{"class":34},[28,72254,72255],{"class":30,"line":2676},[28,72256,2264],{"class":34},[28,72258,72259],{"class":30,"line":2681},[28,72260,2477],{"emptyLinePlaceholder":144},[28,72262,72263,72266],{"class":30,"line":2687},[28,72264,72265],{"class":2040},"    .gender",[28,72267,31542],{"class":34},[28,72269,72270,72273],{"class":30,"line":2693},[28,72271,72272],{"class":2040},"    .city",[28,72274,15649],{"class":34},[28,72276,72277,72279,72281,72283,72285],{"class":30,"line":2698},[28,72278,54846],{"class":45},[28,72280,51512],{"class":34},[28,72282,525],{"class":45},[28,72284,51567],{"class":38},[28,72286,1367],{"class":34},[28,72288,72289,72291,72293,72295,72297],{"class":30,"line":8025},[28,72290,54860],{"class":45},[28,72292,51512],{"class":34},[28,72294,1031],{"class":45},[28,72296,51567],{"class":38},[28,72298,1367],{"class":34},[28,72300,72301,72303,72305,72307],{"class":30,"line":8049},[28,72302,61855],{"class":45},[28,72304,51512],{"class":34},[28,72306,54812],{"class":45},[28,72308,1367],{"class":34},[28,72310,72311,72313,72315,72317,72319],{"class":30,"line":8054},[28,72312,61825],{"class":45},[28,72314,51512],{"class":34},[28,72316,785],{"class":45},[28,72318,51567],{"class":38},[28,72320,1367],{"class":34},[28,72322,72323,72325,72327,72329,72331,72333,72336,72338,72340,72342,72345,72347,72349],{"class":30,"line":8060},[28,72324,62052],{"class":45},[28,72326,51512],{"class":34},[28,72328,46],{"class":45},[28,72330,51567],{"class":38},[28,72332,51596],{"class":45},[28,72334,72335],{"class":45}," rgb",[28,72337,221],{"class":34},[28,72339,1799],{"class":45},[28,72341,12512],{"class":34},[28,72343,72344],{"class":45},"197",[28,72346,12512],{"class":34},[28,72348,72344],{"class":45},[28,72350,2796],{"class":34},[28,72352,72353],{"class":30,"line":8087},[28,72354,2264],{"class":34},[28,72356,72357],{"class":30,"line":8092},[28,72358,2477],{"emptyLinePlaceholder":144},[28,72360,72361,72364],{"class":30,"line":8098},[28,72362,72363],{"class":51375},"    button",[28,72365,15649],{"class":34},[28,72367,72368,72370,72372,72374,72376],{"class":30,"line":8110},[28,72369,54860],{"class":45},[28,72371,51512],{"class":34},[28,72373,1031],{"class":45},[28,72375,51567],{"class":38},[28,72377,1367],{"class":34},[28,72379,72380,72382,72384,72386,72388],{"class":30,"line":8122},[28,72381,54846],{"class":45},[28,72383,51512],{"class":34},[28,72385,696],{"class":45},[28,72387,51567],{"class":38},[28,72389,1367],{"class":34},[28,72391,72392,72394,72396,72399,72401,72403,72405,72408,72410,72412],{"class":30,"line":8134},[28,72393,54959],{"class":45},[28,72395,51512],{"class":34},[28,72397,72398],{"class":45},"rgb",[28,72400,221],{"class":34},[28,72402,1173],{"class":45},[28,72404,12512],{"class":34},[28,72406,72407],{"class":45},"187",[28,72409,12512],{"class":34},[28,72411,513],{"class":45},[28,72413,2796],{"class":34},[28,72415,72416,72418,72420,72422],{"class":30,"line":9793},[28,72417,57491],{"class":45},[28,72419,51512],{"class":34},[28,72421,60917],{"class":45},[28,72423,1367],{"class":34},[28,72425,72426,72428,72430,72432],{"class":30,"line":9818},[28,72427,62052],{"class":45},[28,72429,51512],{"class":34},[28,72431,407],{"class":45},[28,72433,1367],{"class":34},[28,72435,72436],{"class":30,"line":9841},[28,72437,2264],{"class":34},[28,72439,72440],{"class":30,"line":9865},[28,72441,2477],{"emptyLinePlaceholder":144},[28,72443,72444,72446,72448],{"class":30,"line":9870},[28,72445,72363],{"class":51375},[28,72447,51763],{"class":51375},[28,72449,15649],{"class":34},[28,72451,72452,72454,72456,72459],{"class":30,"line":9875},[28,72453,55084],{"class":45},[28,72455,51512],{"class":34},[28,72457,72458],{"class":45},"inline-block",[28,72460,1367],{"class":34},[28,72462,72463,72465,72467,72469,72471],{"class":30,"line":9880},[28,72464,54846],{"class":45},[28,72466,51512],{"class":34},[28,72468,659],{"class":45},[28,72470,51567],{"class":38},[28,72472,1367],{"class":34},[28,72474,72475,72477,72479,72481,72483],{"class":30,"line":9889},[28,72476,54860],{"class":45},[28,72478,51512],{"class":34},[28,72480,659],{"class":45},[28,72482,51567],{"class":38},[28,72484,1367],{"class":34},[28,72486,72487,72489,72491,72493,72495],{"class":30,"line":9894},[28,72488,57434],{"class":45},[28,72490,51512],{"class":34},[28,72492,63],{"class":45},[28,72494,51567],{"class":38},[28,72496,1367],{"class":34},[28,72498,72499,72501,72503,72505,72507,72509,72512],{"class":30,"line":9900},[28,72500,62052],{"class":45},[28,72502,51512],{"class":34},[28,72504,46],{"class":45},[28,72506,51567],{"class":38},[28,72508,51596],{"class":45},[28,72510,72511],{"class":45}," #fff",[28,72513,1367],{"class":34},[28,72515,72516,72518,72520,72522,72524],{"class":30,"line":9921},[28,72517,55209],{"class":45},[28,72519,51512],{"class":34},[28,72521,533],{"class":45},[28,72523,51567],{"class":38},[28,72525,1367],{"class":34},[28,72527,72528,72530,72532,72534,72536],{"class":30,"line":9927},[28,72529,61825],{"class":45},[28,72531,51512],{"class":34},[28,72533,46],{"class":45},[28,72535,51567],{"class":38},[28,72537,1367],{"class":34},[28,72539,72540],{"class":30,"line":9941},[28,72541,2264],{"class":34},[28,72543,72544],{"class":30,"line":9947},[28,72545,2477],{"emptyLinePlaceholder":144},[28,72547,72548,72551],{"class":30,"line":9974},[28,72549,72550],{"class":2040},"    .total",[28,72552,15649],{"class":34},[28,72554,72555,72557,72559,72561,72563],{"class":30,"line":9983},[28,72556,54846],{"class":45},[28,72558,51512],{"class":34},[28,72560,61704],{"class":45},[28,72562,51567],{"class":38},[28,72564,1367],{"class":34},[28,72566,72567,72569,72571,72573,72575],{"class":30,"line":9989},[28,72568,54860],{"class":45},[28,72570,51512],{"class":34},[28,72572,614],{"class":45},[28,72574,51567],{"class":38},[28,72576,1367],{"class":34},[28,72578,72579,72581,72583,72585,72587],{"class":30,"line":9997},[28,72580,57434],{"class":45},[28,72582,51512],{"class":34},[28,72584,614],{"class":45},[28,72586,51567],{"class":38},[28,72588,1367],{"class":34},[28,72590,72591,72593,72595,72598],{"class":30,"line":10002},[28,72592,57361],{"class":45},[28,72594,51512],{"class":34},[28,72596,72597],{"class":45},"right",[28,72599,1367],{"class":34},[28,72601,72602,72604,72606,72608,72610,72612,72614,72616],{"class":30,"line":16681},[28,72603,54781],{"class":45},[28,72605,51512],{"class":34},[28,72607,614],{"class":45},[28,72609,51567],{"class":38},[28,72611,51631],{"class":45},[28,72613,2115],{"class":45},[28,72615,51567],{"class":38},[28,72617,1367],{"class":34},[28,72619,72620,72623,72625,72627,72629],{"class":30,"line":16687},[28,72621,72622],{"class":45},"      padding-right",[28,72624,51512],{"class":34},[28,72626,659],{"class":45},[28,72628,51567],{"class":38},[28,72630,1367],{"class":34},[28,72632,72633,72635,72637,72639,72641],{"class":30,"line":16710},[28,72634,54997],{"class":45},[28,72636,51512],{"class":34},[28,72638,73],{"class":45},[28,72640,51567],{"class":38},[28,72642,1367],{"class":34},[28,72644,72645,72647,72649,72651,72653,72656,72658,72661,72663,72665],{"class":30,"line":16716},[28,72646,54959],{"class":45},[28,72648,51512],{"class":34},[28,72650,72398],{"class":45},[28,72652,221],{"class":34},[28,72654,72655],{"class":45},"237",[28,72657,12512],{"class":34},[28,72659,72660],{"class":45},"235",[28,72662,12512],{"class":34},[28,72664,72660],{"class":45},[28,72666,2796],{"class":34},[28,72668,72669,72672,72674,72676],{"class":30,"line":16739},[28,72670,72671],{"class":45},"      box-sizing",[28,72673,51512],{"class":34},[28,72675,60580],{"class":45},[28,72677,1367],{"class":34},[28,72679,72680],{"class":30,"line":16753},[28,72681,2264],{"class":34},[28,72683,72684],{"class":30,"line":16773},[28,72685,2477],{"emptyLinePlaceholder":144},[28,72687,72688,72690,72692],{"class":30,"line":16779},[28,72689,72550],{"class":2040},[28,72691,51763],{"class":51375},[28,72693,15649],{"class":34},[28,72695,72696,72698,72700,72702],{"class":30,"line":16790},[28,72697,57491],{"class":45},[28,72699,51512],{"class":34},[28,72701,57496],{"class":45},[28,72703,1367],{"class":34},[28,72705,72706],{"class":30,"line":16813},[28,72707,2264],{"class":34},[28,72709,72710],{"class":30,"line":16835},[28,72711,2477],{"emptyLinePlaceholder":144},[28,72713,72714,72716],{"class":30,"line":16840},[28,72715,65098],{"class":51375},[28,72717,15649],{"class":34},[28,72719,72720,72722,72724,72726,72728],{"class":30,"line":16846},[28,72721,54846],{"class":45},[28,72723,51512],{"class":34},[28,72725,61704],{"class":45},[28,72727,51567],{"class":38},[28,72729,1367],{"class":34},[28,72731,72732,72734,72736,72739],{"class":30,"line":16860},[28,72733,54781],{"class":45},[28,72735,51512],{"class":34},[28,72737,72738],{"class":45},"auto",[28,72740,1367],{"class":34},[28,72742,72743,72745,72747,72749],{"class":30,"line":16873},[28,72744,65105],{"class":45},[28,72746,51512],{"class":34},[28,72748,65110],{"class":45},[28,72750,1367],{"class":34},[28,72752,72753],{"class":30,"line":16878},[28,72754,2264],{"class":34},[28,72756,72757],{"class":30,"line":16892},[28,72758,2477],{"emptyLinePlaceholder":144},[28,72760,72761,72763],{"class":30,"line":16897},[28,72762,65190],{"class":51375},[28,72764,15649],{"class":34},[28,72766,72767,72769,72771,72773,72775,72777,72779,72781,72783,72785],{"class":30,"line":16903},[28,72768,54959],{"class":45},[28,72770,51512],{"class":34},[28,72772,72398],{"class":45},[28,72774,221],{"class":34},[28,72776,72655],{"class":45},[28,72778,12512],{"class":34},[28,72780,72660],{"class":45},[28,72782,12512],{"class":34},[28,72784,72660],{"class":45},[28,72786,2796],{"class":34},[28,72788,72789],{"class":30,"line":16908},[28,72790,2264],{"class":34},[28,72792,72793],{"class":30,"line":16922},[28,72794,2477],{"emptyLinePlaceholder":144},[28,72796,72797,72799],{"class":30,"line":16927},[28,72798,65190],{"class":51375},[28,72800,31542],{"class":34},[28,72802,72803,72805],{"class":30,"line":16932},[28,72804,65256],{"class":51375},[28,72806,15649],{"class":34},[28,72808,72809,72811,72813,72815,72817],{"class":30,"line":16946},[28,72810,54860],{"class":45},[28,72812,51512],{"class":34},[28,72814,487],{"class":45},[28,72816,51567],{"class":38},[28,72818,1367],{"class":34},[28,72820,72821,72823,72825,72827],{"class":30,"line":16958},[28,72822,57361],{"class":45},[28,72824,51512],{"class":34},[28,72826,23813],{"class":45},[28,72828,1367],{"class":34},[28,72830,72831,72833,72835,72837,72839],{"class":30,"line":16963},[28,72832,54997],{"class":45},[28,72834,51512],{"class":34},[28,72836,759],{"class":45},[28,72838,51567],{"class":38},[28,72840,1367],{"class":34},[28,72842,72843,72845,72847,72849,72851,72853,72855,72857,72860,72862,72865,72867,72869],{"class":30,"line":16976},[28,72844,62052],{"class":45},[28,72846,51512],{"class":34},[28,72848,46],{"class":45},[28,72850,51567],{"class":38},[28,72852,51596],{"class":45},[28,72854,72335],{"class":45},[28,72856,221],{"class":34},[28,72858,72859],{"class":45},"228",[28,72861,12512],{"class":34},[28,72863,72864],{"class":45},"225",[28,72866,12512],{"class":34},[28,72868,72864],{"class":45},[28,72870,2796],{"class":34},[28,72872,72873,72876,72878,72880,72882],{"class":30,"line":16981},[28,72874,72875],{"class":45},"      padding-left",[28,72877,51512],{"class":34},[28,72879,533],{"class":45},[28,72881,51567],{"class":38},[28,72883,1367],{"class":34},[28,72885,72886,72888,72890,72892,72895,72897,72899],{"class":30,"line":16986},[28,72887,61935],{"class":45},[28,72889,51512],{"class":34},[28,72891,28199],{"class":45},[28,72893,72894],{"class":45}," linear",[28,72896,61942],{"class":45},[28,72898,905],{"class":38},[28,72900,1367],{"class":34},[28,72902,72903],{"class":30,"line":16991},[28,72904,2264],{"class":34},[28,72906,72907],{"class":30,"line":17004},[28,72908,2477],{"emptyLinePlaceholder":144},[28,72910,72911,72914,72916,72918],{"class":30,"line":17009},[28,72912,72913],{"class":51375},"    tbody",[28,72915,70219],{"class":51375},[28,72917,61015],{"class":2040},[28,72919,15649],{"class":34},[28,72921,72922,72924,72926,72928,72930,72932,72934,72936,72938,72940],{"class":30,"line":32709},[28,72923,54959],{"class":45},[28,72925,51512],{"class":34},[28,72927,72398],{"class":45},[28,72929,221],{"class":34},[28,72931,72655],{"class":45},[28,72933,12512],{"class":34},[28,72935,72660],{"class":45},[28,72937,12512],{"class":34},[28,72939,72660],{"class":45},[28,72941,2796],{"class":34},[28,72943,72944,72946,72948,72950],{"class":30,"line":32715},[28,72945,62100],{"class":45},[28,72947,51512],{"class":34},[28,72949,62105],{"class":45},[28,72951,1367],{"class":34},[28,72953,72954],{"class":30,"line":32721},[28,72955,2264],{"class":34},[28,72957,72958],{"class":30,"line":32727},[28,72959,2477],{"emptyLinePlaceholder":144},[28,72961,72962,72964,72966,72969,72971],{"class":30,"line":32733},[28,72963,72913],{"class":51375},[28,72965,70219],{"class":51375},[28,72967,72968],{"class":51375}," td",[28,72970,1475],{"class":51375},[28,72972,15649],{"class":34},[28,72974,72975,72977,72979,72981],{"class":30,"line":32744},[28,72976,55084],{"class":45},[28,72978,51512],{"class":34},[28,72980,60944],{"class":45},[28,72982,1367],{"class":34},[28,72984,72985,72987,72989,72991,72993],{"class":30,"line":32750},[28,72986,54846],{"class":45},[28,72988,51512],{"class":34},[28,72990,1113],{"class":45},[28,72992,51567],{"class":38},[28,72994,1367],{"class":34},[28,72996,72997,72999,73001,73003,73005],{"class":30,"line":32770},[28,72998,54860],{"class":45},[28,73000,51512],{"class":34},[28,73002,1031],{"class":45},[28,73004,51567],{"class":38},[28,73006,1367],{"class":34},[28,73008,73009,73011,73013,73015,73017],{"class":30,"line":32776},[28,73010,57434],{"class":45},[28,73012,51512],{"class":34},[28,73014,1031],{"class":45},[28,73016,51567],{"class":38},[28,73018,1367],{"class":34},[28,73020,73021,73023,73025,73027,73029],{"class":30,"line":32787},[28,73022,62152],{"class":45},[28,73024,51512],{"class":34},[28,73026,52],{"class":45},[28,73028,51567],{"class":38},[28,73030,1367],{"class":34},[28,73032,73033,73035,73037,73039],{"class":30,"line":32793},[28,73034,57491],{"class":45},[28,73036,51512],{"class":34},[28,73038,60917],{"class":45},[28,73040,1367],{"class":34},[28,73042,73043,73045,73047,73049],{"class":30,"line":32799},[28,73044,57361],{"class":45},[28,73046,51512],{"class":34},[28,73048,51667],{"class":45},[28,73050,1367],{"class":34},[28,73052,73053,73055,73057,73059],{"class":30,"line":32805},[28,73054,64045],{"class":45},[28,73056,51512],{"class":34},[28,73058,54812],{"class":45},[28,73060,1367],{"class":34},[28,73062,73063,73065,73067,73070],{"class":30,"line":32811},[28,73064,54959],{"class":45},[28,73066,51512],{"class":34},[28,73068,73069],{"class":45},"orange",[28,73071,1367],{"class":34},[28,73073,73074,73076,73078,73081,73083],{"class":30,"line":32817},[28,73075,55209],{"class":45},[28,73077,51512],{"class":34},[28,73079,73080],{"class":45},"12.5",[28,73082,51567],{"class":38},[28,73084,1367],{"class":34},[28,73086,73087],{"class":30,"line":32823},[28,73088,2264],{"class":34},[28,73090,73091,73093,73095],{"class":30,"line":32829},[28,73092,52492],{"class":34},[28,73094,136],{"class":51375},[28,73096,51382],{"class":34},[28,73098,73099,73101,73103],{"class":30,"line":32849},[28,73100,51860],{"class":34},[28,73102,51409],{"class":51375},[28,73104,51382],{"class":34},[28,73106,73107],{"class":30,"line":32855},[28,73108,2477],{"emptyLinePlaceholder":144},[28,73110,73111,73113,73115],{"class":30,"line":32871},[28,73112,99],{"class":34},[28,73114,51875],{"class":51375},[28,73116,51382],{"class":34},[28,73118,73119,73121,73123,73126,73128],{"class":30,"line":32877},[28,73120,52219],{"class":34},[28,73122,159],{"class":51375},[28,73124,73125],{"class":34},">学生就业统计表\u003C\u002F",[28,73127,159],{"class":51375},[28,73129,51382],{"class":34},[28,73131,73132,73134,73136,73138,73140,73142,73144,73146,73148],{"class":30,"line":32891},[28,73133,52219],{"class":34},[28,73135,66700],{"class":51375},[28,73137,53561],{"class":2040},[28,73139,39],{"class":34},[28,73141,62739],{"class":320},[28,73143,69145],{"class":2040},[28,73145,39],{"class":34},[28,73147,31852],{"class":320},[28,73149,51382],{"class":34},[28,73151,73152,73154,73156,73158,73160,73162,73164,73166,73168,73170,73172,73175,73177,73179,73181],{"class":30,"line":32897},[28,73153,51416],{"class":34},[28,73155,53896],{"class":51375},[28,73157,53899],{"class":2040},[28,73159,39],{"class":34},[28,73161,62774],{"class":320},[28,73163,14997],{"class":2040},[28,73165,39],{"class":34},[28,73167,69171],{"class":320},[28,73169,61095],{"class":2040},[28,73171,39],{"class":34},[28,73173,73174],{"class":320},"\"姓名\"",[28,73176,53561],{"class":2040},[28,73178,39],{"class":34},[28,73180,69171],{"class":320},[28,73182,51382],{"class":34},[28,73184,73185,73187,73189,73191,73193,73195,73197,73199,73201,73203,73205,73208,73210,73212,73214],{"class":30,"line":32912},[28,73186,51416],{"class":34},[28,73188,53896],{"class":51375},[28,73190,53899],{"class":2040},[28,73192,39],{"class":34},[28,73194,62774],{"class":320},[28,73196,14997],{"class":2040},[28,73198,39],{"class":34},[28,73200,69199],{"class":320},[28,73202,61095],{"class":2040},[28,73204,39],{"class":34},[28,73206,73207],{"class":320},"\"年龄\"",[28,73209,53561],{"class":2040},[28,73211,39],{"class":34},[28,73213,69199],{"class":320},[28,73215,51382],{"class":34},[28,73217,73218,73220,73222,73224,73226,73228,73230,73232,73234,73236,73238,73241,73243,73245,73247],{"class":30,"line":32918},[28,73219,51416],{"class":34},[28,73221,53896],{"class":51375},[28,73223,53899],{"class":2040},[28,73225,39],{"class":34},[28,73227,62774],{"class":320},[28,73229,14997],{"class":2040},[28,73231,39],{"class":34},[28,73233,69301],{"class":320},[28,73235,61095],{"class":2040},[28,73237,39],{"class":34},[28,73239,73240],{"class":320},"\"薪资\"",[28,73242,53561],{"class":2040},[28,73244,39],{"class":34},[28,73246,69301],{"class":320},[28,73248,51382],{"class":34},[28,73250,73251,73253,73255,73257,73259,73261,73263,73265,73267,73269,73271,73273],{"class":30,"line":32927},[28,73252,51416],{"class":34},[28,73254,69219],{"class":51375},[28,73256,14997],{"class":2040},[28,73258,39],{"class":34},[28,73260,69226],{"class":320},[28,73262,15036],{"class":2040},[28,73264,39],{"class":34},[28,73266,7729],{"class":320},[28,73268,53561],{"class":2040},[28,73270,39],{"class":34},[28,73272,69226],{"class":320},[28,73274,51382],{"class":34},[28,73276,73277,73279,73281,73283,73285,73287,73289,73291],{"class":30,"line":32933},[28,73278,55309],{"class":34},[28,73280,69241],{"class":51375},[28,73282,66726],{"class":2040},[28,73284,39],{"class":34},[28,73286,10038],{"class":320},[28,73288,69250],{"class":34},[28,73290,69241],{"class":51375},[28,73292,51382],{"class":34},[28,73294,73295,73297,73299,73301,73303,73305,73307,73309],{"class":30,"line":32942},[28,73296,55309],{"class":34},[28,73298,69241],{"class":51375},[28,73300,66726],{"class":2040},[28,73302,39],{"class":34},[28,73304,10107],{"class":320},[28,73306,69269],{"class":34},[28,73308,69241],{"class":51375},[28,73310,51382],{"class":34},[28,73312,73313,73315,73317],{"class":30,"line":32948},[28,73314,51851],{"class":34},[28,73316,69219],{"class":51375},[28,73318,51382],{"class":34},[28,73320,73321,73323,73325,73327,73329,73331,73333,73335,73337,73339,73341,73343],{"class":30,"line":32954},[28,73322,51416],{"class":34},[28,73324,69219],{"class":51375},[28,73326,14997],{"class":2040},[28,73328,39],{"class":34},[28,73330,69323],{"class":320},[28,73332,15036],{"class":2040},[28,73334,39],{"class":34},[28,73336,7729],{"class":320},[28,73338,53561],{"class":2040},[28,73340,39],{"class":34},[28,73342,69323],{"class":320},[28,73344,51382],{"class":34},[28,73346,73347,73349,73351,73353,73355,73357,73359,73361],{"class":30,"line":32963},[28,73348,55309],{"class":34},[28,73350,69241],{"class":51375},[28,73352,66726],{"class":2040},[28,73354,39],{"class":34},[28,73356,69344],{"class":320},[28,73358,69347],{"class":34},[28,73360,69241],{"class":51375},[28,73362,51382],{"class":34},[28,73364,73365,73367,73369,73371,73373,73375,73377,73379],{"class":30,"line":32969},[28,73366,55309],{"class":34},[28,73368,69241],{"class":51375},[28,73370,66726],{"class":2040},[28,73372,39],{"class":34},[28,73374,69364],{"class":320},[28,73376,69367],{"class":34},[28,73378,69241],{"class":51375},[28,73380,51382],{"class":34},[28,73382,73383,73385,73387,73389,73391,73393,73395,73397],{"class":30,"line":32980},[28,73384,55309],{"class":34},[28,73386,69241],{"class":51375},[28,73388,66726],{"class":2040},[28,73390,39],{"class":34},[28,73392,69384],{"class":320},[28,73394,69387],{"class":34},[28,73396,69241],{"class":51375},[28,73398,51382],{"class":34},[28,73400,73401,73403,73405,73407,73409,73411,73413,73415],{"class":30,"line":32986},[28,73402,55309],{"class":34},[28,73404,69241],{"class":51375},[28,73406,66726],{"class":2040},[28,73408,39],{"class":34},[28,73410,69404],{"class":320},[28,73412,69407],{"class":34},[28,73414,69241],{"class":51375},[28,73416,51382],{"class":34},[28,73418,73419,73421,73423,73425,73427,73429,73431,73433],{"class":30,"line":33005},[28,73420,55309],{"class":34},[28,73422,69241],{"class":51375},[28,73424,66726],{"class":2040},[28,73426,39],{"class":34},[28,73428,69424],{"class":320},[28,73430,69427],{"class":34},[28,73432,69241],{"class":51375},[28,73434,51382],{"class":34},[28,73436,73437,73439,73441],{"class":30,"line":33011},[28,73438,51851],{"class":34},[28,73440,69219],{"class":51375},[28,73442,51382],{"class":34},[28,73444,73445,73447,73449],{"class":30,"line":33022},[28,73446,51416],{"class":34},[28,73448,53962],{"class":51375},[28,73450,51382],{"class":34},[28,73452,73453,73455,73457,73460,73462,73465,73467],{"class":30,"line":33028},[28,73454,55309],{"class":34},[28,73456,28],{"class":51375},[28,73458,73459],{"class":34},">+\u003C\u002F",[28,73461,28],{"class":51375},[28,73463,73464],{"class":34},">添加\u003C\u002F",[28,73466,53962],{"class":51375},[28,73468,51382],{"class":34},[28,73470,73471,73473,73475],{"class":30,"line":33048},[28,73472,52492],{"class":34},[28,73474,66700],{"class":51375},[28,73476,51382],{"class":34},[28,73478,73479,73481,73483,73485,73487,73489,73492,73494,73497,73499,73502,73504],{"class":30,"line":33064},[28,73480,52219],{"class":34},[28,73482,51686],{"class":51375},[28,73484,53561],{"class":2040},[28,73486,39],{"class":34},[28,73488,62655],{"class":320},[28,73490,73491],{"class":34},">共有数据 \u003C",[28,73493,28],{"class":51375},[28,73495,73496],{"class":34},">0\u003C\u002F",[28,73498,28],{"class":51375},[28,73500,73501],{"class":34},"> 条\u003C\u002F",[28,73503,51686],{"class":51375},[28,73505,51382],{"class":34},[28,73507,73508,73510,73512],{"class":30,"line":33070},[28,73509,52219],{"class":34},[28,73511,353],{"class":51375},[28,73513,51382],{"class":34},[28,73515,73516,73518,73520],{"class":30,"line":33084},[28,73517,51416],{"class":34},[28,73519,356],{"class":51375},[28,73521,51382],{"class":34},[28,73523,73524,73526,73528],{"class":30,"line":33090},[28,73525,55309],{"class":34},[28,73527,359],{"class":51375},[28,73529,51382],{"class":34},[28,73531,73532,73534,73536,73539,73541],{"class":30,"line":33096},[28,73533,55377],{"class":34},[28,73535,362],{"class":51375},[28,73537,73538],{"class":34},">ID\u003C\u002F",[28,73540,362],{"class":51375},[28,73542,51382],{"class":34},[28,73544,73545,73547,73549,73551,73553],{"class":30,"line":33107},[28,73546,55377],{"class":34},[28,73548,362],{"class":51375},[28,73550,69530],{"class":34},[28,73552,362],{"class":51375},[28,73554,51382],{"class":34},[28,73556,73557,73559,73561,73563,73565],{"class":30,"line":33113},[28,73558,55377],{"class":34},[28,73560,362],{"class":51375},[28,73562,69543],{"class":34},[28,73564,362],{"class":51375},[28,73566,51382],{"class":34},[28,73568,73569,73571,73573,73575,73577],{"class":30,"line":33119},[28,73570,55377],{"class":34},[28,73572,362],{"class":51375},[28,73574,69556],{"class":34},[28,73576,362],{"class":51375},[28,73578,51382],{"class":34},[28,73580,73581,73583,73585,73587,73589],{"class":30,"line":33129},[28,73582,55377],{"class":34},[28,73584,362],{"class":51375},[28,73586,69569],{"class":34},[28,73588,362],{"class":51375},[28,73590,51382],{"class":34},[28,73592,73593,73595,73597,73599,73601],{"class":30,"line":33135},[28,73594,55377],{"class":34},[28,73596,362],{"class":51375},[28,73598,69582],{"class":34},[28,73600,362],{"class":51375},[28,73602,51382],{"class":34},[28,73604,73605,73607,73609,73612,73614],{"class":30,"line":33146},[28,73606,55377],{"class":34},[28,73608,362],{"class":51375},[28,73610,73611],{"class":34},">录入时间\u003C\u002F",[28,73613,362],{"class":51375},[28,73615,51382],{"class":34},[28,73617,73618,73620,73622,73624,73626],{"class":30,"line":33152},[28,73619,55377],{"class":34},[28,73621,362],{"class":51375},[28,73623,69595],{"class":34},[28,73625,362],{"class":51375},[28,73627,51382],{"class":34},[28,73629,73630,73632,73634],{"class":30,"line":33162},[28,73631,55482],{"class":34},[28,73633,359],{"class":51375},[28,73635,51382],{"class":34},[28,73637,73638,73640,73642],{"class":30,"line":33167},[28,73639,51851],{"class":34},[28,73641,356],{"class":51375},[28,73643,51382],{"class":34},[28,73645,73646,73648,73650],{"class":30,"line":33173},[28,73647,51416],{"class":34},[28,73649,400],{"class":51375},[28,73651,51382],{"class":34},[28,73653,73654],{"class":30,"line":33222},[28,73655,73656],{"class":105},"      \u003C!-- \u003Ctr>\n",[28,73658,73659],{"class":30,"line":33269},[28,73660,73661],{"class":105},"        \u003Ctd>1\u003C\u002Ftd>\n",[28,73663,73664],{"class":30,"line":33274},[28,73665,73661],{"class":105},[28,73667,73668],{"class":30,"line":33280},[28,73669,73661],{"class":105},[28,73671,73672],{"class":30,"line":33299},[28,73673,73661],{"class":105},[28,73675,73676],{"class":30,"line":33305},[28,73677,73661],{"class":105},[28,73679,73680],{"class":30,"line":33325},[28,73681,73661],{"class":105},[28,73683,73684],{"class":30,"line":33331},[28,73685,73661],{"class":105},[28,73687,73688],{"class":30,"line":33337},[28,73689,73690],{"class":105},"        \u003Ctd>\n",[28,73692,73693],{"class":30,"line":33347},[28,73694,73695],{"class":105},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[28,73697,73698],{"class":30,"line":33352},[28,73699,73700],{"class":105},"        \u003C\u002Ftd>\n",[28,73702,73703],{"class":30,"line":33358},[28,73704,73705],{"class":105},"      \u003C\u002Ftr> -->\n",[28,73707,73708,73710,73712],{"class":30,"line":33374},[28,73709,51851],{"class":34},[28,73711,400],{"class":51375},[28,73713,51382],{"class":34},[28,73715,73716,73718,73720],{"class":30,"line":33419},[28,73717,52492],{"class":34},[28,73719,353],{"class":51375},[28,73721,51382],{"class":34},[28,73723,73724,73726,73728],{"class":30,"line":33425},[28,73725,52219],{"class":34},[28,73727,51888],{"class":51375},[28,73729,51382],{"class":34},[28,73731,73732],{"class":30,"line":33431},[28,73733,73734],{"class":105},"    \u002F\u002F const initData = [{\n",[28,73736,73737],{"class":30,"line":33437},[28,73738,73739],{"class":105},"    \u002F\u002F   unameId: 1,\n",[28,73741,73742],{"class":30,"line":33448},[28,73743,73744],{"class":105},"    \u002F\u002F   uname: '华晨宇',\n",[28,73746,73747],{"class":30,"line":33454},[28,73748,73749],{"class":105},"    \u002F\u002F   age: 22,\n",[28,73751,73752],{"class":30,"line":33460},[28,73753,73754],{"class":105},"    \u002F\u002F   salary: 12000,\n",[28,73756,73757],{"class":30,"line":33466},[28,73758,73759],{"class":105},"    \u002F\u002F   gender: '男',\n",[28,73761,73762],{"class":30,"line":33484},[28,73763,73764],{"class":105},"    \u002F\u002F   city: '北京',\n",[28,73766,73767],{"class":30,"line":33498},[28,73768,73769],{"class":105},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[28,73771,73772],{"class":30,"line":33507},[28,73773,73774],{"class":105},"    \u002F\u002F }]\n",[28,73776,73777],{"class":30,"line":33516},[28,73778,73779],{"class":105},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[28,73781,73782],{"class":30,"line":33525},[28,73783,73784],{"class":105},"    \u002F\u002F 1.渲染业务\n",[28,73786,73787],{"class":30,"line":33534},[28,73788,73789],{"class":105},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[28,73791,73792],{"class":30,"line":33540},[28,73793,73794],{"class":105},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[28,73796,73797],{"class":30,"line":33546},[28,73798,73799],{"class":105},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[28,73801,73802],{"class":30,"line":33554},[28,73803,2477],{"emptyLinePlaceholder":144},[28,73805,73806],{"class":30,"line":33559},[28,73807,73808],{"class":105},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[28,73810,73811],{"class":30,"line":33565},[28,73812,73813],{"class":105},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[28,73815,73816,73818,73820,73822],{"class":30,"line":33576},[28,73817,11298],{"class":38},[28,73819,57770],{"class":45},[28,73821,13641],{"class":38},[28,73823,51913],{"class":34},[28,73825,73826,73829,73831],{"class":30,"line":33582},[28,73827,73828],{"class":34},"    console.",[28,73830,58322],{"class":2040},[28,73832,52487],{"class":34},[28,73834,73835],{"class":30,"line":33602},[28,73836,2477],{"emptyLinePlaceholder":144},[28,73838,73839],{"class":30,"line":33608},[28,73840,73841],{"class":105},"    \u002F\u002F 时间函数\n",[28,73843,73844,73846,73849],{"class":30,"line":33614},[28,73845,70159],{"class":38},[28,73847,73848],{"class":2040}," getTime",[28,73850,10930],{"class":34},[28,73852,73853,73855,73858,73860,73862,73865],{"class":30,"line":33620},[28,73854,58303],{"class":38},[28,73856,73857],{"class":45}," date",[28,73859,13641],{"class":38},[28,73861,11655],{"class":38},[28,73863,73864],{"class":2040}," Date",[28,73866,2053],{"class":34},[28,73868,73869,73871,73873,73875,73878,73881,73883,73885,73887,73890,73893,73895,73897,73899,73901,73903,73905,73907],{"class":30,"line":33637},[28,73870,58303],{"class":38},[28,73872,16168],{"class":45},[28,73874,13641],{"class":38},[28,73876,73877],{"class":34}," date.",[28,73879,73880],{"class":2040},"getHours",[28,73882,13127],{"class":34},[28,73884,99],{"class":38},[28,73886,2115],{"class":45},[28,73888,73889],{"class":38}," ?",[28,73891,73892],{"class":320}," '0'",[28,73894,45642],{"class":38},[28,73896,73877],{"class":34},[28,73898,73880],{"class":2040},[28,73900,13127],{"class":34},[28,73902,1065],{"class":38},[28,73904,73877],{"class":34},[28,73906,73880],{"class":2040},[28,73908,2053],{"class":34},[28,73910,73911,73913,73916,73918,73920,73923,73925,73927,73929,73931,73933,73935,73937,73939,73941,73943,73945,73947],{"class":30,"line":33643},[28,73912,58303],{"class":38},[28,73914,73915],{"class":45}," m",[28,73917,13641],{"class":38},[28,73919,73877],{"class":34},[28,73921,73922],{"class":2040},"getMinutes",[28,73924,13127],{"class":34},[28,73926,99],{"class":38},[28,73928,2115],{"class":45},[28,73930,73889],{"class":38},[28,73932,73892],{"class":320},[28,73934,45642],{"class":38},[28,73936,73877],{"class":34},[28,73938,73922],{"class":2040},[28,73940,13127],{"class":34},[28,73942,1065],{"class":38},[28,73944,73877],{"class":34},[28,73946,73922],{"class":2040},[28,73948,2053],{"class":34},[28,73950,73951,73953,73955,73957,73959,73962,73964,73966,73968,73970,73972,73974,73976,73978,73980,73982,73984,73986],{"class":30,"line":33649},[28,73952,58303],{"class":38},[28,73954,8505],{"class":45},[28,73956,13641],{"class":38},[28,73958,73877],{"class":34},[28,73960,73961],{"class":2040},"getSeconds",[28,73963,13127],{"class":34},[28,73965,99],{"class":38},[28,73967,2115],{"class":45},[28,73969,73889],{"class":38},[28,73971,73892],{"class":320},[28,73973,45642],{"class":38},[28,73975,73877],{"class":34},[28,73977,73961],{"class":2040},[28,73979,13127],{"class":34},[28,73981,1065],{"class":38},[28,73983,73877],{"class":34},[28,73985,73961],{"class":2040},[28,73987,2053],{"class":34},[28,73989,73990,73992,73995,73997,73999,74002,74004,74007,74009,74012,74014,74016,74019,74021,74023,74025,74027,74029,74031,74034,74036,74039,74041,74044,74046,74048,74050],{"class":30,"line":33655},[28,73991,58303],{"class":38},[28,73993,73994],{"class":45}," str",[28,73996,13641],{"class":38},[28,73998,62978],{"class":320},[28,74000,74001],{"class":34},"date",[28,74003,768],{"class":320},[28,74005,74006],{"class":2040},"getFullYear",[28,74008,2504],{"class":320},[28,74010,74011],{"class":320},"}\u002F${",[28,74013,74001],{"class":34},[28,74015,768],{"class":320},[28,74017,74018],{"class":2040},"getMonth",[28,74020,13127],{"class":320},[28,74022,693],{"class":38},[28,74024,25196],{"class":45},[28,74026,74011],{"class":320},[28,74028,74001],{"class":34},[28,74030,768],{"class":320},[28,74032,74033],{"class":2040},"getDate",[28,74035,2504],{"class":320},[28,74037,74038],{"class":320},"} ${",[28,74040,628],{"class":34},[28,74042,74043],{"class":320},"}:${",[28,74045,754],{"class":34},[28,74047,74043],{"class":320},[28,74049,905],{"class":34},[28,74051,74052],{"class":320},"}`\n",[28,74054,74055,74058],{"class":30,"line":33661},[28,74056,74057],{"class":38},"      return",[28,74059,74060],{"class":34}," str\n",[28,74062,74063],{"class":30,"line":33667},[28,74064,2264],{"class":34},[28,74066,74067],{"class":30,"line":33694},[28,74068,74069],{"class":105},"    \u002F\u002F 渲染函数\n",[28,74071,74072,74074,74076,74078,74080,74082,74084,74086],{"class":30,"line":33718},[28,74073,11298],{"class":38},[28,74075,69822],{"class":45},[28,74077,13641],{"class":38},[28,74079,54471],{"class":34},[28,74081,54474],{"class":2040},[28,74083,221],{"class":34},[28,74085,69833],{"class":320},[28,74087,227],{"class":34},[28,74089,74090,74092,74094],{"class":30,"line":33724},[28,74091,70159],{"class":38},[28,74093,70162],{"class":2040},[28,74095,10930],{"class":34},[28,74097,74098],{"class":30,"line":33730},[28,74099,74100],{"class":105},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[28,74102,74103],{"class":30,"line":33736},[28,74104,74105],{"class":105},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[28,74107,74108,74110,74113,74115,74117,74120,74122,74124,74126,74129,74131,74134],{"class":30,"line":33747},[28,74109,58303],{"class":38},[28,74111,74112],{"class":45}," trArr",[28,74114,13641],{"class":38},[28,74116,52040],{"class":34},[28,74118,74119],{"class":2040},"map",[28,74121,221],{"class":34},[28,74123,54524],{"class":38},[28,74125,1735],{"class":34},[28,74127,74128],{"class":5293},"ele",[28,74130,12512],{"class":34},[28,74132,74133],{"class":5293},"index",[28,74135,12519],{"class":34},[28,74137,74138,74140],{"class":30,"line":33758},[28,74139,14829],{"class":38},[28,74141,70243],{"class":320},[28,74143,74144],{"class":30,"line":33764},[28,74145,74146],{"class":320},"      \u003Ctr>\n",[28,74148,74149,74151,74153,74155,74158],{"class":30,"line":33781},[28,74150,70248],{"class":320},[28,74152,74128],{"class":34},[28,74154,768],{"class":320},[28,74156,74157],{"class":34},"unameId",[28,74159,70263],{"class":320},[28,74161,74162,74164,74166,74168,74170],{"class":30,"line":33804},[28,74163,70248],{"class":320},[28,74165,74128],{"class":34},[28,74167,768],{"class":320},[28,74169,70279],{"class":34},[28,74171,70263],{"class":320},[28,74173,74174,74176,74178,74180,74182],{"class":30,"line":33827},[28,74175,70248],{"class":320},[28,74177,74128],{"class":34},[28,74179,768],{"class":320},[28,74181,70296],{"class":34},[28,74183,70263],{"class":320},[28,74185,74186,74188,74190,74192,74194],{"class":30,"line":33833},[28,74187,70248],{"class":320},[28,74189,74128],{"class":34},[28,74191,768],{"class":320},[28,74193,70313],{"class":34},[28,74195,70263],{"class":320},[28,74197,74198,74200,74202,74204,74206],{"class":30,"line":33838},[28,74199,70248],{"class":320},[28,74201,74128],{"class":34},[28,74203,768],{"class":320},[28,74205,70330],{"class":34},[28,74207,70263],{"class":320},[28,74209,74210,74212,74214,74216,74218],{"class":30,"line":33847},[28,74211,70248],{"class":320},[28,74213,74128],{"class":34},[28,74215,768],{"class":320},[28,74217,70347],{"class":34},[28,74219,70263],{"class":320},[28,74221,74222,74224,74226,74228,74230],{"class":30,"line":33857},[28,74223,70248],{"class":320},[28,74225,74128],{"class":34},[28,74227,768],{"class":320},[28,74229,2464],{"class":34},[28,74231,70263],{"class":320},[28,74233,74234],{"class":30,"line":33863},[28,74235,73690],{"class":320},[28,74237,74238,74241,74243],{"class":30,"line":33868},[28,74239,74240],{"class":320},"          \u003Ca href=\"#\" data-id=\"${",[28,74242,74133],{"class":34},[28,74244,74245],{"class":320},"}\">删除\u003C\u002Fa>\n",[28,74247,74248],{"class":30,"line":33874},[28,74249,73700],{"class":320},[28,74251,74252],{"class":30,"line":33887},[28,74253,74254],{"class":320},"      \u003C\u002Ftr>\n",[28,74256,74257],{"class":30,"line":33893},[28,74258,74259],{"class":320},"  `\n",[28,74261,74262],{"class":30,"line":33904},[28,74263,64890],{"class":34},[28,74265,74266,74268,74270],{"class":30,"line":33915},[28,74267,58319],{"class":34},[28,74269,58322],{"class":2040},[28,74271,74272],{"class":34},"(trArr)\n",[28,74274,74275],{"class":30,"line":33934},[28,74276,2477],{"emptyLinePlaceholder":144},[28,74278,74279],{"class":30,"line":49593},[28,74280,74281],{"class":105},"      \u002F\u002F (2) 把数组转换为字符串join\n",[28,74283,74284],{"class":30,"line":49598},[28,74285,74286],{"class":105},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[28,74288,74289,74291,74293,74296,74299,74301,74304],{"class":30,"line":49607},[28,74290,70174],{"class":34},[28,74292,39],{"class":38},[28,74294,74295],{"class":34}," trArr.",[28,74297,74298],{"class":2040},"join",[28,74300,221],{"class":34},[28,74302,74303],{"class":320},"''",[28,74305,227],{"class":34},[28,74307,74308],{"class":30,"line":49616},[28,74309,74310],{"class":105},"      \u002F\u002F 显示共有几条\n",[28,74312,74313,74315,74317,74319,74322,74325,74327,74329],{"class":30,"line":49621},[28,74314,55846],{"class":34},[28,74316,54474],{"class":2040},[28,74318,221],{"class":34},[28,74320,74321],{"class":320},"'.total span'",[28,74323,74324],{"class":34},").innerHTML ",[28,74326,39],{"class":38},[28,74328,52040],{"class":34},[28,74330,55906],{"class":45},[28,74332,74333],{"class":30,"line":49626},[28,74334,2264],{"class":34},[28,74336,74337],{"class":30,"line":49631},[28,74338,74339],{"class":105},"    \u002F\u002F render()\n",[28,74341,74342],{"class":30,"line":49644},[28,74343,2477],{"emptyLinePlaceholder":144},[28,74345,74346],{"class":30,"line":49649},[28,74347,74348],{"class":105},"    \u002F\u002F 获取DOM对象\n",[28,74350,74351,74353,74355,74357,74359,74361,74363,74365],{"class":30,"line":49658},[28,74352,11298],{"class":38},[28,74354,69896],{"class":45},[28,74356,13641],{"class":38},[28,74358,54471],{"class":34},[28,74360,54474],{"class":2040},[28,74362,221],{"class":34},[28,74364,69907],{"class":320},[28,74366,227],{"class":34},[28,74368,74369,74371,74373,74375,74377,74379,74381,74383],{"class":30,"line":49667},[28,74370,11298],{"class":38},[28,74372,69723],{"class":45},[28,74374,13641],{"class":38},[28,74376,54471],{"class":34},[28,74378,54474],{"class":2040},[28,74380,221],{"class":34},[28,74382,69734],{"class":320},[28,74384,227],{"class":34},[28,74386,74387,74389,74391,74393,74395,74397,74399,74401],{"class":30,"line":49684},[28,74388,11298],{"class":38},[28,74390,15766],{"class":45},[28,74392,13641],{"class":38},[28,74394,54471],{"class":34},[28,74396,54474],{"class":2040},[28,74398,221],{"class":34},[28,74400,69753],{"class":320},[28,74402,227],{"class":34},[28,74404,74406,74408,74410,74412,74414,74416,74418,74420],{"class":30,"line":74405},231,[28,74407,11298],{"class":38},[28,74409,69782],{"class":45},[28,74411,13641],{"class":38},[28,74413,54471],{"class":34},[28,74415,54474],{"class":2040},[28,74417,221],{"class":34},[28,74419,69793],{"class":320},[28,74421,227],{"class":34},[28,74423,74425,74427,74429,74431,74433,74435,74437,74439],{"class":30,"line":74424},232,[28,74426,11298],{"class":38},[28,74428,69762],{"class":45},[28,74430,13641],{"class":38},[28,74432,54471],{"class":34},[28,74434,54474],{"class":2040},[28,74436,221],{"class":34},[28,74438,69773],{"class":320},[28,74440,227],{"class":34},[28,74442,74444,74446,74448,74450,74452,74454,74456,74458],{"class":30,"line":74443},233,[28,74445,11298],{"class":38},[28,74447,69802],{"class":45},[28,74449,13641],{"class":38},[28,74451,54471],{"class":34},[28,74453,54474],{"class":2040},[28,74455,221],{"class":34},[28,74457,69813],{"class":320},[28,74459,227],{"class":34},[28,74461,74463],{"class":30,"line":74462},234,[28,74464,2477],{"emptyLinePlaceholder":144},[28,74466,74468],{"class":30,"line":74467},235,[28,74469,74470],{"class":105},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[28,74472,74474,74476,74478,74480,74482,74484,74486,74488,74490],{"class":30,"line":74473},236,[28,74475,69914],{"class":34},[28,74477,57888],{"class":2040},[28,74479,221],{"class":34},[28,74481,69921],{"class":320},[28,74483,12512],{"class":34},[28,74485,54524],{"class":38},[28,74487,1735],{"class":34},[28,74489,291],{"class":5293},[28,74491,12519],{"class":34},[28,74493,74495],{"class":30,"line":74494},237,[28,74496,74497],{"class":105},"      \u002F\u002F 禁止浏览器跳转\n",[28,74499,74501,74503,74505],{"class":30,"line":74500},238,[28,74502,69941],{"class":34},[28,74504,69944],{"class":2040},[28,74506,2053],{"class":34},[28,74508,74510],{"class":30,"line":74509},239,[28,74511,74512],{"class":105},"      \u002F\u002F 非空判断\n",[28,74514,74516],{"class":30,"line":74515},240,[28,74517,74518],{"class":105},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[28,74520,74522],{"class":30,"line":74521},241,[28,74523,74524],{"class":105},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[28,74526,74528,74530,74532,74534,74537,74539,74542,74545,74547,74549],{"class":30,"line":74527},242,[28,74529,54555],{"class":38},[28,74531,1735],{"class":34},[28,74533,441],{"class":38},[28,74535,74536],{"class":34},"uname.value ",[28,74538,71432],{"class":38},[28,74540,74541],{"class":38}," !",[28,74543,74544],{"class":34},"age.value ",[28,74546,71432],{"class":38},[28,74548,74541],{"class":38},[28,74550,74551],{"class":34},"salary.value) {\n",[28,74553,74555,74557,74559,74561,74563],{"class":30,"line":74554},243,[28,74556,14829],{"class":38},[28,74558,70015],{"class":2040},[28,74560,221],{"class":34},[28,74562,70020],{"class":320},[28,74564,227],{"class":34},[28,74566,74568],{"class":30,"line":74567},244,[28,74569,52473],{"class":34},[28,74571,74573,74575,74577],{"class":30,"line":74572},245,[28,74574,58082],{"class":34},[28,74576,51959],{"class":2040},[28,74578,74579],{"class":34},"({\n",[28,74581,74583],{"class":30,"line":74582},246,[28,74584,74585],{"class":105},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[28,74587,74589],{"class":30,"line":74588},247,[28,74590,74591],{"class":105},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[28,74593,74595],{"class":30,"line":74594},248,[28,74596,74597],{"class":105},"        \u002F\u002F 对象的序号应为数组长度+1\n",[28,74599,74601],{"class":30,"line":74600},249,[28,74602,74603],{"class":105},"        \u002F\u002F unameId: arr.length + 1,\n",[28,74605,74607],{"class":30,"line":74606},250,[28,74608,2477],{"emptyLinePlaceholder":144},[28,74610,74612],{"class":30,"line":74611},251,[28,74613,74614],{"class":105},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[28,74616,74618],{"class":30,"line":74617},252,[28,74619,74620],{"class":105},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[28,74622,74624],{"class":30,"line":74623},253,[28,74625,74626],{"class":105},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[28,74628,74630],{"class":30,"line":74629},254,[28,74631,74632],{"class":105},"        \u002F\u002F 0当假看\n",[28,74634,74636,74639,74641,74643,74646,74648,74650,74652,74655,74657,74659,74662,74664],{"class":30,"line":74635},255,[28,74637,74638],{"class":34},"        unameId: arr.",[28,74640,52043],{"class":45},[28,74642,73889],{"class":38},[28,74644,74645],{"class":34}," arr[arr.",[28,74647,52043],{"class":45},[28,74649,52346],{"class":38},[28,74651,25196],{"class":45},[28,74653,74654],{"class":34},"].unameId ",[28,74656,693],{"class":38},[28,74658,25196],{"class":45},[28,74660,74661],{"class":38}," :",[28,74663,25196],{"class":45},[28,74665,31542],{"class":34},[28,74667,74669],{"class":30,"line":74668},256,[28,74670,70068],{"class":34},[28,74672,74674],{"class":30,"line":74673},257,[28,74675,70073],{"class":34},[28,74677,74679],{"class":30,"line":74678},258,[28,74680,70083],{"class":34},[28,74682,74684],{"class":30,"line":74683},259,[28,74685,70078],{"class":34},[28,74687,74689],{"class":30,"line":74688},260,[28,74690,74691],{"class":34},"        city: city.value,\n",[28,74693,74695],{"class":30,"line":74694},261,[28,74696,74697],{"class":105},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[28,74699,74701],{"class":30,"line":74700},262,[28,74702,74703],{"class":105},"        \u002F\u002F time: new Date().toDateString()\n",[28,74705,74707,74710,74713],{"class":30,"line":74706},263,[28,74708,74709],{"class":34},"        time: ",[28,74711,74712],{"class":2040},"getTime",[28,74714,2053],{"class":34},[28,74716,74718],{"class":30,"line":74717},264,[28,74719,64890],{"class":34},[28,74721,74723],{"class":30,"line":74722},265,[28,74724,74725],{"class":105},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[28,74727,74729,74731],{"class":30,"line":74728},266,[28,74730,70143],{"class":2040},[28,74732,2053],{"class":34},[28,74734,74736,74738,74740,74742,74744],{"class":30,"line":74735},267,[28,74737,70126],{"class":45},[28,74739,768],{"class":34},[28,74741,70131],{"class":2040},[28,74743,13127],{"class":34},[28,74745,74746],{"class":105},"\u002F\u002F重置表单\n",[28,74748,74750],{"class":30,"line":74749},268,[28,74751,74752],{"class":105},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[28,74754,74756,74759,74761,74763,74766,74768,74770,74772,74774],{"class":30,"line":74755},269,[28,74757,74758],{"class":34},"      localStorage.",[28,74760,71729],{"class":2040},[28,74762,221],{"class":34},[28,74764,74765],{"class":320},"'data'",[28,74767,12512],{"class":34},[28,74769,71739],{"class":45},[28,74771,768],{"class":34},[28,74773,71744],{"class":2040},[28,74775,74776],{"class":34},"(arr))\n",[28,74778,74780],{"class":30,"line":74779},270,[28,74781,33537],{"class":34},[28,74783,74785],{"class":30,"line":74784},271,[28,74786,2477],{"emptyLinePlaceholder":144},[28,74788,74790],{"class":30,"line":74789},272,[28,74791,74792],{"class":105},"    \u002F\u002F 3.删除业务\n",[28,74794,74796],{"class":30,"line":74795},273,[28,74797,74798],{"class":105},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[28,74800,74802,74804,74806,74808,74810,74812,74814,74816,74818],{"class":30,"line":74801},274,[28,74803,70416],{"class":34},[28,74805,57888],{"class":2040},[28,74807,221],{"class":34},[28,74809,57893],{"class":320},[28,74811,12512],{"class":34},[28,74813,54524],{"class":38},[28,74815,1735],{"class":34},[28,74817,291],{"class":5293},[28,74819,12519],{"class":34},[28,74821,74823],{"class":30,"line":74822},275,[28,74824,74825],{"class":105},"      \u002F\u002F 判断是否点击的是删除按钮\n",[28,74827,74829,74831,74833,74835,74837],{"class":30,"line":74828},276,[28,74830,54555],{"class":38},[28,74832,67109],{"class":34},[28,74834,54561],{"class":38},[28,74836,68331],{"class":320},[28,74838,12519],{"class":34},[28,74840,74842],{"class":30,"line":74841},277,[28,74843,74844],{"class":105},"        \u002F\u002F alert(1)\n",[28,74846,74848],{"class":30,"line":74847},278,[28,74849,74850],{"class":105},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[28,74852,74854],{"class":30,"line":74853},279,[28,74855,74856],{"class":105},"        \u002F\u002F console.log(e.target)\n",[28,74858,74860],{"class":30,"line":74859},280,[28,74861,74862],{"class":105},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[28,74864,74866],{"class":30,"line":74865},281,[28,74867,2477],{"emptyLinePlaceholder":144},[28,74869,74871],{"class":30,"line":74870},282,[28,74872,74873],{"class":105},"        \u002F\u002F 确认框，确然是否真的要删除\n",[28,74875,74877],{"class":30,"line":74876},283,[28,74878,74879],{"class":105},"        \u002F\u002F confirm()为确认框\n",[28,74881,74883],{"class":30,"line":74882},284,[28,74884,74885],{"class":105},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[28,74887,74889,74891,74893,74896,74898,74901],{"class":30,"line":74888},285,[28,74890,2574],{"class":38},[28,74892,1735],{"class":34},[28,74894,74895],{"class":2040},"confirm",[28,74897,221],{"class":34},[28,74899,74900],{"class":320},"'您确定要删除这条数据吗？'",[28,74902,74903],{"class":34},")) {\n",[28,74905,74907,74910,74912,74914,74916],{"class":30,"line":74906},286,[28,74908,74909],{"class":34},"          arr.",[28,74911,58085],{"class":2040},[28,74913,70469],{"class":34},[28,74915,46],{"class":45},[28,74917,227],{"class":34},[28,74919,74921],{"class":30,"line":74920},287,[28,74922,74923],{"class":105},"          \u002F\u002F 3.4 重新渲染页面\n",[28,74925,74927,74930],{"class":30,"line":74926},288,[28,74928,74929],{"class":2040},"          render",[28,74931,2053],{"class":34},[28,74933,74935],{"class":30,"line":74934},289,[28,74936,74937],{"class":105},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[28,74939,74941,74944,74946,74948,74950,74952,74954,74956,74958],{"class":30,"line":74940},290,[28,74942,74943],{"class":34},"          localStorage.",[28,74945,71729],{"class":2040},[28,74947,221],{"class":34},[28,74949,74765],{"class":320},[28,74951,12512],{"class":34},[28,74953,71739],{"class":45},[28,74955,768],{"class":34},[28,74957,71744],{"class":2040},[28,74959,74776],{"class":34},[28,74961,74963],{"class":30,"line":74962},291,[28,74964,2606],{"class":34},[28,74966,74968],{"class":30,"line":74967},292,[28,74969,52473],{"class":34},[28,74971,74973],{"class":30,"line":74972},293,[28,74974,2477],{"emptyLinePlaceholder":144},[28,74976,74978],{"class":30,"line":74977},294,[28,74979,33537],{"class":34},[28,74981,74983],{"class":30,"line":74982},295,[28,74984,2477],{"emptyLinePlaceholder":144},[28,74986,74988,74990,74992],{"class":30,"line":74987},296,[28,74989,52492],{"class":34},[28,74991,51888],{"class":51375},[28,74993,51382],{"class":34},[28,74995,74997,74999,75001],{"class":30,"line":74996},297,[28,74998,51860],{"class":34},[28,75000,51875],{"class":51375},[28,75002,51382],{"class":34},[28,75004,75006],{"class":30,"line":75005},298,[28,75007,2477],{"emptyLinePlaceholder":144},[28,75009,75011,75013,75015],{"class":30,"line":75010},299,[28,75012,51860],{"class":34},[28,75014,50710],{"class":51375},[28,75016,51382],{"class":34},[159,75018,75020],{"id":75019},"_36-正则表达式","3.6 正则表达式",[14,75022,75023],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75025,75026],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75028,75029],{},"正则表达式的作用：",[1211,75031,75032,75039,75045],{},[174,75033,75034,75035,75038],{},"表单验证（ ",[365,75036,75037],{},"匹配"," ）",[174,75040,75041,75042,75038],{},"过滤敏感词（ ",[365,75043,75044],{},"替换",[174,75046,75047,75048,75038],{},"字符串中提取我们想要的部分（ ",[365,75049,75050],{},"提取",[188,75052,75054],{"id":75053},"_361-语法","3.6.1 语法",[14,75056,75057],{},"正则表达式使用步骤：",[171,75059,75060,75063],{},[174,75061,75062],{},"定义规则",[174,75064,75065],{},"查找是否匹配",[14,75067,75068],{},"正则表达式里边不需要写引号",[14,75070,75071],{},[1539,75072],{"alt":23,"src":75073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75075,75076],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75078,75079],{},"reg.test(str)",[14,75081,75082],{},[1539,75083],{"alt":23,"src":75084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75086,75087],{},[1539,75088],{"alt":23,"src":75089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[188,75091,75093],{"id":75092},"_362-元字符","3.6.2 元字符",[171,75095,75096,75099,75102,75105,75112],{},[174,75097,75098],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[174,75100,75101],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[174,75103,75104],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[174,75106,75107,75108],{},"正则验证工具：",[35,75109,75110],{"href":75110,"rel":75111},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23942],[174,75113,75114],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22075,75116,75118],{"id":75117},"_3621-边界符","3.6.2.1 边界符",[14,75120,75121],{},[1539,75122],{"alt":23,"src":75123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75125,75126],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75128,75129],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75131,75132],{},"只匹配一次",[14,75134,75135],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22075,75137,75139],{"id":75138},"_3622-量词","3.6.2.2 量词",[14,75141,75142],{},[1539,75143],{"alt":23,"src":75144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75146,75147],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22075,75149,75151],{"id":75150},"_3623-元字符","3.6.2.3 元字符",[14,75153,75154],{},[1539,75155],{"alt":23,"src":75156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75158,75159],{},"匹配的是a或b或c []只选一个",[14,75161,75162],{},[1539,75163],{"alt":23,"src":75164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75166,75167],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75169,75170],{},[1539,75171],{"alt":23,"src":75172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75174,75175],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75177,75178],{},[1539,75179],{"alt":23,"src":75180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[18,75182,75184],{"className":50708,"code":75183,"language":50710,"meta":23,"style":23},"\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",[25,75185,75186,75196,75210,75214,75222,75236,75256,75268,75276,75280,75288,75296,75301,75332,75359,75387,75391,75396,75424,75455,75460,75465,75496,75528,75560,75564,75569,75600,75630,75660,75664,75669,75700,75731,75761,75791,75795,75800,75833,75837,75842,75873,75904,75908,75913,75944,75974,76005,76009,76014,76046,76077,76108,76135,76166,76198,76231,76262,76293,76325,76356,76364,76372,76376],{"__ignoreMap":23},[28,75187,75188,75190,75192,75194],{"class":30,"line":31},[28,75189,51372],{"class":34},[28,75191,51376],{"class":51375},[28,75193,51379],{"class":2040},[28,75195,51382],{"class":34},[28,75197,75198,75200,75202,75204,75206,75208],{"class":30,"line":94},[28,75199,99],{"class":34},[28,75201,50710],{"class":51375},[28,75203,51391],{"class":2040},[28,75205,39],{"class":34},[28,75207,51396],{"class":320},[28,75209,51382],{"class":34},[28,75211,75212],{"class":30,"line":109},[28,75213,2477],{"emptyLinePlaceholder":144},[28,75215,75216,75218,75220],{"class":30,"line":125},[28,75217,99],{"class":34},[28,75219,51409],{"class":51375},[28,75221,51382],{"class":34},[28,75223,75224,75226,75228,75230,75232,75234],{"class":30,"line":131},[28,75225,52219],{"class":34},[28,75227,51419],{"class":51375},[28,75229,51422],{"class":2040},[28,75231,39],{"class":34},[28,75233,51427],{"class":320},[28,75235,51382],{"class":34},[28,75237,75238,75240,75242,75244,75246,75248,75250,75252,75254],{"class":30,"line":1291},[28,75239,52219],{"class":34},[28,75241,51419],{"class":51375},[28,75243,14997],{"class":2040},[28,75245,39],{"class":34},[28,75247,51466],{"class":320},[28,75249,51446],{"class":2040},[28,75251,39],{"class":34},[28,75253,51473],{"class":320},[28,75255,51382],{"class":34},[28,75257,75258,75260,75262,75264,75266],{"class":30,"line":1297},[28,75259,52219],{"class":34},[28,75261,51482],{"class":51375},[28,75263,51485],{"class":34},[28,75265,51482],{"class":51375},[28,75267,51382],{"class":34},[28,75269,75270,75272,75274],{"class":30,"line":1388},[28,75271,51860],{"class":34},[28,75273,51409],{"class":51375},[28,75275,51382],{"class":34},[28,75277,75278],{"class":30,"line":1394},[28,75279,2477],{"emptyLinePlaceholder":144},[28,75281,75282,75284,75286],{"class":30,"line":1406},[28,75283,99],{"class":34},[28,75285,51875],{"class":51375},[28,75287,51382],{"class":34},[28,75289,75290,75292,75294],{"class":30,"line":1689},[28,75291,52219],{"class":34},[28,75293,51888],{"class":51375},[28,75295,51382],{"class":34},[28,75297,75298],{"class":30,"line":1694},[28,75299,75300],{"class":105},"    \u002F\u002F 元字符中\n",[28,75302,75303,75305,75307,75309,75311,75314,75316,75318,75321,75323,75326,75329],{"class":30,"line":1700},[28,75304,73828],{"class":34},[28,75306,58322],{"class":2040},[28,75308,221],{"class":34},[28,75310,794],{"class":320},[28,75312,75313],{"class":48053},"哈",[28,75315,794],{"class":320},[28,75317,768],{"class":34},[28,75319,75320],{"class":2040},"test",[28,75322,221],{"class":34},[28,75324,75325],{"class":320},"'哈'",[28,75327,75328],{"class":34},"))  ",[28,75330,75331],{"class":105},"\u002F\u002Ftrue\n",[28,75333,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75355,75357],{"class":30,"line":1705},[28,75335,73828],{"class":34},[28,75337,58322],{"class":2040},[28,75339,221],{"class":34},[28,75341,794],{"class":320},[28,75343,75313],{"class":48053},[28,75345,794],{"class":320},[28,75347,768],{"class":34},[28,75349,75320],{"class":2040},[28,75351,221],{"class":34},[28,75353,75354],{"class":320},"'哈哈'",[28,75356,75328],{"class":34},[28,75358,75331],{"class":105},[28,75360,75361,75363,75365,75367,75369,75371,75373,75375,75377,75379,75382,75385],{"class":30,"line":1719},[28,75362,73828],{"class":34},[28,75364,58322],{"class":2040},[28,75366,221],{"class":34},[28,75368,794],{"class":320},[28,75370,75313],{"class":48053},[28,75372,794],{"class":320},[28,75374,768],{"class":34},[28,75376,75320],{"class":2040},[28,75378,221],{"class":34},[28,75380,75381],{"class":320},"'二哈'",[28,75383,75384],{"class":34},"))   ",[28,75386,75331],{"class":105},[28,75388,75389],{"class":30,"line":1724},[28,75390,2477],{"emptyLinePlaceholder":144},[28,75392,75393],{"class":30,"line":1730},[28,75394,75395],{"class":105},"    \u002F\u002F 1.边界符\n",[28,75397,75398,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422],{"class":30,"line":1751},[28,75399,73828],{"class":34},[28,75401,58322],{"class":2040},[28,75403,221],{"class":34},[28,75405,794],{"class":320},[28,75407,1170],{"class":38},[28,75409,75313],{"class":48053},[28,75411,794],{"class":320},[28,75413,768],{"class":34},[28,75415,75320],{"class":2040},[28,75417,221],{"class":34},[28,75419,75325],{"class":320},[28,75421,75328],{"class":34},[28,75423,75331],{"class":105},[28,75425,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452],{"class":30,"line":1756},[28,75427,73828],{"class":34},[28,75429,58322],{"class":2040},[28,75431,221],{"class":34},[28,75433,794],{"class":320},[28,75435,1170],{"class":38},[28,75437,75313],{"class":48053},[28,75439,516],{"class":38},[28,75441,794],{"class":320},[28,75443,768],{"class":34},[28,75445,75320],{"class":2040},[28,75447,221],{"class":34},[28,75449,75354],{"class":320},[28,75451,75328],{"class":34},[28,75453,75454],{"class":105},"\u002F\u002Ffalse\n",[28,75456,75457],{"class":30,"line":1770},[28,75458,75459],{"class":105},"    \u002F\u002F 2.量词\n",[28,75461,75462],{"class":30,"line":1775},[28,75463,75464],{"class":105},"    \u002F\u002F 量词 * 类似于 >= 0\n",[28,75466,75467,75469,75471,75473,75475,75477,75479,75482,75484,75486,75488,75490,75492,75494],{"class":30,"line":1804},[28,75468,73828],{"class":34},[28,75470,58322],{"class":2040},[28,75472,221],{"class":34},[28,75474,794],{"class":320},[28,75476,1170],{"class":38},[28,75478,75313],{"class":48053},[28,75480,75481],{"class":38},"*$",[28,75483,794],{"class":320},[28,75485,768],{"class":34},[28,75487,75320],{"class":2040},[28,75489,221],{"class":34},[28,75491,75354],{"class":320},[28,75493,75328],{"class":34},[28,75495,75331],{"class":105},[28,75497,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75518,75520,75523,75525],{"class":30,"line":1809},[28,75499,73828],{"class":34},[28,75501,58322],{"class":2040},[28,75503,221],{"class":34},[28,75505,794],{"class":320},[28,75507,1170],{"class":38},[28,75509,75313],{"class":48053},[28,75511,75481],{"class":38},[28,75513,794],{"class":320},[28,75515,768],{"class":34},[28,75517,75320],{"class":2040},[28,75519,221],{"class":34},[28,75521,75522],{"class":320},"'二哈好傻'",[28,75524,75328],{"class":34},[28,75526,75527],{"class":105},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[28,75529,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75555,75557],{"class":30,"line":1826},[28,75531,73828],{"class":34},[28,75533,58322],{"class":2040},[28,75535,221],{"class":34},[28,75537,794],{"class":320},[28,75539,1170],{"class":38},[28,75541,75313],{"class":48053},[28,75543,75481],{"class":38},[28,75545,794],{"class":320},[28,75547,768],{"class":34},[28,75549,75320],{"class":2040},[28,75551,221],{"class":34},[28,75553,75554],{"class":320},"'哈好哈'",[28,75556,75384],{"class":34},[28,75558,75559],{"class":105},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[28,75561,75562],{"class":30,"line":1831},[28,75563,2477],{"emptyLinePlaceholder":144},[28,75565,75566],{"class":30,"line":1836},[28,75567,75568],{"class":105},"    \u002F\u002F +类似于>=1\n",[28,75570,75571,75573,75575,75577,75579,75581,75583,75586,75588,75590,75592,75594,75596,75598],{"class":30,"line":1841},[28,75572,73828],{"class":34},[28,75574,58322],{"class":2040},[28,75576,221],{"class":34},[28,75578,794],{"class":320},[28,75580,1170],{"class":38},[28,75582,75313],{"class":48053},[28,75584,75585],{"class":38},"+$",[28,75587,794],{"class":320},[28,75589,768],{"class":34},[28,75591,75320],{"class":2040},[28,75593,221],{"class":34},[28,75595,75354],{"class":320},[28,75597,75328],{"class":34},[28,75599,75331],{"class":105},[28,75601,75602,75604,75606,75608,75610,75612,75614,75616,75618,75620,75622,75624,75626,75628],{"class":30,"line":1855},[28,75603,73828],{"class":34},[28,75605,58322],{"class":2040},[28,75607,221],{"class":34},[28,75609,794],{"class":320},[28,75611,1170],{"class":38},[28,75613,75313],{"class":48053},[28,75615,75585],{"class":38},[28,75617,794],{"class":320},[28,75619,768],{"class":34},[28,75621,75320],{"class":2040},[28,75623,221],{"class":34},[28,75625,75522],{"class":320},[28,75627,75328],{"class":34},[28,75629,75527],{"class":105},[28,75631,75632,75634,75636,75638,75640,75642,75644,75646,75648,75650,75652,75654,75656,75658],{"class":30,"line":1860},[28,75633,73828],{"class":34},[28,75635,58322],{"class":2040},[28,75637,221],{"class":34},[28,75639,794],{"class":320},[28,75641,1170],{"class":38},[28,75643,75313],{"class":48053},[28,75645,75585],{"class":38},[28,75647,794],{"class":320},[28,75649,768],{"class":34},[28,75651,75320],{"class":2040},[28,75653,221],{"class":34},[28,75655,75554],{"class":320},[28,75657,75384],{"class":34},[28,75659,75454],{"class":105},[28,75661,75662],{"class":30,"line":2654},[28,75663,2477],{"emptyLinePlaceholder":144},[28,75665,75666],{"class":30,"line":2668},[28,75667,75668],{"class":105},"    \u002F\u002F ?类似于0次或一次\n",[28,75670,75671,75673,75675,75677,75679,75681,75684,75686,75688,75690,75692,75694,75696,75698],{"class":30,"line":2676},[28,75672,73828],{"class":34},[28,75674,58322],{"class":2040},[28,75676,221],{"class":34},[28,75678,794],{"class":320},[28,75680,1170],{"class":38},[28,75682,75683],{"class":48053},"哈？",[28,75685,516],{"class":38},[28,75687,794],{"class":320},[28,75689,768],{"class":34},[28,75691,75320],{"class":2040},[28,75693,221],{"class":34},[28,75695,74303],{"class":320},[28,75697,75384],{"class":34},[28,75699,75331],{"class":105},[28,75701,75702,75704,75706,75708,75710,75712,75714,75717,75719,75721,75723,75725,75727,75729],{"class":30,"line":2681},[28,75703,73828],{"class":34},[28,75705,58322],{"class":2040},[28,75707,221],{"class":34},[28,75709,794],{"class":320},[28,75711,1170],{"class":38},[28,75713,75313],{"class":48053},[28,75715,75716],{"class":38},"?$",[28,75718,794],{"class":320},[28,75720,768],{"class":34},[28,75722,75320],{"class":2040},[28,75724,221],{"class":34},[28,75726,75354],{"class":320},[28,75728,75328],{"class":34},[28,75730,75454],{"class":105},[28,75732,75733,75735,75737,75739,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759],{"class":30,"line":2687},[28,75734,73828],{"class":34},[28,75736,58322],{"class":2040},[28,75738,221],{"class":34},[28,75740,794],{"class":320},[28,75742,1170],{"class":38},[28,75744,75313],{"class":48053},[28,75746,75716],{"class":38},[28,75748,794],{"class":320},[28,75750,768],{"class":34},[28,75752,75320],{"class":2040},[28,75754,221],{"class":34},[28,75756,75522],{"class":320},[28,75758,75328],{"class":34},[28,75760,75527],{"class":105},[28,75762,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787,75789],{"class":30,"line":2693},[28,75764,73828],{"class":34},[28,75766,58322],{"class":2040},[28,75768,221],{"class":34},[28,75770,794],{"class":320},[28,75772,1170],{"class":38},[28,75774,75313],{"class":48053},[28,75776,75716],{"class":38},[28,75778,794],{"class":320},[28,75780,768],{"class":34},[28,75782,75320],{"class":2040},[28,75784,221],{"class":34},[28,75786,75554],{"class":320},[28,75788,75328],{"class":34},[28,75790,75454],{"class":105},[28,75792,75793],{"class":30,"line":2698},[28,75794,2477],{"emptyLinePlaceholder":144},[28,75796,75797],{"class":30,"line":8025},[28,75798,75799],{"class":105},"    \u002F\u002F {n}写几，就必须出现几次\n",[28,75801,75802,75804,75806,75808,75810,75812,75814,75817,75819,75821,75823,75825,75828,75831],{"class":30,"line":8049},[28,75803,73828],{"class":34},[28,75805,58322],{"class":2040},[28,75807,221],{"class":34},[28,75809,794],{"class":320},[28,75811,1170],{"class":38},[28,75813,75313],{"class":48053},[28,75815,75816],{"class":38},"{4}$",[28,75818,794],{"class":320},[28,75820,768],{"class":34},[28,75822,75320],{"class":2040},[28,75824,221],{"class":34},[28,75826,75827],{"class":320},"'哈哈哈哈'",[28,75829,75830],{"class":34},")) ",[28,75832,75331],{"class":105},[28,75834,75835],{"class":30,"line":8054},[28,75836,2477],{"emptyLinePlaceholder":144},[28,75838,75839],{"class":30,"line":8060},[28,75840,75841],{"class":105},"    \u002F\u002F {n,}大于等于n次\n",[28,75843,75844,75846,75848,75850,75852,75854,75856,75859,75861,75863,75865,75867,75869,75871],{"class":30,"line":8087},[28,75845,73828],{"class":34},[28,75847,58322],{"class":2040},[28,75849,221],{"class":34},[28,75851,794],{"class":320},[28,75853,1170],{"class":38},[28,75855,75313],{"class":48053},[28,75857,75858],{"class":38},"{4,}$",[28,75860,794],{"class":320},[28,75862,768],{"class":34},[28,75864,75320],{"class":2040},[28,75866,221],{"class":34},[28,75868,75827],{"class":320},[28,75870,75830],{"class":34},[28,75872,75331],{"class":105},[28,75874,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75895,75897,75900,75902],{"class":30,"line":8092},[28,75876,73828],{"class":34},[28,75878,58322],{"class":2040},[28,75880,221],{"class":34},[28,75882,794],{"class":320},[28,75884,1170],{"class":38},[28,75886,75313],{"class":48053},[28,75888,75858],{"class":38},[28,75890,794],{"class":320},[28,75892,768],{"class":34},[28,75894,75320],{"class":2040},[28,75896,221],{"class":34},[28,75898,75899],{"class":320},"'哈哈哈哈哈'",[28,75901,75830],{"class":34},[28,75903,75331],{"class":105},[28,75905,75906],{"class":30,"line":8098},[28,75907,2477],{"emptyLinePlaceholder":144},[28,75909,75910],{"class":30,"line":8110},[28,75911,75912],{"class":105},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[28,75914,75915,75917,75919,75921,75923,75925,75927,75930,75932,75934,75936,75938,75940,75942],{"class":30,"line":8122},[28,75916,73828],{"class":34},[28,75918,58322],{"class":2040},[28,75920,221],{"class":34},[28,75922,794],{"class":320},[28,75924,1170],{"class":38},[28,75926,75313],{"class":48053},[28,75928,75929],{"class":38},"{4,6}$",[28,75931,794],{"class":320},[28,75933,768],{"class":34},[28,75935,75320],{"class":2040},[28,75937,221],{"class":34},[28,75939,75827],{"class":320},[28,75941,75830],{"class":34},[28,75943,75331],{"class":105},[28,75945,75946,75948,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972],{"class":30,"line":8134},[28,75947,73828],{"class":34},[28,75949,58322],{"class":2040},[28,75951,221],{"class":34},[28,75953,794],{"class":320},[28,75955,1170],{"class":38},[28,75957,75313],{"class":48053},[28,75959,75929],{"class":38},[28,75961,794],{"class":320},[28,75963,768],{"class":34},[28,75965,75320],{"class":2040},[28,75967,221],{"class":34},[28,75969,75899],{"class":320},[28,75971,75830],{"class":34},[28,75973,75331],{"class":105},[28,75975,75976,75978,75980,75982,75984,75986,75988,75990,75992,75994,75996,75998,76001,76003],{"class":30,"line":9793},[28,75977,73828],{"class":34},[28,75979,58322],{"class":2040},[28,75981,221],{"class":34},[28,75983,794],{"class":320},[28,75985,1170],{"class":38},[28,75987,75313],{"class":48053},[28,75989,75929],{"class":38},[28,75991,794],{"class":320},[28,75993,768],{"class":34},[28,75995,75320],{"class":2040},[28,75997,221],{"class":34},[28,75999,76000],{"class":320},"'哈哈哈哈哈哈哈'",[28,76002,75830],{"class":34},[28,76004,75454],{"class":105},[28,76006,76007],{"class":30,"line":9818},[28,76008,2477],{"emptyLinePlaceholder":144},[28,76010,76011],{"class":30,"line":9841},[28,76012,76013],{"class":105},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[28,76015,76016,76018,76020,76022,76024,76026,76029,76031,76033,76035,76037,76039,76042,76044],{"class":30,"line":9865},[28,76017,73828],{"class":34},[28,76019,58322],{"class":2040},[28,76021,221],{"class":34},[28,76023,794],{"class":320},[28,76025,1170],{"class":38},[28,76027,76028],{"class":45},"[abc]",[28,76030,516],{"class":38},[28,76032,794],{"class":320},[28,76034,768],{"class":34},[28,76036,75320],{"class":2040},[28,76038,221],{"class":34},[28,76040,76041],{"class":320},"'a'",[28,76043,75328],{"class":34},[28,76045,75331],{"class":105},[28,76047,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76068,76070,76073,76075],{"class":30,"line":9870},[28,76049,73828],{"class":34},[28,76051,58322],{"class":2040},[28,76053,221],{"class":34},[28,76055,794],{"class":320},[28,76057,1170],{"class":38},[28,76059,76028],{"class":45},[28,76061,516],{"class":38},[28,76063,794],{"class":320},[28,76065,768],{"class":34},[28,76067,75320],{"class":2040},[28,76069,221],{"class":34},[28,76071,76072],{"class":320},"'b'",[28,76074,75328],{"class":34},[28,76076,75331],{"class":105},[28,76078,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76099,76101,76104,76106],{"class":30,"line":9875},[28,76080,73828],{"class":34},[28,76082,58322],{"class":2040},[28,76084,221],{"class":34},[28,76086,794],{"class":320},[28,76088,1170],{"class":38},[28,76090,76028],{"class":45},[28,76092,516],{"class":38},[28,76094,794],{"class":320},[28,76096,768],{"class":34},[28,76098,75320],{"class":2040},[28,76100,221],{"class":34},[28,76102,76103],{"class":320},"'c'",[28,76105,75328],{"class":34},[28,76107,75331],{"class":105},[28,76109,76110,76112,76114,76116,76118,76120,76122,76124,76126,76128,76131,76133],{"class":30,"line":9880},[28,76111,73828],{"class":34},[28,76113,58322],{"class":2040},[28,76115,221],{"class":34},[28,76117,794],{"class":320},[28,76119,76028],{"class":45},[28,76121,794],{"class":320},[28,76123,768],{"class":34},[28,76125,75320],{"class":2040},[28,76127,221],{"class":34},[28,76129,76130],{"class":320},"'ab'",[28,76132,75328],{"class":34},[28,76134,75331],{"class":105},[28,76136,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161,76163],{"class":30,"line":9889},[28,76138,73828],{"class":34},[28,76140,58322],{"class":2040},[28,76142,221],{"class":34},[28,76144,794],{"class":320},[28,76146,1170],{"class":38},[28,76148,76028],{"class":45},[28,76150,516],{"class":38},[28,76152,794],{"class":320},[28,76154,768],{"class":34},[28,76156,75320],{"class":2040},[28,76158,221],{"class":34},[28,76160,76130],{"class":320},[28,76162,75328],{"class":34},[28,76164,76165],{"class":105},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[28,76167,76168,76170,76172,76174,76176,76178,76180,76183,76185,76187,76189,76191,76193,76195],{"class":30,"line":9894},[28,76169,73828],{"class":34},[28,76171,58322],{"class":2040},[28,76173,221],{"class":34},[28,76175,794],{"class":320},[28,76177,1170],{"class":38},[28,76179,76028],{"class":45},[28,76181,76182],{"class":38},"{2}$",[28,76184,794],{"class":320},[28,76186,768],{"class":34},[28,76188,75320],{"class":2040},[28,76190,221],{"class":34},[28,76192,76130],{"class":320},[28,76194,75328],{"class":34},[28,76196,76197],{"class":105},"\u002F\u002Ftrue   可以选两个\n",[28,76199,76200,76202,76204,76206,76208,76210,76213,76215,76217,76219,76221,76223,76226,76228],{"class":30,"line":9900},[28,76201,73828],{"class":34},[28,76203,58322],{"class":2040},[28,76205,221],{"class":34},[28,76207,794],{"class":320},[28,76209,1170],{"class":38},[28,76211,76212],{"class":45},"[a-z]",[28,76214,516],{"class":38},[28,76216,794],{"class":320},[28,76218,768],{"class":34},[28,76220,75320],{"class":2040},[28,76222,221],{"class":34},[28,76224,76225],{"class":320},"'p'",[28,76227,75384],{"class":34},[28,76229,76230],{"class":105},"\u002F\u002Ftrue   依然只能选一个\n",[28,76232,76233,76235,76237,76239,76241,76243,76246,76248,76250,76252,76254,76256,76258,76260],{"class":30,"line":9921},[28,76234,73828],{"class":34},[28,76236,58322],{"class":2040},[28,76238,221],{"class":34},[28,76240,794],{"class":320},[28,76242,1170],{"class":38},[28,76244,76245],{"class":45},"[A-Z]",[28,76247,516],{"class":38},[28,76249,794],{"class":320},[28,76251,768],{"class":34},[28,76253,75320],{"class":2040},[28,76255,221],{"class":34},[28,76257,76225],{"class":320},[28,76259,75384],{"class":34},[28,76261,75454],{"class":105},[28,76263,76264,76266,76268,76270,76272,76274,76276,76278,76280,76282,76284,76286,76289,76291],{"class":30,"line":9927},[28,76265,73828],{"class":34},[28,76267,58322],{"class":2040},[28,76269,221],{"class":34},[28,76271,794],{"class":320},[28,76273,1170],{"class":38},[28,76275,76245],{"class":45},[28,76277,516],{"class":38},[28,76279,794],{"class":320},[28,76281,768],{"class":34},[28,76283,75320],{"class":2040},[28,76285,221],{"class":34},[28,76287,76288],{"class":320},"'P'",[28,76290,75384],{"class":34},[28,76292,75331],{"class":105},[28,76294,76295,76297,76299,76301,76303,76305,76308,76310,76312,76314,76316,76318,76321,76323],{"class":30,"line":9941},[28,76296,73828],{"class":34},[28,76298,58322],{"class":2040},[28,76300,221],{"class":34},[28,76302,794],{"class":320},[28,76304,1170],{"class":38},[28,76306,76307],{"class":45},"[0-9]",[28,76309,516],{"class":38},[28,76311,794],{"class":320},[28,76313,768],{"class":34},[28,76315,75320],{"class":2040},[28,76317,221],{"class":34},[28,76319,76320],{"class":320},"'0'",[28,76322,75384],{"class":34},[28,76324,75331],{"class":105},[28,76326,76327,76329,76331,76333,76335,76337,76340,76342,76344,76346,76348,76350,76352,76354],{"class":30,"line":9947},[28,76328,73828],{"class":34},[28,76330,58322],{"class":2040},[28,76332,221],{"class":34},[28,76334,794],{"class":320},[28,76336,1170],{"class":38},[28,76338,76339],{"class":45},"[a-zA-Z0-9]",[28,76341,516],{"class":38},[28,76343,794],{"class":320},[28,76345,768],{"class":34},[28,76347,75320],{"class":2040},[28,76349,221],{"class":34},[28,76351,76225],{"class":320},[28,76353,75328],{"class":34},[28,76355,75331],{"class":105},[28,76357,76358,76360,76362],{"class":30,"line":9974},[28,76359,52492],{"class":34},[28,76361,51888],{"class":51375},[28,76363,51382],{"class":34},[28,76365,76366,76368,76370],{"class":30,"line":9983},[28,76367,51860],{"class":34},[28,76369,51875],{"class":51375},[28,76371,51382],{"class":34},[28,76373,76374],{"class":30,"line":9989},[28,76375,2477],{"emptyLinePlaceholder":144},[28,76377,76378,76380,76382],{"class":30,"line":9997},[28,76379,51860],{"class":34},[28,76381,50710],{"class":51375},[28,76383,51382],{"class":34},[22075,76385,76387],{"id":76386},"_3624-修饰符","3.6.2.4 修饰符",[14,76389,76390],{},[1539,76391],{"alt":23,"src":76392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76394,76395],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76397,76398],{},[1539,76399],{"alt":23,"src":76400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[18,76402,76404],{"className":50708,"code":76403,"language":50710,"meta":23,"style":23},"\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",[25,76405,76406,76416,76430,76438,76452,76472,76484,76492,76500,76508,76540,76571,76576,76608,76619,76652,76661,76669,76677],{"__ignoreMap":23},[28,76407,76408,76410,76412,76414],{"class":30,"line":31},[28,76409,51372],{"class":34},[28,76411,51376],{"class":51375},[28,76413,51379],{"class":2040},[28,76415,51382],{"class":34},[28,76417,76418,76420,76422,76424,76426,76428],{"class":30,"line":94},[28,76419,99],{"class":34},[28,76421,50710],{"class":51375},[28,76423,51391],{"class":2040},[28,76425,39],{"class":34},[28,76427,51396],{"class":320},[28,76429,51382],{"class":34},[28,76431,76432,76434,76436],{"class":30,"line":109},[28,76433,99],{"class":34},[28,76435,51409],{"class":51375},[28,76437,51382],{"class":34},[28,76439,76440,76442,76444,76446,76448,76450],{"class":30,"line":125},[28,76441,52219],{"class":34},[28,76443,51419],{"class":51375},[28,76445,51422],{"class":2040},[28,76447,39],{"class":34},[28,76449,51427],{"class":320},[28,76451,51382],{"class":34},[28,76453,76454,76456,76458,76460,76462,76464,76466,76468,76470],{"class":30,"line":131},[28,76455,52219],{"class":34},[28,76457,51419],{"class":51375},[28,76459,14997],{"class":2040},[28,76461,39],{"class":34},[28,76463,51466],{"class":320},[28,76465,51446],{"class":2040},[28,76467,39],{"class":34},[28,76469,51473],{"class":320},[28,76471,51382],{"class":34},[28,76473,76474,76476,76478,76480,76482],{"class":30,"line":1291},[28,76475,52219],{"class":34},[28,76477,51482],{"class":51375},[28,76479,51485],{"class":34},[28,76481,51482],{"class":51375},[28,76483,51382],{"class":34},[28,76485,76486,76488,76490],{"class":30,"line":1297},[28,76487,51860],{"class":34},[28,76489,51409],{"class":51375},[28,76491,51382],{"class":34},[28,76493,76494,76496,76498],{"class":30,"line":1388},[28,76495,99],{"class":34},[28,76497,51875],{"class":51375},[28,76499,51382],{"class":34},[28,76501,76502,76504,76506],{"class":30,"line":1394},[28,76503,52219],{"class":34},[28,76505,51888],{"class":51375},[28,76507,51382],{"class":34},[28,76509,76510,76512,76514,76516,76518,76520,76523,76525,76527,76529,76531,76533,76536,76538],{"class":30,"line":1406},[28,76511,73828],{"class":34},[28,76513,58322],{"class":2040},[28,76515,221],{"class":34},[28,76517,794],{"class":320},[28,76519,1170],{"class":38},[28,76521,76522],{"class":48053},"java",[28,76524,516],{"class":38},[28,76526,794],{"class":320},[28,76528,768],{"class":34},[28,76530,75320],{"class":2040},[28,76532,221],{"class":34},[28,76534,76535],{"class":320},"'java'",[28,76537,75830],{"class":34},[28,76539,75331],{"class":105},[28,76541,76542,76544,76546,76548,76550,76552,76554,76556,76558,76560,76562,76564,76567,76569],{"class":30,"line":1689},[28,76543,73828],{"class":34},[28,76545,58322],{"class":2040},[28,76547,221],{"class":34},[28,76549,794],{"class":320},[28,76551,1170],{"class":38},[28,76553,76522],{"class":48053},[28,76555,516],{"class":38},[28,76557,794],{"class":320},[28,76559,768],{"class":34},[28,76561,75320],{"class":2040},[28,76563,221],{"class":34},[28,76565,76566],{"class":320},"'Java'",[28,76568,75830],{"class":34},[28,76570,75454],{"class":105},[28,76572,76573],{"class":30,"line":1694},[28,76574,76575],{"class":105},"    \u002F\u002F 不区分大小写、\n",[28,76577,76578,76580,76582,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76606],{"class":30,"line":1700},[28,76579,73828],{"class":34},[28,76581,58322],{"class":2040},[28,76583,221],{"class":34},[28,76585,794],{"class":320},[28,76587,1170],{"class":38},[28,76589,76522],{"class":48053},[28,76591,516],{"class":38},[28,76593,794],{"class":320},[28,76595,654],{"class":38},[28,76597,768],{"class":34},[28,76599,75320],{"class":2040},[28,76601,221],{"class":34},[28,76603,76566],{"class":320},[28,76605,75830],{"class":34},[28,76607,75331],{"class":105},[28,76609,76610,76612,76614,76616],{"class":30,"line":1705},[28,76611,11298],{"class":38},[28,76613,73994],{"class":45},[28,76615,13641],{"class":38},[28,76617,76618],{"class":320}," 'java是一门编程语言，学完java工资很高'\n",[28,76620,76621,76623,76626,76628,76631,76634,76636,76638,76640,76642,76645,76647,76650],{"class":30,"line":1719},[28,76622,11298],{"class":38},[28,76624,76625],{"class":45}," result",[28,76627,13641],{"class":38},[28,76629,76630],{"class":34}," str.",[28,76632,76633],{"class":2040},"replace",[28,76635,221],{"class":34},[28,76637,794],{"class":320},[28,76639,76522],{"class":48053},[28,76641,794],{"class":320},[28,76643,76644],{"class":38},"ig",[28,76646,12512],{"class":34},[28,76648,76649],{"class":320},"'前端'",[28,76651,227],{"class":34},[28,76653,76654,76656,76658],{"class":30,"line":1724},[28,76655,73828],{"class":34},[28,76657,58322],{"class":2040},[28,76659,76660],{"class":34},"(result)\n",[28,76662,76663,76665,76667],{"class":30,"line":1730},[28,76664,52492],{"class":34},[28,76666,51888],{"class":51375},[28,76668,51382],{"class":34},[28,76670,76671,76673,76675],{"class":30,"line":1751},[28,76672,51860],{"class":34},[28,76674,51875],{"class":51375},[28,76676,51382],{"class":34},[28,76678,76679,76681,76683],{"class":30,"line":1756},[28,76680,51860],{"class":34},[28,76682,50710],{"class":51375},[28,76684,51382],{"class":34},[136,76686,76687],{},"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":23,"searchDepth":94,"depth":94,"links":76689},[76690,76700,76712,76729,76736,76744],{"id":53435,"depth":94,"text":53436,"children":76691},[76692,76693,76694,76695,76696,76697,76698,76699],{"id":53439,"depth":109,"text":53440},{"id":53472,"depth":109,"text":53473},{"id":53511,"depth":109,"text":53512},{"id":53669,"depth":109,"text":53670},{"id":53717,"depth":109,"text":53718},{"id":53854,"depth":109,"text":53855},{"id":54176,"depth":109,"text":54177},{"id":57164,"depth":109,"text":57165},{"id":57192,"depth":94,"text":57193,"children":76701},[76702,76703,76704,76705,76706,76707,76708,76709,76710,76711],{"id":57196,"depth":109,"text":57197},{"id":57219,"depth":109,"text":57220},{"id":58134,"depth":109,"text":58135},{"id":58824,"depth":109,"text":58825},{"id":59106,"depth":109,"text":59107},{"id":63267,"depth":109,"text":63268},{"id":63437,"depth":109,"text":63438},{"id":63565,"depth":109,"text":63566},{"id":63590,"depth":109,"text":63591},{"id":64979,"depth":109,"text":64980},{"id":66132,"depth":94,"text":66133,"children":76713},[76714,76715,76716,76717,76718,76719,76720,76721,76722,76723,76724,76725,76726,76727,76728],{"id":66136,"depth":109,"text":66137},{"id":66790,"depth":109,"text":66791},{"id":68485,"depth":109,"text":68486},{"id":68526,"depth":109,"text":68527},{"id":68568,"depth":109,"text":68569},{"id":68582,"depth":109,"text":68583},{"id":68631,"depth":109,"text":68632},{"id":68643,"depth":109,"text":68644},{"id":68658,"depth":109,"text":68659},{"id":68694,"depth":109,"text":68695},{"id":68775,"depth":109,"text":68776},{"id":68903,"depth":109,"text":68904},{"id":68915,"depth":109,"text":68916},{"id":68934,"depth":109,"text":68935},{"id":71045,"depth":109,"text":71046},{"id":71064,"depth":94,"text":71065,"children":76730},[76731,76732,76733,76734,76735],{"id":71085,"depth":109,"text":71086},{"id":71105,"depth":109,"text":71106},{"id":71154,"depth":109,"text":71155},{"id":71279,"depth":109,"text":71280},{"id":71460,"depth":109,"text":71461},{"id":71478,"depth":94,"text":71479,"children":76737},[76738,76739,76740,76741,76742,76743],{"id":71493,"depth":109,"text":71494},{"id":71552,"depth":109,"text":71553},{"id":71576,"depth":109,"text":71577},{"id":71896,"depth":109,"text":71897},{"id":71928,"depth":109,"text":71929},{"id":71951,"depth":109,"text":71952},{"id":75019,"depth":94,"text":75020,"children":76745},[76746,76747],{"id":75053,"depth":109,"text":75054},{"id":75092,"depth":109,"text":75093},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53407,"description":141},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76754,"title":76755,"body":76756,"description":141,"extension":142,"meta":92893,"navigation":144,"path":92894,"seo":92895,"stem":92896,"__hash__":92897},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76757,"toc":92829},[76758,76761,76764,76768,76772,76777,76782,76793,76797,76802,76805,76809,76812,76817,76821,76825,76828,76833,76836,76840,76843,76851,76854,76858,76863,76868,76871,76875,76880,76885,76888,76892,76897,76900,76905,76908,76913,76916,76921,76926,76929,76932,76936,76941,76946,76949,76953,76957,76960,76963,76966,76970,76974,76979,76984,76987,76991,76996,77001,77004,77007,77010,77013,77016,77019,77022,77025,77028,77033,77037,77042,77047,77050,77053,77056,77059,77062,77065,77068,77071,77075,77079,77082,77085,77088,77093,77095,77098,77101,77104,77107,77110,77113,77116,77119,77122,77125,77128,77131,77134,77139,77144,77149,77152,77156,77159,77164,77168,77170,77181,77186,77287,77290,77293,77296,77299,77302,77305,77308,77311,77313,77316,77319,77322,77325,77328,77330,77333,77336,77339,77342,77345,77348,77350,77353,77355,77357,77360,77364,77368,77371,77374,77377,77380,77383,77386,77389,77392,77395,77400,77520,77523,77526,77531,77534,77537,77540,77543,77548,77551,77554,77557,77560,77565,77568,77668,77733,77807,77811,77814,77817,77821,77824,77838,77867,77870,77873,77876,77879,77882,77885,77888,77890,77893,77896,77899,77902,77906,77911,77915,77920,77995,77998,78181,78184,78187,78190,78193,78196,78198,78201,78204,78207,78210,78213,78216,78218,78222,78225,78230,78233,78236,78239,78242,78244,78249,78252,78255,78258,78261,78263,78268,78271,78274,78276,78278,78281,78285,78288,78291,78296,78299,78302,78305,78355,78360,78364,78369,78372,78441,78444,78453,78457,78462,78465,78468,78476,78479,78496,80298,80302,80306,80311,80314,80318,80324,80330,80482,80487,80492,80495,80498,80501,80504,80507,80510,80513,80516,80519,80522,80525,80528,80533,80537,80540,80551,80555,80560,80563,80566,80569,80572,80575,80577,80580,80583,80586,80589,80591,80608,80611,80615,80618,80623,80628,80631,80634,80638,80641,80644,80653,80656,80660,80663,80668,80673,80740,80744,80747,80750,80755,80760,80846,80851,80855,80858,80861,80876,80879,80884,80888,80893,81002,81005,81016,81166,81170,81175,81284,81288,81293,81298,81303,81306,81313,81333,81369,81533,81538,81541,81546,81553,81556,81559,81562,81621,81677,81733,81737,81742,82057,82060,82064,82067,82072,82181,82186,82190,82195,82199,82270,82274,82276,82279,82282,82320,82596,82600,82617,82683,82717,82721,82724,82729,82758,82765,82774,82779,82794,82799,82808,82811,82948,82952,83014,83018,83023,83268,83272,83277,83280,83283,83286,83289,83293,83298,84879,84883,84887,84893,84896,84901,84905,84908,84913,84916,84927,84931,84936,84940,84945,84950,84953,84958,84962,84966,84969,84974,84979,84982,84985,84988,85110,85115,85217,85220,85223,85227,85232,85404,85409,85413,85416,85421,85487,85492,85495,85626,85629,85634,85637,85640,85731,85736,85739,85742,85745,85748,85753,85758,85761,85766,85771,85776,85780,85783,85786,85791,85796,85801,85806,85860,85863,85866,85871,85874,85877,85882,85887,85892,85896,85901,85915,85920,85923,85928,85932,85937,85942,85947,85952,85957,85962,85967,85972,85975,85979,85984,85987,85990,85993,85998,86003,86006,86009,86013,86016,86019,86024,86029,86034,86039,86042,86047,86052,86113,86118,86121,86126,87367,87372,87376,87380,87385,87388,87393,87398,87401,87406,87408,87413,87417,87420,87423,87434,87438,87443,87448,87503,87508,87513,87518,87729,87734,87738,87743,87746,87748,87751,87754,88201,88206,88213,88219,88222,88225,88489,88494,88498,88763,88768,88772,88777,88782,88787,88792,89123,89126,89131,89136,89139,89143,89147,89152,89157,89162,89167,89172,89177,89181,89184,89189,89194,89197,89271,89276,89281,89286,89288,89291,89661,89666,89671,89676,89679,89682,89784,89789,89794,89897,89901,89906,89910,89914,89919,89924,89927,89932,89935,89938,90331,90336,90339,90342,90345,90348,90868,90872,90877,90882,90887,90890,90895,90898,90901,91283,91288,91290,91292,91295,91298,91810,91814,91875,91878,91881,91884,91888,91891,91896,91901,92826],[10,76759,76755],{"id":76760},"_4js进阶",[14,76762,76763],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[159,76765,76767],{"id":76766},"_41-作用域","4.1 作用域",[188,76769,76771],{"id":76770},"_411-局部作用域","4.1.1 局部作用域",[14,76773,76774],{},[1539,76775],{"alt":23,"src":76776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76778,76779],{},[1539,76780],{"alt":23,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1211,76783,76784,76787,76790],{},[174,76785,76786],{},"函数作用域在函数内部",[174,76788,76789],{},"块级作用域在{}",[174,76791,76792],{},"对象的那个{}不是作用域，不是块作用域",[188,76794,76796],{"id":76795},"_412-全局作用域","4.1.2 全局作用域",[14,76798,76799],{},[1539,76800],{"alt":23,"src":76801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76803,76804],{},"window.a=10不要这样写",[188,76806,76808],{"id":76807},"_413-作用域链","4.1.3 作用域链",[14,76810,76811],{},"变量查找机制",[14,76813,76814],{},[1539,76815],{"alt":23,"src":76816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[159,76818,76820],{"id":76819},"_42-垃圾回收机制","4.2 垃圾回收机制",[188,76822,76824],{"id":76823},"_421-大体介绍","4.2.1 大体介绍",[14,76826,76827],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76829,76830],{},[1539,76831],{"alt":23,"src":76832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76834,76835],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[188,76837,76839],{"id":76838},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76841,76842],{},"堆栈空间分配区别：",[171,76844,76845,76848],{},[174,76846,76847],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[174,76849,76850],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76852,76853],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22075,76855,76857],{"id":76856},"_4221-引用计数","4.2.2.1 引用计数",[14,76859,76860],{},[1539,76861],{"alt":23,"src":76862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76864,76865],{},[1539,76866],{"alt":23,"src":76867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76869,76870],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22075,76872,76874],{"id":76873},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76876,76877],{},[1539,76878],{"alt":23,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76881,76882],{},[1539,76883],{"alt":23,"src":76884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76886,76887],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[159,76889,76891],{"id":76890},"_43-闭包","4.3 闭包",[14,76893,76894],{},[1539,76895],{"alt":23,"src":76896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76898,76899],{},"闭包：内层函数+外层函数的变量",[14,76901,76902],{},[1539,76903],{"alt":23,"src":76904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76906,76907],{},"closure就是闭包",[14,76909,76910],{},[1539,76911],{"alt":23,"src":76912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76914,76915],{},"内层函数必须包含外层函数的变量才是闭包",[14,76917,76918],{},[1539,76919],{"alt":23,"src":76920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76922,76923],{},[1539,76924],{"alt":23,"src":76925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76927,76928],{},"闭包可能会引起内存泄漏",[14,76930,76931],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[159,76933,76935],{"id":76934},"_44-变量提升","4.4 变量提升",[14,76937,76938],{},[1539,76939],{"alt":23,"src":76940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76942,76943],{},[1539,76944],{"alt":23,"src":76945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76947,76948],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[159,76950,76952],{"id":76951},"_45-函数进阶","4.5 函数进阶",[188,76954,76956],{"id":76955},"_451-函数提升","4.5.1 函数提升",[14,76958,76959],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76961,76962],{},"只提升函数声明，不提升函数调用",[51888,76964,76965],{},"\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",[188,76967,76969],{"id":76968},"_452-函数参数","4.5.2 函数参数",[22075,76971,76973],{"id":76972},"_4521-动态参数","4.5.2.1 动态参数",[14,76975,76976],{},[1539,76977],{"alt":23,"src":76978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76980,76981],{},[1539,76982],{"alt":23,"src":76983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76985,76986],{},"箭头函数里边没有arguments",[22075,76988,76990],{"id":76989},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76992,76993],{},[1539,76994],{"alt":23,"src":76995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76997,76998],{},[1539,76999],{"alt":23,"src":77000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77002,77003],{},"剩余参数使用的时候不需要写...",[14,77005,77006],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77008,77009],{},"  function getSum(a,b,...arr) {",[14,77011,77012],{},"  console.log(11)",[14,77014,77015],{},"  }",[14,77017,77018],{},"  getSum(1,2,3,4)",[14,77020,77021],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77023,77024],{},"  getSum(1,2)",[14,77026,77027],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77029,77030],{},[1539,77031],{"alt":23,"src":77032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22075,77034,77036],{"id":77035},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77038,77039],{},[1539,77040],{"alt":23,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77043,77044],{},[1539,77045],{"alt":23,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77048,77049],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77051,77052],{},"展开运算符可以用于数组之间的合并：",[14,77054,77055],{},"const arr1 = [1, 2, 3]",[14,77057,77058],{},"const arr2 = [3, 4, 5]",[14,77060,77061],{},"const arr = [...arr1, ...arr2]",[14,77063,77064],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77066,77067],{},"剩余参数：函数参数使用，得到真数组",[14,77069,77070],{},"展开运算符：数组中使用，数组展开",[188,77072,77074],{"id":77073},"_453-箭头函数","4.5.3 箭头函数",[22075,77076,77078],{"id":77077},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77080,77081],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77083,77084],{},"它不是万能的！！！",[14,77086,77087],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77089,77090],{},[1539,77091],{"alt":23,"src":77092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77094,250],{},[14,77096,77097],{},"① 只有一个形参的时候，可以省略小括号：",[14,77099,77100],{},"const fn=x=>{console.log(x)}",[14,77102,77103],{},"② 只有一行代码时可以省略大括号：",[14,77105,77106],{},"const fn=x=>console.log(11)",[14,77108,77109],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77111,77112],{},"const fn=x=>x+x",[14,77114,77115],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77117,77118],{},"⑤ 阻止表单默认提交：",[14,77120,77121],{},"const form = document.querySelector('form')",[14,77123,77124],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77126,77127],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77129,77130],{},"const fn=uname=>({uname:uname})",[14,77132,77133],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77135,77136],{},[1539,77137],{"alt":23,"src":77138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77140,77141],{},[1539,77142],{"alt":23,"src":77143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77145,77146],{},[1539,77147],{"alt":23,"src":77148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77150,77151],{},"一定不要忘记用()，有()就理解为自带return",[22075,77153,77155],{"id":77154},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77157,77158],{},"箭头函数是没有动态参数的arguments",[14,77160,77161],{},[1539,77162],{"alt":23,"src":77163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22075,77165,77167],{"id":77166},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77169,11409],{},[171,77171,77172,77175,77178],{},[174,77173,77174],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[174,77176,77177],{},"事件回调函数使用箭头函数时，this 为全局的 window",[174,77179,77180],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77182,77183],{},[1539,77184],{"alt":23,"src":77185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[18,77187,77189],{"className":53142,"code":77188,"language":53144,"meta":23,"style":23},"  \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",[25,77190,77191,77199,77204,77209,77214,77219,77224,77228,77233,77237,77241,77246,77251,77256,77260,77264,77269,77274,77279],{"__ignoreMap":23},[28,77192,77193,77195,77197],{"class":30,"line":31},[28,77194,52219],{"class":34},[28,77196,51888],{"class":51375},[28,77198,51382],{"class":34},[28,77200,77201],{"class":30,"line":94},[28,77202,77203],{"class":34},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[28,77205,77206],{"class":30,"line":109},[28,77207,77208],{"class":34},"    console.log(this) \u002F\u002F指向window\n",[28,77210,77211],{"class":30,"line":125},[28,77212,77213],{"class":34},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[28,77215,77216],{"class":30,"line":131},[28,77217,77218],{"class":34},"    function fn() {\n",[28,77220,77221],{"class":30,"line":1291},[28,77222,77223],{"class":34},"      console.log(this)  \u002F\u002F指向window\n",[28,77225,77226],{"class":30,"line":1297},[28,77227,2264],{"class":34},[28,77229,77230],{"class":30,"line":1388},[28,77231,77232],{"class":34},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[28,77234,77235],{"class":30,"line":1394},[28,77236,2477],{"emptyLinePlaceholder":144},[28,77238,77239],{"class":30,"line":1406},[28,77240,71598],{"class":34},[28,77242,77243],{"class":30,"line":1689},[28,77244,77245],{"class":34},"      name: 'andy',\n",[28,77247,77248],{"class":30,"line":1694},[28,77249,77250],{"class":34},"      sayHai: function () {\n",[28,77252,77253],{"class":30,"line":1700},[28,77254,77255],{"class":34},"        console.log(this)\n",[28,77257,77258],{"class":30,"line":1705},[28,77259,52473],{"class":34},[28,77261,77262],{"class":30,"line":1719},[28,77263,2264],{"class":34},[28,77265,77266],{"class":30,"line":1724},[28,77267,77268],{"class":34},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[28,77270,77271],{"class":30,"line":1730},[28,77272,77273],{"class":34},"    \u002F\u002F 2.箭头函数的this\n",[28,77275,77276],{"class":30,"line":1751},[28,77277,77278],{"class":34},"    const fn = () => console.log(this)\n",[28,77280,77281,77283,77285],{"class":30,"line":1756},[28,77282,52492],{"class":34},[28,77284,51888],{"class":51375},[28,77286,51382],{"class":34},[14,77288,77289],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77291,77292],{},"const fn = () => console.log(this)",[14,77294,77295],{},"fn() \u002F\u002F指向window",[14,77297,77298],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77300,77301],{},"①",[14,77303,77304],{},"const obj = {",[14,77306,77307],{},"uname: 'pink老师',",[14,77309,77310],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77312,1150],{},[14,77314,77315],{},"调用对象里边的函数",[14,77317,77318],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77320,77321],{},"obj.sayHai()",[14,77323,77324],{},"②",[14,77326,77327],{},"const obj1 = {",[14,77329,77307],{},[14,77331,77332],{},"sayHai: function () {",[14,77334,77335],{},"let i = 10",[14,77337,77338],{},"const count = () => {",[14,77340,77341],{},"console.log(this)",[14,77343,77344],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77346,77347],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77349,1150],{},[14,77351,77352],{},"count()",[14,77354,1150],{},[14,77356,1150],{},[14,77358,77359],{},"obj1.sayHai()",[159,77361,77363],{"id":77362},"_46-解构赋值","4.6 解构赋值",[188,77365,77367],{"id":77366},"_461-数组解构","4.6.1 数组解构",[14,77369,77370],{},"以前要是使用数组中的值的话：",[14,77372,77373],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77375,77376],{},"const arr=[100,60,80]",[14,77378,77379],{},"const max=arr[0]",[14,77381,77382],{},"const min=arr[1]",[14,77384,77385],{},"const avg=arr[2]",[14,77387,77388],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77390,77391],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77393,77394],{},"这个写法就类似于上边的那种用很多const的方法",[14,77396,77397],{},[1539,77398],{"alt":23,"src":77399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[18,77401,77403],{"className":50708,"code":77402,"language":50710,"meta":23,"style":23},"①变量之间交换值:\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",[25,77404,77405,77410,77415,77420,77425,77430,77434,77438,77443,77447,77452,77457,77461,77466,77471,77482,77492,77497,77502,77507,77511,77515],{"__ignoreMap":23},[28,77406,77407],{"class":30,"line":31},[28,77408,77409],{"class":34},"①变量之间交换值:\n",[28,77411,77412],{"class":30,"line":94},[28,77413,77414],{"class":34},"let a=1\n",[28,77416,77417],{"class":30,"line":109},[28,77418,77419],{"class":34},"let b=2;\n",[28,77421,77422],{"class":30,"line":125},[28,77423,77424],{"class":34},"必须加这行代码，不然就会报错\n",[28,77426,77427],{"class":30,"line":131},[28,77428,77429],{"class":34},"[b,a]=[a,b]\n",[28,77431,77432],{"class":30,"line":1291},[28,77433,2477],{"emptyLinePlaceholder":144},[28,77435,77436],{"class":30,"line":1297},[28,77437,2477],{"emptyLinePlaceholder":144},[28,77439,77440],{"class":30,"line":1388},[28,77441,77442],{"class":34},"可以写成下面的方式：\n",[28,77444,77445],{"class":30,"line":1394},[28,77446,77414],{"class":34},[28,77448,77449],{"class":30,"line":1406},[28,77450,77451],{"class":34},"let b=2\n",[28,77453,77454],{"class":30,"line":1689},[28,77455,77456],{"class":34},";[b,a]=[a,b]\n",[28,77458,77459],{"class":30,"line":1694},[28,77460,2477],{"emptyLinePlaceholder":144},[28,77462,77463],{"class":30,"line":1700},[28,77464,77465],{"class":34},"②排序\n",[28,77467,77468],{"class":30,"line":1705},[28,77469,77470],{"class":34},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[28,77472,77473,77476,77479],{"class":30,"line":1719},[28,77474,77475],{"class":34},"for (let i = 0; i ",[28,77477,99],{"class":77478},"s7hpK",[28,77480,77481],{"class":34}," arr1.length; i++) {\n",[28,77483,77484,77487,77489],{"class":30,"line":1724},[28,77485,77486],{"class":34},"   for (let j = 0; j ",[28,77488,99],{"class":77478},[28,77490,77491],{"class":34}," arr1.length - 1; j++) {\n",[28,77493,77494],{"class":30,"line":1730},[28,77495,77496],{"class":34},"      if (arr1[j] > arr1[j + 1]) {\n",[28,77498,77499],{"class":30,"line":1751},[28,77500,77501],{"class":34},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[28,77503,77504],{"class":30,"line":1756},[28,77505,77506],{"class":34},"       }\n",[28,77508,77509],{"class":30,"line":1770},[28,77510,4386],{"class":34},[28,77512,77513],{"class":30,"line":1775},[28,77514,1642],{"class":34},[28,77516,77517],{"class":30,"line":1804},[28,77518,77519],{"class":34},"console.log(arr1)\n",[14,77521,77522],{},"数组解构的细节：",[14,77524,77525],{},"①变量多，单元值少",[14,77527,77528],{},[1539,77529],{"alt":23,"src":77530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77532,77533],{},"防止出现undefined的方法：",[14,77535,77536],{},"const [a=0,b=0] =[1]",[14,77538,77539],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77541,77542],{},"②变量少，单元值多",[14,77544,77545],{},[1539,77546],{"alt":23,"src":77547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77549,77550],{},"此时可以使用剩余参数来接收多余的值",[14,77552,77553],{},"const [a,b,...c]=[1,2,3,4]",[14,77555,77556],{},"console.log(c) 输出[3,4]",[14,77558,77559],{},"③可以按需导入，忽略某些返回值",[14,77561,77562],{},[1539,77563],{"alt":23,"src":77564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77566,77567],{},"④支持多维数组的结构",[18,77569,77573],{"className":77570,"code":77571,"language":77572,"meta":23,"style":23},"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",[25,77574,77575,77603,77619,77634,77649],{"__ignoreMap":23},[28,77576,77577,77579,77581,77583,77585,77587,77589,77591,77594,77596,77598,77600],{"class":30,"line":31},[28,77578,6869],{"class":38},[28,77580,51908],{"class":34},[28,77582,39],{"class":38},[28,77584,52301],{"class":34},[28,77586,46],{"class":45},[28,77588,12512],{"class":34},[28,77590,52],{"class":45},[28,77592,77593],{"class":34},", [",[28,77595,57],{"class":45},[28,77597,12512],{"class":34},[28,77599,507],{"class":45},[28,77601,77602],{"class":34},"]]\n",[28,77604,77605,77608,77610,77612,77614,77616],{"class":30,"line":94},[28,77606,77607],{"class":34},"console.",[28,77609,58322],{"class":2040},[28,77611,3928],{"class":34},[28,77613,407],{"class":45},[28,77615,4293],{"class":34},[28,77617,77618],{"class":105},"  \u002F\u002F1\n",[28,77620,77621,77623,77625,77627,77629,77631],{"class":30,"line":109},[28,77622,77607],{"class":34},[28,77624,58322],{"class":2040},[28,77626,3928],{"class":34},[28,77628,46],{"class":45},[28,77630,4293],{"class":34},[28,77632,77633],{"class":105},"  \u002F\u002F2\n",[28,77635,77636,77638,77640,77642,77644,77646],{"class":30,"line":125},[28,77637,77607],{"class":34},[28,77639,58322],{"class":2040},[28,77641,3928],{"class":34},[28,77643,52],{"class":45},[28,77645,4293],{"class":34},[28,77647,77648],{"class":105},"  \u002F\u002F[3,4]\n",[28,77650,77651,77653,77655,77657,77659,77661,77663,77665],{"class":30,"line":131},[28,77652,77607],{"class":34},[28,77654,58322],{"class":2040},[28,77656,3928],{"class":34},[28,77658,52],{"class":45},[28,77660,4978],{"class":34},[28,77662,407],{"class":45},[28,77664,4293],{"class":34},[28,77666,77667],{"class":105},"  \u002F\u002F3\n",[18,77669,77671],{"className":77570,"code":77670,"language":77572,"meta":23,"style":23},"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",[25,77672,77673,77700,77711,77722],{"__ignoreMap":23},[28,77674,77675,77677,77680,77682,77684,77686,77688,77690,77692,77694,77696,77698],{"class":30,"line":31},[28,77676,6869],{"class":38},[28,77678,77679],{"class":34}," [a, b, c] ",[28,77681,39],{"class":38},[28,77683,52301],{"class":34},[28,77685,46],{"class":45},[28,77687,12512],{"class":34},[28,77689,52],{"class":45},[28,77691,77593],{"class":34},[28,77693,57],{"class":45},[28,77695,12512],{"class":34},[28,77697,507],{"class":45},[28,77699,77602],{"class":34},[28,77701,77702,77704,77706,77709],{"class":30,"line":94},[28,77703,77607],{"class":34},[28,77705,58322],{"class":2040},[28,77707,77708],{"class":34},"(a)",[28,77710,77618],{"class":105},[28,77712,77713,77715,77717,77720],{"class":30,"line":109},[28,77714,77607],{"class":34},[28,77716,58322],{"class":2040},[28,77718,77719],{"class":34},"(b)",[28,77721,77633],{"class":105},[28,77723,77724,77726,77728,77731],{"class":30,"line":125},[28,77725,77607],{"class":34},[28,77727,58322],{"class":2040},[28,77729,77730],{"class":34},"(c)",[28,77732,77648],{"class":105},[18,77734,77736],{"className":77570,"code":77735,"language":77572,"meta":23,"style":23},"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",[25,77737,77738,77765,77775,77785,77795],{"__ignoreMap":23},[28,77739,77740,77742,77745,77747,77749,77751,77753,77755,77757,77759,77761,77763],{"class":30,"line":31},[28,77741,6869],{"class":38},[28,77743,77744],{"class":34}," [a, b, [c, d]] ",[28,77746,39],{"class":38},[28,77748,52301],{"class":34},[28,77750,46],{"class":45},[28,77752,12512],{"class":34},[28,77754,52],{"class":45},[28,77756,77593],{"class":34},[28,77758,57],{"class":45},[28,77760,12512],{"class":34},[28,77762,507],{"class":45},[28,77764,77602],{"class":34},[28,77766,77767,77769,77771,77773],{"class":30,"line":94},[28,77768,77607],{"class":34},[28,77770,58322],{"class":2040},[28,77772,77708],{"class":34},[28,77774,77618],{"class":105},[28,77776,77777,77779,77781,77783],{"class":30,"line":109},[28,77778,77607],{"class":34},[28,77780,58322],{"class":2040},[28,77782,77719],{"class":34},[28,77784,77633],{"class":105},[28,77786,77787,77789,77791,77793],{"class":30,"line":125},[28,77788,77607],{"class":34},[28,77790,58322],{"class":2040},[28,77792,77730],{"class":34},[28,77794,77667],{"class":105},[28,77796,77797,77799,77801,77804],{"class":30,"line":131},[28,77798,77607],{"class":34},[28,77800,58322],{"class":2040},[28,77802,77803],{"class":34},"(d)",[28,77805,77806],{"class":105},"  \u002F\u002F4\n",[188,77808,77810],{"id":77809},"_462-对象解构","4.6.2 对象解构",[14,77812,77813],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77815,77816],{},"用的非常非常多！！！！！！",[22075,77818,77820],{"id":77819},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77822,77823],{},"基本语法：",[171,77825,77826,77829,77832,77835],{},[174,77827,77828],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[174,77830,77831],{},"对象属性的值将被赋值给与属性名相同的变量",[174,77833,77834],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[174,77836,77837],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[18,77839,77841],{"className":50708,"code":77840,"language":50710,"meta":23,"style":23},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[25,77842,77843,77848,77853,77858,77862],{"__ignoreMap":23},[28,77844,77845],{"class":30,"line":31},[28,77846,77847],{"class":34},"const obj = {\n",[28,77849,77850],{"class":30,"line":94},[28,77851,77852],{"class":34},"   uname: 'pink老师',\n",[28,77854,77855],{"class":30,"line":109},[28,77856,77857],{"class":34},"   age: 18,\n",[28,77859,77860],{"class":30,"line":125},[28,77861,1642],{"class":34},[28,77863,77864],{"class":30,"line":131},[28,77865,77866],{"class":34},"const { uname, age } = obj\n",[14,77868,77869],{},"上方代码这样写等价于：",[14,77871,77872],{},"const uname等价于obj.uname",[14,77874,77875],{},"变量名可以重新改名：",[14,77877,77878],{},"const uname='red老师'",[14,77880,77881],{},"const user={",[14,77883,77884],{},"  uname:'pink老师',",[14,77886,77887],{},"  age:18",[14,77889,1150],{},[14,77891,77892],{},"const {uname,age}=user",[14,77894,77895],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77897,77898],{},"const {旧变量名：新变量名}=对象",[14,77900,77901],{},"const {uname:username,age}=user",[22075,77903,77905],{"id":77904},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77907,77908],{},[1539,77909],{"alt":23,"src":77910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22075,77912,77914],{"id":77913},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77916,77917],{},[1539,77918],{"alt":23,"src":77919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[18,77921,77923],{"className":53142,"code":77922,"language":53144,"meta":23,"style":23},"  \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",[25,77924,77925,77933,77938,77943,77948,77953,77958,77963,77968,77973,77977,77982,77987],{"__ignoreMap":23},[28,77926,77927,77929,77931],{"class":30,"line":31},[28,77928,52219],{"class":34},[28,77930,51888],{"class":51375},[28,77932,51382],{"class":34},[28,77934,77935],{"class":30,"line":94},[28,77936,77937],{"class":34},"    const pig = {\n",[28,77939,77940],{"class":30,"line":109},[28,77941,77942],{"class":34},"      name: '佩奇',\n",[28,77944,77945],{"class":30,"line":125},[28,77946,77947],{"class":34},"      family: {\n",[28,77949,77950],{"class":30,"line":131},[28,77951,77952],{"class":34},"        mother: '猪妈妈',\n",[28,77954,77955],{"class":30,"line":1291},[28,77956,77957],{"class":34},"        father: '猪爸爸',\n",[28,77959,77960],{"class":30,"line":1297},[28,77961,77962],{"class":34},"        sister: '乔治'\n",[28,77964,77965],{"class":30,"line":1388},[28,77966,77967],{"class":34},"      },\n",[28,77969,77970],{"class":30,"line":1394},[28,77971,77972],{"class":34},"      age: 6\n",[28,77974,77975],{"class":30,"line":1406},[28,77976,2264],{"class":34},[28,77978,77979],{"class":30,"line":1689},[28,77980,77981],{"class":34},"    \u002F\u002F 多级对象解构\n",[28,77983,77984],{"class":30,"line":1694},[28,77985,77986],{"class":34},"    const { name, family: { mother, father, sister }, age } = pig\n",[28,77988,77989,77991,77993],{"class":30,"line":1700},[28,77990,52492],{"class":34},[28,77992,51888],{"class":51375},[28,77994,51382],{"class":34},[14,77996,77997],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[18,77999,78002],{"className":78000,"code":78001,"language":76522,"meta":23,"style":23},"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",[25,78003,78004,78009,78020,78032,78044,78053,78057,78068,78080,78090,78095,78099,78109,78120,78129,78133,78137,78148,78159,78168,78172,78177],{"__ignoreMap":23},[28,78005,78006],{"class":30,"line":31},[28,78007,78008],{"class":105},"    \u002F\u002F 这是后台传递过来的数据\n",[28,78010,78011,78013,78016,78018],{"class":30,"line":94},[28,78012,11298],{"class":38},[28,78014,78015],{"class":34}," msg ",[28,78017,39],{"class":38},[28,78019,15649],{"class":34},[28,78021,78022,78025,78027,78030],{"class":30,"line":109},[28,78023,78024],{"class":320},"      \"code\"",[28,78026,1065],{"class":38},[28,78028,78029],{"class":45}," 200",[28,78031,31542],{"class":34},[28,78033,78034,78037,78039,78042],{"class":30,"line":125},[28,78035,78036],{"class":320},"      \"msg\"",[28,78038,1065],{"class":38},[28,78040,78041],{"class":320}," \"获取新闻列表成功\"",[28,78043,31542],{"class":34},[28,78045,78046,78049,78051],{"class":30,"line":131},[28,78047,78048],{"class":320},"      \"data\"",[28,78050,1065],{"class":38},[28,78052,55522],{"class":34},[28,78054,78055],{"class":30,"line":1291},[28,78056,2587],{"class":34},[28,78058,78059,78062,78064,78066],{"class":30,"line":1297},[28,78060,78061],{"class":320},"          \"id\"",[28,78063,1065],{"class":38},[28,78065,25196],{"class":45},[28,78067,31542],{"class":34},[28,78069,78070,78073,78075,78078],{"class":30,"line":1388},[28,78071,78072],{"class":320},"          \"title\"",[28,78074,1065],{"class":38},[28,78076,78077],{"class":320}," \"5G商用自己，三大运用商收入下降\"",[28,78079,31542],{"class":34},[28,78081,78082,78085,78087],{"class":30,"line":1394},[28,78083,78084],{"class":320},"          \"count\"",[28,78086,1065],{"class":38},[28,78088,78089],{"class":45}," 58\n",[28,78091,78092],{"class":30,"line":1406},[28,78093,78094],{"class":34},"        },\n",[28,78096,78097],{"class":30,"line":1689},[28,78098,2587],{"class":34},[28,78100,78101,78103,78105,78107],{"class":30,"line":1694},[28,78102,78061],{"class":320},[28,78104,1065],{"class":38},[28,78106,14832],{"class":45},[28,78108,31542],{"class":34},[28,78110,78111,78113,78115,78118],{"class":30,"line":1700},[28,78112,78072],{"class":320},[28,78114,1065],{"class":38},[28,78116,78117],{"class":320}," \"国际媒体头条速览\"",[28,78119,31542],{"class":34},[28,78121,78122,78124,78126],{"class":30,"line":1705},[28,78123,78084],{"class":320},[28,78125,1065],{"class":38},[28,78127,78128],{"class":45}," 56\n",[28,78130,78131],{"class":30,"line":1719},[28,78132,78094],{"class":34},[28,78134,78135],{"class":30,"line":1724},[28,78136,2587],{"class":34},[28,78138,78139,78141,78143,78146],{"class":30,"line":1730},[28,78140,78061],{"class":320},[28,78142,1065],{"class":38},[28,78144,78145],{"class":45}," 3",[28,78147,31542],{"class":34},[28,78149,78150,78152,78154,78157],{"class":30,"line":1751},[28,78151,78072],{"class":320},[28,78153,1065],{"class":38},[28,78155,78156],{"class":320}," \"乌克兰和俄罗斯持续冲突\"",[28,78158,31542],{"class":34},[28,78160,78161,78163,78165],{"class":30,"line":1756},[28,78162,78084],{"class":320},[28,78164,1065],{"class":38},[28,78166,78167],{"class":45}," 1669\n",[28,78169,78170],{"class":30,"line":1770},[28,78171,78094],{"class":34},[28,78173,78174],{"class":30,"line":1775},[28,78175,78176],{"class":34},"      ]\n",[28,78178,78179],{"class":30,"line":1804},[28,78180,2264],{"class":34},[14,78182,78183],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78185,78186],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78188,78189],{},"\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,78191,78192],{},"function({data}) {",[14,78194,78195],{},"console.log(data)",[14,78197,1150],{},[14,78199,78200],{},"render(msg)",[14,78202,78203],{},"实参传递给形参的时候解构了",[14,78205,78206],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78208,78209],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78211,78212],{},"function render({data:mydata}) {",[14,78214,78215],{},"  console.log(data)",[14,78217,1150],{},[188,78219,78221],{"id":78220},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78223,78224],{},"有两种情况：一个是数组结构，一个是立即执行函数",[171,78226,78227],{},[174,78228,78229],{},"如果对一个数组进行遍历，有两种方式：",[14,78231,78232],{},"①法1",[14,78234,78235],{},"const arr=[1,2,3]",[14,78237,78238],{},"arr.map(function(item,index) {",[14,78240,78241],{},"  console.log(item)",[14,78243,52539],{},[14,78245,78246],{},[1539,78247],{"alt":23,"src":78248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78250,78251],{},"②法2",[14,78253,78254],{},"const str='pink'",[14,78256,78257],{},"[1,2,3].map(function(item,index) {",[14,78259,78260],{},"console.log(item)",[14,78262,52539],{},[14,78264,78265],{},[1539,78266],{"alt":23,"src":78267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78269,78270],{},"此时会报错",[14,78272,78273],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78275,78260],{},[14,78277,52539],{},[14,78279,78280],{},"内部会当成这样处理，所以我们用分号进行隔开",[159,78282,78284],{"id":78283},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78286,78287],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78289,78290],{},"可以理解为加强版的for循环",[14,78292,78293],{},[1539,78294],{"alt":23,"src":78295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78297,78298],{},"里边不写return，不返回数组，只遍历不返回",[14,78300,78301],{},"map是返回数组",[14,78303,78304],{},"forEach主要用于遍历数组对象",[18,78306,78308],{"className":53142,"code":78307,"language":53144,"meta":23,"style":23},"  \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",[25,78309,78310,78318,78323,78328,78333,78338,78342,78347],{"__ignoreMap":23},[28,78311,78312,78314,78316],{"class":30,"line":31},[28,78313,52219],{"class":34},[28,78315,51888],{"class":51375},[28,78317,51382],{"class":34},[28,78319,78320],{"class":30,"line":94},[28,78321,78322],{"class":34},"    const arr = ['red', 'green', 'pink']\n",[28,78324,78325],{"class":30,"line":109},[28,78326,78327],{"class":34},"    const result = arr.forEach(function (item, index) {\n",[28,78329,78330],{"class":30,"line":125},[28,78331,78332],{"class":34},"      console.log(item)\n",[28,78334,78335],{"class":30,"line":131},[28,78336,78337],{"class":34},"      console.log(index)\n",[28,78339,78340],{"class":30,"line":1291},[28,78341,33537],{"class":34},[28,78343,78344],{"class":30,"line":1297},[28,78345,78346],{"class":34},"    console.log(result)\n",[28,78348,78349,78351,78353],{"class":30,"line":1388},[28,78350,52492],{"class":34},[28,78352,51888],{"class":51375},[28,78354,51382],{"class":34},[14,78356,78357],{},[1539,78358],{"alt":23,"src":78359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[159,78361,78363],{"id":78362},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78365,78366],{},[1539,78367],{"alt":23,"src":78368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78370,78371],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[18,78373,78375],{"className":53142,"code":78374,"language":53144,"meta":23,"style":23},"\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",[25,78376,78377,78385,78393,78398,78403,78407,78411,78416,78420,78425,78433],{"__ignoreMap":23},[28,78378,78379,78381,78383],{"class":30,"line":31},[28,78380,99],{"class":34},[28,78382,51875],{"class":51375},[28,78384,51382],{"class":34},[28,78386,78387,78389,78391],{"class":30,"line":94},[28,78388,52219],{"class":34},[28,78390,51888],{"class":51375},[28,78392,51382],{"class":34},[28,78394,78395],{"class":30,"line":109},[28,78396,78397],{"class":34},"    const arr = [10, 20, 30]\n",[28,78399,78400],{"class":30,"line":125},[28,78401,78402],{"class":34},"    const newArr = arr.filter(function (item, index) {\n",[28,78404,78405],{"class":30,"line":131},[28,78406,78332],{"class":34},[28,78408,78409],{"class":30,"line":1291},[28,78410,78337],{"class":34},[28,78412,78413],{"class":30,"line":1297},[28,78414,78415],{"class":34},"      return item >= 20\n",[28,78417,78418],{"class":30,"line":1388},[28,78419,33537],{"class":34},[28,78421,78422],{"class":30,"line":1394},[28,78423,78424],{"class":34},"    console.log(newArr)\n",[28,78426,78427,78429,78431],{"class":30,"line":1406},[28,78428,52492],{"class":34},[28,78430,51888],{"class":51375},[28,78432,51382],{"class":34},[28,78434,78435,78437,78439],{"class":30,"line":1689},[28,78436,51860],{"class":34},[28,78438,51875],{"class":51375},[28,78440,51382],{"class":34},[14,78442,78443],{},"这个也可以写成箭头函数：",[18,78445,78447],{"className":50708,"code":78446,"language":50710,"meta":23,"style":23},"const newArr = arr.filter(item => item >= 20)\n",[25,78448,78449],{"__ignoreMap":23},[28,78450,78451],{"class":30,"line":31},[28,78452,78446],{"class":34},[159,78454,78456],{"id":78455},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78458,78459],{},[1539,78460],{"alt":23,"src":78461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78463,78464],{},"步骤：",[14,78466,78467],{},"①：渲染页面模块",[1211,78469,78470,78473],{},[174,78471,78472],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[174,78474,78475],{},"用forEach+字符串的形式",[14,78477,78478],{},"②：点击不同需求，显示不同页面内容",[1211,78480,78481,78484,78487,78490,78493],{},[174,78482,78483],{},"点击采取事件委托方式 .filter",[174,78485,78486],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[174,78488,78489],{},"筛选条件是根据点击的 data-index 来判断",[174,78491,78492],{},"可以使用对象解构，把事件对象解构",[174,78494,78495],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[18,78497,78499],{"className":50708,"code":78498,"language":50710,"meta":23,"style":23},"\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",[25,78500,78501,78511,78525,78529,78537,78551,78571,78583,78591,78597,78607,78617,78627,78631,78635,78641,78654,78666,78676,78688,78692,78696,78703,78716,78728,78745,78763,78776,78780,78784,78796,78806,78810,78814,78821,78862,78889,78899,78903,78907,78915,78927,78931,78935,78943,78955,78967,78978,78982,78986,78995,79007,79018,79022,79026,79035,79047,79059,79063,79067,79074,79084,79096,79108,79123,79127,79131,79139,79155,79165,79175,79185,79197,79201,79205,79215,79226,79236,79240,79248,79256,79260,79268,79283,79309,79334,79359,79378,79386,79400,79405,79410,79415,79420,79425,79433,79441,79446,79457,79462,79472,79482,79492,79502,79506,79510,79519,79528,79537,79546,79550,79554,79563,79572,79581,79590,79594,79598,79607,79616,79625,79634,79638,79642,79651,79660,79669,79678,79682,79686,79695,79704,79713,79722,79726,79730,79739,79748,79757,79766,79770,79774,79783,79792,79800,79809,79813,79817,79821,79826,79838,79843,79855,79859,79876,79904,79913,79918,79928,79938,79947,79952,79957,79961,79966,79983,79987,79992,80000,80005,80032,80037,80057,80062,80074,80079,80084,80089,80100,80114,80151,80169,80202,80219,80243,80247,80252,80258,80262,80266,80270,80278,80286,80290],{"__ignoreMap":23},[28,78502,78503,78505,78507,78509],{"class":30,"line":31},[28,78504,51372],{"class":34},[28,78506,51376],{"class":51375},[28,78508,51379],{"class":2040},[28,78510,51382],{"class":34},[28,78512,78513,78515,78517,78519,78521,78523],{"class":30,"line":94},[28,78514,99],{"class":34},[28,78516,50710],{"class":51375},[28,78518,51391],{"class":2040},[28,78520,39],{"class":34},[28,78522,51396],{"class":320},[28,78524,51382],{"class":34},[28,78526,78527],{"class":30,"line":109},[28,78528,2477],{"emptyLinePlaceholder":144},[28,78530,78531,78533,78535],{"class":30,"line":125},[28,78532,99],{"class":34},[28,78534,51409],{"class":51375},[28,78536,51382],{"class":34},[28,78538,78539,78541,78543,78545,78547,78549],{"class":30,"line":131},[28,78540,52219],{"class":34},[28,78542,51419],{"class":51375},[28,78544,51422],{"class":2040},[28,78546,39],{"class":34},[28,78548,51427],{"class":320},[28,78550,51382],{"class":34},[28,78552,78553,78555,78557,78559,78561,78563,78565,78567,78569],{"class":30,"line":1291},[28,78554,52219],{"class":34},[28,78556,51419],{"class":51375},[28,78558,14997],{"class":2040},[28,78560,39],{"class":34},[28,78562,51466],{"class":320},[28,78564,51446],{"class":2040},[28,78566,39],{"class":34},[28,78568,51473],{"class":320},[28,78570,51382],{"class":34},[28,78572,78573,78575,78577,78579,78581],{"class":30,"line":1297},[28,78574,52219],{"class":34},[28,78576,51482],{"class":51375},[28,78578,51485],{"class":34},[28,78580,51482],{"class":51375},[28,78582,51382],{"class":34},[28,78584,78585,78587,78589],{"class":30,"line":1388},[28,78586,52219],{"class":34},[28,78588,136],{"class":51375},[28,78590,51382],{"class":34},[28,78592,78593,78595],{"class":30,"line":1394},[28,78594,6480],{"class":51375},[28,78596,15649],{"class":34},[28,78598,78599,78601,78603,78605],{"class":30,"line":1406},[28,78600,54770],{"class":45},[28,78602,51512],{"class":34},[28,78604,407],{"class":45},[28,78606,1367],{"class":34},[28,78608,78609,78611,78613,78615],{"class":30,"line":1689},[28,78610,54781],{"class":45},[28,78612,51512],{"class":34},[28,78614,407],{"class":45},[28,78616,1367],{"class":34},[28,78618,78619,78621,78623,78625],{"class":30,"line":1694},[28,78620,72671],{"class":45},[28,78622,51512],{"class":34},[28,78624,60580],{"class":45},[28,78626,1367],{"class":34},[28,78628,78629],{"class":30,"line":1700},[28,78630,2264],{"class":34},[28,78632,78633],{"class":30,"line":1705},[28,78634,2477],{"emptyLinePlaceholder":144},[28,78636,78637,78639],{"class":30,"line":1719},[28,78638,62198],{"class":2040},[28,78640,15649],{"class":34},[28,78642,78643,78645,78647,78650,78652],{"class":30,"line":1724},[28,78644,54846],{"class":45},[28,78646,51512],{"class":34},[28,78648,78649],{"class":45},"990",[28,78651,51567],{"class":38},[28,78653,1367],{"class":34},[28,78655,78656,78658,78660,78662,78664],{"class":30,"line":1730},[28,78657,54781],{"class":45},[28,78659,51512],{"class":34},[28,78661,407],{"class":45},[28,78663,51631],{"class":45},[28,78665,1367],{"class":34},[28,78667,78668,78670,78672,78674],{"class":30,"line":1751},[28,78669,55084],{"class":45},[28,78671,51512],{"class":34},[28,78673,51552],{"class":45},[28,78675,1367],{"class":34},[28,78677,78678,78681,78683,78686],{"class":30,"line":1756},[28,78679,78680],{"class":45},"      flex-wrap",[28,78682,51512],{"class":34},[28,78684,78685],{"class":45},"wrap",[28,78687,1367],{"class":34},[28,78689,78690],{"class":30,"line":1770},[28,78691,2264],{"class":34},[28,78693,78694],{"class":30,"line":1775},[28,78695,2477],{"emptyLinePlaceholder":144},[28,78697,78698,78701],{"class":30,"line":1804},[28,78699,78700],{"class":2040},"    .item",[28,78702,15649],{"class":34},[28,78704,78705,78707,78709,78712,78714],{"class":30,"line":1809},[28,78706,54846],{"class":45},[28,78708,51512],{"class":34},[28,78710,78711],{"class":45},"240",[28,78713,51567],{"class":38},[28,78715,1367],{"class":34},[28,78717,78718,78720,78722,78724,78726],{"class":30,"line":1826},[28,78719,62075],{"class":45},[28,78721,51512],{"class":34},[28,78723,659],{"class":45},[28,78725,51567],{"class":38},[28,78727,1367],{"class":34},[28,78729,78730,78732,78734,78736,78738,78741,78743],{"class":30,"line":1831},[28,78731,54770],{"class":45},[28,78733,51512],{"class":34},[28,78735,102],{"class":45},[28,78737,51567],{"class":38},[28,78739,78740],{"class":45}," 30",[28,78742,51567],{"class":38},[28,78744,1367],{"class":34},[28,78746,78747,78749,78751,78753,78756,78759,78761],{"class":30,"line":1836},[28,78748,61935],{"class":45},[28,78750,51512],{"class":34},[28,78752,28199],{"class":45},[28,78754,78755],{"class":45}," ease",[28,78757,78758],{"class":45}," .5",[28,78760,905],{"class":38},[28,78762,1367],{"class":34},[28,78764,78765,78768,78770,78772,78774],{"class":30,"line":1841},[28,78766,78767],{"class":45},"      margin-bottom",[28,78769,51512],{"class":34},[28,78771,102],{"class":45},[28,78773,51567],{"class":38},[28,78775,1367],{"class":34},[28,78777,78778],{"class":30,"line":1855},[28,78779,2264],{"class":34},[28,78781,78782],{"class":30,"line":1860},[28,78783,2477],{"emptyLinePlaceholder":144},[28,78785,78786,78789,78791,78794],{"class":30,"line":2654},[28,78787,78788],{"class":2040},"    .item:nth-child",[28,78790,221],{"class":34},[28,78792,78793],{"class":45},"4n",[28,78795,12519],{"class":34},[28,78797,78798,78800,78802,78804],{"class":30,"line":2668},[28,78799,62075],{"class":45},[28,78801,51512],{"class":34},[28,78803,407],{"class":45},[28,78805,1367],{"class":34},[28,78807,78808],{"class":30,"line":2676},[28,78809,2264],{"class":34},[28,78811,78812],{"class":30,"line":2681},[28,78813,2477],{"emptyLinePlaceholder":144},[28,78815,78816,78819],{"class":30,"line":2687},[28,78817,78818],{"class":2040},"    .item:hover",[28,78820,15649],{"class":34},[28,78822,78823,78826,78828,78830,78832,78834,78836,78838,78840,78843,78845,78847,78849,78851,78853,78855,78857,78860],{"class":30,"line":2693},[28,78824,78825],{"class":45},"      box-shadow",[28,78827,51512],{"class":34},[28,78829,407],{"class":45},[28,78831,51567],{"class":38},[28,78833,4170],{"class":45},[28,78835,51567],{"class":38},[28,78837,2225],{"class":45},[28,78839,51567],{"class":38},[28,78841,78842],{"class":45}," rgba",[28,78844,221],{"class":34},[28,78846,407],{"class":45},[28,78848,12512],{"class":34},[28,78850,407],{"class":45},[28,78852,12512],{"class":34},[28,78854,407],{"class":45},[28,78856,12512],{"class":34},[28,78858,78859],{"class":45},".2",[28,78861,2796],{"class":34},[28,78863,78864,78867,78869,78872,78874,78876,78878,78881,78883,78885,78887],{"class":30,"line":2698},[28,78865,78866],{"class":45},"      transform",[28,78868,51512],{"class":34},[28,78870,78871],{"class":45},"translate3d",[28,78873,221],{"class":34},[28,78875,407],{"class":45},[28,78877,12512],{"class":34},[28,78879,78880],{"class":45},"-4",[28,78882,51567],{"class":38},[28,78884,12512],{"class":34},[28,78886,407],{"class":45},[28,78888,2796],{"class":34},[28,78890,78891,78893,78895,78897],{"class":30,"line":8025},[28,78892,62100],{"class":45},[28,78894,51512],{"class":34},[28,78896,62105],{"class":45},[28,78898,1367],{"class":34},[28,78900,78901],{"class":30,"line":8049},[28,78902,2264],{"class":34},[28,78904,78905],{"class":30,"line":8054},[28,78906,2477],{"emptyLinePlaceholder":144},[28,78908,78909,78911,78913],{"class":30,"line":8060},[28,78910,78700],{"class":2040},[28,78912,55690],{"class":51375},[28,78914,15649],{"class":34},[28,78916,78917,78919,78921,78923,78925],{"class":30,"line":8087},[28,78918,54846],{"class":45},[28,78920,51512],{"class":34},[28,78922,525],{"class":45},[28,78924,542],{"class":38},[28,78926,1367],{"class":34},[28,78928,78929],{"class":30,"line":8092},[28,78930,2264],{"class":34},[28,78932,78933],{"class":30,"line":8098},[28,78934,2477],{"emptyLinePlaceholder":144},[28,78936,78937,78939,78941],{"class":30,"line":8110},[28,78938,78700],{"class":2040},[28,78940,62379],{"class":2040},[28,78942,15649],{"class":34},[28,78944,78945,78947,78949,78951,78953],{"class":30,"line":8122},[28,78946,54997],{"class":45},[28,78948,51512],{"class":34},[28,78950,860],{"class":45},[28,78952,51567],{"class":38},[28,78954,1367],{"class":34},[28,78956,78957,78959,78961,78963,78965],{"class":30,"line":8134},[28,78958,78767],{"class":45},[28,78960,51512],{"class":34},[28,78962,659],{"class":45},[28,78964,51567],{"class":38},[28,78966,1367],{"class":34},[28,78968,78969,78971,78973,78976],{"class":30,"line":9793},[28,78970,57491],{"class":45},[28,78972,51512],{"class":34},[28,78974,78975],{"class":45},"#666",[28,78977,1367],{"class":34},[28,78979,78980],{"class":30,"line":9818},[28,78981,2264],{"class":34},[28,78983,78984],{"class":30,"line":9841},[28,78985,2477],{"emptyLinePlaceholder":144},[28,78987,78988,78990,78993],{"class":30,"line":9865},[28,78989,78700],{"class":2040},[28,78991,78992],{"class":2040}," .price",[28,78994,15649],{"class":34},[28,78996,78997,78999,79001,79003,79005],{"class":30,"line":9870},[28,78998,54997],{"class":45},[28,79000,51512],{"class":34},[28,79002,83],{"class":45},[28,79004,51567],{"class":38},[28,79006,1367],{"class":34},[28,79008,79009,79011,79013,79016],{"class":30,"line":9875},[28,79010,57491],{"class":45},[28,79012,51512],{"class":34},[28,79014,79015],{"class":45},"firebrick",[28,79017,1367],{"class":34},[28,79019,79020],{"class":30,"line":9880},[28,79021,2264],{"class":34},[28,79023,79024],{"class":30,"line":9889},[28,79025,2477],{"emptyLinePlaceholder":144},[28,79027,79028,79030,79033],{"class":30,"line":9894},[28,79029,78700],{"class":2040},[28,79031,79032],{"class":2040}," .price::before",[28,79034,15649],{"class":34},[28,79036,79037,79040,79042,79045],{"class":30,"line":9900},[28,79038,79039],{"class":45},"      content",[28,79041,51512],{"class":34},[28,79043,79044],{"class":320},"'￥'",[28,79046,1367],{"class":34},[28,79048,79049,79051,79053,79055,79057],{"class":30,"line":9921},[28,79050,54997],{"class":45},[28,79052,51512],{"class":34},[28,79054,759],{"class":45},[28,79056,51567],{"class":38},[28,79058,1367],{"class":34},[28,79060,79061],{"class":30,"line":9927},[28,79062,2264],{"class":34},[28,79064,79065],{"class":30,"line":9941},[28,79066,2477],{"emptyLinePlaceholder":144},[28,79068,79069,79072],{"class":30,"line":9947},[28,79070,79071],{"class":2040},"    .filter",[28,79073,15649],{"class":34},[28,79075,79076,79078,79080,79082],{"class":30,"line":9974},[28,79077,55084],{"class":45},[28,79079,51512],{"class":34},[28,79081,51552],{"class":45},[28,79083,1367],{"class":34},[28,79085,79086,79088,79090,79092,79094],{"class":30,"line":9983},[28,79087,54846],{"class":45},[28,79089,51512],{"class":34},[28,79091,78649],{"class":45},[28,79093,51567],{"class":38},[28,79095,1367],{"class":34},[28,79097,79098,79100,79102,79104,79106],{"class":30,"line":9989},[28,79099,54781],{"class":45},[28,79101,51512],{"class":34},[28,79103,407],{"class":45},[28,79105,51631],{"class":45},[28,79107,1367],{"class":34},[28,79109,79110,79112,79114,79116,79118,79120],{"class":30,"line":9997},[28,79111,54770],{"class":45},[28,79113,51512],{"class":34},[28,79115,866],{"class":45},[28,79117,51567],{"class":38},[28,79119,78740],{"class":45},[28,79121,79122],{"class":38},"px\n",[28,79124,79125],{"class":30,"line":10002},[28,79126,2264],{"class":34},[28,79128,79129],{"class":30,"line":16681},[28,79130,2477],{"emptyLinePlaceholder":144},[28,79132,79133,79135,79137],{"class":30,"line":16687},[28,79134,79071],{"class":2040},[28,79136,1475],{"class":51375},[28,79138,15649],{"class":34},[28,79140,79141,79143,79145,79147,79149,79151,79153],{"class":30,"line":16710},[28,79142,54770],{"class":45},[28,79144,51512],{"class":34},[28,79146,659],{"class":45},[28,79148,51567],{"class":38},[28,79150,9027],{"class":45},[28,79152,51567],{"class":38},[28,79154,1367],{"class":34},[28,79156,79157,79159,79161,79163],{"class":30,"line":16716},[28,79158,61796],{"class":45},[28,79160,51512],{"class":34},[28,79162,61893],{"class":45},[28,79164,1367],{"class":34},[28,79166,79167,79169,79171,79173],{"class":30,"line":16739},[28,79168,57491],{"class":45},[28,79170,51512],{"class":34},[28,79172,78975],{"class":45},[28,79174,1367],{"class":34},[28,79176,79177,79179,79181,79183],{"class":30,"line":16753},[28,79178,64045],{"class":45},[28,79180,51512],{"class":34},[28,79182,54812],{"class":45},[28,79184,1367],{"class":34},[28,79186,79187,79189,79191,79193,79195],{"class":30,"line":16773},[28,79188,61825],{"class":45},[28,79190,51512],{"class":34},[28,79192,102],{"class":45},[28,79194,51567],{"class":38},[28,79196,1367],{"class":34},[28,79198,79199],{"class":30,"line":16779},[28,79200,2264],{"class":34},[28,79202,79203],{"class":30,"line":16790},[28,79204,2477],{"emptyLinePlaceholder":144},[28,79206,79207,79209,79211,79213],{"class":30,"line":16813},[28,79208,79071],{"class":2040},[28,79210,1475],{"class":51375},[28,79212,61975],{"class":2040},[28,79214,15649],{"class":34},[28,79216,79217,79219,79221,79224],{"class":30,"line":16835},[28,79218,54959],{"class":45},[28,79220,51512],{"class":34},[28,79222,79223],{"class":45},"#05943c",[28,79225,1367],{"class":34},[28,79227,79228,79230,79232,79234],{"class":30,"line":16840},[28,79229,57491],{"class":45},[28,79231,51512],{"class":34},[28,79233,60917],{"class":45},[28,79235,1367],{"class":34},[28,79237,79238],{"class":30,"line":16846},[28,79239,2264],{"class":34},[28,79241,79242,79244,79246],{"class":30,"line":16860},[28,79243,52492],{"class":34},[28,79245,136],{"class":51375},[28,79247,51382],{"class":34},[28,79249,79250,79252,79254],{"class":30,"line":16873},[28,79251,51860],{"class":34},[28,79253,51409],{"class":51375},[28,79255,51382],{"class":34},[28,79257,79258],{"class":30,"line":16878},[28,79259,2477],{"emptyLinePlaceholder":144},[28,79261,79262,79264,79266],{"class":30,"line":16892},[28,79263,99],{"class":34},[28,79265,51875],{"class":51375},[28,79267,51382],{"class":34},[28,79269,79270,79272,79274,79276,79278,79281],{"class":30,"line":16897},[28,79271,52219],{"class":34},[28,79273,51686],{"class":51375},[28,79275,53561],{"class":2040},[28,79277,39],{"class":34},[28,79279,79280],{"class":320},"\"filter\"",[28,79282,51382],{"class":34},[28,79284,79285,79287,79289,79291,79293,79295,79298,79300,79302,79305,79307],{"class":30,"line":16903},[28,79286,51416],{"class":34},[28,79288,35],{"class":51375},[28,79290,61132],{"class":2040},[28,79292,39],{"class":34},[28,79294,61137],{"class":320},[28,79296,79297],{"class":2040}," data-index",[28,79299,39],{"class":34},[28,79301,3755],{"class":320},[28,79303,79304],{"class":34},">0-100元\u003C\u002F",[28,79306,35],{"class":51375},[28,79308,51382],{"class":34},[28,79310,79311,79313,79315,79317,79319,79321,79323,79325,79327,79330,79332],{"class":30,"line":16908},[28,79312,51416],{"class":34},[28,79314,35],{"class":51375},[28,79316,61132],{"class":2040},[28,79318,39],{"class":34},[28,79320,61137],{"class":320},[28,79322,79297],{"class":2040},[28,79324,39],{"class":34},[28,79326,3778],{"class":320},[28,79328,79329],{"class":34},">100-300元\u003C\u002F",[28,79331,35],{"class":51375},[28,79333,51382],{"class":34},[28,79335,79336,79338,79340,79342,79344,79346,79348,79350,79352,79355,79357],{"class":30,"line":16922},[28,79337,51416],{"class":34},[28,79339,35],{"class":51375},[28,79341,61132],{"class":2040},[28,79343,39],{"class":34},[28,79345,61137],{"class":320},[28,79347,79297],{"class":2040},[28,79349,39],{"class":34},[28,79351,3791],{"class":320},[28,79353,79354],{"class":34},">300元以上\u003C\u002F",[28,79356,35],{"class":51375},[28,79358,51382],{"class":34},[28,79360,79361,79363,79365,79367,79369,79371,79374,79376],{"class":30,"line":16927},[28,79362,51416],{"class":34},[28,79364,35],{"class":51375},[28,79366,61132],{"class":2040},[28,79368,39],{"class":34},[28,79370,61137],{"class":320},[28,79372,79373],{"class":34},">全部区间\u003C\u002F",[28,79375,35],{"class":51375},[28,79377,51382],{"class":34},[28,79379,79380,79382,79384],{"class":30,"line":16932},[28,79381,52492],{"class":34},[28,79383,51686],{"class":51375},[28,79385,51382],{"class":34},[28,79387,79388,79390,79392,79394,79396,79398],{"class":30,"line":16946},[28,79389,52219],{"class":34},[28,79391,51686],{"class":51375},[28,79393,53561],{"class":2040},[28,79395,39],{"class":34},[28,79397,62683],{"class":320},[28,79399,51382],{"class":34},[28,79401,79402],{"class":30,"line":16958},[28,79403,79404],{"class":105},"    \u003C!-- \u003Cdiv class=\"item\">\n",[28,79406,79407],{"class":30,"line":16963},[28,79408,79409],{"class":105},"      \u003Cimg src=\"\" alt=\"\">\n",[28,79411,79412],{"class":30,"line":16976},[28,79413,79414],{"class":105},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[28,79416,79417],{"class":30,"line":16981},[28,79418,79419],{"class":105},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[28,79421,79422],{"class":30,"line":16986},[28,79423,79424],{"class":105},"    \u003C\u002Fdiv> -->\n",[28,79426,79427,79429,79431],{"class":30,"line":16991},[28,79428,52492],{"class":34},[28,79430,51686],{"class":51375},[28,79432,51382],{"class":34},[28,79434,79435,79437,79439],{"class":30,"line":17004},[28,79436,52219],{"class":34},[28,79438,51888],{"class":51375},[28,79440,51382],{"class":34},[28,79442,79443],{"class":30,"line":17009},[28,79444,79445],{"class":105},"    \u002F\u002F 2. 初始化数据\n",[28,79447,79448,79450,79453,79455],{"class":30,"line":32709},[28,79449,11298],{"class":38},[28,79451,79452],{"class":45}," goodsList",[28,79454,13641],{"class":38},[28,79456,55522],{"class":34},[28,79458,79459],{"class":30,"line":32715},[28,79460,79461],{"class":34},"      {\n",[28,79463,79464,79467,79470],{"class":30,"line":32721},[28,79465,79466],{"class":34},"        id: ",[28,79468,79469],{"class":320},"'4001172'",[28,79471,31542],{"class":34},[28,79473,79474,79477,79480],{"class":30,"line":32727},[28,79475,79476],{"class":34},"        name: ",[28,79478,79479],{"class":320},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[28,79481,31542],{"class":34},[28,79483,79484,79487,79490],{"class":30,"line":32733},[28,79485,79486],{"class":34},"        price: ",[28,79488,79489],{"class":320},"'289.00'",[28,79491,31542],{"class":34},[28,79493,79494,79497,79500],{"class":30,"line":32744},[28,79495,79496],{"class":34},"        picture: ",[28,79498,79499],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[28,79501,31542],{"class":34},[28,79503,79504],{"class":30,"line":32750},[28,79505,77967],{"class":34},[28,79507,79508],{"class":30,"line":32770},[28,79509,79461],{"class":34},[28,79511,79512,79514,79517],{"class":30,"line":32776},[28,79513,79466],{"class":34},[28,79515,79516],{"class":320},"'4001594'",[28,79518,31542],{"class":34},[28,79520,79521,79523,79526],{"class":30,"line":32787},[28,79522,79476],{"class":34},[28,79524,79525],{"class":320},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[28,79527,31542],{"class":34},[28,79529,79530,79532,79535],{"class":30,"line":32793},[28,79531,79486],{"class":34},[28,79533,79534],{"class":320},"'288.00'",[28,79536,31542],{"class":34},[28,79538,79539,79541,79544],{"class":30,"line":32799},[28,79540,79496],{"class":34},[28,79542,79543],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[28,79545,31542],{"class":34},[28,79547,79548],{"class":30,"line":32805},[28,79549,77967],{"class":34},[28,79551,79552],{"class":30,"line":32811},[28,79553,79461],{"class":34},[28,79555,79556,79558,79561],{"class":30,"line":32817},[28,79557,79466],{"class":34},[28,79559,79560],{"class":320},"'4001009'",[28,79562,31542],{"class":34},[28,79564,79565,79567,79570],{"class":30,"line":32823},[28,79566,79476],{"class":34},[28,79568,79569],{"class":320},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[28,79571,31542],{"class":34},[28,79573,79574,79576,79579],{"class":30,"line":32829},[28,79575,79486],{"class":34},[28,79577,79578],{"class":320},"'109.00'",[28,79580,31542],{"class":34},[28,79582,79583,79585,79588],{"class":30,"line":32849},[28,79584,79496],{"class":34},[28,79586,79587],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[28,79589,31542],{"class":34},[28,79591,79592],{"class":30,"line":32855},[28,79593,77967],{"class":34},[28,79595,79596],{"class":30,"line":32871},[28,79597,79461],{"class":34},[28,79599,79600,79602,79605],{"class":30,"line":32877},[28,79601,79466],{"class":34},[28,79603,79604],{"class":320},"'4001874'",[28,79606,31542],{"class":34},[28,79608,79609,79611,79614],{"class":30,"line":32891},[28,79610,79476],{"class":34},[28,79612,79613],{"class":320},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[28,79615,31542],{"class":34},[28,79617,79618,79620,79623],{"class":30,"line":32897},[28,79619,79486],{"class":34},[28,79621,79622],{"class":320},"'488.00'",[28,79624,31542],{"class":34},[28,79626,79627,79629,79632],{"class":30,"line":32912},[28,79628,79496],{"class":34},[28,79630,79631],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[28,79633,31542],{"class":34},[28,79635,79636],{"class":30,"line":32918},[28,79637,77967],{"class":34},[28,79639,79640],{"class":30,"line":32927},[28,79641,79461],{"class":34},[28,79643,79644,79646,79649],{"class":30,"line":32933},[28,79645,79466],{"class":34},[28,79647,79648],{"class":320},"'4001649'",[28,79650,31542],{"class":34},[28,79652,79653,79655,79658],{"class":30,"line":32942},[28,79654,79476],{"class":34},[28,79656,79657],{"class":320},"'大师监制龙泉青瓷茶叶罐'",[28,79659,31542],{"class":34},[28,79661,79662,79664,79667],{"class":30,"line":32948},[28,79663,79486],{"class":34},[28,79665,79666],{"class":320},"'139.00'",[28,79668,31542],{"class":34},[28,79670,79671,79673,79676],{"class":30,"line":32954},[28,79672,79496],{"class":34},[28,79674,79675],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[28,79677,31542],{"class":34},[28,79679,79680],{"class":30,"line":32963},[28,79681,77967],{"class":34},[28,79683,79684],{"class":30,"line":32969},[28,79685,79461],{"class":34},[28,79687,79688,79690,79693],{"class":30,"line":32980},[28,79689,79466],{"class":34},[28,79691,79692],{"class":320},"'3997185'",[28,79694,31542],{"class":34},[28,79696,79697,79699,79702],{"class":30,"line":32986},[28,79698,79476],{"class":34},[28,79700,79701],{"class":320},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[28,79703,31542],{"class":34},[28,79705,79706,79708,79711],{"class":30,"line":33005},[28,79707,79486],{"class":34},[28,79709,79710],{"class":320},"'108.00'",[28,79712,31542],{"class":34},[28,79714,79715,79717,79720],{"class":30,"line":33011},[28,79716,79496],{"class":34},[28,79718,79719],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[28,79721,31542],{"class":34},[28,79723,79724],{"class":30,"line":33022},[28,79725,77967],{"class":34},[28,79727,79728],{"class":30,"line":33028},[28,79729,79461],{"class":34},[28,79731,79732,79734,79737],{"class":30,"line":33048},[28,79733,79466],{"class":34},[28,79735,79736],{"class":320},"'3997403'",[28,79738,31542],{"class":34},[28,79740,79741,79743,79746],{"class":30,"line":33064},[28,79742,79476],{"class":34},[28,79744,79745],{"class":320},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[28,79747,31542],{"class":34},[28,79749,79750,79752,79755],{"class":30,"line":33070},[28,79751,79486],{"class":34},[28,79753,79754],{"class":320},"'100.00'",[28,79756,31542],{"class":34},[28,79758,79759,79761,79764],{"class":30,"line":33084},[28,79760,79496],{"class":34},[28,79762,79763],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[28,79765,31542],{"class":34},[28,79767,79768],{"class":30,"line":33090},[28,79769,77967],{"class":34},[28,79771,79772],{"class":30,"line":33096},[28,79773,79461],{"class":34},[28,79775,79776,79778,79781],{"class":30,"line":33107},[28,79777,79466],{"class":34},[28,79779,79780],{"class":320},"'3998274'",[28,79782,31542],{"class":34},[28,79784,79785,79787,79790],{"class":30,"line":33113},[28,79786,79476],{"class":34},[28,79788,79789],{"class":320},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[28,79791,31542],{"class":34},[28,79793,79794,79796,79798],{"class":30,"line":33119},[28,79795,79486],{"class":34},[28,79797,79666],{"class":320},[28,79799,31542],{"class":34},[28,79801,79802,79804,79807],{"class":30,"line":33129},[28,79803,79496],{"class":34},[28,79805,79806],{"class":320},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[28,79808,31542],{"class":34},[28,79810,79811],{"class":30,"line":33135},[28,79812,77967],{"class":34},[28,79814,79815],{"class":30,"line":33146},[28,79816,53184],{"class":34},[28,79818,79819],{"class":30,"line":33152},[28,79820,2477],{"emptyLinePlaceholder":144},[28,79822,79823],{"class":30,"line":33162},[28,79824,79825],{"class":105},"    \u002F\u002F 1.渲染函数\n",[28,79827,79828,79830,79832,79834,79836],{"class":30,"line":33167},[28,79829,70159],{"class":38},[28,79831,70162],{"class":2040},[28,79833,221],{"class":34},[28,79835,3957],{"class":5293},[28,79837,12519],{"class":34},[28,79839,79840],{"class":30,"line":33173},[28,79841,79842],{"class":105},"      \u002F\u002F 声明空字符串\n",[28,79844,79845,79848,79851,79853],{"class":30,"line":33222},[28,79846,79847],{"class":38},"      let",[28,79849,79850],{"class":34}," str ",[28,79852,39],{"class":38},[28,79854,70179],{"class":320},[28,79856,79857],{"class":30,"line":33269},[28,79858,70184],{"class":105},[28,79860,79861,79863,79866,79868,79871,79874],{"class":30,"line":33274},[28,79862,58082],{"class":34},[28,79864,79865],{"class":2040},"forEach",[28,79867,221],{"class":34},[28,79869,79870],{"class":5293},"item",[28,79872,79873],{"class":38}," =>",[28,79875,15649],{"class":34},[28,79877,79878,79880,79883,79886,79888,79891,79893,79896,79899,79901],{"class":30,"line":33280},[28,79879,61345],{"class":38},[28,79881,79882],{"class":34}," { ",[28,79884,79885],{"class":45},"name",[28,79887,12512],{"class":34},[28,79889,79890],{"class":45},"price",[28,79892,12512],{"class":34},[28,79894,79895],{"class":45},"picture",[28,79897,79898],{"class":34}," } ",[28,79900,39],{"class":38},[28,79902,79903],{"class":34}," item\n",[28,79905,79906,79909,79911],{"class":30,"line":33299},[28,79907,79908],{"class":34},"        str ",[28,79910,9554],{"class":38},[28,79912,70243],{"class":320},[28,79914,79915],{"class":30,"line":33305},[28,79916,79917],{"class":320},"          \u003Cdiv class=\"item\">\n",[28,79919,79920,79923,79925],{"class":30,"line":33325},[28,79921,79922],{"class":320},"            \u003Cimg src=\"${",[28,79924,79895],{"class":34},[28,79926,79927],{"class":320},"}\" alt=\"\">\n",[28,79929,79930,79933,79935],{"class":30,"line":33331},[28,79931,79932],{"class":320},"            \u003Cp class=\"name\">${",[28,79934,79885],{"class":34},[28,79936,79937],{"class":320},"}\u003C\u002Fp>\n",[28,79939,79940,79943,79945],{"class":30,"line":33337},[28,79941,79942],{"class":320},"            \u003Cp class=\"price\">${",[28,79944,79890],{"class":34},[28,79946,79937],{"class":320},[28,79948,79949],{"class":30,"line":33347},[28,79950,79951],{"class":320},"          \u003C\u002Fdiv>\n",[28,79953,79954],{"class":30,"line":33352},[28,79955,79956],{"class":320},"        `\n",[28,79958,79959],{"class":30,"line":33358},[28,79960,64890],{"class":34},[28,79962,79963],{"class":30,"line":33374},[28,79964,79965],{"class":105},"      \u002F\u002F 追加给List\n",[28,79967,79968,79970,79972,79974,79977,79979,79981],{"class":30,"line":33419},[28,79969,55846],{"class":34},[28,79971,54474],{"class":2040},[28,79973,221],{"class":34},[28,79975,79976],{"class":320},"'.list'",[28,79978,74324],{"class":34},[28,79980,39],{"class":38},[28,79982,74060],{"class":34},[28,79984,79985],{"class":30,"line":33425},[28,79986,2264],{"class":34},[28,79988,79989],{"class":30,"line":33431},[28,79990,79991],{"class":105},"    \u002F\u002F 页面一打开就需要渲染\n",[28,79993,79994,79997],{"class":30,"line":33437},[28,79995,79996],{"class":2040},"    render",[28,79998,79999],{"class":34},"(goodsList)\n",[28,80001,80002],{"class":30,"line":33448},[28,80003,80004],{"class":105},"    \u002F\u002F 2.过滤筛选\n",[28,80006,80007,80009,80011,80013,80016,80018,80020,80022,80024,80026,80028,80030],{"class":30,"line":33454},[28,80008,52482],{"class":34},[28,80010,54474],{"class":2040},[28,80012,221],{"class":34},[28,80014,80015],{"class":320},"'.filter'",[28,80017,30902],{"class":34},[28,80019,57888],{"class":2040},[28,80021,221],{"class":34},[28,80023,57893],{"class":320},[28,80025,12512],{"class":34},[28,80027,291],{"class":5293},[28,80029,79873],{"class":38},[28,80031,15649],{"class":34},[28,80033,80034],{"class":30,"line":33460},[28,80035,80036],{"class":105},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[28,80038,80039,80041,80043,80046,80048,80050,80052,80054],{"class":30,"line":33466},[28,80040,58303],{"class":38},[28,80042,79882],{"class":34},[28,80044,80045],{"class":45},"tagName",[28,80047,12512],{"class":34},[28,80049,31613],{"class":45},[28,80051,79898],{"class":34},[28,80053,39],{"class":38},[28,80055,80056],{"class":34}," e.target\n",[28,80058,80059],{"class":30,"line":33484},[28,80060,80061],{"class":105},"      \u002F\u002F 判断\n",[28,80063,80064,80066,80068,80070,80072],{"class":30,"line":33498},[28,80065,54555],{"class":38},[28,80067,67109],{"class":34},[28,80069,54561],{"class":38},[28,80071,68331],{"class":320},[28,80073,12519],{"class":34},[28,80075,80076],{"class":30,"line":33507},[28,80077,80078],{"class":105},"        \u002F\u002F console.log(11)\n",[28,80080,80081],{"class":30,"line":33516},[28,80082,80083],{"class":105},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[28,80085,80086],{"class":30,"line":33525},[28,80087,80088],{"class":105},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[28,80090,80091,80093,80095,80097],{"class":30,"line":33534},[28,80092,51905],{"class":38},[28,80094,51908],{"class":34},[28,80096,39],{"class":38},[28,80098,80099],{"class":34}," goodsList\n",[28,80101,80102,80104,80107,80109,80112],{"class":30,"line":33540},[28,80103,2574],{"class":38},[28,80105,80106],{"class":34}," (dataset.index ",[28,80108,54561],{"class":38},[28,80110,80111],{"class":320}," '1'",[28,80113,12519],{"class":34},[28,80115,80116,80119,80121,80124,80127,80129,80131,80133,80136,80138,80140,80143,80145,80147,80149],{"class":30,"line":33546},[28,80117,80118],{"class":34},"          arr ",[28,80120,39],{"class":38},[28,80122,80123],{"class":34}," goodsList.",[28,80125,80126],{"class":2040},"filter",[28,80128,221],{"class":34},[28,80130,79870],{"class":5293},[28,80132,79873],{"class":38},[28,80134,80135],{"class":34}," item.price ",[28,80137,1787],{"class":38},[28,80139,4170],{"class":45},[28,80141,80142],{"class":38}," &&",[28,80144,80135],{"class":34},[28,80146,1665],{"class":38},[28,80148,5831],{"class":45},[28,80150,227],{"class":34},[28,80152,80153,80156,80158,80160,80162,80164,80167],{"class":30,"line":33554},[28,80154,80155],{"class":34},"        } ",[28,80157,1778],{"class":38},[28,80159,1781],{"class":38},[28,80161,80106],{"class":34},[28,80163,54561],{"class":38},[28,80165,80166],{"class":320}," '2'",[28,80168,12519],{"class":34},[28,80170,80171,80173,80175,80177,80179,80181,80183,80185,80187,80189,80191,80193,80195,80197,80200],{"class":30,"line":33559},[28,80172,80118],{"class":34},[28,80174,39],{"class":38},[28,80176,80123],{"class":34},[28,80178,80126],{"class":2040},[28,80180,221],{"class":34},[28,80182,79870],{"class":5293},[28,80184,79873],{"class":38},[28,80186,80135],{"class":34},[28,80188,1787],{"class":38},[28,80190,5831],{"class":45},[28,80192,80142],{"class":38},[28,80194,80135],{"class":34},[28,80196,1665],{"class":38},[28,80198,80199],{"class":45}," 300",[28,80201,227],{"class":34},[28,80203,80204,80206,80208,80210,80212,80214,80217],{"class":30,"line":33565},[28,80205,80155],{"class":34},[28,80207,1778],{"class":38},[28,80209,1781],{"class":38},[28,80211,80106],{"class":34},[28,80213,54561],{"class":38},[28,80215,80216],{"class":320}," '3'",[28,80218,12519],{"class":34},[28,80220,80221,80223,80225,80227,80229,80231,80233,80235,80237,80239,80241],{"class":30,"line":33576},[28,80222,80118],{"class":34},[28,80224,39],{"class":38},[28,80226,80123],{"class":34},[28,80228,80126],{"class":2040},[28,80230,221],{"class":34},[28,80232,79870],{"class":5293},[28,80234,79873],{"class":38},[28,80236,80135],{"class":34},[28,80238,1787],{"class":38},[28,80240,80199],{"class":45},[28,80242,227],{"class":34},[28,80244,80245],{"class":30,"line":33582},[28,80246,2606],{"class":34},[28,80248,80249],{"class":30,"line":33602},[28,80250,80251],{"class":105},"        \u002F\u002F 渲染函数\n",[28,80253,80254,80256],{"class":30,"line":33608},[28,80255,70483],{"class":2040},[28,80257,52487],{"class":34},[28,80259,80260],{"class":30,"line":33614},[28,80261,52473],{"class":34},[28,80263,80264],{"class":30,"line":33620},[28,80265,2477],{"emptyLinePlaceholder":144},[28,80267,80268],{"class":30,"line":33637},[28,80269,33537],{"class":34},[28,80271,80272,80274,80276],{"class":30,"line":33643},[28,80273,52492],{"class":34},[28,80275,51888],{"class":51375},[28,80277,51382],{"class":34},[28,80279,80280,80282,80284],{"class":30,"line":33649},[28,80281,51860],{"class":34},[28,80283,51875],{"class":51375},[28,80285,51382],{"class":34},[28,80287,80288],{"class":30,"line":33655},[28,80289,2477],{"emptyLinePlaceholder":144},[28,80291,80292,80294,80296],{"class":30,"line":33661},[28,80293,51860],{"class":34},[28,80295,50710],{"class":51375},[28,80297,51382],{"class":34},[159,80299,80301],{"id":80300},"_410-深入了解对象","4.10 深入了解对象",[188,80303,80305],{"id":80304},"_4101-创建对象","4.10.1 创建对象",[14,80307,80308],{},[1539,80309],{"alt":23,"src":80310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80312,80313],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[188,80315,80317],{"id":80316},"_4102-构造函数","4.10.2 构造函数",[14,80319,80320,80323],{},[365,80321,80322],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80325,80326,80329],{},[365,80327,80328],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[18,80331,80333],{"className":50708,"code":80332,"language":50710,"meta":23,"style":23},"\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",[25,80334,80335,80343,80348,80369,80382,80394,80406,80410,80415,80442,80447,80474],{"__ignoreMap":23},[28,80336,80337,80339,80341],{"class":30,"line":31},[28,80338,99],{"class":34},[28,80340,51888],{"class":51375},[28,80342,51382],{"class":34},[28,80344,80345],{"class":30,"line":94},[28,80346,80347],{"class":105},"\u002F\u002F例：\n",[28,80349,80350,80352,80355,80357,80359,80361,80363,80365,80367],{"class":30,"line":109},[28,80351,54524],{"class":38},[28,80353,80354],{"class":2040}," Pig",[28,80356,221],{"class":34},[28,80358,79885],{"class":5293},[28,80360,49],{"class":34},[28,80362,70296],{"class":5293},[28,80364,49],{"class":34},[28,80366,70313],{"class":5293},[28,80368,12519],{"class":34},[28,80370,80371,80374,80377,80379],{"class":30,"line":125},[28,80372,80373],{"class":45},"    this",[28,80375,80376],{"class":34},".name",[28,80378,39],{"class":38},[28,80380,80381],{"class":34},"name\n",[28,80383,80384,80386,80389,80391],{"class":30,"line":131},[28,80385,80373],{"class":45},[28,80387,80388],{"class":34},".age",[28,80390,39],{"class":38},[28,80392,80393],{"class":34},"age\n",[28,80395,80396,80398,80401,80403],{"class":30,"line":1291},[28,80397,80373],{"class":45},[28,80399,80400],{"class":34},".gender",[28,80402,39],{"class":38},[28,80404,80405],{"class":34},"gender    \n",[28,80407,80408],{"class":30,"line":1297},[28,80409,1642],{"class":34},[28,80411,80412],{"class":30,"line":1388},[28,80413,80414],{"class":105},"\u002F\u002F创建佩奇对象\n",[28,80416,80417,80419,80422,80424,80426,80428,80431,80433,80435,80437,80440],{"class":30,"line":1394},[28,80418,6869],{"class":38},[28,80420,80421],{"class":45}," Peppa",[28,80423,11794],{"class":38},[28,80425,80354],{"class":2040},[28,80427,221],{"class":34},[28,80429,80430],{"class":320},"'佩奇'",[28,80432,49],{"class":34},[28,80434,558],{"class":45},[28,80436,49],{"class":34},[28,80438,80439],{"class":320},"'女'",[28,80441,227],{"class":34},[28,80443,80444],{"class":30,"line":1406},[28,80445,80446],{"class":105},"\u002F\u002F创建乔治对象\n",[28,80448,80449,80451,80454,80456,80458,80460,80463,80465,80467,80469,80472],{"class":30,"line":1689},[28,80450,6869],{"class":38},[28,80452,80453],{"class":45}," George",[28,80455,11794],{"class":38},[28,80457,80354],{"class":2040},[28,80459,221],{"class":34},[28,80461,80462],{"class":320},"'乔治'",[28,80464,49],{"class":34},[28,80466,57],{"class":45},[28,80468,49],{"class":34},[28,80470,80471],{"class":320},"'男'",[28,80473,227],{"class":34},[28,80475,80476,80478,80480],{"class":30,"line":1694},[28,80477,51860],{"class":34},[28,80479,51888],{"class":51375},[28,80481,51382],{"class":34},[14,80483,80484],{},[1539,80485],{"alt":23,"src":80486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80488,80489],{},[1539,80490],{"alt":23,"src":80491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80493,80494],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80496,80497],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80499,80500],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80502,80503],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80505,80506],{},"这里用等号是因为：对象.属性=值",[14,80508,80509],{},"①利用对象字面量创建对象",[14,80511,80512],{},"const o={",[14,80514,80515],{},"name:'pink'",[14,80517,80518],{},"} ②利用new Object创建对象",[14,80520,80521],{},"const o=new Object({name:'pink'})",[14,80523,80524],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80526,80527],{},"构造函数创建对象的执行过程：",[14,80529,80530],{},[1539,80531],{"alt":23,"src":80532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[188,80534,80536],{"id":80535},"_4103-实例成员","4.10.3 实例成员",[14,80538,80539],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[171,80541,80542,80545,80548],{},[174,80543,80544],{},"实例对象的属性和方法即为实例成员",[174,80546,80547],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[174,80549,80550],{},"构造函数创建的实例对象彼此独立互不影响",[188,80552,80554],{"id":80553},"_4104-静态成员","4.10.4 静态成员",[14,80556,80557],{},[1539,80558],{"alt":23,"src":80559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80561,80562],{},"静态成员有Date.now() Math.PI Math.random()",[14,80564,80565],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80567,80568],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80570,80571],{},"function Pig(name) n {",[14,80573,80574],{},"this.name=name",[14,80576,1150],{},[14,80578,80579],{},"Pig.eyes=2",[14,80581,80582],{},"Pig.sayHai=function () { console.log(this) }",[14,80584,80585],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80587,80588],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80590,11409],{},[171,80592,80593,80596,80599,80602,80605],{},[174,80594,80595],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[174,80597,80598],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[174,80600,80601],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[174,80603,80604],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[174,80606,80607],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80609,80610],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[188,80612,80614],{"id":80613},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80616,80617],{},"内置构造函数包含：",[14,80619,80620],{},[1539,80621],{"alt":23,"src":80622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80624,80625],{},[1539,80626],{"alt":23,"src":80627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80629,80630],{},"这些基本数据类型，js对他们进行了包装",[51888,80632,80633],{},"\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",[22075,80635,80637],{"id":80636},"_41051-object","4.10.5.1 Object",[14,80639,80640],{},"Object 是内置的构造函数，用于创建普通对象",[14,80642,80643],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[18,80645,80647],{"className":50708,"code":80646,"language":50710,"meta":23,"style":23},"const user=new Object({name:'小明',age:15})\n",[25,80648,80649],{"__ignoreMap":23},[28,80650,80651],{"class":30,"line":31},[28,80652,80646],{"class":34},[14,80654,80655],{},"三个常用的静态方法：",[22987,80657,80659],{"id":80658},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80661,80662],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80664,80665],{},[1539,80666],{"alt":23,"src":80667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80669,80670],{},[1539,80671],{"alt":23,"src":80672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[18,80674,80676],{"className":53142,"code":80675,"language":53144,"meta":23,"style":23},"\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",[25,80677,80678,80686,80694,80699,80704,80709,80714,80719,80724,80732],{"__ignoreMap":23},[28,80679,80680,80682,80684],{"class":30,"line":31},[28,80681,99],{"class":34},[28,80683,51875],{"class":51375},[28,80685,51382],{"class":34},[28,80687,80688,80690,80692],{"class":30,"line":94},[28,80689,52219],{"class":34},[28,80691,51888],{"class":51375},[28,80693,51382],{"class":34},[28,80695,80696],{"class":30,"line":109},[28,80697,80698],{"class":34},"    const o = { name: 'pink', age: 6 }\n",[28,80700,80701],{"class":30,"line":125},[28,80702,80703],{"class":34},"    \u002F\u002F 获得所有属性名\n",[28,80705,80706],{"class":30,"line":131},[28,80707,80708],{"class":34},"    const arr = Object.keys(o)\n",[28,80710,80711],{"class":30,"line":1291},[28,80712,80713],{"class":34},"    console.log(arr)\n",[28,80715,80716],{"class":30,"line":1297},[28,80717,80718],{"class":34},"    \u002F\u002F 获得所有属性值\n",[28,80720,80721],{"class":30,"line":1388},[28,80722,80723],{"class":34},"    console.log(Object.values(o))\n",[28,80725,80726,80728,80730],{"class":30,"line":1394},[28,80727,52492],{"class":34},[28,80729,51888],{"class":51375},[28,80731,51382],{"class":34},[28,80733,80734,80736,80738],{"class":30,"line":1406},[28,80735,51860],{"class":34},[28,80737,51875],{"class":51375},[28,80739,51382],{"class":34},[22987,80741,80743],{"id":80742},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80745,80746],{},"Object.assign(oo,o)",[14,80748,80749],{},"后的东西添加给前 是追加",[14,80751,80752],{},[1539,80753],{"alt":23,"src":80754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80756,80757],{},[1539,80758],{"alt":23,"src":80759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[18,80761,80763],{"className":53142,"code":80762,"language":53144,"meta":23,"style":23},"\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",[25,80764,80765,80773,80781,80785,80789,80793,80797,80801,80805,80810,80815,80820,80825,80830,80838],{"__ignoreMap":23},[28,80766,80767,80769,80771],{"class":30,"line":31},[28,80768,99],{"class":34},[28,80770,51875],{"class":51375},[28,80772,51382],{"class":34},[28,80774,80775,80777,80779],{"class":30,"line":94},[28,80776,52219],{"class":34},[28,80778,51888],{"class":51375},[28,80780,51382],{"class":34},[28,80782,80783],{"class":30,"line":109},[28,80784,80698],{"class":34},[28,80786,80787],{"class":30,"line":125},[28,80788,80703],{"class":34},[28,80790,80791],{"class":30,"line":131},[28,80792,80708],{"class":34},[28,80794,80795],{"class":30,"line":1291},[28,80796,80713],{"class":34},[28,80798,80799],{"class":30,"line":1297},[28,80800,80718],{"class":34},[28,80802,80803],{"class":30,"line":1388},[28,80804,80723],{"class":34},[28,80806,80807],{"class":30,"line":1394},[28,80808,80809],{"class":34},"    const oo = {}\n",[28,80811,80812],{"class":30,"line":1406},[28,80813,80814],{"class":34},"    Object.assign(oo, o)\n",[28,80816,80817],{"class":30,"line":1689},[28,80818,80819],{"class":34},"    console.log(oo)\n",[28,80821,80822],{"class":30,"line":1694},[28,80823,80824],{"class":34},"    Object.assign(o, { gender: '女' })\n",[28,80826,80827],{"class":30,"line":1700},[28,80828,80829],{"class":34},"    console.log(o)\n",[28,80831,80832,80834,80836],{"class":30,"line":1705},[28,80833,52492],{"class":34},[28,80835,51888],{"class":51375},[28,80837,51382],{"class":34},[28,80839,80840,80842,80844],{"class":30,"line":1719},[28,80841,51860],{"class":34},[28,80843,51875],{"class":51375},[28,80845,51382],{"class":34},[14,80847,80848],{},[1539,80849],{"alt":23,"src":80850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22075,80852,80854],{"id":80853},"_41052-array","4.10.5.2 Array",[14,80856,80857],{},"Array 是内置的构造函数，用于创建数组",[14,80859,80860],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[18,80862,80864],{"className":50708,"code":80863,"language":50710,"meta":23,"style":23},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[25,80865,80866,80871],{"__ignoreMap":23},[28,80867,80868],{"class":30,"line":31},[28,80869,80870],{"class":34},"const arr=new Array(3,5)\n",[28,80872,80873],{"class":30,"line":94},[28,80874,80875],{"class":34},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80877,80878],{},"Array的实例方法，这个方法是实例成员",[14,80880,80881],{},[1539,80882],{"alt":23,"src":80883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22987,80885,80887],{"id":80886},"_410521-reduce","4.10.5.2.1 reduce",[14,80889,80890],{},[1539,80891],{"alt":23,"src":80892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[18,80894,80896],{"className":53142,"code":80895,"language":53144,"meta":23,"style":23},"\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",[25,80897,80898,80906,80914,80919,80924,80929,80934,80938,80943,80948,80953,80957,80962,80967,80971,80976,80981,80986,80994],{"__ignoreMap":23},[28,80899,80900,80902,80904],{"class":30,"line":31},[28,80901,99],{"class":34},[28,80903,51875],{"class":51375},[28,80905,51382],{"class":34},[28,80907,80908,80910,80912],{"class":30,"line":94},[28,80909,52219],{"class":34},[28,80911,51888],{"class":51375},[28,80913,51382],{"class":34},[28,80915,80916],{"class":30,"line":109},[28,80917,80918],{"class":34},"    const arr = [1, 5, 8]\n",[28,80920,80921],{"class":30,"line":125},[28,80922,80923],{"class":34},"    \u002F\u002F 1.没有初始值\n",[28,80925,80926],{"class":30,"line":131},[28,80927,80928],{"class":34},"    const total = arr.reduce(function (prev, current) {\n",[28,80930,80931],{"class":30,"line":1291},[28,80932,80933],{"class":34},"      return prev + current\n",[28,80935,80936],{"class":30,"line":1297},[28,80937,33537],{"class":34},[28,80939,80940],{"class":30,"line":1388},[28,80941,80942],{"class":34},"    console.log(total)   \u002F\u002F14\n",[28,80944,80945],{"class":30,"line":1394},[28,80946,80947],{"class":34},"    \u002F\u002F 2.有初始值\n",[28,80949,80950],{"class":30,"line":1406},[28,80951,80952],{"class":34},"    const total1 = arr.reduce(function (prev, current) {\n",[28,80954,80955],{"class":30,"line":1689},[28,80956,80933],{"class":34},[28,80958,80959],{"class":30,"line":1694},[28,80960,80961],{"class":34},"    }, 10)\n",[28,80963,80964],{"class":30,"line":1700},[28,80965,80966],{"class":34},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[28,80968,80969],{"class":30,"line":1705},[28,80970,2477],{"emptyLinePlaceholder":144},[28,80972,80973],{"class":30,"line":1719},[28,80974,80975],{"class":34},"    \u002F\u002F 3.箭头函数写法\n",[28,80977,80978],{"class":30,"line":1724},[28,80979,80980],{"class":34},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[28,80982,80983],{"class":30,"line":1730},[28,80984,80985],{"class":34},"    console.log(total2)   \u002F\u002F24\n",[28,80987,80988,80990,80992],{"class":30,"line":1751},[28,80989,52492],{"class":34},[28,80991,51888],{"class":51375},[28,80993,51382],{"class":34},[28,80995,80996,80998,81000],{"class":30,"line":1756},[28,80997,51860],{"class":34},[28,80999,51875],{"class":51375},[28,81001,51382],{"class":34},[14,81003,81004],{},"执行过程：",[171,81006,81007,81010,81013],{},[174,81008,81009],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[174,81011,81012],{},"每一次循环，把返回值给作为下一次循环的上一次值",[174,81014,81015],{},"如果有起始值，则起始值作为上一次值",[18,81017,81019],{"className":53142,"code":81018,"language":53144,"meta":23,"style":23},"\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",[25,81020,81021,81029,81037,81041,81045,81049,81053,81057,81061,81066,81071,81076,81081,81086,81090,81094,81098,81102,81106,81110,81115,81119,81124,81128,81133,81138,81142,81146,81150,81158],{"__ignoreMap":23},[28,81022,81023,81025,81027],{"class":30,"line":31},[28,81024,99],{"class":34},[28,81026,51875],{"class":51375},[28,81028,51382],{"class":34},[28,81030,81031,81033,81035],{"class":30,"line":94},[28,81032,52219],{"class":34},[28,81034,51888],{"class":51375},[28,81036,51382],{"class":34},[28,81038,81039],{"class":30,"line":109},[28,81040,80918],{"class":34},[28,81042,81043],{"class":30,"line":125},[28,81044,80923],{"class":34},[28,81046,81047],{"class":30,"line":131},[28,81048,80928],{"class":34},[28,81050,81051],{"class":30,"line":1291},[28,81052,80933],{"class":34},[28,81054,81055],{"class":30,"line":1297},[28,81056,33537],{"class":34},[28,81058,81059],{"class":30,"line":1388},[28,81060,80942],{"class":34},[28,81062,81063],{"class":30,"line":1394},[28,81064,81065],{"class":34},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[28,81067,81068],{"class":30,"line":1406},[28,81069,81070],{"class":34},"    \u002F\u002F     1              5                    6\n",[28,81072,81073],{"class":30,"line":1689},[28,81074,81075],{"class":34},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[28,81077,81078],{"class":30,"line":1694},[28,81079,81080],{"class":34},"    \u002F\u002F     6              8                    14\n",[28,81082,81083],{"class":30,"line":1700},[28,81084,81085],{"class":34},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[28,81087,81088],{"class":30,"line":1705},[28,81089,80947],{"class":34},[28,81091,81092],{"class":30,"line":1719},[28,81093,80952],{"class":34},[28,81095,81096],{"class":30,"line":1724},[28,81097,80933],{"class":34},[28,81099,81100],{"class":30,"line":1730},[28,81101,80961],{"class":34},[28,81103,81104],{"class":30,"line":1751},[28,81105,80966],{"class":34},[28,81107,81108],{"class":30,"line":1756},[28,81109,81065],{"class":34},[28,81111,81112],{"class":30,"line":1770},[28,81113,81114],{"class":34},"    \u002F\u002F     10             1                     11\n",[28,81116,81117],{"class":30,"line":1775},[28,81118,81075],{"class":34},[28,81120,81121],{"class":30,"line":1804},[28,81122,81123],{"class":34},"    \u002F\u002F     11             5                    16\n",[28,81125,81126],{"class":30,"line":1809},[28,81127,81075],{"class":34},[28,81129,81130],{"class":30,"line":1826},[28,81131,81132],{"class":34},"    \u002F\u002F     16             8                    24\n",[28,81134,81135],{"class":30,"line":1831},[28,81136,81137],{"class":34},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[28,81139,81140],{"class":30,"line":1836},[28,81141,80975],{"class":34},[28,81143,81144],{"class":30,"line":1841},[28,81145,80980],{"class":34},[28,81147,81148],{"class":30,"line":1855},[28,81149,80985],{"class":34},[28,81151,81152,81154,81156],{"class":30,"line":1860},[28,81153,52492],{"class":34},[28,81155,51888],{"class":51375},[28,81157,51382],{"class":34},[28,81159,81160,81162,81164],{"class":30,"line":2654},[28,81161,51860],{"class":34},[28,81163,51875],{"class":51375},[28,81165,51382],{"class":34},[22987,81167,81169],{"id":81168},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81171,81172],{},[1539,81173],{"alt":23,"src":81174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[18,81176,81178],{"className":53142,"code":81177,"language":53144,"meta":23,"style":23},"\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",[25,81179,81180,81188,81196,81201,81206,81211,81216,81220,81225,81230,81235,81240,81245,81250,81254,81259,81263,81268,81276],{"__ignoreMap":23},[28,81181,81182,81184,81186],{"class":30,"line":31},[28,81183,99],{"class":34},[28,81185,51875],{"class":51375},[28,81187,51382],{"class":34},[28,81189,81190,81192,81194],{"class":30,"line":94},[28,81191,52219],{"class":34},[28,81193,51888],{"class":51375},[28,81195,51382],{"class":34},[28,81197,81198],{"class":30,"line":109},[28,81199,81200],{"class":34},"    const arr = [\n",[28,81202,81203],{"class":30,"line":125},[28,81204,81205],{"class":34},"      { name: '张三', salary: 10000 },\n",[28,81207,81208],{"class":30,"line":131},[28,81209,81210],{"class":34},"      { name: '李四', salary: 10000 },\n",[28,81212,81213],{"class":30,"line":1291},[28,81214,81215],{"class":34},"      { name: '王五', salary: 10000 }\n",[28,81217,81218],{"class":30,"line":1297},[28,81219,53184],{"class":34},[28,81221,81222],{"class":30,"line":1388},[28,81223,81224],{"class":34},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[28,81226,81227],{"class":30,"line":1394},[28,81228,81229],{"class":34},"    \u002F\u002F prev是累计值\n",[28,81231,81232],{"class":30,"line":1406},[28,81233,81234],{"class":34},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[28,81236,81237],{"class":30,"line":1689},[28,81238,81239],{"class":34},"    console.log(total)\n",[28,81241,81242],{"class":30,"line":1694},[28,81243,81244],{"class":34},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[28,81246,81247],{"class":30,"line":1700},[28,81248,81249],{"class":34},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[28,81251,81252],{"class":30,"line":1705},[28,81253,81244],{"class":34},[28,81255,81256],{"class":30,"line":1719},[28,81257,81258],{"class":34},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[28,81260,81261],{"class":30,"line":1724},[28,81262,81244],{"class":34},[28,81264,81265],{"class":30,"line":1730},[28,81266,81267],{"class":34},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[28,81269,81270,81272,81274],{"class":30,"line":1751},[28,81271,52492],{"class":34},[28,81273,51888],{"class":51375},[28,81275,51382],{"class":34},[28,81277,81278,81280,81282],{"class":30,"line":1756},[28,81279,51860],{"class":34},[28,81281,51875],{"class":51375},[28,81283,51382],{"class":34},[22987,81285,81287],{"id":81286},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81289,81290],{},[1539,81291],{"alt":23,"src":81292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81294,81295],{},[1539,81296],{"alt":23,"src":81297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[171,81299,81300],{},[174,81301,81302],{},"find()",[14,81304,81305],{},"循环查找，找到第一个就ok",[14,81307,81308],{},[35,81309,81312],{"href":81310,"rel":81311},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23942],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[18,81314,81316],{"className":50708,"code":81315,"language":50710,"meta":23,"style":23},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[25,81317,81318,81323,81328],{"__ignoreMap":23},[28,81319,81320],{"class":30,"line":31},[28,81321,81322],{"class":34},"const array1 = [5, 12, 8, 130, 44]\n",[28,81324,81325],{"class":30,"line":94},[28,81326,81327],{"class":34},"const found = array1.find((element) => element > 10)\n",[28,81329,81330],{"class":30,"line":109},[28,81331,81332],{"class":34},"console.log(found)  \u002F\u002F12\n",[14,81334,81335,81337,81338,81343,81344,81347,81348,81350,81351,81356,81357,81359,81360,81362,81363,81365,81366],{},[25,81336,81302],{}," 方法是一个",[35,81339,81342],{"href":81340,"rel":81341},"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",[23942],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[25,81345,81346],{},"callbackFn"," 函数，直到 ",[25,81349,81346],{}," 返回一个",[35,81352,81355],{"href":81353,"rel":81354},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23942],"真值","。然后 ",[25,81358,81302],{}," 返回该元素并停止迭代数组。如果 ",[25,81361,81346],{}," 从未返回真值，则 ",[25,81364,81302],{}," 返回 ",[25,81367,81368],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[18,81370,81372],{"className":53142,"code":81371,"language":53144,"meta":23,"style":23},"\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",[25,81373,81374,81382,81390,81395,81400,81405,81409,81414,81419,81423,81428,81433,81437,81441,81446,81451,81455,81459,81464,81469,81474,81479,81484,81488,81493,81498,81503,81508,81512,81517,81525],{"__ignoreMap":23},[28,81375,81376,81378,81380],{"class":30,"line":31},[28,81377,99],{"class":34},[28,81379,51875],{"class":51375},[28,81381,51382],{"class":34},[28,81383,81384,81386,81388],{"class":30,"line":94},[28,81385,52219],{"class":34},[28,81387,51888],{"class":51375},[28,81389,51382],{"class":34},[28,81391,81392],{"class":30,"line":109},[28,81393,81394],{"class":34},"    const arr = ['red', 'blue', 'green']\n",[28,81396,81397],{"class":30,"line":125},[28,81398,81399],{"class":34},"    const found = arr.find(item => item === 'pink')\n",[28,81401,81402],{"class":30,"line":131},[28,81403,81404],{"class":34},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[28,81406,81407],{"class":30,"line":1291},[28,81408,2477],{"emptyLinePlaceholder":144},[28,81410,81411],{"class":30,"line":1297},[28,81412,81413],{"class":34},"    \u002F\u002F 使用场景，用于查找数据\n",[28,81415,81416],{"class":30,"line":1388},[28,81417,81418],{"class":34},"    const arr1 = [\n",[28,81420,81421],{"class":30,"line":1394},[28,81422,79461],{"class":34},[28,81424,81425],{"class":30,"line":1406},[28,81426,81427],{"class":34},"        name: '小米',\n",[28,81429,81430],{"class":30,"line":1689},[28,81431,81432],{"class":34},"        price: 1999\n",[28,81434,81435],{"class":30,"line":1694},[28,81436,77967],{"class":34},[28,81438,81439],{"class":30,"line":1700},[28,81440,79461],{"class":34},[28,81442,81443],{"class":30,"line":1705},[28,81444,81445],{"class":34},"        name: '华为',\n",[28,81447,81448],{"class":30,"line":1719},[28,81449,81450],{"class":34},"        price: 3999\n",[28,81452,81453],{"class":30,"line":1724},[28,81454,52473],{"class":34},[28,81456,81457],{"class":30,"line":1730},[28,81458,53184],{"class":34},[28,81460,81461],{"class":30,"line":1751},[28,81462,81463],{"class":34},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[28,81465,81466],{"class":30,"line":1756},[28,81467,81468],{"class":34},"    \u002F\u002F const found1 = arr1.find(item => {\n",[28,81470,81471],{"class":30,"line":1770},[28,81472,81473],{"class":34},"    \u002F\u002F   if (item.name === '小米') {\n",[28,81475,81476],{"class":30,"line":1775},[28,81477,81478],{"class":34},"    \u002F\u002F     return item\n",[28,81480,81481],{"class":30,"line":1804},[28,81482,81483],{"class":34},"    \u002F\u002F   }\n",[28,81485,81486],{"class":30,"line":1809},[28,81487,63365],{"class":34},[28,81489,81490],{"class":30,"line":1826},[28,81491,81492],{"class":34},"    \u002F\u002F 另一种写法\n",[28,81494,81495],{"class":30,"line":1831},[28,81496,81497],{"class":34},"    const found1 = arr1.find(item => {\n",[28,81499,81500],{"class":30,"line":1836},[28,81501,81502],{"class":34},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[28,81504,81505],{"class":30,"line":1841},[28,81506,81507],{"class":34},"      return item.name = '小米'\n",[28,81509,81510],{"class":30,"line":1855},[28,81511,33537],{"class":34},[28,81513,81514],{"class":30,"line":1860},[28,81515,81516],{"class":34},"    console.log(found1)\n",[28,81518,81519,81521,81523],{"class":30,"line":2654},[28,81520,52492],{"class":34},[28,81522,51888],{"class":51375},[28,81524,51382],{"class":34},[28,81526,81527,81529,81531],{"class":30,"line":2668},[28,81528,51860],{"class":34},[28,81530,51875],{"class":51375},[28,81532,51382],{"class":34},[14,81534,81535],{},[1539,81536],{"alt":23,"src":81537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81539,81540],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[171,81542,81543],{"start":94},[174,81544,81545],{},"every()返回的是布尔值",[14,81547,81548],{},[35,81549,81552],{"href":81550,"rel":81551},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23942],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81554,81555],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81557,81558],{},"some是只有有一个就没问题",[14,81560,81561],{},"every是必须全是才行",[18,81563,81567],{"className":81564,"code":81565,"language":81566,"meta":23,"style":23},"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",[25,81568,81569,81585,81599,81603,81612],{"__ignoreMap":23},[28,81570,81571,81573,81576,81578,81580,81583],{"class":30,"line":31},[28,81572,54524],{"class":38},[28,81574,81575],{"class":34}," isBigEnough(element, ",[28,81577,74133],{"class":38},[28,81579,12512],{"class":34},[28,81581,81582],{"class":38},"array",[28,81584,12519],{"class":34},[28,81586,81587,81590,81593,81595,81597],{"class":30,"line":94},[28,81588,81589],{"class":38},"  return",[28,81591,81592],{"class":34}," element ",[28,81594,1787],{"class":38},[28,81596,2115],{"class":45},[28,81598,1367],{"class":34},[28,81600,81601],{"class":30,"line":109},[28,81602,1642],{"class":34},[28,81604,81605,81608,81610],{"class":30,"line":125},[28,81606,81607],{"class":34},"[12, 5, 8, 130, 44].every(isBigEnough); ",[28,81609,33405],{"class":38},[28,81611,54591],{"class":34},[28,81613,81614,81617,81619],{"class":30,"line":131},[28,81615,81616],{"class":34},"[12, 54, 18, 130, 44].every(isBigEnough); ",[28,81618,33405],{"class":38},[28,81620,58015],{"class":34},[18,81622,81624],{"className":53142,"code":81623,"language":53144,"meta":23,"style":23},"\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",[25,81625,81626,81634,81642,81647,81651,81656,81661,81669],{"__ignoreMap":23},[28,81627,81628,81630,81632],{"class":30,"line":31},[28,81629,99],{"class":34},[28,81631,51875],{"class":51375},[28,81633,51382],{"class":34},[28,81635,81636,81638,81640],{"class":30,"line":94},[28,81637,52219],{"class":34},[28,81639,51888],{"class":51375},[28,81641,51382],{"class":34},[28,81643,81644],{"class":30,"line":109},[28,81645,81646],{"class":34},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[28,81648,81649],{"class":30,"line":125},[28,81650,78397],{"class":34},[28,81652,81653],{"class":30,"line":131},[28,81654,81655],{"class":34},"    const flag = arr.every(item => item >= 10)\n",[28,81657,81658],{"class":30,"line":1291},[28,81659,81660],{"class":34},"    console.log(flag)    \u002F\u002Ftrue\n",[28,81662,81663,81665,81667],{"class":30,"line":1297},[28,81664,52492],{"class":34},[28,81666,51888],{"class":51375},[28,81668,51382],{"class":34},[28,81670,81671,81673,81675],{"class":30,"line":1388},[28,81672,51860],{"class":34},[28,81674,51875],{"class":51375},[28,81676,51382],{"class":34},[18,81678,81680],{"className":53142,"code":81679,"language":53144,"meta":23,"style":23},"\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",[25,81681,81682,81690,81698,81702,81707,81712,81717,81725],{"__ignoreMap":23},[28,81683,81684,81686,81688],{"class":30,"line":31},[28,81685,99],{"class":34},[28,81687,51875],{"class":51375},[28,81689,51382],{"class":34},[28,81691,81692,81694,81696],{"class":30,"line":94},[28,81693,52219],{"class":34},[28,81695,51888],{"class":51375},[28,81697,51382],{"class":34},[28,81699,81700],{"class":30,"line":109},[28,81701,81646],{"class":34},[28,81703,81704],{"class":30,"line":125},[28,81705,81706],{"class":34},"    const arr = [10, 0, 5]\n",[28,81708,81709],{"class":30,"line":131},[28,81710,81711],{"class":34},"    const flag = arr.some(item => item >= 10)\n",[28,81713,81714],{"class":30,"line":1291},[28,81715,81716],{"class":34},"    console.log(flag)   \u002F\u002Ftrue\n",[28,81718,81719,81721,81723],{"class":30,"line":1297},[28,81720,52492],{"class":34},[28,81722,51888],{"class":51375},[28,81724,51382],{"class":34},[28,81726,81727,81729,81731],{"class":30,"line":1388},[28,81728,51860],{"class":34},[28,81730,51875],{"class":51375},[28,81732,51382],{"class":34},[22987,81734,81736],{"id":81735},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81738,81739],{},[1539,81740],{"alt":23,"src":81741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[18,81743,81745],{"className":50708,"code":81744,"language":50710,"meta":23,"style":23},"\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",[25,81746,81747,81757,81771,81775,81783,81797,81817,81829,81837,81844,81856,81868,81880,81892,81902,81912,81916,81924,81932,81936,81944,81956,81964,81986,81991,81996,82029,82037,82045,82049],{"__ignoreMap":23},[28,81748,81749,81751,81753,81755],{"class":30,"line":31},[28,81750,51372],{"class":34},[28,81752,51376],{"class":51375},[28,81754,51379],{"class":2040},[28,81756,51382],{"class":34},[28,81758,81759,81761,81763,81765,81767,81769],{"class":30,"line":94},[28,81760,99],{"class":34},[28,81762,50710],{"class":51375},[28,81764,51391],{"class":2040},[28,81766,39],{"class":34},[28,81768,51396],{"class":320},[28,81770,51382],{"class":34},[28,81772,81773],{"class":30,"line":109},[28,81774,2477],{"emptyLinePlaceholder":144},[28,81776,81777,81779,81781],{"class":30,"line":125},[28,81778,99],{"class":34},[28,81780,51409],{"class":51375},[28,81782,51382],{"class":34},[28,81784,81785,81787,81789,81791,81793,81795],{"class":30,"line":131},[28,81786,52219],{"class":34},[28,81788,51419],{"class":51375},[28,81790,51422],{"class":2040},[28,81792,39],{"class":34},[28,81794,51427],{"class":320},[28,81796,51382],{"class":34},[28,81798,81799,81801,81803,81805,81807,81809,81811,81813,81815],{"class":30,"line":1291},[28,81800,52219],{"class":34},[28,81802,51419],{"class":51375},[28,81804,14997],{"class":2040},[28,81806,39],{"class":34},[28,81808,51466],{"class":320},[28,81810,51446],{"class":2040},[28,81812,39],{"class":34},[28,81814,51473],{"class":320},[28,81816,51382],{"class":34},[28,81818,81819,81821,81823,81825,81827],{"class":30,"line":1297},[28,81820,52219],{"class":34},[28,81822,51482],{"class":51375},[28,81824,51485],{"class":34},[28,81826,51482],{"class":51375},[28,81828,51382],{"class":34},[28,81830,81831,81833,81835],{"class":30,"line":1388},[28,81832,52219],{"class":34},[28,81834,136],{"class":51375},[28,81836,51382],{"class":34},[28,81838,81839,81842],{"class":30,"line":1394},[28,81840,81841],{"class":51375},"    div",[28,81843,15649],{"class":34},[28,81845,81846,81848,81850,81852,81854],{"class":30,"line":1406},[28,81847,54846],{"class":45},[28,81849,51512],{"class":34},[28,81851,1799],{"class":45},[28,81853,51567],{"class":38},[28,81855,1367],{"class":34},[28,81857,81858,81860,81862,81864,81866],{"class":30,"line":1689},[28,81859,54860],{"class":45},[28,81861,51512],{"class":34},[28,81863,614],{"class":45},[28,81865,51567],{"class":38},[28,81867,1367],{"class":34},[28,81869,81870,81872,81874,81876,81878],{"class":30,"line":1694},[28,81871,57434],{"class":45},[28,81873,51512],{"class":34},[28,81875,614],{"class":45},[28,81877,51567],{"class":38},[28,81879,1367],{"class":34},[28,81881,81882,81884,81886,81888,81890],{"class":30,"line":1700},[28,81883,65208],{"class":45},[28,81885,51512],{"class":34},[28,81887,68],{"class":45},[28,81889,51567],{"class":38},[28,81891,1367],{"class":34},[28,81893,81894,81896,81898,81900],{"class":30,"line":1705},[28,81895,57361],{"class":45},[28,81897,51512],{"class":34},[28,81899,51667],{"class":45},[28,81901,1367],{"class":34},[28,81903,81904,81906,81908,81910],{"class":30,"line":1719},[28,81905,54959],{"class":45},[28,81907,51512],{"class":34},[28,81909,51720],{"class":45},[28,81911,1367],{"class":34},[28,81913,81914],{"class":30,"line":1724},[28,81915,2264],{"class":34},[28,81917,81918,81920,81922],{"class":30,"line":1730},[28,81919,52492],{"class":34},[28,81921,136],{"class":51375},[28,81923,51382],{"class":34},[28,81925,81926,81928,81930],{"class":30,"line":1751},[28,81927,51860],{"class":34},[28,81929,51409],{"class":51375},[28,81931,51382],{"class":34},[28,81933,81934],{"class":30,"line":1756},[28,81935,2477],{"emptyLinePlaceholder":144},[28,81937,81938,81940,81942],{"class":30,"line":1770},[28,81939,99],{"class":34},[28,81941,51875],{"class":51375},[28,81943,51382],{"class":34},[28,81945,81946,81948,81950,81952,81954],{"class":30,"line":1775},[28,81947,52219],{"class":34},[28,81949,51686],{"class":51375},[28,81951,55389],{"class":34},[28,81953,51686],{"class":51375},[28,81955,51382],{"class":34},[28,81957,81958,81960,81962],{"class":30,"line":1804},[28,81959,52219],{"class":34},[28,81961,51888],{"class":51375},[28,81963,51382],{"class":34},[28,81965,81966,81968,81971,81973,81976,81979,81981,81984],{"class":30,"line":1809},[28,81967,11298],{"class":38},[28,81969,81970],{"class":45}," spec",[28,81972,13641],{"class":38},[28,81974,81975],{"class":34}," { size: ",[28,81977,81978],{"class":320},"'40cm*40cm'",[28,81980,55539],{"class":34},[28,81982,81983],{"class":320},"'黑色'",[28,81985,55679],{"class":34},[28,81987,81988],{"class":30,"line":1826},[28,81989,81990],{"class":105},"    \u002F\u002F const arr = Object.values(spec)\n",[28,81992,81993],{"class":30,"line":1831},[28,81994,81995],{"class":105},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[28,81997,81998,82000,82002,82004,82007,82009,82011,82014,82017,82020,82022,82024,82027],{"class":30,"line":1836},[28,81999,52482],{"class":34},[28,82001,54474],{"class":2040},[28,82003,221],{"class":34},[28,82005,82006],{"class":320},"'div'",[28,82008,74324],{"class":34},[28,82010,39],{"class":38},[28,82012,82013],{"class":34}," Object.",[28,82015,82016],{"class":2040},"values",[28,82018,82019],{"class":34},"(spec).",[28,82021,74298],{"class":2040},[28,82023,221],{"class":34},[28,82025,82026],{"class":320},"'\u002F'",[28,82028,227],{"class":34},[28,82030,82031,82033,82035],{"class":30,"line":1841},[28,82032,52492],{"class":34},[28,82034,51888],{"class":51375},[28,82036,51382],{"class":34},[28,82038,82039,82041,82043],{"class":30,"line":1855},[28,82040,51860],{"class":34},[28,82042,51875],{"class":51375},[28,82044,51382],{"class":34},[28,82046,82047],{"class":30,"line":1860},[28,82048,2477],{"emptyLinePlaceholder":144},[28,82050,82051,82053,82055],{"class":30,"line":2654},[28,82052,51860],{"class":34},[28,82054,50710],{"class":51375},[28,82056,51382],{"class":34},[14,82058,82059],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22987,82061,82063],{"id":82062},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82065,82066],{},"静态方法，将伪数组转换为真数组",[14,82068,82069],{},[1539,82070],{"alt":23,"src":82071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[18,82073,82075],{"className":53142,"code":82074,"language":53144,"meta":23,"style":23},"\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",[25,82076,82077,82085,82093,82105,82117,82129,82137,82145,82150,82155,82160,82165,82173],{"__ignoreMap":23},[28,82078,82079,82081,82083],{"class":30,"line":31},[28,82080,99],{"class":34},[28,82082,51875],{"class":51375},[28,82084,51382],{"class":34},[28,82086,82087,82089,82091],{"class":30,"line":94},[28,82088,52219],{"class":34},[28,82090,1211],{"class":51375},[28,82092,51382],{"class":34},[28,82094,82095,82097,82099,82101,82103],{"class":30,"line":109},[28,82096,51416],{"class":34},[28,82098,174],{"class":51375},[28,82100,55389],{"class":34},[28,82102,174],{"class":51375},[28,82104,51382],{"class":34},[28,82106,82107,82109,82111,82113,82115],{"class":30,"line":125},[28,82108,51416],{"class":34},[28,82110,174],{"class":51375},[28,82112,55389],{"class":34},[28,82114,174],{"class":51375},[28,82116,51382],{"class":34},[28,82118,82119,82121,82123,82125,82127],{"class":30,"line":131},[28,82120,51416],{"class":34},[28,82122,174],{"class":51375},[28,82124,55389],{"class":34},[28,82126,174],{"class":51375},[28,82128,51382],{"class":34},[28,82130,82131,82133,82135],{"class":30,"line":1291},[28,82132,52492],{"class":34},[28,82134,1211],{"class":51375},[28,82136,51382],{"class":34},[28,82138,82139,82141,82143],{"class":30,"line":1297},[28,82140,52219],{"class":34},[28,82142,51888],{"class":51375},[28,82144,51382],{"class":34},[28,82146,82147],{"class":30,"line":1388},[28,82148,82149],{"class":34},"    const lis = document.querySelectorAll('li')\n",[28,82151,82152],{"class":30,"line":1394},[28,82153,82154],{"class":34},"    const liss = Array.from(lis)\n",[28,82156,82157],{"class":30,"line":1406},[28,82158,82159],{"class":34},"    liss.pop()\n",[28,82161,82162],{"class":30,"line":1689},[28,82163,82164],{"class":34},"    console.log(liss)\n",[28,82166,82167,82169,82171],{"class":30,"line":1694},[28,82168,52492],{"class":34},[28,82170,51888],{"class":51375},[28,82172,51382],{"class":34},[28,82174,82175,82177,82179],{"class":30,"line":1700},[28,82176,51860],{"class":34},[28,82178,51875],{"class":51375},[28,82180,51382],{"class":34},[14,82182,82183],{},[1539,82184],{"alt":23,"src":82185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22075,82187,82189],{"id":82188},"_41053-string","4.10.5.3 String",[14,82191,82192],{},[1539,82193],{"alt":23,"src":82194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22987,82196,82198],{"id":82197},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[18,82200,82202],{"className":53142,"code":82201,"language":53144,"meta":23,"style":23},"\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",[25,82203,82204,82212,82220,82225,82230,82235,82239,82244,82249,82254,82262],{"__ignoreMap":23},[28,82205,82206,82208,82210],{"class":30,"line":31},[28,82207,99],{"class":34},[28,82209,51875],{"class":51375},[28,82211,51382],{"class":34},[28,82213,82214,82216,82218],{"class":30,"line":94},[28,82215,52219],{"class":34},[28,82217,51888],{"class":51375},[28,82219,51382],{"class":34},[28,82221,82222],{"class":30,"line":109},[28,82223,82224],{"class":34},"    \u002F\u002F 把字符串转化为数组\n",[28,82226,82227],{"class":30,"line":125},[28,82228,82229],{"class":34},"    const str = 'pink,red'\n",[28,82231,82232],{"class":30,"line":131},[28,82233,82234],{"class":34},"    const arr = str.split(',')\n",[28,82236,82237],{"class":30,"line":1291},[28,82238,80713],{"class":34},[28,82240,82241],{"class":30,"line":1297},[28,82242,82243],{"class":34},"    const str1 = '2025-8-25'\n",[28,82245,82246],{"class":30,"line":1388},[28,82247,82248],{"class":34},"    const arr1 = str1.split('-')\n",[28,82250,82251],{"class":30,"line":1394},[28,82252,82253],{"class":34},"    console.log(arr1)\n",[28,82255,82256,82258,82260],{"class":30,"line":1406},[28,82257,52492],{"class":34},[28,82259,51888],{"class":51375},[28,82261,51382],{"class":34},[28,82263,82264,82266,82268],{"class":30,"line":1689},[28,82265,51860],{"class":34},[28,82267,51875],{"class":51375},[28,82269,51382],{"class":34},[22987,82271,82273],{"id":82272},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82275,5258],{},[14,82277,82278],{},"substring(indexStart)",[14,82280,82281],{},"substring(indexStart, indexEnd)",[1211,82283,82284,82295,82307,82317],{},[174,82285,82286,82287,82290,82291,82294],{},"如果省略了 ",[25,82288,82289],{},"indexEnd","，则 ",[25,82292,82293],{},"substring()"," 提取字符直到字符串的末尾",[174,82296,82297,82298,82301,82302,82290,82304,82306],{},"如果 ",[25,82299,82300],{},"indexStart"," 等于 ",[25,82303,82289],{},[25,82305,82293],{}," 返回一个空字符串",[174,82308,82297,82309,82311,82312,82290,82314,82316],{},[25,82310,82300],{}," 大于 ",[25,82313,82289],{},[25,82315,82293],{}," 的效果就像交换了这两个参数一样",[174,82318,82319],{},"结束的索引号不包含想要截取的部分",[18,82321,82323],{"className":81564,"code":82322,"language":81566,"meta":23,"style":23},"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",[25,82324,82325,82337,82341,82375,82405,82409,82440,82444,82471,82501,82531,82535,82566],{"__ignoreMap":23},[28,82326,82327,82330,82332,82335],{"class":30,"line":31},[28,82328,82329],{"class":34},"const anyString ",[28,82331,39],{"class":38},[28,82333,82334],{"class":320}," \"Mozilla\"",[28,82336,1367],{"class":34},[28,82338,82339],{"class":30,"line":94},[28,82340,2477],{"emptyLinePlaceholder":144},[28,82342,82343,82346,82348,82350,82352,82355,82357,82360,82362,82364,82366,82368,82370,82372],{"class":30,"line":109},[28,82344,82345],{"class":45},"console",[28,82347,768],{"class":34},[28,82349,58322],{"class":45},[28,82351,221],{"class":34},[28,82353,82354],{"class":45},"anyString",[28,82356,768],{"class":34},[28,82358,82359],{"class":45},"substring",[28,82361,221],{"class":34},[28,82363,407],{"class":45},[28,82365,12512],{"class":34},[28,82367,46],{"class":45},[28,82369,75328],{"class":34},[28,82371,33405],{"class":38},[28,82373,82374],{"class":320}," 'M'\n",[28,82376,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403],{"class":30,"line":125},[28,82378,82345],{"class":45},[28,82380,768],{"class":34},[28,82382,58322],{"class":45},[28,82384,221],{"class":34},[28,82386,82354],{"class":45},[28,82388,768],{"class":34},[28,82390,82359],{"class":45},[28,82392,221],{"class":34},[28,82394,46],{"class":45},[28,82396,12512],{"class":34},[28,82398,407],{"class":45},[28,82400,75328],{"class":34},[28,82402,33405],{"class":38},[28,82404,82374],{"class":320},[28,82406,82407],{"class":30,"line":131},[28,82408,2477],{"emptyLinePlaceholder":144},[28,82410,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437],{"class":30,"line":1291},[28,82412,82345],{"class":45},[28,82414,768],{"class":34},[28,82416,58322],{"class":45},[28,82418,221],{"class":34},[28,82420,82354],{"class":45},[28,82422,768],{"class":34},[28,82424,82359],{"class":45},[28,82426,221],{"class":34},[28,82428,407],{"class":45},[28,82430,12512],{"class":34},[28,82432,558],{"class":45},[28,82434,75328],{"class":34},[28,82436,33405],{"class":38},[28,82438,82439],{"class":320}," 'Mozill'\n",[28,82441,82442],{"class":30,"line":1297},[28,82443,2477],{"emptyLinePlaceholder":144},[28,82445,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464,82466,82468],{"class":30,"line":1388},[28,82447,82345],{"class":45},[28,82449,768],{"class":34},[28,82451,58322],{"class":45},[28,82453,221],{"class":34},[28,82455,82354],{"class":45},[28,82457,768],{"class":34},[28,82459,82359],{"class":45},[28,82461,221],{"class":34},[28,82463,507],{"class":45},[28,82465,75328],{"class":34},[28,82467,33405],{"class":38},[28,82469,82470],{"class":320}," 'lla'\n",[28,82472,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499],{"class":30,"line":1394},[28,82474,82345],{"class":45},[28,82476,768],{"class":34},[28,82478,58322],{"class":45},[28,82480,221],{"class":34},[28,82482,82354],{"class":45},[28,82484,768],{"class":34},[28,82486,82359],{"class":45},[28,82488,221],{"class":34},[28,82490,507],{"class":45},[28,82492,12512],{"class":34},[28,82494,583],{"class":45},[28,82496,75384],{"class":34},[28,82498,33405],{"class":38},[28,82500,82470],{"class":320},[28,82502,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529],{"class":30,"line":1406},[28,82504,82345],{"class":45},[28,82506,768],{"class":34},[28,82508,58322],{"class":45},[28,82510,221],{"class":34},[28,82512,82354],{"class":45},[28,82514,768],{"class":34},[28,82516,82359],{"class":45},[28,82518,221],{"class":34},[28,82520,583],{"class":45},[28,82522,12512],{"class":34},[28,82524,507],{"class":45},[28,82526,75328],{"class":34},[28,82528,33405],{"class":38},[28,82530,82470],{"class":320},[28,82532,82533],{"class":30,"line":1689},[28,82534,2477],{"emptyLinePlaceholder":144},[28,82536,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563],{"class":30,"line":1694},[28,82538,82345],{"class":45},[28,82540,768],{"class":34},[28,82542,58322],{"class":45},[28,82544,221],{"class":34},[28,82546,82354],{"class":45},[28,82548,768],{"class":34},[28,82550,82359],{"class":45},[28,82552,221],{"class":34},[28,82554,407],{"class":45},[28,82556,12512],{"class":34},[28,82558,583],{"class":45},[28,82560,75328],{"class":34},[28,82562,33405],{"class":38},[28,82564,82565],{"class":320}," 'Mozilla'\n",[28,82567,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592,82594],{"class":30,"line":1700},[28,82569,82345],{"class":45},[28,82571,768],{"class":34},[28,82573,58322],{"class":45},[28,82575,221],{"class":34},[28,82577,82354],{"class":45},[28,82579,768],{"class":34},[28,82581,82359],{"class":45},[28,82583,221],{"class":34},[28,82585,407],{"class":45},[28,82587,12512],{"class":34},[28,82589,659],{"class":45},[28,82591,75328],{"class":34},[28,82593,33405],{"class":38},[28,82595,82565],{"class":320},[22987,82597,82599],{"id":82598},"_410533-startswith","4.10.5.3.3 startsWith",[14,82601,82602,82605,82606,82611,82612,82614,82615],{},[25,82603,82604],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[365,82607,82608],{},[25,82609,82610],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[25,82613,1439],{}," 或 ",[25,82616,66095],{},[18,82618,82620],{"className":77570,"code":82619,"language":77572,"meta":23,"style":23},"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",[25,82621,82622,82634,82653,82658,82678],{"__ignoreMap":23},[28,82623,82624,82626,82629,82631],{"class":30,"line":31},[28,82625,6869],{"class":38},[28,82627,82628],{"class":34}," str1 ",[28,82630,39],{"class":38},[28,82632,82633],{"class":320}," \"Saturday night plans\"\n",[28,82635,82636,82638,82640,82643,82646,82648,82651],{"class":30,"line":94},[28,82637,77607],{"class":34},[28,82639,58322],{"class":2040},[28,82641,82642],{"class":34},"(str1.",[28,82644,82645],{"class":2040},"startsWith",[28,82647,221],{"class":34},[28,82649,82650],{"class":320},"\"Sat\"",[28,82652,30573],{"class":34},[28,82654,82655],{"class":30,"line":109},[28,82656,82657],{"class":105},"\u002F\u002F Expected output: true\n",[28,82659,82660,82662,82664,82666,82668,82670,82672,82674,82676],{"class":30,"line":125},[28,82661,77607],{"class":34},[28,82663,58322],{"class":2040},[28,82665,82642],{"class":34},[28,82667,82645],{"class":2040},[28,82669,221],{"class":34},[28,82671,82650],{"class":320},[28,82673,12512],{"class":34},[28,82675,57],{"class":45},[28,82677,30573],{"class":34},[28,82679,82680],{"class":30,"line":131},[28,82681,82682],{"class":105},"\u002F\u002F Expected output: false\n",[18,82684,82686],{"className":50708,"code":82685,"language":50710,"meta":23,"style":23},"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",[25,82687,82688,82693,82698,82702,82707,82712],{"__ignoreMap":23},[28,82689,82690],{"class":30,"line":31},[28,82691,82692],{"class":34},"startsWith(searchString)\n",[28,82694,82695],{"class":30,"line":94},[28,82696,82697],{"class":34},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[28,82699,82700],{"class":30,"line":109},[28,82701,2477],{"emptyLinePlaceholder":144},[28,82703,82704],{"class":30,"line":125},[28,82705,82706],{"class":34},"const str3 = 'pink老师上课中'\n",[28,82708,82709],{"class":30,"line":131},[28,82710,82711],{"class":34},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[28,82713,82714],{"class":30,"line":1291},[28,82715,82716],{"class":34},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22987,82718,82720],{"id":82719},"_410534-includes","4.10.5.3.4 includes",[14,82722,82723],{},"includes(searchString) includes(searchString, position)",[171,82725,82726],{},[174,82727,82728],{},"searchString:",[14,82730,82731,82732,82734,82735,82740,82741,82746,82747,21577,82750,82753,82754,82757],{},"一个要在 ",[25,82733,1376],{}," 中查找的字符串。",[35,82736,82739],{"href":82737,"rel":82738},"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",[23942],"不能是正则表达式","。所有非正则表达式的值都会被",[35,82742,82745],{"href":82743,"rel":82744},"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",[23942],"强制转换为字符串","，因此如果该参数被省略或传入 ",[25,82748,82749],{},"undefined",[25,82751,82752],{},"includes()"," 方法会在字符串中搜索 ",[25,82755,82756],{},"\"undefined\"","，这通常不是你想要的",[171,82759,82760],{"start":94},[174,82761,82762,1065],{},[25,82763,82764],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82766,82767,82768,82771,82772],{},"在字符串中开始搜索 ",[25,82769,82770],{},"searchString"," 的位置。默认值为 ",[25,82773,407],{},[171,82775,82776],{"start":109},[174,82777,82778],{},"返回值：",[14,82780,82781,82782,82784,82785,82789,82790],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[25,82783,82770],{}," 为空字符串的情况），则返回 ",[365,82786,82787],{},[25,82788,1439],{}," ，否则返回 ",[365,82791,82792],{},[25,82793,66095],{},[171,82795,82796],{"start":125},[174,82797,82798],{},"异常：",[14,82800,82297,82801,13872,82803,82807],{},[25,82802,82770],{},[35,82804,82806],{"href":82737,"rel":82805},[23942],"是一个正则表达式","，则会抛出",[14,82809,82810],{},"只要是有就是true，不需要非得以谁开头结尾",[18,82812,82814],{"className":77570,"code":82813,"language":77572,"meta":23,"style":23},"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",[25,82815,82816,82827,82850,82869,82889,82911,82930],{"__ignoreMap":23},[28,82817,82818,82820,82822,82824],{"class":30,"line":31},[28,82819,6869],{"class":38},[28,82821,79850],{"class":34},[28,82823,39],{"class":38},[28,82825,82826],{"class":320}," \"To be, or not to be, that is the question.\"\n",[28,82828,82829,82831,82833,82836,82839,82841,82844,82847],{"class":30,"line":94},[28,82830,77607],{"class":34},[28,82832,58322],{"class":2040},[28,82834,82835],{"class":34},"(str.",[28,82837,82838],{"class":2040},"includes",[28,82840,221],{"class":34},[28,82842,82843],{"class":320},"\"To be\"",[28,82845,82846],{"class":34},"))",[28,82848,82849],{"class":105},"  \u002F\u002F true\n",[28,82851,82852,82854,82856,82858,82860,82862,82865,82867],{"class":30,"line":109},[28,82853,77607],{"class":34},[28,82855,58322],{"class":2040},[28,82857,82835],{"class":34},[28,82859,82838],{"class":2040},[28,82861,221],{"class":34},[28,82863,82864],{"class":320},"\"question\"",[28,82866,82846],{"class":34},[28,82868,82849],{"class":105},[28,82870,82871,82873,82875,82877,82879,82881,82884,82886],{"class":30,"line":125},[28,82872,77607],{"class":34},[28,82874,58322],{"class":2040},[28,82876,82835],{"class":34},[28,82878,82838],{"class":2040},[28,82880,221],{"class":34},[28,82882,82883],{"class":320},"\"nonexistent\"",[28,82885,82846],{"class":34},[28,82887,82888],{"class":105},"  \u002F\u002F false\n",[28,82890,82891,82893,82895,82897,82899,82901,82903,82905,82907,82909],{"class":30,"line":131},[28,82892,77607],{"class":34},[28,82894,58322],{"class":2040},[28,82896,82835],{"class":34},[28,82898,82838],{"class":2040},[28,82900,221],{"class":34},[28,82902,82843],{"class":320},[28,82904,12512],{"class":34},[28,82906,46],{"class":45},[28,82908,82846],{"class":34},[28,82910,82888],{"class":105},[28,82912,82913,82915,82917,82919,82921,82923,82926,82928],{"class":30,"line":1291},[28,82914,77607],{"class":34},[28,82916,58322],{"class":2040},[28,82918,82835],{"class":34},[28,82920,82838],{"class":2040},[28,82922,221],{"class":34},[28,82924,82925],{"class":320},"\"TO BE\"",[28,82927,82846],{"class":34},[28,82929,82888],{"class":105},[28,82931,82932,82934,82936,82938,82940,82942,82944,82946],{"class":30,"line":1297},[28,82933,77607],{"class":34},[28,82935,58322],{"class":2040},[28,82937,82835],{"class":34},[28,82939,82838],{"class":2040},[28,82941,221],{"class":34},[28,82943,7729],{"class":320},[28,82945,82846],{"class":34},[28,82947,82849],{"class":105},[22987,82949,82951],{"id":82950},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[18,82953,82955],{"className":53142,"code":82954,"language":53144,"meta":23,"style":23},"\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",[25,82956,82957,82965,82973,82978,82983,82988,82993,82998,83006],{"__ignoreMap":23},[28,82958,82959,82961,82963],{"class":30,"line":31},[28,82960,99],{"class":34},[28,82962,51875],{"class":51375},[28,82964,51382],{"class":34},[28,82966,82967,82969,82971],{"class":30,"line":94},[28,82968,52219],{"class":34},[28,82970,51888],{"class":51375},[28,82972,51382],{"class":34},[28,82974,82975],{"class":30,"line":109},[28,82976,82977],{"class":34},"    const num = 10\n",[28,82979,82980],{"class":30,"line":125},[28,82981,82982],{"class":34},"    \u002F\u002F 强制转换\n",[28,82984,82985],{"class":30,"line":131},[28,82986,82987],{"class":34},"    console.log(String(num))\n",[28,82989,82990],{"class":30,"line":1291},[28,82991,82992],{"class":34},"    \u002F\u002F toString()方法转换\n",[28,82994,82995],{"class":30,"line":1297},[28,82996,82997],{"class":34},"    console.log(num.toString())\n",[28,82999,83000,83002,83004],{"class":30,"line":1388},[28,83001,52492],{"class":34},[28,83003,51888],{"class":51375},[28,83005,51382],{"class":34},[28,83007,83008,83010,83012],{"class":30,"line":1394},[28,83009,51860],{"class":34},[28,83011,51875],{"class":51375},[28,83013,51382],{"class":34},[22987,83015,83017],{"id":83016},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83019,83020],{},[1539,83021],{"alt":23,"src":83022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[18,83024,83026],{"className":50708,"code":83025,"language":50710,"meta":23,"style":23},"\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",[25,83027,83028,83038,83052,83056,83064,83078,83098,83110,83118,83122,83130,83142,83150,83162,83167,83172,83177,83224,83240,83248,83256,83260],{"__ignoreMap":23},[28,83029,83030,83032,83034,83036],{"class":30,"line":31},[28,83031,51372],{"class":34},[28,83033,51376],{"class":51375},[28,83035,51379],{"class":2040},[28,83037,51382],{"class":34},[28,83039,83040,83042,83044,83046,83048,83050],{"class":30,"line":94},[28,83041,99],{"class":34},[28,83043,50710],{"class":51375},[28,83045,51391],{"class":2040},[28,83047,39],{"class":34},[28,83049,51396],{"class":320},[28,83051,51382],{"class":34},[28,83053,83054],{"class":30,"line":109},[28,83055,2477],{"emptyLinePlaceholder":144},[28,83057,83058,83060,83062],{"class":30,"line":125},[28,83059,99],{"class":34},[28,83061,51409],{"class":51375},[28,83063,51382],{"class":34},[28,83065,83066,83068,83070,83072,83074,83076],{"class":30,"line":131},[28,83067,52219],{"class":34},[28,83069,51419],{"class":51375},[28,83071,51422],{"class":2040},[28,83073,39],{"class":34},[28,83075,51427],{"class":320},[28,83077,51382],{"class":34},[28,83079,83080,83082,83084,83086,83088,83090,83092,83094,83096],{"class":30,"line":1291},[28,83081,52219],{"class":34},[28,83083,51419],{"class":51375},[28,83085,14997],{"class":2040},[28,83087,39],{"class":34},[28,83089,51466],{"class":320},[28,83091,51446],{"class":2040},[28,83093,39],{"class":34},[28,83095,51473],{"class":320},[28,83097,51382],{"class":34},[28,83099,83100,83102,83104,83106,83108],{"class":30,"line":1297},[28,83101,52219],{"class":34},[28,83103,51482],{"class":51375},[28,83105,51485],{"class":34},[28,83107,51482],{"class":51375},[28,83109,51382],{"class":34},[28,83111,83112,83114,83116],{"class":30,"line":1388},[28,83113,51860],{"class":34},[28,83115,51409],{"class":51375},[28,83117,51382],{"class":34},[28,83119,83120],{"class":30,"line":1394},[28,83121,2477],{"emptyLinePlaceholder":144},[28,83123,83124,83126,83128],{"class":30,"line":1406},[28,83125,99],{"class":34},[28,83127,51875],{"class":51375},[28,83129,51382],{"class":34},[28,83131,83132,83134,83136,83138,83140],{"class":30,"line":1689},[28,83133,52219],{"class":34},[28,83135,51686],{"class":51375},[28,83137,55389],{"class":34},[28,83139,51686],{"class":51375},[28,83141,51382],{"class":34},[28,83143,83144,83146,83148],{"class":30,"line":1694},[28,83145,52219],{"class":34},[28,83147,51888],{"class":51375},[28,83149,51382],{"class":34},[28,83151,83152,83154,83157,83159],{"class":30,"line":1700},[28,83153,11298],{"class":38},[28,83155,83156],{"class":45}," gift",[28,83158,13641],{"class":38},[28,83160,83161],{"class":320}," '50g的茶叶，清洗球'\n",[28,83163,83164],{"class":30,"line":1705},[28,83165,83166],{"class":105},"    \u002F\u002F 1.把字符串拆分为数组\n",[28,83168,83169],{"class":30,"line":1719},[28,83170,83171],{"class":105},"    \u002F\u002F console.log(gift.split(','))\n",[28,83173,83174],{"class":30,"line":1724},[28,83175,83176],{"class":105},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[28,83178,83179,83181,83183,83185,83188,83191,83193,83196,83198,83200,83202,83204,83206,83209,83211,83214,83216,83218,83220,83222],{"class":30,"line":1730},[28,83180,11298],{"class":38},[28,83182,73994],{"class":45},[28,83184,13641],{"class":38},[28,83186,83187],{"class":34}," gift.",[28,83189,83190],{"class":2040},"split",[28,83192,221],{"class":34},[28,83194,83195],{"class":320},"'，'",[28,83197,30902],{"class":34},[28,83199,74119],{"class":2040},[28,83201,221],{"class":34},[28,83203,79870],{"class":5293},[28,83205,79873],{"class":38},[28,83207,83208],{"class":320}," `\u003Cspan>【赠品】${",[28,83210,79870],{"class":34},[28,83212,83213],{"class":320},"}\u003C\u002Fspan>\u003Cbr>`",[28,83215,30902],{"class":34},[28,83217,74298],{"class":2040},[28,83219,221],{"class":34},[28,83221,74303],{"class":320},[28,83223,227],{"class":34},[28,83225,83226,83228,83230,83232,83234,83236,83238],{"class":30,"line":1751},[28,83227,52482],{"class":34},[28,83229,54474],{"class":2040},[28,83231,221],{"class":34},[28,83233,82006],{"class":320},[28,83235,74324],{"class":34},[28,83237,39],{"class":38},[28,83239,74060],{"class":34},[28,83241,83242,83244,83246],{"class":30,"line":1756},[28,83243,52492],{"class":34},[28,83245,51888],{"class":51375},[28,83247,51382],{"class":34},[28,83249,83250,83252,83254],{"class":30,"line":1770},[28,83251,51860],{"class":34},[28,83253,51875],{"class":51375},[28,83255,51382],{"class":34},[28,83257,83258],{"class":30,"line":1775},[28,83259,2477],{"emptyLinePlaceholder":144},[28,83261,83262,83264,83266],{"class":30,"line":1804},[28,83263,51860],{"class":34},[28,83265,50710],{"class":51375},[28,83267,51382],{"class":34},[22075,83269,83271],{"id":83270},"_41054-number","4.10.5.4 Number",[14,83273,83274],{},[1539,83275],{"alt":23,"src":83276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83278,83279],{},"整数也可以进行toFixed来保留小数",[14,83281,83282],{},"比如：",[14,83284,83285],{},"const price=10",[14,83287,83288],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22075,83290,83292],{"id":83291},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83294,83295],{},[1539,83296],{"alt":23,"src":83297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[18,83299,83301],{"className":50708,"code":83300,"language":50710,"meta":23,"style":23},"\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",[25,83302,83303,83313,83327,83331,83339,83353,83373,83385,83393,83399,83409,83419,83429,83433,83437,83443,83455,83469,83473,83477,83483,83495,83511,83521,83537,83541,83545,83551,83561,83571,83575,83579,83587,83599,83611,83623,83627,83631,83639,83651,83655,83659,83670,83680,83692,83704,83714,83718,83722,83730,83739,83751,83761,83771,83775,83779,83787,83796,83803,83813,83825,83829,83833,83842,83852,83863,83875,83887,83891,83895,83904,83914,83925,83929,83933,83939,83951,83963,83973,83983,84001,84013,84017,84021,84030,84042,84052,84062,84074,84078,84086,84094,84098,84106,84120,84128,84142,84170,84178,84186,84196,84200,84208,84216,84225,84233,84242,84252,84256,84260,84268,84276,84285,84293,84301,84314,84318,84322,84330,84338,84347,84355,84363,84378,84382,84386,84394,84402,84411,84419,84427,84441,84449,84453,84457,84462,84488,84493,84530,84535,84558,84563,84617,84622,84658,84662,84668,84673,84682,84696,84705,84724,84733,84743,84748,84753,84766,84771,84825,84851,84859,84867,84871],{"__ignoreMap":23},[28,83304,83305,83307,83309,83311],{"class":30,"line":31},[28,83306,51372],{"class":34},[28,83308,51376],{"class":51375},[28,83310,51379],{"class":2040},[28,83312,51382],{"class":34},[28,83314,83315,83317,83319,83321,83323,83325],{"class":30,"line":94},[28,83316,99],{"class":34},[28,83318,50710],{"class":51375},[28,83320,51391],{"class":2040},[28,83322,39],{"class":34},[28,83324,51396],{"class":320},[28,83326,51382],{"class":34},[28,83328,83329],{"class":30,"line":109},[28,83330,2477],{"emptyLinePlaceholder":144},[28,83332,83333,83335,83337],{"class":30,"line":125},[28,83334,99],{"class":34},[28,83336,51409],{"class":51375},[28,83338,51382],{"class":34},[28,83340,83341,83343,83345,83347,83349,83351],{"class":30,"line":131},[28,83342,52219],{"class":34},[28,83344,51419],{"class":51375},[28,83346,51422],{"class":2040},[28,83348,39],{"class":34},[28,83350,51427],{"class":320},[28,83352,51382],{"class":34},[28,83354,83355,83357,83359,83361,83363,83365,83367,83369,83371],{"class":30,"line":1291},[28,83356,52219],{"class":34},[28,83358,51419],{"class":51375},[28,83360,14997],{"class":2040},[28,83362,39],{"class":34},[28,83364,51466],{"class":320},[28,83366,51446],{"class":2040},[28,83368,39],{"class":34},[28,83370,51473],{"class":320},[28,83372,51382],{"class":34},[28,83374,83375,83377,83379,83381,83383],{"class":30,"line":1297},[28,83376,52219],{"class":34},[28,83378,51482],{"class":51375},[28,83380,51485],{"class":34},[28,83382,51482],{"class":51375},[28,83384,51382],{"class":34},[28,83386,83387,83389,83391],{"class":30,"line":1388},[28,83388,52219],{"class":34},[28,83390,136],{"class":51375},[28,83392,51382],{"class":34},[28,83394,83395,83397],{"class":30,"line":1394},[28,83396,6480],{"class":51375},[28,83398,15649],{"class":34},[28,83400,83401,83403,83405,83407],{"class":30,"line":1406},[28,83402,54770],{"class":45},[28,83404,51512],{"class":34},[28,83406,407],{"class":45},[28,83408,1367],{"class":34},[28,83410,83411,83413,83415,83417],{"class":30,"line":1689},[28,83412,54781],{"class":45},[28,83414,51512],{"class":34},[28,83416,407],{"class":45},[28,83418,1367],{"class":34},[28,83420,83421,83423,83425,83427],{"class":30,"line":1694},[28,83422,72671],{"class":45},[28,83424,51512],{"class":34},[28,83426,60580],{"class":45},[28,83428,1367],{"class":34},[28,83430,83431],{"class":30,"line":1700},[28,83432,2264],{"class":34},[28,83434,83435],{"class":30,"line":1705},[28,83436,2477],{"emptyLinePlaceholder":144},[28,83438,83439,83441],{"class":30,"line":1719},[28,83440,62198],{"class":2040},[28,83442,15649],{"class":34},[28,83444,83445,83447,83449,83451,83453],{"class":30,"line":1724},[28,83446,54846],{"class":45},[28,83448,51512],{"class":34},[28,83450,78649],{"class":45},[28,83452,51567],{"class":38},[28,83454,1367],{"class":34},[28,83456,83457,83459,83461,83463,83465,83467],{"class":30,"line":1730},[28,83458,54781],{"class":45},[28,83460,51512],{"class":34},[28,83462,525],{"class":45},[28,83464,51567],{"class":38},[28,83466,51631],{"class":45},[28,83468,1367],{"class":34},[28,83470,83471],{"class":30,"line":1751},[28,83472,2264],{"class":34},[28,83474,83475],{"class":30,"line":1756},[28,83476,2477],{"emptyLinePlaceholder":144},[28,83478,83479,83481],{"class":30,"line":1770},[28,83480,78700],{"class":2040},[28,83482,15649],{"class":34},[28,83484,83485,83487,83489,83491,83493],{"class":30,"line":1775},[28,83486,54770],{"class":45},[28,83488,51512],{"class":34},[28,83490,785],{"class":45},[28,83492,51567],{"class":38},[28,83494,1367],{"class":34},[28,83496,83497,83499,83501,83503,83505,83507,83509],{"class":30,"line":1804},[28,83498,61935],{"class":45},[28,83500,51512],{"class":34},[28,83502,28199],{"class":45},[28,83504,78755],{"class":45},[28,83506,78758],{"class":45},[28,83508,905],{"class":38},[28,83510,1367],{"class":34},[28,83512,83513,83515,83517,83519],{"class":30,"line":1809},[28,83514,55084],{"class":45},[28,83516,51512],{"class":34},[28,83518,51552],{"class":45},[28,83520,1367],{"class":34},[28,83522,83523,83525,83527,83529,83531,83533,83535],{"class":30,"line":1826},[28,83524,62052],{"class":45},[28,83526,51512],{"class":34},[28,83528,46],{"class":45},[28,83530,51567],{"class":38},[28,83532,51596],{"class":45},[28,83534,62319],{"class":45},[28,83536,1367],{"class":34},[28,83538,83539],{"class":30,"line":1831},[28,83540,2264],{"class":34},[28,83542,83543],{"class":30,"line":1836},[28,83544,2477],{"emptyLinePlaceholder":144},[28,83546,83547,83549],{"class":30,"line":1841},[28,83548,78818],{"class":2040},[28,83550,15649],{"class":34},[28,83552,83553,83555,83557,83559],{"class":30,"line":1855},[28,83554,62100],{"class":45},[28,83556,51512],{"class":34},[28,83558,62105],{"class":45},[28,83560,1367],{"class":34},[28,83562,83563,83565,83567,83569],{"class":30,"line":1860},[28,83564,54959],{"class":45},[28,83566,51512],{"class":34},[28,83568,61893],{"class":45},[28,83570,1367],{"class":34},[28,83572,83573],{"class":30,"line":2654},[28,83574,2264],{"class":34},[28,83576,83577],{"class":30,"line":2668},[28,83578,2477],{"emptyLinePlaceholder":144},[28,83580,83581,83583,83585],{"class":30,"line":2676},[28,83582,78700],{"class":2040},[28,83584,55690],{"class":51375},[28,83586,15649],{"class":34},[28,83588,83589,83591,83593,83595,83597],{"class":30,"line":2681},[28,83590,54846],{"class":45},[28,83592,51512],{"class":34},[28,83594,822],{"class":45},[28,83596,51567],{"class":38},[28,83598,1367],{"class":34},[28,83600,83601,83603,83605,83607,83609],{"class":30,"line":2687},[28,83602,54860],{"class":45},[28,83604,51512],{"class":34},[28,83606,822],{"class":45},[28,83608,51567],{"class":38},[28,83610,1367],{"class":34},[28,83612,83613,83615,83617,83619,83621],{"class":30,"line":2693},[28,83614,61825],{"class":45},[28,83616,51512],{"class":34},[28,83618,533],{"class":45},[28,83620,51567],{"class":38},[28,83622,1367],{"class":34},[28,83624,83625],{"class":30,"line":2698},[28,83626,2264],{"class":34},[28,83628,83629],{"class":30,"line":8025},[28,83630,2477],{"emptyLinePlaceholder":144},[28,83632,83633,83635,83637],{"class":30,"line":8049},[28,83634,78700],{"class":2040},[28,83636,62379],{"class":2040},[28,83638,15649],{"class":34},[28,83640,83641,83643,83645,83647,83649],{"class":30,"line":8054},[28,83642,54846],{"class":45},[28,83644,51512],{"class":34},[28,83646,1799],{"class":45},[28,83648,51567],{"class":38},[28,83650,1367],{"class":34},[28,83652,83653],{"class":30,"line":8060},[28,83654,2264],{"class":34},[28,83656,83657],{"class":30,"line":8087},[28,83658,2477],{"emptyLinePlaceholder":144},[28,83660,83661,83663,83665,83668],{"class":30,"line":8092},[28,83662,78700],{"class":2040},[28,83664,62379],{"class":2040},[28,83666,83667],{"class":2040}," .tag",[28,83669,15649],{"class":34},[28,83671,83672,83674,83676,83678],{"class":30,"line":8098},[28,83673,55084],{"class":45},[28,83675,51512],{"class":34},[28,83677,60944],{"class":45},[28,83679,1367],{"class":34},[28,83681,83682,83684,83686,83688,83690],{"class":30,"line":8110},[28,83683,54770],{"class":45},[28,83685,51512],{"class":34},[28,83687,52],{"class":45},[28,83689,51567],{"class":38},[28,83691,1367],{"class":34},[28,83693,83694,83696,83698,83700,83702],{"class":30,"line":8122},[28,83695,54997],{"class":45},[28,83697,51512],{"class":34},[28,83699,68],{"class":45},[28,83701,51567],{"class":38},[28,83703,1367],{"class":34},[28,83705,83706,83708,83710,83712],{"class":30,"line":8134},[28,83707,57491],{"class":45},[28,83709,51512],{"class":34},[28,83711,62145],{"class":45},[28,83713,1367],{"class":34},[28,83715,83716],{"class":30,"line":9793},[28,83717,2264],{"class":34},[28,83719,83720],{"class":30,"line":9818},[28,83721,2477],{"emptyLinePlaceholder":144},[28,83723,83724,83726,83728],{"class":30,"line":9841},[28,83725,78700],{"class":2040},[28,83727,78992],{"class":2040},[28,83729,31542],{"class":34},[28,83731,83732,83734,83737],{"class":30,"line":9865},[28,83733,78700],{"class":2040},[28,83735,83736],{"class":2040}," .sub-total",[28,83738,15649],{"class":34},[28,83740,83741,83743,83745,83747,83749],{"class":30,"line":9870},[28,83742,54997],{"class":45},[28,83744,51512],{"class":34},[28,83746,860],{"class":45},[28,83748,51567],{"class":38},[28,83750,1367],{"class":34},[28,83752,83753,83755,83757,83759],{"class":30,"line":9875},[28,83754,57491],{"class":45},[28,83756,51512],{"class":34},[28,83758,79015],{"class":45},[28,83760,1367],{"class":34},[28,83762,83763,83765,83767,83769],{"class":30,"line":9880},[28,83764,61912],{"class":45},[28,83766,51512],{"class":34},[28,83768,46],{"class":45},[28,83770,1367],{"class":34},[28,83772,83773],{"class":30,"line":9889},[28,83774,2264],{"class":34},[28,83776,83777],{"class":30,"line":9894},[28,83778,2477],{"emptyLinePlaceholder":144},[28,83780,83781,83783,83785],{"class":30,"line":9900},[28,83782,78700],{"class":2040},[28,83784,79032],{"class":2040},[28,83786,31542],{"class":34},[28,83788,83789,83791,83794],{"class":30,"line":9921},[28,83790,78700],{"class":2040},[28,83792,83793],{"class":2040}," .sub-total::before",[28,83795,31542],{"class":34},[28,83797,83798,83801],{"class":30,"line":9927},[28,83799,83800],{"class":2040},"    .amount::before",[28,83802,15649],{"class":34},[28,83804,83805,83807,83809,83811],{"class":30,"line":9941},[28,83806,79039],{"class":45},[28,83808,51512],{"class":34},[28,83810,79044],{"class":320},[28,83812,1367],{"class":34},[28,83814,83815,83817,83819,83821,83823],{"class":30,"line":9947},[28,83816,54997],{"class":45},[28,83818,51512],{"class":34},[28,83820,68],{"class":45},[28,83822,51567],{"class":38},[28,83824,1367],{"class":34},[28,83826,83827],{"class":30,"line":9974},[28,83828,2264],{"class":34},[28,83830,83831],{"class":30,"line":9983},[28,83832,2477],{"emptyLinePlaceholder":144},[28,83834,83835,83837,83840],{"class":30,"line":9989},[28,83836,78700],{"class":2040},[28,83838,83839],{"class":2040}," .spec",[28,83841,15649],{"class":34},[28,83843,83844,83846,83848,83850],{"class":30,"line":9997},[28,83845,61912],{"class":45},[28,83847,51512],{"class":34},[28,83849,52],{"class":45},[28,83851,1367],{"class":34},[28,83853,83854,83856,83858,83861],{"class":30,"line":10002},[28,83855,57491],{"class":45},[28,83857,51512],{"class":34},[28,83859,83860],{"class":45},"#888",[28,83862,1367],{"class":34},[28,83864,83865,83867,83869,83871,83873],{"class":30,"line":16681},[28,83866,54997],{"class":45},[28,83868,51512],{"class":34},[28,83870,759],{"class":45},[28,83872,51567],{"class":38},[28,83874,1367],{"class":34},[28,83876,83877,83879,83881,83883,83885],{"class":30,"line":16687},[28,83878,62075],{"class":45},[28,83880,51512],{"class":34},[28,83882,102],{"class":45},[28,83884,51567],{"class":38},[28,83886,1367],{"class":34},[28,83888,83889],{"class":30,"line":16710},[28,83890,2264],{"class":34},[28,83892,83893],{"class":30,"line":16716},[28,83894,2477],{"emptyLinePlaceholder":144},[28,83896,83897,83899,83902],{"class":30,"line":16739},[28,83898,78700],{"class":2040},[28,83900,83901],{"class":2040}," .count",[28,83903,15649],{"class":34},[28,83905,83906,83908,83910,83912],{"class":30,"line":16753},[28,83907,61912],{"class":45},[28,83909,51512],{"class":34},[28,83911,46],{"class":45},[28,83913,1367],{"class":34},[28,83915,83916,83918,83920,83923],{"class":30,"line":16773},[28,83917,57491],{"class":45},[28,83919,51512],{"class":34},[28,83921,83922],{"class":45},"#aaa",[28,83924,1367],{"class":34},[28,83926,83927],{"class":30,"line":16779},[28,83928,2264],{"class":34},[28,83930,83931],{"class":30,"line":16790},[28,83932,2477],{"emptyLinePlaceholder":144},[28,83934,83935,83937],{"class":30,"line":16813},[28,83936,72550],{"class":2040},[28,83938,15649],{"class":34},[28,83940,83941,83943,83945,83947,83949],{"class":30,"line":16835},[28,83942,54846],{"class":45},[28,83944,51512],{"class":34},[28,83946,78649],{"class":45},[28,83948,51567],{"class":38},[28,83950,1367],{"class":34},[28,83952,83953,83955,83957,83959,83961],{"class":30,"line":16840},[28,83954,54781],{"class":45},[28,83956,51512],{"class":34},[28,83958,407],{"class":45},[28,83960,51631],{"class":45},[28,83962,1367],{"class":34},[28,83964,83965,83967,83969,83971],{"class":30,"line":16846},[28,83966,55084],{"class":45},[28,83968,51512],{"class":34},[28,83970,51552],{"class":45},[28,83972,1367],{"class":34},[28,83974,83975,83977,83979,83981],{"class":30,"line":16860},[28,83976,55095],{"class":45},[28,83978,51512],{"class":34},[28,83980,51655],{"class":45},[28,83982,1367],{"class":34},[28,83984,83985,83988,83990,83992,83994,83996,83999],{"class":30,"line":16873},[28,83986,83987],{"class":45},"      border-top",[28,83989,51512],{"class":34},[28,83991,46],{"class":45},[28,83993,51567],{"class":38},[28,83995,51596],{"class":45},[28,83997,83998],{"class":45}," #4e4e4e",[28,84000,1367],{"class":34},[28,84002,84003,84005,84007,84009,84011],{"class":30,"line":16878},[28,84004,54770],{"class":45},[28,84006,51512],{"class":34},[28,84008,102],{"class":45},[28,84010,51567],{"class":38},[28,84012,1367],{"class":34},[28,84014,84015],{"class":30,"line":16892},[28,84016,2264],{"class":34},[28,84018,84019],{"class":30,"line":16897},[28,84020,2477],{"emptyLinePlaceholder":144},[28,84022,84023,84025,84028],{"class":30,"line":16903},[28,84024,72550],{"class":2040},[28,84026,84027],{"class":2040}," .amount",[28,84029,15649],{"class":34},[28,84031,84032,84034,84036,84038,84040],{"class":30,"line":16908},[28,84033,54997],{"class":45},[28,84035,51512],{"class":34},[28,84037,860],{"class":45},[28,84039,51567],{"class":38},[28,84041,1367],{"class":34},[28,84043,84044,84046,84048,84050],{"class":30,"line":16922},[28,84045,57491],{"class":45},[28,84047,51512],{"class":34},[28,84049,79015],{"class":45},[28,84051,1367],{"class":34},[28,84053,84054,84056,84058,84060],{"class":30,"line":16927},[28,84055,62409],{"class":45},[28,84057,51512],{"class":34},[28,84059,51564],{"class":45},[28,84061,1367],{"class":34},[28,84063,84064,84066,84068,84070,84072],{"class":30,"line":16932},[28,84065,61825],{"class":45},[28,84067,51512],{"class":34},[28,84069,866],{"class":45},[28,84071,51567],{"class":38},[28,84073,1367],{"class":34},[28,84075,84076],{"class":30,"line":16946},[28,84077,2264],{"class":34},[28,84079,84080,84082,84084],{"class":30,"line":16958},[28,84081,52492],{"class":34},[28,84083,136],{"class":51375},[28,84085,51382],{"class":34},[28,84087,84088,84090,84092],{"class":30,"line":16963},[28,84089,51860],{"class":34},[28,84091,51409],{"class":51375},[28,84093,51382],{"class":34},[28,84095,84096],{"class":30,"line":16976},[28,84097,2477],{"emptyLinePlaceholder":144},[28,84099,84100,84102,84104],{"class":30,"line":16981},[28,84101,99],{"class":34},[28,84103,51875],{"class":51375},[28,84105,51382],{"class":34},[28,84107,84108,84110,84112,84114,84116,84118],{"class":30,"line":16986},[28,84109,52219],{"class":34},[28,84111,51686],{"class":51375},[28,84113,53561],{"class":2040},[28,84115,39],{"class":34},[28,84117,62683],{"class":320},[28,84119,51382],{"class":34},[28,84121,84122,84124,84126],{"class":30,"line":16991},[28,84123,52492],{"class":34},[28,84125,51686],{"class":51375},[28,84127,51382],{"class":34},[28,84129,84130,84132,84134,84136,84138,84140],{"class":30,"line":17004},[28,84131,52219],{"class":34},[28,84133,51686],{"class":51375},[28,84135,53561],{"class":2040},[28,84137,39],{"class":34},[28,84139,62655],{"class":320},[28,84141,51382],{"class":34},[28,84143,84144,84146,84148,84151,84153,84155,84157,84160,84162,84164,84166,84168],{"class":30,"line":17009},[28,84145,51416],{"class":34},[28,84147,51686],{"class":51375},[28,84149,84150],{"class":34},">合计：\u003C",[28,84152,28],{"class":51375},[28,84154,53561],{"class":2040},[28,84156,39],{"class":34},[28,84158,84159],{"class":320},"\"amount\"",[28,84161,55389],{"class":34},[28,84163,28],{"class":51375},[28,84165,55389],{"class":34},[28,84167,51686],{"class":51375},[28,84169,51382],{"class":34},[28,84171,84172,84174,84176],{"class":30,"line":32709},[28,84173,52492],{"class":34},[28,84175,51686],{"class":51375},[28,84177,51382],{"class":34},[28,84179,84180,84182,84184],{"class":30,"line":32715},[28,84181,52219],{"class":34},[28,84183,51888],{"class":51375},[28,84185,51382],{"class":34},[28,84187,84188,84190,84192,84194],{"class":30,"line":32721},[28,84189,11298],{"class":38},[28,84191,79452],{"class":45},[28,84193,13641],{"class":38},[28,84195,55522],{"class":34},[28,84197,84198],{"class":30,"line":32727},[28,84199,79461],{"class":34},[28,84201,84202,84204,84206],{"class":30,"line":32733},[28,84203,79466],{"class":34},[28,84205,79469],{"class":320},[28,84207,31542],{"class":34},[28,84209,84210,84212,84214],{"class":30,"line":32744},[28,84211,79476],{"class":34},[28,84213,79479],{"class":320},[28,84215,31542],{"class":34},[28,84217,84218,84220,84223],{"class":30,"line":32750},[28,84219,79486],{"class":34},[28,84221,84222],{"class":45},"289.9",[28,84224,31542],{"class":34},[28,84226,84227,84229,84231],{"class":30,"line":32770},[28,84228,79496],{"class":34},[28,84230,79499],{"class":320},[28,84232,31542],{"class":34},[28,84234,84235,84238,84240],{"class":30,"line":32776},[28,84236,84237],{"class":34},"        count: ",[28,84239,52],{"class":45},[28,84241,31542],{"class":34},[28,84243,84244,84247,84250],{"class":30,"line":32787},[28,84245,84246],{"class":34},"        spec: { color: ",[28,84248,84249],{"class":320},"'白色'",[28,84251,55679],{"class":34},[28,84253,84254],{"class":30,"line":32793},[28,84255,77967],{"class":34},[28,84257,84258],{"class":30,"line":32799},[28,84259,79461],{"class":34},[28,84261,84262,84264,84266],{"class":30,"line":32805},[28,84263,79466],{"class":34},[28,84265,79560],{"class":320},[28,84267,31542],{"class":34},[28,84269,84270,84272,84274],{"class":30,"line":32811},[28,84271,79476],{"class":34},[28,84273,79569],{"class":320},[28,84275,31542],{"class":34},[28,84277,84278,84280,84283],{"class":30,"line":32817},[28,84279,79486],{"class":34},[28,84281,84282],{"class":45},"109.8",[28,84284,31542],{"class":34},[28,84286,84287,84289,84291],{"class":30,"line":32823},[28,84288,79496],{"class":34},[28,84290,79587],{"class":320},[28,84292,31542],{"class":34},[28,84294,84295,84297,84299],{"class":30,"line":32829},[28,84296,84237],{"class":34},[28,84298,57],{"class":45},[28,84300,31542],{"class":34},[28,84302,84303,84306,84308,84310,84312],{"class":30,"line":32849},[28,84304,84305],{"class":34},"        spec: { size: ",[28,84307,81978],{"class":320},[28,84309,55539],{"class":34},[28,84311,81983],{"class":320},[28,84313,55679],{"class":34},[28,84315,84316],{"class":30,"line":32855},[28,84317,77967],{"class":34},[28,84319,84320],{"class":30,"line":32871},[28,84321,79461],{"class":34},[28,84323,84324,84326,84328],{"class":30,"line":32877},[28,84325,79466],{"class":34},[28,84327,79604],{"class":320},[28,84329,31542],{"class":34},[28,84331,84332,84334,84336],{"class":30,"line":32891},[28,84333,79476],{"class":34},[28,84335,79613],{"class":320},[28,84337,31542],{"class":34},[28,84339,84340,84342,84345],{"class":30,"line":32897},[28,84341,79486],{"class":34},[28,84343,84344],{"class":45},"488",[28,84346,31542],{"class":34},[28,84348,84349,84351,84353],{"class":30,"line":32912},[28,84350,79496],{"class":34},[28,84352,79631],{"class":320},[28,84354,31542],{"class":34},[28,84356,84357,84359,84361],{"class":30,"line":32918},[28,84358,84237],{"class":34},[28,84360,46],{"class":45},[28,84362,31542],{"class":34},[28,84364,84365,84367,84370,84373,84376],{"class":30,"line":32927},[28,84366,84246],{"class":34},[28,84368,84369],{"class":320},"'青色'",[28,84371,84372],{"class":34},", sum: ",[28,84374,84375],{"class":320},"'一大四小'",[28,84377,55679],{"class":34},[28,84379,84380],{"class":30,"line":32933},[28,84381,77967],{"class":34},[28,84383,84384],{"class":30,"line":32942},[28,84385,79461],{"class":34},[28,84387,84388,84390,84392],{"class":30,"line":32948},[28,84389,79466],{"class":34},[28,84391,79648],{"class":320},[28,84393,31542],{"class":34},[28,84395,84396,84398,84400],{"class":30,"line":32954},[28,84397,79476],{"class":34},[28,84399,79657],{"class":320},[28,84401,31542],{"class":34},[28,84403,84404,84406,84409],{"class":30,"line":32963},[28,84405,79486],{"class":34},[28,84407,84408],{"class":45},"139",[28,84410,31542],{"class":34},[28,84412,84413,84415,84417],{"class":30,"line":32969},[28,84414,79496],{"class":34},[28,84416,79675],{"class":320},[28,84418,31542],{"class":34},[28,84420,84421,84423,84425],{"class":30,"line":32980},[28,84422,84237],{"class":34},[28,84424,46],{"class":45},[28,84426,31542],{"class":34},[28,84428,84429,84431,84434,84436,84439],{"class":30,"line":32986},[28,84430,84305],{"class":34},[28,84432,84433],{"class":320},"'小号'",[28,84435,55539],{"class":34},[28,84437,84438],{"class":320},"'紫色'",[28,84440,55545],{"class":34},[28,84442,84443,84446],{"class":30,"line":33005},[28,84444,84445],{"class":34},"        gift: ",[28,84447,84448],{"class":320},"'50g茶叶,清洗球'\n",[28,84450,84451],{"class":30,"line":33011},[28,84452,52473],{"class":34},[28,84454,84455],{"class":30,"line":33022},[28,84456,53184],{"class":34},[28,84458,84459],{"class":30,"line":33028},[28,84460,84461],{"class":105},"    \u002F\u002F  1.根据数据渲染页面\n",[28,84463,84464,84466,84468,84470,84472,84474,84476,84478,84480,84482,84484,84486],{"class":30,"line":33048},[28,84465,52482],{"class":34},[28,84467,54474],{"class":2040},[28,84469,221],{"class":34},[28,84471,79976],{"class":320},[28,84473,74324],{"class":34},[28,84475,39],{"class":38},[28,84477,80123],{"class":34},[28,84479,74119],{"class":2040},[28,84481,221],{"class":34},[28,84483,79870],{"class":5293},[28,84485,79873],{"class":38},[28,84487,15649],{"class":34},[28,84489,84490],{"class":30,"line":33064},[28,84491,84492],{"class":105},"      \u002F\u002F 对象解构\n",[28,84494,84495,84497,84499,84501,84503,84505,84507,84510,84512,84514,84516,84519,84521,84524,84526,84528],{"class":30,"line":33070},[28,84496,58303],{"class":38},[28,84498,79882],{"class":34},[28,84500,79895],{"class":45},[28,84502,12512],{"class":34},[28,84504,79885],{"class":45},[28,84506,12512],{"class":34},[28,84508,84509],{"class":45},"count",[28,84511,12512],{"class":34},[28,84513,79890],{"class":45},[28,84515,12512],{"class":34},[28,84517,84518],{"class":45},"spec",[28,84520,12512],{"class":34},[28,84522,84523],{"class":45},"gift",[28,84525,79898],{"class":34},[28,84527,39],{"class":38},[28,84529,79903],{"class":34},[28,84531,84532],{"class":30,"line":33084},[28,84533,84534],{"class":105},"      \u002F\u002F 规格文字模块处理\n",[28,84536,84537,84539,84542,84544,84546,84548,84550,84552,84554,84556],{"class":30,"line":33090},[28,84538,58303],{"class":38},[28,84540,84541],{"class":45}," text",[28,84543,13641],{"class":38},[28,84545,82013],{"class":34},[28,84547,82016],{"class":2040},[28,84549,82019],{"class":34},[28,84551,74298],{"class":2040},[28,84553,221],{"class":34},[28,84555,82026],{"class":320},[28,84557,227],{"class":34},[28,84559,84560],{"class":30,"line":33096},[28,84561,84562],{"class":105},"      \u002F\u002F 处理赠品模块\n",[28,84564,84565,84567,84569,84571,84574,84576,84578,84580,84582,84585,84587,84589,84591,84593,84595,84598,84600,84603,84605,84607,84609,84611,84613,84615],{"class":30,"line":33107},[28,84566,58303],{"class":38},[28,84568,73994],{"class":45},[28,84570,13641],{"class":38},[28,84572,84573],{"class":34}," gift ",[28,84575,1190],{"class":38},[28,84577,83187],{"class":34},[28,84579,83190],{"class":2040},[28,84581,221],{"class":34},[28,84583,84584],{"class":320},"','",[28,84586,30902],{"class":34},[28,84588,74119],{"class":2040},[28,84590,221],{"class":34},[28,84592,79870],{"class":5293},[28,84594,79873],{"class":38},[28,84596,84597],{"class":320}," `\u003Cspan class=\"tag\">【赠品】${",[28,84599,79870],{"class":34},[28,84601,84602],{"class":320},"}\u003C\u002Fspan>`",[28,84604,30902],{"class":34},[28,84606,74298],{"class":2040},[28,84608,221],{"class":34},[28,84610,74303],{"class":320},[28,84612,13791],{"class":34},[28,84614,1065],{"class":38},[28,84616,70179],{"class":320},[28,84618,84619],{"class":30,"line":33113},[28,84620,84621],{"class":105},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[28,84623,84624,84626,84629,84631,84634,84636,84638,84640,84643,84645,84647,84649,84652,84654,84656],{"class":30,"line":33119},[28,84625,58303],{"class":38},[28,84627,84628],{"class":45}," subtotal",[28,84630,13641],{"class":38},[28,84632,84633],{"class":34}," ((price ",[28,84635,668],{"class":38},[28,84637,5831],{"class":45},[28,84639,6595],{"class":38},[28,84641,84642],{"class":34}," count) ",[28,84644,794],{"class":38},[28,84646,5831],{"class":45},[28,84648,30902],{"class":34},[28,84650,84651],{"class":2040},"toFixed",[28,84653,221],{"class":34},[28,84655,52],{"class":45},[28,84657,227],{"class":34},[28,84659,84660],{"class":30,"line":33129},[28,84661,2477],{"emptyLinePlaceholder":144},[28,84663,84664,84666],{"class":30,"line":33135},[28,84665,74057],{"class":38},[28,84667,70243],{"class":320},[28,84669,84670],{"class":30,"line":33146},[28,84671,84672],{"class":320},"        \u003Cdiv class=\"item\">\n",[28,84674,84675,84678,84680],{"class":30,"line":33152},[28,84676,84677],{"class":320},"          \u003Cimg src=\"${",[28,84679,79895],{"class":34},[28,84681,79927],{"class":320},[28,84683,84684,84687,84689,84692,84694],{"class":30,"line":33162},[28,84685,84686],{"class":320},"          \u003Cp class=\"name\">${",[28,84688,79885],{"class":34},[28,84690,84691],{"class":320},"}${",[28,84693,1376],{"class":34},[28,84695,79937],{"class":320},[28,84697,84698,84701,84703],{"class":30,"line":33167},[28,84699,84700],{"class":320},"          \u003Cp class=\"spec\">${",[28,84702,5264],{"class":34},[28,84704,79937],{"class":320},[28,84706,84707,84710,84712,84714,84716,84718,84720,84722],{"class":30,"line":33173},[28,84708,84709],{"class":320},"          \u003Cp class=\"price\">${",[28,84711,79890],{"class":34},[28,84713,768],{"class":320},[28,84715,84651],{"class":2040},[28,84717,221],{"class":320},[28,84719,52],{"class":45},[28,84721,642],{"class":320},[28,84723,79937],{"class":320},[28,84725,84726,84729,84731],{"class":30,"line":33222},[28,84727,84728],{"class":320},"          \u003Cp class=\"count\">x${",[28,84730,84509],{"class":34},[28,84732,79937],{"class":320},[28,84734,84735,84738,84741],{"class":30,"line":33269},[28,84736,84737],{"class":320},"          \u003Cp class=\"sub-total\">${",[28,84739,84740],{"class":34},"subtotal",[28,84742,79937],{"class":320},[28,84744,84745],{"class":30,"line":33274},[28,84746,84747],{"class":320},"        \u003C\u002Fdiv> \n",[28,84749,84750],{"class":30,"line":33280},[28,84751,84752],{"class":320},"             `\n",[28,84754,84755,84758,84760,84762,84764],{"class":30,"line":33299},[28,84756,84757],{"class":34},"    }).",[28,84759,74298],{"class":2040},[28,84761,221],{"class":34},[28,84763,74303],{"class":320},[28,84765,227],{"class":34},[28,84767,84768],{"class":30,"line":33305},[28,84769,84770],{"class":105},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[28,84772,84773,84775,84777,84779,84781,84784,84786,84789,84791,84793,84795,84798,84801,84803,84806,84808,84810,84812,84815,84817,84819,84821,84823],{"class":30,"line":33325},[28,84774,11298],{"class":38},[28,84776,62860],{"class":45},[28,84778,13641],{"class":38},[28,84780,80123],{"class":34},[28,84782,84783],{"class":2040},"reduce",[28,84785,2453],{"class":34},[28,84787,84788],{"class":5293},"prev",[28,84790,12512],{"class":34},[28,84792,79870],{"class":5293},[28,84794,13791],{"class":34},[28,84796,84797],{"class":38},"=>",[28,84799,84800],{"class":34}," prev ",[28,84802,693],{"class":38},[28,84804,84805],{"class":34}," (item.price ",[28,84807,668],{"class":38},[28,84809,5831],{"class":45},[28,84811,6595],{"class":38},[28,84813,84814],{"class":34}," item.count) ",[28,84816,794],{"class":38},[28,84818,5831],{"class":45},[28,84820,12512],{"class":34},[28,84822,407],{"class":45},[28,84824,227],{"class":34},[28,84826,84827,84829,84831,84833,84836,84838,84840,84843,84845,84847,84849],{"class":30,"line":33331},[28,84828,52482],{"class":34},[28,84830,54474],{"class":2040},[28,84832,221],{"class":34},[28,84834,84835],{"class":320},"'.amount'",[28,84837,74324],{"class":34},[28,84839,39],{"class":38},[28,84841,84842],{"class":34}," total.",[28,84844,84651],{"class":2040},[28,84846,221],{"class":34},[28,84848,52],{"class":45},[28,84850,227],{"class":34},[28,84852,84853,84855,84857],{"class":30,"line":33337},[28,84854,52492],{"class":34},[28,84856,51888],{"class":51375},[28,84858,51382],{"class":34},[28,84860,84861,84863,84865],{"class":30,"line":33347},[28,84862,51860],{"class":34},[28,84864,51875],{"class":51375},[28,84866,51382],{"class":34},[28,84868,84869],{"class":30,"line":33352},[28,84870,2477],{"emptyLinePlaceholder":144},[28,84872,84873,84875,84877],{"class":30,"line":33358},[28,84874,51860],{"class":34},[28,84876,50710],{"class":51375},[28,84878,51382],{"class":34},[159,84880,84882],{"id":84881},"_411-编程思想","4.11 编程思想",[188,84884,84886],{"id":84885},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84888,84889,84892],{},[365,84890,84891],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84894,84895],{},"调用就可以了",[14,84897,84898],{},[1539,84899],{"alt":23,"src":84900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[188,84902,84904],{"id":84903},"_4112-面向对象","4.11.2 面向对象",[14,84906,84907],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84909,84910],{},[1539,84911],{"alt":23,"src":84912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84914,84915],{},"面向对象的特性：",[1211,84917,84918,84921,84924],{},[174,84919,84920],{},"封装性",[174,84922,84923],{},"继承性",[174,84925,84926],{},"多态性",[188,84928,84930],{"id":84929},"_4113-两者比较","4.11.3 两者比较",[14,84932,84933],{},[1539,84934],{"alt":23,"src":84935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[159,84937,84939],{"id":84938},"_412-构造函数回顾","4.12 构造函数回顾",[14,84941,84942],{},[1539,84943],{"alt":23,"src":84944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84946,84947],{},[1539,84948],{"alt":23,"src":84949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84951,84952],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84954,84955],{},[1539,84956],{"alt":23,"src":84957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[159,84959,84961],{"id":84960},"_413-原型","4.13 原型",[188,84963,84965],{"id":84964},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84967,84968],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84970,84971],{},[1539,84972],{"alt":23,"src":84973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84975,84976],{},[1539,84977],{"alt":23,"src":84978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84980,84981],{},"原型是构造函数的属性，它也是一个对象",[14,84983,84984],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84986,84987],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[18,84989,84991],{"className":53142,"code":84990,"language":53144,"meta":23,"style":23},"\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",[25,84992,84993,85001,85006,85014,85019,85024,85029,85034,85039,85043,85047,85051,85056,85061,85065,85070,85075,85080,85085,85090,85094,85102],{"__ignoreMap":23},[28,84994,84995,84997,84999],{"class":30,"line":31},[28,84996,99],{"class":34},[28,84998,51875],{"class":51375},[28,85000,51382],{"class":34},[28,85002,85003],{"class":30,"line":94},[28,85004,85005],{"class":105},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[28,85007,85008,85010,85012],{"class":30,"line":109},[28,85009,52219],{"class":34},[28,85011,51888],{"class":51375},[28,85013,51382],{"class":34},[28,85015,85016],{"class":30,"line":125},[28,85017,85018],{"class":34},"    function Star(uname, age) {\n",[28,85020,85021],{"class":30,"line":131},[28,85022,85023],{"class":34},"      this.uname = uname,\n",[28,85025,85026],{"class":30,"line":1291},[28,85027,85028],{"class":34},"        this.age = age\n",[28,85030,85031],{"class":30,"line":1297},[28,85032,85033],{"class":34},"      \u002F\u002F this.sing = function () {\n",[28,85035,85036],{"class":30,"line":1388},[28,85037,85038],{"class":34},"      \u002F\u002F   console.log('唱歌')\n",[28,85040,85041],{"class":30,"line":1394},[28,85042,2477],{"emptyLinePlaceholder":144},[28,85044,85045],{"class":30,"line":1406},[28,85046,60112],{"class":34},[28,85048,85049],{"class":30,"line":1689},[28,85050,2264],{"class":34},[28,85052,85053],{"class":30,"line":1694},[28,85054,85055],{"class":34},"    Star.prototype.sing = function () {\n",[28,85057,85058],{"class":30,"line":1700},[28,85059,85060],{"class":34},"      console.log('唱歌')\n",[28,85062,85063],{"class":30,"line":1705},[28,85064,2264],{"class":34},[28,85066,85067],{"class":30,"line":1719},[28,85068,85069],{"class":34},"    \u002F\u002F console.dir(Star.prototype)\n",[28,85071,85072],{"class":30,"line":1724},[28,85073,85074],{"class":34},"    const pink = new Star('pink', 18)\n",[28,85076,85077],{"class":30,"line":1730},[28,85078,85079],{"class":34},"    const red = new Star('red', 20)\n",[28,85081,85082],{"class":30,"line":1751},[28,85083,85084],{"class":34},"    pink.sing()\n",[28,85086,85087],{"class":30,"line":1756},[28,85088,85089],{"class":34},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[28,85091,85092],{"class":30,"line":1770},[28,85093,2477],{"emptyLinePlaceholder":144},[28,85095,85096,85098,85100],{"class":30,"line":1775},[28,85097,52492],{"class":34},[28,85099,51888],{"class":51375},[28,85101,51382],{"class":34},[28,85103,85104,85106,85108],{"class":30,"line":1804},[28,85105,51860],{"class":34},[28,85107,51875],{"class":51375},[28,85109,51382],{"class":34},[14,85111,85112],{},[1539,85113],{"alt":23,"src":85114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[18,85116,85118],{"className":53142,"code":85117,"language":53144,"meta":23,"style":23},"\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",[25,85119,85120,85128,85136,85141,85146,85151,85156,85160,85165,85170,85175,85179,85184,85188,85192,85197,85201,85209],{"__ignoreMap":23},[28,85121,85122,85124,85126],{"class":30,"line":31},[28,85123,99],{"class":34},[28,85125,51875],{"class":51375},[28,85127,51382],{"class":34},[28,85129,85130,85132,85134],{"class":30,"line":94},[28,85131,52219],{"class":34},[28,85133,51888],{"class":51375},[28,85135,51382],{"class":34},[28,85137,85138],{"class":30,"line":109},[28,85139,85140],{"class":34},"    let that\n",[28,85142,85143],{"class":30,"line":125},[28,85144,85145],{"class":34},"    function Star(uname) {\n",[28,85147,85148],{"class":30,"line":131},[28,85149,85150],{"class":34},"      this.uname = uname\n",[28,85152,85153],{"class":30,"line":1291},[28,85154,85155],{"class":34},"      that = this\n",[28,85157,85158],{"class":30,"line":1297},[28,85159,2264],{"class":34},[28,85161,85162],{"class":30,"line":1388},[28,85163,85164],{"class":34},"    \u002F\u002F 实例对象是 ldh\n",[28,85166,85167],{"class":30,"line":1394},[28,85168,85169],{"class":34},"    const ldh = new Star('刘德华')\n",[28,85171,85172],{"class":30,"line":1406},[28,85173,85174],{"class":34},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[28,85176,85177],{"class":30,"line":1689},[28,85178,2477],{"emptyLinePlaceholder":144},[28,85180,85181],{"class":30,"line":1694},[28,85182,85183],{"class":34},"    Star.sing = function () {\n",[28,85185,85186],{"class":30,"line":1700},[28,85187,85060],{"class":34},[28,85189,85190],{"class":30,"line":1705},[28,85191,2264],{"class":34},[28,85193,85194],{"class":30,"line":1719},[28,85195,85196],{"class":34},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[28,85198,85199],{"class":30,"line":1724},[28,85200,2477],{"emptyLinePlaceholder":144},[28,85202,85203,85205,85207],{"class":30,"line":1730},[28,85204,52492],{"class":34},[28,85206,51888],{"class":51375},[28,85208,51382],{"class":34},[28,85210,85211,85213,85215],{"class":30,"line":1751},[28,85212,51860],{"class":34},[28,85214,51875],{"class":51375},[28,85216,51382],{"class":34},[14,85218,85219],{},"构造函数的this指向的是实例对象；",[14,85221,85222],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[188,85224,85226],{"id":85225},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85228,85229],{},[1539,85230],{"alt":23,"src":85231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[18,85233,85235],{"className":53142,"code":85234,"language":53144,"meta":23,"style":23},"\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",[25,85236,85237,85245,85253,85258,85263,85268,85273,85278,85283,85288,85293,85298,85303,85307,85312,85317,85322,85327,85331,85336,85341,85346,85351,85355,85360,85365,85370,85375,85379,85384,85388,85396],{"__ignoreMap":23},[28,85238,85239,85241,85243],{"class":30,"line":31},[28,85240,99],{"class":34},[28,85242,51875],{"class":51375},[28,85244,51382],{"class":34},[28,85246,85247,85249,85251],{"class":30,"line":94},[28,85248,52219],{"class":34},[28,85250,51888],{"class":51375},[28,85252,51382],{"class":34},[28,85254,85255],{"class":30,"line":109},[28,85256,85257],{"class":34},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[28,85259,85260],{"class":30,"line":125},[28,85261,85262],{"class":34},"    const arr = [1, 2, 3]\n",[28,85264,85265],{"class":30,"line":131},[28,85266,85267],{"class":34},"    \u002F\u002F 自己定义数组的扩展方法\n",[28,85269,85270],{"class":30,"line":1291},[28,85271,85272],{"class":34},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[28,85274,85275],{"class":30,"line":1297},[28,85276,85277],{"class":34},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[28,85279,85280],{"class":30,"line":1388},[28,85281,85282],{"class":34},"    \u002F\u002F ①.最大值\n",[28,85284,85285],{"class":30,"line":1394},[28,85286,85287],{"class":34},"    Array.prototype.max = function () {\n",[28,85289,85290],{"class":30,"line":1406},[28,85291,85292],{"class":34},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[28,85294,85295],{"class":30,"line":1689},[28,85296,85297],{"class":34},"      return Math.max(...this)\n",[28,85299,85300],{"class":30,"line":1694},[28,85301,85302],{"class":34},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[28,85304,85305],{"class":30,"line":1700},[28,85306,2264],{"class":34},[28,85308,85309],{"class":30,"line":1705},[28,85310,85311],{"class":34},"    console.log(arr.max())\n",[28,85313,85314],{"class":30,"line":1719},[28,85315,85316],{"class":34},"    \u002F\u002F ②最小值\n",[28,85318,85319],{"class":30,"line":1724},[28,85320,85321],{"class":34},"    Array.prototype.min = function () {\n",[28,85323,85324],{"class":30,"line":1730},[28,85325,85326],{"class":34},"      return Math.min(...this)\n",[28,85328,85329],{"class":30,"line":1751},[28,85330,2264],{"class":34},[28,85332,85333],{"class":30,"line":1756},[28,85334,85335],{"class":34},"    console.log(arr.min())\n",[28,85337,85338],{"class":30,"line":1770},[28,85339,85340],{"class":34},"    \u002F\u002F③求和\n",[28,85342,85343],{"class":30,"line":1775},[28,85344,85345],{"class":34},"    Array.prototype.sum = function () {\n",[28,85347,85348],{"class":30,"line":1804},[28,85349,85350],{"class":34},"      return this.reduce((prev, current) => prev + current, 0)\n",[28,85352,85353],{"class":30,"line":1809},[28,85354,2264],{"class":34},[28,85356,85357],{"class":30,"line":1826},[28,85358,85359],{"class":34},"    console.log(arr.sum())\n",[28,85361,85362],{"class":30,"line":1831},[28,85363,85364],{"class":34},"    \u002F\u002F ③排序\n",[28,85366,85367],{"class":30,"line":1836},[28,85368,85369],{"class":34},"    Array.prototype.rever = function () {\n",[28,85371,85372],{"class":30,"line":1841},[28,85373,85374],{"class":34},"      return this.reverse()\n",[28,85376,85377],{"class":30,"line":1855},[28,85378,2264],{"class":34},[28,85380,85381],{"class":30,"line":1860},[28,85382,85383],{"class":34},"    console.log(arr.rever())\n",[28,85385,85386],{"class":30,"line":2654},[28,85387,2477],{"emptyLinePlaceholder":144},[28,85389,85390,85392,85394],{"class":30,"line":2668},[28,85391,52492],{"class":34},[28,85393,51888],{"class":51375},[28,85395,51382],{"class":34},[28,85397,85398,85400,85402],{"class":30,"line":2676},[28,85399,51860],{"class":34},[28,85401,51875],{"class":51375},[28,85403,51382],{"class":34},[14,85405,85406],{},[1539,85407],{"alt":23,"src":85408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[188,85410,85412],{"id":85411},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85414,85415],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85417,85418],{},[1539,85419],{"alt":23,"src":85420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[18,85422,85424],{"className":53142,"code":85423,"language":53144,"meta":23,"style":23},"\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",[25,85425,85426,85434,85442,85447,85452,85456,85461,85466,85471,85479],{"__ignoreMap":23},[28,85427,85428,85430,85432],{"class":30,"line":31},[28,85429,99],{"class":34},[28,85431,51875],{"class":51375},[28,85433,51382],{"class":34},[28,85435,85436,85438,85440],{"class":30,"line":94},[28,85437,52219],{"class":34},[28,85439,51888],{"class":51375},[28,85441,51382],{"class":34},[28,85443,85444],{"class":30,"line":109},[28,85445,85446],{"class":34},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[28,85448,85449],{"class":30,"line":125},[28,85450,85451],{"class":34},"    function Star() {\n",[28,85453,85454],{"class":30,"line":131},[28,85455,2264],{"class":34},[28,85457,85458],{"class":30,"line":1291},[28,85459,85460],{"class":34},"    const ldh = new Star()\n",[28,85462,85463],{"class":30,"line":1297},[28,85464,85465],{"class":34},"    console.log(Star.prototype)\n",[28,85467,85468],{"class":30,"line":1388},[28,85469,85470],{"class":34},"    console.log(Star.prototype.constructor === Star)\n",[28,85472,85473,85475,85477],{"class":30,"line":1394},[28,85474,52492],{"class":34},[28,85476,51888],{"class":51375},[28,85478,51382],{"class":34},[28,85480,85481,85483,85485],{"class":30,"line":1406},[28,85482,51860],{"class":34},[28,85484,51875],{"class":51375},[28,85486,51382],{"class":34},[14,85488,85489],{},[1539,85490],{"alt":23,"src":85491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85493,85494],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[18,85496,85498],{"className":53142,"code":85497,"language":53144,"meta":23,"style":23},"  \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",[25,85499,85500,85508,85512,85516,85520,85525,85530,85535,85539,85544,85549,85554,85559,85564,85569,85573,85577,85582,85587,85592,85596,85601,85606,85610,85614,85618],{"__ignoreMap":23},[28,85501,85502,85504,85506],{"class":30,"line":31},[28,85503,52219],{"class":34},[28,85505,51888],{"class":51375},[28,85507,51382],{"class":34},[28,85509,85510],{"class":30,"line":94},[28,85511,85446],{"class":34},[28,85513,85514],{"class":30,"line":109},[28,85515,85451],{"class":34},[28,85517,85518],{"class":30,"line":125},[28,85519,2264],{"class":34},[28,85521,85522],{"class":30,"line":131},[28,85523,85524],{"class":34},"    \u002F\u002F const ldh = new Star()\n",[28,85526,85527],{"class":30,"line":1291},[28,85528,85529],{"class":34},"    \u002F\u002F console.log(Star.prototype)\n",[28,85531,85532],{"class":30,"line":1297},[28,85533,85534],{"class":34},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[28,85536,85537],{"class":30,"line":1388},[28,85538,2477],{"emptyLinePlaceholder":144},[28,85540,85541],{"class":30,"line":1394},[28,85542,85543],{"class":34},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[28,85545,85546],{"class":30,"line":1406},[28,85547,85548],{"class":34},"    \u002F\u002F Star.prototype.sing = function () {\n",[28,85550,85551],{"class":30,"line":1689},[28,85552,85553],{"class":34},"    \u002F\u002F   console.log('唱歌')\n",[28,85555,85556],{"class":30,"line":1694},[28,85557,85558],{"class":34},"    \u002F\u002F }\n",[28,85560,85561],{"class":30,"line":1700},[28,85562,85563],{"class":34},"    \u002F\u002F Star.prototype.dance = function () {\n",[28,85565,85566],{"class":30,"line":1705},[28,85567,85568],{"class":34},"    \u002F\u002F   console.log('跳舞')\n",[28,85570,85571],{"class":30,"line":1719},[28,85572,85558],{"class":34},[28,85574,85575],{"class":30,"line":1724},[28,85576,85465],{"class":34},[28,85578,85579],{"class":30,"line":1730},[28,85580,85581],{"class":34},"    Star.prototype = {\n",[28,85583,85584],{"class":30,"line":1751},[28,85585,85586],{"class":34},"      sing: function () {\n",[28,85588,85589],{"class":30,"line":1756},[28,85590,85591],{"class":34},"        console.log('唱歌')\n",[28,85593,85594],{"class":30,"line":1770},[28,85595,77967],{"class":34},[28,85597,85598],{"class":30,"line":1775},[28,85599,85600],{"class":34},"      dance: function () {\n",[28,85602,85603],{"class":30,"line":1804},[28,85604,85605],{"class":34},"        console.log('跳舞')\n",[28,85607,85608],{"class":30,"line":1809},[28,85609,52473],{"class":34},[28,85611,85612],{"class":30,"line":1826},[28,85613,2264],{"class":34},[28,85615,85616],{"class":30,"line":1831},[28,85617,85465],{"class":34},[28,85619,85620,85622,85624],{"class":30,"line":1836},[28,85621,52492],{"class":34},[28,85623,51888],{"class":51375},[28,85625,51382],{"class":34},[14,85627,85628],{},"进行输出结果后会发现：",[14,85630,85631],{},[1539,85632],{"alt":23,"src":85633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85635,85636],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85638,85639],{},"所以，要重新指回创造这个原型对象的构造函数",[18,85641,85643],{"className":71288,"code":85642,"language":71290,"meta":23,"style":23},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[25,85644,85645,85659,85664,85669,85680,85693,85698,85709,85723,85727],{"__ignoreMap":23},[28,85646,85647,85650,85652,85655,85657],{"class":30,"line":31},[28,85648,85649],{"class":45},"Star",[28,85651,768],{"class":34},[28,85653,85654],{"class":45},"prototype",[28,85656,13641],{"class":38},[28,85658,15649],{"class":34},[28,85660,85661],{"class":30,"line":94},[28,85662,85663],{"class":105},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[28,85665,85666],{"class":30,"line":109},[28,85667,85668],{"class":34},"  constructor: Star,\n",[28,85670,85671,85674,85676,85678],{"class":30,"line":125},[28,85672,85673],{"class":2040},"  sing",[28,85675,51512],{"class":34},[28,85677,54524],{"class":38},[28,85679,54527],{"class":34},[28,85681,85682,85684,85686,85688,85691],{"class":30,"line":131},[28,85683,73828],{"class":34},[28,85685,58322],{"class":2040},[28,85687,221],{"class":34},[28,85689,85690],{"class":320},"'唱歌'",[28,85692,227],{"class":34},[28,85694,85695],{"class":30,"line":1291},[28,85696,85697],{"class":34},"   },\n",[28,85699,85700,85703,85705,85707],{"class":30,"line":1297},[28,85701,85702],{"class":2040},"   dance",[28,85704,51512],{"class":34},[28,85706,54524],{"class":38},[28,85708,54527],{"class":34},[28,85710,85711,85714,85716,85718,85721],{"class":30,"line":1388},[28,85712,85713],{"class":34},"     console.",[28,85715,58322],{"class":2040},[28,85717,221],{"class":34},[28,85719,85720],{"class":320},"'跳舞'",[28,85722,227],{"class":34},[28,85724,85725],{"class":30,"line":1394},[28,85726,4386],{"class":34},[28,85728,85729],{"class":30,"line":1406},[28,85730,1642],{"class":34},[14,85732,85733],{},[1539,85734],{"alt":23,"src":85735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85737,85738],{},"总结1：",[14,85740,85741],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85743,85744],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85746,85747],{},"constructor指的是他的来源",[14,85749,85750],{},[1539,85751],{"alt":23,"src":85752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85754,85755],{},[1539,85756],{"alt":23,"src":85757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85759,85760],{},"总结2：",[14,85762,85763],{},[1539,85764],{"alt":23,"src":85765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85767,85768],{},[1539,85769],{"alt":23,"src":85770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85772,85773],{},[1539,85774],{"alt":23,"src":85775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[188,85777,85779],{"id":85778},"_4134-对象原型","4.13.4 对象原型",[14,85781,85782],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85784,85785],{},"对象原型就是__proto__这个属性",[14,85787,85788],{},[1539,85789],{"alt":23,"src":85790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85792,85793],{},[1539,85794],{"alt":23,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85797,85798],{},[1539,85799],{"alt":23,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85802,85803],{},[1539,85804],{"alt":23,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[18,85807,85809],{"className":53142,"code":85808,"language":53144,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,85810,85811,85819,85827,85831,85835,85839,85844,85852],{"__ignoreMap":23},[28,85812,85813,85815,85817],{"class":30,"line":31},[28,85814,99],{"class":34},[28,85816,51875],{"class":51375},[28,85818,51382],{"class":34},[28,85820,85821,85823,85825],{"class":30,"line":94},[28,85822,52219],{"class":34},[28,85824,51888],{"class":51375},[28,85826,51382],{"class":34},[28,85828,85829],{"class":30,"line":109},[28,85830,85451],{"class":34},[28,85832,85833],{"class":30,"line":125},[28,85834,2264],{"class":34},[28,85836,85837],{"class":30,"line":131},[28,85838,85460],{"class":34},[28,85840,85841],{"class":30,"line":1291},[28,85842,85843],{"class":34},"    console.log(ldh)\n",[28,85845,85846,85848,85850],{"class":30,"line":1297},[28,85847,52492],{"class":34},[28,85849,51888],{"class":51375},[28,85851,51382],{"class":34},[28,85853,85854,85856,85858],{"class":30,"line":1388},[28,85855,51860],{"class":34},[28,85857,51875],{"class":51375},[28,85859,51382],{"class":34},[14,85861,85862],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85864,85865],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85867,85868],{},[1539,85869],{"alt":23,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85872,85873],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85875,85876],{},"对象原型指向原型对象",[14,85878,85879],{},[1539,85880],{"alt":23,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85883,85884],{},[1539,85885],{"alt":23,"src":85886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85888,85889],{},[1539,85890],{"alt":23,"src":85891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[188,85893,85895],{"id":85894},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85897,85898],{},[1539,85899],{"alt":23,"src":85900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[171,85902,85903,85906,85909,85912],{},[174,85904,85905],{},"构造函数通过new的形式实例化得到实例对象",[174,85907,85908],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[174,85910,85911],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[174,85913,85914],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85916,85917],{},[1539,85918],{"alt":23,"src":85919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85921,85922],{},"题目梳理：",[14,85924,85925],{},[1539,85926],{"alt":23,"src":85927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[188,85929,85931],{"id":85930},"_4136-原型继承","4.13.6 原型继承",[14,85933,85934],{},[1539,85935],{"alt":23,"src":85936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85938,85939],{},[1539,85940],{"alt":23,"src":85941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85943,85944],{},[1539,85945],{"alt":23,"src":85946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85948,85949],{},[1539,85950],{"alt":23,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85953,85954],{},[1539,85955],{"alt":23,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85958,85959],{},[1539,85960],{"alt":23,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85963,85964],{},[1539,85965],{"alt":23,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85968,85969],{},[1539,85970],{"alt":23,"src":85971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85973,85974],{},"回顾：构造函数每次new得到对象都是不同的",[188,85976,85978],{"id":85977},"_4137-原型链","4.13.7 原型链",[14,85980,85981],{},[1539,85982],{"alt":23,"src":85983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85985,85986],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85988,85989],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85991,85992],{},"大哥是Object",[14,85994,85995],{},[1539,85996],{"alt":23,"src":85997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85999,86000],{},[1539,86001],{"alt":23,"src":86002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86004,86005],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86007,86008],{},"万物皆对象",[188,86010,86012],{"id":86011},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86014,86015],{},"模态框",[14,86017,86018],{},"以后遇见这个效果直接使用这个就行",[14,86020,86021],{},[1539,86022],{"alt":23,"src":86023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86025,86026],{},[1539,86027],{"alt":23,"src":86028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86030,86031],{},[1539,86032],{"alt":23,"src":86033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86035,86036],{},[1539,86037],{"alt":23,"src":86038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86040,86041],{},"补充知识点：",[171,86043,86044],{},[174,86045,86046],{},"append()",[14,86048,86049],{},[1539,86050],{"alt":23,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[18,86053,86055],{"className":50708,"code":86054,"language":50710,"meta":23,"style":23},"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",[25,86056,86057,86062,86067,86072,86076,86080,86084,86089,86094,86099,86103],{"__ignoreMap":23},[28,86058,86059],{"class":30,"line":31},[28,86060,86061],{"class":34},"append(param1)\n",[28,86063,86064],{"class":30,"line":94},[28,86065,86066],{"class":34},"append(param1, param2)\n",[28,86068,86069],{"class":30,"line":109},[28,86070,86071],{"class":34},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[28,86073,86074],{"class":30,"line":125},[28,86075,2477],{"emptyLinePlaceholder":144},[28,86077,86078],{"class":30,"line":131},[28,86079,2477],{"emptyLinePlaceholder":144},[28,86081,86082],{"class":30,"line":1291},[28,86083,2477],{"emptyLinePlaceholder":144},[28,86085,86086],{"class":30,"line":1297},[28,86087,86088],{"class":34},"let div = document.createElement(\"div\");\n",[28,86090,86091],{"class":30,"line":1388},[28,86092,86093],{"class":34},"let p = document.createElement(\"p\");\n",[28,86095,86096],{"class":30,"line":1394},[28,86097,86098],{"class":34},"div.append(p);\n",[28,86100,86101],{"class":30,"line":1406},[28,86102,2477],{"emptyLinePlaceholder":144},[28,86104,86105,86108,86110],{"class":30,"line":1689},[28,86106,86107],{"class":34},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[28,86109,14],{"class":51375},[28,86111,86112],{"class":34},"> ]\n",[171,86114,86115],{"start":94},[174,86116,86117],{},"remove()",[14,86119,86120],{},"自己删自己",[14,86122,86123],{},[1539,86124],{"alt":23,"src":86125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[18,86127,86129],{"className":50708,"code":86128,"language":50710,"meta":23,"style":23},"\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",[25,86130,86131,86141,86155,86159,86167,86181,86201,86213,86221,86228,86240,86253,86288,86300,86311,86323,86335,86347,86374,86384,86388,86392,86401,86413,86427,86437,86449,86453,86457,86467,86478,86488,86498,86511,86524,86534,86538,86542,86551,86561,86573,86577,86581,86590,86600,86610,86622,86626,86630,86640,86656,86667,86677,86687,86699,86711,86723,86727,86731,86744,86755,86759,86767,86775,86779,86787,86807,86827,86835,86840,86866,86871,86876,86895,86900,86912,86917,86928,86938,86948,86953,86958,86962,86967,86972,86977,86997,87002,87022,87027,87041,87046,87051,87056,87072,87076,87081,87110,87115,87120,87125,87136,87140,87144,87148,87153,87178,87183,87208,87213,87222,87226,87231,87256,87260,87285,87289,87298,87302,87307,87325,87335,87339,87347,87355,87359],{"__ignoreMap":23},[28,86132,86133,86135,86137,86139],{"class":30,"line":31},[28,86134,51372],{"class":34},[28,86136,51376],{"class":51375},[28,86138,51379],{"class":2040},[28,86140,51382],{"class":34},[28,86142,86143,86145,86147,86149,86151,86153],{"class":30,"line":94},[28,86144,99],{"class":34},[28,86146,50710],{"class":51375},[28,86148,51391],{"class":2040},[28,86150,39],{"class":34},[28,86152,51396],{"class":320},[28,86154,51382],{"class":34},[28,86156,86157],{"class":30,"line":109},[28,86158,2477],{"emptyLinePlaceholder":144},[28,86160,86161,86163,86165],{"class":30,"line":125},[28,86162,99],{"class":34},[28,86164,51409],{"class":51375},[28,86166,51382],{"class":34},[28,86168,86169,86171,86173,86175,86177,86179],{"class":30,"line":131},[28,86170,52219],{"class":34},[28,86172,51419],{"class":51375},[28,86174,51422],{"class":2040},[28,86176,39],{"class":34},[28,86178,51427],{"class":320},[28,86180,51382],{"class":34},[28,86182,86183,86185,86187,86189,86191,86193,86195,86197,86199],{"class":30,"line":1291},[28,86184,52219],{"class":34},[28,86186,51419],{"class":51375},[28,86188,14997],{"class":2040},[28,86190,39],{"class":34},[28,86192,51466],{"class":320},[28,86194,51446],{"class":2040},[28,86196,39],{"class":34},[28,86198,51473],{"class":320},[28,86200,51382],{"class":34},[28,86202,86203,86205,86207,86209,86211],{"class":30,"line":1297},[28,86204,52219],{"class":34},[28,86206,51482],{"class":51375},[28,86208,51485],{"class":34},[28,86210,51482],{"class":51375},[28,86212,51382],{"class":34},[28,86214,86215,86217,86219],{"class":30,"line":1388},[28,86216,52219],{"class":34},[28,86218,136],{"class":51375},[28,86220,51382],{"class":34},[28,86222,86223,86226],{"class":30,"line":1394},[28,86224,86225],{"class":2040},"    .modal",[28,86227,15649],{"class":34},[28,86229,86230,86232,86234,86236,86238],{"class":30,"line":1406},[28,86231,54846],{"class":45},[28,86233,51512],{"class":34},[28,86235,4050],{"class":45},[28,86237,51567],{"class":38},[28,86239,1367],{"class":34},[28,86241,86242,86245,86247,86249,86251],{"class":30,"line":1689},[28,86243,86244],{"class":45},"      min-height",[28,86246,51512],{"class":34},[28,86248,525],{"class":45},[28,86250,51567],{"class":38},[28,86252,1367],{"class":34},[28,86254,86255,86257,86259,86261,86263,86265,86267,86269,86271,86273,86275,86277,86279,86281,86283,86286],{"class":30,"line":1694},[28,86256,78825],{"class":45},[28,86258,51512],{"class":34},[28,86260,407],{"class":45},[28,86262,4170],{"class":45},[28,86264,2115],{"class":45},[28,86266,51567],{"class":38},[28,86268,78842],{"class":45},[28,86270,221],{"class":34},[28,86272,407],{"class":45},[28,86274,12512],{"class":34},[28,86276,407],{"class":45},[28,86278,12512],{"class":34},[28,86280,407],{"class":45},[28,86282,12512],{"class":34},[28,86284,86285],{"class":45},"0.1",[28,86287,2796],{"class":34},[28,86289,86290,86292,86294,86296,86298],{"class":30,"line":1700},[28,86291,55209],{"class":45},[28,86293,51512],{"class":34},[28,86295,507],{"class":45},[28,86297,51567],{"class":38},[28,86299,1367],{"class":34},[28,86301,86302,86304,86306,86309],{"class":30,"line":1705},[28,86303,54834],{"class":45},[28,86305,51512],{"class":34},[28,86307,86308],{"class":45},"fixed",[28,86310,1367],{"class":34},[28,86312,86313,86316,86318,86321],{"class":30,"line":1719},[28,86314,86315],{"class":45},"      z-index",[28,86317,51512],{"class":34},[28,86319,86320],{"class":45},"999",[28,86322,1367],{"class":34},[28,86324,86325,86327,86329,86331,86333],{"class":30,"line":1724},[28,86326,54913],{"class":45},[28,86328,51512],{"class":34},[28,86330,866],{"class":45},[28,86332,542],{"class":38},[28,86334,1367],{"class":34},[28,86336,86337,86339,86341,86343,86345],{"class":30,"line":1730},[28,86338,55022],{"class":45},[28,86340,51512],{"class":34},[28,86342,866],{"class":45},[28,86344,542],{"class":38},[28,86346,1367],{"class":34},[28,86348,86349,86351,86353,86355,86357,86360,86362,86364,86366,86368,86370,86372],{"class":30,"line":1751},[28,86350,78866],{"class":45},[28,86352,51512],{"class":34},[28,86354,78871],{"class":45},[28,86356,221],{"class":34},[28,86358,86359],{"class":45},"-50",[28,86361,542],{"class":38},[28,86363,12512],{"class":34},[28,86365,86359],{"class":45},[28,86367,542],{"class":38},[28,86369,12512],{"class":34},[28,86371,407],{"class":45},[28,86373,2796],{"class":34},[28,86375,86376,86378,86380,86382],{"class":30,"line":1756},[28,86377,54959],{"class":45},[28,86379,51512],{"class":34},[28,86381,60917],{"class":45},[28,86383,1367],{"class":34},[28,86385,86386],{"class":30,"line":1770},[28,86387,2264],{"class":34},[28,86389,86390],{"class":30,"line":1775},[28,86391,2477],{"emptyLinePlaceholder":144},[28,86393,86394,86396,86399],{"class":30,"line":1804},[28,86395,86225],{"class":2040},[28,86397,86398],{"class":2040}," .header",[28,86400,15649],{"class":34},[28,86402,86403,86405,86407,86409,86411],{"class":30,"line":1809},[28,86404,57434],{"class":45},[28,86406,51512],{"class":34},[28,86408,614],{"class":45},[28,86410,51567],{"class":38},[28,86412,1367],{"class":34},[28,86414,86415,86417,86419,86421,86423,86425],{"class":30,"line":1826},[28,86416,54770],{"class":45},[28,86418,51512],{"class":34},[28,86420,407],{"class":45},[28,86422,2115],{"class":45},[28,86424,51567],{"class":38},[28,86426,1367],{"class":34},[28,86428,86429,86431,86433,86435],{"class":30,"line":1831},[28,86430,54834],{"class":45},[28,86432,51512],{"class":34},[28,86434,54839],{"class":45},[28,86436,1367],{"class":34},[28,86438,86439,86441,86443,86445,86447],{"class":30,"line":1836},[28,86440,54997],{"class":45},[28,86442,51512],{"class":34},[28,86444,102],{"class":45},[28,86446,51567],{"class":38},[28,86448,1367],{"class":34},[28,86450,86451],{"class":30,"line":1841},[28,86452,2264],{"class":34},[28,86454,86455],{"class":30,"line":1855},[28,86456,2477],{"emptyLinePlaceholder":144},[28,86458,86459,86461,86463,86465],{"class":30,"line":1860},[28,86460,86225],{"class":2040},[28,86462,86398],{"class":2040},[28,86464,3109],{"class":51375},[28,86466,15649],{"class":34},[28,86468,86469,86472,86474,86476],{"class":30,"line":2654},[28,86470,86471],{"class":45},"      font-style",[28,86473,51512],{"class":34},[28,86475,63916],{"class":45},[28,86477,1367],{"class":34},[28,86479,86480,86482,86484,86486],{"class":30,"line":2668},[28,86481,57491],{"class":45},[28,86483,51512],{"class":34},[28,86485,62145],{"class":45},[28,86487,1367],{"class":34},[28,86489,86490,86492,86494,86496],{"class":30,"line":2676},[28,86491,54834],{"class":45},[28,86493,51512],{"class":34},[28,86495,54906],{"class":45},[28,86497,1367],{"class":34},[28,86499,86500,86503,86505,86507,86509],{"class":30,"line":2681},[28,86501,86502],{"class":45},"      right",[28,86504,51512],{"class":34},[28,86506,785],{"class":45},[28,86508,51567],{"class":38},[28,86510,1367],{"class":34},[28,86512,86513,86515,86517,86520,86522],{"class":30,"line":2687},[28,86514,55022],{"class":45},[28,86516,51512],{"class":34},[28,86518,86519],{"class":45},"-2",[28,86521,51567],{"class":38},[28,86523,1367],{"class":34},[28,86525,86526,86528,86530,86532],{"class":30,"line":2693},[28,86527,62100],{"class":45},[28,86529,51512],{"class":34},[28,86531,62105],{"class":45},[28,86533,1367],{"class":34},[28,86535,86536],{"class":30,"line":2698},[28,86537,2264],{"class":34},[28,86539,86540],{"class":30,"line":8025},[28,86541,2477],{"emptyLinePlaceholder":144},[28,86543,86544,86546,86549],{"class":30,"line":8049},[28,86545,86225],{"class":2040},[28,86547,86548],{"class":2040}," .body",[28,86550,15649],{"class":34},[28,86552,86553,86555,86557,86559],{"class":30,"line":8054},[28,86554,57361],{"class":45},[28,86556,51512],{"class":34},[28,86558,51667],{"class":45},[28,86560,1367],{"class":34},[28,86562,86563,86565,86567,86569,86571],{"class":30,"line":8060},[28,86564,54770],{"class":45},[28,86566,51512],{"class":34},[28,86568,659],{"class":45},[28,86570,51567],{"class":38},[28,86572,1367],{"class":34},[28,86574,86575],{"class":30,"line":8087},[28,86576,2264],{"class":34},[28,86578,86579],{"class":30,"line":8092},[28,86580,2477],{"emptyLinePlaceholder":144},[28,86582,86583,86585,86588],{"class":30,"line":8098},[28,86584,86225],{"class":2040},[28,86586,86587],{"class":2040}," .footer",[28,86589,15649],{"class":34},[28,86591,86592,86594,86596,86598],{"class":30,"line":8110},[28,86593,55084],{"class":45},[28,86595,51512],{"class":34},[28,86597,51552],{"class":45},[28,86599,1367],{"class":34},[28,86601,86602,86604,86606,86608],{"class":30,"line":8122},[28,86603,55095],{"class":45},[28,86605,51512],{"class":34},[28,86607,51655],{"class":45},[28,86609,1367],{"class":34},[28,86611,86612,86614,86616,86618,86620],{"class":30,"line":8134},[28,86613,54770],{"class":45},[28,86615,51512],{"class":34},[28,86617,659],{"class":45},[28,86619,51567],{"class":38},[28,86621,1367],{"class":34},[28,86623,86624],{"class":30,"line":9793},[28,86625,2264],{"class":34},[28,86627,86628],{"class":30,"line":9818},[28,86629,2477],{"emptyLinePlaceholder":144},[28,86631,86632,86634,86636,86638],{"class":30,"line":9841},[28,86633,86225],{"class":2040},[28,86635,86587],{"class":2040},[28,86637,1475],{"class":51375},[28,86639,15649],{"class":34},[28,86641,86642,86644,86646,86648,86650,86652,86654],{"class":30,"line":9865},[28,86643,54770],{"class":45},[28,86645,51512],{"class":34},[28,86647,57],{"class":45},[28,86649,51567],{"class":38},[28,86651,2160],{"class":45},[28,86653,51567],{"class":38},[28,86655,1367],{"class":34},[28,86657,86658,86660,86662,86665],{"class":30,"line":9870},[28,86659,61796],{"class":45},[28,86661,51512],{"class":34},[28,86663,86664],{"class":45},"#ccc",[28,86666,1367],{"class":34},[28,86668,86669,86671,86673,86675],{"class":30,"line":9875},[28,86670,64045],{"class":45},[28,86672,51512],{"class":34},[28,86674,54812],{"class":45},[28,86676,1367],{"class":34},[28,86678,86679,86681,86683,86685],{"class":30,"line":9880},[28,86680,57491],{"class":45},[28,86682,51512],{"class":34},[28,86684,60917],{"class":45},[28,86686,1367],{"class":34},[28,86688,86689,86691,86693,86695,86697],{"class":30,"line":9889},[28,86690,55209],{"class":45},[28,86692,51512],{"class":34},[28,86694,52],{"class":45},[28,86696,51567],{"class":38},[28,86698,1367],{"class":34},[28,86700,86701,86703,86705,86707,86709],{"class":30,"line":9894},[28,86702,61825],{"class":45},[28,86704,51512],{"class":34},[28,86706,659],{"class":45},[28,86708,51567],{"class":38},[28,86710,1367],{"class":34},[28,86712,86713,86715,86717,86719,86721],{"class":30,"line":9900},[28,86714,54997],{"class":45},[28,86716,51512],{"class":34},[28,86718,759],{"class":45},[28,86720,51567],{"class":38},[28,86722,1367],{"class":34},[28,86724,86725],{"class":30,"line":9921},[28,86726,2264],{"class":34},[28,86728,86729],{"class":30,"line":9927},[28,86730,2477],{"emptyLinePlaceholder":144},[28,86732,86733,86735,86737,86739,86742],{"class":30,"line":9941},[28,86734,86225],{"class":2040},[28,86736,86587],{"class":2040},[28,86738,1475],{"class":51375},[28,86740,86741],{"class":2040},".submit",[28,86743,15649],{"class":34},[28,86745,86746,86748,86750,86753],{"class":30,"line":9947},[28,86747,54959],{"class":45},[28,86749,51512],{"class":34},[28,86751,86752],{"class":45},"#369",[28,86754,1367],{"class":34},[28,86756,86757],{"class":30,"line":9974},[28,86758,2264],{"class":34},[28,86760,86761,86763,86765],{"class":30,"line":9983},[28,86762,52492],{"class":34},[28,86764,136],{"class":51375},[28,86766,51382],{"class":34},[28,86768,86769,86771,86773],{"class":30,"line":9989},[28,86770,51860],{"class":34},[28,86772,51409],{"class":51375},[28,86774,51382],{"class":34},[28,86776,86777],{"class":30,"line":9997},[28,86778,2477],{"emptyLinePlaceholder":144},[28,86780,86781,86783,86785],{"class":30,"line":10002},[28,86782,99],{"class":34},[28,86784,51875],{"class":51375},[28,86786,51382],{"class":34},[28,86788,86789,86791,86793,86795,86797,86800,86803,86805],{"class":30,"line":16681},[28,86790,52219],{"class":34},[28,86792,53962],{"class":51375},[28,86794,15036],{"class":2040},[28,86796,39],{"class":34},[28,86798,86799],{"class":320},"\"delete\"",[28,86801,86802],{"class":34},">删除\u003C\u002F",[28,86804,53962],{"class":51375},[28,86806,51382],{"class":34},[28,86808,86809,86811,86813,86815,86817,86820,86823,86825],{"class":30,"line":16687},[28,86810,52219],{"class":34},[28,86812,53962],{"class":51375},[28,86814,15036],{"class":2040},[28,86816,39],{"class":34},[28,86818,86819],{"class":320},"\"login\"",[28,86821,86822],{"class":34},">登录\u003C\u002F",[28,86824,53962],{"class":51375},[28,86826,51382],{"class":34},[28,86828,86829,86831,86833],{"class":30,"line":16710},[28,86830,52219],{"class":34},[28,86832,51888],{"class":51375},[28,86834,51382],{"class":34},[28,86836,86837],{"class":30,"line":16716},[28,86838,86839],{"class":105},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[28,86841,86842,86844,86847,86849,86851,86853,86855,86857,86860,86862,86864],{"class":30,"line":16739},[28,86843,70159],{"class":38},[28,86845,86846],{"class":2040}," Modal",[28,86848,221],{"class":34},[28,86850,51482],{"class":5293},[28,86852,13641],{"class":38},[28,86854,70005],{"class":320},[28,86856,12512],{"class":34},[28,86858,86859],{"class":5293},"message",[28,86861,13641],{"class":38},[28,86863,70005],{"class":320},[28,86865,12519],{"class":34},[28,86867,86868],{"class":30,"line":16753},[28,86869,86870],{"class":105},"      \u002F\u002F 创建Model 模态框盒子\n",[28,86872,86873],{"class":30,"line":16773},[28,86874,86875],{"class":105},"      \u002F\u002F 1.1 创建div标签\n",[28,86877,86878,86880,86883,86885,86887,86889,86891,86893],{"class":30,"line":16779},[28,86879,70126],{"class":45},[28,86881,86882],{"class":34},".modalBox ",[28,86884,39],{"class":38},[28,86886,54471],{"class":34},[28,86888,70226],{"class":2040},[28,86890,221],{"class":34},[28,86892,82006],{"class":320},[28,86894,227],{"class":34},[28,86896,86897],{"class":30,"line":16790},[28,86898,86899],{"class":105},"      \u002F\u002F 1.2 给div 添加类名为model\n",[28,86901,86902,86904,86907,86909],{"class":30,"line":16813},[28,86903,70126],{"class":45},[28,86905,86906],{"class":34},".modalBox.className ",[28,86908,39],{"class":38},[28,86910,86911],{"class":320}," 'modal'\n",[28,86913,86914],{"class":30,"line":16835},[28,86915,86916],{"class":105},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[28,86918,86919,86921,86924,86926],{"class":30,"line":16840},[28,86920,70126],{"class":45},[28,86922,86923],{"class":34},".modalBox.innerHTML ",[28,86925,39],{"class":38},[28,86927,70243],{"class":320},[28,86929,86930,86933,86935],{"class":30,"line":16846},[28,86931,86932],{"class":320},"        \u003Cdiv class=\"header\">${",[28,86934,51482],{"class":34},[28,86936,86937],{"class":320},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[28,86939,86940,86943,86945],{"class":30,"line":16860},[28,86941,86942],{"class":320},"        \u003Cdiv class=\"body\">${",[28,86944,86859],{"class":34},[28,86946,86947],{"class":320},"}\u003C\u002Fdiv>\n",[28,86949,86950],{"class":30,"line":16873},[28,86951,86952],{"class":320},"      `\n",[28,86954,86955],{"class":30,"line":16878},[28,86956,86957],{"class":105},"      \u002F\u002F console.log(this.modalBox)\n",[28,86959,86960],{"class":30,"line":16892},[28,86961,2264],{"class":34},[28,86963,86964],{"class":30,"line":16897},[28,86965,86966],{"class":105},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[28,86968,86969],{"class":30,"line":16903},[28,86970,86971],{"class":105},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[28,86973,86974],{"class":30,"line":16908},[28,86975,86976],{"class":105},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[28,86978,86979,86982,86984,86986,86988,86991,86993,86995],{"class":30,"line":16922},[28,86980,86981],{"class":45},"    Modal",[28,86983,768],{"class":34},[28,86985,85654],{"class":45},[28,86987,768],{"class":34},[28,86989,86990],{"class":2040},"open",[28,86992,13641],{"class":38},[28,86994,58993],{"class":38},[28,86996,54527],{"class":34},[28,86998,86999],{"class":30,"line":16927},[28,87000,87001],{"class":105},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[28,87003,87004,87006,87009,87011,87013,87015,87017,87020],{"class":30,"line":16932},[28,87005,58303],{"class":38},[28,87007,87008],{"class":45}," box",[28,87010,13641],{"class":38},[28,87012,54471],{"class":34},[28,87014,54474],{"class":2040},[28,87016,221],{"class":34},[28,87018,87019],{"class":320},"'.modal'",[28,87021,227],{"class":34},[28,87023,87024],{"class":30,"line":16946},[28,87025,87026],{"class":105},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[28,87028,87029,87032,87034,87037,87039],{"class":30,"line":16958},[28,87030,87031],{"class":34},"      box ",[28,87033,1792],{"class":38},[28,87035,87036],{"class":34}," box.",[28,87038,57081],{"class":2040},[28,87040,2053],{"class":34},[28,87042,87043],{"class":30,"line":16963},[28,87044,87045],{"class":105},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[28,87047,87048],{"class":30,"line":16976},[28,87049,87050],{"class":105},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[28,87052,87053],{"class":30,"line":16981},[28,87054,87055],{"class":105},"      \u002F\u002F append可以增加对象\n",[28,87057,87058,87061,87064,87066,87069],{"class":30,"line":16986},[28,87059,87060],{"class":34},"      document.body.",[28,87062,87063],{"class":2040},"append",[28,87065,221],{"class":34},[28,87067,87068],{"class":45},"this",[28,87070,87071],{"class":34},".modalBox)\n",[28,87073,87074],{"class":30,"line":16991},[28,87075,2477],{"emptyLinePlaceholder":144},[28,87077,87078],{"class":30,"line":17004},[28,87079,87080],{"class":105},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[28,87082,87083,87085,87088,87090,87092,87095,87097,87099,87101,87103,87106,87108],{"class":30,"line":17009},[28,87084,70126],{"class":45},[28,87086,87087],{"class":34},".modalBox.",[28,87089,54474],{"class":2040},[28,87091,221],{"class":34},[28,87093,87094],{"class":320},"'i'",[28,87096,30902],{"class":34},[28,87098,57888],{"class":2040},[28,87100,221],{"class":34},[28,87102,57893],{"class":320},[28,87104,87105],{"class":34},", () ",[28,87107,84797],{"class":38},[28,87109,15649],{"class":34},[28,87111,87112],{"class":30,"line":32709},[28,87113,87114],{"class":105},"        \u002F\u002F 这个地方需要用到箭头函数\n",[28,87116,87117],{"class":30,"line":32715},[28,87118,87119],{"class":105},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[28,87121,87122],{"class":30,"line":32721},[28,87123,87124],{"class":105},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[28,87126,87127,87129,87131,87134],{"class":30,"line":32727},[28,87128,64801],{"class":45},[28,87130,768],{"class":34},[28,87132,87133],{"class":2040},"close",[28,87135,2053],{"class":34},[28,87137,87138],{"class":30,"line":32733},[28,87139,64890],{"class":34},[28,87141,87142],{"class":30,"line":32744},[28,87143,2264],{"class":34},[28,87145,87146],{"class":30,"line":32750},[28,87147,2477],{"emptyLinePlaceholder":144},[28,87149,87150],{"class":30,"line":32770},[28,87151,87152],{"class":105},"    \u002F\u002F 测试一下 点击 删除按钮\n",[28,87154,87155,87157,87159,87161,87164,87166,87168,87170,87172,87174,87176],{"class":30,"line":32776},[28,87156,52482],{"class":34},[28,87158,54474],{"class":2040},[28,87160,221],{"class":34},[28,87162,87163],{"class":320},"'#delete'",[28,87165,30902],{"class":34},[28,87167,57888],{"class":2040},[28,87169,221],{"class":34},[28,87171,57893],{"class":320},[28,87173,87105],{"class":34},[28,87175,84797],{"class":38},[28,87177,15649],{"class":34},[28,87179,87180],{"class":30,"line":32787},[28,87181,87182],{"class":105},"      \u002F\u002F 先调用Model构造函数\n",[28,87184,87185,87187,87190,87192,87194,87196,87198,87201,87203,87206],{"class":30,"line":32793},[28,87186,58303],{"class":38},[28,87188,87189],{"class":45}," del",[28,87191,13641],{"class":38},[28,87193,11655],{"class":38},[28,87195,86846],{"class":2040},[28,87197,221],{"class":34},[28,87199,87200],{"class":320},"'温馨的提示'",[28,87202,12512],{"class":34},[28,87204,87205],{"class":320},"'您没有删除权限操作'",[28,87207,227],{"class":34},[28,87209,87210],{"class":30,"line":32799},[28,87211,87212],{"class":105},"      \u002F\u002F 实例对象调用open方法\n",[28,87214,87215,87218,87220],{"class":30,"line":32805},[28,87216,87217],{"class":34},"      del.",[28,87219,86990],{"class":2040},[28,87221,2053],{"class":34},[28,87223,87224],{"class":30,"line":32811},[28,87225,33537],{"class":34},[28,87227,87228],{"class":30,"line":32817},[28,87229,87230],{"class":105},"    \u002F\u002F 测试一下 点击 登录按钮\n",[28,87232,87233,87235,87237,87239,87242,87244,87246,87248,87250,87252,87254],{"class":30,"line":32823},[28,87234,52482],{"class":34},[28,87236,54474],{"class":2040},[28,87238,221],{"class":34},[28,87240,87241],{"class":320},"'#login'",[28,87243,30902],{"class":34},[28,87245,57888],{"class":2040},[28,87247,221],{"class":34},[28,87249,57893],{"class":320},[28,87251,87105],{"class":34},[28,87253,84797],{"class":38},[28,87255,15649],{"class":34},[28,87257,87258],{"class":30,"line":32829},[28,87259,87182],{"class":105},[28,87261,87262,87264,87267,87269,87271,87273,87275,87278,87280,87283],{"class":30,"line":32849},[28,87263,58303],{"class":38},[28,87265,87266],{"class":45}," log",[28,87268,13641],{"class":38},[28,87270,11655],{"class":38},[28,87272,86846],{"class":2040},[28,87274,221],{"class":34},[28,87276,87277],{"class":320},"'友情提示'",[28,87279,12512],{"class":34},[28,87281,87282],{"class":320},"'您还没有登录呢'",[28,87284,227],{"class":34},[28,87286,87287],{"class":30,"line":32855},[28,87288,87212],{"class":105},[28,87290,87291,87294,87296],{"class":30,"line":32871},[28,87292,87293],{"class":34},"      log.",[28,87295,86990],{"class":2040},[28,87297,2053],{"class":34},[28,87299,87300],{"class":30,"line":32877},[28,87301,33537],{"class":34},[28,87303,87304],{"class":30,"line":32891},[28,87305,87306],{"class":105},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[28,87308,87309,87311,87313,87315,87317,87319,87321,87323],{"class":30,"line":32897},[28,87310,86981],{"class":45},[28,87312,768],{"class":34},[28,87314,85654],{"class":45},[28,87316,768],{"class":34},[28,87318,87133],{"class":2040},[28,87320,13641],{"class":38},[28,87322,58993],{"class":38},[28,87324,54527],{"class":34},[28,87326,87327,87329,87331,87333],{"class":30,"line":32912},[28,87328,70126],{"class":45},[28,87330,87087],{"class":34},[28,87332,57081],{"class":2040},[28,87334,2053],{"class":34},[28,87336,87337],{"class":30,"line":32918},[28,87338,2264],{"class":34},[28,87340,87341,87343,87345],{"class":30,"line":32927},[28,87342,52492],{"class":34},[28,87344,51888],{"class":51375},[28,87346,51382],{"class":34},[28,87348,87349,87351,87353],{"class":30,"line":32933},[28,87350,51860],{"class":34},[28,87352,51875],{"class":51375},[28,87354,51382],{"class":34},[28,87356,87357],{"class":30,"line":32942},[28,87358,2477],{"emptyLinePlaceholder":144},[28,87360,87361,87363,87365],{"class":30,"line":32948},[28,87362,51860],{"class":34},[28,87364,50710],{"class":51375},[28,87366,51382],{"class":34},[14,87368,87369],{},[1539,87370],{"alt":23,"src":87371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[159,87373,87375],{"id":87374},"_414-深浅拷贝","4.14 深浅拷贝",[188,87377,87379],{"id":87378},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87381,87382],{},[1539,87383],{"alt":23,"src":87384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87386,87387],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87389,87390],{},[1539,87391],{"alt":23,"src":87392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87394,87395],{},[1539,87396],{"alt":23,"src":87397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87399,87400],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87402,87403],{},[1539,87404],{"alt":23,"src":87405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87407,11409],{},[14,87409,87410],{},[1539,87411],{"alt":23,"src":87412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[188,87414,87416],{"id":87415},"_4142-深拷贝","4.14.2 深拷贝",[14,87418,87419],{},"深拷贝：拷贝的是对象，不是地址",[14,87421,87422],{},"常用的三种方法：",[171,87424,87425,87428,87431],{},[174,87426,87427],{},"通过递归实现深拷贝",[174,87429,87430],{},"lodash\u002FcloneDeep",[174,87432,87433],{},"通过JSON.stringify()实现",[22075,87435,87437],{"id":87436},"_41421-递归函数","4.14.2.1 递归函数",[14,87439,87440],{},[1539,87441],{"alt":23,"src":87442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[171,87444,87445],{},[174,87446,87447],{},"死递归占溢出：",[18,87449,87451],{"className":53142,"code":87450,"language":53144,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,87452,87453,87461,87469,87473,87478,87482,87487,87495],{"__ignoreMap":23},[28,87454,87455,87457,87459],{"class":30,"line":31},[28,87456,99],{"class":34},[28,87458,51875],{"class":51375},[28,87460,51382],{"class":34},[28,87462,87463,87465,87467],{"class":30,"line":94},[28,87464,52219],{"class":34},[28,87466,51888],{"class":51375},[28,87468,51382],{"class":34},[28,87470,87471],{"class":30,"line":109},[28,87472,77218],{"class":34},[28,87474,87475],{"class":30,"line":125},[28,87476,87477],{"class":34},"      fn()\n",[28,87479,87480],{"class":30,"line":131},[28,87481,2264],{"class":34},[28,87483,87484],{"class":30,"line":1291},[28,87485,87486],{"class":34},"    fn()\n",[28,87488,87489,87491,87493],{"class":30,"line":1297},[28,87490,52492],{"class":34},[28,87492,51888],{"class":51375},[28,87494,51382],{"class":34},[28,87496,87497,87499,87501],{"class":30,"line":1388},[28,87498,51860],{"class":34},[28,87500,51875],{"class":51375},[28,87502,51382],{"class":34},[171,87504,87505],{"start":94},[174,87506,87507],{},"递归函数要加判断条件：",[14,87509,87510],{},[1539,87511],{"alt":23,"src":87512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[171,87514,87515],{"start":109},[174,87516,87517],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[18,87519,87521],{"className":50708,"code":87520,"language":50710,"meta":23,"style":23},"\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",[25,87522,87523,87533,87547,87551,87559,87573,87593,87605,87613,87617,87625,87637,87645,87653,87678,87690,87694,87701,87709,87717,87721],{"__ignoreMap":23},[28,87524,87525,87527,87529,87531],{"class":30,"line":31},[28,87526,51372],{"class":34},[28,87528,51376],{"class":51375},[28,87530,51379],{"class":2040},[28,87532,51382],{"class":34},[28,87534,87535,87537,87539,87541,87543,87545],{"class":30,"line":94},[28,87536,99],{"class":34},[28,87538,50710],{"class":51375},[28,87540,51391],{"class":2040},[28,87542,39],{"class":34},[28,87544,51396],{"class":320},[28,87546,51382],{"class":34},[28,87548,87549],{"class":30,"line":109},[28,87550,2477],{"emptyLinePlaceholder":144},[28,87552,87553,87555,87557],{"class":30,"line":125},[28,87554,99],{"class":34},[28,87556,51409],{"class":51375},[28,87558,51382],{"class":34},[28,87560,87561,87563,87565,87567,87569,87571],{"class":30,"line":131},[28,87562,52219],{"class":34},[28,87564,51419],{"class":51375},[28,87566,51422],{"class":2040},[28,87568,39],{"class":34},[28,87570,51427],{"class":320},[28,87572,51382],{"class":34},[28,87574,87575,87577,87579,87581,87583,87585,87587,87589,87591],{"class":30,"line":1291},[28,87576,52219],{"class":34},[28,87578,51419],{"class":51375},[28,87580,14997],{"class":2040},[28,87582,39],{"class":34},[28,87584,51466],{"class":320},[28,87586,51446],{"class":2040},[28,87588,39],{"class":34},[28,87590,51473],{"class":320},[28,87592,51382],{"class":34},[28,87594,87595,87597,87599,87601,87603],{"class":30,"line":1297},[28,87596,52219],{"class":34},[28,87598,51482],{"class":51375},[28,87600,51485],{"class":34},[28,87602,51482],{"class":51375},[28,87604,51382],{"class":34},[28,87606,87607,87609,87611],{"class":30,"line":1388},[28,87608,51860],{"class":34},[28,87610,51409],{"class":51375},[28,87612,51382],{"class":34},[28,87614,87615],{"class":30,"line":1394},[28,87616,2477],{"emptyLinePlaceholder":144},[28,87618,87619,87621,87623],{"class":30,"line":1406},[28,87620,99],{"class":34},[28,87622,51875],{"class":51375},[28,87624,51382],{"class":34},[28,87626,87627,87629,87631,87633,87635],{"class":30,"line":1689},[28,87628,52219],{"class":34},[28,87630,51686],{"class":51375},[28,87632,55389],{"class":34},[28,87634,51686],{"class":51375},[28,87636,51382],{"class":34},[28,87638,87639,87641,87643],{"class":30,"line":1694},[28,87640,52219],{"class":34},[28,87642,51888],{"class":51375},[28,87644,51382],{"class":34},[28,87646,87647,87649,87651],{"class":30,"line":1700},[28,87648,70159],{"class":38},[28,87650,73848],{"class":2040},[28,87652,10930],{"class":34},[28,87654,87655,87657,87659,87661,87663,87665,87667,87669,87671,87673,87676],{"class":30,"line":1705},[28,87656,55846],{"class":34},[28,87658,54474],{"class":2040},[28,87660,221],{"class":34},[28,87662,82006],{"class":320},[28,87664,74324],{"class":34},[28,87666,39],{"class":38},[28,87668,11655],{"class":38},[28,87670,73864],{"class":2040},[28,87672,17338],{"class":34},[28,87674,87675],{"class":2040},"toLocaleString",[28,87677,2053],{"class":34},[28,87679,87680,87683,87686,87688],{"class":30,"line":1719},[28,87681,87682],{"class":2040},"      setTimeout",[28,87684,87685],{"class":34},"(getTime, ",[28,87687,6487],{"class":45},[28,87689,227],{"class":34},[28,87691,87692],{"class":30,"line":1724},[28,87693,2264],{"class":34},[28,87695,87696,87699],{"class":30,"line":1730},[28,87697,87698],{"class":2040},"    getTime",[28,87700,2053],{"class":34},[28,87702,87703,87705,87707],{"class":30,"line":1751},[28,87704,52492],{"class":34},[28,87706,51888],{"class":51375},[28,87708,51382],{"class":34},[28,87710,87711,87713,87715],{"class":30,"line":1756},[28,87712,51860],{"class":34},[28,87714,51875],{"class":51375},[28,87716,51382],{"class":34},[28,87718,87719],{"class":30,"line":1770},[28,87720,2477],{"emptyLinePlaceholder":144},[28,87722,87723,87725,87727],{"class":30,"line":1775},[28,87724,51860],{"class":34},[28,87726,50710],{"class":51375},[28,87728,51382],{"class":34},[14,87730,87731],{},[1539,87732],{"alt":23,"src":87733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[171,87735,87736],{"start":125},[174,87737,87427],{},[14,87739,87740],{},[1539,87741],{"alt":23,"src":87742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87744,87745],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87747,39265],{},[14,87749,87750],{},"这个是简易版的递归函数深拷贝",[14,87752,87753],{},"一定要注意先数组再对象，因为万物皆可对象",[18,87755,87757],{"className":50708,"code":87756,"language":50710,"meta":23,"style":23},"\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",[25,87758,87759,87769,87783,87787,87795,87809,87829,87841,87849,87853,87861,87869,87879,87888,87896,87912,87916,87924,87928,87932,87944,87949,87968,87984,87989,87994,87999,88014,88019,88024,88033,88041,88058,88066,88072,88080,88085,88090,88099,88103,88107,88111,88122,88131,88141,88155,88165,88173,88181,88189,88193],{"__ignoreMap":23},[28,87760,87761,87763,87765,87767],{"class":30,"line":31},[28,87762,51372],{"class":34},[28,87764,51376],{"class":51375},[28,87766,51379],{"class":2040},[28,87768,51382],{"class":34},[28,87770,87771,87773,87775,87777,87779,87781],{"class":30,"line":94},[28,87772,99],{"class":34},[28,87774,50710],{"class":51375},[28,87776,51391],{"class":2040},[28,87778,39],{"class":34},[28,87780,51396],{"class":320},[28,87782,51382],{"class":34},[28,87784,87785],{"class":30,"line":109},[28,87786,2477],{"emptyLinePlaceholder":144},[28,87788,87789,87791,87793],{"class":30,"line":125},[28,87790,99],{"class":34},[28,87792,51409],{"class":51375},[28,87794,51382],{"class":34},[28,87796,87797,87799,87801,87803,87805,87807],{"class":30,"line":131},[28,87798,52219],{"class":34},[28,87800,51419],{"class":51375},[28,87802,51422],{"class":2040},[28,87804,39],{"class":34},[28,87806,51427],{"class":320},[28,87808,51382],{"class":34},[28,87810,87811,87813,87815,87817,87819,87821,87823,87825,87827],{"class":30,"line":1291},[28,87812,52219],{"class":34},[28,87814,51419],{"class":51375},[28,87816,14997],{"class":2040},[28,87818,39],{"class":34},[28,87820,51466],{"class":320},[28,87822,51446],{"class":2040},[28,87824,39],{"class":34},[28,87826,51473],{"class":320},[28,87828,51382],{"class":34},[28,87830,87831,87833,87835,87837,87839],{"class":30,"line":1297},[28,87832,52219],{"class":34},[28,87834,51482],{"class":51375},[28,87836,51485],{"class":34},[28,87838,51482],{"class":51375},[28,87840,51382],{"class":34},[28,87842,87843,87845,87847],{"class":30,"line":1388},[28,87844,51860],{"class":34},[28,87846,51409],{"class":51375},[28,87848,51382],{"class":34},[28,87850,87851],{"class":30,"line":1394},[28,87852,2477],{"emptyLinePlaceholder":144},[28,87854,87855,87857,87859],{"class":30,"line":1406},[28,87856,99],{"class":34},[28,87858,51875],{"class":51375},[28,87860,51382],{"class":34},[28,87862,87863,87865,87867],{"class":30,"line":1689},[28,87864,52219],{"class":34},[28,87866,51888],{"class":51375},[28,87868,51382],{"class":34},[28,87870,87871,87873,87875,87877],{"class":30,"line":1694},[28,87872,11298],{"class":38},[28,87874,70046],{"class":45},[28,87876,13641],{"class":38},[28,87878,15649],{"class":34},[28,87880,87881,87883,87886],{"class":30,"line":1700},[28,87882,71691],{"class":34},[28,87884,87885],{"class":320},"'pink'",[28,87887,31542],{"class":34},[28,87889,87890,87892,87894],{"class":30,"line":1705},[28,87891,71701],{"class":34},[28,87893,860],{"class":45},[28,87895,31542],{"class":34},[28,87897,87898,87901,87904,87906,87909],{"class":30,"line":1719},[28,87899,87900],{"class":34},"      hobby: [",[28,87902,87903],{"class":320},"'乒乓球'",[28,87905,12512],{"class":34},[28,87907,87908],{"class":320},"'足球'",[28,87910,87911],{"class":34},"],\n",[28,87913,87914],{"class":30,"line":1724},[28,87915,77947],{"class":34},[28,87917,87918,87921],{"class":30,"line":1730},[28,87919,87920],{"class":34},"        baby: ",[28,87922,87923],{"class":320},"'小pink'\n",[28,87925,87926],{"class":30,"line":1751},[28,87927,52473],{"class":34},[28,87929,87930],{"class":30,"line":1756},[28,87931,2264],{"class":34},[28,87933,87934,87936,87939,87941],{"class":30,"line":1770},[28,87935,11298],{"class":38},[28,87937,87938],{"class":45}," o",[28,87940,13641],{"class":38},[28,87942,87943],{"class":34}," {}\n",[28,87945,87946],{"class":30,"line":1775},[28,87947,87948],{"class":105},"    \u002F\u002F 拷贝函数\n",[28,87950,87951,87953,87956,87958,87961,87963,87966],{"class":30,"line":1804},[28,87952,70159],{"class":38},[28,87954,87955],{"class":2040}," deepCopy",[28,87957,221],{"class":34},[28,87959,87960],{"class":5293},"newObj",[28,87962,12512],{"class":34},[28,87964,87965],{"class":5293},"oldObj",[28,87967,12519],{"class":34},[28,87969,87970,87972,87974,87976,87979,87981],{"class":30,"line":1809},[28,87971,52359],{"class":38},[28,87973,1735],{"class":34},[28,87975,51922],{"class":38},[28,87977,87978],{"class":34}," k ",[28,87980,26121],{"class":38},[28,87982,87983],{"class":34}," oldObj) {\n",[28,87985,87986],{"class":30,"line":1826},[28,87987,87988],{"class":105},"        \u002F\u002F 处理数组的问题\n",[28,87990,87991],{"class":30,"line":1831},[28,87992,87993],{"class":105},"        \u002F\u002F 判断是否属于数组\n",[28,87995,87996],{"class":30,"line":1836},[28,87997,87998],{"class":105},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[28,88000,88001,88003,88006,88009,88012],{"class":30,"line":1841},[28,88002,2574],{"class":38},[28,88004,88005],{"class":34}," (oldObj[k] ",[28,88007,88008],{"class":38},"instanceof",[28,88010,88011],{"class":2040}," Array",[28,88013,12519],{"class":34},[28,88015,88016],{"class":30,"line":1855},[28,88017,88018],{"class":105},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[28,88020,88021],{"class":30,"line":1860},[28,88022,88023],{"class":105},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[28,88025,88026,88029,88031],{"class":30,"line":2654},[28,88027,88028],{"class":34},"          newObj[k] ",[28,88030,39],{"class":38},[28,88032,51913],{"class":34},[28,88034,88035,88038],{"class":30,"line":2668},[28,88036,88037],{"class":2040},"          deepCopy",[28,88039,88040],{"class":34},"(newObj[k], oldObj[k])\n",[28,88042,88043,88045,88047,88049,88051,88053,88056],{"class":30,"line":2676},[28,88044,80155],{"class":34},[28,88046,1778],{"class":38},[28,88048,1781],{"class":38},[28,88050,88005],{"class":34},[28,88052,88008],{"class":38},[28,88054,88055],{"class":2040}," Object",[28,88057,12519],{"class":34},[28,88059,88060,88062,88064],{"class":30,"line":2681},[28,88061,88028],{"class":34},[28,88063,39],{"class":38},[28,88065,87943],{"class":34},[28,88067,88068,88070],{"class":30,"line":2687},[28,88069,88037],{"class":2040},[28,88071,88040],{"class":34},[28,88073,88074,88076,88078],{"class":30,"line":2693},[28,88075,80155],{"class":34},[28,88077,1778],{"class":38},[28,88079,15649],{"class":34},[28,88081,88082],{"class":30,"line":2698},[28,88083,88084],{"class":105},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[28,88086,88087],{"class":30,"line":8025},[28,88088,88089],{"class":105},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[28,88091,88092,88094,88096],{"class":30,"line":8049},[28,88093,88028],{"class":34},[28,88095,39],{"class":38},[28,88097,88098],{"class":34}," oldObj[k]\n",[28,88100,88101],{"class":30,"line":8054},[28,88102,2606],{"class":34},[28,88104,88105],{"class":30,"line":8060},[28,88106,52473],{"class":34},[28,88108,88109],{"class":30,"line":8087},[28,88110,2264],{"class":34},[28,88112,88113,88116,88119],{"class":30,"line":8092},[28,88114,88115],{"class":2040},"    deepCopy",[28,88117,88118],{"class":34},"(o, obj) ",[28,88120,88121],{"class":105},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[28,88123,88124,88126,88128],{"class":30,"line":8098},[28,88125,73828],{"class":34},[28,88127,58322],{"class":2040},[28,88129,88130],{"class":34},"(o)\n",[28,88132,88133,88136,88138],{"class":30,"line":8110},[28,88134,88135],{"class":34},"    o.age ",[28,88137,39],{"class":38},[28,88139,88140],{"class":45}," 20\n",[28,88142,88143,88146,88148,88150,88152],{"class":30,"line":8122},[28,88144,88145],{"class":34},"    o.hobby[",[28,88147,407],{"class":45},[28,88149,4520],{"class":34},[28,88151,39],{"class":38},[28,88153,88154],{"class":320}," '篮球'\n",[28,88156,88157,88160,88162],{"class":30,"line":8134},[28,88158,88159],{"class":34},"    o.family ",[28,88161,39],{"class":38},[28,88163,88164],{"class":320}," '老pink'\n",[28,88166,88167,88169,88171],{"class":30,"line":9793},[28,88168,73828],{"class":34},[28,88170,58322],{"class":2040},[28,88172,70111],{"class":34},[28,88174,88175,88177,88179],{"class":30,"line":9818},[28,88176,52492],{"class":34},[28,88178,51888],{"class":51375},[28,88180,51382],{"class":34},[28,88182,88183,88185,88187],{"class":30,"line":9841},[28,88184,51860],{"class":34},[28,88186,51875],{"class":51375},[28,88188,51382],{"class":34},[28,88190,88191],{"class":30,"line":9865},[28,88192,2477],{"emptyLinePlaceholder":144},[28,88194,88195,88197,88199],{"class":30,"line":9870},[28,88196,51860],{"class":34},[28,88198,50710],{"class":51375},[28,88200,51382],{"class":34},[14,88202,88203],{},[1539,88204],{"alt":23,"src":88205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22075,88207,88209,88210],{"id":88208},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[365,88211,88212],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88214,88215],{},[35,88216,88217],{"href":88217,"rel":88218},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23942],[14,88220,88221],{},"lodash里边的方法都要加上一个下划线_",[14,88223,88224],{},"_.cloneDeep()",[18,88226,88228],{"className":50708,"code":88227,"language":50710,"meta":23,"style":23},"\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",[25,88229,88230,88240,88254,88258,88266,88280,88300,88312,88320,88324,88332,88337,88356,88364,88374,88382,88390,88402,88406,88412,88416,88420,88436,88444,88453,88461,88469,88477,88481],{"__ignoreMap":23},[28,88231,88232,88234,88236,88238],{"class":30,"line":31},[28,88233,51372],{"class":34},[28,88235,51376],{"class":51375},[28,88237,51379],{"class":2040},[28,88239,51382],{"class":34},[28,88241,88242,88244,88246,88248,88250,88252],{"class":30,"line":94},[28,88243,99],{"class":34},[28,88245,50710],{"class":51375},[28,88247,51391],{"class":2040},[28,88249,39],{"class":34},[28,88251,51396],{"class":320},[28,88253,51382],{"class":34},[28,88255,88256],{"class":30,"line":109},[28,88257,2477],{"emptyLinePlaceholder":144},[28,88259,88260,88262,88264],{"class":30,"line":125},[28,88261,99],{"class":34},[28,88263,51409],{"class":51375},[28,88265,51382],{"class":34},[28,88267,88268,88270,88272,88274,88276,88278],{"class":30,"line":131},[28,88269,52219],{"class":34},[28,88271,51419],{"class":51375},[28,88273,51422],{"class":2040},[28,88275,39],{"class":34},[28,88277,51427],{"class":320},[28,88279,51382],{"class":34},[28,88281,88282,88284,88286,88288,88290,88292,88294,88296,88298],{"class":30,"line":1291},[28,88283,52219],{"class":34},[28,88285,51419],{"class":51375},[28,88287,14997],{"class":2040},[28,88289,39],{"class":34},[28,88291,51466],{"class":320},[28,88293,51446],{"class":2040},[28,88295,39],{"class":34},[28,88297,51473],{"class":320},[28,88299,51382],{"class":34},[28,88301,88302,88304,88306,88308,88310],{"class":30,"line":1297},[28,88303,52219],{"class":34},[28,88305,51482],{"class":51375},[28,88307,51485],{"class":34},[28,88309,51482],{"class":51375},[28,88311,51382],{"class":34},[28,88313,88314,88316,88318],{"class":30,"line":1388},[28,88315,51860],{"class":34},[28,88317,51409],{"class":51375},[28,88319,51382],{"class":34},[28,88321,88322],{"class":30,"line":1394},[28,88323,2477],{"emptyLinePlaceholder":144},[28,88325,88326,88328,88330],{"class":30,"line":1406},[28,88327,99],{"class":34},[28,88329,51875],{"class":51375},[28,88331,51382],{"class":34},[28,88333,88334],{"class":30,"line":1689},[28,88335,88336],{"class":105},"  \u003C!-- 先引用这个库 -->\n",[28,88338,88339,88341,88343,88345,88347,88350,88352,88354],{"class":30,"line":1694},[28,88340,52219],{"class":34},[28,88342,51888],{"class":51375},[28,88344,55314],{"class":2040},[28,88346,39],{"class":34},[28,88348,88349],{"class":320},"\"lodash.min.js\"",[28,88351,55389],{"class":34},[28,88353,51888],{"class":51375},[28,88355,51382],{"class":34},[28,88357,88358,88360,88362],{"class":30,"line":1700},[28,88359,52219],{"class":34},[28,88361,51888],{"class":51375},[28,88363,51382],{"class":34},[28,88365,88366,88368,88370,88372],{"class":30,"line":1705},[28,88367,11298],{"class":38},[28,88369,70046],{"class":45},[28,88371,13641],{"class":38},[28,88373,15649],{"class":34},[28,88375,88376,88378,88380],{"class":30,"line":1719},[28,88377,71691],{"class":34},[28,88379,87885],{"class":320},[28,88381,31542],{"class":34},[28,88383,88384,88386,88388],{"class":30,"line":1724},[28,88385,71701],{"class":34},[28,88387,860],{"class":45},[28,88389,31542],{"class":34},[28,88391,88392,88394,88396,88398,88400],{"class":30,"line":1730},[28,88393,87900],{"class":34},[28,88395,87903],{"class":320},[28,88397,12512],{"class":34},[28,88399,87908],{"class":320},[28,88401,87911],{"class":34},[28,88403,88404],{"class":30,"line":1751},[28,88405,77947],{"class":34},[28,88407,88408,88410],{"class":30,"line":1756},[28,88409,87920],{"class":34},[28,88411,87923],{"class":320},[28,88413,88414],{"class":30,"line":1770},[28,88415,52473],{"class":34},[28,88417,88418],{"class":30,"line":1775},[28,88419,2264],{"class":34},[28,88421,88422,88424,88426,88428,88431,88434],{"class":30,"line":1804},[28,88423,11298],{"class":38},[28,88425,87938],{"class":45},[28,88427,13641],{"class":38},[28,88429,88430],{"class":34}," _.",[28,88432,88433],{"class":2040},"cloneDeep",[28,88435,70111],{"class":34},[28,88437,88438,88440,88442],{"class":30,"line":1809},[28,88439,73828],{"class":34},[28,88441,58322],{"class":2040},[28,88443,88130],{"class":34},[28,88445,88446,88449,88451],{"class":30,"line":1826},[28,88447,88448],{"class":34},"    o.family.baby ",[28,88450,39],{"class":38},[28,88452,88164],{"class":320},[28,88454,88455,88457,88459],{"class":30,"line":1831},[28,88456,73828],{"class":34},[28,88458,58322],{"class":2040},[28,88460,70111],{"class":34},[28,88462,88463,88465,88467],{"class":30,"line":1836},[28,88464,52492],{"class":34},[28,88466,51888],{"class":51375},[28,88468,51382],{"class":34},[28,88470,88471,88473,88475],{"class":30,"line":1841},[28,88472,51860],{"class":34},[28,88474,51875],{"class":51375},[28,88476,51382],{"class":34},[28,88478,88479],{"class":30,"line":1855},[28,88480,2477],{"emptyLinePlaceholder":144},[28,88482,88483,88485,88487],{"class":30,"line":1860},[28,88484,51860],{"class":34},[28,88486,50710],{"class":51375},[28,88488,51382],{"class":34},[14,88490,88491],{},[1539,88492],{"alt":23,"src":88493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22075,88495,88497],{"id":88496},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[18,88499,88501],{"className":50708,"code":88500,"language":50710,"meta":23,"style":23},"\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",[25,88502,88503,88513,88527,88531,88539,88553,88573,88585,88593,88597,88605,88613,88623,88631,88639,88651,88655,88661,88665,88669,88674,88679,88684,88710,88718,88727,88735,88743,88751,88755],{"__ignoreMap":23},[28,88504,88505,88507,88509,88511],{"class":30,"line":31},[28,88506,51372],{"class":34},[28,88508,51376],{"class":51375},[28,88510,51379],{"class":2040},[28,88512,51382],{"class":34},[28,88514,88515,88517,88519,88521,88523,88525],{"class":30,"line":94},[28,88516,99],{"class":34},[28,88518,50710],{"class":51375},[28,88520,51391],{"class":2040},[28,88522,39],{"class":34},[28,88524,51396],{"class":320},[28,88526,51382],{"class":34},[28,88528,88529],{"class":30,"line":109},[28,88530,2477],{"emptyLinePlaceholder":144},[28,88532,88533,88535,88537],{"class":30,"line":125},[28,88534,99],{"class":34},[28,88536,51409],{"class":51375},[28,88538,51382],{"class":34},[28,88540,88541,88543,88545,88547,88549,88551],{"class":30,"line":131},[28,88542,52219],{"class":34},[28,88544,51419],{"class":51375},[28,88546,51422],{"class":2040},[28,88548,39],{"class":34},[28,88550,51427],{"class":320},[28,88552,51382],{"class":34},[28,88554,88555,88557,88559,88561,88563,88565,88567,88569,88571],{"class":30,"line":1291},[28,88556,52219],{"class":34},[28,88558,51419],{"class":51375},[28,88560,14997],{"class":2040},[28,88562,39],{"class":34},[28,88564,51466],{"class":320},[28,88566,51446],{"class":2040},[28,88568,39],{"class":34},[28,88570,51473],{"class":320},[28,88572,51382],{"class":34},[28,88574,88575,88577,88579,88581,88583],{"class":30,"line":1297},[28,88576,52219],{"class":34},[28,88578,51482],{"class":51375},[28,88580,51485],{"class":34},[28,88582,51482],{"class":51375},[28,88584,51382],{"class":34},[28,88586,88587,88589,88591],{"class":30,"line":1388},[28,88588,51860],{"class":34},[28,88590,51409],{"class":51375},[28,88592,51382],{"class":34},[28,88594,88595],{"class":30,"line":1394},[28,88596,2477],{"emptyLinePlaceholder":144},[28,88598,88599,88601,88603],{"class":30,"line":1406},[28,88600,99],{"class":34},[28,88602,51875],{"class":51375},[28,88604,51382],{"class":34},[28,88606,88607,88609,88611],{"class":30,"line":1689},[28,88608,52219],{"class":34},[28,88610,51888],{"class":51375},[28,88612,51382],{"class":34},[28,88614,88615,88617,88619,88621],{"class":30,"line":1694},[28,88616,11298],{"class":38},[28,88618,70046],{"class":45},[28,88620,13641],{"class":38},[28,88622,15649],{"class":34},[28,88624,88625,88627,88629],{"class":30,"line":1700},[28,88626,71691],{"class":34},[28,88628,87885],{"class":320},[28,88630,31542],{"class":34},[28,88632,88633,88635,88637],{"class":30,"line":1705},[28,88634,71701],{"class":34},[28,88636,860],{"class":45},[28,88638,31542],{"class":34},[28,88640,88641,88643,88645,88647,88649],{"class":30,"line":1719},[28,88642,87900],{"class":34},[28,88644,87903],{"class":320},[28,88646,12512],{"class":34},[28,88648,87908],{"class":320},[28,88650,87911],{"class":34},[28,88652,88653],{"class":30,"line":1724},[28,88654,77947],{"class":34},[28,88656,88657,88659],{"class":30,"line":1730},[28,88658,87920],{"class":34},[28,88660,87923],{"class":320},[28,88662,88663],{"class":30,"line":1751},[28,88664,52473],{"class":34},[28,88666,88667],{"class":30,"line":1756},[28,88668,2264],{"class":34},[28,88670,88671],{"class":30,"line":1770},[28,88672,88673],{"class":105},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[28,88675,88676],{"class":30,"line":1775},[28,88677,88678],{"class":105},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[28,88680,88681],{"class":30,"line":1804},[28,88682,88683],{"class":105},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[28,88685,88686,88688,88690,88692,88695,88697,88700,88702,88704,88706,88708],{"class":30,"line":1809},[28,88687,11298],{"class":38},[28,88689,87938],{"class":45},[28,88691,13641],{"class":38},[28,88693,88694],{"class":45}," JSON",[28,88696,768],{"class":34},[28,88698,88699],{"class":2040},"parse",[28,88701,221],{"class":34},[28,88703,71739],{"class":45},[28,88705,768],{"class":34},[28,88707,71744],{"class":2040},[28,88709,71747],{"class":34},[28,88711,88712,88714,88716],{"class":30,"line":1826},[28,88713,73828],{"class":34},[28,88715,58322],{"class":2040},[28,88717,88130],{"class":34},[28,88719,88720,88722,88724],{"class":30,"line":1831},[28,88721,88448],{"class":34},[28,88723,39],{"class":38},[28,88725,88726],{"class":320}," '123'\n",[28,88728,88729,88731,88733],{"class":30,"line":1836},[28,88730,73828],{"class":34},[28,88732,58322],{"class":2040},[28,88734,70111],{"class":34},[28,88736,88737,88739,88741],{"class":30,"line":1841},[28,88738,52492],{"class":34},[28,88740,51888],{"class":51375},[28,88742,51382],{"class":34},[28,88744,88745,88747,88749],{"class":30,"line":1855},[28,88746,51860],{"class":34},[28,88748,51875],{"class":51375},[28,88750,51382],{"class":34},[28,88752,88753],{"class":30,"line":1860},[28,88754,2477],{"emptyLinePlaceholder":144},[28,88756,88757,88759,88761],{"class":30,"line":2654},[28,88758,51860],{"class":34},[28,88760,50710],{"class":51375},[28,88762,51382],{"class":34},[14,88764,88765],{},[1539,88766],{"alt":23,"src":88767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[159,88769,88771],{"id":88770},"_415-异常处理","4.15 异常处理",[171,88773,88774],{},[174,88775,88776],{},"throw抛异常",[14,88778,88779],{},[1539,88780],{"alt":23,"src":88781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[171,88783,88784],{"start":94},[174,88785,88786],{},"try\u002Fcatch 捕获错误信息",[14,88788,88789],{},[1539,88790],{"alt":23,"src":88791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[18,88793,88795],{"className":50708,"code":88794,"language":50710,"meta":23,"style":23},"\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",[25,88796,88797,88807,88821,88825,88833,88847,88867,88879,88887,88891,88899,88911,88919,88928,88935,88940,88959,88968,88979,88984,88994,88999,89004,89009,89026,89030,89035,89042,89054,89058,89070,89074,89078,89083,89088,89095,89103,89111,89115],{"__ignoreMap":23},[28,88798,88799,88801,88803,88805],{"class":30,"line":31},[28,88800,51372],{"class":34},[28,88802,51376],{"class":51375},[28,88804,51379],{"class":2040},[28,88806,51382],{"class":34},[28,88808,88809,88811,88813,88815,88817,88819],{"class":30,"line":94},[28,88810,99],{"class":34},[28,88812,50710],{"class":51375},[28,88814,51391],{"class":2040},[28,88816,39],{"class":34},[28,88818,51396],{"class":320},[28,88820,51382],{"class":34},[28,88822,88823],{"class":30,"line":109},[28,88824,2477],{"emptyLinePlaceholder":144},[28,88826,88827,88829,88831],{"class":30,"line":125},[28,88828,99],{"class":34},[28,88830,51409],{"class":51375},[28,88832,51382],{"class":34},[28,88834,88835,88837,88839,88841,88843,88845],{"class":30,"line":131},[28,88836,52219],{"class":34},[28,88838,51419],{"class":51375},[28,88840,51422],{"class":2040},[28,88842,39],{"class":34},[28,88844,51427],{"class":320},[28,88846,51382],{"class":34},[28,88848,88849,88851,88853,88855,88857,88859,88861,88863,88865],{"class":30,"line":1291},[28,88850,52219],{"class":34},[28,88852,51419],{"class":51375},[28,88854,14997],{"class":2040},[28,88856,39],{"class":34},[28,88858,51466],{"class":320},[28,88860,51446],{"class":2040},[28,88862,39],{"class":34},[28,88864,51473],{"class":320},[28,88866,51382],{"class":34},[28,88868,88869,88871,88873,88875,88877],{"class":30,"line":1297},[28,88870,52219],{"class":34},[28,88872,51482],{"class":51375},[28,88874,51485],{"class":34},[28,88876,51482],{"class":51375},[28,88878,51382],{"class":34},[28,88880,88881,88883,88885],{"class":30,"line":1388},[28,88882,51860],{"class":34},[28,88884,51409],{"class":51375},[28,88886,51382],{"class":34},[28,88888,88889],{"class":30,"line":1394},[28,88890,2477],{"emptyLinePlaceholder":144},[28,88892,88893,88895,88897],{"class":30,"line":1406},[28,88894,99],{"class":34},[28,88896,51875],{"class":51375},[28,88898,51382],{"class":34},[28,88900,88901,88903,88905,88907,88909],{"class":30,"line":1689},[28,88902,52219],{"class":34},[28,88904,14],{"class":51375},[28,88906,53569],{"class":34},[28,88908,14],{"class":51375},[28,88910,51382],{"class":34},[28,88912,88913,88915,88917],{"class":30,"line":1694},[28,88914,52219],{"class":34},[28,88916,51888],{"class":51375},[28,88918,51382],{"class":34},[28,88920,88921,88923,88926],{"class":30,"line":1700},[28,88922,70159],{"class":38},[28,88924,88925],{"class":2040}," fn",[28,88927,10930],{"class":34},[28,88929,88930,88933],{"class":30,"line":1705},[28,88931,88932],{"class":38},"      try",[28,88934,15649],{"class":34},[28,88936,88937],{"class":30,"line":1719},[28,88938,88939],{"class":105},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[28,88941,88942,88944,88946,88948,88950,88952,88954,88957],{"class":30,"line":1724},[28,88943,61345],{"class":38},[28,88945,6902],{"class":45},[28,88947,13641],{"class":38},[28,88949,54471],{"class":34},[28,88951,54474],{"class":2040},[28,88953,221],{"class":34},[28,88955,88956],{"class":320},"'.p'",[28,88958,227],{"class":34},[28,88960,88961,88964,88966],{"class":30,"line":1730},[28,88962,88963],{"class":34},"        p.style.color ",[28,88965,39],{"class":38},[28,88967,67126],{"class":320},[28,88969,88970,88973,88976],{"class":30,"line":1751},[28,88971,88972],{"class":34},"      } ",[28,88974,88975],{"class":38},"catch",[28,88977,88978],{"class":34}," (err) {\n",[28,88980,88981],{"class":30,"line":1756},[28,88982,88983],{"class":105},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[28,88985,88986,88989,88991],{"class":30,"line":1770},[28,88987,88988],{"class":34},"        console.",[28,88990,58322],{"class":2040},[28,88992,88993],{"class":34},"(err.message)\n",[28,88995,88996],{"class":30,"line":1775},[28,88997,88998],{"class":105},"        \u002F\u002F 想要中断程序，需要加return\n",[28,89000,89001],{"class":30,"line":1804},[28,89002,89003],{"class":105},"        \u002F\u002F return\n",[28,89005,89006],{"class":30,"line":1809},[28,89007,89008],{"class":105},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[28,89010,89011,89014,89016,89019,89021,89024],{"class":30,"line":1826},[28,89012,89013],{"class":38},"        throw",[28,89015,11655],{"class":38},[28,89017,89018],{"class":2040}," Error",[28,89020,221],{"class":34},[28,89022,89023],{"class":320},"'你看看，选择器错误了吧'",[28,89025,227],{"class":34},[28,89027,89028],{"class":30,"line":1831},[28,89029,52473],{"class":34},[28,89031,89032],{"class":30,"line":1836},[28,89033,89034],{"class":105},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[28,89036,89037,89040],{"class":30,"line":1841},[28,89038,89039],{"class":38},"      finally",[28,89041,15649],{"class":34},[28,89043,89044,89047,89049,89052],{"class":30,"line":1855},[28,89045,89046],{"class":2040},"        alert",[28,89048,221],{"class":34},[28,89050,89051],{"class":320},"'弹出对话框'",[28,89053,227],{"class":34},[28,89055,89056],{"class":30,"line":1860},[28,89057,52473],{"class":34},[28,89059,89060,89062,89064,89066,89068],{"class":30,"line":2654},[28,89061,58319],{"class":34},[28,89063,58322],{"class":2040},[28,89065,221],{"class":34},[28,89067,63],{"class":45},[28,89069,227],{"class":34},[28,89071,89072],{"class":30,"line":2668},[28,89073,2477],{"emptyLinePlaceholder":144},[28,89075,89076],{"class":30,"line":2676},[28,89077,2264],{"class":34},[28,89079,89080],{"class":30,"line":2681},[28,89081,89082],{"class":105},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[28,89084,89085],{"class":30,"line":2687},[28,89086,89087],{"class":105},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[28,89089,89090,89093],{"class":30,"line":2693},[28,89091,89092],{"class":2040},"    fn",[28,89094,2053],{"class":34},[28,89096,89097,89099,89101],{"class":30,"line":2698},[28,89098,52492],{"class":34},[28,89100,51888],{"class":51375},[28,89102,51382],{"class":34},[28,89104,89105,89107,89109],{"class":30,"line":8025},[28,89106,51860],{"class":34},[28,89108,51875],{"class":51375},[28,89110,51382],{"class":34},[28,89112,89113],{"class":30,"line":8049},[28,89114,2477],{"emptyLinePlaceholder":144},[28,89116,89117,89119,89121],{"class":30,"line":8054},[28,89118,51860],{"class":34},[28,89120,50710],{"class":51375},[28,89122,51382],{"class":34},[14,89124,89125],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[171,89127,89128],{"start":109},[174,89129,89130],{},"debugger",[14,89132,89133],{},[1539,89134],{"alt":23,"src":89135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89137,89138],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[159,89140,89142],{"id":89141},"_416-处理this","4.16 处理this",[188,89144,89146],{"id":89145},"_4161-this的指向","4.16.1 this的指向",[171,89148,89149],{},[174,89150,89151],{},"普通函数的this",[14,89153,89154],{},[1539,89155],{"alt":23,"src":89156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[171,89158,89159],{"start":94},[174,89160,89161],{},"箭头函数的this",[14,89163,89164],{},[1539,89165],{"alt":23,"src":89166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89168,89169],{},[1539,89170],{"alt":23,"src":89171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89173,89174],{},[1539,89175],{"alt":23,"src":89176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[188,89178,89180],{"id":89179},"_4162-this的改变","4.16.2 this的改变",[14,89182,89183],{},"call() apply() bind()",[171,89185,89186],{},[174,89187,89188],{},"call()",[14,89190,89191],{},[1539,89192],{"alt":23,"src":89193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89195,89196],{},"两个作用：①调用函数；②改变this指向",[18,89198,89200],{"className":53142,"code":89199,"language":53144,"meta":23,"style":23},"\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",[25,89201,89202,89210,89218,89222,89227,89231,89236,89241,89246,89250,89255,89263],{"__ignoreMap":23},[28,89203,89204,89206,89208],{"class":30,"line":31},[28,89205,99],{"class":34},[28,89207,51875],{"class":51375},[28,89209,51382],{"class":34},[28,89211,89212,89214,89216],{"class":30,"line":94},[28,89213,52219],{"class":34},[28,89215,51888],{"class":51375},[28,89217,51382],{"class":34},[28,89219,89220],{"class":30,"line":109},[28,89221,71598],{"class":34},[28,89223,89224],{"class":30,"line":125},[28,89225,89226],{"class":34},"      uname: 'pink'\n",[28,89228,89229],{"class":30,"line":131},[28,89230,2264],{"class":34},[28,89232,89233],{"class":30,"line":1291},[28,89234,89235],{"class":34},"    function fn(x, y) {\n",[28,89237,89238],{"class":30,"line":1297},[28,89239,89240],{"class":34},"      console.log(this)  \u002F\u002Fwindow\n",[28,89242,89243],{"class":30,"line":1388},[28,89244,89245],{"class":34},"      console.log(x + y)\n",[28,89247,89248],{"class":30,"line":1394},[28,89249,2264],{"class":34},[28,89251,89252],{"class":30,"line":1406},[28,89253,89254],{"class":34},"    fn.call(obj, 1, 2)\n",[28,89256,89257,89259,89261],{"class":30,"line":1689},[28,89258,52492],{"class":34},[28,89260,51888],{"class":51375},[28,89262,51382],{"class":34},[28,89264,89265,89267,89269],{"class":30,"line":1694},[28,89266,51860],{"class":34},[28,89268,51875],{"class":51375},[28,89270,51382],{"class":34},[14,89272,89273],{},[1539,89274],{"alt":23,"src":89275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[171,89277,89278],{"start":94},[174,89279,89280],{},"apply()",[14,89282,89283],{},[1539,89284],{"alt":23,"src":89285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89287,89196],{},[14,89289,89290],{},"call传递的是普通参数，而apply必须传递的是数组",[18,89292,89294],{"className":50708,"code":89293,"language":50710,"meta":23,"style":23},"\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",[25,89295,89296,89306,89320,89324,89332,89346,89366,89378,89386,89390,89398,89406,89416,89423,89427,89432,89448,89460,89474,89478,89483,89502,89507,89511,89516,89521,89529,89534,89556,89561,89577,89593,89605,89609,89614,89633,89641,89649,89653],{"__ignoreMap":23},[28,89297,89298,89300,89302,89304],{"class":30,"line":31},[28,89299,51372],{"class":34},[28,89301,51376],{"class":51375},[28,89303,51379],{"class":2040},[28,89305,51382],{"class":34},[28,89307,89308,89310,89312,89314,89316,89318],{"class":30,"line":94},[28,89309,99],{"class":34},[28,89311,50710],{"class":51375},[28,89313,51391],{"class":2040},[28,89315,39],{"class":34},[28,89317,51396],{"class":320},[28,89319,51382],{"class":34},[28,89321,89322],{"class":30,"line":109},[28,89323,2477],{"emptyLinePlaceholder":144},[28,89325,89326,89328,89330],{"class":30,"line":125},[28,89327,99],{"class":34},[28,89329,51409],{"class":51375},[28,89331,51382],{"class":34},[28,89333,89334,89336,89338,89340,89342,89344],{"class":30,"line":131},[28,89335,52219],{"class":34},[28,89337,51419],{"class":51375},[28,89339,51422],{"class":2040},[28,89341,39],{"class":34},[28,89343,51427],{"class":320},[28,89345,51382],{"class":34},[28,89347,89348,89350,89352,89354,89356,89358,89360,89362,89364],{"class":30,"line":1291},[28,89349,52219],{"class":34},[28,89351,51419],{"class":51375},[28,89353,14997],{"class":2040},[28,89355,39],{"class":34},[28,89357,51466],{"class":320},[28,89359,51446],{"class":2040},[28,89361,39],{"class":34},[28,89363,51473],{"class":320},[28,89365,51382],{"class":34},[28,89367,89368,89370,89372,89374,89376],{"class":30,"line":1297},[28,89369,52219],{"class":34},[28,89371,51482],{"class":51375},[28,89373,51485],{"class":34},[28,89375,51482],{"class":51375},[28,89377,51382],{"class":34},[28,89379,89380,89382,89384],{"class":30,"line":1388},[28,89381,51860],{"class":34},[28,89383,51409],{"class":51375},[28,89385,51382],{"class":34},[28,89387,89388],{"class":30,"line":1394},[28,89389,2477],{"emptyLinePlaceholder":144},[28,89391,89392,89394,89396],{"class":30,"line":1406},[28,89393,99],{"class":34},[28,89395,51875],{"class":51375},[28,89397,51382],{"class":34},[28,89399,89400,89402,89404],{"class":30,"line":1689},[28,89401,52219],{"class":34},[28,89403,51888],{"class":51375},[28,89405,51382],{"class":34},[28,89407,89408,89410,89412,89414],{"class":30,"line":1694},[28,89409,11298],{"class":38},[28,89411,70046],{"class":45},[28,89413,13641],{"class":38},[28,89415,15649],{"class":34},[28,89417,89418,89420],{"class":30,"line":1700},[28,89419,71701],{"class":34},[28,89421,89422],{"class":45},"18\n",[28,89424,89425],{"class":30,"line":1705},[28,89426,2264],{"class":34},[28,89428,89429],{"class":30,"line":1719},[28,89430,89431],{"class":105},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[28,89433,89434,89436,89438,89440,89442,89444,89446],{"class":30,"line":1724},[28,89435,70159],{"class":38},[28,89437,88925],{"class":2040},[28,89439,221],{"class":34},[28,89441,1026],{"class":5293},[28,89443,12512],{"class":34},[28,89445,1051],{"class":5293},[28,89447,12519],{"class":34},[28,89449,89450,89452,89454,89456,89458],{"class":30,"line":1730},[28,89451,58319],{"class":34},[28,89453,58322],{"class":2040},[28,89455,221],{"class":34},[28,89457,87068],{"class":45},[28,89459,227],{"class":34},[28,89461,89462,89464,89466,89469,89471],{"class":30,"line":1751},[28,89463,58319],{"class":34},[28,89465,58322],{"class":2040},[28,89467,89468],{"class":34},"(x ",[28,89470,693],{"class":38},[28,89472,89473],{"class":34}," y)\n",[28,89475,89476],{"class":30,"line":1756},[28,89477,2264],{"class":34},[28,89479,89480],{"class":30,"line":1770},[28,89481,89482],{"class":105},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[28,89484,89485,89488,89491,89494,89496,89498,89500],{"class":30,"line":1775},[28,89486,89487],{"class":34},"    fn.",[28,89489,89490],{"class":2040},"apply",[28,89492,89493],{"class":34},"(obj, [",[28,89495,46],{"class":45},[28,89497,12512],{"class":34},[28,89499,52],{"class":45},[28,89501,4734],{"class":34},[28,89503,89504],{"class":30,"line":1804},[28,89505,89506],{"class":105},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[28,89508,89509],{"class":30,"line":1809},[28,89510,2477],{"emptyLinePlaceholder":144},[28,89512,89513],{"class":30,"line":1826},[28,89514,89515],{"class":105},"    \u002F\u002F 使用场景：求数组最大值\n",[28,89517,89518],{"class":30,"line":1831},[28,89519,89520],{"class":105},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[28,89522,89523,89526],{"class":30,"line":1836},[28,89524,89525],{"class":105},"    \u002F\u002F console.log(max)",[28,89527,89528],{"class":105},"   \u002F\u002F3\n",[28,89530,89531],{"class":30,"line":1841},[28,89532,89533],{"class":105},"    \u002F\u002F 指向空或者Math都是可以的\n",[28,89535,89536,89538,89540,89542,89544,89546,89548,89550,89552,89554],{"class":30,"line":1855},[28,89537,11298],{"class":38},[28,89539,57770],{"class":45},[28,89541,13641],{"class":38},[28,89543,52301],{"class":34},[28,89545,525],{"class":45},[28,89547,12512],{"class":34},[28,89549,715],{"class":45},[28,89551,12512],{"class":34},[28,89553,745],{"class":45},[28,89555,33322],{"class":34},[28,89557,89558],{"class":30,"line":1860},[28,89559,89560],{"class":105},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[28,89562,89563,89565,89567,89569,89572,89574],{"class":30,"line":2654},[28,89564,11298],{"class":38},[28,89566,6028],{"class":45},[28,89568,13641],{"class":38},[28,89570,89571],{"class":34}," Math.max.",[28,89573,89490],{"class":2040},[28,89575,89576],{"class":34},"(Math, arr)\n",[28,89578,89579,89581,89584,89586,89589,89591],{"class":30,"line":2668},[28,89580,11298],{"class":38},[28,89582,89583],{"class":45}," min",[28,89585,13641],{"class":38},[28,89587,89588],{"class":34}," Math.min.",[28,89590,89490],{"class":2040},[28,89592,89576],{"class":34},[28,89594,89595,89597,89599,89602],{"class":30,"line":2676},[28,89596,73828],{"class":34},[28,89598,58322],{"class":2040},[28,89600,89601],{"class":34},"(max, min)     ",[28,89603,89604],{"class":105},"\u002F\u002F100,4\n",[28,89606,89607],{"class":30,"line":2681},[28,89608,2477],{"emptyLinePlaceholder":144},[28,89610,89611],{"class":30,"line":2687},[28,89612,89613],{"class":105},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[28,89615,89616,89618,89620,89623,89625,89627,89630],{"class":30,"line":2693},[28,89617,73828],{"class":34},[28,89619,58322],{"class":2040},[28,89621,89622],{"class":34},"(Max.",[28,89624,6092],{"class":2040},[28,89626,221],{"class":34},[28,89628,89629],{"class":38},"...",[28,89631,89632],{"class":34},"arr))\n",[28,89634,89635,89637,89639],{"class":30,"line":2698},[28,89636,52492],{"class":34},[28,89638,51888],{"class":51375},[28,89640,51382],{"class":34},[28,89642,89643,89645,89647],{"class":30,"line":8025},[28,89644,51860],{"class":34},[28,89646,51875],{"class":51375},[28,89648,51382],{"class":34},[28,89650,89651],{"class":30,"line":8049},[28,89652,2477],{"emptyLinePlaceholder":144},[28,89654,89655,89657,89659],{"class":30,"line":8054},[28,89656,51860],{"class":34},[28,89658,50710],{"class":51375},[28,89660,51382],{"class":34},[14,89662,89663],{},[1539,89664],{"alt":23,"src":89665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[171,89667,89668],{"start":109},[174,89669,89670],{},"bind()",[14,89672,89673],{},[1539,89674],{"alt":23,"src":89675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89677,89678],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89680,89681],{},"bind的语法跟call很相似",[18,89683,89685],{"className":53142,"code":89684,"language":53144,"meta":23,"style":23},"\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",[25,89686,89687,89695,89703,89707,89712,89716,89720,89725,89729,89734,89739,89744,89749,89754,89759,89764,89768,89776],{"__ignoreMap":23},[28,89688,89689,89691,89693],{"class":30,"line":31},[28,89690,99],{"class":34},[28,89692,51875],{"class":51375},[28,89694,51382],{"class":34},[28,89696,89697,89699,89701],{"class":30,"line":94},[28,89698,52219],{"class":34},[28,89700,51888],{"class":51375},[28,89702,51382],{"class":34},[28,89704,89705],{"class":30,"line":109},[28,89706,71598],{"class":34},[28,89708,89709],{"class":30,"line":125},[28,89710,89711],{"class":34},"      age: 18\n",[28,89713,89714],{"class":30,"line":131},[28,89715,2264],{"class":34},[28,89717,89718],{"class":30,"line":1291},[28,89719,77218],{"class":34},[28,89721,89722],{"class":30,"line":1297},[28,89723,89724],{"class":34},"      console.log(this)\n",[28,89726,89727],{"class":30,"line":1388},[28,89728,2264],{"class":34},[28,89730,89731],{"class":30,"line":1394},[28,89732,89733],{"class":34},"    \u002F\u002F 1.bind 不会调用函数\n",[28,89735,89736],{"class":30,"line":1406},[28,89737,89738],{"class":34},"    \u002F\u002F 2.bind能改变this的指向\n",[28,89740,89741],{"class":30,"line":1689},[28,89742,89743],{"class":34},"    fn.bind()\n",[28,89745,89746],{"class":30,"line":1694},[28,89747,89748],{"class":34},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[28,89750,89751],{"class":30,"line":1700},[28,89752,89753],{"class":34},"    const fun = fn.bind(obj)\n",[28,89755,89756],{"class":30,"line":1705},[28,89757,89758],{"class":34},"    \u002F\u002F console.log(fun)\n",[28,89760,89761],{"class":30,"line":1719},[28,89762,89763],{"class":34},"    \u002F\u002F 调用,查看this的指向\n",[28,89765,89766],{"class":30,"line":1724},[28,89767,52726],{"class":34},[28,89769,89770,89772,89774],{"class":30,"line":1730},[28,89771,52492],{"class":34},[28,89773,51888],{"class":51375},[28,89775,51382],{"class":34},[28,89777,89778,89780,89782],{"class":30,"line":1751},[28,89779,51860],{"class":34},[28,89781,51875],{"class":51375},[28,89783,51382],{"class":34},[14,89785,89786],{},[1539,89787],{"alt":23,"src":89788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[171,89790,89791],{"start":125},[174,89792,89793],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[18,89795,89797],{"className":53142,"code":89796,"language":53144,"meta":23,"style":23},"\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",[25,89798,89799,89807,89820,89828,89833,89837,89842,89847,89852,89857,89862,89867,89872,89877,89881,89889],{"__ignoreMap":23},[28,89800,89801,89803,89805],{"class":30,"line":31},[28,89802,99],{"class":34},[28,89804,51875],{"class":51375},[28,89806,51382],{"class":34},[28,89808,89809,89811,89813,89816,89818],{"class":30,"line":94},[28,89810,52219],{"class":34},[28,89812,53962],{"class":51375},[28,89814,89815],{"class":34},">禁用\u003C\u002F",[28,89817,53962],{"class":51375},[28,89819,51382],{"class":34},[28,89821,89822,89824,89826],{"class":30,"line":109},[28,89823,52219],{"class":34},[28,89825,51888],{"class":51375},[28,89827,51382],{"class":34},[28,89829,89830],{"class":30,"line":125},[28,89831,89832],{"class":34},"    const btn = document.querySelector('button')\n",[28,89834,89835],{"class":30,"line":131},[28,89836,59091],{"class":34},[28,89838,89839],{"class":30,"line":1291},[28,89840,89841],{"class":34},"      this.disabled = true\n",[28,89843,89844],{"class":30,"line":1297},[28,89845,89846],{"class":34},"      \u002F\u002F 定时器是window进行调用的\n",[28,89848,89849],{"class":30,"line":1388},[28,89850,89851],{"class":34},"      setTimeout(function () {\n",[28,89853,89854],{"class":30,"line":1394},[28,89855,89856],{"class":34},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[28,89858,89859],{"class":30,"line":1406},[28,89860,89861],{"class":34},"        this.disabled = false\n",[28,89863,89864],{"class":30,"line":1689},[28,89865,89866],{"class":34},"      }.bind(this), 2000)\n",[28,89868,89869],{"class":30,"line":1694},[28,89870,89871],{"class":34},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[28,89873,89874],{"class":30,"line":1700},[28,89875,89876],{"class":34},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[28,89878,89879],{"class":30,"line":1705},[28,89880,33537],{"class":34},[28,89882,89883,89885,89887],{"class":30,"line":1719},[28,89884,52492],{"class":34},[28,89886,51888],{"class":51375},[28,89888,51382],{"class":34},[28,89890,89891,89893,89895],{"class":30,"line":1724},[28,89892,51860],{"class":34},[28,89894,51875],{"class":51375},[28,89896,51382],{"class":34},[171,89898,89899],{"start":131},[174,89900,22030],{},[14,89902,89903],{},[1539,89904],{"alt":23,"src":89905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[159,89907,89909],{"id":89908},"_417-性能优化","4.17 性能优化",[188,89911,89913],{"id":89912},"_4171-防抖","4.17.1 防抖",[14,89915,89916],{},[1539,89917],{"alt":23,"src":89918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89920,89921],{},[365,89922,89923],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89925,89926],{},"防抖实现方式：",[1211,89928,89929],{},[174,89930,89931],{},"lodash 提供了防抖处理",[14,89933,89934],{},"_.debounce(func,[wait=0],[options={}])",[14,89936,89937],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[18,89939,89941],{"className":50708,"code":89940,"language":50710,"meta":23,"style":23},"\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",[25,89942,89943,89953,89967,89971,89979,89993,90013,90025,90033,90039,90049,90061,90073,90084,90096,90106,90116,90129,90133,90141,90149,90153,90161,90179,90197,90205,90224,90234,90243,90254,90259,90263,90268,90273,90278,90303,90311,90319,90323],{"__ignoreMap":23},[28,89944,89945,89947,89949,89951],{"class":30,"line":31},[28,89946,51372],{"class":34},[28,89948,51376],{"class":51375},[28,89950,51379],{"class":2040},[28,89952,51382],{"class":34},[28,89954,89955,89957,89959,89961,89963,89965],{"class":30,"line":94},[28,89956,99],{"class":34},[28,89958,50710],{"class":51375},[28,89960,51391],{"class":2040},[28,89962,39],{"class":34},[28,89964,51396],{"class":320},[28,89966,51382],{"class":34},[28,89968,89969],{"class":30,"line":109},[28,89970,2477],{"emptyLinePlaceholder":144},[28,89972,89973,89975,89977],{"class":30,"line":125},[28,89974,99],{"class":34},[28,89976,51409],{"class":51375},[28,89978,51382],{"class":34},[28,89980,89981,89983,89985,89987,89989,89991],{"class":30,"line":131},[28,89982,52219],{"class":34},[28,89984,51419],{"class":51375},[28,89986,51422],{"class":2040},[28,89988,39],{"class":34},[28,89990,51427],{"class":320},[28,89992,51382],{"class":34},[28,89994,89995,89997,89999,90001,90003,90005,90007,90009,90011],{"class":30,"line":1291},[28,89996,52219],{"class":34},[28,89998,51419],{"class":51375},[28,90000,14997],{"class":2040},[28,90002,39],{"class":34},[28,90004,51466],{"class":320},[28,90006,51446],{"class":2040},[28,90008,39],{"class":34},[28,90010,51473],{"class":320},[28,90012,51382],{"class":34},[28,90014,90015,90017,90019,90021,90023],{"class":30,"line":1297},[28,90016,52219],{"class":34},[28,90018,51482],{"class":51375},[28,90020,51485],{"class":34},[28,90022,51482],{"class":51375},[28,90024,51382],{"class":34},[28,90026,90027,90029,90031],{"class":30,"line":1388},[28,90028,52219],{"class":34},[28,90030,136],{"class":51375},[28,90032,51382],{"class":34},[28,90034,90035,90037],{"class":30,"line":1394},[28,90036,54827],{"class":2040},[28,90038,15649],{"class":34},[28,90040,90041,90043,90045,90047],{"class":30,"line":1406},[28,90042,72671],{"class":45},[28,90044,51512],{"class":34},[28,90046,60580],{"class":45},[28,90048,1367],{"class":34},[28,90050,90051,90053,90055,90057,90059],{"class":30,"line":1689},[28,90052,54846],{"class":45},[28,90054,51512],{"class":34},[28,90056,1799],{"class":45},[28,90058,51567],{"class":38},[28,90060,1367],{"class":34},[28,90062,90063,90065,90067,90069,90071],{"class":30,"line":1694},[28,90064,54860],{"class":45},[28,90066,51512],{"class":34},[28,90068,1799],{"class":45},[28,90070,51567],{"class":38},[28,90072,1367],{"class":34},[28,90074,90075,90077,90079,90082],{"class":30,"line":1700},[28,90076,54959],{"class":45},[28,90078,51512],{"class":34},[28,90080,90081],{"class":45},"gray",[28,90083,1367],{"class":34},[28,90085,90086,90088,90090,90092,90094],{"class":30,"line":1705},[28,90087,54997],{"class":45},[28,90089,51512],{"class":34},[28,90091,1031],{"class":45},[28,90093,51567],{"class":38},[28,90095,1367],{"class":34},[28,90097,90098,90100,90102,90104],{"class":30,"line":1719},[28,90099,57491],{"class":45},[28,90101,51512],{"class":34},[28,90103,60917],{"class":45},[28,90105,1367],{"class":34},[28,90107,90108,90110,90112,90114],{"class":30,"line":1724},[28,90109,57361],{"class":45},[28,90111,51512],{"class":34},[28,90113,51667],{"class":45},[28,90115,1367],{"class":34},[28,90117,90118,90121,90123,90125,90127],{"class":30,"line":1730},[28,90119,90120],{"class":45},"      padding-top",[28,90122,51512],{"class":34},[28,90124,533],{"class":45},[28,90126,51567],{"class":38},[28,90128,1367],{"class":34},[28,90130,90131],{"class":30,"line":1751},[28,90132,2264],{"class":34},[28,90134,90135,90137,90139],{"class":30,"line":1756},[28,90136,52492],{"class":34},[28,90138,136],{"class":51375},[28,90140,51382],{"class":34},[28,90142,90143,90145,90147],{"class":30,"line":1770},[28,90144,51860],{"class":34},[28,90146,51409],{"class":51375},[28,90148,51382],{"class":34},[28,90150,90151],{"class":30,"line":1775},[28,90152,2477],{"emptyLinePlaceholder":144},[28,90154,90155,90157,90159],{"class":30,"line":1804},[28,90156,99],{"class":34},[28,90158,51875],{"class":51375},[28,90160,51382],{"class":34},[28,90162,90163,90165,90167,90169,90171,90173,90175,90177],{"class":30,"line":1809},[28,90164,52219],{"class":34},[28,90166,51686],{"class":51375},[28,90168,53561],{"class":2040},[28,90170,39],{"class":34},[28,90172,53566],{"class":320},[28,90174,55389],{"class":34},[28,90176,51686],{"class":51375},[28,90178,51382],{"class":34},[28,90180,90181,90183,90185,90187,90189,90191,90193,90195],{"class":30,"line":1826},[28,90182,52219],{"class":34},[28,90184,51888],{"class":51375},[28,90186,55314],{"class":2040},[28,90188,39],{"class":34},[28,90190,88349],{"class":320},[28,90192,55389],{"class":34},[28,90194,51888],{"class":51375},[28,90196,51382],{"class":34},[28,90198,90199,90201,90203],{"class":30,"line":1831},[28,90200,52219],{"class":34},[28,90202,51888],{"class":51375},[28,90204,51382],{"class":34},[28,90206,90207,90209,90211,90213,90215,90217,90219,90222],{"class":30,"line":1836},[28,90208,11298],{"class":38},[28,90210,87008],{"class":45},[28,90212,13641],{"class":38},[28,90214,54471],{"class":34},[28,90216,54474],{"class":2040},[28,90218,221],{"class":34},[28,90220,90221],{"class":320},"'.box'",[28,90223,227],{"class":34},[28,90225,90226,90228,90230,90232],{"class":30,"line":1841},[28,90227,52294],{"class":38},[28,90229,9515],{"class":34},[28,90231,39],{"class":38},[28,90233,47409],{"class":45},[28,90235,90236,90238,90241],{"class":30,"line":1855},[28,90237,70159],{"class":38},[28,90239,90240],{"class":2040}," mouseMove",[28,90242,10930],{"class":34},[28,90244,90245,90248,90250,90252],{"class":30,"line":1860},[28,90246,90247],{"class":34},"      box.innerHTML ",[28,90249,39],{"class":38},[28,90251,3109],{"class":34},[28,90253,2779],{"class":38},[28,90255,90256],{"class":30,"line":2654},[28,90257,90258],{"class":105},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[28,90260,90261],{"class":30,"line":2668},[28,90262,2264],{"class":34},[28,90264,90265],{"class":30,"line":2676},[28,90266,90267],{"class":105},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[28,90269,90270],{"class":30,"line":2681},[28,90271,90272],{"class":105},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[28,90274,90275],{"class":30,"line":2687},[28,90276,90277],{"class":105},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[28,90279,90280,90283,90285,90287,90290,90293,90296,90299,90301],{"class":30,"line":2693},[28,90281,90282],{"class":34},"    box.",[28,90284,57888],{"class":2040},[28,90286,221],{"class":34},[28,90288,90289],{"class":320},"'mousemove'",[28,90291,90292],{"class":34},", _.",[28,90294,90295],{"class":2040},"debounce",[28,90297,90298],{"class":34},"(mouseMove, ",[28,90300,65149],{"class":45},[28,90302,30573],{"class":34},[28,90304,90305,90307,90309],{"class":30,"line":2698},[28,90306,52492],{"class":34},[28,90308,51888],{"class":51375},[28,90310,51382],{"class":34},[28,90312,90313,90315,90317],{"class":30,"line":8025},[28,90314,51860],{"class":34},[28,90316,51875],{"class":51375},[28,90318,51382],{"class":34},[28,90320,90321],{"class":30,"line":8049},[28,90322,2477],{"emptyLinePlaceholder":144},[28,90324,90325,90327,90329],{"class":30,"line":8054},[28,90326,51860],{"class":34},[28,90328,50710],{"class":51375},[28,90330,51382],{"class":34},[1211,90332,90333],{},[174,90334,90335],{},"手写一个防抖函数来处理",[14,90337,90338],{},"防抖的核心就是利用定时器来实现的：",[14,90340,90341],{},"①声明一个定时器变量",[14,90343,90344],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90346,90347],{},"③如果没有定时器则开启定时器，记得存到变量里面",[18,90349,90351],{"className":50708,"code":90350,"language":50710,"meta":23,"style":23},"\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",[25,90352,90353,90363,90377,90381,90389,90403,90423,90435,90443,90449,90459,90471,90483,90493,90505,90515,90525,90537,90541,90549,90557,90561,90569,90587,90605,90613,90631,90641,90649,90659,90663,90667,90671,90676,90681,90686,90691,90696,90701,90719,90726,90731,90739,90744,90757,90773,90783,90788,90792,90796,90816,90820,90825,90830,90835,90840,90848,90856,90860],{"__ignoreMap":23},[28,90354,90355,90357,90359,90361],{"class":30,"line":31},[28,90356,51372],{"class":34},[28,90358,51376],{"class":51375},[28,90360,51379],{"class":2040},[28,90362,51382],{"class":34},[28,90364,90365,90367,90369,90371,90373,90375],{"class":30,"line":94},[28,90366,99],{"class":34},[28,90368,50710],{"class":51375},[28,90370,51391],{"class":2040},[28,90372,39],{"class":34},[28,90374,51396],{"class":320},[28,90376,51382],{"class":34},[28,90378,90379],{"class":30,"line":109},[28,90380,2477],{"emptyLinePlaceholder":144},[28,90382,90383,90385,90387],{"class":30,"line":125},[28,90384,99],{"class":34},[28,90386,51409],{"class":51375},[28,90388,51382],{"class":34},[28,90390,90391,90393,90395,90397,90399,90401],{"class":30,"line":131},[28,90392,52219],{"class":34},[28,90394,51419],{"class":51375},[28,90396,51422],{"class":2040},[28,90398,39],{"class":34},[28,90400,51427],{"class":320},[28,90402,51382],{"class":34},[28,90404,90405,90407,90409,90411,90413,90415,90417,90419,90421],{"class":30,"line":1291},[28,90406,52219],{"class":34},[28,90408,51419],{"class":51375},[28,90410,14997],{"class":2040},[28,90412,39],{"class":34},[28,90414,51466],{"class":320},[28,90416,51446],{"class":2040},[28,90418,39],{"class":34},[28,90420,51473],{"class":320},[28,90422,51382],{"class":34},[28,90424,90425,90427,90429,90431,90433],{"class":30,"line":1297},[28,90426,52219],{"class":34},[28,90428,51482],{"class":51375},[28,90430,51485],{"class":34},[28,90432,51482],{"class":51375},[28,90434,51382],{"class":34},[28,90436,90437,90439,90441],{"class":30,"line":1388},[28,90438,52219],{"class":34},[28,90440,136],{"class":51375},[28,90442,51382],{"class":34},[28,90444,90445,90447],{"class":30,"line":1394},[28,90446,54827],{"class":2040},[28,90448,15649],{"class":34},[28,90450,90451,90453,90455,90457],{"class":30,"line":1406},[28,90452,72671],{"class":45},[28,90454,51512],{"class":34},[28,90456,60580],{"class":45},[28,90458,1367],{"class":34},[28,90460,90461,90463,90465,90467,90469],{"class":30,"line":1689},[28,90462,54846],{"class":45},[28,90464,51512],{"class":34},[28,90466,1799],{"class":45},[28,90468,51567],{"class":38},[28,90470,1367],{"class":34},[28,90472,90473,90475,90477,90479,90481],{"class":30,"line":1694},[28,90474,54860],{"class":45},[28,90476,51512],{"class":34},[28,90478,1799],{"class":45},[28,90480,51567],{"class":38},[28,90482,1367],{"class":34},[28,90484,90485,90487,90489,90491],{"class":30,"line":1700},[28,90486,54959],{"class":45},[28,90488,51512],{"class":34},[28,90490,90081],{"class":45},[28,90492,1367],{"class":34},[28,90494,90495,90497,90499,90501,90503],{"class":30,"line":1705},[28,90496,54997],{"class":45},[28,90498,51512],{"class":34},[28,90500,1031],{"class":45},[28,90502,51567],{"class":38},[28,90504,1367],{"class":34},[28,90506,90507,90509,90511,90513],{"class":30,"line":1719},[28,90508,57491],{"class":45},[28,90510,51512],{"class":34},[28,90512,60917],{"class":45},[28,90514,1367],{"class":34},[28,90516,90517,90519,90521,90523],{"class":30,"line":1724},[28,90518,57361],{"class":45},[28,90520,51512],{"class":34},[28,90522,51667],{"class":45},[28,90524,1367],{"class":34},[28,90526,90527,90529,90531,90533,90535],{"class":30,"line":1730},[28,90528,90120],{"class":45},[28,90530,51512],{"class":34},[28,90532,533],{"class":45},[28,90534,51567],{"class":38},[28,90536,1367],{"class":34},[28,90538,90539],{"class":30,"line":1751},[28,90540,2264],{"class":34},[28,90542,90543,90545,90547],{"class":30,"line":1756},[28,90544,52492],{"class":34},[28,90546,136],{"class":51375},[28,90548,51382],{"class":34},[28,90550,90551,90553,90555],{"class":30,"line":1770},[28,90552,51860],{"class":34},[28,90554,51409],{"class":51375},[28,90556,51382],{"class":34},[28,90558,90559],{"class":30,"line":1775},[28,90560,2477],{"emptyLinePlaceholder":144},[28,90562,90563,90565,90567],{"class":30,"line":1804},[28,90564,99],{"class":34},[28,90566,51875],{"class":51375},[28,90568,51382],{"class":34},[28,90570,90571,90573,90575,90577,90579,90581,90583,90585],{"class":30,"line":1809},[28,90572,52219],{"class":34},[28,90574,51686],{"class":51375},[28,90576,53561],{"class":2040},[28,90578,39],{"class":34},[28,90580,53566],{"class":320},[28,90582,55389],{"class":34},[28,90584,51686],{"class":51375},[28,90586,51382],{"class":34},[28,90588,90589,90591,90593,90595,90597,90599,90601,90603],{"class":30,"line":1826},[28,90590,52219],{"class":34},[28,90592,51888],{"class":51375},[28,90594,55314],{"class":2040},[28,90596,39],{"class":34},[28,90598,88349],{"class":320},[28,90600,55389],{"class":34},[28,90602,51888],{"class":51375},[28,90604,51382],{"class":34},[28,90606,90607,90609,90611],{"class":30,"line":1831},[28,90608,52219],{"class":34},[28,90610,51888],{"class":51375},[28,90612,51382],{"class":34},[28,90614,90615,90617,90619,90621,90623,90625,90627,90629],{"class":30,"line":1836},[28,90616,11298],{"class":38},[28,90618,87008],{"class":45},[28,90620,13641],{"class":38},[28,90622,54471],{"class":34},[28,90624,54474],{"class":2040},[28,90626,221],{"class":34},[28,90628,90221],{"class":320},[28,90630,227],{"class":34},[28,90632,90633,90635,90637,90639],{"class":30,"line":1841},[28,90634,52294],{"class":38},[28,90636,9515],{"class":34},[28,90638,39],{"class":38},[28,90640,47409],{"class":45},[28,90642,90643,90645,90647],{"class":30,"line":1855},[28,90644,70159],{"class":38},[28,90646,90240],{"class":2040},[28,90648,10930],{"class":34},[28,90650,90651,90653,90655,90657],{"class":30,"line":1860},[28,90652,90247],{"class":34},[28,90654,39],{"class":38},[28,90656,3109],{"class":34},[28,90658,2779],{"class":38},[28,90660,90661],{"class":30,"line":2654},[28,90662,90258],{"class":105},[28,90664,90665],{"class":30,"line":2668},[28,90666,2264],{"class":34},[28,90668,90669],{"class":30,"line":2676},[28,90670,90267],{"class":105},[28,90672,90673],{"class":30,"line":2681},[28,90674,90675],{"class":105},"    \u002F\u002F 手写防抖函数\n",[28,90677,90678],{"class":30,"line":2687},[28,90679,90680],{"class":105},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[28,90682,90683],{"class":30,"line":2693},[28,90684,90685],{"class":105},"    \u002F\u002F 1.声明定时器变量\n",[28,90687,90688],{"class":30,"line":2698},[28,90689,90690],{"class":105},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[28,90692,90693],{"class":30,"line":8025},[28,90694,90695],{"class":105},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[28,90697,90698],{"class":30,"line":8049},[28,90699,90700],{"class":105},"    \u002F\u002F 4.定时器里面写函数调用\n",[28,90702,90703,90705,90708,90710,90713,90715,90717],{"class":30,"line":8054},[28,90704,70159],{"class":38},[28,90706,90707],{"class":2040}," debounce",[28,90709,221],{"class":34},[28,90711,90712],{"class":5293},"fn",[28,90714,12512],{"class":34},[28,90716,929],{"class":5293},[28,90718,12519],{"class":34},[28,90720,90721,90723],{"class":30,"line":8060},[28,90722,79847],{"class":38},[28,90724,90725],{"class":34}," timer\n",[28,90727,90728],{"class":30,"line":8087},[28,90729,90730],{"class":105},"      \u002F\u002F return 返回一个匿名函数\n",[28,90732,90733,90735,90737],{"class":30,"line":8092},[28,90734,74057],{"class":38},[28,90736,58993],{"class":38},[28,90738,54527],{"class":34},[28,90740,90741],{"class":30,"line":8098},[28,90742,90743],{"class":105},"        \u002F\u002F 这里边写第二三四步\n",[28,90745,90746,90748,90751,90754],{"class":30,"line":8110},[28,90747,2574],{"class":38},[28,90749,90750],{"class":34}," (timer) ",[28,90752,90753],{"class":2040},"clearTimeout",[28,90755,90756],{"class":34},"(timer)\n",[28,90758,90759,90762,90764,90767,90769,90771],{"class":30,"line":8122},[28,90760,90761],{"class":34},"        timer ",[28,90763,39],{"class":38},[28,90765,90766],{"class":2040}," setTimeout",[28,90768,221],{"class":34},[28,90770,54524],{"class":38},[28,90772,54527],{"class":34},[28,90774,90775,90778,90780],{"class":30,"line":8134},[28,90776,90777],{"class":2040},"          fn",[28,90779,13127],{"class":34},[28,90781,90782],{"class":105},"\u002F\u002F加小括号调用fn }, t)\n",[28,90784,90785],{"class":30,"line":9793},[28,90786,90787],{"class":34},"        }, t)\n",[28,90789,90790],{"class":30,"line":9818},[28,90791,52473],{"class":34},[28,90793,90794],{"class":30,"line":9841},[28,90795,2264],{"class":34},[28,90797,90798,90800,90802,90804,90806,90808,90810,90812,90814],{"class":30,"line":9865},[28,90799,90282],{"class":34},[28,90801,57888],{"class":2040},[28,90803,221],{"class":34},[28,90805,90289],{"class":320},[28,90807,12512],{"class":34},[28,90809,90295],{"class":2040},[28,90811,90298],{"class":34},[28,90813,65149],{"class":45},[28,90815,30573],{"class":34},[28,90817,90818],{"class":30,"line":9870},[28,90819,2477],{"emptyLinePlaceholder":144},[28,90821,90822],{"class":30,"line":9875},[28,90823,90824],{"class":105},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[28,90826,90827],{"class":30,"line":9880},[28,90828,90829],{"class":105},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[28,90831,90832],{"class":30,"line":9889},[28,90833,90834],{"class":105},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[28,90836,90837],{"class":30,"line":9894},[28,90838,90839],{"class":105},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[28,90841,90842,90844,90846],{"class":30,"line":9900},[28,90843,52492],{"class":34},[28,90845,51888],{"class":51375},[28,90847,51382],{"class":34},[28,90849,90850,90852,90854],{"class":30,"line":9921},[28,90851,51860],{"class":34},[28,90853,51875],{"class":51375},[28,90855,51382],{"class":34},[28,90857,90858],{"class":30,"line":9927},[28,90859,2477],{"emptyLinePlaceholder":144},[28,90861,90862,90864,90866],{"class":30,"line":9941},[28,90863,51860],{"class":34},[28,90865,50710],{"class":51375},[28,90867,51382],{"class":34},[188,90869,90871],{"id":90870},"_4172-节流","4.17.2 节流",[14,90873,90874],{},[1539,90875],{"alt":23,"src":90876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90878,90879],{},[1539,90880],{"alt":23,"src":90881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90883,90884],{},[365,90885,90886],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90888,90889],{},"实现方式：",[1211,90891,90892],{},[174,90893,90894],{},"lodash 提供的节流函数来处理",[14,90896,90897],{},"_.throttle(func,[wait=0],[options=])",[14,90899,90900],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[18,90902,90904],{"className":50708,"code":90903,"language":50710,"meta":23,"style":23},"\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",[25,90905,90906,90916,90930,90934,90942,90956,90976,90988,90996,91002,91012,91024,91036,91046,91058,91068,91078,91090,91094,91102,91110,91114,91122,91140,91158,91166,91184,91194,91202,91212,91216,91220,91224,91229,91234,91255,91263,91271,91275],{"__ignoreMap":23},[28,90907,90908,90910,90912,90914],{"class":30,"line":31},[28,90909,51372],{"class":34},[28,90911,51376],{"class":51375},[28,90913,51379],{"class":2040},[28,90915,51382],{"class":34},[28,90917,90918,90920,90922,90924,90926,90928],{"class":30,"line":94},[28,90919,99],{"class":34},[28,90921,50710],{"class":51375},[28,90923,51391],{"class":2040},[28,90925,39],{"class":34},[28,90927,51396],{"class":320},[28,90929,51382],{"class":34},[28,90931,90932],{"class":30,"line":109},[28,90933,2477],{"emptyLinePlaceholder":144},[28,90935,90936,90938,90940],{"class":30,"line":125},[28,90937,99],{"class":34},[28,90939,51409],{"class":51375},[28,90941,51382],{"class":34},[28,90943,90944,90946,90948,90950,90952,90954],{"class":30,"line":131},[28,90945,52219],{"class":34},[28,90947,51419],{"class":51375},[28,90949,51422],{"class":2040},[28,90951,39],{"class":34},[28,90953,51427],{"class":320},[28,90955,51382],{"class":34},[28,90957,90958,90960,90962,90964,90966,90968,90970,90972,90974],{"class":30,"line":1291},[28,90959,52219],{"class":34},[28,90961,51419],{"class":51375},[28,90963,14997],{"class":2040},[28,90965,39],{"class":34},[28,90967,51466],{"class":320},[28,90969,51446],{"class":2040},[28,90971,39],{"class":34},[28,90973,51473],{"class":320},[28,90975,51382],{"class":34},[28,90977,90978,90980,90982,90984,90986],{"class":30,"line":1297},[28,90979,52219],{"class":34},[28,90981,51482],{"class":51375},[28,90983,51485],{"class":34},[28,90985,51482],{"class":51375},[28,90987,51382],{"class":34},[28,90989,90990,90992,90994],{"class":30,"line":1388},[28,90991,52219],{"class":34},[28,90993,136],{"class":51375},[28,90995,51382],{"class":34},[28,90997,90998,91000],{"class":30,"line":1394},[28,90999,54827],{"class":2040},[28,91001,15649],{"class":34},[28,91003,91004,91006,91008,91010],{"class":30,"line":1406},[28,91005,72671],{"class":45},[28,91007,51512],{"class":34},[28,91009,60580],{"class":45},[28,91011,1367],{"class":34},[28,91013,91014,91016,91018,91020,91022],{"class":30,"line":1689},[28,91015,54846],{"class":45},[28,91017,51512],{"class":34},[28,91019,1799],{"class":45},[28,91021,51567],{"class":38},[28,91023,1367],{"class":34},[28,91025,91026,91028,91030,91032,91034],{"class":30,"line":1694},[28,91027,54860],{"class":45},[28,91029,51512],{"class":34},[28,91031,1799],{"class":45},[28,91033,51567],{"class":38},[28,91035,1367],{"class":34},[28,91037,91038,91040,91042,91044],{"class":30,"line":1700},[28,91039,54959],{"class":45},[28,91041,51512],{"class":34},[28,91043,90081],{"class":45},[28,91045,1367],{"class":34},[28,91047,91048,91050,91052,91054,91056],{"class":30,"line":1705},[28,91049,54997],{"class":45},[28,91051,51512],{"class":34},[28,91053,1031],{"class":45},[28,91055,51567],{"class":38},[28,91057,1367],{"class":34},[28,91059,91060,91062,91064,91066],{"class":30,"line":1719},[28,91061,57491],{"class":45},[28,91063,51512],{"class":34},[28,91065,60917],{"class":45},[28,91067,1367],{"class":34},[28,91069,91070,91072,91074,91076],{"class":30,"line":1724},[28,91071,57361],{"class":45},[28,91073,51512],{"class":34},[28,91075,51667],{"class":45},[28,91077,1367],{"class":34},[28,91079,91080,91082,91084,91086,91088],{"class":30,"line":1730},[28,91081,90120],{"class":45},[28,91083,51512],{"class":34},[28,91085,533],{"class":45},[28,91087,51567],{"class":38},[28,91089,1367],{"class":34},[28,91091,91092],{"class":30,"line":1751},[28,91093,2264],{"class":34},[28,91095,91096,91098,91100],{"class":30,"line":1756},[28,91097,52492],{"class":34},[28,91099,136],{"class":51375},[28,91101,51382],{"class":34},[28,91103,91104,91106,91108],{"class":30,"line":1770},[28,91105,51860],{"class":34},[28,91107,51409],{"class":51375},[28,91109,51382],{"class":34},[28,91111,91112],{"class":30,"line":1775},[28,91113,2477],{"emptyLinePlaceholder":144},[28,91115,91116,91118,91120],{"class":30,"line":1804},[28,91117,99],{"class":34},[28,91119,51875],{"class":51375},[28,91121,51382],{"class":34},[28,91123,91124,91126,91128,91130,91132,91134,91136,91138],{"class":30,"line":1809},[28,91125,52219],{"class":34},[28,91127,51686],{"class":51375},[28,91129,53561],{"class":2040},[28,91131,39],{"class":34},[28,91133,53566],{"class":320},[28,91135,55389],{"class":34},[28,91137,51686],{"class":51375},[28,91139,51382],{"class":34},[28,91141,91142,91144,91146,91148,91150,91152,91154,91156],{"class":30,"line":1826},[28,91143,52219],{"class":34},[28,91145,51888],{"class":51375},[28,91147,55314],{"class":2040},[28,91149,39],{"class":34},[28,91151,88349],{"class":320},[28,91153,55389],{"class":34},[28,91155,51888],{"class":51375},[28,91157,51382],{"class":34},[28,91159,91160,91162,91164],{"class":30,"line":1831},[28,91161,52219],{"class":34},[28,91163,51888],{"class":51375},[28,91165,51382],{"class":34},[28,91167,91168,91170,91172,91174,91176,91178,91180,91182],{"class":30,"line":1836},[28,91169,11298],{"class":38},[28,91171,87008],{"class":45},[28,91173,13641],{"class":38},[28,91175,54471],{"class":34},[28,91177,54474],{"class":2040},[28,91179,221],{"class":34},[28,91181,90221],{"class":320},[28,91183,227],{"class":34},[28,91185,91186,91188,91190,91192],{"class":30,"line":1841},[28,91187,52294],{"class":38},[28,91189,9515],{"class":34},[28,91191,39],{"class":38},[28,91193,47409],{"class":45},[28,91195,91196,91198,91200],{"class":30,"line":1855},[28,91197,70159],{"class":38},[28,91199,90240],{"class":2040},[28,91201,10930],{"class":34},[28,91203,91204,91206,91208,91210],{"class":30,"line":1860},[28,91205,90247],{"class":34},[28,91207,39],{"class":38},[28,91209,3109],{"class":34},[28,91211,2779],{"class":38},[28,91213,91214],{"class":30,"line":2654},[28,91215,90258],{"class":105},[28,91217,91218],{"class":30,"line":2668},[28,91219,2264],{"class":34},[28,91221,91222],{"class":30,"line":2676},[28,91223,90267],{"class":105},[28,91225,91226],{"class":30,"line":2681},[28,91227,91228],{"class":105},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[28,91230,91231],{"class":30,"line":2687},[28,91232,91233],{"class":105},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[28,91235,91236,91238,91240,91242,91244,91246,91249,91251,91253],{"class":30,"line":2693},[28,91237,90282],{"class":34},[28,91239,57888],{"class":2040},[28,91241,221],{"class":34},[28,91243,90289],{"class":320},[28,91245,90292],{"class":34},[28,91247,91248],{"class":2040},"throttle",[28,91250,90298],{"class":34},[28,91252,65149],{"class":45},[28,91254,30573],{"class":34},[28,91256,91257,91259,91261],{"class":30,"line":2698},[28,91258,52492],{"class":34},[28,91260,51888],{"class":51375},[28,91262,51382],{"class":34},[28,91264,91265,91267,91269],{"class":30,"line":8025},[28,91266,51860],{"class":34},[28,91268,51875],{"class":51375},[28,91270,51382],{"class":34},[28,91272,91273],{"class":30,"line":8049},[28,91274,2477],{"emptyLinePlaceholder":144},[28,91276,91277,91279,91281],{"class":30,"line":8054},[28,91278,51860],{"class":34},[28,91280,50710],{"class":51375},[28,91282,51382],{"class":34},[1211,91284,91285],{},[174,91286,91287],{},"手写一个节流函数来处理",[14,91289,71027],{},[14,91291,90341],{},[14,91293,91294],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91296,91297],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[18,91299,91301],{"className":50708,"code":91300,"language":50710,"meta":23,"style":23},"\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",[25,91302,91303,91313,91327,91331,91339,91353,91373,91385,91393,91399,91409,91421,91433,91443,91455,91465,91475,91487,91491,91499,91507,91511,91519,91537,91555,91563,91581,91591,91599,91609,91613,91617,91621,91626,91631,91636,91641,91646,91651,91668,91674,91682,91693,91708,91715,91720,91725,91735,91740,91745,91750,91754,91758,91762,91782,91790,91798,91802],{"__ignoreMap":23},[28,91304,91305,91307,91309,91311],{"class":30,"line":31},[28,91306,51372],{"class":34},[28,91308,51376],{"class":51375},[28,91310,51379],{"class":2040},[28,91312,51382],{"class":34},[28,91314,91315,91317,91319,91321,91323,91325],{"class":30,"line":94},[28,91316,99],{"class":34},[28,91318,50710],{"class":51375},[28,91320,51391],{"class":2040},[28,91322,39],{"class":34},[28,91324,51396],{"class":320},[28,91326,51382],{"class":34},[28,91328,91329],{"class":30,"line":109},[28,91330,2477],{"emptyLinePlaceholder":144},[28,91332,91333,91335,91337],{"class":30,"line":125},[28,91334,99],{"class":34},[28,91336,51409],{"class":51375},[28,91338,51382],{"class":34},[28,91340,91341,91343,91345,91347,91349,91351],{"class":30,"line":131},[28,91342,52219],{"class":34},[28,91344,51419],{"class":51375},[28,91346,51422],{"class":2040},[28,91348,39],{"class":34},[28,91350,51427],{"class":320},[28,91352,51382],{"class":34},[28,91354,91355,91357,91359,91361,91363,91365,91367,91369,91371],{"class":30,"line":1291},[28,91356,52219],{"class":34},[28,91358,51419],{"class":51375},[28,91360,14997],{"class":2040},[28,91362,39],{"class":34},[28,91364,51466],{"class":320},[28,91366,51446],{"class":2040},[28,91368,39],{"class":34},[28,91370,51473],{"class":320},[28,91372,51382],{"class":34},[28,91374,91375,91377,91379,91381,91383],{"class":30,"line":1297},[28,91376,52219],{"class":34},[28,91378,51482],{"class":51375},[28,91380,51485],{"class":34},[28,91382,51482],{"class":51375},[28,91384,51382],{"class":34},[28,91386,91387,91389,91391],{"class":30,"line":1388},[28,91388,52219],{"class":34},[28,91390,136],{"class":51375},[28,91392,51382],{"class":34},[28,91394,91395,91397],{"class":30,"line":1394},[28,91396,54827],{"class":2040},[28,91398,15649],{"class":34},[28,91400,91401,91403,91405,91407],{"class":30,"line":1406},[28,91402,72671],{"class":45},[28,91404,51512],{"class":34},[28,91406,60580],{"class":45},[28,91408,1367],{"class":34},[28,91410,91411,91413,91415,91417,91419],{"class":30,"line":1689},[28,91412,54846],{"class":45},[28,91414,51512],{"class":34},[28,91416,1799],{"class":45},[28,91418,51567],{"class":38},[28,91420,1367],{"class":34},[28,91422,91423,91425,91427,91429,91431],{"class":30,"line":1694},[28,91424,54860],{"class":45},[28,91426,51512],{"class":34},[28,91428,1799],{"class":45},[28,91430,51567],{"class":38},[28,91432,1367],{"class":34},[28,91434,91435,91437,91439,91441],{"class":30,"line":1700},[28,91436,54959],{"class":45},[28,91438,51512],{"class":34},[28,91440,90081],{"class":45},[28,91442,1367],{"class":34},[28,91444,91445,91447,91449,91451,91453],{"class":30,"line":1705},[28,91446,54997],{"class":45},[28,91448,51512],{"class":34},[28,91450,1031],{"class":45},[28,91452,51567],{"class":38},[28,91454,1367],{"class":34},[28,91456,91457,91459,91461,91463],{"class":30,"line":1719},[28,91458,57491],{"class":45},[28,91460,51512],{"class":34},[28,91462,60917],{"class":45},[28,91464,1367],{"class":34},[28,91466,91467,91469,91471,91473],{"class":30,"line":1724},[28,91468,57361],{"class":45},[28,91470,51512],{"class":34},[28,91472,51667],{"class":45},[28,91474,1367],{"class":34},[28,91476,91477,91479,91481,91483,91485],{"class":30,"line":1730},[28,91478,90120],{"class":45},[28,91480,51512],{"class":34},[28,91482,533],{"class":45},[28,91484,51567],{"class":38},[28,91486,1367],{"class":34},[28,91488,91489],{"class":30,"line":1751},[28,91490,2264],{"class":34},[28,91492,91493,91495,91497],{"class":30,"line":1756},[28,91494,52492],{"class":34},[28,91496,136],{"class":51375},[28,91498,51382],{"class":34},[28,91500,91501,91503,91505],{"class":30,"line":1770},[28,91502,51860],{"class":34},[28,91504,51409],{"class":51375},[28,91506,51382],{"class":34},[28,91508,91509],{"class":30,"line":1775},[28,91510,2477],{"emptyLinePlaceholder":144},[28,91512,91513,91515,91517],{"class":30,"line":1804},[28,91514,99],{"class":34},[28,91516,51875],{"class":51375},[28,91518,51382],{"class":34},[28,91520,91521,91523,91525,91527,91529,91531,91533,91535],{"class":30,"line":1809},[28,91522,52219],{"class":34},[28,91524,51686],{"class":51375},[28,91526,53561],{"class":2040},[28,91528,39],{"class":34},[28,91530,53566],{"class":320},[28,91532,55389],{"class":34},[28,91534,51686],{"class":51375},[28,91536,51382],{"class":34},[28,91538,91539,91541,91543,91545,91547,91549,91551,91553],{"class":30,"line":1826},[28,91540,52219],{"class":34},[28,91542,51888],{"class":51375},[28,91544,55314],{"class":2040},[28,91546,39],{"class":34},[28,91548,88349],{"class":320},[28,91550,55389],{"class":34},[28,91552,51888],{"class":51375},[28,91554,51382],{"class":34},[28,91556,91557,91559,91561],{"class":30,"line":1831},[28,91558,52219],{"class":34},[28,91560,51888],{"class":51375},[28,91562,51382],{"class":34},[28,91564,91565,91567,91569,91571,91573,91575,91577,91579],{"class":30,"line":1836},[28,91566,11298],{"class":38},[28,91568,87008],{"class":45},[28,91570,13641],{"class":38},[28,91572,54471],{"class":34},[28,91574,54474],{"class":2040},[28,91576,221],{"class":34},[28,91578,90221],{"class":320},[28,91580,227],{"class":34},[28,91582,91583,91585,91587,91589],{"class":30,"line":1841},[28,91584,52294],{"class":38},[28,91586,9515],{"class":34},[28,91588,39],{"class":38},[28,91590,47409],{"class":45},[28,91592,91593,91595,91597],{"class":30,"line":1855},[28,91594,70159],{"class":38},[28,91596,90240],{"class":2040},[28,91598,10930],{"class":34},[28,91600,91601,91603,91605,91607],{"class":30,"line":1860},[28,91602,90247],{"class":34},[28,91604,39],{"class":38},[28,91606,3109],{"class":34},[28,91608,2779],{"class":38},[28,91610,91611],{"class":30,"line":2654},[28,91612,90258],{"class":105},[28,91614,91615],{"class":30,"line":2668},[28,91616,2264],{"class":34},[28,91618,91619],{"class":30,"line":2676},[28,91620,90267],{"class":105},[28,91622,91623],{"class":30,"line":2681},[28,91624,91625],{"class":105},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[28,91627,91628],{"class":30,"line":2687},[28,91629,91630],{"class":105},"    \u002F\u002F 1.声明一个定时器变量\n",[28,91632,91633],{"class":30,"line":2693},[28,91634,91635],{"class":105},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[28,91637,91638],{"class":30,"line":2698},[28,91639,91640],{"class":105},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[28,91642,91643],{"class":30,"line":8025},[28,91644,91645],{"class":105},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[28,91647,91648],{"class":30,"line":8049},[28,91649,91650],{"class":105},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[28,91652,91653,91655,91658,91660,91662,91664,91666],{"class":30,"line":8054},[28,91654,70159],{"class":38},[28,91656,91657],{"class":2040}," throttle",[28,91659,221],{"class":34},[28,91661,90712],{"class":5293},[28,91663,12512],{"class":34},[28,91665,929],{"class":5293},[28,91667,12519],{"class":34},[28,91669,91670,91672],{"class":30,"line":8060},[28,91671,79847],{"class":38},[28,91673,90725],{"class":34},[28,91675,91676,91678,91680],{"class":30,"line":8087},[28,91677,74057],{"class":38},[28,91679,58993],{"class":38},[28,91681,54527],{"class":34},[28,91683,91684,91686,91688,91690],{"class":30,"line":8092},[28,91685,2574],{"class":38},[28,91687,1735],{"class":34},[28,91689,441],{"class":38},[28,91691,91692],{"class":34},"timer) {\n",[28,91694,91695,91698,91700,91702,91704,91706],{"class":30,"line":8098},[28,91696,91697],{"class":34},"          timer ",[28,91699,39],{"class":38},[28,91701,90766],{"class":2040},[28,91703,221],{"class":34},[28,91705,54524],{"class":38},[28,91707,54527],{"class":34},[28,91709,91710,91713],{"class":30,"line":8110},[28,91711,91712],{"class":2040},"            fn",[28,91714,2053],{"class":34},[28,91716,91717],{"class":30,"line":8122},[28,91718,91719],{"class":105},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[28,91721,91722],{"class":30,"line":8134},[28,91723,91724],{"class":105},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[28,91726,91727,91730,91732],{"class":30,"line":9793},[28,91728,91729],{"class":34},"            timer ",[28,91731,39],{"class":38},[28,91733,91734],{"class":45}," null\n",[28,91736,91737],{"class":30,"line":9818},[28,91738,91739],{"class":105},"            \u002F\u002F 不能用clearTimeout(timer)\n",[28,91741,91742],{"class":30,"line":9841},[28,91743,91744],{"class":105},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[28,91746,91747],{"class":30,"line":9865},[28,91748,91749],{"class":34},"          }, t)\n",[28,91751,91752],{"class":30,"line":9870},[28,91753,2606],{"class":34},[28,91755,91756],{"class":30,"line":9875},[28,91757,52473],{"class":34},[28,91759,91760],{"class":30,"line":9880},[28,91761,2264],{"class":34},[28,91763,91764,91766,91768,91770,91772,91774,91776,91778,91780],{"class":30,"line":9889},[28,91765,90282],{"class":34},[28,91767,57888],{"class":2040},[28,91769,221],{"class":34},[28,91771,90289],{"class":320},[28,91773,12512],{"class":34},[28,91775,91248],{"class":2040},[28,91777,90298],{"class":34},[28,91779,65149],{"class":45},[28,91781,30573],{"class":34},[28,91783,91784,91786,91788],{"class":30,"line":9894},[28,91785,52492],{"class":34},[28,91787,51888],{"class":51375},[28,91789,51382],{"class":34},[28,91791,91792,91794,91796],{"class":30,"line":9900},[28,91793,51860],{"class":34},[28,91795,51875],{"class":51375},[28,91797,51382],{"class":34},[28,91799,91800],{"class":30,"line":9921},[28,91801,2477],{"emptyLinePlaceholder":144},[28,91803,91804,91806,91808],{"class":30,"line":9927},[28,91805,51860],{"class":34},[28,91807,50710],{"class":51375},[28,91809,51382],{"class":34},[188,91811,91813],{"id":91812},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[18,91815,91817],{"className":53142,"code":91816,"language":53144,"meta":23,"style":23},"\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",[25,91818,91819,91827,91835,91840,91845,91850,91855,91859,91867],{"__ignoreMap":23},[28,91820,91821,91823,91825],{"class":30,"line":31},[28,91822,99],{"class":34},[28,91824,51875],{"class":51375},[28,91826,51382],{"class":34},[28,91828,91829,91831,91833],{"class":30,"line":94},[28,91830,52219],{"class":34},[28,91832,51888],{"class":51375},[28,91834,51382],{"class":34},[28,91836,91837],{"class":30,"line":109},[28,91838,91839],{"class":34},"    let timer = null\n",[28,91841,91842],{"class":30,"line":125},[28,91843,91844],{"class":34},"    timer = setTimeout(() => {\n",[28,91846,91847],{"class":30,"line":131},[28,91848,91849],{"class":34},"      clearTimeout(timer)\n",[28,91851,91852],{"class":30,"line":1291},[28,91853,91854],{"class":34},"      console.log(timer)\n",[28,91856,91857],{"class":30,"line":1297},[28,91858,60300],{"class":34},[28,91860,91861,91863,91865],{"class":30,"line":1388},[28,91862,52492],{"class":34},[28,91864,51888],{"class":51375},[28,91866,51382],{"class":34},[28,91868,91869,91871,91873],{"class":30,"line":1394},[28,91870,51860],{"class":34},[28,91872,51875],{"class":51375},[28,91874,51382],{"class":34},[14,91876,91877],{},"输出为1",[14,91879,91880],{},"在开启的定时器里边写清除定时器",[14,91882,91883],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[188,91885,91887],{"id":91886},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91889,91890],{},"页面打开，可以记录上一次的视频播放位置",[14,91892,91893],{},[1539,91894],{"alt":23,"src":91895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91897,91898],{},[1539,91899],{"alt":23,"src":91900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[18,91902,91904],{"className":50708,"code":91903,"language":50710,"meta":23,"style":23},"\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",[25,91905,91906,91916,91930,91934,91942,91956,91976,91996,92018,92031,92039,92045,92055,92065,92075,92079,92083,92090,92103,92115,92119,92123,92133,92145,92159,92163,92167,92174,92184,92197,92209,92219,92229,92245,92257,92261,92265,92273,92283,92295,92305,92315,92325,92329,92333,92343,92354,92358,92366,92374,92378,92386,92401,92416,92431,92452,92460,92468,92483,92505,92513,92528,92554,92580,92606,92614,92622,92641,92649,92654,92673,92678,92696,92701,92706,92714,92719,92733,92741,92746,92763,92767,92772,92794,92798,92806,92814,92818],{"__ignoreMap":23},[28,91907,91908,91910,91912,91914],{"class":30,"line":31},[28,91909,51372],{"class":34},[28,91911,51376],{"class":51375},[28,91913,51379],{"class":2040},[28,91915,51382],{"class":34},[28,91917,91918,91920,91922,91924,91926,91928],{"class":30,"line":94},[28,91919,99],{"class":34},[28,91921,50710],{"class":51375},[28,91923,51391],{"class":2040},[28,91925,39],{"class":34},[28,91927,51396],{"class":320},[28,91929,51382],{"class":34},[28,91931,91932],{"class":30,"line":109},[28,91933,2477],{"emptyLinePlaceholder":144},[28,91935,91936,91938,91940],{"class":30,"line":125},[28,91937,99],{"class":34},[28,91939,51409],{"class":51375},[28,91941,51382],{"class":34},[28,91943,91944,91946,91948,91950,91952,91954],{"class":30,"line":131},[28,91945,52219],{"class":34},[28,91947,51419],{"class":51375},[28,91949,51422],{"class":2040},[28,91951,39],{"class":34},[28,91953,51427],{"class":320},[28,91955,59202],{"class":34},[28,91957,91958,91960,91962,91964,91966,91968,91970,91972,91974],{"class":30,"line":1291},[28,91959,52219],{"class":34},[28,91961,51419],{"class":51375},[28,91963,51438],{"class":2040},[28,91965,39],{"class":34},[28,91967,51443],{"class":320},[28,91969,51446],{"class":2040},[28,91971,39],{"class":34},[28,91973,51451],{"class":320},[28,91975,59202],{"class":34},[28,91977,91978,91980,91982,91984,91986,91988,91990,91992,91994],{"class":30,"line":1297},[28,91979,52219],{"class":34},[28,91981,51419],{"class":51375},[28,91983,14997],{"class":2040},[28,91985,39],{"class":34},[28,91987,51466],{"class":320},[28,91989,51446],{"class":2040},[28,91991,39],{"class":34},[28,91993,51473],{"class":320},[28,91995,59202],{"class":34},[28,91997,91998,92000,92002,92004,92006,92009,92011,92013,92016],{"class":30,"line":1388},[28,91999,52219],{"class":34},[28,92001,51419],{"class":51375},[28,92003,14997],{"class":2040},[28,92005,39],{"class":34},[28,92007,92008],{"class":320},"\"referrer\"",[28,92010,51446],{"class":2040},[28,92012,39],{"class":34},[28,92014,92015],{"class":320},"\"never\"",[28,92017,59202],{"class":34},[28,92019,92020,92022,92024,92027,92029],{"class":30,"line":1394},[28,92021,52219],{"class":34},[28,92023,51482],{"class":51375},[28,92025,92026],{"class":34},">综合案例\u003C\u002F",[28,92028,51482],{"class":51375},[28,92030,51382],{"class":34},[28,92032,92033,92035,92037],{"class":30,"line":1406},[28,92034,52219],{"class":34},[28,92036,136],{"class":51375},[28,92038,51382],{"class":34},[28,92040,92041,92043],{"class":30,"line":1689},[28,92042,6480],{"class":51375},[28,92044,15649],{"class":34},[28,92046,92047,92049,92051,92053],{"class":30,"line":1694},[28,92048,54770],{"class":45},[28,92050,51512],{"class":34},[28,92052,407],{"class":45},[28,92054,1367],{"class":34},[28,92056,92057,92059,92061,92063],{"class":30,"line":1700},[28,92058,54781],{"class":45},[28,92060,51512],{"class":34},[28,92062,407],{"class":45},[28,92064,1367],{"class":34},[28,92066,92067,92069,92071,92073],{"class":30,"line":1705},[28,92068,72671],{"class":45},[28,92070,51512],{"class":34},[28,92072,60580],{"class":45},[28,92074,1367],{"class":34},[28,92076,92077],{"class":30,"line":1719},[28,92078,2264],{"class":34},[28,92080,92081],{"class":30,"line":1724},[28,92082,2477],{"emptyLinePlaceholder":144},[28,92084,92085,92088],{"class":30,"line":1730},[28,92086,92087],{"class":2040},"    .container",[28,92089,15649],{"class":34},[28,92091,92092,92094,92096,92099,92101],{"class":30,"line":1751},[28,92093,54846],{"class":45},[28,92095,51512],{"class":34},[28,92097,92098],{"class":45},"1200",[28,92100,51567],{"class":38},[28,92102,1367],{"class":34},[28,92104,92105,92107,92109,92111,92113],{"class":30,"line":1756},[28,92106,54781],{"class":45},[28,92108,51512],{"class":34},[28,92110,407],{"class":45},[28,92112,51631],{"class":45},[28,92114,1367],{"class":34},[28,92116,92117],{"class":30,"line":1770},[28,92118,2264],{"class":34},[28,92120,92121],{"class":30,"line":1775},[28,92122,2477],{"emptyLinePlaceholder":144},[28,92124,92125,92128,92131],{"class":30,"line":1804},[28,92126,92127],{"class":2040},"    .video",[28,92129,92130],{"class":51375}," video",[28,92132,15649],{"class":34},[28,92134,92135,92137,92139,92141,92143],{"class":30,"line":1809},[28,92136,54846],{"class":45},[28,92138,51512],{"class":34},[28,92140,525],{"class":45},[28,92142,542],{"class":38},[28,92144,1367],{"class":34},[28,92146,92147,92149,92151,92153,92155,92157],{"class":30,"line":1826},[28,92148,54770],{"class":45},[28,92150,51512],{"class":34},[28,92152,102],{"class":45},[28,92154,51567],{"class":38},[28,92156,4170],{"class":45},[28,92158,1367],{"class":34},[28,92160,92161],{"class":30,"line":1831},[28,92162,2264],{"class":34},[28,92164,92165],{"class":30,"line":1836},[28,92166,2477],{"emptyLinePlaceholder":144},[28,92168,92169,92172],{"class":30,"line":1841},[28,92170,92171],{"class":2040},"    .elevator",[28,92173,15649],{"class":34},[28,92175,92176,92178,92180,92182],{"class":30,"line":1855},[28,92177,54834],{"class":45},[28,92179,51512],{"class":34},[28,92181,86308],{"class":45},[28,92183,1367],{"class":34},[28,92185,92186,92188,92190,92193,92195],{"class":30,"line":1860},[28,92187,55022],{"class":45},[28,92189,51512],{"class":34},[28,92191,92192],{"class":45},"280",[28,92194,51567],{"class":38},[28,92196,1367],{"class":34},[28,92198,92199,92201,92203,92205,92207],{"class":30,"line":2654},[28,92200,86502],{"class":45},[28,92202,51512],{"class":34},[28,92204,102],{"class":45},[28,92206,51567],{"class":38},[28,92208,1367],{"class":34},[28,92210,92211,92213,92215,92217],{"class":30,"line":2668},[28,92212,86315],{"class":45},[28,92214,51512],{"class":34},[28,92216,86320],{"class":45},[28,92218,1367],{"class":34},[28,92220,92221,92223,92225,92227],{"class":30,"line":2676},[28,92222,61796],{"class":45},[28,92224,51512],{"class":34},[28,92226,60917],{"class":45},[28,92228,1367],{"class":34},[28,92230,92231,92233,92235,92237,92239,92241,92243],{"class":30,"line":2681},[28,92232,62052],{"class":45},[28,92234,51512],{"class":34},[28,92236,46],{"class":45},[28,92238,51567],{"class":38},[28,92240,51596],{"class":45},[28,92242,62319],{"class":45},[28,92244,1367],{"class":34},[28,92246,92247,92249,92251,92253,92255],{"class":30,"line":2687},[28,92248,54846],{"class":45},[28,92250,51512],{"class":34},[28,92252,1113],{"class":45},[28,92254,51567],{"class":38},[28,92256,1367],{"class":34},[28,92258,92259],{"class":30,"line":2693},[28,92260,2264],{"class":34},[28,92262,92263],{"class":30,"line":2698},[28,92264,2477],{"emptyLinePlaceholder":144},[28,92266,92267,92269,92271],{"class":30,"line":8025},[28,92268,92171],{"class":2040},[28,92270,1475],{"class":51375},[28,92272,15649],{"class":34},[28,92274,92275,92277,92279,92281],{"class":30,"line":8049},[28,92276,55084],{"class":45},[28,92278,51512],{"class":34},[28,92280,60944],{"class":45},[28,92282,1367],{"class":34},[28,92284,92285,92287,92289,92291,92293],{"class":30,"line":8054},[28,92286,54770],{"class":45},[28,92288,51512],{"class":34},[28,92290,659],{"class":45},[28,92292,51567],{"class":38},[28,92294,1367],{"class":34},[28,92296,92297,92299,92301,92303],{"class":30,"line":8060},[28,92298,64045],{"class":45},[28,92300,51512],{"class":34},[28,92302,54812],{"class":45},[28,92304,1367],{"class":34},[28,92306,92307,92309,92311,92313],{"class":30,"line":8087},[28,92308,57361],{"class":45},[28,92310,51512],{"class":34},[28,92312,51667],{"class":45},[28,92314,1367],{"class":34},[28,92316,92317,92319,92321,92323],{"class":30,"line":8092},[28,92318,57491],{"class":45},[28,92320,51512],{"class":34},[28,92322,62145],{"class":45},[28,92324,1367],{"class":34},[28,92326,92327],{"class":30,"line":8098},[28,92328,2264],{"class":34},[28,92330,92331],{"class":30,"line":8110},[28,92332,2477],{"emptyLinePlaceholder":144},[28,92334,92335,92337,92339,92341],{"class":30,"line":8122},[28,92336,92171],{"class":2040},[28,92338,1475],{"class":51375},[28,92340,64099],{"class":2040},[28,92342,15649],{"class":34},[28,92344,92345,92347,92349,92352],{"class":30,"line":8134},[28,92346,57491],{"class":45},[28,92348,51512],{"class":34},[28,92350,92351],{"class":45},"#1286ff",[28,92353,1367],{"class":34},[28,92355,92356],{"class":30,"line":9793},[28,92357,2264],{"class":34},[28,92359,92360,92362,92364],{"class":30,"line":9818},[28,92361,52492],{"class":34},[28,92363,136],{"class":51375},[28,92365,51382],{"class":34},[28,92367,92368,92370,92372],{"class":30,"line":9841},[28,92369,51860],{"class":34},[28,92371,51409],{"class":51375},[28,92373,51382],{"class":34},[28,92375,92376],{"class":30,"line":9865},[28,92377,2477],{"emptyLinePlaceholder":144},[28,92379,92380,92382,92384],{"class":30,"line":9870},[28,92381,99],{"class":34},[28,92383,51875],{"class":51375},[28,92385,51382],{"class":34},[28,92387,92388,92390,92392,92394,92396,92399],{"class":30,"line":9875},[28,92389,52219],{"class":34},[28,92391,51686],{"class":51375},[28,92393,53561],{"class":2040},[28,92395,39],{"class":34},[28,92397,92398],{"class":320},"\"container\"",[28,92400,51382],{"class":34},[28,92402,92403,92405,92407,92409,92411,92414],{"class":30,"line":9880},[28,92404,51416],{"class":34},[28,92406,51686],{"class":51375},[28,92408,53561],{"class":2040},[28,92410,39],{"class":34},[28,92412,92413],{"class":320},"\"header\"",[28,92415,51382],{"class":34},[28,92417,92418,92420,92422,92424,92426,92429],{"class":30,"line":9889},[28,92419,55309],{"class":34},[28,92421,35],{"class":51375},[28,92423,61132],{"class":2040},[28,92425,39],{"class":34},[28,92427,92428],{"class":320},"\"http:\u002F\u002Fpip.itcast.cn\"",[28,92430,51382],{"class":34},[28,92432,92433,92435,92437,92439,92441,92444,92446,92448,92450],{"class":30,"line":9894},[28,92434,55377],{"class":34},[28,92436,1539],{"class":51375},[28,92438,55314],{"class":2040},[28,92440,39],{"class":34},[28,92442,92443],{"class":320},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[28,92445,55322],{"class":2040},[28,92447,39],{"class":34},[28,92449,7729],{"class":320},[28,92451,59202],{"class":34},[28,92453,92454,92456,92458],{"class":30,"line":9900},[28,92455,55482],{"class":34},[28,92457,35],{"class":51375},[28,92459,51382],{"class":34},[28,92461,92462,92464,92466],{"class":30,"line":9921},[28,92463,51851],{"class":34},[28,92465,51686],{"class":51375},[28,92467,51382],{"class":34},[28,92469,92470,92472,92474,92476,92478,92481],{"class":30,"line":9927},[28,92471,51416],{"class":34},[28,92473,51686],{"class":51375},[28,92475,53561],{"class":2040},[28,92477,39],{"class":34},[28,92479,92480],{"class":320},"\"video\"",[28,92482,51382],{"class":34},[28,92484,92485,92487,92489,92491,92493,92496,92499,92501,92503],{"class":30,"line":9941},[28,92486,55309],{"class":34},[28,92488,28261],{"class":51375},[28,92490,55314],{"class":2040},[28,92492,39],{"class":34},[28,92494,92495],{"class":320},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[28,92497,92498],{"class":2040}," controls",[28,92500,55389],{"class":34},[28,92502,28261],{"class":51375},[28,92504,51382],{"class":34},[28,92506,92507,92509,92511],{"class":30,"line":9947},[28,92508,51851],{"class":34},[28,92510,51686],{"class":51375},[28,92512,51382],{"class":34},[28,92514,92515,92517,92519,92521,92523,92526],{"class":30,"line":9974},[28,92516,51416],{"class":34},[28,92518,51686],{"class":51375},[28,92520,53561],{"class":2040},[28,92522,39],{"class":34},[28,92524,92525],{"class":320},"\"elevator\"",[28,92527,51382],{"class":34},[28,92529,92530,92532,92534,92536,92538,92540,92543,92545,92547,92550,92552],{"class":30,"line":9983},[28,92531,55309],{"class":34},[28,92533,35],{"class":51375},[28,92535,61132],{"class":2040},[28,92537,39],{"class":34},[28,92539,64311],{"class":320},[28,92541,92542],{"class":2040}," data-ref",[28,92544,39],{"class":34},[28,92546,92480],{"class":320},[28,92548,92549],{"class":34},">视频介绍\u003C\u002F",[28,92551,35],{"class":51375},[28,92553,51382],{"class":34},[28,92555,92556,92558,92560,92562,92564,92566,92568,92570,92573,92576,92578],{"class":30,"line":9989},[28,92557,55309],{"class":34},[28,92559,35],{"class":51375},[28,92561,61132],{"class":2040},[28,92563,39],{"class":34},[28,92565,64311],{"class":320},[28,92567,92542],{"class":2040},[28,92569,39],{"class":34},[28,92571,92572],{"class":320},"\"intro\"",[28,92574,92575],{"class":34},">课程简介\u003C\u002F",[28,92577,35],{"class":51375},[28,92579,51382],{"class":34},[28,92581,92582,92584,92586,92588,92590,92592,92594,92596,92599,92602,92604],{"class":30,"line":9997},[28,92583,55309],{"class":34},[28,92585,35],{"class":51375},[28,92587,61132],{"class":2040},[28,92589,39],{"class":34},[28,92591,64311],{"class":320},[28,92593,92542],{"class":2040},[28,92595,39],{"class":34},[28,92597,92598],{"class":320},"\"outline\"",[28,92600,92601],{"class":34},">评论列表\u003C\u002F",[28,92603,35],{"class":51375},[28,92605,51382],{"class":34},[28,92607,92608,92610,92612],{"class":30,"line":10002},[28,92609,51851],{"class":34},[28,92611,51686],{"class":51375},[28,92613,51382],{"class":34},[28,92615,92616,92618,92620],{"class":30,"line":16681},[28,92617,52492],{"class":34},[28,92619,51686],{"class":51375},[28,92621,51382],{"class":34},[28,92623,92624,92626,92628,92630,92632,92635,92637,92639],{"class":30,"line":16687},[28,92625,52219],{"class":34},[28,92627,51888],{"class":51375},[28,92629,55314],{"class":2040},[28,92631,39],{"class":34},[28,92633,92634],{"class":320},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[28,92636,55389],{"class":34},[28,92638,51888],{"class":51375},[28,92640,51382],{"class":34},[28,92642,92643,92645,92647],{"class":30,"line":16710},[28,92644,52219],{"class":34},[28,92646,51888],{"class":51375},[28,92648,51382],{"class":34},[28,92650,92651],{"class":30,"line":16716},[28,92652,92653],{"class":105},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[28,92655,92656,92658,92660,92662,92664,92666,92668,92671],{"class":30,"line":16739},[28,92657,11298],{"class":38},[28,92659,92130],{"class":45},[28,92661,13641],{"class":38},[28,92663,54471],{"class":34},[28,92665,54474],{"class":2040},[28,92667,221],{"class":34},[28,92669,92670],{"class":320},"'video'",[28,92672,227],{"class":34},[28,92674,92675],{"class":30,"line":16753},[28,92676,92677],{"class":105},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[28,92679,92680,92683,92685,92687,92689,92692,92694],{"class":30,"line":16773},[28,92681,92682],{"class":34},"    video.ontimeupdate ",[28,92684,39],{"class":38},[28,92686,88430],{"class":34},[28,92688,91248],{"class":2040},[28,92690,92691],{"class":34},"(() ",[28,92693,84797],{"class":38},[28,92695,15649],{"class":34},[28,92697,92698],{"class":30,"line":16779},[28,92699,92700],{"class":105},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[28,92702,92703],{"class":30,"line":16790},[28,92704,92705],{"class":105},"      \u002F\u002F 控制台输出当前的时间\n",[28,92707,92708,92711],{"class":30,"line":16813},[28,92709,92710],{"class":105},"      \u002F\u002F console.log(video.currentTime)",[28,92712,92713],{"class":105},"  \u002F\u002F获得当前的视频时间\n",[28,92715,92716],{"class":30,"line":16835},[28,92717,92718],{"class":105},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[28,92720,92721,92723,92725,92727,92730],{"class":30,"line":16840},[28,92722,74758],{"class":34},[28,92724,71729],{"class":2040},[28,92726,221],{"class":34},[28,92728,92729],{"class":320},"'currentTime'",[28,92731,92732],{"class":34},", video.currentTime)\n",[28,92734,92735,92737,92739],{"class":30,"line":16846},[28,92736,54610],{"class":34},[28,92738,6487],{"class":45},[28,92740,227],{"class":34},[28,92742,92743],{"class":30,"line":16860},[28,92744,92745],{"class":105},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[28,92747,92748,92751,92754,92756,92759,92761],{"class":30,"line":16873},[28,92749,92750],{"class":34},"    video.",[28,92752,92753],{"class":2040},"onloadeddata",[28,92755,13641],{"class":38},[28,92757,92758],{"class":34}," () ",[28,92760,84797],{"class":38},[28,92762,15649],{"class":34},[28,92764,92765],{"class":30,"line":16878},[28,92766,60087],{"class":105},[28,92768,92769],{"class":30,"line":16892},[28,92770,92771],{"class":105},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[28,92773,92774,92777,92779,92782,92784,92786,92788,92790,92792],{"class":30,"line":16897},[28,92775,92776],{"class":34},"      video.currentTime ",[28,92778,39],{"class":38},[28,92780,92781],{"class":34}," localStorage.",[28,92783,71760],{"class":2040},[28,92785,221],{"class":34},[28,92787,92729],{"class":320},[28,92789,13791],{"class":34},[28,92791,71432],{"class":38},[28,92793,47409],{"class":45},[28,92795,92796],{"class":30,"line":16903},[28,92797,2264],{"class":34},[28,92799,92800,92802,92804],{"class":30,"line":16908},[28,92801,52492],{"class":34},[28,92803,51888],{"class":51375},[28,92805,51382],{"class":34},[28,92807,92808,92810,92812],{"class":30,"line":16922},[28,92809,51860],{"class":34},[28,92811,51875],{"class":51375},[28,92813,51382],{"class":34},[28,92815,92816],{"class":30,"line":16927},[28,92817,2477],{"emptyLinePlaceholder":144},[28,92819,92820,92822,92824],{"class":30,"line":16932},[28,92821,51860],{"class":34},[28,92823,50710],{"class":51375},[28,92825,51382],{"class":34},[136,92827,92828],{},"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":23,"searchDepth":94,"depth":94,"links":92830},[92831,92836,92840,92841,92842,92847,92852,92853,92854,92855,92862,92867,92868,92878,92882,92883,92887],{"id":76766,"depth":94,"text":76767,"children":92832},[92833,92834,92835],{"id":76770,"depth":109,"text":76771},{"id":76795,"depth":109,"text":76796},{"id":76807,"depth":109,"text":76808},{"id":76819,"depth":94,"text":76820,"children":92837},[92838,92839],{"id":76823,"depth":109,"text":76824},{"id":76838,"depth":109,"text":76839},{"id":76890,"depth":94,"text":76891},{"id":76934,"depth":94,"text":76935},{"id":76951,"depth":94,"text":76952,"children":92843},[92844,92845,92846],{"id":76955,"depth":109,"text":76956},{"id":76968,"depth":109,"text":76969},{"id":77073,"depth":109,"text":77074},{"id":77362,"depth":94,"text":77363,"children":92848},[92849,92850,92851],{"id":77366,"depth":109,"text":77367},{"id":77809,"depth":109,"text":77810},{"id":78220,"depth":109,"text":78221},{"id":78283,"depth":94,"text":78284},{"id":78362,"depth":94,"text":78363},{"id":78455,"depth":94,"text":78456},{"id":80300,"depth":94,"text":80301,"children":92856},[92857,92858,92859,92860,92861],{"id":80304,"depth":109,"text":80305},{"id":80316,"depth":109,"text":80317},{"id":80535,"depth":109,"text":80536},{"id":80553,"depth":109,"text":80554},{"id":80613,"depth":109,"text":80614},{"id":84881,"depth":94,"text":84882,"children":92863},[92864,92865,92866],{"id":84885,"depth":109,"text":84886},{"id":84903,"depth":109,"text":84904},{"id":84929,"depth":109,"text":84930},{"id":84938,"depth":94,"text":84939},{"id":84960,"depth":94,"text":84961,"children":92869},[92870,92871,92872,92873,92874,92875,92876,92877],{"id":84964,"depth":109,"text":84965},{"id":85225,"depth":109,"text":85226},{"id":85411,"depth":109,"text":85412},{"id":85778,"depth":109,"text":85779},{"id":85894,"depth":109,"text":85895},{"id":85930,"depth":109,"text":85931},{"id":85977,"depth":109,"text":85978},{"id":86011,"depth":109,"text":86012},{"id":87374,"depth":94,"text":87375,"children":92879},[92880,92881],{"id":87378,"depth":109,"text":87379},{"id":87415,"depth":109,"text":87416},{"id":88770,"depth":94,"text":88771},{"id":89141,"depth":94,"text":89142,"children":92884},[92885,92886],{"id":89145,"depth":109,"text":89146},{"id":89179,"depth":109,"text":89180},{"id":89908,"depth":94,"text":89909,"children":92888},[92889,92890,92891,92892],{"id":89912,"depth":109,"text":89913},{"id":90870,"depth":109,"text":90871},{"id":91812,"depth":109,"text":91813},{"id":91886,"depth":109,"text":91887},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76755,"description":141},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92899,"title":92900,"body":92901,"description":92912,"extension":142,"meta":92913,"navigation":144,"path":92915,"seo":92916,"stem":92917,"__hash__":92918},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92902,"toc":92910},[92903],[14,92904,92905,92906],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[35,92907,92908],{"href":92908,"rel":92909},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23942],{"title":23,"searchDepth":94,"depth":94,"links":92911},[],"三件套第三套学习",{"category":92914},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92900,"description":92912},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92920,"title":92921,"body":92922,"description":141,"extension":142,"meta":93027,"navigation":144,"path":93028,"seo":93029,"stem":93030,"__hash__":93031},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92923,"toc":93022},[92924,92931,92934,92937,92940,92944,92953,92956,92959,92963,92972,92975,92979,92982,93002,93005,93019],[14,92925,92926],{},[35,92927,92930],{"href":92928,"rel":92929},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23942],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92932,92921],{"id":92933},"_1安装",[14,92935,92936],{},"numpy是科学计算基础库,底层是C语言",[14,92938,92939],{},"三种方式：",[159,92941,92943],{"id":92942},"_11-通过pip安装","1.1 通过pip安装",[18,92945,92947],{"className":20,"code":92946,"language":22,"meta":23,"style":23},"pip install numpy\n",[25,92948,92949],{"__ignoreMap":23},[28,92950,92951],{"class":30,"line":31},[28,92952,92946],{"class":34},[14,92954,92955],{},"首选方式，自动处理依赖项",[14,92957,92958],{},"在提示系统命令符中使用cmd",[159,92960,92962],{"id":92961},"_12-通过anaconda安装","1.2 通过Anaconda安装",[18,92964,92966],{"className":20,"code":92965,"language":22,"meta":23,"style":23},"conda install numpy\n",[25,92967,92968],{"__ignoreMap":23},[28,92969,92970],{"class":30,"line":31},[28,92971,92965],{"class":34},[14,92973,92974],{},"自动解决环境依赖",[159,92976,92978],{"id":92977},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92980,92981],{},"对于Debian\u002FUbuntu",[18,92983,92985],{"className":20,"code":92984,"language":22,"meta":23,"style":23},"sudo apt-get install python3-numpy\n",[25,92986,92987],{"__ignoreMap":23},[28,92988,92989,92992,92994,92997,92999],{"class":30,"line":31},[28,92990,92991],{"class":34},"sudo apt",[28,92993,742],{"class":38},[28,92995,92996],{"class":34},"get install python3",[28,92998,742],{"class":38},[28,93000,93001],{"class":34},"numpy\n",[14,93003,93004],{},"对于Fedora:",[18,93006,93008],{"className":20,"code":93007,"language":22,"meta":23,"style":23},"sudo dnf install python3-numpy\n",[25,93009,93010],{"__ignoreMap":23},[28,93011,93012,93015,93017],{"class":30,"line":31},[28,93013,93014],{"class":34},"sudo dnf install python3",[28,93016,742],{"class":38},[28,93018,93001],{"class":34},[136,93020,93021],{},"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":23,"searchDepth":94,"depth":94,"links":93023},[93024,93025,93026],{"id":92942,"depth":94,"text":92943},{"id":92961,"depth":94,"text":92962},{"id":92977,"depth":94,"text":92978},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92921,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93033,"title":93034,"body":93035,"description":141,"extension":142,"meta":93148,"navigation":144,"path":93149,"seo":93150,"stem":93151,"__hash__":93152},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93036,"toc":93146},[93037,93040,93043,93046,93049,93052,93055,93058,93061,93064,93140,93143],[10,93038,93034],{"id":93039},"_10算数函数",[14,93041,93042],{},"加减乘除运算跟python基础语法没区别",[14,93044,93045],{},"除了python那种方法外还可以使用函数",[14,93047,93048],{},"加：np.add(a,b)",[14,93050,93051],{},"减：np.subtract(a,b)",[14,93053,93054],{},"乘：np.multiply(a,b)",[14,93056,93057],{},"除：np.divide(a,b) == a\u002Fb",[14,93059,93060],{},"取余：np.mod(a,b) == a%b",[14,93062,93063],{},"必须会的用法：",[18,93065,93067],{"className":20,"code":93066,"language":22,"meta":23,"style":23},"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",[25,93068,93069,93091,93112,93122,93135],{"__ignoreMap":23},[28,93070,93071,93073,93075,93078,93080,93083,93085,93087,93089],{"class":30,"line":31},[28,93072,35],{"class":34},[28,93074,39],{"class":38},[28,93076,93077],{"class":34},"np.arange(",[28,93079,633],{"class":45},[28,93081,93082],{"class":34},").reshape(",[28,93084,57],{"class":45},[28,93086,49],{"class":34},[28,93088,57],{"class":45},[28,93090,227],{"class":34},[28,93092,93093,93095,93097,93100,93102,93104,93106,93108,93110],{"class":30,"line":94},[28,93094,477],{"class":34},[28,93096,39],{"class":38},[28,93098,93099],{"class":34},"np.array([",[28,93101,659],{"class":45},[28,93103,49],{"class":34},[28,93105,659],{"class":45},[28,93107,49],{"class":34},[28,93109,659],{"class":45},[28,93111,4734],{"class":34},[28,93113,93114,93117,93119],{"class":30,"line":109},[28,93115,93116],{"class":34},"result",[28,93118,39],{"class":38},[28,93120,93121],{"class":34},"np.empty_like(a)\n",[28,93123,93124,93127,93130,93132],{"class":30,"line":125},[28,93125,93126],{"class":34},"np.add(a,b,",[28,93128,93129],{"class":5293},"out",[28,93131,39],{"class":38},[28,93133,93134],{"class":34},"result)\n",[28,93136,93137],{"class":30,"line":131},[28,93138,93139],{"class":34},"result\n",[14,93141,93142],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[136,93144,93145],{},"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":23,"searchDepth":94,"depth":94,"links":93147},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93034,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93154,"title":93155,"body":93156,"description":141,"extension":142,"meta":93917,"navigation":144,"path":93918,"seo":93919,"stem":93920,"__hash__":93921},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93157,"toc":93904},[93158,93161,93164,93167,93171,93210,93214,93258,93318,93322,93325,93364,93367,93412,93416,93452,93456,93525,93529,93593,93597,93600,93603,93606,93609,93644,93648,93688,93692,93764,93767,93771,93834,93838,93901],[10,93159,93155],{"id":93160},"_11统计函数",[14,93162,93163],{},"sum max min mean",[14,93165,93166],{},"这些有axis参数，可以指定方向",[159,93168,93170],{"id":93169},"_111-sum求和函数","11.1 sum()求和函数",[18,93172,93174],{"className":20,"code":93173,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[25,93175,93176,93181,93202],{"__ignoreMap":23},[28,93177,93178],{"class":30,"line":31},[28,93179,93180],{"class":105},"#创建一维数组\n",[28,93182,93183,93185,93187,93190,93192,93194,93196,93198,93200],{"class":30,"line":94},[28,93184,35],{"class":34},[28,93186,39],{"class":38},[28,93188,93189],{"class":34},"np.random.randint(",[28,93191,46],{"class":45},[28,93193,49],{"class":34},[28,93195,525],{"class":45},[28,93197,49],{"class":34},[28,93199,102],{"class":45},[28,93201,227],{"class":34},[28,93203,93204,93207],{"class":30,"line":109},[28,93205,93206],{"class":34},"np.sum(a)",[28,93208,93209],{"class":105},"#求和\n",[159,93211,93213],{"id":93212},"_112-max求最大值函数","11.2 max()求最大值函数",[18,93215,93217],{"className":20,"code":93216,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[25,93218,93219,93223,93243,93248,93253],{"__ignoreMap":23},[28,93220,93221],{"class":30,"line":31},[28,93222,93180],{"class":105},[28,93224,93225,93227,93229,93231,93233,93235,93237,93239,93241],{"class":30,"line":94},[28,93226,35],{"class":34},[28,93228,39],{"class":38},[28,93230,93189],{"class":34},[28,93232,46],{"class":45},[28,93234,49],{"class":34},[28,93236,525],{"class":45},[28,93238,49],{"class":34},[28,93240,102],{"class":45},[28,93242,227],{"class":34},[28,93244,93245],{"class":30,"line":109},[28,93246,93247],{"class":34},"np.max(a)\n",[28,93249,93250],{"class":30,"line":125},[28,93251,93252],{"class":105},"#最大索引(求最大元素的索引)arg\n",[28,93254,93255],{"class":30,"line":131},[28,93256,93257],{"class":34},"np.argmax(a)\n",[18,93259,93261],{"className":20,"code":93260,"language":22,"meta":23,"style":23},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[25,93262,93263,93284,93304,93308],{"__ignoreMap":23},[28,93264,93265,93267,93269,93272,93274,93276,93278,93280,93282],{"class":30,"line":31},[28,93266,10996],{"class":34},[28,93268,39],{"class":38},[28,93270,93271],{"class":34}," np.array([",[28,93273,46],{"class":45},[28,93275,12512],{"class":34},[28,93277,533],{"class":45},[28,93279,12512],{"class":34},[28,93281,57],{"class":45},[28,93283,4734],{"class":34},[28,93285,93286,93288,93290,93292,93294,93296,93298,93300,93302],{"class":30,"line":94},[28,93287,11022],{"class":34},[28,93289,39],{"class":38},[28,93291,93271],{"class":34},[28,93293,57],{"class":45},[28,93295,12512],{"class":34},[28,93297,52],{"class":45},[28,93299,12512],{"class":34},[28,93301,507],{"class":45},[28,93303,4734],{"class":34},[28,93305,93306],{"class":30,"line":109},[28,93307,2477],{"emptyLinePlaceholder":144},[28,93309,93310,93312,93315],{"class":30,"line":125},[28,93311,30491],{"class":45},[28,93313,93314],{"class":34},"(np.maximum(a, b))   ",[28,93316,93317],{"class":105},"# [3 5 4]，每个位置上取较大值\n",[159,93319,93321],{"id":93320},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93323,93324],{},"①一维数组：",[18,93326,93328],{"className":20,"code":93327,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[25,93329,93330,93334,93354,93359],{"__ignoreMap":23},[28,93331,93332],{"class":30,"line":31},[28,93333,93180],{"class":105},[28,93335,93336,93338,93340,93342,93344,93346,93348,93350,93352],{"class":30,"line":94},[28,93337,35],{"class":34},[28,93339,39],{"class":38},[28,93341,93189],{"class":34},[28,93343,46],{"class":45},[28,93345,49],{"class":34},[28,93347,525],{"class":45},[28,93349,49],{"class":34},[28,93351,102],{"class":45},[28,93353,227],{"class":34},[28,93355,93356],{"class":30,"line":109},[28,93357,93358],{"class":105},"#求平均值\n",[28,93360,93361],{"class":30,"line":125},[28,93362,93363],{"class":34},"np.mean(a)\n",[14,93365,93366],{},"②二维数组",[18,93368,93370],{"className":20,"code":93369,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[25,93371,93372,93377,93402,93407],{"__ignoreMap":23},[28,93373,93374],{"class":30,"line":31},[28,93375,93376],{"class":105},"#二维数组\n",[28,93378,93379,93382,93384,93386,93388,93390,93392,93394,93396,93398,93400],{"class":30,"line":94},[28,93380,93381],{"class":34},"aa",[28,93383,39],{"class":38},[28,93385,93077],{"class":34},[28,93387,46],{"class":45},[28,93389,49],{"class":34},[28,93391,73],{"class":45},[28,93393,93082],{"class":34},[28,93395,57],{"class":45},[28,93397,49],{"class":34},[28,93399,507],{"class":45},[28,93401,227],{"class":34},[28,93403,93404],{"class":30,"line":109},[28,93405,93406],{"class":105},"#对数组中的所有数求平均\n",[28,93408,93409],{"class":30,"line":125},[28,93410,93411],{"class":34},"np.mean(aa)\n",[159,93413,93415],{"id":93414},"_114-median求中位数函数","11.4 median()求中位数函数",[18,93417,93419],{"className":20,"code":93418,"language":22,"meta":23,"style":23},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[25,93420,93421,93426,93442,93447],{"__ignoreMap":23},[28,93422,93423],{"class":30,"line":31},[28,93424,93425],{"class":105},"#求中位数\n",[28,93427,93428,93430,93432,93434,93436,93438,93440],{"class":30,"line":94},[28,93429,477],{"class":34},[28,93431,39],{"class":38},[28,93433,93077],{"class":34},[28,93435,46],{"class":45},[28,93437,49],{"class":34},[28,93439,659],{"class":45},[28,93441,227],{"class":34},[28,93443,93444],{"class":30,"line":109},[28,93445,93446],{"class":34},"np.median(b)\n",[28,93448,93449],{"class":30,"line":125},[28,93450,93451],{"class":105},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[159,93453,93455],{"id":93454},"_115-power求幂运算函数","11.5 power()求幂运算函数",[18,93457,93459],{"className":20,"code":93458,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[25,93460,93461,93477,93482,93487,93496,93501,93510],{"__ignoreMap":23},[28,93462,93463,93465,93467,93469,93471,93473,93475],{"class":30,"line":31},[28,93464,477],{"class":34},[28,93466,39],{"class":38},[28,93468,93077],{"class":34},[28,93470,46],{"class":45},[28,93472,49],{"class":34},[28,93474,659],{"class":45},[28,93476,227],{"class":34},[28,93478,93479],{"class":30,"line":94},[28,93480,93481],{"class":105},"#幂运算\n",[28,93483,93484],{"class":30,"line":109},[28,93485,93486],{"class":105},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[28,93488,93489,93492,93494],{"class":30,"line":125},[28,93490,93491],{"class":34},"np.power(b,",[28,93493,52],{"class":45},[28,93495,227],{"class":34},[28,93497,93498],{"class":30,"line":131},[28,93499,93500],{"class":105},"#或者以下代码，将数据存储起来\n",[28,93502,93503,93505,93507],{"class":30,"line":1291},[28,93504,1051],{"class":34},[28,93506,39],{"class":38},[28,93508,93509],{"class":34},"np.empty_like(b)\n",[28,93511,93512,93514,93516,93518,93520,93522],{"class":30,"line":1297},[28,93513,93491],{"class":34},[28,93515,52],{"class":45},[28,93517,49],{"class":34},[28,93519,93129],{"class":5293},[28,93521,39],{"class":38},[28,93523,93524],{"class":34},"y)\n",[159,93526,93528],{"id":93527},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[18,93530,93532],{"className":20,"code":93531,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[25,93533,93534,93550,93555,93560,93564,93582],{"__ignoreMap":23},[28,93535,93536,93538,93540,93542,93544,93546,93548],{"class":30,"line":31},[28,93537,477],{"class":34},[28,93539,39],{"class":38},[28,93541,93077],{"class":34},[28,93543,46],{"class":45},[28,93545,49],{"class":34},[28,93547,659],{"class":45},[28,93549,227],{"class":34},[28,93551,93552],{"class":30,"line":94},[28,93553,93554],{"class":105},"#开方\n",[28,93556,93557],{"class":30,"line":109},[28,93558,93559],{"class":34},"np.sqrt(b)\n",[28,93561,93562],{"class":30,"line":125},[28,93563,93500],{"class":105},[28,93565,93566,93568,93570,93573,93576,93578,93580],{"class":30,"line":131},[28,93567,1051],{"class":34},[28,93569,39],{"class":38},[28,93571,93572],{"class":34},"np.empty_like(b,",[28,93574,93575],{"class":5293},"dtype",[28,93577,39],{"class":38},[28,93579,260],{"class":45},[28,93581,227],{"class":34},[28,93583,93584,93587,93589,93591],{"class":30,"line":1291},[28,93585,93586],{"class":34},"np.sqrt(b,",[28,93588,93129],{"class":5293},[28,93590,39],{"class":38},[28,93592,93524],{"class":34},[159,93594,93596],{"id":93595},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93598,93599],{},"对数组中的元素累计求和，可指定轴",[14,93601,93602],{},"#累计求和的意思是：",[14,93604,93605],{},"a = np.array([1, 2, 3, 4])",[14,93607,93608],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[18,93610,93612],{"className":20,"code":93611,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[25,93613,93614,93630,93635,93639],{"__ignoreMap":23},[28,93615,93616,93618,93620,93622,93624,93626,93628],{"class":30,"line":31},[28,93617,477],{"class":34},[28,93619,39],{"class":38},[28,93621,93077],{"class":34},[28,93623,46],{"class":45},[28,93625,49],{"class":34},[28,93627,659],{"class":45},[28,93629,227],{"class":34},[28,93631,93632],{"class":30,"line":94},[28,93633,93634],{"class":34},"np.cumsum(b)\n",[28,93636,93637],{"class":30,"line":109},[28,93638,128],{"class":105},[28,93640,93641],{"class":30,"line":125},[28,93642,93643],{"class":105},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[159,93645,93647],{"id":93646},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[18,93649,93651],{"className":20,"code":93650,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[25,93652,93653,93669,93674,93679,93683],{"__ignoreMap":23},[28,93654,93655,93657,93659,93661,93663,93665,93667],{"class":30,"line":31},[28,93656,477],{"class":34},[28,93658,39],{"class":38},[28,93660,93077],{"class":34},[28,93662,46],{"class":45},[28,93664,49],{"class":34},[28,93666,659],{"class":45},[28,93668,227],{"class":34},[28,93670,93671],{"class":30,"line":94},[28,93672,93673],{"class":105},"#对数组中的元素累计求积，可指定轴\n",[28,93675,93676],{"class":30,"line":109},[28,93677,93678],{"class":34},"np.cumprod(b)\n",[28,93680,93681],{"class":30,"line":125},[28,93682,128],{"class":105},[28,93684,93685],{"class":30,"line":131},[28,93686,93687],{"class":105},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[159,93689,93691],{"id":93690},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[18,93693,93695],{"className":20,"code":93694,"language":22,"meta":23,"style":23},"#删除数组中的重复数据，并对数据进行排序\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",[25,93696,93697,93702,93750,93755,93759],{"__ignoreMap":23},[28,93698,93699],{"class":30,"line":31},[28,93700,93701],{"class":105},"#删除数组中的重复数据，并对数据进行排序\n",[28,93703,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742,93744,93746,93748],{"class":30,"line":94},[28,93705,35],{"class":34},[28,93707,39],{"class":38},[28,93709,93099],{"class":34},[28,93711,46],{"class":45},[28,93713,49],{"class":34},[28,93715,52],{"class":45},[28,93717,49],{"class":34},[28,93719,57],{"class":45},[28,93721,49],{"class":34},[28,93723,68],{"class":45},[28,93725,49],{"class":34},[28,93727,57],{"class":45},[28,93729,49],{"class":34},[28,93731,659],{"class":45},[28,93733,49],{"class":34},[28,93735,413],{"class":45},[28,93737,49],{"class":34},[28,93739,407],{"class":45},[28,93741,49],{"class":34},[28,93743,88],{"class":45},[28,93745,49],{"class":34},[28,93747,507],{"class":45},[28,93749,4734],{"class":34},[28,93751,93752],{"class":30,"line":109},[28,93753,93754],{"class":34},"np.unique(a)\n",[28,93756,93757],{"class":30,"line":125},[28,93758,128],{"class":105},[28,93760,93761],{"class":30,"line":131},[28,93762,93763],{"class":105},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93765,93766],{},"升序形式排序",[159,93768,93770],{"id":93769},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[18,93772,93774],{"className":20,"code":93773,"language":22,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[25,93775,93776,93824,93829],{"__ignoreMap":23},[28,93777,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822],{"class":30,"line":31},[28,93779,35],{"class":34},[28,93781,39],{"class":38},[28,93783,93099],{"class":34},[28,93785,46],{"class":45},[28,93787,49],{"class":34},[28,93789,52],{"class":45},[28,93791,49],{"class":34},[28,93793,57],{"class":45},[28,93795,49],{"class":34},[28,93797,68],{"class":45},[28,93799,49],{"class":34},[28,93801,57],{"class":45},[28,93803,49],{"class":34},[28,93805,659],{"class":45},[28,93807,49],{"class":34},[28,93809,413],{"class":45},[28,93811,49],{"class":34},[28,93813,407],{"class":45},[28,93815,49],{"class":34},[28,93817,88],{"class":45},[28,93819,49],{"class":34},[28,93821,507],{"class":45},[28,93823,4734],{"class":34},[28,93825,93826],{"class":30,"line":94},[28,93827,93828],{"class":105},"#返回数组中非零元素的索引\n",[28,93830,93831],{"class":30,"line":109},[28,93832,93833],{"class":34},"np.nonzero(a)\n",[159,93835,93837],{"id":93836},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[18,93839,93841],{"className":20,"code":93840,"language":22,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[25,93842,93843,93891,93896],{"__ignoreMap":23},[28,93844,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883,93885,93887,93889],{"class":30,"line":31},[28,93846,35],{"class":34},[28,93848,39],{"class":38},[28,93850,93099],{"class":34},[28,93852,46],{"class":45},[28,93854,49],{"class":34},[28,93856,52],{"class":45},[28,93858,49],{"class":34},[28,93860,57],{"class":45},[28,93862,49],{"class":34},[28,93864,68],{"class":45},[28,93866,49],{"class":34},[28,93868,57],{"class":45},[28,93870,49],{"class":34},[28,93872,659],{"class":45},[28,93874,49],{"class":34},[28,93876,413],{"class":45},[28,93878,49],{"class":34},[28,93880,407],{"class":45},[28,93882,49],{"class":34},[28,93884,88],{"class":45},[28,93886,49],{"class":34},[28,93888,507],{"class":45},[28,93890,4734],{"class":34},[28,93892,93893],{"class":30,"line":94},[28,93894,93895],{"class":105},"#计算一组数中最大值与最小值的差，可指定轴\n",[28,93897,93898],{"class":30,"line":109},[28,93899,93900],{"class":34},"np.ptp(a)\n",[136,93902,93903],{},"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":23,"searchDepth":94,"depth":94,"links":93905},[93906,93907,93908,93909,93910,93911,93912,93913,93914,93915,93916],{"id":93169,"depth":94,"text":93170},{"id":93212,"depth":94,"text":93213},{"id":93320,"depth":94,"text":93321},{"id":93414,"depth":94,"text":93415},{"id":93454,"depth":94,"text":93455},{"id":93527,"depth":94,"text":93528},{"id":93595,"depth":94,"text":93596},{"id":93646,"depth":94,"text":93647},{"id":93690,"depth":94,"text":93691},{"id":93769,"depth":94,"text":93770},{"id":93836,"depth":94,"text":93837},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93155,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93923,"title":93924,"body":93925,"description":141,"extension":142,"meta":94580,"navigation":144,"path":94581,"seo":94582,"stem":94583,"__hash__":94584},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93926,"toc":94568},[93927,93930,93934,93937,94153,94157,94160,94369,94373,94439,94444,94448,94451,94454,94492,94496,94499,94504,94508,94511,94514,94519,94523,94526,94530,94533,94536,94541,94545,94548,94551,94556,94560,94565],[10,93928,93924],{"id":93929},"_12其他常用函数",[159,93931,93933],{"id":93932},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93935,93936],{},"将数组的数据按照行列复制扩展",[18,93938,93940],{"className":20,"code":93939,"language":22,"meta":23,"style":23},"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",[25,93941,93942,93958,93967,93971,93976,93981,93994,93998,94003,94008,94013,94017,94022,94046,94058,94062,94066,94071,94076,94081,94086,94090,94103,94107,94111,94116,94121,94126,94131,94136,94140,94144,94149],{"__ignoreMap":23},[28,93943,93944,93946,93948,93950,93952,93954,93956],{"class":30,"line":31},[28,93945,35],{"class":34},[28,93947,39],{"class":38},[28,93949,93077],{"class":34},[28,93951,46],{"class":45},[28,93953,49],{"class":34},[28,93955,533],{"class":45},[28,93957,227],{"class":34},[28,93959,93960,93963,93965],{"class":30,"line":94},[28,93961,93962],{"class":34},"np.tile(a,",[28,93964,52],{"class":45},[28,93966,227],{"class":34},[28,93968,93969],{"class":30,"line":109},[28,93970,128],{"class":105},[28,93972,93973],{"class":30,"line":125},[28,93974,93975],{"class":105},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[28,93977,93978],{"class":30,"line":131},[28,93979,93980],{"class":105},"#行复制两次，列复制三次\n",[28,93982,93983,93986,93988,93990,93992],{"class":30,"line":1291},[28,93984,93985],{"class":34},"np.tile(a,(",[28,93987,52],{"class":45},[28,93989,49],{"class":34},[28,93991,57],{"class":45},[28,93993,30573],{"class":34},[28,93995,93996],{"class":30,"line":1297},[28,93997,128],{"class":105},[28,93999,94000],{"class":30,"line":1388},[28,94001,94002],{"class":320},"'''\n",[28,94004,94005],{"class":30,"line":1394},[28,94006,94007],{"class":320},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[28,94009,94010],{"class":30,"line":1406},[28,94011,94012],{"class":320},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[28,94014,94015],{"class":30,"line":1689},[28,94016,94002],{"class":320},[28,94018,94019],{"class":30,"line":1694},[28,94020,94021],{"class":105},"#创建二维数组\n",[28,94023,94024,94026,94028,94030,94032,94034,94036,94038,94040,94042,94044],{"class":30,"line":1700},[28,94025,93381],{"class":34},[28,94027,39],{"class":38},[28,94029,93077],{"class":34},[28,94031,46],{"class":45},[28,94033,49],{"class":34},[28,94035,73],{"class":45},[28,94037,93082],{"class":34},[28,94039,507],{"class":45},[28,94041,49],{"class":34},[28,94043,57],{"class":45},[28,94045,227],{"class":34},[28,94047,94048,94051,94053,94055],{"class":30,"line":1705},[28,94049,94050],{"class":34},"np.tile(aa,",[28,94052,52],{"class":45},[28,94054,642],{"class":34},[28,94056,94057],{"class":105},"#一个数的时候就是行\n",[28,94059,94060],{"class":30,"line":1719},[28,94061,128],{"class":105},[28,94063,94064],{"class":30,"line":1724},[28,94065,94002],{"class":320},[28,94067,94068],{"class":30,"line":1730},[28,94069,94070],{"class":320},"array([[ 1,  2,  3,  1,  2,  3],\n",[28,94072,94073],{"class":30,"line":1751},[28,94074,94075],{"class":320},"       [ 4,  5,  6,  4,  5,  6],\n",[28,94077,94078],{"class":30,"line":1756},[28,94079,94080],{"class":320},"       [ 7,  8,  9,  7,  8,  9],\n",[28,94082,94083],{"class":30,"line":1770},[28,94084,94085],{"class":320},"       [10, 11, 12, 10, 11, 12]])\n",[28,94087,94088],{"class":30,"line":1775},[28,94089,94002],{"class":320},[28,94091,94092,94095,94097,94099,94101],{"class":30,"line":1804},[28,94093,94094],{"class":34},"np.tile(aa,(",[28,94096,52],{"class":45},[28,94098,49],{"class":34},[28,94100,57],{"class":45},[28,94102,30573],{"class":34},[28,94104,94105],{"class":30,"line":1809},[28,94106,128],{"class":105},[28,94108,94109],{"class":30,"line":1826},[28,94110,94002],{"class":320},[28,94112,94113],{"class":30,"line":1831},[28,94114,94115],{"class":320},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94117,94118],{"class":30,"line":1836},[28,94119,94120],{"class":320},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[28,94122,94123],{"class":30,"line":1841},[28,94124,94125],{"class":320},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[28,94127,94128],{"class":30,"line":1855},[28,94129,94130],{"class":320},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[28,94132,94133],{"class":30,"line":1860},[28,94134,94135],{"class":320},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94137,94138],{"class":30,"line":2654},[28,94139,94120],{"class":320},[28,94141,94142],{"class":30,"line":2668},[28,94143,94125],{"class":320},[28,94145,94146],{"class":30,"line":2676},[28,94147,94148],{"class":320},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[28,94150,94151],{"class":30,"line":2681},[28,94152,94002],{"class":320},[159,94154,94156],{"id":94155},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94158,94159],{},"repeat()将数组中的每个元素重复若干次",[18,94161,94163],{"className":20,"code":94162,"language":22,"meta":23,"style":23},"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",[25,94164,94165,94181,94190,94194,94199,94223,94228,94237,94241,94246,94250,94255,94271,94275,94279,94284,94289,94294,94298,94303,94307,94312,94317,94321,94337,94341,94345,94350,94355,94360,94365],{"__ignoreMap":23},[28,94166,94167,94169,94171,94173,94175,94177,94179],{"class":30,"line":31},[28,94168,35],{"class":34},[28,94170,39],{"class":38},[28,94172,93077],{"class":34},[28,94174,46],{"class":45},[28,94176,49],{"class":34},[28,94178,533],{"class":45},[28,94180,227],{"class":34},[28,94182,94183,94186,94188],{"class":30,"line":94},[28,94184,94185],{"class":34},"np.repeat(a,",[28,94187,57],{"class":45},[28,94189,227],{"class":34},[28,94191,94192],{"class":30,"line":109},[28,94193,128],{"class":105},[28,94195,94196],{"class":30,"line":125},[28,94197,94198],{"class":105},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[28,94200,94201,94203,94205,94207,94209,94211,94213,94215,94217,94219,94221],{"class":30,"line":131},[28,94202,93381],{"class":34},[28,94204,39],{"class":38},[28,94206,93077],{"class":34},[28,94208,46],{"class":45},[28,94210,49],{"class":34},[28,94212,73],{"class":45},[28,94214,93082],{"class":34},[28,94216,507],{"class":45},[28,94218,49],{"class":34},[28,94220,57],{"class":45},[28,94222,227],{"class":34},[28,94224,94225],{"class":30,"line":1291},[28,94226,94227],{"class":105},"#这个重复之后二维变成一维\n",[28,94229,94230,94233,94235],{"class":30,"line":1297},[28,94231,94232],{"class":34},"np.repeat(aa,",[28,94234,52],{"class":45},[28,94236,227],{"class":34},[28,94238,94239],{"class":30,"line":1388},[28,94240,94002],{"class":320},[28,94242,94243],{"class":30,"line":1394},[28,94244,94245],{"class":320},"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",[28,94247,94248],{"class":30,"line":1406},[28,94249,94002],{"class":320},[28,94251,94252],{"class":30,"line":1689},[28,94253,94254],{"class":105},"#指定axis\n",[28,94256,94257,94259,94261,94263,94265,94267,94269],{"class":30,"line":1694},[28,94258,94232],{"class":34},[28,94260,52],{"class":45},[28,94262,49],{"class":34},[28,94264,47590],{"class":5293},[28,94266,39],{"class":38},[28,94268,407],{"class":45},[28,94270,227],{"class":34},[28,94272,94273],{"class":30,"line":1700},[28,94274,128],{"class":105},[28,94276,94277],{"class":30,"line":1705},[28,94278,94002],{"class":320},[28,94280,94281],{"class":30,"line":1719},[28,94282,94283],{"class":320},"array([[ 1,  2,  3],\n",[28,94285,94286],{"class":30,"line":1724},[28,94287,94288],{"class":320},"       [ 1,  2,  3],\n",[28,94290,94291],{"class":30,"line":1730},[28,94292,94293],{"class":320},"       [ 4,  5,  6],\n",[28,94295,94296],{"class":30,"line":1751},[28,94297,94293],{"class":320},[28,94299,94300],{"class":30,"line":1756},[28,94301,94302],{"class":320},"       [ 7,  8,  9],\n",[28,94304,94305],{"class":30,"line":1770},[28,94306,94302],{"class":320},[28,94308,94309],{"class":30,"line":1775},[28,94310,94311],{"class":320},"       [10, 11, 12],\n",[28,94313,94314],{"class":30,"line":1804},[28,94315,94316],{"class":320},"       [10, 11, 12]])\n",[28,94318,94319],{"class":30,"line":1809},[28,94320,94002],{"class":320},[28,94322,94323,94325,94327,94329,94331,94333,94335],{"class":30,"line":1826},[28,94324,94232],{"class":34},[28,94326,52],{"class":45},[28,94328,49],{"class":34},[28,94330,47590],{"class":5293},[28,94332,39],{"class":38},[28,94334,46],{"class":45},[28,94336,227],{"class":34},[28,94338,94339],{"class":30,"line":1831},[28,94340,128],{"class":105},[28,94342,94343],{"class":30,"line":1836},[28,94344,94002],{"class":320},[28,94346,94347],{"class":30,"line":1841},[28,94348,94349],{"class":320},"array([[ 1,  1,  2,  2,  3,  3],\n",[28,94351,94352],{"class":30,"line":1855},[28,94353,94354],{"class":320},"       [ 4,  4,  5,  5,  6,  6],\n",[28,94356,94357],{"class":30,"line":1860},[28,94358,94359],{"class":320},"       [ 7,  7,  8,  8,  9,  9],\n",[28,94361,94362],{"class":30,"line":2654},[28,94363,94364],{"class":320},"       [10, 10, 11, 11, 12, 12]])\n",[28,94366,94367],{"class":30,"line":2668},[28,94368,94002],{"class":320},[159,94370,94372],{"id":94371},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[18,94374,94376],{"className":20,"code":94375,"language":22,"meta":23,"style":23},"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",[25,94377,94378,94394,94399,94411,94415,94420,94430,94434],{"__ignoreMap":23},[28,94379,94380,94382,94384,94386,94388,94390,94392],{"class":30,"line":31},[28,94381,35],{"class":34},[28,94383,39],{"class":38},[28,94385,93077],{"class":34},[28,94387,46],{"class":45},[28,94389,49],{"class":34},[28,94391,533],{"class":45},[28,94393,227],{"class":34},[28,94395,94396],{"class":30,"line":94},[28,94397,94398],{"class":105},"#array([，2，3，4])\n",[28,94400,94401,94404,94406,94408],{"class":30,"line":109},[28,94402,94403],{"class":34},"np.roll(a,",[28,94405,52],{"class":45},[28,94407,642],{"class":34},[28,94409,94410],{"class":105},"#传正数向后调多少位，传负数向前调多少位\n",[28,94412,94413],{"class":30,"line":125},[28,94414,128],{"class":105},[28,94416,94417],{"class":30,"line":131},[28,94418,94419],{"class":105},"#array([3, 4, 1, 2])\n",[28,94421,94422,94424,94426,94428],{"class":30,"line":1291},[28,94423,94403],{"class":34},[28,94425,742],{"class":38},[28,94427,46],{"class":45},[28,94429,227],{"class":34},[28,94431,94432],{"class":30,"line":1297},[28,94433,128],{"class":105},[28,94435,94436],{"class":30,"line":1388},[28,94437,94438],{"class":105},"#array([2, 3, 4, 1])\n",[14,94440,94441],{},[1539,94442],{"alt":23,"src":94443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[159,94445,94447],{"id":94446},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94449,94450],{},"resize()重新调整数组的大小",[14,94452,94453],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[18,94455,94457],{"className":20,"code":94456,"language":22,"meta":23,"style":23},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[25,94458,94459,94464,94477],{"__ignoreMap":23},[28,94460,94461],{"class":30,"line":31},[28,94462,94463],{"class":105},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[28,94465,94466,94469,94471,94473,94475],{"class":30,"line":94},[28,94467,94468],{"class":34},"np.resize(aa,(",[28,94470,52],{"class":45},[28,94472,49],{"class":34},[28,94474,558],{"class":45},[28,94476,30573],{"class":34},[28,94478,94479,94481,94483,94485,94487,94489],{"class":30,"line":109},[28,94480,94468],{"class":34},[28,94482,52],{"class":45},[28,94484,49],{"class":34},[28,94486,633],{"class":45},[28,94488,82846],{"class":34},[28,94490,94491],{"class":105},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[159,94493,94495],{"id":94494},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94497,94498],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94500,94501],{},[1539,94502],{"alt":23,"src":94503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[159,94505,94507],{"id":94506},"_126-保存加载文件","12.6 保存加载文件",[14,94509,94510],{},"savetxt():将数据保存到txt文件中",[14,94512,94513],{},"loadtxt():从文件加载数据",[14,94515,94516],{},[1539,94517],{"alt":23,"src":94518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[159,94520,94522],{"id":94521},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94524,94525],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[159,94527,94529],{"id":94528},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94531,94532],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94534,94535],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94537,94538],{},[1539,94539],{"alt":23,"src":94540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[159,94542,94544],{"id":94543},"_129-where语句","12.9 where语句",[14,94546,94547],{},"np.where(条件,x,y)",[14,94549,94550],{},"如果条件为True,对应值为x,否则对应值为y",[14,94552,94553],{},[1539,94554],{"alt":23,"src":94555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[159,94557,94559],{"id":94558},"_1210-dot矩阵","12.10 dot()矩阵",[14,94561,94562],{},[1539,94563],{"alt":23,"src":94564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[136,94566,94567],{},"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":23,"searchDepth":94,"depth":94,"links":94569},[94570,94571,94572,94573,94574,94575,94576,94577,94578,94579],{"id":93932,"depth":94,"text":93933},{"id":94155,"depth":94,"text":94156},{"id":94371,"depth":94,"text":94372},{"id":94446,"depth":94,"text":94447},{"id":94494,"depth":94,"text":94495},{"id":94506,"depth":94,"text":94507},{"id":94521,"depth":94,"text":94522},{"id":94528,"depth":94,"text":94529},{"id":94543,"depth":94,"text":94544},{"id":94558,"depth":94,"text":94559},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93924,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94586,"title":94587,"body":94588,"description":141,"extension":142,"meta":94941,"navigation":144,"path":94942,"seo":94943,"stem":94944,"__hash__":94945},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94589,"toc":94939},[94590,94593,94596,94599,94602,94605,94670,94672,94936],[10,94591,94587],{"id":94592},"_13数组排序",[14,94594,94595],{},"排序主要用到的方法是np.sort和np.argsort",[14,94597,94598],{},"其中np.sort()对数组直接排序",[14,94600,94601],{},"而np.argsort()是返回排序后的原始索引",[14,94603,94604],{},"①一维数组",[18,94606,94608],{"className":20,"code":94607,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[25,94609,94610,94614,94654,94662],{"__ignoreMap":23},[28,94611,94612],{"class":30,"line":31},[28,94613,93180],{"class":105},[28,94615,94616,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648,94650,94652],{"class":30,"line":94},[28,94617,35],{"class":34},[28,94619,39],{"class":38},[28,94621,93099],{"class":34},[28,94623,57],{"class":45},[28,94625,49],{"class":34},[28,94627,68],{"class":45},[28,94629,49],{"class":34},[28,94631,608],{"class":45},[28,94633,49],{"class":34},[28,94635,88],{"class":45},[28,94637,49],{"class":34},[28,94639,493],{"class":45},[28,94641,49],{"class":34},[28,94643,1099],{"class":45},[28,94645,49],{"class":34},[28,94647,558],{"class":45},[28,94649,49],{"class":34},[28,94651,659],{"class":45},[28,94653,4734],{"class":34},[28,94655,94656,94659],{"class":30,"line":109},[28,94657,94658],{"class":34},"np.sort(a)",[28,94660,94661],{"class":105},"#升序排序\n",[28,94663,94664,94667],{"class":30,"line":125},[28,94665,94666],{"class":34},"np.argsort(a)",[28,94668,94669],{"class":105},"#按照元素大小来索引排序\n",[14,94671,93366],{},[18,94673,94675],{"className":20,"code":94674,"language":22,"meta":23,"style":23},"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",[25,94676,94677,94689,94715,94720,94724,94729,94734,94739,94744,94748,94756,94760,94765,94770,94775,94780,94784,94789,94802,94806,94811,94816,94821,94826,94830,94835,94847,94851,94855,94859,94863,94867,94871,94876,94891,94896,94905,94910,94914,94918,94923,94927,94932],{"__ignoreMap":23},[28,94678,94679,94682,94684,94686],{"class":30,"line":31},[28,94680,94681],{"class":34},"np.random.seed(",[28,94683,407],{"class":45},[28,94685,642],{"class":34},[28,94687,94688],{"class":105},"#保证每次值一样\n",[28,94690,94691,94693,94695,94697,94699,94701,94703,94705,94707,94709,94711,94713],{"class":30,"line":94},[28,94692,93381],{"class":34},[28,94694,39],{"class":38},[28,94696,93189],{"class":34},[28,94698,525],{"class":45},[28,94700,49],{"class":34},[28,94702,31572],{"class":5293},[28,94704,39],{"class":38},[28,94706,221],{"class":34},[28,94708,507],{"class":45},[28,94710,49],{"class":34},[28,94712,558],{"class":45},[28,94714,30573],{"class":34},[28,94716,94717],{"class":30,"line":109},[28,94718,94719],{"class":105},"#原数组：\n",[28,94721,94722],{"class":30,"line":125},[28,94723,94002],{"class":320},[28,94725,94726],{"class":30,"line":131},[28,94727,94728],{"class":320},"array([[44, 47, 64, 67, 67,  9],\n",[28,94730,94731],{"class":30,"line":1291},[28,94732,94733],{"class":320},"       [83, 21, 36, 87, 70, 88],\n",[28,94735,94736],{"class":30,"line":1297},[28,94737,94738],{"class":320},"       [88, 12, 58, 65, 39, 87],\n",[28,94740,94741],{"class":30,"line":1388},[28,94742,94743],{"class":320},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[28,94745,94746],{"class":30,"line":1394},[28,94747,94002],{"class":320},[28,94749,94750,94753],{"class":30,"line":1406},[28,94751,94752],{"class":34},"np.sort(aa)",[28,94754,94755],{"class":105},"#每行进行了排序\n",[28,94757,94758],{"class":30,"line":1689},[28,94759,94002],{"class":320},[28,94761,94762],{"class":30,"line":1694},[28,94763,94764],{"class":320},"array([[ 9, 44, 47, 64, 67, 67],\n",[28,94766,94767],{"class":30,"line":1700},[28,94768,94769],{"class":320},"       [21, 36, 70, 83, 87, 88],\n",[28,94771,94772],{"class":30,"line":1705},[28,94773,94774],{"class":320},"       [12, 39, 58, 65, 87, 88],\n",[28,94776,94777],{"class":30,"line":1719},[28,94778,94779],{"class":320},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[28,94781,94782],{"class":30,"line":1724},[28,94783,94002],{"class":320},[28,94785,94786],{"class":30,"line":1730},[28,94787,94788],{"class":105},"#axis=0时\n",[28,94790,94791,94794,94796,94798,94800],{"class":30,"line":1751},[28,94792,94793],{"class":34},"np.sort(aa,",[28,94795,47590],{"class":5293},[28,94797,39],{"class":38},[28,94799,407],{"class":45},[28,94801,227],{"class":34},[28,94803,94804],{"class":30,"line":1756},[28,94805,94002],{"class":320},[28,94807,94808],{"class":30,"line":1770},[28,94809,94810],{"class":320},"array([[44, 12, 36, 37, 25,  9],\n",[28,94812,94813],{"class":30,"line":1775},[28,94814,94815],{"class":320},"       [46, 21, 58, 65, 39, 77],\n",[28,94817,94818],{"class":30,"line":1804},[28,94819,94820],{"class":320},"       [83, 47, 64, 67, 67, 87],\n",[28,94822,94823],{"class":30,"line":1809},[28,94824,94825],{"class":320},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[28,94827,94828],{"class":30,"line":1826},[28,94829,94002],{"class":320},[28,94831,94832],{"class":30,"line":1831},[28,94833,94834],{"class":105},"#axis=1时,为默认值\n",[28,94836,94837,94839,94841,94843,94845],{"class":30,"line":1836},[28,94838,94793],{"class":34},[28,94840,47590],{"class":5293},[28,94842,39],{"class":38},[28,94844,46],{"class":45},[28,94846,227],{"class":34},[28,94848,94849],{"class":30,"line":1841},[28,94850,94002],{"class":320},[28,94852,94853],{"class":30,"line":1855},[28,94854,94764],{"class":320},[28,94856,94857],{"class":30,"line":1860},[28,94858,94769],{"class":320},[28,94860,94861],{"class":30,"line":2654},[28,94862,94774],{"class":320},[28,94864,94865],{"class":30,"line":2668},[28,94866,94779],{"class":320},[28,94868,94869],{"class":30,"line":2676},[28,94870,94002],{"class":320},[28,94872,94873],{"class":30,"line":2681},[28,94874,94875],{"class":105},"#按最后一列排序\n",[28,94877,94878,94880,94882,94885,94887,94889],{"class":30,"line":2687},[28,94879,477],{"class":34},[28,94881,39],{"class":38},[28,94883,94884],{"class":34},"aa[:,",[28,94886,742],{"class":38},[28,94888,46],{"class":45},[28,94890,33322],{"class":34},[28,94892,94893],{"class":30,"line":2693},[28,94894,94895],{"class":105},"#获取最后一列排好序的索引\n",[28,94897,94898,94900,94902],{"class":30,"line":2698},[28,94899,74133],{"class":34},[28,94901,39],{"class":38},[28,94903,94904],{"class":34},"np.argsort(b)\n",[28,94906,94907],{"class":30,"line":8025},[28,94908,94909],{"class":34},"aa[index]\n",[28,94911,94912],{"class":30,"line":8049},[28,94913,94002],{"class":320},[28,94915,94916],{"class":30,"line":8054},[28,94917,94728],{"class":320},[28,94919,94920],{"class":30,"line":8060},[28,94921,94922],{"class":320},"       [46, 88, 81, 37, 25, 77],\n",[28,94924,94925],{"class":30,"line":8087},[28,94926,94738],{"class":320},[28,94928,94929],{"class":30,"line":8092},[28,94930,94931],{"class":320},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[28,94933,94934],{"class":30,"line":8098},[28,94935,94002],{"class":320},[136,94937,94938],{},"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":23,"searchDepth":94,"depth":94,"links":94940},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94587,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94947,"title":94948,"body":94949,"description":141,"extension":142,"meta":94979,"navigation":144,"path":94980,"seo":94981,"stem":94982,"__hash__":94983},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94950,"toc":94977},[94951,94954,94957,94960,94963,94966,94969,94972],[10,94952,94948],{"id":94953},"_14广播机制",[14,94955,94956],{},"广播的规则：",[14,94958,94959],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94961,94962],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94964,94965],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94967,94968],{},"3.如果没有维度形状为1，则会引发异常",[14,94970,94971],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94973,94974],{},[1539,94975],{"alt":23,"src":94976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":23,"searchDepth":94,"depth":94,"links":94978},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94948,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":4,"title":5,"body":94985,"description":141,"extension":142,"meta":95073,"navigation":144,"path":145,"seo":95074,"stem":147,"__hash__":148},{"type":7,"value":94986,"toc":95071},[94987,94989,94991,95069],[10,94988,5],{"id":12},[14,94990,16],{},[18,94992,94993],{"className":20,"code":21,"language":22,"meta":23,"style":23},[25,94994,94995,95039,95049,95061,95065],{"__ignoreMap":23},[28,94996,94997,94999,95001,95003,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023,95025,95027,95029,95031,95033,95035,95037],{"class":30,"line":31},[28,94998,35],{"class":34},[28,95000,39],{"class":38},[28,95002,42],{"class":34},[28,95004,46],{"class":45},[28,95006,49],{"class":34},[28,95008,52],{"class":45},[28,95010,49],{"class":34},[28,95012,57],{"class":45},[28,95014,60],{"class":34},[28,95016,63],{"class":45},[28,95018,49],{"class":34},[28,95020,68],{"class":45},[28,95022,49],{"class":34},[28,95024,73],{"class":45},[28,95026,60],{"class":34},[28,95028,78],{"class":45},[28,95030,49],{"class":34},[28,95032,83],{"class":45},[28,95034,49],{"class":34},[28,95036,88],{"class":45},[28,95038,91],{"class":34},[28,95040,95041,95043,95045,95047],{"class":30,"line":94},[28,95042,35],{"class":34},[28,95044,99],{"class":38},[28,95046,102],{"class":45},[28,95048,106],{"class":105},[28,95050,95051,95053,95055,95057,95059],{"class":30,"line":109},[28,95052,112],{"class":34},[28,95054,99],{"class":38},[28,95056,102],{"class":45},[28,95058,119],{"class":34},[28,95060,122],{"class":105},[28,95062,95063],{"class":30,"line":125},[28,95064,128],{"class":105},[28,95066,95067],{"class":30,"line":131},[28,95068,134],{"class":105},[136,95070,138],{},{"title":23,"searchDepth":94,"depth":94,"links":95072},[],{},{"title":5,"description":141},{"id":95076,"title":95077,"body":95078,"description":141,"extension":142,"meta":95170,"navigation":144,"path":95171,"seo":95172,"stem":95173,"__hash__":95174},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95079,"toc":95168},[95080,95083,95086,95089,95092,95095,95160,95165],[10,95081,95077],{"id":95082},"_16魔法命令time",[14,95084,95085],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95087,95088],{},"%:行模式",[14,95090,95091],{},"%%:单元格模式",[14,95093,95094],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[18,95096,95098],{"className":20,"code":95097,"language":22,"meta":23,"style":23},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[25,95099,95100,95105,95112,95117,95126,95139,95143,95151],{"__ignoreMap":23},[28,95101,95102],{"class":30,"line":31},[28,95103,95104],{"class":105},"#程序执行时间\n",[28,95106,95107,95109],{"class":30,"line":94},[28,95108,30468],{"class":38},[28,95110,95111],{"class":34}," time \n",[28,95113,95114],{"class":30,"line":109},[28,95115,95116],{"class":105},"#获取时间\n",[28,95118,95119,95122,95124],{"class":30,"line":125},[28,95120,95121],{"class":34},"start",[28,95123,39],{"class":38},[28,95125,32494],{"class":34},[28,95127,95128,95131,95134,95136],{"class":30,"line":131},[28,95129,95130],{"class":34},"time.sleep(",[28,95132,95133],{"class":45},"0.4",[28,95135,642],{"class":34},[28,95137,95138],{"class":105},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[28,95140,95141],{"class":30,"line":1291},[28,95142,95116],{"class":105},[28,95144,95145,95147,95149],{"class":30,"line":1297},[28,95146,45877],{"class":34},[28,95148,39],{"class":38},[28,95150,32494],{"class":34},[28,95152,95153,95155,95157],{"class":30,"line":1388},[28,95154,45877],{"class":34},[28,95156,742],{"class":38},[28,95158,95159],{"class":34},"start\n",[14,95161,95162],{},[1539,95163],{"alt":23,"src":95164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[136,95166,95167],{},"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":23,"searchDepth":94,"depth":94,"links":95169},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95077,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95176,"title":95177,"body":95178,"description":141,"extension":142,"meta":95213,"navigation":144,"path":95214,"seo":95215,"stem":95216,"__hash__":95217},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95179,"toc":95211},[95180,95183,95186,95189,95192,95195,95198,95201,95206],[10,95181,95177],{"id":95182},"_17魔法命令timeit",[14,95184,95185],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95187,95188],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95190,95191],{},"单元格模式：",[14,95193,95194],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95196,95197],{},"初始化语句执行次数由轮数来决定",[14,95199,95200],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95202,95203],{},[1539,95204],{"alt":23,"src":95205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95207,95208],{},[1539,95209],{"alt":23,"src":95210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":23,"searchDepth":94,"depth":94,"links":95212},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95177,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95219,"title":95220,"body":95221,"description":141,"extension":142,"meta":95239,"navigation":144,"path":95240,"seo":95241,"stem":95242,"__hash__":95243},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95222,"toc":95237},[95223,95226,95229,95232],[10,95224,95220],{"id":95225},"_18魔法命令writefile和run",[14,95227,95228],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95230,95231],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95233,95234],{},[1539,95235],{"alt":23,"src":95236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":23,"searchDepth":94,"depth":94,"links":95238},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95220,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95245,"title":95246,"body":95247,"description":141,"extension":142,"meta":95300,"navigation":144,"path":95301,"seo":95302,"stem":95303,"__hash__":95304},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95248,"toc":95298},[95249,95252,95255,95257,95260,95263,95268,95271,95274,95277,95280,95283,95286,95289,95292,95295],[10,95250,95246],{"id":95251},"_19魔法命令memit",[14,95253,95254],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95256,24677],{},[14,95258,95259],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95261,95262],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95264,95265],{},[1539,95266],{"alt":23,"src":95267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95269,95270],{},"补充：",[14,95272,95273],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95275,95276],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95278,95279],{},"解决方法：",[14,95281,95282],{},"1.cmd",[14,95284,95285],{},"2.依次输入以下代码：",[14,95287,95288],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95290,95291],{},"pip install --upgrade ipython",[14,95293,95294],{},"#升级 memory_profiler 和 setuptools",[14,95296,95297],{},"pip install --upgrade memory_profiler setuptools",{"title":23,"searchDepth":94,"depth":94,"links":95299},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95246,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95306,"title":95307,"body":95308,"description":141,"extension":142,"meta":96954,"navigation":144,"path":96955,"seo":96956,"stem":96957,"__hash__":96958},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95309,"toc":96924},[95310,95313,95317,95321,95382,95385,95390,95394,95399,95404,95409,95414,95417,95422,95426,95430,95463,95466,95469,95472,95524,95527,95563,95566,95608,95612,95633,95635,95672,95674,95679,95681,95686,95690,95693,95721,95725,95729,95782,95786,95878,95882,95886,95889,95894,95898,95923,95928,95932,95935,95938,95941,95944,95947,95950,95953,95965,95969,95973,95976,96008,96011,96034,96037,96063,96066,96092,96095,96129,96132,96194,96198,96201,96205,96208,96234,96237,96240,96245,96248,96317,96319,96324,96385,96388,96399,96405,96410,96414,96417,96430,96434,96449,96451,96474,96476,96502,96505,96508,96511,96559,96561,96566,96570,96574,96601,96605,96632,96635,96640,96645,96735,96739,96797,96802,96805,96808,96850,96854,96910,96915,96918,96921],[10,95311,95307],{"id":95312},"_2创建数组",[159,95314,95316],{"id":95315},"_21-array函数创建数组","2.1 array()函数创建数组",[188,95318,95320],{"id":95319},"_221-函数语句","2.2.1 函数语句",[18,95322,95324],{"className":20,"code":95323,"language":22,"meta":23,"style":23},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[25,95325,95326],{"__ignoreMap":23},[28,95327,95328,95331,95334,95336,95338,95340,95342,95344,95347,95349,95352,95354,95357,95359,95361,95363,95366,95368,95371,95373,95376,95378,95380],{"class":30,"line":31},[28,95329,95330],{"class":34},"numpy.array(",[28,95332,95333],{"class":45},"object",[28,95335,12512],{"class":34},[28,95337,93575],{"class":5293},[28,95339,13641],{"class":38},[28,95341,39009],{"class":45},[28,95343,12512],{"class":34},[28,95345,95346],{"class":5293},"copy",[28,95348,13641],{"class":38},[28,95350,95351],{"class":45}," True",[28,95353,12512],{"class":34},[28,95355,95356],{"class":5293},"order",[28,95358,13641],{"class":38},[28,95360,39009],{"class":45},[28,95362,12512],{"class":34},[28,95364,95365],{"class":5293},"subok",[28,95367,13641],{"class":38},[28,95369,95370],{"class":45}," False",[28,95372,12512],{"class":34},[28,95374,95375],{"class":5293},"ndmin",[28,95377,13641],{"class":38},[28,95379,4170],{"class":45},[28,95381,227],{"class":34},[14,95383,95384],{},"参数：",[14,95386,95387],{},[1539,95388],{"alt":23,"src":95389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[188,95391,95393],{"id":95392},"_222-实例","2.2.2 实例",[14,95395,95396],{},[1539,95397],{"alt":23,"src":95398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95400,95401],{},[1539,95402],{"alt":23,"src":95403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95405,95406],{},[1539,95407],{"alt":23,"src":95408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95410,95411],{},[1539,95412],{"alt":23,"src":95413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95415,95416],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95418,95419],{},[1539,95420],{"alt":23,"src":95421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[159,95423,95425],{"id":95424},"_22-随机数创建数组","2.2 随机数创建数组",[188,95427,95429],{"id":95428},"_221-random语句","2.2.1 random语句",[18,95431,95433],{"className":20,"code":95432,"language":22,"meta":23,"style":23},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[25,95434,95435,95440,95445,95453,95458],{"__ignoreMap":23},[28,95436,95437],{"class":30,"line":31},[28,95438,95439],{"class":105},"#random.random()\n",[28,95441,95442],{"class":30,"line":94},[28,95443,95444],{"class":105},"#确定随机种子,就是每次运行结果是相同的\n",[28,95446,95447,95449,95451],{"class":30,"line":109},[28,95448,94681],{"class":34},[28,95450,407],{"class":45},[28,95452,227],{"class":34},[28,95454,95455],{"class":30,"line":125},[28,95456,95457],{"class":34},"np.random.random()\n",[28,95459,95460],{"class":30,"line":131},[28,95461,95462],{"class":105},"#生成一个随机的数目\n",[14,95464,95465],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95467,95468],{},"可以指定数组形状 size",[14,95470,95471],{},"①生成一维数组",[18,95473,95475],{"className":20,"code":95474,"language":22,"meta":23,"style":23},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[25,95476,95477,95482,95495,95500,95516],{"__ignoreMap":23},[28,95478,95479],{"class":30,"line":31},[28,95480,95481],{"class":105},"#random.random(size())\n",[28,95483,95484,95487,95489,95491,95493],{"class":30,"line":94},[28,95485,95486],{"class":34},"np.random.random(",[28,95488,31572],{"class":5293},[28,95490,39],{"class":38},[28,95492,533],{"class":45},[28,95494,227],{"class":34},[28,95496,95497],{"class":30,"line":109},[28,95498,95499],{"class":105},"#生成一位的五个元素\n",[28,95501,95502,95504,95506,95508,95510,95512,95514],{"class":30,"line":125},[28,95503,35],{"class":34},[28,95505,39],{"class":38},[28,95507,95486],{"class":34},[28,95509,31572],{"class":5293},[28,95511,39],{"class":38},[28,95513,507],{"class":45},[28,95515,227],{"class":34},[28,95517,95518,95521],{"class":30,"line":131},[28,95519,95520],{"class":34},"a.shape ",[28,95522,95523],{"class":105},"#输出数组形状\n",[14,95525,95526],{},"②生成二维数组",[18,95528,95530],{"className":20,"code":95529,"language":22,"meta":23,"style":23},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[25,95531,95532,95536,95558],{"__ignoreMap":23},[28,95533,95534],{"class":30,"line":31},[28,95535,93376],{"class":105},[28,95537,95538,95540,95542,95544,95546,95548,95550,95552,95554,95556],{"class":30,"line":94},[28,95539,93381],{"class":34},[28,95541,39],{"class":38},[28,95543,95486],{"class":34},[28,95545,31572],{"class":5293},[28,95547,39],{"class":38},[28,95549,221],{"class":34},[28,95551,507],{"class":45},[28,95553,49],{"class":34},[28,95555,533],{"class":45},[28,95557,30573],{"class":34},[28,95559,95560],{"class":30,"line":109},[28,95561,95562],{"class":105},"#生成四行五列的数组\n",[14,95564,95565],{},"③生成三维数组",[18,95567,95569],{"className":20,"code":95568,"language":22,"meta":23,"style":23},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[25,95570,95571,95576,95603],{"__ignoreMap":23},[28,95572,95573],{"class":30,"line":31},[28,95574,95575],{"class":105},"#三维数组\n",[28,95577,95578,95581,95583,95585,95587,95589,95591,95593,95595,95597,95599,95601],{"class":30,"line":94},[28,95579,95580],{"class":34},"aaa",[28,95582,39],{"class":38},[28,95584,95486],{"class":34},[28,95586,31572],{"class":5293},[28,95588,39],{"class":38},[28,95590,221],{"class":34},[28,95592,52],{"class":45},[28,95594,49],{"class":34},[28,95596,57],{"class":45},[28,95598,49],{"class":34},[28,95600,507],{"class":45},[28,95602,30573],{"class":34},[28,95604,95605],{"class":30,"line":109},[28,95606,95607],{"class":34},"aaa.shape\n",[188,95609,95611],{"id":95610},"_222-randint语句","2.2.2 randint语句",[18,95613,95615],{"className":20,"code":95614,"language":22,"meta":23,"style":23},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[25,95616,95617,95622],{"__ignoreMap":23},[28,95618,95619],{"class":30,"line":31},[28,95620,95621],{"class":105},"#生成随机的整数 random.randint(low,high,size)\n",[28,95623,95624,95626,95628,95630],{"class":30,"line":94},[28,95625,93189],{"class":34},[28,95627,533],{"class":45},[28,95629,13791],{"class":34},[28,95631,95632],{"class":105},"#0~5中的随机一个数\n",[14,95634,95471],{},[18,95636,95638],{"className":20,"code":95637,"language":22,"meta":23,"style":23},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[25,95639,95640,95645,95667],{"__ignoreMap":23},[28,95641,95642],{"class":30,"line":31},[28,95643,95644],{"class":105},"#一维\n",[28,95646,95647,95649,95651,95653,95655,95657,95659,95661,95663,95665],{"class":30,"line":94},[28,95648,93189],{"class":34},[28,95650,46],{"class":45},[28,95652,49],{"class":34},[28,95654,63],{"class":45},[28,95656,49],{"class":34},[28,95658,31572],{"class":5293},[28,95660,39],{"class":38},[28,95662,221],{"class":34},[28,95664,659],{"class":45},[28,95666,30573],{"class":34},[28,95668,95669],{"class":30,"line":109},[28,95670,95671],{"class":105},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95673,95526],{},[14,95675,95676],{},[1539,95677],{"alt":23,"src":95678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95680,95565],{},[14,95682,95683],{},[1539,95684],{"alt":23,"src":95685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[188,95687,95689],{"id":95688},"_222-rand语句","2.2.2 rand语句",[14,95691,95692],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[18,95694,95696],{"className":20,"code":95695,"language":22,"meta":23,"style":23},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[25,95697,95698,95711,95716],{"__ignoreMap":23},[28,95699,95700,95703,95705,95707,95709],{"class":30,"line":31},[28,95701,95702],{"class":34},"np.random.rand(",[28,95704,525],{"class":45},[28,95706,49],{"class":34},[28,95708,659],{"class":45},[28,95710,227],{"class":34},[28,95712,95713],{"class":30,"line":94},[28,95714,95715],{"class":105},"#第一个参数100：行数，表示有100个样本\n",[28,95717,95718],{"class":30,"line":109},[28,95719,95720],{"class":105},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[159,95722,95724],{"id":95723},"_23-arange创建数组","2.3 arange()创建数组",[188,95726,95728],{"id":95727},"_231-函数语句","2.3.1 函数语句",[18,95730,95732],{"className":20,"code":95731,"language":22,"meta":23,"style":23},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[25,95733,95734,95748,95753,95758,95763,95768,95773,95778],{"__ignoreMap":23},[28,95735,95736,95739,95741,95743,95746],{"class":30,"line":31},[28,95737,95738],{"class":34},"numpy.arange([start,] stop[, step], ",[28,95740,93575],{"class":5293},[28,95742,39],{"class":38},[28,95744,95745],{"class":45},"None",[28,95747,227],{"class":34},[28,95749,95750],{"class":30,"line":94},[28,95751,95752],{"class":105},"#参数\n",[28,95754,95755],{"class":30,"line":109},[28,95756,95757],{"class":320},"\"\"\"\n",[28,95759,95760],{"class":30,"line":125},[28,95761,95762],{"class":320},"start:起始值，可选，默认从 0 开始。\n",[28,95764,95765],{"class":30,"line":131},[28,95766,95767],{"class":320},"stop:结束值（不包含该值）。\n",[28,95769,95770],{"class":30,"line":1291},[28,95771,95772],{"class":320},"step:步长，可选，默认是 1。可以为浮点数。\n",[28,95774,95775],{"class":30,"line":1297},[28,95776,95777],{"class":320},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[28,95779,95780],{"class":30,"line":1388},[28,95781,95757],{"class":320},[188,95783,95785],{"id":95784},"_232-实例","2.3.2 实例",[18,95787,95789],{"className":20,"code":95788,"language":22,"meta":23,"style":23},"#创建一维数组\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",[25,95790,95791,95795,95819,95824,95829,95833,95856,95860,95864,95869,95874],{"__ignoreMap":23},[28,95792,95793],{"class":30,"line":31},[28,95794,93180],{"class":105},[28,95796,95797,95799,95801,95803,95805,95807,95809,95811,95813,95815,95817],{"class":30,"line":94},[28,95798,93077],{"class":34},[28,95800,46],{"class":45},[28,95802,49],{"class":34},[28,95804,78],{"class":45},[28,95806,49],{"class":34},[28,95808,46],{"class":45},[28,95810,49],{"class":34},[28,95812,93575],{"class":5293},[28,95814,39],{"class":38},[28,95816,224],{"class":45},[28,95818,227],{"class":34},[28,95820,95821],{"class":30,"line":109},[28,95822,95823],{"class":105},"#输出结果：\n",[28,95825,95826],{"class":30,"line":125},[28,95827,95828],{"class":105},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[28,95830,95831],{"class":30,"line":131},[28,95832,94021],{"class":105},[28,95834,95835,95838,95840,95842,95844,95847,95849,95851,95853],{"class":30,"line":1291},[28,95836,95837],{"class":34},"np.array([np.arange(",[28,95839,46],{"class":45},[28,95841,49],{"class":34},[28,95843,507],{"class":45},[28,95845,95846],{"class":34},"),np.arange(",[28,95848,507],{"class":45},[28,95850,49],{"class":34},[28,95852,583],{"class":45},[28,95854,95855],{"class":34},")])\n",[28,95857,95858],{"class":30,"line":1297},[28,95859,128],{"class":105},[28,95861,95862],{"class":30,"line":1388},[28,95863,95757],{"class":320},[28,95865,95866],{"class":30,"line":1394},[28,95867,95868],{"class":320},"array([[1, 2, 3],\n",[28,95870,95871],{"class":30,"line":1406},[28,95872,95873],{"class":320},"       [4, 5, 6]])\n",[28,95875,95876],{"class":30,"line":1689},[28,95877,95757],{"class":320},[159,95879,95881],{"id":95880},"_24-生态分布","2.4 生态分布",[188,95883,95885],{"id":95884},"_241-标准正态分布","2.4.1 标准正态分布",[14,95887,95888],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95890,95891],{},[1539,95892],{"alt":23,"src":95893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[188,95895,95897],{"id":95896},"_242-常规正态分布","2.4.2 常规正态分布",[18,95899,95901],{"className":20,"code":95900,"language":22,"meta":23,"style":23},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[25,95902,95903,95908,95913,95918],{"__ignoreMap":23},[28,95904,95905],{"class":30,"line":31},[28,95906,95907],{"class":34},"random.normal(loc,scale,size)也可以生成正态分布\n",[28,95909,95910],{"class":30,"line":94},[28,95911,95912],{"class":105},"#loc:期望\n",[28,95914,95915],{"class":30,"line":109},[28,95916,95917],{"class":105},"#scale:方差\n",[28,95919,95920],{"class":30,"line":125},[28,95921,95922],{"class":105},"#size:用于确定是几维的数列\n",[14,95924,95925],{},[1539,95926],{"alt":23,"src":95927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[159,95929,95931],{"id":95930},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95933,95934],{},"ndim:秩，维度个数",[14,95936,95937],{},"size:数组元素的个数",[14,95939,95940],{},"shape:数组的形状",[14,95942,95943],{},"dtype:数组元素的类型",[14,95945,95946],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95948,95949],{},"他们都是属性，通过数组.属性的形式来确定",[14,95951,95952],{},"如果需要输出多个可以通过以下方式：",[18,95954,95956],{"className":20,"code":95955,"language":22,"meta":23,"style":23},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[25,95957,95958],{"__ignoreMap":23},[28,95959,95960,95962],{"class":30,"line":31},[28,95961,30491],{"class":45},[28,95963,95964],{"class":34},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[159,95966,95968],{"id":95967},"_26-其他方式创建数组","2.6 其他方式创建数组",[188,95970,95972],{"id":95971},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95974,95975],{},"①创建一维数组",[18,95977,95979],{"className":20,"code":95978,"language":22,"meta":23,"style":23},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[25,95980,95981,95990,95994,95999,96004],{"__ignoreMap":23},[28,95982,95983,95986,95988],{"class":30,"line":31},[28,95984,95985],{"class":34},"np.zeros(",[28,95987,659],{"class":45},[28,95989,227],{"class":34},[28,95991,95992],{"class":30,"line":94},[28,95993,95757],{"class":320},[28,95995,95996],{"class":30,"line":109},[28,95997,95998],{"class":320},"输出结果：\n",[28,96000,96001],{"class":30,"line":125},[28,96002,96003],{"class":320},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[28,96005,96006],{"class":30,"line":131},[28,96007,95757],{"class":320},[14,96009,96010],{},"上方代码等价于：",[18,96012,96014],{"className":20,"code":96013,"language":22,"meta":23,"style":23},"np.zeros(shape=(10))#创建10个元素的0数组\n",[25,96015,96016],{"__ignoreMap":23},[28,96017,96018,96020,96023,96025,96027,96029,96031],{"class":30,"line":31},[28,96019,95985],{"class":34},[28,96021,96022],{"class":5293},"shape",[28,96024,39],{"class":38},[28,96026,221],{"class":34},[28,96028,659],{"class":45},[28,96030,82846],{"class":34},[28,96032,96033],{"class":105},"#创建10个元素的0数组\n",[14,96035,96036],{},"也可以指定类型",[18,96038,96040],{"className":20,"code":96039,"language":22,"meta":23,"style":23},"#指定类型\nnp.zeros(5,dtype=int)\n",[25,96041,96042,96047],{"__ignoreMap":23},[28,96043,96044],{"class":30,"line":31},[28,96045,96046],{"class":105},"#指定类型\n",[28,96048,96049,96051,96053,96055,96057,96059,96061],{"class":30,"line":94},[28,96050,95985],{"class":34},[28,96052,533],{"class":45},[28,96054,49],{"class":34},[28,96056,93575],{"class":5293},[28,96058,39],{"class":38},[28,96060,224],{"class":45},[28,96062,227],{"class":34},[14,96064,96065],{},"②创建二维数组",[18,96067,96069],{"className":20,"code":96068,"language":22,"meta":23,"style":23},"np.zeros((3,4),dtype=int)\n",[25,96070,96071],{"__ignoreMap":23},[28,96072,96073,96076,96078,96080,96082,96084,96086,96088,96090],{"class":30,"line":31},[28,96074,96075],{"class":34},"np.zeros((",[28,96077,57],{"class":45},[28,96079,49],{"class":34},[28,96081,507],{"class":45},[28,96083,42332],{"class":34},[28,96085,93575],{"class":5293},[28,96087,39],{"class":38},[28,96089,224],{"class":45},[28,96091,227],{"class":34},[14,96093,96094],{},"③创建三维数组",[18,96096,96098],{"className":20,"code":96097,"language":22,"meta":23,"style":23},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[25,96099,96100,96105],{"__ignoreMap":23},[28,96101,96102],{"class":30,"line":31},[28,96103,96104],{"class":105},"#创建三维数组\n",[28,96106,96107,96109,96111,96113,96115,96117,96119,96121,96123,96125,96127],{"class":30,"line":94},[28,96108,96075],{"class":34},[28,96110,57],{"class":45},[28,96112,49],{"class":34},[28,96114,507],{"class":45},[28,96116,49],{"class":34},[28,96118,533],{"class":45},[28,96120,42332],{"class":34},[28,96122,93575],{"class":5293},[28,96124,39],{"class":38},[28,96126,224],{"class":45},[28,96128,227],{"class":34},[14,96130,96131],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[18,96133,96135],{"className":20,"code":96134,"language":22,"meta":23,"style":23},"#使用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",[25,96136,96137,96142,96157,96162,96167,96189],{"__ignoreMap":23},[28,96138,96139],{"class":30,"line":31},[28,96140,96141],{"class":105},"#使用zeros_like将创建的一维数组变成全0的数组\n",[28,96143,96144,96146,96148,96150,96152,96154],{"class":30,"line":94},[28,96145,35],{"class":34},[28,96147,39],{"class":38},[28,96149,93077],{"class":34},[28,96151,507],{"class":45},[28,96153,642],{"class":34},[28,96155,96156],{"class":105},"#这个得到的结果：一维数组0，1，2，3\n",[28,96158,96159],{"class":30,"line":109},[28,96160,96161],{"class":34},"np.zeros_like(a)\n",[28,96163,96164],{"class":30,"line":125},[28,96165,96166],{"class":105},"#使用zeros_like将创建的二维数组变成全0的数组\n",[28,96168,96169,96171,96173,96175,96177,96179,96181,96183,96185,96187],{"class":30,"line":131},[28,96170,93381],{"class":34},[28,96172,39],{"class":38},[28,96174,95486],{"class":34},[28,96176,31572],{"class":5293},[28,96178,39],{"class":38},[28,96180,221],{"class":34},[28,96182,507],{"class":45},[28,96184,49],{"class":34},[28,96186,533],{"class":45},[28,96188,30573],{"class":34},[28,96190,96191],{"class":30,"line":1291},[28,96192,96193],{"class":34},"np.zeros_like(aa)\n",[188,96195,96197],{"id":96196},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96199,96200],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[188,96202,96204],{"id":96203},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96206,96207],{},"①empty()用法",[18,96209,96211],{"className":20,"code":96210,"language":22,"meta":23,"style":23},"numpy.empty(shape,dtype=float,order='c')\n",[25,96212,96213],{"__ignoreMap":23},[28,96214,96215,96218,96220,96222,96224,96226,96228,96230,96232],{"class":30,"line":31},[28,96216,96217],{"class":34},"numpy.empty(shape,",[28,96219,93575],{"class":5293},[28,96221,39],{"class":38},[28,96223,260],{"class":45},[28,96225,49],{"class":34},[28,96227,95356],{"class":5293},[28,96229,39],{"class":38},[28,96231,76103],{"class":320},[28,96233,227],{"class":34},[14,96235,96236],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96238,96239],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96241,96242],{},[1539,96243],{"alt":23,"src":96244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96246,96247],{},"②empty()用法",[18,96249,96251],{"className":20,"code":96250,"language":22,"meta":23,"style":23},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[25,96252,96253,96274,96286,96307,96312],{"__ignoreMap":23},[28,96254,96255,96257,96259,96262,96264,96266,96268,96270,96272],{"class":30,"line":31},[28,96256,1051],{"class":34},[28,96258,39],{"class":38},[28,96260,96261],{"class":34},"np.empty(",[28,96263,659],{"class":45},[28,96265,49],{"class":34},[28,96267,93575],{"class":5293},[28,96269,39],{"class":38},[28,96271,224],{"class":45},[28,96273,227],{"class":34},[28,96275,96276,96278,96280,96282,96284],{"class":30,"line":94},[28,96277,1026],{"class":34},[28,96279,39],{"class":38},[28,96281,93077],{"class":34},[28,96283,533],{"class":45},[28,96285,227],{"class":34},[28,96287,96288,96291,96293,96296,96298,96300,96303,96305],{"class":30,"line":109},[28,96289,96290],{"class":34},"np.add(",[28,96292,52],{"class":45},[28,96294,96295],{"class":34},",x,",[28,96297,93129],{"class":5293},[28,96299,39],{"class":38},[28,96301,96302],{"class":34},"y[:",[28,96304,533],{"class":45},[28,96306,4734],{"class":34},[28,96308,96309],{"class":30,"line":125},[28,96310,96311],{"class":105},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[28,96313,96314],{"class":30,"line":131},[28,96315,96316],{"class":34},"y\n",[14,96318,11591],{},[14,96320,96321],{},[1539,96322],{"alt":23,"src":96323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[18,96325,96327],{"className":20,"code":96326,"language":22,"meta":23,"style":23},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[25,96328,96329,96345,96365,96380],{"__ignoreMap":23},[28,96330,96331,96333,96335,96337,96339,96341,96343],{"class":30,"line":31},[28,96332,1026],{"class":34},[28,96334,39],{"class":38},[28,96336,93077],{"class":34},[28,96338,46],{"class":45},[28,96340,49],{"class":34},[28,96342,558],{"class":45},[28,96344,227],{"class":34},[28,96346,96347,96349,96351,96353,96355,96357,96359,96361,96363],{"class":30,"line":94},[28,96348,1051],{"class":34},[28,96350,39],{"class":38},[28,96352,96261],{"class":34},[28,96354,533],{"class":45},[28,96356,49],{"class":34},[28,96358,93575],{"class":5293},[28,96360,39],{"class":38},[28,96362,224],{"class":45},[28,96364,227],{"class":34},[28,96366,96367,96370,96372,96374,96376,96378],{"class":30,"line":109},[28,96368,96369],{"class":34},"np.add(x,",[28,96371,52],{"class":45},[28,96373,49],{"class":34},[28,96375,93129],{"class":5293},[28,96377,39],{"class":38},[28,96379,93524],{"class":34},[28,96381,96382],{"class":30,"line":125},[28,96383,96384],{"class":105},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96386,96387],{},"③empty_like()",[14,96389,96390],{},[365,96391,96392,96393,96398],{},"创建一个",[365,96394,96395],{},[365,96396,96397],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96400,96401,96404],{},[25,96402,96403],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96406,96407],{},[1539,96408],{"alt":23,"src":96409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[188,96411,96413],{"id":96412},"_264-用法","2.6.4 ？？用法",[14,96415,96416],{},"当想查看一个函数的参数时，可以通过？？来实现",[18,96418,96420],{"className":20,"code":96419,"language":22,"meta":23,"style":23},"np.full??\n",[25,96421,96422],{"__ignoreMap":23},[28,96423,96424,96427],{"class":30,"line":31},[28,96425,96426],{"class":34},"np.full",[28,96428,96429],{"class":77478},"??\n",[188,96431,96433],{"id":96432},"_265-full创建数组","2.6.5 full()创建数组",[18,96435,96437],{"className":20,"code":96436,"language":22,"meta":23,"style":23},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[25,96438,96439,96444],{"__ignoreMap":23},[28,96440,96441],{"class":30,"line":31},[28,96442,96443],{"class":34},"full(shape,fill_value)\n",[28,96445,96446],{"class":30,"line":94},[28,96447,96448],{"class":34},"创建全为某个指定值的数组\n",[14,96450,94604],{},[18,96452,96454],{"className":20,"code":96453,"language":22,"meta":23,"style":23},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[25,96455,96456,96461],{"__ignoreMap":23},[28,96457,96458],{"class":30,"line":31},[28,96459,96460],{"class":105},"#创建一个一维数组,以20进行填充\n",[28,96462,96463,96466,96468,96470,96472],{"class":30,"line":94},[28,96464,96465],{"class":34},"np.full(",[28,96467,659],{"class":45},[28,96469,49],{"class":34},[28,96471,102],{"class":45},[28,96473,227],{"class":34},[14,96475,93366],{},[18,96477,96479],{"className":20,"code":96478,"language":22,"meta":23,"style":23},"#创建二维数组\nnp.full((3,5),11)\n",[25,96480,96481,96485],{"__ignoreMap":23},[28,96482,96483],{"class":30,"line":31},[28,96484,94021],{"class":105},[28,96486,96487,96490,96492,96494,96496,96498,96500],{"class":30,"line":94},[28,96488,96489],{"class":34},"np.full((",[28,96491,57],{"class":45},[28,96493,49],{"class":34},[28,96495,533],{"class":45},[28,96497,42332],{"class":34},[28,96499,63],{"class":45},[28,96501,227],{"class":34},[14,96503,96504],{},"③full_like用法",[14,96506,96507],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96509,96510],{},"这里是指定填充而已",[18,96512,96514],{"className":20,"code":96513,"language":22,"meta":23,"style":23},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[25,96515,96516,96521,96545,96550],{"__ignoreMap":23},[28,96517,96518],{"class":30,"line":31},[28,96519,96520],{"class":105},"#创建一个指定形状数组\n",[28,96522,96523,96525,96527,96529,96531,96533,96535,96537,96539,96541,96543],{"class":30,"line":94},[28,96524,35],{"class":34},[28,96526,39],{"class":38},[28,96528,93077],{"class":34},[28,96530,46],{"class":45},[28,96532,49],{"class":34},[28,96534,539],{"class":45},[28,96536,93082],{"class":34},[28,96538,507],{"class":45},[28,96540,49],{"class":34},[28,96542,633],{"class":45},[28,96544,227],{"class":34},[28,96546,96547],{"class":30,"line":109},[28,96548,96549],{"class":105},"#进行指定填充\n",[28,96551,96552,96555,96557],{"class":30,"line":125},[28,96553,96554],{"class":34},"np.full_like(a,",[28,96556,659],{"class":45},[28,96558,227],{"class":34},[14,96560,11591],{},[14,96562,96563],{},[1539,96564],{"alt":23,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[188,96567,96569],{"id":96568},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22075,96571,96573],{"id":96572},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[18,96575,96577],{"className":20,"code":96576,"language":22,"meta":23,"style":23},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25,96578,96579,96596],{"__ignoreMap":23},[28,96580,96581,96584,96586,96588,96590,96592,96594],{"class":30,"line":31},[28,96582,96583],{"class":34},"np.eye(",[28,96585,507],{"class":45},[28,96587,49],{"class":34},[28,96589,93575],{"class":5293},[28,96591,39],{"class":38},[28,96593,224],{"class":45},[28,96595,227],{"class":34},[28,96597,96598],{"class":30,"line":94},[28,96599,96600],{"class":105},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22075,96602,96604],{"id":96603},"_2662-法2identity","2.6.6.2 法2：identity()",[18,96606,96608],{"className":20,"code":96607,"language":22,"meta":23,"style":23},"#identity()\nnp.identity(5,dtype=int)\n",[25,96609,96610,96615],{"__ignoreMap":23},[28,96611,96612],{"class":30,"line":31},[28,96613,96614],{"class":105},"#identity()\n",[28,96616,96617,96620,96622,96624,96626,96628,96630],{"class":30,"line":94},[28,96618,96619],{"class":34},"np.identity(",[28,96621,533],{"class":45},[28,96623,49],{"class":34},[28,96625,93575],{"class":5293},[28,96627,39],{"class":38},[28,96629,224],{"class":45},[28,96631,227],{"class":34},[14,96633,96634],{},"两个函数是有区别的",[14,96636,96637],{},[1539,96638],{"alt":23,"src":96639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96641,96642],{},[1539,96643],{"alt":23,"src":96644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[18,96646,96648],{"className":20,"code":96647,"language":22,"meta":23,"style":23},"# 创建一个 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",[25,96649,96650,96655,96667,96672,96677,96682,96687,96691,96696,96716,96720,96725,96730],{"__ignoreMap":23},[28,96651,96652],{"class":30,"line":31},[28,96653,96654],{"class":105},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[28,96656,96657,96659,96661,96663,96665],{"class":30,"line":94},[28,96658,96583],{"class":34},[28,96660,57],{"class":45},[28,96662,12512],{"class":34},[28,96664,507],{"class":45},[28,96666,227],{"class":34},[28,96668,96669],{"class":30,"line":109},[28,96670,96671],{"class":105},"# 输出:\n",[28,96673,96674],{"class":30,"line":125},[28,96675,96676],{"class":105},"# [[1. 0. 0. 0.]\n",[28,96678,96679],{"class":30,"line":131},[28,96680,96681],{"class":105},"#  [0. 1. 0. 0.]\n",[28,96683,96684],{"class":30,"line":1291},[28,96685,96686],{"class":105},"#  [0. 0. 1. 0.]]\n",[28,96688,96689],{"class":30,"line":1297},[28,96690,2477],{"emptyLinePlaceholder":144},[28,96692,96693],{"class":30,"line":1388},[28,96694,96695],{"class":105},"# 对角线向上偏移1\n",[28,96697,96698,96700,96702,96704,96706,96708,96710,96712,96714],{"class":30,"line":1394},[28,96699,96583],{"class":34},[28,96701,57],{"class":45},[28,96703,12512],{"class":34},[28,96705,507],{"class":45},[28,96707,12512],{"class":34},[28,96709,705],{"class":5293},[28,96711,39],{"class":38},[28,96713,46],{"class":45},[28,96715,227],{"class":34},[28,96717,96718],{"class":30,"line":1406},[28,96719,96671],{"class":105},[28,96721,96722],{"class":30,"line":1689},[28,96723,96724],{"class":105},"# [[0. 1. 0. 0.]\n",[28,96726,96727],{"class":30,"line":1694},[28,96728,96729],{"class":105},"#  [0. 0. 1. 0.]\n",[28,96731,96732],{"class":30,"line":1700},[28,96733,96734],{"class":105},"#  [0. 0. 0. 1.]]\n",[188,96736,96738],{"id":96737},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[18,96740,96742],{"className":20,"code":96741,"language":22,"meta":23,"style":23},"#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",[25,96743,96744,96749,96753,96758,96763,96768,96773,96778,96783,96788,96793],{"__ignoreMap":23},[28,96745,96746],{"class":30,"line":31},[28,96747,96748],{"class":105},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[28,96750,96751],{"class":30,"line":94},[28,96752,95757],{"class":320},[28,96754,96755],{"class":30,"line":109},[28,96756,96757],{"class":320},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[28,96759,96760],{"class":30,"line":125},[28,96761,96762],{"class":320},"参数介绍：\n",[28,96764,96765],{"class":30,"line":131},[28,96766,96767],{"class":320},"start：序列的起始值\n",[28,96769,96770],{"class":30,"line":1291},[28,96771,96772],{"class":320},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[28,96774,96775],{"class":30,"line":1297},[28,96776,96777],{"class":320},"num：要生长的等步长的样本数量，默认为50\n",[28,96779,96780],{"class":30,"line":1388},[28,96781,96782],{"class":320},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[28,96784,96785],{"class":30,"line":1394},[28,96786,96787],{"class":320},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[28,96789,96790],{"class":30,"line":1406},[28,96791,96792],{"class":320},"dtype：ndarry的数据类型\n",[28,96794,96795],{"class":30,"line":1689},[28,96796,95757],{"class":320},[14,96798,96799],{},[1539,96800],{"alt":23,"src":96801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96803,96804],{},"这里num=是可以省略的",[14,96806,96807],{},"也就是下方两行代码结果是一模一样的",[18,96809,96811],{"className":20,"code":96810,"language":22,"meta":23,"style":23},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[25,96812,96813,96830],{"__ignoreMap":23},[28,96814,96815,96818,96820,96822,96824,96826,96828],{"class":30,"line":31},[28,96816,96817],{"class":34},"np.linspace(",[28,96819,46],{"class":45},[28,96821,49],{"class":34},[28,96823,533],{"class":45},[28,96825,49],{"class":34},[28,96827,533],{"class":45},[28,96829,227],{"class":34},[28,96831,96832,96834,96836,96838,96840,96842,96844,96846,96848],{"class":30,"line":94},[28,96833,96817],{"class":34},[28,96835,46],{"class":45},[28,96837,49],{"class":34},[28,96839,533],{"class":45},[28,96841,49],{"class":34},[28,96843,1742],{"class":5293},[28,96845,39],{"class":38},[28,96847,533],{"class":45},[28,96849,227],{"class":34},[188,96851,96853],{"id":96852},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[18,96855,96857],{"className":20,"code":96856,"language":22,"meta":23,"style":23},"#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",[25,96858,96859,96864,96868,96873,96878,96883,96888,96892,96897,96902,96906],{"__ignoreMap":23},[28,96860,96861],{"class":30,"line":31},[28,96862,96863],{"class":105},"#logspace函数用于创建一个等比数列，格式如下：\n",[28,96865,96866],{"class":30,"line":94},[28,96867,95757],{"class":320},[28,96869,96870],{"class":30,"line":109},[28,96871,96872],{"class":320},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[28,96874,96875],{"class":30,"line":125},[28,96876,96877],{"class":320},"参数为：\n",[28,96879,96880],{"class":30,"line":131},[28,96881,96882],{"class":320},"start:序列的起始位置为：base**start\n",[28,96884,96885],{"class":30,"line":1291},[28,96886,96887],{"class":320},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[28,96889,96890],{"class":30,"line":1297},[28,96891,96777],{"class":320},[28,96893,96894],{"class":30,"line":1388},[28,96895,96896],{"class":320},"endpoint：是否包含 stop 这个值，默认是 True\n",[28,96898,96899],{"class":30,"line":1394},[28,96900,96901],{"class":320},"base：对数的底数，默认是 10（常见对数）\n",[28,96903,96904],{"class":30,"line":1406},[28,96905,96792],{"class":320},[28,96907,96908],{"class":30,"line":1689},[28,96909,95757],{"class":320},[14,96911,96912],{},[1539,96913],{"alt":23,"src":96914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96916,96917],{},"logspace()函数中的num参数也是可以不写num=的",[14,96919,96920],{},"endpoint是不可以省略的",[136,96922,96923],{},"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":23,"searchDepth":94,"depth":94,"links":96925},[96926,96930,96935,96939,96943,96944],{"id":95315,"depth":94,"text":95316,"children":96927},[96928,96929],{"id":95319,"depth":109,"text":95320},{"id":95392,"depth":109,"text":95393},{"id":95424,"depth":94,"text":95425,"children":96931},[96932,96933,96934],{"id":95428,"depth":109,"text":95429},{"id":95610,"depth":109,"text":95611},{"id":95688,"depth":109,"text":95689},{"id":95723,"depth":94,"text":95724,"children":96936},[96937,96938],{"id":95727,"depth":109,"text":95728},{"id":95784,"depth":109,"text":95785},{"id":95880,"depth":94,"text":95881,"children":96940},[96941,96942],{"id":95884,"depth":109,"text":95885},{"id":95896,"depth":109,"text":95897},{"id":95930,"depth":94,"text":95931},{"id":95967,"depth":94,"text":95968,"children":96945},[96946,96947,96948,96949,96950,96951,96952,96953],{"id":95971,"depth":109,"text":95972},{"id":96196,"depth":109,"text":96197},{"id":96203,"depth":109,"text":96204},{"id":96412,"depth":109,"text":96413},{"id":96432,"depth":109,"text":96433},{"id":96568,"depth":109,"text":96569},{"id":96737,"depth":109,"text":96738},{"id":96852,"depth":109,"text":96853},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95307,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96960,"title":96961,"body":96962,"description":141,"extension":142,"meta":97055,"navigation":144,"path":97056,"seo":97057,"stem":97058,"__hash__":97059},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96963,"toc":97053},[96964,96967,96970,96973,96976,96979,96982,96985,96988,96991,96994,96997,96999,97002,97005,97010,97013,97016,97050],[10,96965,96961],{"id":96966},"_20魔法命令mprun",[14,96968,96969],{},"逐行分析数据内存的使用情况",[14,96971,96972],{},"语法格式：",[14,96974,96975],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96977,96978],{},"分析结果列如下：",[14,96980,96981],{},"Line行号",[14,96983,96984],{},"Mem usage内存使用大小",[14,96986,96987],{},"increment内存增量",[14,96989,96990],{},"Line content代码内容",[14,96992,96993],{},"补充说明：",[14,96995,96996],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96998,95262],{},[14,97000,97001],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97003,97004],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97006,97007],{},[1539,97008],{"alt":23,"src":97009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97011,97012],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97014,97015],{},"这时候需要重新加载模块",[18,97017,97019],{"className":20,"code":97018,"language":22,"meta":23,"style":23},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[25,97020,97021,97026,97033,97038],{"__ignoreMap":23},[28,97022,97023],{"class":30,"line":31},[28,97024,97025],{"class":105},"#重新加载模块\n",[28,97027,97028,97030],{"class":30,"line":94},[28,97029,30468],{"class":38},[28,97031,97032],{"class":34}," importlib\n",[28,97034,97035],{"class":30,"line":109},[28,97036,97037],{"class":34},"importlib.reload(mprun_test)\n",[28,97039,97040,97042,97045,97047],{"class":30,"line":125},[28,97041,542],{"class":38},[28,97043,97044],{"class":34},"mprun ",[28,97046,742],{"class":38},[28,97048,97049],{"class":34},"f mprun_test.fun_test mprun_test.fun_test()\n",[136,97051,97052],{},"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":23,"searchDepth":94,"depth":94,"links":97054},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96961,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97061,"title":97062,"body":97063,"description":141,"extension":142,"meta":97080,"navigation":144,"path":97081,"seo":97082,"stem":97083,"__hash__":97084},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97064,"toc":97078},[97065,97068,97073],[10,97066,97062],{"id":97067},"_3一维数组的索引和切片",[14,97069,97070],{},[1539,97071],{"alt":23,"src":97072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97074,97075],{},[1539,97076],{"alt":23,"src":97077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":23,"searchDepth":94,"depth":94,"links":97079},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97062,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97086,"title":97087,"body":97088,"description":141,"extension":142,"meta":97571,"navigation":144,"path":97572,"seo":97573,"stem":97574,"__hash__":97575},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97089,"toc":97569},[97090,97093,97096,97101,97134,97137,97175,97178,97212,97215,97320,97323,97360,97363,97464,97467,97518,97521,97563,97566],[10,97091,97087],{"id":97092},"_4二维数组的索引与切片",[14,97094,97095],{},"①获取指定单个元素",[14,97097,97098],{},[1539,97099],{"alt":23,"src":97100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[18,97102,97104],{"className":20,"code":97103,"language":22,"meta":23,"style":23},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[25,97105,97106,97111,97116,97121],{"__ignoreMap":23},[28,97107,97108],{"class":30,"line":31},[28,97109,97110],{"class":105},"#获取元素9\n",[28,97112,97113],{"class":30,"line":94},[28,97114,97115],{"class":105},"#先获取所在行，再获取所在列\n",[28,97117,97118],{"class":30,"line":109},[28,97119,97120],{"class":105},"#数组[行索引号，列索引号]\n",[28,97122,97123,97126,97128,97130,97132],{"class":30,"line":125},[28,97124,97125],{"class":34},"a[",[28,97127,46],{"class":45},[28,97129,49],{"class":34},[28,97131,52],{"class":45},[28,97133,33322],{"class":34},[14,97135,97136],{},"②获取整行元素",[18,97138,97140],{"className":20,"code":97139,"language":22,"meta":23,"style":23},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[25,97141,97142,97147,97152,97160,97165],{"__ignoreMap":23},[28,97143,97144],{"class":30,"line":31},[28,97145,97146],{"class":105},"#获取整行 数组[行索引号]\n",[28,97148,97149],{"class":30,"line":94},[28,97150,97151],{"class":105},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[28,97153,97154,97156,97158],{"class":30,"line":109},[28,97155,97125],{"class":34},[28,97157,52],{"class":45},[28,97159,33322],{"class":34},[28,97161,97162],{"class":30,"line":125},[28,97163,97164],{"class":105},"#也可以负索引获取一行\n",[28,97166,97167,97169,97171,97173],{"class":30,"line":131},[28,97168,97125],{"class":34},[28,97170,742],{"class":38},[28,97172,46],{"class":45},[28,97174,33322],{"class":34},[14,97176,97177],{},"③获取整列元素",[18,97179,97181],{"className":20,"code":97180,"language":22,"meta":23,"style":23},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[25,97182,97183,97188,97197,97202],{"__ignoreMap":23},[28,97184,97185],{"class":30,"line":31},[28,97186,97187],{"class":105},"#获取整列 数组名[:,列索引]\n",[28,97189,97190,97193,97195],{"class":30,"line":94},[28,97191,97192],{"class":34},"a[:,",[28,97194,52],{"class":45},[28,97196,33322],{"class":34},[28,97198,97199],{"class":30,"line":109},[28,97200,97201],{"class":105},"#也可以负索引获取一列\n",[28,97203,97204,97206,97208,97210],{"class":30,"line":125},[28,97205,97192],{"class":34},[28,97207,742],{"class":38},[28,97209,46],{"class":45},[28,97211,33322],{"class":34},[14,97213,97214],{},"④部分行部分列的元素",[18,97216,97218],{"className":20,"code":97217,"language":22,"meta":23,"style":23},"#部分行部分列 数组名[行切片，列切片]\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",[25,97219,97220,97225,97235,97239,97243,97248,97253,97257,97269,97273,97277,97282,97287,97292,97297,97301,97306],{"__ignoreMap":23},[28,97221,97222],{"class":30,"line":31},[28,97223,97224],{"class":105},"#部分行部分列 数组名[行切片，列切片]\n",[28,97226,97227,97230,97232],{"class":30,"line":94},[28,97228,97229],{"class":34},"a[:",[28,97231,52],{"class":45},[28,97233,97234],{"class":34},",:]\n",[28,97236,97237],{"class":30,"line":109},[28,97238,128],{"class":105},[28,97240,97241],{"class":30,"line":125},[28,97242,94002],{"class":320},[28,97244,97245],{"class":30,"line":131},[28,97246,97247],{"class":320},"array([[ 1,  2,  3,  4,  5,  6],\n",[28,97249,97250],{"class":30,"line":1291},[28,97251,97252],{"class":320},"       [ 7,  8,  9, 10, 11, 12]])\n",[28,97254,97255],{"class":30,"line":1297},[28,97256,94002],{"class":320},[28,97258,97259,97261,97263,97265,97267],{"class":30,"line":1388},[28,97260,97192],{"class":34},[28,97262,46],{"class":45},[28,97264,1065],{"class":34},[28,97266,507],{"class":45},[28,97268,33322],{"class":34},[28,97270,97271],{"class":30,"line":1394},[28,97272,128],{"class":105},[28,97274,97275],{"class":30,"line":1406},[28,97276,94002],{"class":320},[28,97278,97279],{"class":30,"line":1689},[28,97280,97281],{"class":320},"array([[ 2,  3,  4],\n",[28,97283,97284],{"class":30,"line":1694},[28,97285,97286],{"class":320},"       [ 8,  9, 10],\n",[28,97288,97289],{"class":30,"line":1700},[28,97290,97291],{"class":320},"       [14, 15, 16],\n",[28,97293,97294],{"class":30,"line":1705},[28,97295,97296],{"class":320},"       [20, 21, 22]])\n",[28,97298,97299],{"class":30,"line":1719},[28,97300,94002],{"class":320},[28,97302,97303],{"class":30,"line":1724},[28,97304,97305],{"class":105},"#对列行同时进行切片，使用了step参数\n",[28,97307,97308,97311,97313,97316,97318],{"class":30,"line":1730},[28,97309,97310],{"class":34},"a[::",[28,97312,52],{"class":45},[28,97314,97315],{"class":34},",::",[28,97317,52],{"class":45},[28,97319,33322],{"class":34},[14,97321,97322],{},"⑤同时获取两个元素",[18,97324,97326],{"className":20,"code":97325,"language":22,"meta":23,"style":23},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[25,97327,97328,97333,97338],{"__ignoreMap":23},[28,97329,97330],{"class":30,"line":31},[28,97331,97332],{"class":105},"#同时获取第三行第二列，第四行第一列\n",[28,97334,97335],{"class":30,"line":94},[28,97336,97337],{"class":105},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[28,97339,97340,97343,97345,97347,97349,97351,97353,97355,97357],{"class":30,"line":109},[28,97341,97342],{"class":34},"a[(",[28,97344,52],{"class":45},[28,97346,49],{"class":34},[28,97348,57],{"class":45},[28,97350,42323],{"class":34},[28,97352,46],{"class":45},[28,97354,49],{"class":34},[28,97356,407],{"class":45},[28,97358,97359],{"class":34},")]\n",[14,97361,97362],{},"⑥切片，对行进行反向获取",[18,97364,97366],{"className":20,"code":97365,"language":22,"meta":23,"style":23},"#切片 对所有行进行反向获取\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",[25,97367,97368,97373,97383,97387,97391,97396,97401,97406,97411,97415,97420,97436,97440,97445,97450,97455,97460],{"__ignoreMap":23},[28,97369,97370],{"class":30,"line":31},[28,97371,97372],{"class":105},"#切片 对所有行进行反向获取\n",[28,97374,97375,97377,97379,97381],{"class":30,"line":94},[28,97376,97310],{"class":34},[28,97378,742],{"class":38},[28,97380,46],{"class":45},[28,97382,33322],{"class":34},[28,97384,97385],{"class":30,"line":109},[28,97386,128],{"class":105},[28,97388,97389],{"class":30,"line":125},[28,97390,94002],{"class":320},[28,97392,97393],{"class":30,"line":131},[28,97394,97395],{"class":320},"array([[19, 20, 21, 22, 23, 24],\n",[28,97397,97398],{"class":30,"line":1291},[28,97399,97400],{"class":320},"       [13, 14, 15, 16, 17, 18],\n",[28,97402,97403],{"class":30,"line":1297},[28,97404,97405],{"class":320},"       [ 7,  8,  9, 10, 11, 12],\n",[28,97407,97408],{"class":30,"line":1388},[28,97409,97410],{"class":320},"       [ 1,  2,  3,  4,  5,  6]])\n",[28,97412,97413],{"class":30,"line":1394},[28,97414,94002],{"class":320},[28,97416,97417],{"class":30,"line":1406},[28,97418,97419],{"class":105},"#对行列都进行反向切片获取\n",[28,97421,97422,97424,97426,97428,97430,97432,97434],{"class":30,"line":1689},[28,97423,97310],{"class":34},[28,97425,742],{"class":38},[28,97427,46],{"class":45},[28,97429,97315],{"class":34},[28,97431,742],{"class":38},[28,97433,46],{"class":45},[28,97435,33322],{"class":34},[28,97437,97438],{"class":30,"line":1694},[28,97439,94002],{"class":320},[28,97441,97442],{"class":30,"line":1700},[28,97443,97444],{"class":320},"array([[24, 23, 22, 21, 20, 19],\n",[28,97446,97447],{"class":30,"line":1705},[28,97448,97449],{"class":320},"       [18, 17, 16, 15, 14, 13],\n",[28,97451,97452],{"class":30,"line":1719},[28,97453,97454],{"class":320},"       [12, 11, 10,  9,  8,  7],\n",[28,97456,97457],{"class":30,"line":1724},[28,97458,97459],{"class":320},"       [ 6,  5,  4,  3,  2,  1]])\n",[28,97461,97462],{"class":30,"line":1730},[28,97463,94002],{"class":320},[14,97465,97466],{},"⑦修改元素",[18,97468,97470],{"className":20,"code":97469,"language":22,"meta":23,"style":23},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[25,97471,97472,97477,97495,97500],{"__ignoreMap":23},[28,97473,97474],{"class":30,"line":31},[28,97475,97476],{"class":105},"#获取前两行和前两列\n",[28,97478,97479,97482,97484,97486,97488,97491,97493],{"class":30,"line":94},[28,97480,97481],{"class":34},"sub_a",[28,97483,39],{"class":38},[28,97485,97229],{"class":34},[28,97487,52],{"class":45},[28,97489,97490],{"class":34},",:",[28,97492,52],{"class":45},[28,97494,33322],{"class":34},[28,97496,97497],{"class":30,"line":109},[28,97498,97499],{"class":105},"#修改sub_a第一个元素的值\n",[28,97501,97502,97505,97507,97509,97511,97513,97515],{"class":30,"line":125},[28,97503,97504],{"class":34},"sub_a[",[28,97506,407],{"class":45},[28,97508,49],{"class":34},[28,97510,407],{"class":45},[28,97512,119],{"class":34},[28,97514,39],{"class":38},[28,97516,97517],{"class":45},"100\n",[14,97519,97520],{},"⑧数组复制copy()",[18,97522,97524],{"className":20,"code":97523,"language":22,"meta":23,"style":23},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[25,97525,97526,97531,97541,97546],{"__ignoreMap":23},[28,97527,97528],{"class":30,"line":31},[28,97529,97530],{"class":105},"#数组复制\n",[28,97532,97533,97536,97538],{"class":30,"line":94},[28,97534,97535],{"class":34},"copy_a",[28,97537,39],{"class":38},[28,97539,97540],{"class":34},"np.copy(sub_a)\n",[28,97542,97543],{"class":30,"line":109},[28,97544,97545],{"class":105},"#修改copy_a后不影响原数组\n",[28,97547,97548,97551,97553,97555,97557,97559,97561],{"class":30,"line":125},[28,97549,97550],{"class":34},"copy_a[",[28,97552,407],{"class":45},[28,97554,49],{"class":34},[28,97556,407],{"class":45},[28,97558,119],{"class":34},[28,97560,39],{"class":38},[28,97562,97517],{"class":45},[14,97564,97565],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[136,97567,97568],{},"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":23,"searchDepth":94,"depth":94,"links":97570},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97087,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97577,"title":97578,"body":97579,"description":141,"extension":142,"meta":98071,"navigation":144,"path":98072,"seo":98073,"stem":98074,"__hash__":98075},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97580,"toc":98063},[97581,97584,97588,97591,97594,97647,97650,97675,97678,97697,97717,97720,97736,97740,97786,97790,97832,97836,97839,97842,97845,97848,97851,97913,97973,97977,97980,98037,98041,98046,98055,98060],[10,97582,97578],{"id":97583},"_5改变数组的维度",[159,97585,97587],{"id":97586},"_51-使用reshape","5.1 使用reshape()",[14,97589,97590],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97592,97593],{},"①一维数组转换为二维数组",[18,97595,97597],{"className":20,"code":97596,"language":22,"meta":23,"style":23},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[25,97598,97599,97615,97620,97625,97630],{"__ignoreMap":23},[28,97600,97601,97603,97605,97607,97609,97611,97613],{"class":30,"line":31},[28,97602,35],{"class":34},[28,97604,39],{"class":38},[28,97606,93077],{"class":34},[28,97608,46],{"class":45},[28,97610,49],{"class":34},[28,97612,73],{"class":45},[28,97614,227],{"class":34},[28,97616,97617],{"class":30,"line":94},[28,97618,97619],{"class":105},"#将一维数组进行转换\n",[28,97621,97622],{"class":30,"line":109},[28,97623,97624],{"class":105},"#注意点：元素个数不可以变\n",[28,97626,97627],{"class":30,"line":125},[28,97628,97629],{"class":105},"#转换维度要保持一致，不一致就异常！！！\n",[28,97631,97632,97634,97636,97639,97641,97643,97645],{"class":30,"line":131},[28,97633,93381],{"class":34},[28,97635,39],{"class":38},[28,97637,97638],{"class":34},"a.reshape(",[28,97640,52],{"class":45},[28,97642,49],{"class":34},[28,97644,558],{"class":45},[28,97646,227],{"class":34},[14,97648,97649],{},"②一维数组转换为三维数组",[18,97651,97653],{"className":20,"code":97652,"language":22,"meta":23,"style":23},"aaa=a.reshape(2,3,2)\n",[25,97654,97655],{"__ignoreMap":23},[28,97656,97657,97659,97661,97663,97665,97667,97669,97671,97673],{"class":30,"line":31},[28,97658,95580],{"class":34},[28,97660,39],{"class":38},[28,97662,97638],{"class":34},[28,97664,52],{"class":45},[28,97666,49],{"class":34},[28,97668,57],{"class":45},[28,97670,49],{"class":34},[28,97672,52],{"class":45},[28,97674,227],{"class":34},[14,97676,97677],{},"③二维数组转化为一维数组",[18,97679,97681],{"className":20,"code":97680,"language":22,"meta":23,"style":23},"#知道元素个数：\naa.reshape(12)\n",[25,97682,97683,97688],{"__ignoreMap":23},[28,97684,97685],{"class":30,"line":31},[28,97686,97687],{"class":105},"#知道元素个数：\n",[28,97689,97690,97693,97695],{"class":30,"line":94},[28,97691,97692],{"class":34},"aa.reshape(",[28,97694,68],{"class":45},[28,97696,227],{"class":34},[18,97698,97700],{"className":20,"code":97699,"language":22,"meta":23,"style":23},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[25,97701,97702,97707],{"__ignoreMap":23},[28,97703,97704],{"class":30,"line":31},[28,97705,97706],{"class":105},"#不知道元素个数，参数传递-1\n",[28,97708,97709,97711,97713,97715],{"class":30,"line":94},[28,97710,97692],{"class":34},[28,97712,742],{"class":38},[28,97714,46],{"class":45},[28,97716,227],{"class":34},[14,97718,97719],{},"④三维数组转换为一维数组",[18,97721,97723],{"className":20,"code":97722,"language":22,"meta":23,"style":23},"aaa.reshape(-1)\n",[25,97724,97725],{"__ignoreMap":23},[28,97726,97727,97730,97732,97734],{"class":30,"line":31},[28,97728,97729],{"class":34},"aaa.reshape(",[28,97731,742],{"class":38},[28,97733,46],{"class":45},[28,97735,227],{"class":34},[159,97737,97739],{"id":97738},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[18,97741,97743],{"className":20,"code":97742,"language":22,"meta":23,"style":23},"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",[25,97744,97745,97772,97777,97781],{"__ignoreMap":23},[28,97746,97747,97749,97751,97753,97755,97757,97759,97761,97763,97765,97767,97769],{"class":30,"line":31},[28,97748,93381],{"class":34},[28,97750,39],{"class":38},[28,97752,93077],{"class":34},[28,97754,46],{"class":45},[28,97756,49],{"class":34},[28,97758,73],{"class":45},[28,97760,93082],{"class":34},[28,97762,52],{"class":45},[28,97764,49],{"class":34},[28,97766,558],{"class":45},[28,97768,642],{"class":34},[28,97770,97771],{"class":105},"#转换为2行6列的数组\n",[28,97773,97774],{"class":30,"line":94},[28,97775,97776],{"class":34},"aa.revel()\n",[28,97778,97779],{"class":30,"line":109},[28,97780,128],{"class":105},[28,97782,97783],{"class":30,"line":125},[28,97784,97785],{"class":105},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[159,97787,97789],{"id":97788},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[18,97791,97793],{"className":20,"code":97792,"language":22,"meta":23,"style":23},"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",[25,97794,97795,97819,97824,97828],{"__ignoreMap":23},[28,97796,97797,97799,97801,97803,97805,97807,97809,97811,97813,97815,97817],{"class":30,"line":31},[28,97798,93381],{"class":34},[28,97800,39],{"class":38},[28,97802,93077],{"class":34},[28,97804,46],{"class":45},[28,97806,49],{"class":34},[28,97808,73],{"class":45},[28,97810,93082],{"class":34},[28,97812,52],{"class":45},[28,97814,49],{"class":34},[28,97816,558],{"class":45},[28,97818,227],{"class":34},[28,97820,97821],{"class":30,"line":94},[28,97822,97823],{"class":34},"aa.flatten()\n",[28,97825,97826],{"class":30,"line":109},[28,97827,128],{"class":105},[28,97829,97830],{"class":30,"line":125},[28,97831,97785],{"class":105},[159,97833,97835],{"id":97834},"_54-使用resize","5.4 使用resize()",[14,97837,97838],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97840,97841],{},"通过resize方法可以改变数组的维度",[14,97843,97844],{},"#resize修改数组维度",[14,97846,97847],{},"#以元组的形式指定形状",[14,97849,97850],{},"#改变的是原数组",[18,97852,97854],{"className":20,"code":97853,"language":22,"meta":23,"style":23},"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",[25,97855,97856,97872,97892,97905,97909],{"__ignoreMap":23},[28,97857,97858,97860,97862,97864,97866,97868,97870],{"class":30,"line":31},[28,97859,35],{"class":34},[28,97861,39],{"class":38},[28,97863,93077],{"class":34},[28,97865,46],{"class":45},[28,97867,49],{"class":34},[28,97869,73],{"class":45},[28,97871,227],{"class":34},[28,97873,97874,97877,97879,97881,97883,97885,97887,97889],{"class":30,"line":94},[28,97875,97876],{"class":34},"a.shape",[28,97878,39],{"class":38},[28,97880,221],{"class":34},[28,97882,52],{"class":45},[28,97884,49],{"class":34},[28,97886,558],{"class":45},[28,97888,642],{"class":34},[28,97890,97891],{"class":105},"#改变了原数组\n",[28,97893,97894,97896,97898,97901,97903],{"class":30,"line":109},[28,97895,35],{"class":34},[28,97897,39],{"class":38},[28,97899,97900],{"class":34},"resize((",[28,97902,68],{"class":45},[28,97904,30573],{"class":34},[28,97906,97907],{"class":30,"line":125},[28,97908,128],{"class":105},[28,97910,97911],{"class":30,"line":131},[28,97912,97785],{"class":105},[18,97914,97916],{"className":20,"code":97915,"language":22,"meta":23,"style":23},"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",[25,97917,97918,97931,97935,97939,97944,97949,97954,97959,97964,97969],{"__ignoreMap":23},[28,97919,97920,97923,97925,97927,97929],{"class":30,"line":31},[28,97921,97922],{"class":34},"a.resize((",[28,97924,558],{"class":45},[28,97926,49],{"class":34},[28,97928,52],{"class":45},[28,97930,30573],{"class":34},[28,97932,97933],{"class":30,"line":94},[28,97934,128],{"class":105},[28,97936,97937],{"class":30,"line":109},[28,97938,94002],{"class":320},[28,97940,97941],{"class":30,"line":125},[28,97942,97943],{"class":320},"array([[ 1,  2],\n",[28,97945,97946],{"class":30,"line":131},[28,97947,97948],{"class":320},"       [ 3,  4],\n",[28,97950,97951],{"class":30,"line":1291},[28,97952,97953],{"class":320},"       [ 5,  6],\n",[28,97955,97956],{"class":30,"line":1297},[28,97957,97958],{"class":320},"       [ 7,  8],\n",[28,97960,97961],{"class":30,"line":1388},[28,97962,97963],{"class":320},"       [ 9, 10],\n",[28,97965,97966],{"class":30,"line":1394},[28,97967,97968],{"class":320},"       [11, 12]])\n",[28,97970,97971],{"class":30,"line":1406},[28,97972,94002],{"class":320},[159,97974,97976],{"id":97975},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97978,97979],{},"改变了原数组",[18,97981,97983],{"className":20,"code":97982,"language":22,"meta":23,"style":23},"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",[25,97984,97985,98001,98017,98021,98025,98029,98033],{"__ignoreMap":23},[28,97986,97987,97989,97991,97993,97995,97997,97999],{"class":30,"line":31},[28,97988,35],{"class":34},[28,97990,39],{"class":38},[28,97992,93077],{"class":34},[28,97994,46],{"class":45},[28,97996,49],{"class":34},[28,97998,73],{"class":45},[28,98000,227],{"class":34},[28,98002,98003,98005,98007,98009,98011,98013,98015],{"class":30,"line":94},[28,98004,97876],{"class":34},[28,98006,39],{"class":38},[28,98008,221],{"class":34},[28,98010,52],{"class":45},[28,98012,49],{"class":34},[28,98014,558],{"class":45},[28,98016,227],{"class":34},[28,98018,98019],{"class":30,"line":109},[28,98020,128],{"class":105},[28,98022,98023],{"class":30,"line":125},[28,98024,94002],{"class":320},[28,98026,98027],{"class":30,"line":131},[28,98028,97247],{"class":320},[28,98030,98031],{"class":30,"line":1291},[28,98032,97252],{"class":320},[28,98034,98035],{"class":30,"line":1297},[28,98036,94002],{"class":320},[159,98038,98040],{"id":98039},"_56-重要比较","5.6 重要比较：",[14,98042,98043],{},[1539,98044],{"alt":23,"src":98045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98047,98048,98049,98051,98052,98054],{},"口诀：NumPy 函数要么用 ",[25,98050,96022],{},"，要么用 ",[25,98053,31572],{},"，创建结构用 shape，造数据用 size",[14,98056,98057],{},[1539,98058],{"alt":23,"src":98059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[136,98061,98062],{},"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":23,"searchDepth":94,"depth":94,"links":98064},[98065,98066,98067,98068,98069,98070],{"id":97586,"depth":94,"text":97587},{"id":97738,"depth":94,"text":97739},{"id":97788,"depth":94,"text":97789},{"id":97834,"depth":94,"text":97835},{"id":97975,"depth":94,"text":97976},{"id":98039,"depth":94,"text":98040},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97578,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98077,"title":98078,"body":98079,"description":141,"extension":142,"meta":99151,"navigation":144,"path":99152,"seo":99153,"stem":99154,"__hash__":99155},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98080,"toc":99145},[98081,98084,98088,98091,98094,98097,98162,98165,98205,98208,98290,98293,98298,98320,98322,98327,98332,98335,98338,98493,98496,98698,98702,98705,98708,98776,98778,98783,98786,98789,98869,98873,98876,98878,98951,98953,98958,98960,99040,99044,99047,99050,99053,99056,99059,99062,99142],[10,98082,98078],{"id":98083},"_6数组的拼接",[159,98085,98087],{"id":98086},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98089,98090],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98092,98093],{},"函数内部传两个数列构成的数列或者元组",[14,98095,98096],{},"①一维数组的拼接",[18,98098,98100],{"className":20,"code":98099,"language":22,"meta":23,"style":23},"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",[25,98101,98102,98122,98142,98147,98152,98157],{"__ignoreMap":23},[28,98103,98104,98106,98108,98110,98112,98114,98116,98118,98120],{"class":30,"line":31},[28,98105,35],{"class":34},[28,98107,39],{"class":38},[28,98109,93099],{"class":34},[28,98111,46],{"class":45},[28,98113,49],{"class":34},[28,98115,52],{"class":45},[28,98117,49],{"class":34},[28,98119,57],{"class":45},[28,98121,4734],{"class":34},[28,98123,98124,98126,98128,98130,98132,98134,98136,98138,98140],{"class":30,"line":94},[28,98125,477],{"class":34},[28,98127,39],{"class":38},[28,98129,93099],{"class":34},[28,98131,507],{"class":45},[28,98133,49],{"class":34},[28,98135,533],{"class":45},[28,98137,49],{"class":34},[28,98139,558],{"class":45},[28,98141,4734],{"class":34},[28,98143,98144],{"class":30,"line":109},[28,98145,98146],{"class":105},"#调用concatenate进行数组拼接\n",[28,98148,98149],{"class":30,"line":125},[28,98150,98151],{"class":34},"np.concatenate((a,b))\n",[28,98153,98154],{"class":30,"line":131},[28,98155,98156],{"class":105},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[28,98158,98159],{"class":30,"line":1291},[28,98160,98161],{"class":105},"#np.concatenate([a,b])\n",[14,98163,98164],{},"②一维多个数组拼接",[18,98166,98168],{"className":20,"code":98167,"language":22,"meta":23,"style":23},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[25,98169,98170,98175,98195,98200],{"__ignoreMap":23},[28,98171,98172],{"class":30,"line":31},[28,98173,98174],{"class":105},"#也可以多个数组进行拼接\n",[28,98176,98177,98179,98181,98183,98185,98187,98189,98191,98193],{"class":30,"line":94},[28,98178,502],{"class":34},[28,98180,39],{"class":38},[28,98182,93099],{"class":34},[28,98184,659],{"class":45},[28,98186,49],{"class":34},[28,98188,63],{"class":45},[28,98190,49],{"class":34},[28,98192,73],{"class":45},[28,98194,4734],{"class":34},[28,98196,98197],{"class":30,"line":109},[28,98198,98199],{"class":34},"c\n",[28,98201,98202],{"class":30,"line":125},[28,98203,98204],{"class":34},"np.concatenate((a,b,c))\n",[14,98206,98207],{},"③二维数组拼接",[18,98209,98211],{"className":20,"code":98210,"language":22,"meta":23,"style":23},"#二维数组使用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",[25,98212,98213,98218,98242,98267,98272,98277],{"__ignoreMap":23},[28,98214,98215],{"class":30,"line":31},[28,98216,98217],{"class":105},"#二维数组使用concatenate进行拼接\n",[28,98219,98220,98222,98224,98226,98228,98230,98232,98234,98236,98238,98240],{"class":30,"line":94},[28,98221,93381],{"class":34},[28,98223,39],{"class":38},[28,98225,93077],{"class":34},[28,98227,46],{"class":45},[28,98229,49],{"class":34},[28,98231,73],{"class":45},[28,98233,93082],{"class":34},[28,98235,57],{"class":45},[28,98237,49],{"class":34},[28,98239,507],{"class":45},[28,98241,227],{"class":34},[28,98243,98244,98247,98249,98251,98253,98255,98257,98259,98261,98263,98265],{"class":30,"line":109},[28,98245,98246],{"class":34},"bb",[28,98248,39],{"class":38},[28,98250,93077],{"class":34},[28,98252,551],{"class":45},[28,98254,49],{"class":34},[28,98256,852],{"class":45},[28,98258,93082],{"class":34},[28,98260,57],{"class":45},[28,98262,49],{"class":34},[28,98264,507],{"class":45},[28,98266,227],{"class":34},[28,98268,98269],{"class":30,"line":125},[28,98270,98271],{"class":105},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[28,98273,98274],{"class":30,"line":131},[28,98275,98276],{"class":105},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[28,98278,98279,98282,98284,98286,98288],{"class":30,"line":1291},[28,98280,98281],{"class":34},"np.concatenate((aa,bb),",[28,98283,47590],{"class":5293},[28,98285,39],{"class":38},[28,98287,407],{"class":45},[28,98289,227],{"class":34},[14,98291,98292],{},"结果：",[14,98294,98295],{},[1539,98296],{"alt":23,"src":98297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[18,98299,98301],{"className":20,"code":98300,"language":22,"meta":23,"style":23},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[25,98302,98303,98308],{"__ignoreMap":23},[28,98304,98305],{"class":30,"line":31},[28,98306,98307],{"class":105},"#指定axis为1进行拼接\n",[28,98309,98310,98312,98314,98316,98318],{"class":30,"line":94},[28,98311,98281],{"class":34},[28,98313,47590],{"class":5293},[28,98315,39],{"class":38},[28,98317,46],{"class":45},[28,98319,227],{"class":34},[14,98321,98292],{},[14,98323,98324],{},[1539,98325],{"alt":23,"src":98326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98328,98329],{},[365,98330,98331],{},"二维数组总结：0竖着方向，1横着方向",[14,98333,98334],{},"④三维数组拼接",[14,98336,98337],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[18,98339,98341],{"className":20,"code":98340,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98342,98343,98348,98376,98406,98411,98428,98433,98438,98443,98460,98465,98470,98475,98488],{"__ignoreMap":23},[28,98344,98345],{"class":30,"line":31},[28,98346,98347],{"class":105},"#两个三行六列\n",[28,98349,98350,98352,98354,98356,98358,98360,98362,98364,98366,98368,98370,98372,98374],{"class":30,"line":94},[28,98351,95580],{"class":34},[28,98353,39],{"class":38},[28,98355,93077],{"class":34},[28,98357,46],{"class":45},[28,98359,49],{"class":34},[28,98361,539],{"class":45},[28,98363,93082],{"class":34},[28,98365,52],{"class":45},[28,98367,49],{"class":34},[28,98369,57],{"class":45},[28,98371,49],{"class":34},[28,98373,558],{"class":45},[28,98375,227],{"class":34},[28,98377,98378,98381,98383,98385,98387,98389,98392,98394,98396,98398,98400,98402,98404],{"class":30,"line":109},[28,98379,98380],{"class":34},"bbb",[28,98382,39],{"class":38},[28,98384,93077],{"class":34},[28,98386,551],{"class":45},[28,98388,49],{"class":34},[28,98390,98391],{"class":45},"137",[28,98393,93082],{"class":34},[28,98395,52],{"class":45},[28,98397,49],{"class":34},[28,98399,57],{"class":45},[28,98401,49],{"class":34},[28,98403,558],{"class":45},[28,98405,227],{"class":34},[28,98407,98408],{"class":30,"line":125},[28,98409,98410],{"class":105},"#axis=0\n",[28,98412,98413,98415,98417,98420,98422,98424,98426],{"class":30,"line":131},[28,98414,905],{"class":34},[28,98416,39],{"class":38},[28,98418,98419],{"class":34},"np.concatenate((aaa,bbb),",[28,98421,47590],{"class":5293},[28,98423,39],{"class":38},[28,98425,407],{"class":45},[28,98427,227],{"class":34},[28,98429,98430],{"class":30,"line":1291},[28,98431,98432],{"class":34},"s.shape\n",[28,98434,98435],{"class":30,"line":1297},[28,98436,98437],{"class":105},"#输出：(4,3,6)\n",[28,98439,98440],{"class":30,"line":1388},[28,98441,98442],{"class":105},"#axis=1\n",[28,98444,98445,98448,98450,98452,98454,98456,98458],{"class":30,"line":1394},[28,98446,98447],{"class":34},"ss",[28,98449,39],{"class":38},[28,98451,98419],{"class":34},[28,98453,47590],{"class":5293},[28,98455,39],{"class":38},[28,98457,46],{"class":45},[28,98459,227],{"class":34},[28,98461,98462],{"class":30,"line":1406},[28,98463,98464],{"class":34},"ss.shape\n",[28,98466,98467],{"class":30,"line":1689},[28,98468,98469],{"class":105},"#输出：(2,6,6)\n",[28,98471,98472],{"class":30,"line":1694},[28,98473,98474],{"class":105},"#axis=2\n",[28,98476,98477,98479,98481,98483,98485],{"class":30,"line":1700},[28,98478,98419],{"class":34},[28,98480,47590],{"class":5293},[28,98482,39],{"class":38},[28,98484,52],{"class":45},[28,98486,98487],{"class":34},").shape\n",[28,98489,98490],{"class":30,"line":1705},[28,98491,98492],{"class":105},"#输出：（2，3，12）\n",[14,98494,98495],{},"⑤四维数组拼接",[18,98497,98499],{"className":20,"code":98498,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98500,98501,98505,98533,98561,98586,98612,98616,98629,98634,98638,98650,98655,98659,98671,98676,98681,98693],{"__ignoreMap":23},[28,98502,98503],{"class":30,"line":31},[28,98504,98347],{"class":105},[28,98506,98507,98509,98511,98513,98515,98517,98519,98521,98523,98525,98527,98529,98531],{"class":30,"line":94},[28,98508,95580],{"class":34},[28,98510,39],{"class":38},[28,98512,93077],{"class":34},[28,98514,46],{"class":45},[28,98516,49],{"class":34},[28,98518,539],{"class":45},[28,98520,93082],{"class":34},[28,98522,52],{"class":45},[28,98524,49],{"class":34},[28,98526,57],{"class":45},[28,98528,49],{"class":34},[28,98530,558],{"class":45},[28,98532,227],{"class":34},[28,98534,98535,98537,98539,98541,98543,98545,98547,98549,98551,98553,98555,98557,98559],{"class":30,"line":109},[28,98536,98380],{"class":34},[28,98538,39],{"class":38},[28,98540,93077],{"class":34},[28,98542,551],{"class":45},[28,98544,49],{"class":34},[28,98546,98391],{"class":45},[28,98548,93082],{"class":34},[28,98550,52],{"class":45},[28,98552,49],{"class":34},[28,98554,57],{"class":45},[28,98556,49],{"class":34},[28,98558,558],{"class":45},[28,98560,227],{"class":34},[28,98562,98563,98566,98568,98570,98572,98574,98576,98578,98580,98582,98584],{"class":30,"line":125},[28,98564,98565],{"class":34},"aaaa",[28,98567,39],{"class":38},[28,98569,97729],{"class":34},[28,98571,52],{"class":45},[28,98573,49],{"class":34},[28,98575,57],{"class":45},[28,98577,49],{"class":34},[28,98579,57],{"class":45},[28,98581,49],{"class":34},[28,98583,52],{"class":45},[28,98585,227],{"class":34},[28,98587,98588,98591,98593,98596,98598,98600,98602,98604,98606,98608,98610],{"class":30,"line":131},[28,98589,98590],{"class":34},"bbbb",[28,98592,39],{"class":38},[28,98594,98595],{"class":34},"bbb.reshape(",[28,98597,52],{"class":45},[28,98599,49],{"class":34},[28,98601,57],{"class":45},[28,98603,49],{"class":34},[28,98605,57],{"class":45},[28,98607,49],{"class":34},[28,98609,52],{"class":45},[28,98611,227],{"class":34},[28,98613,98614],{"class":30,"line":1291},[28,98615,98410],{"class":105},[28,98617,98618,98621,98623,98625,98627],{"class":30,"line":1297},[28,98619,98620],{"class":34},"np.concatenate((aaaa,bbbb),",[28,98622,47590],{"class":5293},[28,98624,39],{"class":38},[28,98626,407],{"class":45},[28,98628,98487],{"class":34},[28,98630,98631],{"class":30,"line":1388},[28,98632,98633],{"class":105},"#结果：（4，3，3，2）\n",[28,98635,98636],{"class":30,"line":1394},[28,98637,98442],{"class":105},[28,98639,98640,98642,98644,98646,98648],{"class":30,"line":1406},[28,98641,98620],{"class":34},[28,98643,47590],{"class":5293},[28,98645,39],{"class":38},[28,98647,46],{"class":45},[28,98649,98487],{"class":34},[28,98651,98652],{"class":30,"line":1689},[28,98653,98654],{"class":105},"#结果：（2，6，3，2）\n",[28,98656,98657],{"class":30,"line":1694},[28,98658,98474],{"class":105},[28,98660,98661,98663,98665,98667,98669],{"class":30,"line":1700},[28,98662,98620],{"class":34},[28,98664,47590],{"class":5293},[28,98666,39],{"class":38},[28,98668,52],{"class":45},[28,98670,98487],{"class":34},[28,98672,98673],{"class":30,"line":1705},[28,98674,98675],{"class":105},"#结果：（2，3，6，2）\n",[28,98677,98678],{"class":30,"line":1719},[28,98679,98680],{"class":105},"#axis=3\n",[28,98682,98683,98685,98687,98689,98691],{"class":30,"line":1724},[28,98684,98620],{"class":34},[28,98686,47590],{"class":5293},[28,98688,39],{"class":38},[28,98690,57],{"class":45},[28,98692,98487],{"class":34},[28,98694,98695],{"class":30,"line":1730},[28,98696,98697],{"class":105},"#结果：（2，3，3，4）\n",[159,98699,98701],{"id":98700},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98703,98704],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98706,98707],{},"①二维数组",[18,98709,98711],{"className":20,"code":98710,"language":22,"meta":23,"style":23},"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",[25,98712,98713,98737,98761,98766,98771],{"__ignoreMap":23},[28,98714,98715,98717,98719,98721,98723,98725,98727,98729,98731,98733,98735],{"class":30,"line":31},[28,98716,93381],{"class":34},[28,98718,39],{"class":38},[28,98720,93077],{"class":34},[28,98722,46],{"class":45},[28,98724,49],{"class":34},[28,98726,73],{"class":45},[28,98728,93082],{"class":34},[28,98730,57],{"class":45},[28,98732,49],{"class":34},[28,98734,507],{"class":45},[28,98736,227],{"class":34},[28,98738,98739,98741,98743,98745,98747,98749,98751,98753,98755,98757,98759],{"class":30,"line":94},[28,98740,98246],{"class":34},[28,98742,39],{"class":38},[28,98744,93077],{"class":34},[28,98746,551],{"class":45},[28,98748,49],{"class":34},[28,98750,852],{"class":45},[28,98752,93082],{"class":34},[28,98754,57],{"class":45},[28,98756,49],{"class":34},[28,98758,507],{"class":45},[28,98760,227],{"class":34},[28,98762,98763],{"class":30,"line":109},[28,98764,98765],{"class":34},"np.hstack((aa,bb))\n",[28,98767,98768],{"class":30,"line":125},[28,98769,98770],{"class":105},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[28,98772,98773],{"class":30,"line":131},[28,98774,98775],{"class":105},"#np.hstack([aa,bb])\n",[14,98777,98292],{},[14,98779,98780],{},[1539,98781],{"alt":23,"src":98782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98784,98785],{},"等效于concatenate()函数中axis=1时的情况",[14,98787,98788],{},"②三维数组",[18,98790,98792],{"className":20,"code":98791,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98793,98794,98798,98826,98854,98859,98864],{"__ignoreMap":23},[28,98795,98796],{"class":30,"line":31},[28,98797,98347],{"class":105},[28,98799,98800,98802,98804,98806,98808,98810,98812,98814,98816,98818,98820,98822,98824],{"class":30,"line":94},[28,98801,95580],{"class":34},[28,98803,39],{"class":38},[28,98805,93077],{"class":34},[28,98807,46],{"class":45},[28,98809,49],{"class":34},[28,98811,539],{"class":45},[28,98813,93082],{"class":34},[28,98815,52],{"class":45},[28,98817,49],{"class":34},[28,98819,57],{"class":45},[28,98821,49],{"class":34},[28,98823,558],{"class":45},[28,98825,227],{"class":34},[28,98827,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852],{"class":30,"line":109},[28,98829,98380],{"class":34},[28,98831,39],{"class":38},[28,98833,93077],{"class":34},[28,98835,551],{"class":45},[28,98837,49],{"class":34},[28,98839,98391],{"class":45},[28,98841,93082],{"class":34},[28,98843,52],{"class":45},[28,98845,49],{"class":34},[28,98847,57],{"class":45},[28,98849,49],{"class":34},[28,98851,558],{"class":45},[28,98853,227],{"class":34},[28,98855,98856],{"class":30,"line":125},[28,98857,98858],{"class":105},"#使用hstack\n",[28,98860,98861],{"class":30,"line":131},[28,98862,98863],{"class":34},"np.hstack((aaa,bbb)).shape\n",[28,98865,98866],{"class":30,"line":1291},[28,98867,98868],{"class":105},"#输出：（2，6，6）\n",[159,98870,98872],{"id":98871},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98874,98875],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98877,98707],{},[18,98879,98881],{"className":20,"code":98880,"language":22,"meta":23,"style":23},"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",[25,98882,98883,98907,98931,98936,98941,98946],{"__ignoreMap":23},[28,98884,98885,98887,98889,98891,98893,98895,98897,98899,98901,98903,98905],{"class":30,"line":31},[28,98886,93381],{"class":34},[28,98888,39],{"class":38},[28,98890,93077],{"class":34},[28,98892,46],{"class":45},[28,98894,49],{"class":34},[28,98896,73],{"class":45},[28,98898,93082],{"class":34},[28,98900,57],{"class":45},[28,98902,49],{"class":34},[28,98904,507],{"class":45},[28,98906,227],{"class":34},[28,98908,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929],{"class":30,"line":94},[28,98910,98246],{"class":34},[28,98912,39],{"class":38},[28,98914,93077],{"class":34},[28,98916,551],{"class":45},[28,98918,49],{"class":34},[28,98920,852],{"class":45},[28,98922,93082],{"class":34},[28,98924,57],{"class":45},[28,98926,49],{"class":34},[28,98928,507],{"class":45},[28,98930,227],{"class":34},[28,98932,98933],{"class":30,"line":109},[28,98934,98935],{"class":105},"#vstack 垂直方向进行堆叠\n",[28,98937,98938],{"class":30,"line":125},[28,98939,98940],{"class":34},"np.vstack((aa,bb))\n",[28,98942,98943],{"class":30,"line":131},[28,98944,98945],{"class":105},"#与hstack传的参数类似，等价于：\n",[28,98947,98948],{"class":30,"line":1291},[28,98949,98950],{"class":34},"np.vstack([aa,bb])\n",[14,98952,98292],{},[14,98954,98955],{},[1539,98956],{"alt":23,"src":98957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98959,98788],{},[18,98961,98963],{"className":20,"code":98962,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98964,98965,98969,98997,99025,99030,99035],{"__ignoreMap":23},[28,98966,98967],{"class":30,"line":31},[28,98968,98347],{"class":105},[28,98970,98971,98973,98975,98977,98979,98981,98983,98985,98987,98989,98991,98993,98995],{"class":30,"line":94},[28,98972,95580],{"class":34},[28,98974,39],{"class":38},[28,98976,93077],{"class":34},[28,98978,46],{"class":45},[28,98980,49],{"class":34},[28,98982,539],{"class":45},[28,98984,93082],{"class":34},[28,98986,52],{"class":45},[28,98988,49],{"class":34},[28,98990,57],{"class":45},[28,98992,49],{"class":34},[28,98994,558],{"class":45},[28,98996,227],{"class":34},[28,98998,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023],{"class":30,"line":109},[28,99000,98380],{"class":34},[28,99002,39],{"class":38},[28,99004,93077],{"class":34},[28,99006,551],{"class":45},[28,99008,49],{"class":34},[28,99010,98391],{"class":45},[28,99012,93082],{"class":34},[28,99014,52],{"class":45},[28,99016,49],{"class":34},[28,99018,57],{"class":45},[28,99020,49],{"class":34},[28,99022,558],{"class":45},[28,99024,227],{"class":34},[28,99026,99027],{"class":30,"line":125},[28,99028,99029],{"class":105},"#使用vstack\n",[28,99031,99032],{"class":30,"line":131},[28,99033,99034],{"class":34},"np.vstack((aaa,bbb)).shape\n",[28,99036,99037],{"class":30,"line":1291},[28,99038,99039],{"class":105},"#输出：（4，3，6）\n",[159,99041,99043],{"id":99042},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99045,99046],{},"该方法是三维数组特有的方法",[14,99048,99049],{},"也就是说",[14,99051,99052],{},"一维数组拼接方法用：concatenate()",[14,99054,99055],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99057,99058],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99060,99061],{},"四维数组及多维数组只能用concatenate进行拼接",[18,99063,99065],{"className":20,"code":99064,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,99066,99067,99071,99099,99127,99132,99137],{"__ignoreMap":23},[28,99068,99069],{"class":30,"line":31},[28,99070,98347],{"class":105},[28,99072,99073,99075,99077,99079,99081,99083,99085,99087,99089,99091,99093,99095,99097],{"class":30,"line":94},[28,99074,95580],{"class":34},[28,99076,39],{"class":38},[28,99078,93077],{"class":34},[28,99080,46],{"class":45},[28,99082,49],{"class":34},[28,99084,539],{"class":45},[28,99086,93082],{"class":34},[28,99088,52],{"class":45},[28,99090,49],{"class":34},[28,99092,57],{"class":45},[28,99094,49],{"class":34},[28,99096,558],{"class":45},[28,99098,227],{"class":34},[28,99100,99101,99103,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125],{"class":30,"line":109},[28,99102,98380],{"class":34},[28,99104,39],{"class":38},[28,99106,93077],{"class":34},[28,99108,551],{"class":45},[28,99110,49],{"class":34},[28,99112,98391],{"class":45},[28,99114,93082],{"class":34},[28,99116,52],{"class":45},[28,99118,49],{"class":34},[28,99120,57],{"class":45},[28,99122,49],{"class":34},[28,99124,558],{"class":45},[28,99126,227],{"class":34},[28,99128,99129],{"class":30,"line":125},[28,99130,99131],{"class":105},"#使用dstack\n",[28,99133,99134],{"class":30,"line":131},[28,99135,99136],{"class":34},"np.dstack((aaa,bbb)).shape\n",[28,99138,99139],{"class":30,"line":1291},[28,99140,99141],{"class":105},"#结果：（2，3，12）\n",[136,99143,99144],{},"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":23,"searchDepth":94,"depth":94,"links":99146},[99147,99148,99149,99150],{"id":98086,"depth":94,"text":98087},{"id":98700,"depth":94,"text":98701},{"id":98871,"depth":94,"text":98872},{"id":99042,"depth":94,"text":99043},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98078,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99157,"title":99158,"body":99159,"description":141,"extension":142,"meta":99434,"navigation":144,"path":99435,"seo":99436,"stem":99437,"__hash__":99438},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99160,"toc":99432},[99161,99164,99167,99261,99264,99267,99270,99273,99276,99279,99282,99285,99429],[10,99162,99158],{"id":99163},"_7数组转置",[14,99165,99166],{},"使用transpose()函数",[18,99168,99170],{"className":20,"code":99169,"language":22,"meta":23,"style":23},"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",[25,99171,99172,99182,99206,99211,99216,99221,99226,99234,99238,99242,99247,99252,99257],{"__ignoreMap":23},[28,99173,99174,99176,99178,99180],{"class":30,"line":31},[28,99175,30468],{"class":38},[28,99177,31456],{"class":34},[28,99179,31459],{"class":38},[28,99181,31462],{"class":34},[28,99183,99184,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204],{"class":30,"line":94},[28,99185,35],{"class":34},[28,99187,39],{"class":38},[28,99189,31793],{"class":34},[28,99191,46],{"class":45},[28,99193,49],{"class":34},[28,99195,73],{"class":45},[28,99197,93082],{"class":34},[28,99199,507],{"class":45},[28,99201,49],{"class":34},[28,99203,57],{"class":45},[28,99205,227],{"class":34},[28,99207,99208],{"class":30,"line":109},[28,99209,99210],{"class":105},"#二维数组转置\n",[28,99212,99213],{"class":30,"line":125},[28,99214,99215],{"class":105},"#调用transpose()函数\n",[28,99217,99218],{"class":30,"line":131},[28,99219,99220],{"class":34},"a.transpose()\n",[28,99222,99223],{"class":30,"line":1291},[28,99224,99225],{"class":105},"#对于二维数组也可以采用.T来实现\n",[28,99227,99228,99231],{"class":30,"line":1297},[28,99229,99230],{"class":34},"a.T",[28,99232,99233],{"class":105},"#与上述代码一样\n",[28,99235,99236],{"class":30,"line":1388},[28,99237,128],{"class":105},[28,99239,99240],{"class":30,"line":1394},[28,99241,94002],{"class":320},[28,99243,99244],{"class":30,"line":1406},[28,99245,99246],{"class":320},"array([[ 1,  4,  7, 10],\n",[28,99248,99249],{"class":30,"line":1689},[28,99250,99251],{"class":320},"       [ 2,  5,  8, 11],\n",[28,99253,99254],{"class":30,"line":1694},[28,99255,99256],{"class":320},"       [ 3,  6,  9, 12]])\n",[28,99258,99259],{"class":30,"line":1700},[28,99260,94002],{"class":320},[14,99262,99263],{},"也可以使用np.transpose()的形式",[14,99265,99266],{},"#多维数组进行转置 np.transpose()",[14,99268,99269],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99271,99272],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99274,99275],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99277,99278],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99280,99281],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99283,99284],{},"四维及以上的数组也是一样的道理",[18,99286,99288],{"className":20,"code":99287,"language":22,"meta":23,"style":23},"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",[25,99289,99290,99318,99323,99328,99333,99351,99356,99388,99393,99398,99403,99424],{"__ignoreMap":23},[28,99291,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316],{"class":30,"line":31},[28,99293,1026],{"class":34},[28,99295,39],{"class":38},[28,99297,93077],{"class":34},[28,99299,46],{"class":45},[28,99301,49],{"class":34},[28,99303,539],{"class":45},[28,99305,93082],{"class":34},[28,99307,57],{"class":45},[28,99309,49],{"class":34},[28,99311,558],{"class":45},[28,99313,49],{"class":34},[28,99315,52],{"class":45},[28,99317,227],{"class":34},[28,99319,99320],{"class":30,"line":94},[28,99321,99322],{"class":34},"x.shape\n",[28,99324,99325],{"class":30,"line":109},[28,99326,99327],{"class":105},"#结果：（3,6,2）\n",[28,99329,99330],{"class":30,"line":125},[28,99331,99332],{"class":105},"#使用np.transpose()进行转置 变为(2,6,3)\n",[28,99334,99335,99338,99340,99342,99344,99346,99348],{"class":30,"line":131},[28,99336,99337],{"class":34},"np.transpose(x,(",[28,99339,52],{"class":45},[28,99341,49],{"class":34},[28,99343,46],{"class":45},[28,99345,49],{"class":34},[28,99347,407],{"class":45},[28,99349,99350],{"class":34},")).shape\n",[28,99352,99353],{"class":30,"line":1291},[28,99354,99355],{"class":105},"#结果：(2,6,3)\n",[28,99357,99358,99360,99362,99364,99366,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386],{"class":30,"line":1297},[28,99359,98565],{"class":34},[28,99361,39],{"class":38},[28,99363,93077],{"class":34},[28,99365,46],{"class":45},[28,99367,49],{"class":34},[28,99369,539],{"class":45},[28,99371,93082],{"class":34},[28,99373,57],{"class":45},[28,99375,49],{"class":34},[28,99377,52],{"class":45},[28,99379,49],{"class":34},[28,99381,46],{"class":45},[28,99383,49],{"class":34},[28,99385,558],{"class":45},[28,99387,227],{"class":34},[28,99389,99390],{"class":30,"line":1388},[28,99391,99392],{"class":34},"aaaa.shape\n",[28,99394,99395],{"class":30,"line":1394},[28,99396,99397],{"class":105},"#结果：（3，2，1，6）\n",[28,99399,99400],{"class":30,"line":1406},[28,99401,99402],{"class":105},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[28,99404,99405,99408,99410,99412,99414,99416,99418,99420,99422],{"class":30,"line":1689},[28,99406,99407],{"class":34},"np.transpose(aaaa,(",[28,99409,46],{"class":45},[28,99411,49],{"class":34},[28,99413,52],{"class":45},[28,99415,49],{"class":34},[28,99417,407],{"class":45},[28,99419,49],{"class":34},[28,99421,57],{"class":45},[28,99423,99350],{"class":34},[28,99425,99426],{"class":30,"line":1694},[28,99427,99428],{"class":105},"#结果：(2,1,3,6)\n",[136,99430,99431],{},"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":23,"searchDepth":94,"depth":94,"links":99433},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99158,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99440,"title":99441,"body":99442,"description":141,"extension":142,"meta":100176,"navigation":144,"path":100177,"seo":100178,"stem":100179,"__hash__":100180},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99443,"toc":100174},[99444,99447,99450,99453,99456,99459,99462,99465,99468,99577,99580,99583,100171],[10,99445,99441],{"id":99446},"_8数组分割",[14,99448,99449],{},"split分割",[14,99451,99452],{},"numpy.split(ary,indics_or_sections,axis)",[14,99454,99455],{},"解释：",[14,99457,99458],{},"ary:被分割的数组",[14,99460,99461],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99463,99464],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99466,99467],{},"①一维数组的分割",[18,99469,99471],{"className":20,"code":99470,"language":22,"meta":23,"style":23},"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",[25,99472,99473,99489,99494,99503,99507,99512,99520,99524,99529,99534,99547,99551,99556,99568,99572],{"__ignoreMap":23},[28,99474,99475,99477,99479,99481,99483,99485,99487],{"class":30,"line":31},[28,99476,35],{"class":34},[28,99478,39],{"class":38},[28,99480,93077],{"class":34},[28,99482,46],{"class":45},[28,99484,49],{"class":34},[28,99486,633],{"class":45},[28,99488,227],{"class":34},[28,99490,99491],{"class":30,"line":94},[28,99492,99493],{"class":105},"#如果传入整数，必须能够平分，否则会报错\n",[28,99495,99496,99499,99501],{"class":30,"line":109},[28,99497,99498],{"class":34},"np.split(a,",[28,99500,52],{"class":45},[28,99502,227],{"class":34},[28,99504,99505],{"class":30,"line":125},[28,99506,128],{"class":105},[28,99508,99509],{"class":30,"line":131},[28,99510,99511],{"class":105},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[28,99513,99514,99516,99518],{"class":30,"line":1291},[28,99515,99498],{"class":34},[28,99517,507],{"class":45},[28,99519,227],{"class":34},[28,99521,99522],{"class":30,"line":1297},[28,99523,128],{"class":105},[28,99525,99526],{"class":30,"line":1388},[28,99527,99528],{"class":105},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[28,99530,99531],{"class":30,"line":1394},[28,99532,99533],{"class":105},"#传入数组\n",[28,99535,99536,99539,99541,99543,99545],{"class":30,"line":1406},[28,99537,99538],{"class":34},"np.split(a,[",[28,99540,57],{"class":45},[28,99542,49],{"class":34},[28,99544,533],{"class":45},[28,99546,4734],{"class":34},[28,99548,99549],{"class":30,"line":1689},[28,99550,128],{"class":105},[28,99552,99553],{"class":30,"line":1694},[28,99554,99555],{"class":105},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[28,99557,99558,99560,99562,99564,99566],{"class":30,"line":1700},[28,99559,99538],{"class":34},[28,99561,533],{"class":45},[28,99563,49],{"class":34},[28,99565,583],{"class":45},[28,99567,4734],{"class":34},[28,99569,99570],{"class":30,"line":1705},[28,99571,128],{"class":105},[28,99573,99574],{"class":30,"line":1719},[28,99575,99576],{"class":105},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99578,99579],{},"②二维数组的分割",[14,99581,99582],{},"使用split()",[18,99584,99586],{"className":20,"code":99585,"language":22,"meta":23,"style":23},"#二维数组分割\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",[25,99587,99588,99593,99617,99622,99631,99635,99639,99644,99649,99654,99659,99664,99669,99674,99678,99691,99695,99699,99703,99707,99711,99716,99721,99726,99730,99735,99751,99755,99759,99764,99769,99774,99779,99784,99789,99794,99799,99804,99809,99814,99819,99824,99829,99834,99839,99844,99849,99853,99857,99877,99881,99885,99890,99895,99900,99905,99910,99915,99920,99925,99930,99935,99940,99945,99950,99955,99960,99965,99970,99975,99979,99984,99993,99997,100001,100005,100009,100013,100017,100021,100025,100029,100038,100042,100046,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100114,100118,100122,100135,100139,100143,100147,100151,100155,100159,100163,100167],{"__ignoreMap":23},[28,99589,99590],{"class":30,"line":31},[28,99591,99592],{"class":105},"#二维数组分割\n",[28,99594,99595,99597,99599,99601,99603,99605,99607,99609,99611,99613,99615],{"class":30,"line":94},[28,99596,93381],{"class":34},[28,99598,39],{"class":38},[28,99600,93077],{"class":34},[28,99602,46],{"class":45},[28,99604,49],{"class":34},[28,99606,539],{"class":45},[28,99608,93082],{"class":34},[28,99610,558],{"class":45},[28,99612,49],{"class":34},[28,99614,558],{"class":45},[28,99616,227],{"class":34},[28,99618,99619],{"class":30,"line":109},[28,99620,99621],{"class":105},"#默认axis=0  传入整数平均分,按行来的\n",[28,99623,99624,99627,99629],{"class":30,"line":125},[28,99625,99626],{"class":34},"np.split(aa,",[28,99628,57],{"class":45},[28,99630,227],{"class":34},[28,99632,99633],{"class":30,"line":131},[28,99634,95823],{"class":105},[28,99636,99637],{"class":30,"line":1291},[28,99638,94002],{"class":320},[28,99640,99641],{"class":30,"line":1297},[28,99642,99643],{"class":320},"[array([[ 1,  2,  3,  4,  5,  6],\n",[28,99645,99646],{"class":30,"line":1388},[28,99647,99648],{"class":320},"        [ 7,  8,  9, 10, 11, 12]]),\n",[28,99650,99651],{"class":30,"line":1394},[28,99652,99653],{"class":320}," array([[13, 14, 15, 16, 17, 18],\n",[28,99655,99656],{"class":30,"line":1406},[28,99657,99658],{"class":320},"        [19, 20, 21, 22, 23, 24]]),\n",[28,99660,99661],{"class":30,"line":1689},[28,99662,99663],{"class":320}," array([[25, 26, 27, 28, 29, 30],\n",[28,99665,99666],{"class":30,"line":1694},[28,99667,99668],{"class":320},"        [31, 32, 33, 34, 35, 36]])]\n",[28,99670,99671],{"class":30,"line":1700},[28,99672,99673],{"class":320}," '''\n",[28,99675,99676],{"class":30,"line":1705},[28,99677,99533],{"class":105},[28,99679,99680,99683,99685,99687,99689],{"class":30,"line":1719},[28,99681,99682],{"class":34},"np.split(aa,[",[28,99684,52],{"class":45},[28,99686,49],{"class":34},[28,99688,533],{"class":45},[28,99690,4734],{"class":34},[28,99692,99693],{"class":30,"line":1724},[28,99694,95823],{"class":105},[28,99696,99697],{"class":30,"line":1730},[28,99698,94002],{"class":320},[28,99700,99701],{"class":30,"line":1751},[28,99702,99643],{"class":320},[28,99704,99705],{"class":30,"line":1756},[28,99706,99648],{"class":320},[28,99708,99709],{"class":30,"line":1770},[28,99710,99653],{"class":320},[28,99712,99713],{"class":30,"line":1775},[28,99714,99715],{"class":320},"        [19, 20, 21, 22, 23, 24],\n",[28,99717,99718],{"class":30,"line":1804},[28,99719,99720],{"class":320},"        [25, 26, 27, 28, 29, 30]]),\n",[28,99722,99723],{"class":30,"line":1809},[28,99724,99725],{"class":320}," array([[31, 32, 33, 34, 35, 36]])]\n",[28,99727,99728],{"class":30,"line":1826},[28,99729,94002],{"class":320},[28,99731,99732],{"class":30,"line":1831},[28,99733,99734],{"class":105},"#axis=1 按照列来分\n",[28,99736,99737,99739,99741,99743,99745,99747,99749],{"class":30,"line":1836},[28,99738,99626],{"class":34},[28,99740,57],{"class":45},[28,99742,49],{"class":34},[28,99744,47590],{"class":5293},[28,99746,39],{"class":38},[28,99748,46],{"class":45},[28,99750,227],{"class":34},[28,99752,99753],{"class":30,"line":1841},[28,99754,95823],{"class":105},[28,99756,99757],{"class":30,"line":1855},[28,99758,94002],{"class":320},[28,99760,99761],{"class":30,"line":1860},[28,99762,99763],{"class":320},"[array([[ 1,  2],\n",[28,99765,99766],{"class":30,"line":2654},[28,99767,99768],{"class":320},"        [ 7,  8],\n",[28,99770,99771],{"class":30,"line":2668},[28,99772,99773],{"class":320},"        [13, 14],\n",[28,99775,99776],{"class":30,"line":2676},[28,99777,99778],{"class":320},"        [19, 20],\n",[28,99780,99781],{"class":30,"line":2681},[28,99782,99783],{"class":320},"        [25, 26],\n",[28,99785,99786],{"class":30,"line":2687},[28,99787,99788],{"class":320},"        [31, 32]]),\n",[28,99790,99791],{"class":30,"line":2693},[28,99792,99793],{"class":320}," array([[ 3,  4],\n",[28,99795,99796],{"class":30,"line":2698},[28,99797,99798],{"class":320},"        [ 9, 10],\n",[28,99800,99801],{"class":30,"line":8025},[28,99802,99803],{"class":320},"        [15, 16],\n",[28,99805,99806],{"class":30,"line":8049},[28,99807,99808],{"class":320},"        [21, 22],\n",[28,99810,99811],{"class":30,"line":8054},[28,99812,99813],{"class":320},"        [27, 28],\n",[28,99815,99816],{"class":30,"line":8060},[28,99817,99818],{"class":320},"        [33, 34]]),\n",[28,99820,99821],{"class":30,"line":8087},[28,99822,99823],{"class":320}," array([[ 5,  6],\n",[28,99825,99826],{"class":30,"line":8092},[28,99827,99828],{"class":320},"        [11, 12],\n",[28,99830,99831],{"class":30,"line":8098},[28,99832,99833],{"class":320},"        [17, 18],\n",[28,99835,99836],{"class":30,"line":8110},[28,99837,99838],{"class":320},"        [23, 24],\n",[28,99840,99841],{"class":30,"line":8122},[28,99842,99843],{"class":320},"        [29, 30],\n",[28,99845,99846],{"class":30,"line":8134},[28,99847,99848],{"class":320},"        [35, 36]])]\n",[28,99850,99851],{"class":30,"line":9793},[28,99852,99673],{"class":320},[28,99854,99855],{"class":30,"line":9818},[28,99856,99533],{"class":105},[28,99858,99859,99861,99863,99865,99867,99869,99871,99873,99875],{"class":30,"line":9841},[28,99860,99682],{"class":34},[28,99862,46],{"class":45},[28,99864,49],{"class":34},[28,99866,52],{"class":45},[28,99868,41685],{"class":34},[28,99870,47590],{"class":5293},[28,99872,39],{"class":38},[28,99874,46],{"class":45},[28,99876,227],{"class":34},[28,99878,99879],{"class":30,"line":9865},[28,99880,128],{"class":105},[28,99882,99883],{"class":30,"line":9870},[28,99884,94002],{"class":320},[28,99886,99887],{"class":30,"line":9875},[28,99888,99889],{"class":320},"[array([[ 1],\n",[28,99891,99892],{"class":30,"line":9880},[28,99893,99894],{"class":320},"        [ 7],\n",[28,99896,99897],{"class":30,"line":9889},[28,99898,99899],{"class":320},"        [13],\n",[28,99901,99902],{"class":30,"line":9894},[28,99903,99904],{"class":320},"        [19],\n",[28,99906,99907],{"class":30,"line":9900},[28,99908,99909],{"class":320},"        [25],\n",[28,99911,99912],{"class":30,"line":9921},[28,99913,99914],{"class":320},"        [31]]),\n",[28,99916,99917],{"class":30,"line":9927},[28,99918,99919],{"class":320}," array([[ 2],\n",[28,99921,99922],{"class":30,"line":9941},[28,99923,99924],{"class":320},"        [ 8],\n",[28,99926,99927],{"class":30,"line":9947},[28,99928,99929],{"class":320},"        [14],\n",[28,99931,99932],{"class":30,"line":9974},[28,99933,99934],{"class":320},"        [20],\n",[28,99936,99937],{"class":30,"line":9983},[28,99938,99939],{"class":320},"        [26],\n",[28,99941,99942],{"class":30,"line":9989},[28,99943,99944],{"class":320},"        [32]]),\n",[28,99946,99947],{"class":30,"line":9997},[28,99948,99949],{"class":320}," array([[ 3,  4,  5,  6],\n",[28,99951,99952],{"class":30,"line":10002},[28,99953,99954],{"class":320},"        [ 9, 10, 11, 12],\n",[28,99956,99957],{"class":30,"line":16681},[28,99958,99959],{"class":320},"        [15, 16, 17, 18],\n",[28,99961,99962],{"class":30,"line":16687},[28,99963,99964],{"class":320},"        [21, 22, 23, 24],\n",[28,99966,99967],{"class":30,"line":16710},[28,99968,99969],{"class":320},"        [27, 28, 29, 30],\n",[28,99971,99972],{"class":30,"line":16716},[28,99973,99974],{"class":320},"        [33, 34, 35, 36]])]\n",[28,99976,99977],{"class":30,"line":16739},[28,99978,94002],{"class":320},[28,99980,99981],{"class":30,"line":16753},[28,99982,99983],{"class":105},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[28,99985,99986,99989,99991],{"class":30,"line":16773},[28,99987,99988],{"class":34},"np.vsplit(aa,",[28,99990,57],{"class":45},[28,99992,227],{"class":34},[28,99994,99995],{"class":30,"line":16779},[28,99996,128],{"class":105},[28,99998,99999],{"class":30,"line":16790},[28,100000,94002],{"class":320},[28,100002,100003],{"class":30,"line":16813},[28,100004,99643],{"class":320},[28,100006,100007],{"class":30,"line":16835},[28,100008,99648],{"class":320},[28,100010,100011],{"class":30,"line":16840},[28,100012,99653],{"class":320},[28,100014,100015],{"class":30,"line":16846},[28,100016,99658],{"class":320},[28,100018,100019],{"class":30,"line":16860},[28,100020,99663],{"class":320},[28,100022,100023],{"class":30,"line":16873},[28,100024,99668],{"class":320},[28,100026,100027],{"class":30,"line":16878},[28,100028,94002],{"class":320},[28,100030,100031,100034,100036],{"class":30,"line":16892},[28,100032,100033],{"class":34},"np.hsplit(aa,",[28,100035,57],{"class":45},[28,100037,227],{"class":34},[28,100039,100040],{"class":30,"line":16897},[28,100041,128],{"class":105},[28,100043,100044],{"class":30,"line":16903},[28,100045,94002],{"class":320},[28,100047,100048],{"class":30,"line":16908},[28,100049,99763],{"class":320},[28,100051,100052],{"class":30,"line":16922},[28,100053,99768],{"class":320},[28,100055,100056],{"class":30,"line":16927},[28,100057,99773],{"class":320},[28,100059,100060],{"class":30,"line":16932},[28,100061,99778],{"class":320},[28,100063,100064],{"class":30,"line":16946},[28,100065,99783],{"class":320},[28,100067,100068],{"class":30,"line":16958},[28,100069,99788],{"class":320},[28,100071,100072],{"class":30,"line":16963},[28,100073,99793],{"class":320},[28,100075,100076],{"class":30,"line":16976},[28,100077,99798],{"class":320},[28,100079,100080],{"class":30,"line":16981},[28,100081,99803],{"class":320},[28,100083,100084],{"class":30,"line":16986},[28,100085,99808],{"class":320},[28,100087,100088],{"class":30,"line":16991},[28,100089,99813],{"class":320},[28,100091,100092],{"class":30,"line":17004},[28,100093,99818],{"class":320},[28,100095,100096],{"class":30,"line":17009},[28,100097,99823],{"class":320},[28,100099,100100],{"class":30,"line":32709},[28,100101,99828],{"class":320},[28,100103,100104],{"class":30,"line":32715},[28,100105,99833],{"class":320},[28,100107,100108],{"class":30,"line":32721},[28,100109,99838],{"class":320},[28,100111,100112],{"class":30,"line":32727},[28,100113,99843],{"class":320},[28,100115,100116],{"class":30,"line":32733},[28,100117,99848],{"class":320},[28,100119,100120],{"class":30,"line":32744},[28,100121,94002],{"class":320},[28,100123,100124,100127,100129,100131,100133],{"class":30,"line":32750},[28,100125,100126],{"class":34},"np.vsplit(aa,[",[28,100128,52],{"class":45},[28,100130,49],{"class":34},[28,100132,533],{"class":45},[28,100134,4734],{"class":34},[28,100136,100137],{"class":30,"line":32770},[28,100138,128],{"class":105},[28,100140,100141],{"class":30,"line":32776},[28,100142,94002],{"class":320},[28,100144,100145],{"class":30,"line":32787},[28,100146,99643],{"class":320},[28,100148,100149],{"class":30,"line":32793},[28,100150,99648],{"class":320},[28,100152,100153],{"class":30,"line":32799},[28,100154,99653],{"class":320},[28,100156,100157],{"class":30,"line":32805},[28,100158,99715],{"class":320},[28,100160,100161],{"class":30,"line":32811},[28,100162,99720],{"class":320},[28,100164,100165],{"class":30,"line":32817},[28,100166,99725],{"class":320},[28,100168,100169],{"class":30,"line":32823},[28,100170,99673],{"class":320},[136,100172,100173],{},"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":23,"searchDepth":94,"depth":94,"links":100175},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99441,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100182,"title":100183,"body":100184,"description":141,"extension":142,"meta":100678,"navigation":144,"path":100679,"seo":100680,"stem":100681,"__hash__":100682},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100185,"toc":100669},[100186,100189,100192,100217,100221,100280,100332,100336,100338,100374,100428,100430,100468,100539,100543,100548,100552,100555,100588,100591,100595,100598,100601,100604,100607,100612,100616,100619,100622,100625,100628,100633,100637,100642,100645,100666],[10,100187,100183],{"id":100188},"_9数学函数",[14,100190,100191],{},"补充回顾：python的列表推导式",[18,100193,100195],{"className":20,"code":100194,"language":22,"meta":23,"style":23},"[1\u002Fi for i in a]\n",[25,100196,100197],{"__ignoreMap":23},[28,100198,100199,100201,100203,100205,100208,100210,100212,100214],{"class":30,"line":31},[28,100200,1096],{"class":34},[28,100202,46],{"class":45},[28,100204,794],{"class":38},[28,100206,100207],{"class":34},"i ",[28,100209,3102],{"class":38},[28,100211,9515],{"class":34},[28,100213,26121],{"class":38},[28,100215,100216],{"class":34}," a]\n",[159,100218,100220],{"id":100219},"_91-求倒数","9.1 求倒数",[18,100222,100224],{"className":20,"code":100223,"language":22,"meta":23,"style":23},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[25,100225,100226,100231,100259,100271],{"__ignoreMap":23},[28,100227,100228],{"class":30,"line":31},[28,100229,100230],{"class":105},"#数组求倒数\n",[28,100232,100233,100235,100237,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257],{"class":30,"line":94},[28,100234,35],{"class":34},[28,100236,39],{"class":38},[28,100238,1096],{"class":34},[28,100240,46],{"class":45},[28,100242,49],{"class":34},[28,100244,52],{"class":45},[28,100246,49],{"class":34},[28,100248,57],{"class":45},[28,100250,49],{"class":34},[28,100252,507],{"class":45},[28,100254,49],{"class":34},[28,100256,533],{"class":45},[28,100258,33322],{"class":34},[28,100260,100261,100263,100265,100268],{"class":30,"line":109},[28,100262,477],{"class":34},[28,100264,39],{"class":38},[28,100266,100267],{"class":34},"np.array(a)",[28,100269,100270],{"class":105},"#将列表转换为数组\n",[28,100272,100273,100275,100277],{"class":30,"line":125},[28,100274,46],{"class":45},[28,100276,794],{"class":38},[28,100278,100279],{"class":34},"b\n",[18,100281,100283],{"className":20,"code":100282,"language":22,"meta":23,"style":23},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[25,100284,100285,100313,100322,100327],{"__ignoreMap":23},[28,100286,100287,100289,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309,100311],{"class":30,"line":31},[28,100288,35],{"class":34},[28,100290,39],{"class":38},[28,100292,1096],{"class":34},[28,100294,46],{"class":45},[28,100296,49],{"class":34},[28,100298,52],{"class":45},[28,100300,49],{"class":34},[28,100302,57],{"class":45},[28,100304,49],{"class":34},[28,100306,507],{"class":45},[28,100308,49],{"class":34},[28,100310,533],{"class":45},[28,100312,33322],{"class":34},[28,100314,100315,100317,100319],{"class":30,"line":94},[28,100316,477],{"class":34},[28,100318,39],{"class":38},[28,100320,100321],{"class":34},"np.array(a)\n",[28,100323,100324],{"class":30,"line":109},[28,100325,100326],{"class":105},"#调用numpy中的函数reciprocal()\n",[28,100328,100329],{"class":30,"line":125},[28,100330,100331],{"class":34},"np.reciprocal(b)\n",[159,100333,100335],{"id":100334},"_92-求平方","9.2 求平方",[14,100337,94604],{},[18,100339,100341],{"className":20,"code":100340,"language":22,"meta":23,"style":23},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[25,100342,100343,100348,100353,100369],{"__ignoreMap":23},[28,100344,100345],{"class":30,"line":31},[28,100346,100347],{"class":105},"#square()，求平方\n",[28,100349,100350],{"class":30,"line":94},[28,100351,100352],{"class":105},"#一维数组\n",[28,100354,100355,100357,100359,100361,100363,100365,100367],{"class":30,"line":109},[28,100356,35],{"class":34},[28,100358,39],{"class":38},[28,100360,93077],{"class":34},[28,100362,46],{"class":45},[28,100364,49],{"class":34},[28,100366,659],{"class":45},[28,100368,227],{"class":34},[28,100370,100371],{"class":30,"line":125},[28,100372,100373],{"class":34},"np.square(a)\n",[18,100375,100377],{"className":20,"code":100376,"language":22,"meta":23,"style":23},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[25,100378,100379,100384,100389,100410],{"__ignoreMap":23},[28,100380,100381],{"class":30,"line":31},[28,100382,100383],{"class":105},"#或者通过循环遍历的形式来计算\n",[28,100385,100386],{"class":30,"line":94},[28,100387,100388],{"class":105},"#这是一个列表\n",[28,100390,100391,100394,100396,100398,100400,100402,100404,100407],{"class":30,"line":109},[28,100392,100393],{"class":34},"[i",[28,100395,668],{"class":38},[28,100397,100207],{"class":34},[28,100399,3102],{"class":38},[28,100401,9515],{"class":34},[28,100403,26121],{"class":38},[28,100405,100406],{"class":34}," a]",[28,100408,100409],{"class":105},"#这个求完之后在数列当中\n",[28,100411,100412,100415,100417,100419,100421,100423,100425],{"class":30,"line":125},[28,100413,100414],{"class":34},"np.array([i",[28,100416,668],{"class":38},[28,100418,100207],{"class":34},[28,100420,3102],{"class":38},[28,100422,9515],{"class":34},[28,100424,26121],{"class":38},[28,100426,100427],{"class":34}," a])\n",[14,100429,93366],{},[18,100431,100433],{"className":20,"code":100432,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[25,100434,100435,100439,100463],{"__ignoreMap":23},[28,100436,100437],{"class":30,"line":31},[28,100438,93376],{"class":105},[28,100440,100441,100443,100445,100447,100449,100451,100453,100455,100457,100459,100461],{"class":30,"line":94},[28,100442,93381],{"class":34},[28,100444,39],{"class":38},[28,100446,93077],{"class":34},[28,100448,46],{"class":45},[28,100450,49],{"class":34},[28,100452,73],{"class":45},[28,100454,93082],{"class":34},[28,100456,507],{"class":45},[28,100458,49],{"class":34},[28,100460,57],{"class":45},[28,100462,227],{"class":34},[28,100464,100465],{"class":30,"line":109},[28,100466,100467],{"class":34},"np.square(aa)\n",[18,100469,100471],{"className":20,"code":100470,"language":22,"meta":23,"style":23},"#传统的方式\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",[25,100472,100473,100478,100487,100503,100519,100534],{"__ignoreMap":23},[28,100474,100475],{"class":30,"line":31},[28,100476,100477],{"class":105},"#传统的方式\n",[28,100479,100480,100482,100484],{"class":30,"line":94},[28,100481,98246],{"class":34},[28,100483,39],{"class":38},[28,100485,100486],{"class":34},"np.empty_like(aa)\n",[28,100488,100489,100491,100493,100495,100497,100499,100501],{"class":30,"line":109},[28,100490,3102],{"class":38},[28,100492,9515],{"class":34},[28,100494,26121],{"class":38},[28,100496,32519],{"class":45},[28,100498,221],{"class":34},[28,100500,507],{"class":45},[28,100502,30862],{"class":34},[28,100504,100505,100507,100509,100511,100513,100515,100517],{"class":30,"line":125},[28,100506,3278],{"class":38},[28,100508,9577],{"class":34},[28,100510,26121],{"class":38},[28,100512,32519],{"class":45},[28,100514,221],{"class":34},[28,100516,57],{"class":45},[28,100518,30862],{"class":34},[28,100520,100521,100524,100526,100529,100531],{"class":30,"line":131},[28,100522,100523],{"class":34},"        bb[i,j]",[28,100525,39],{"class":38},[28,100527,100528],{"class":34},"aa[i,j]",[28,100530,668],{"class":38},[28,100532,100533],{"class":34},"aa[i,j]\n",[28,100535,100536],{"class":30,"line":1291},[28,100537,100538],{"class":34},"bb\n",[159,100540,100542],{"id":100541},"_93-求各元素的符号","9.3 求各元素的符号",[14,100544,100545],{},[1539,100546],{"alt":23,"src":100547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[159,100549,100551],{"id":100550},"_94-modf函数","9.4 modf函数",[14,100553,100554],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[18,100556,100558],{"className":20,"code":100557,"language":22,"meta":23,"style":23},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[25,100559,100560,100583],{"__ignoreMap":23},[28,100561,100562,100564,100566,100568,100570,100572,100574,100576,100578,100581],{"class":30,"line":31},[28,100563,35],{"class":34},[28,100565,39],{"class":38},[28,100567,93077],{"class":34},[28,100569,742],{"class":38},[28,100571,659],{"class":45},[28,100573,49],{"class":34},[28,100575,659],{"class":45},[28,100577,49],{"class":34},[28,100579,100580],{"class":45},"0.3",[28,100582,227],{"class":34},[28,100584,100585],{"class":30,"line":94},[28,100586,100587],{"class":34},"np.modf(a)\n",[14,100589,100590],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[159,100592,100594],{"id":100593},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100596,100597],{},"np.cell()",[14,100599,100600],{},"np.floor()",[14,100602,100603],{},"np.rint()",[14,100605,100606],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100608,100609],{},[1539,100610],{"alt":23,"src":100611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[159,100613,100615],{"id":100614},"_96-around函数","9.6 around()函数",[14,100617,100618],{},"around()函数也可以实现对数的小数位数进行操作",[14,100620,100621],{},"其中的参数：",[14,100623,100624],{},"1.要传的数组",[14,100626,100627],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100629,100630],{},[1539,100631],{"alt":23,"src":100632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[159,100634,100636],{"id":100635},"_97-三角函数","9.7 三角函数",[14,100638,100639],{},[1539,100640],{"alt":23,"src":100641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100643,100644],{},"引入图像模块非常重要",[18,100646,100648],{"className":20,"code":100647,"language":22,"meta":23,"style":23},"from matplotlib import pyplot as plt\n",[25,100649,100650],{"__ignoreMap":23},[28,100651,100652,100654,100657,100659,100662,100664],{"class":30,"line":31},[28,100653,30813],{"class":38},[28,100655,100656],{"class":34}," matplotlib ",[28,100658,30468],{"class":38},[28,100660,100661],{"class":34}," pyplot ",[28,100663,31459],{"class":38},[28,100665,31513],{"class":34},[136,100667,100668],{},"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":23,"searchDepth":94,"depth":94,"links":100670},[100671,100672,100673,100674,100675,100676,100677],{"id":100219,"depth":94,"text":100220},{"id":100334,"depth":94,"text":100335},{"id":100541,"depth":94,"text":100542},{"id":100550,"depth":94,"text":100551},{"id":100593,"depth":94,"text":100594},{"id":100614,"depth":94,"text":100615},{"id":100635,"depth":94,"text":100636},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100183,"description":141},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100684,"title":100685,"body":100686,"description":141,"extension":142,"meta":100690,"navigation":144,"path":100691,"seo":100692,"stem":100693,"__hash__":100694},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100687,"toc":100688},[],{"title":23,"searchDepth":94,"depth":94,"links":100689},[],{"category":50495},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100685,"description":141},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100696,"title":100697,"body":100698,"description":23,"extension":142,"meta":102706,"navigation":144,"path":102707,"seo":102708,"stem":102709,"__hash__":102710},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100699,"toc":102682},[100700,100703,100707,100710,100713,100719,100722,100745,100748,100782,100785,100826,100830,100833,100926,100929,100973,100976,100993,100996,101010,101013,101016,101061,101064,101101,101105,101108,101114,101119,101139,101143,101146,101212,101215,101233,101237,101240,101269,101279,101285,101289,101292,101298,101309,101313,101316,101346,101349,101629,101632,101635,101646,101649,101652,101674,101681,101684,101702,101705,101708,101722,101730,101733,101759,101765,101768,101771,101781,101793,101813,101822,101842,101852,101876,101889,101903,101908,101949,101966,101991,102003,102023,102029,102074,102093,102110,102123,102139,102146,102158,102167,102202,102223,102248,102261,102285,102300,102325,102328,102349,102358,102361,102372,102376,102379,102385,102397,102404,102408,102411,102423,102426,102440,102443,102453,102463,102466,102506,102509,102513,102519,102522,102536,102540,102543,102576,102580,102583,102606,102614,102617,102623,102629,102632,102635,102663,102667,102670,102676,102679],[10,100701,100697],{"id":100702},"_1环境安装与第一个-mujoco-程序",[159,100704,100706],{"id":100705},"_1目标说明","1.目标说明",[14,100708,100709],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100711,100712],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[18,100714,100717],{"className":100715,"code":100716,"language":5264,"meta":23},[5262],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[25,100718,100716],{"__ignoreMap":23},[14,100720,100721],{},"需要掌握:",[171,100723,100724,100727,100730,100735,100740],{},[174,100725,100726],{},"Fedora 44 下 MuJoCo 的系统依赖",[174,100728,100729],{},"Python 虚拟环境创建",[174,100731,100732],{},[25,100733,100734],{},"mujoco.MjModel",[174,100736,100737],{},[25,100738,100739],{},"mujoco.MjData",[174,100741,100742],{},[25,100743,100744],{},"mujoco.mj_step(model, data)",[14,100746,100747],{},"MuJoCo 中最重要的两个对象:",[353,100749,100750,100760],{},[356,100751,100752],{},[359,100753,100754,100757],{},[362,100755,100756],{"align":23813},"对象",[362,100758,100759],{"align":23813},"含义",[400,100761,100762,100772],{},[359,100763,100764,100769],{},[405,100765,100766],{"align":23813},[25,100767,100768],{},"MjModel",[405,100770,100771],{"align":23813},"模型结构，来自 XML，基本不随时间变化",[359,100773,100774,100779],{},[405,100775,100776],{"align":23813},[25,100777,100778],{},"MjData",[405,100780,100781],{"align":23813},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100783,100784],{},"可以先用一个类比理解：",[353,100786,100787,100797],{},[356,100788,100789],{},[359,100790,100791,100794],{},[362,100792,100793],{"align":23813},"类比",[362,100795,100796],{"align":23813},"MuJoCo 对象",[400,100798,100799,100808,100817],{},[359,100800,100801,100804],{},[405,100802,100803],{"align":23813},"游戏地图和角色配置",[405,100805,100806],{"align":23813},[25,100807,100768],{},[359,100809,100810,100813],{},[405,100811,100812],{"align":23813},"游戏运行到当前帧的状态",[405,100814,100815],{"align":23813},[25,100816,100778],{},[359,100818,100819,100822],{},[405,100820,100821],{"align":23813},"前进一帧",[405,100823,100824],{"align":23813},[25,100825,100744],{},[159,100827,100829],{"id":100828},"_2环境与依赖安装","2.环境与依赖安装",[14,100831,100832],{},"Fedora 44 系统依赖:",[18,100834,100836],{"className":23899,"code":100835,"language":23901,"meta":23,"style":23},"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",[25,100837,100838,100850,100863,100876,100886,100896,100915],{"__ignoreMap":23},[28,100839,100840,100842,100844,100846,100848],{"class":30,"line":31},[28,100841,24654],{"class":2040},[28,100843,26393],{"class":320},[28,100845,23911],{"class":320},[28,100847,26478],{"class":45},[28,100849,24756],{"class":45},[28,100851,100852,100855,100858,100861],{"class":30,"line":94},[28,100853,100854],{"class":320},"  python3",[28,100856,100857],{"class":320}," python3-pip",[28,100859,100860],{"class":320}," python3-virtualenv",[28,100862,24756],{"class":45},[28,100864,100865,100868,100871,100874],{"class":30,"line":109},[28,100866,100867],{"class":320},"  mesa-libGL",[28,100869,100870],{"class":320}," mesa-libGLU",[28,100872,100873],{"class":320}," mesa-dri-drivers",[28,100875,24756],{"class":45},[28,100877,100878,100881,100884],{"class":30,"line":125},[28,100879,100880],{"class":320},"  libglvnd-glx",[28,100882,100883],{"class":320}," libglvnd-opengl",[28,100885,24756],{"class":45},[28,100887,100888,100891,100894],{"class":30,"line":131},[28,100889,100890],{"class":320},"  glfw",[28,100892,100893],{"class":320}," glfw-devel",[28,100895,24756],{"class":45},[28,100897,100898,100901,100904,100907,100910,100913],{"class":30,"line":1291},[28,100899,100900],{"class":320},"  libX11",[28,100902,100903],{"class":320}," libXcursor",[28,100905,100906],{"class":320}," libXi",[28,100908,100909],{"class":320}," libXinerama",[28,100911,100912],{"class":320}," libXrandr",[28,100914,24756],{"class":45},[28,100916,100917,100920,100923],{"class":30,"line":1297},[28,100918,100919],{"class":320},"  gcc",[28,100921,100922],{"class":320}," gcc-c++",[28,100924,100925],{"class":320}," make\n",[14,100927,100928],{},"创建 Python 环境:",[18,100930,100932],{"className":23899,"code":100931,"language":23901,"meta":23,"style":23},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[25,100933,100934,100948,100956],{"__ignoreMap":23},[28,100935,100936,100939,100942,100945],{"class":30,"line":31},[28,100937,100938],{"class":2040},"python3",[28,100940,100941],{"class":45}," -m",[28,100943,100944],{"class":320}," venv",[28,100946,100947],{"class":320}," .venv\n",[28,100949,100950,100953],{"class":30,"line":94},[28,100951,100952],{"class":45},"source",[28,100954,100955],{"class":320}," .venv\u002Fbin\u002Factivate\n",[28,100957,100958,100960,100962,100965,100967,100970],{"class":30,"line":109},[28,100959,22],{"class":2040},[28,100961,100941],{"class":45},[28,100963,100964],{"class":320}," pip",[28,100966,23911],{"class":320},[28,100968,100969],{"class":45}," --upgrade",[28,100971,100972],{"class":320}," pip\n",[14,100974,100975],{},"pip 安装:",[18,100977,100979],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy\n",[25,100980,100981],{"__ignoreMap":23},[28,100982,100983,100985,100987,100990],{"class":30,"line":31},[28,100984,23908],{"class":2040},[28,100986,23911],{"class":320},[28,100988,100989],{"class":320}," \"mujoco>=2.3\"",[28,100991,100992],{"class":320}," numpy\n",[14,100994,100995],{},"安装完成后，先做最小检查：",[18,100997,100999],{"className":23899,"code":100998,"language":23901,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[25,101000,101001],{"__ignoreMap":23},[28,101002,101003,101005,101007],{"class":30,"line":31},[28,101004,22],{"class":2040},[28,101006,30436],{"class":45},[28,101008,101009],{"class":320}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101011,101012],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101014,101015],{},"conda 安装:",[18,101017,101019],{"className":23899,"code":101018,"language":23901,"meta":23,"style":23},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[25,101020,101021,101041,101051],{"__ignoreMap":23},[28,101022,101023,101025,101027,101029,101032,101035,101038],{"class":30,"line":31},[28,101024,30408],{"class":2040},[28,101026,29254],{"class":320},[28,101028,25193],{"class":45},[28,101030,101031],{"class":320}," mujoco-study",[28,101033,101034],{"class":320}," python=",[28,101036,101037],{"class":45},"3.10",[28,101039,101040],{"class":45}," -y\n",[28,101042,101043,101045,101048],{"class":30,"line":94},[28,101044,30408],{"class":2040},[28,101046,101047],{"class":320}," activate",[28,101049,101050],{"class":320}," mujoco-study\n",[28,101052,101053,101055,101057,101059],{"class":30,"line":109},[28,101054,23908],{"class":2040},[28,101056,23911],{"class":320},[28,101058,100989],{"class":320},[28,101060,100992],{"class":320},[14,101062,101063],{},"版本冲突说明:",[171,101065,101066,101072,101082,101091],{},[174,101067,101068,101069,28463],{},"不要安装 ",[25,101070,101071],{},"mujoco-py",[174,101073,101074,101075,101077,101078,101081],{},"如果旧项目里同时安装了 ",[25,101076,101071],{}," 和 ",[25,101079,101080],{},"mujoco","，建议新建干净虚拟环境。",[174,101083,101084,101087,101088,28463],{},[25,101085,101086],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[25,101089,101090],{},"~\u002F.mujoco\u002Fmujoco210",[174,101092,101093,101094,82614,101097,101100],{},"离屏渲染可能涉及 OpenGL 后端，",[25,101095,101096],{},"MUJOCO_GL=egl",[25,101098,101099],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[159,101102,101104],{"id":101103},"_3核心概念解释","3.核心概念解释",[14,101106,101107],{},"MuJoCo 的基本执行流程:",[18,101109,101112],{"className":101110,"code":101111,"language":5264,"meta":23},[5262],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[25,101113,101111],{"__ignoreMap":23},[14,101115,101116,101118],{},[25,101117,100768],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101120,101121,101123,101124,428,101127,428,101130,428,101133,428,101136,28463],{},[25,101122,100778],{}," 存放仿真运行时状态，例如 ",[25,101125,101126],{},"data.time",[25,101128,101129],{},"data.qpos",[25,101131,101132],{},"data.qvel",[25,101134,101135],{},"data.ctrl",[25,101137,101138],{},"data.xpos",[188,101140,101142],{"id":101141},"xml-是什么","XML 是什么",[14,101144,101145],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[18,101147,101149],{"className":53142,"code":101148,"language":53144,"meta":23,"style":23},"\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",[25,101150,101151,101173,101204],{"__ignoreMap":23},[28,101152,101153,101155,101157,101159,101161,101163,101166,101168,101171],{"class":30,"line":31},[28,101154,99],{"class":34},[28,101156,51875],{"class":51375},[28,101158,14997],{"class":2040},[28,101160,39],{"class":34},[28,101162,53566],{"class":320},[28,101164,101165],{"class":2040}," pos",[28,101167,39],{"class":34},[28,101169,101170],{"class":320},"\"0 0 1\"",[28,101172,51382],{"class":34},[28,101174,101175,101177,101180,101182,101184,101187,101189,101191,101193,101196,101198,101201],{"class":30,"line":94},[28,101176,52219],{"class":34},[28,101178,101179],{"class":51375},"geom",[28,101181,14997],{"class":2040},[28,101183,39],{"class":34},[28,101185,101186],{"class":320},"\"box_geom\"",[28,101188,53899],{"class":2040},[28,101190,39],{"class":34},[28,101192,53566],{"class":320},[28,101194,101195],{"class":2040}," size",[28,101197,39],{"class":34},[28,101199,101200],{"class":320},"\"0.1 0.1 0.1\"",[28,101202,101203],{"class":34},"\u002F>\n",[28,101205,101206,101208,101210],{"class":30,"line":109},[28,101207,51860],{"class":34},[28,101209,51875],{"class":51375},[28,101211,51382],{"class":34},[14,101213,101214],{},"这段意思是：",[171,101216,101217,101223,101230],{},[174,101218,101219,101220,101222],{},"创建一个叫 ",[25,101221,53789],{}," 的刚体。",[174,101224,101225,101226,101229],{},"它初始放在 ",[25,101227,101228],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[174,101231,101232],{},"它里面有一个盒子形状的几何体。",[188,101234,101236],{"id":101235},"timestep-是什么","timestep 是什么",[14,101238,101239],{},"XML 里的：",[18,101241,101243],{"className":53142,"code":101242,"language":53144,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101244,101245],{"__ignoreMap":23},[28,101246,101247,101249,101251,101254,101256,101259,101262,101264,101267],{"class":30,"line":31},[28,101248,99],{"class":34},[28,101250,69241],{"class":51375},[28,101252,101253],{"class":2040}," timestep",[28,101255,39],{"class":34},[28,101257,101258],{"class":320},"\"0.01\"",[28,101260,101261],{"class":2040}," gravity",[28,101263,39],{"class":34},[28,101265,101266],{"class":320},"\"0 0 -9.81\"",[28,101268,101203],{"class":34},[14,101270,101271,101272,101275,101276,101278],{},"表示每调用一次 ",[25,101273,101274],{},"mj_step","，仿真时间前进 ",[25,101277,39062],{}," 秒。循环 100 次，大约就是 1 秒：",[18,101280,101283],{"className":101281,"code":101282,"language":5264,"meta":23},[5262],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[25,101284,101282],{"__ignoreMap":23},[188,101286,101288],{"id":101287},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101290,101291],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[18,101293,101296],{"className":101294,"code":101295,"language":5264,"meta":23},[5262],"x y z qw qx qy qz\n",[25,101297,101295],{"__ignoreMap":23},[14,101299,101300,101301,101304,101305,101308],{},"表示一个自由刚体的位置和姿态。其中 ",[25,101302,101303],{},"x y z"," 是位置，",[25,101306,101307],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[159,101310,101312],{"id":101311},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101314,101315],{},"新建文件:",[18,101317,101319],{"className":23899,"code":101318,"language":23901,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[25,101320,101321,101331,101338],{"__ignoreMap":23},[28,101322,101323,101326,101328],{"class":30,"line":31},[28,101324,101325],{"class":2040},"mkdir",[28,101327,29294],{"class":45},[28,101329,101330],{"class":320}," mujoco_tutorial\n",[28,101332,101333,101336],{"class":30,"line":94},[28,101334,101335],{"class":45},"cd",[28,101337,101330],{"class":320},[28,101339,101340,101343],{"class":30,"line":109},[28,101341,101342],{"class":2040},"touch",[28,101344,101345],{"class":320}," ch1_first_sim.py\n",[14,101347,101348],{},"写入:",[18,101350,101352],{"className":20,"code":101351,"language":22,"meta":23,"style":23},"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",[25,101353,101354,101361,101365,101369,101379,101384,101389,101393,101398,101403,101407,101412,101417,101422,101427,101432,101437,101441,101445,101449,101462,101476,101486,101490,101502,101514,101526,101538,101550,101554,101571,101576,101580,101591,101602,101606,101610,101624],{"__ignoreMap":23},[28,101355,101356,101358],{"class":30,"line":31},[28,101357,30468],{"class":38},[28,101359,101360],{"class":34}," mujoco\n",[28,101362,101363],{"class":30,"line":94},[28,101364,2477],{"emptyLinePlaceholder":144},[28,101366,101367],{"class":30,"line":109},[28,101368,2477],{"emptyLinePlaceholder":144},[28,101370,101371,101374,101376],{"class":30,"line":125},[28,101372,101373],{"class":45},"XML",[28,101375,13641],{"class":38},[28,101377,101378],{"class":320}," \"\"\"\n",[28,101380,101381],{"class":30,"line":131},[28,101382,101383],{"class":320},"\u003Cmujoco model=\"first_sim\">\n",[28,101385,101386],{"class":30,"line":1291},[28,101387,101388],{"class":320},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[28,101390,101391],{"class":30,"line":1297},[28,101392,2477],{"emptyLinePlaceholder":144},[28,101394,101395],{"class":30,"line":1388},[28,101396,101397],{"class":320},"  \u003Cworldbody>\n",[28,101399,101400],{"class":30,"line":1394},[28,101401,101402],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,101404,101405],{"class":30,"line":1406},[28,101406,2477],{"emptyLinePlaceholder":144},[28,101408,101409],{"class":30,"line":1689},[28,101410,101411],{"class":320},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[28,101413,101414],{"class":30,"line":1694},[28,101415,101416],{"class":320},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[28,101418,101419],{"class":30,"line":1700},[28,101420,101421],{"class":320},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,101423,101424],{"class":30,"line":1705},[28,101425,101426],{"class":320},"    \u003C\u002Fbody>\n",[28,101428,101429],{"class":30,"line":1719},[28,101430,101431],{"class":320},"  \u003C\u002Fworldbody>\n",[28,101433,101434],{"class":30,"line":1724},[28,101435,101436],{"class":320},"\u003C\u002Fmujoco>\n",[28,101438,101439],{"class":30,"line":1730},[28,101440,95757],{"class":320},[28,101442,101443],{"class":30,"line":1751},[28,101444,2477],{"emptyLinePlaceholder":144},[28,101446,101447],{"class":30,"line":1756},[28,101448,2477],{"emptyLinePlaceholder":144},[28,101450,101451,101453,101455,101458,101460],{"class":30,"line":1770},[28,101452,32023],{"class":38},[28,101454,2050],{"class":2040},[28,101456,101457],{"class":34},"() -> ",[28,101459,95745],{"class":45},[28,101461,3816],{"class":34},[28,101463,101464,101467,101469,101472,101474],{"class":30,"line":1775},[28,101465,101466],{"class":34},"    model ",[28,101468,39],{"class":38},[28,101470,101471],{"class":34}," mujoco.MjModel.from_xml_string(",[28,101473,101373],{"class":45},[28,101475,227],{"class":34},[28,101477,101478,101481,101483],{"class":30,"line":1804},[28,101479,101480],{"class":34},"    data ",[28,101482,39],{"class":38},[28,101484,101485],{"class":34}," mujoco.MjData(model)\n",[28,101487,101488],{"class":30,"line":1809},[28,101489,2477],{"emptyLinePlaceholder":144},[28,101491,101492,101494,101496,101499],{"class":30,"line":1826},[28,101493,31375],{"class":45},[28,101495,221],{"class":34},[28,101497,101498],{"class":320},"\"nq:\"",[28,101500,101501],{"class":34},", model.nq)\n",[28,101503,101504,101506,101508,101511],{"class":30,"line":1831},[28,101505,31375],{"class":45},[28,101507,221],{"class":34},[28,101509,101510],{"class":320},"\"nv:\"",[28,101512,101513],{"class":34},", model.nv)\n",[28,101515,101516,101518,101520,101523],{"class":30,"line":1836},[28,101517,31375],{"class":45},[28,101519,221],{"class":34},[28,101521,101522],{"class":320},"\"nu:\"",[28,101524,101525],{"class":34},", model.nu)\n",[28,101527,101528,101530,101532,101535],{"class":30,"line":1841},[28,101529,31375],{"class":45},[28,101531,221],{"class":34},[28,101533,101534],{"class":320},"\"initial time:\"",[28,101536,101537],{"class":34},", data.time)\n",[28,101539,101540,101542,101544,101547],{"class":30,"line":1855},[28,101541,31375],{"class":45},[28,101543,221],{"class":34},[28,101545,101546],{"class":320},"\"initial qpos:\"",[28,101548,101549],{"class":34},", data.qpos.copy())\n",[28,101551,101552],{"class":30,"line":1860},[28,101553,2477],{"emptyLinePlaceholder":144},[28,101555,101556,101558,101561,101563,101565,101567,101569],{"class":30,"line":2654},[28,101557,3278],{"class":38},[28,101559,101560],{"class":34}," _ ",[28,101562,26121],{"class":38},[28,101564,32519],{"class":45},[28,101566,221],{"class":34},[28,101568,525],{"class":45},[28,101570,30862],{"class":34},[28,101572,101573],{"class":30,"line":2668},[28,101574,101575],{"class":34},"        mujoco.mj_step(model, data)\n",[28,101577,101578],{"class":30,"line":2676},[28,101579,2477],{"emptyLinePlaceholder":144},[28,101581,101582,101584,101586,101589],{"class":30,"line":2681},[28,101583,31375],{"class":45},[28,101585,221],{"class":34},[28,101587,101588],{"class":320},"\"final time:\"",[28,101590,101537],{"class":34},[28,101592,101593,101595,101597,101600],{"class":30,"line":2687},[28,101594,31375],{"class":45},[28,101596,221],{"class":34},[28,101598,101599],{"class":320},"\"final qpos:\"",[28,101601,101549],{"class":34},[28,101603,101604],{"class":30,"line":2693},[28,101605,2477],{"emptyLinePlaceholder":144},[28,101607,101608],{"class":30,"line":2698},[28,101609,2477],{"emptyLinePlaceholder":144},[28,101611,101612,101614,101616,101619,101622],{"class":30,"line":8025},[28,101613,1608],{"class":38},[28,101615,31296],{"class":45},[28,101617,101618],{"class":38}," ==",[28,101620,101621],{"class":320}," \"__main__\"",[28,101623,3816],{"class":34},[28,101625,101626],{"class":30,"line":8049},[28,101627,101628],{"class":34},"    main()\n",[188,101630,101631],{"id":101631},"代码逐段解释",[14,101633,101634],{},"导入库：",[18,101636,101638],{"className":20,"code":101637,"language":22,"meta":23,"style":23},"import mujoco\n",[25,101639,101640],{"__ignoreMap":23},[28,101641,101642,101644],{"class":30,"line":31},[28,101643,30468],{"class":38},[28,101645,101360],{"class":34},[14,101647,101648],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101650,101651],{},"定义 XML：",[18,101653,101655],{"className":20,"code":101654,"language":22,"meta":23,"style":23},"XML = \"\"\"\n...\n\"\"\"\n",[25,101656,101657,101665,101670],{"__ignoreMap":23},[28,101658,101659,101661,101663],{"class":30,"line":31},[28,101660,101373],{"class":45},[28,101662,13641],{"class":38},[28,101664,101378],{"class":320},[28,101666,101667],{"class":30,"line":94},[28,101668,101669],{"class":320},"...\n",[28,101671,101672],{"class":30,"line":109},[28,101673,95757],{"class":320},[14,101675,101676,101677,101680],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[25,101678,101679],{},"freejoint"," 的方块。",[14,101682,101683],{},"编译模型：",[18,101685,101687],{"className":20,"code":101686,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\n",[25,101688,101689],{"__ignoreMap":23},[28,101690,101691,101694,101696,101698,101700],{"class":30,"line":31},[28,101692,101693],{"class":34},"model ",[28,101695,39],{"class":38},[28,101697,101471],{"class":34},[28,101699,101373],{"class":45},[28,101701,227],{"class":34},[14,101703,101704],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101706,101707],{},"创建数据：",[18,101709,101711],{"className":20,"code":101710,"language":22,"meta":23,"style":23},"data = mujoco.MjData(model)\n",[25,101712,101713],{"__ignoreMap":23},[28,101714,101715,101718,101720],{"class":30,"line":31},[28,101716,101717],{"class":34},"data ",[28,101719,39],{"class":38},[28,101721,101485],{"class":34},[14,101723,101724,101726,101727,101729],{},[25,101725,33477],{}," 会保存仿真当前状态。刚创建时，时间是 ",[25,101728,407],{},"，方块还在初始位置。",[14,101731,101732],{},"推进仿真：",[18,101734,101736],{"className":20,"code":101735,"language":22,"meta":23,"style":23},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[25,101737,101738,101754],{"__ignoreMap":23},[28,101739,101740,101742,101744,101746,101748,101750,101752],{"class":30,"line":31},[28,101741,3102],{"class":38},[28,101743,101560],{"class":34},[28,101745,26121],{"class":38},[28,101747,32519],{"class":45},[28,101749,221],{"class":34},[28,101751,525],{"class":45},[28,101753,30862],{"class":34},[28,101755,101756],{"class":30,"line":94},[28,101757,101758],{"class":34},"    mujoco.mj_step(model, data)\n",[14,101760,101761,101762,101764],{},"每次 ",[25,101763,101274],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[188,101766,101767],{"id":101767},"代码逐行细讲",[14,101769,101770],{},"下面把完整代码按新手视角拆开讲。",[18,101772,101773],{"className":20,"code":101637,"language":22,"meta":23,"style":23},[25,101774,101775],{"__ignoreMap":23},[28,101776,101777,101779],{"class":30,"line":31},[28,101778,30468],{"class":38},[28,101780,101360],{"class":34},[14,101782,101783,101785,101786,428,101788,428,101790,28463],{},[25,101784,30468],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[25,101787,100734],{},[25,101789,100739],{},[25,101791,101792],{},"mujoco.mj_step",[18,101794,101795],{"className":20,"code":101654,"language":22,"meta":23,"style":23},[25,101796,101797,101805,101809],{"__ignoreMap":23},[28,101798,101799,101801,101803],{"class":30,"line":31},[28,101800,101373],{"class":45},[28,101802,13641],{"class":38},[28,101804,101378],{"class":320},[28,101806,101807],{"class":30,"line":94},[28,101808,101669],{"class":320},[28,101810,101811],{"class":30,"line":109},[28,101812,95757],{"class":320},[14,101814,101815,101817,101818,101821],{},[25,101816,101373],{}," 是一个变量名。右边的三引号 ",[25,101819,101820],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[18,101823,101824],{"className":53142,"code":101383,"language":53144,"meta":23,"style":23},[25,101825,101826],{"__ignoreMap":23},[28,101827,101828,101830,101832,101835,101837,101840],{"class":30,"line":31},[28,101829,99],{"class":34},[28,101831,101080],{"class":51375},[28,101833,101834],{"class":2040}," model",[28,101836,39],{"class":34},[28,101838,101839],{"class":320},"\"first_sim\"",[28,101841,51382],{"class":34},[14,101843,101844,101845,101848,101849,28463],{},"这是 XML 的根标签。",[25,101846,101847],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[25,101850,101851],{},"first_sim",[18,101853,101854],{"className":53142,"code":101242,"language":53144,"meta":23,"style":23},[25,101855,101856],{"__ignoreMap":23},[28,101857,101858,101860,101862,101864,101866,101868,101870,101872,101874],{"class":30,"line":31},[28,101859,99],{"class":34},[28,101861,69241],{"class":51375},[28,101863,101253],{"class":2040},[28,101865,39],{"class":34},[28,101867,101258],{"class":320},[28,101869,101261],{"class":2040},[28,101871,39],{"class":34},[28,101873,101266],{"class":320},[28,101875,101203],{"class":34},[14,101877,101878,101880,101881,101884,101885,101888],{},[25,101879,69241],{}," 用来设置仿真参数。",[25,101882,101883],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[25,101886,101887],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[18,101890,101892],{"className":53142,"code":101891,"language":53144,"meta":23,"style":23},"\u003Cworldbody>\n",[25,101893,101894],{"__ignoreMap":23},[28,101895,101896,101898,101901],{"class":30,"line":31},[28,101897,99],{"class":34},[28,101899,101900],{"class":51375},"worldbody",[28,101902,51382],{"class":34},[14,101904,101905,101907],{},[25,101906,101900],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[18,101909,101911],{"className":53142,"code":101910,"language":53144,"meta":23,"style":23},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,101912,101913],{"__ignoreMap":23},[28,101914,101915,101917,101919,101921,101923,101926,101928,101930,101933,101935,101937,101940,101942,101944,101947],{"class":30,"line":31},[28,101916,99],{"class":34},[28,101918,101179],{"class":51375},[28,101920,14997],{"class":2040},[28,101922,39],{"class":34},[28,101924,101925],{"class":320},"\"floor\"",[28,101927,53899],{"class":2040},[28,101929,39],{"class":34},[28,101931,101932],{"class":320},"\"plane\"",[28,101934,101195],{"class":2040},[28,101936,39],{"class":34},[28,101938,101939],{"class":320},"\"2 2 0.1\"",[28,101941,78842],{"class":2040},[28,101943,39],{"class":34},[28,101945,101946],{"class":320},"\"0.8 0.8 0.8 1\"",[28,101948,101203],{"class":34},[14,101950,101951,101952,101954,101955,101958,101959,101962,101963,101965],{},"这行创建地面。",[25,101953,101179],{}," 是几何体。",[25,101956,101957],{},"name=\"floor\""," 是名字。",[25,101960,101961],{},"type=\"plane\""," 表示平面。",[25,101964,55185],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[18,101967,101969],{"className":53142,"code":101968,"language":53144,"meta":23,"style":23},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,101970,101971],{"__ignoreMap":23},[28,101972,101973,101975,101977,101979,101981,101983,101985,101987,101989],{"class":30,"line":31},[28,101974,99],{"class":34},[28,101976,51875],{"class":51375},[28,101978,14997],{"class":2040},[28,101980,39],{"class":34},[28,101982,53566],{"class":320},[28,101984,101165],{"class":2040},[28,101986,39],{"class":34},[28,101988,101170],{"class":320},[28,101990,51382],{"class":34},[14,101992,101993,101994,28463,101996,101999,102000,102002],{},"这行创建一个刚体，名字叫 ",[25,101995,53789],{},[25,101997,101998],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[25,102001,101228],{},"，也就是离地面 1 米高。",[18,102004,102006],{"className":53142,"code":102005,"language":53144,"meta":23,"style":23},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[25,102007,102008],{"__ignoreMap":23},[28,102009,102010,102012,102014,102016,102018,102021],{"class":30,"line":31},[28,102011,99],{"class":34},[28,102013,101679],{"class":51375},[28,102015,14997],{"class":2040},[28,102017,39],{"class":34},[28,102019,102020],{"class":320},"\"box_free\"",[28,102022,101203],{"class":34},[14,102024,102025,102026,102028],{},"这行很重要。",[25,102027,101679],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[18,102030,102032],{"className":53142,"code":102031,"language":53144,"meta":23,"style":23},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,102033,102034],{"__ignoreMap":23},[28,102035,102036,102038,102040,102042,102044,102046,102048,102050,102052,102054,102056,102058,102061,102063,102065,102067,102069,102072],{"class":30,"line":31},[28,102037,99],{"class":34},[28,102039,101179],{"class":51375},[28,102041,14997],{"class":2040},[28,102043,39],{"class":34},[28,102045,101186],{"class":320},[28,102047,53899],{"class":2040},[28,102049,39],{"class":34},[28,102051,53566],{"class":320},[28,102053,101195],{"class":2040},[28,102055,39],{"class":34},[28,102057,101200],{"class":320},[28,102059,102060],{"class":2040}," mass",[28,102062,39],{"class":34},[28,102064,3755],{"class":320},[28,102066,78842],{"class":2040},[28,102068,39],{"class":34},[28,102070,102071],{"class":320},"\"1 0 0 1\"",[28,102073,101203],{"class":34},[14,102075,102076,102077,102080,102081,102084,102085,102088,102089,102092],{},"这行给 box body 添加一个盒子形状。",[25,102078,102079],{},"type=\"box\""," 表示形状是盒子。",[25,102082,102083],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[25,102086,102087],{},"mass=\"1\""," 表示质量是 1。",[25,102090,102091],{},"rgba=\"1 0 0 1\""," 表示红色。",[18,102094,102096],{"className":20,"code":102095,"language":22,"meta":23,"style":23},"def main() -> None:\n",[25,102097,102098],{"__ignoreMap":23},[28,102099,102100,102102,102104,102106,102108],{"class":30,"line":31},[28,102101,32023],{"class":38},[28,102103,2050],{"class":2040},[28,102105,101457],{"class":34},[28,102107,95745],{"class":45},[28,102109,3816],{"class":34},[14,102111,102112,102114,102115,102118,102119,102122],{},[25,102113,32023],{}," 用来定义函数。这里定义了一个叫 ",[25,102116,102117],{},"main"," 的函数。",[25,102120,102121],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[18,102124,102125],{"className":20,"code":101686,"language":22,"meta":23,"style":23},[25,102126,102127],{"__ignoreMap":23},[28,102128,102129,102131,102133,102135,102137],{"class":30,"line":31},[28,102130,101693],{"class":34},[28,102132,39],{"class":38},[28,102134,101471],{"class":34},[28,102136,101373],{"class":45},[28,102138,227],{"class":34},[14,102140,102141,102142,102145],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[25,102143,102144],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[18,102147,102148],{"className":20,"code":101710,"language":22,"meta":23,"style":23},[25,102149,102150],{"__ignoreMap":23},[28,102151,102152,102154,102156],{"class":30,"line":31},[28,102153,101717],{"class":34},[28,102155,39],{"class":38},[28,102157,101485],{"class":34},[14,102159,102160,102161,102163,102164,102166],{},"这行创建仿真数据。",[25,102162,33477],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[25,102165,33477],{}," 都会变化。",[18,102168,102170],{"className":20,"code":102169,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[25,102171,102172,102182,102192],{"__ignoreMap":23},[28,102173,102174,102176,102178,102180],{"class":30,"line":31},[28,102175,30491],{"class":45},[28,102177,221],{"class":34},[28,102179,101498],{"class":320},[28,102181,101501],{"class":34},[28,102183,102184,102186,102188,102190],{"class":30,"line":94},[28,102185,30491],{"class":45},[28,102187,221],{"class":34},[28,102189,101510],{"class":320},[28,102191,101513],{"class":34},[28,102193,102194,102196,102198,102200],{"class":30,"line":109},[28,102195,30491],{"class":45},[28,102197,221],{"class":34},[28,102199,101522],{"class":320},[28,102201,101525],{"class":34},[14,102203,102204,102206,102207,102210,102211,102214,102215,102218,102219,102222],{},[25,102205,30491],{}," 用来输出信息。",[25,102208,102209],{},"model.nq"," 是位置变量数量，",[25,102212,102213],{},"model.nv"," 是速度变量数量，",[25,102216,102217],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[25,102220,102221],{},"nu"," 是 0。",[18,102224,102226],{"className":20,"code":102225,"language":22,"meta":23,"style":23},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[25,102227,102228,102238],{"__ignoreMap":23},[28,102229,102230,102232,102234,102236],{"class":30,"line":31},[28,102231,30491],{"class":45},[28,102233,221],{"class":34},[28,102235,101534],{"class":320},[28,102237,101537],{"class":34},[28,102239,102240,102242,102244,102246],{"class":30,"line":94},[28,102241,30491],{"class":45},[28,102243,221],{"class":34},[28,102245,101546],{"class":320},[28,102247,101549],{"class":34},[14,102249,102250,102251,102253,102254,102256,102257,102260],{},"这里打印初始时间和初始位置。",[25,102252,101126],{}," 一开始是 0。",[25,102255,101129],{}," 是位置数组。",[25,102258,102259],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[18,102262,102263],{"className":20,"code":101735,"language":22,"meta":23,"style":23},[25,102264,102265,102281],{"__ignoreMap":23},[28,102266,102267,102269,102271,102273,102275,102277,102279],{"class":30,"line":31},[28,102268,3102],{"class":38},[28,102270,101560],{"class":34},[28,102272,26121],{"class":38},[28,102274,32519],{"class":45},[28,102276,221],{"class":34},[28,102278,525],{"class":45},[28,102280,30862],{"class":34},[28,102282,102283],{"class":30,"line":94},[28,102284,101758],{"class":34},[14,102286,102287,102289,102290,102293,102294,102296,102297,102299],{},[25,102288,3102],{}," 是循环。",[25,102291,102292],{},"range(100)"," 表示循环 100 次。",[25,102295,1196],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[25,102298,101274],{},"，仿真就前进一步。",[18,102301,102303],{"className":20,"code":102302,"language":22,"meta":23,"style":23},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[25,102304,102305,102315],{"__ignoreMap":23},[28,102306,102307,102309,102311,102313],{"class":30,"line":31},[28,102308,30491],{"class":45},[28,102310,221],{"class":34},[28,102312,101588],{"class":320},[28,102314,101537],{"class":34},[28,102316,102317,102319,102321,102323],{"class":30,"line":94},[28,102318,30491],{"class":45},[28,102320,221],{"class":34},[28,102322,101599],{"class":320},[28,102324,101549],{"class":34},[14,102326,102327],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[18,102329,102331],{"className":20,"code":102330,"language":22,"meta":23,"style":23},"if __name__ == \"__main__\":\n    main()\n",[25,102332,102333,102345],{"__ignoreMap":23},[28,102334,102335,102337,102339,102341,102343],{"class":30,"line":31},[28,102336,1608],{"class":38},[28,102338,31296],{"class":45},[28,102340,101618],{"class":38},[28,102342,101621],{"class":320},[28,102344,3816],{"class":34},[28,102346,102347],{"class":30,"line":94},[28,102348,101628],{"class":34},[14,102350,102351,102352,102355,102356,28463],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[25,102353,102354],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[25,102357,102354],{},[14,102359,102360],{},"运行:",[18,102362,102364],{"className":23899,"code":102363,"language":23901,"meta":23,"style":23},"python ch1_first_sim.py\n",[25,102365,102366],{"__ignoreMap":23},[28,102367,102368,102370],{"class":30,"line":31},[28,102369,22],{"class":2040},[28,102371,101345],{"class":320},[159,102373,102375],{"id":102374},"_5运行结果说明","5.运行结果说明",[14,102377,102378],{},"你应该看到类似输出:",[18,102380,102383],{"className":102381,"code":102382,"language":5264,"meta":23},[5262],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[25,102384,102382],{"__ignoreMap":23},[14,102386,102387,102389,102390,102393,102394,28463],{},[25,102388,101679],{}," 有 7 个位置变量: ",[25,102391,102392],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[25,102395,102396],{},"vx vy vz wx wy wz",[14,102398,102399,102400,102403],{},"你还会看到 ",[25,102401,102402],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[159,102405,102407],{"id":102406},"_6验证步骤","6.验证步骤",[14,102409,102410],{},"确认版本:",[18,102412,102413],{"className":23899,"code":100998,"language":23901,"meta":23,"style":23},[25,102414,102415],{"__ignoreMap":23},[28,102416,102417,102419,102421],{"class":30,"line":31},[28,102418,22],{"class":2040},[28,102420,30436],{"class":45},[28,102422,101009],{"class":320},[14,102424,102425],{},"确认导入的是官方 bindings:",[18,102427,102429],{"className":23899,"code":102428,"language":23901,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco)\"\n",[25,102430,102431],{"__ignoreMap":23},[28,102432,102433,102435,102437],{"class":30,"line":31},[28,102434,22],{"class":2040},[28,102436,30436],{"class":45},[28,102438,102439],{"class":320}," \"import mujoco; print(mujoco)\"\n",[14,102441,102442],{},"运行程序:",[18,102444,102445],{"className":23899,"code":102363,"language":23901,"meta":23,"style":23},[25,102446,102447],{"__ignoreMap":23},[28,102448,102449,102451],{"class":30,"line":31},[28,102450,22],{"class":2040},[28,102452,101345],{"class":320},[14,102454,102455,102456,102459,102460,28463],{},"检查 ",[25,102457,102458],{},"final time"," 是否约等于 ",[25,102461,102462],{},"1.0",[14,102464,102465],{},"再做几个小实验：",[171,102467,102468,102478,102486,102499],{},[174,102469,102470,102471,102473,102474,102477],{},"把 ",[25,102472,101998],{}," 改成 ",[25,102475,102476],{},"pos=\"0 0 2\"","，观察初始高度变化。",[174,102479,102470,102480,102473,102482,102485],{},[25,102481,101887],{},[25,102483,102484],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[174,102487,102470,102488,102473,102490,102493,102494,102496,102497,28463],{},[25,102489,101883],{},[25,102491,102492],{},"timestep=\"0.005\"","，观察 100 步后的 ",[25,102495,102458],{}," 是否变成约 ",[25,102498,35405],{},[174,102500,102501,102502,102505],{},"删除 ",[25,102503,102504],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102507,102508],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[159,102510,102512],{"id":102511},"_7常见错误与解决方案","7.常见错误与解决方案",[188,102514,102516],{"id":102515},"modulenotfounderror-no-module-named-mujoco",[25,102517,102518],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102520,102521],{},"解决:",[18,102523,102525],{"className":23899,"code":102524,"language":23901,"meta":23,"style":23},"pip install \"mujoco>=2.3\"\n",[25,102526,102527],{"__ignoreMap":23},[28,102528,102529,102531,102533],{"class":30,"line":31},[28,102530,23908],{"class":2040},[28,102532,23911],{"class":320},[28,102534,102535],{"class":320}," \"mujoco>=2.3\"\n",[188,102537,102539],{"id":102538},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102541,102542],{},"先安装系统依赖:",[18,102544,102546],{"className":23899,"code":102545,"language":23901,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[25,102547,102548],{"__ignoreMap":23},[28,102549,102550,102552,102554,102556,102558,102561,102563,102566,102568,102571,102573],{"class":30,"line":31},[28,102551,24654],{"class":2040},[28,102553,26393],{"class":320},[28,102555,23911],{"class":320},[28,102557,26478],{"class":45},[28,102559,102560],{"class":320}," mesa-libGL",[28,102562,100873],{"class":320},[28,102564,102565],{"class":320}," glfw",[28,102567,100893],{"class":320},[28,102569,102570],{"class":320}," libX11",[28,102572,100906],{"class":320},[28,102574,102575],{"class":320}," libXrandr\n",[188,102577,102579],{"id":102578},"xml-解析失败","XML 解析失败",[14,102581,102582],{},"检查:",[171,102584,102585,102588,102591,102597],{},[174,102586,102587],{},"标签是否闭合",[174,102589,102590],{},"属性是否带引号",[174,102592,102593,102594],{},"根节点是否是 ",[25,102595,102596],{},"\u003Cmujoco>",[174,102598,102599,102601,102602,102605],{},[25,102600,51875],{}," 是否放在 ",[25,102603,102604],{},"\u003Cworldbody>"," 内部",[188,102607,102609,102611,102612],{"id":102608},"final-time-不是严格等于-10",[25,102610,102458],{}," 不是严格等于 ",[25,102613,102462],{},[14,102615,102616],{},"这通常不是错误。浮点数计算可能得到：",[18,102618,102621],{"className":102619,"code":102620,"language":5264,"meta":23},[5262],"1.0000000000000007\n",[25,102622,102620],{"__ignoreMap":23},[14,102624,102625,102626,102628],{},"只要接近 ",[25,102627,102462],{}," 就正常。",[188,102630,102631],{"id":102631},"方块没有掉下来",[14,102633,102634],{},"检查：",[171,102636,102637,102643,102649,102654],{},[174,102638,102639,102640],{},"方块 body 里是否有 ",[25,102641,102642],{},"\u003Cfreejoint\u002F>",[174,102644,102645,102646],{},"重力是否是 ",[25,102647,102648],{},"0 0 -9.81",[174,102650,102651,102652],{},"是否真的调用了 ",[25,102653,100744],{},[174,102655,102656,102657,102659,102660],{},"你看的是否是 ",[25,102658,102402],{},"，不是 ",[25,102661,102662],{},"initial qpos",[159,102664,102666],{"id":102665},"_8本章小结","8.本章小结",[14,102668,102669],{},"本章你已经完成了 MuJoCo 的最小闭环：",[18,102671,102674],{"className":102672,"code":102673,"language":5264,"meta":23},[5262],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[25,102675,102673],{"__ignoreMap":23},[14,102677,102678],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[136,102680,102681],{},"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":23,"searchDepth":94,"depth":94,"links":102683},[102684,102685,102686,102691,102695,102696,102697,102705],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":102687},[102688,102689,102690],{"id":101141,"depth":109,"text":101142},{"id":101235,"depth":109,"text":101236},{"id":101287,"depth":109,"text":101288},{"id":101311,"depth":94,"text":101312,"children":102692},[102693,102694],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":102698},[102699,102700,102701,102702,102704],{"id":102515,"depth":109,"text":102518},{"id":102538,"depth":109,"text":102539},{"id":102578,"depth":109,"text":102579},{"id":102608,"depth":109,"text":102703},"final time 不是严格等于 1.0",{"id":102631,"depth":109,"text":102631},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100697,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102712,"title":102713,"body":102714,"description":23,"extension":142,"meta":104370,"navigation":144,"path":104371,"seo":104372,"stem":104373,"__hash__":104374},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102715,"toc":104346},[102716,102719,102721,102724,102727,102744,102839,102842,102848,102850,102852,102876,102879,102893,102896,102937,102939,102952,102954,102957,103005,103017,103020,103023,103029,103042,103109,103112,103131,103134,103137,103143,103145,103154,103157,103161,103170,103252,103261,103265,103271,103285,103295,103297,103627,103630,103642,103644,103655,103657,103660,103678,103681,103684,103702,103713,103716,103731,103741,103743,103764,103781,103801,103807,103847,103863,103879,103885,103888,103912,103928,103933,103963,103980,104005,104008,104023,104032,104047,104056,104071,104078,104080,104090,104103,104110,104113,104152,104159,104161,104213,104215,104221,104224,104231,104238,104241,104243,104261,104264,104267,104301,104313,104315,104318,104340,104343],[10,102717,102713],{"id":102718},"_2xml-与-mjcf-物理建模基础",[159,102720,100706],{"id":100705},[14,102722,102723],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102725,102726],{},"本章结束后，你应该能看懂一个简单模型里：",[171,102728,102729,102732,102735,102738,102741],{},[174,102730,102731],{},"地面在哪里。",[174,102733,102734],{},"物体初始位置在哪里。",[174,102736,102737],{},"几何体是什么形状。",[174,102739,102740],{},"哪些 body 可以自由运动。",[174,102742,102743],{},"如何用名字在 Python 里找到 XML 中的对象。",[353,102745,102746,102756],{},[356,102747,102748],{},[359,102749,102750,102753],{},[362,102751,102752],{"align":23813},"标签",[362,102754,102755],{"align":23813},"作用",[400,102757,102758,102767,102777,102786,102796,102806,102819,102829],{},[359,102759,102760,102764],{},[405,102761,102762],{"align":23813},[25,102763,102596],{},[405,102765,102766],{"align":23813},"根节点",[359,102768,102769,102774],{},[405,102770,102771],{"align":23813},[25,102772,102773],{},"\u003Coption>",[405,102775,102776],{"align":23813},"仿真参数",[359,102778,102779,102783],{},[405,102780,102781],{"align":23813},[25,102782,102604],{},[405,102784,102785],{"align":23813},"世界中的物体",[359,102787,102788,102793],{},[405,102789,102790],{"align":23813},[25,102791,102792],{},"\u003Cbody>",[405,102794,102795],{"align":23813},"刚体",[359,102797,102798,102803],{},[405,102799,102800],{"align":23813},[25,102801,102802],{},"\u003Cgeom>",[405,102804,102805],{"align":23813},"几何体、碰撞体、可视体",[359,102807,102808,102816],{},[405,102809,102810,25056,102813],{"align":23813},[25,102811,102812],{},"\u003Cjoint>",[25,102814,102815],{},"\u003Cfreejoint>",[405,102817,102818],{"align":23813},"关节",[359,102820,102821,102826],{},[405,102822,102823],{"align":23813},[25,102824,102825],{},"\u003Csite>",[405,102827,102828],{"align":23813},"标记点",[359,102830,102831,102836],{},[405,102832,102833],{"align":23813},[25,102834,102835],{},"\u003Cactuator>",[405,102837,102838],{"align":23813},"控制器",[14,102840,102841],{},"初学时可以先记住：",[18,102843,102846],{"className":102844,"code":102845,"language":5264,"meta":23},[5262],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[25,102847,102845],{"__ignoreMap":23},[159,102849,100829],{"id":100828},[14,102851,100832],{},[18,102853,102855],{"className":23899,"code":102854,"language":23901,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[25,102856,102857],{"__ignoreMap":23},[28,102858,102859,102861,102863,102865,102867,102869,102871,102873],{"class":30,"line":31},[28,102860,24654],{"class":2040},[28,102862,26393],{"class":320},[28,102864,23911],{"class":320},[28,102866,26478],{"class":45},[28,102868,102560],{"class":320},[28,102870,100873],{"class":320},[28,102872,102565],{"class":320},[28,102874,102875],{"class":320}," glfw-devel\n",[14,102877,102878],{},"pip:",[18,102880,102881],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},[25,102882,102883],{"__ignoreMap":23},[28,102884,102885,102887,102889,102891],{"class":30,"line":31},[28,102886,23908],{"class":2040},[28,102888,23911],{"class":320},[28,102890,100989],{"class":320},[28,102892,100992],{"class":320},[14,102894,102895],{},"conda:",[18,102897,102899],{"className":23899,"code":102898,"language":23901,"meta":23,"style":23},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[25,102900,102901,102918,102927],{"__ignoreMap":23},[28,102902,102903,102905,102907,102909,102912,102914,102916],{"class":30,"line":31},[28,102904,30408],{"class":2040},[28,102906,29254],{"class":320},[28,102908,25193],{"class":45},[28,102910,102911],{"class":320}," mujoco-xml",[28,102913,101034],{"class":320},[28,102915,101037],{"class":45},[28,102917,101040],{"class":45},[28,102919,102920,102922,102924],{"class":30,"line":94},[28,102921,30408],{"class":2040},[28,102923,101047],{"class":320},[28,102925,102926],{"class":320}," mujoco-xml\n",[28,102928,102929,102931,102933,102935],{"class":30,"line":109},[28,102930,23908],{"class":2040},[28,102932,23911],{"class":320},[28,102934,100989],{"class":320},[28,102936,100992],{"class":320},[14,102938,101063],{},[171,102940,102941,102944,102949],{},[174,102942,102943],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[174,102945,102946,102947,28463],{},"本章使用基础标签，适用于 ",[25,102948,101086],{},[174,102950,102951],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[159,102953,101104],{"id":101103},[14,102955,102956],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[18,102958,102960],{"className":53142,"code":102959,"language":53144,"meta":23,"style":23},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[25,102961,102962,102976,102984,102989,102997],{"__ignoreMap":23},[28,102963,102964,102966,102968,102970,102972,102974],{"class":30,"line":31},[28,102965,99],{"class":34},[28,102967,101080],{"class":51375},[28,102969,101834],{"class":2040},[28,102971,39],{"class":34},[28,102973,62754],{"class":320},[28,102975,51382],{"class":34},[28,102977,102978,102980,102982],{"class":30,"line":94},[28,102979,52219],{"class":34},[28,102981,101900],{"class":51375},[28,102983,51382],{"class":34},[28,102985,102986],{"class":30,"line":109},[28,102987,102988],{"class":34},"    ...\n",[28,102990,102991,102993,102995],{"class":30,"line":125},[28,102992,52492],{"class":34},[28,102994,101900],{"class":51375},[28,102996,51382],{"class":34},[28,102998,102999,103001,103003],{"class":30,"line":131},[28,103000,51860],{"class":34},[28,103002,101080],{"class":51375},[28,103004,51382],{"class":34},[14,103006,103007,103009,103010,103012,103013,103016],{},[25,103008,51875],{}," 表示刚体。",[25,103011,101179],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[25,103014,103015],{},"joint"," 表示刚体相对父刚体如何运动。",[188,103018,103019],{"id":103019},"层级结构非常重要",[14,103021,103022],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[18,103024,103027],{"className":103025,"code":103026,"language":5264,"meta":23},[5262],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[25,103028,103026],{"__ignoreMap":23},[14,103030,103031,101077,103034,103037,103038,103041],{},[25,103032,103033],{},"red_box_geom",[25,103035,103036],{},"box_center"," 都属于 ",[25,103039,103040],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[18,103043,103045],{"className":53142,"code":103044,"language":53144,"meta":23,"style":23},"\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",[25,103046,103047,103067,103081,103101],{"__ignoreMap":23},[28,103048,103049,103051,103053,103055,103057,103059,103061,103063,103065],{"class":30,"line":31},[28,103050,99],{"class":34},[28,103052,51875],{"class":51375},[28,103054,14997],{"class":2040},[28,103056,39],{"class":34},[28,103058,53566],{"class":320},[28,103060,101165],{"class":2040},[28,103062,39],{"class":34},[28,103064,101170],{"class":320},[28,103066,51382],{"class":34},[28,103068,103069,103071,103073,103075,103077,103079],{"class":30,"line":94},[28,103070,52219],{"class":34},[28,103072,101679],{"class":51375},[28,103074,14997],{"class":2040},[28,103076,39],{"class":34},[28,103078,102020],{"class":320},[28,103080,101203],{"class":34},[28,103082,103083,103085,103087,103089,103091,103093,103095,103097,103099],{"class":30,"line":109},[28,103084,52219],{"class":34},[28,103086,101179],{"class":51375},[28,103088,53899],{"class":2040},[28,103090,39],{"class":34},[28,103092,53566],{"class":320},[28,103094,101195],{"class":2040},[28,103096,39],{"class":34},[28,103098,101200],{"class":320},[28,103100,101203],{"class":34},[28,103102,103103,103105,103107],{"class":30,"line":125},[28,103104,51860],{"class":34},[28,103106,51875],{"class":51375},[28,103108,51382],{"class":34},[14,103110,103111],{},"含义:",[171,103113,103114,103120,103125,103128],{},[174,103115,103116,103117,103119],{},"创建名为 ",[25,103118,53789],{}," 的刚体",[174,103121,103122,103123],{},"初始位置在世界坐标 ",[25,103124,101228],{},[174,103126,103127],{},"它有一个自由关节",[174,103129,103130],{},"它有一个盒子几何体",[188,103132,103133],{"id":103133},"坐标怎么理解",[14,103135,103136],{},"MuJoCo 默认使用三维坐标：",[18,103138,103141],{"className":103139,"code":103140,"language":5264,"meta":23},[5262],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[25,103142,103140],{"__ignoreMap":23},[14,103144,14710],{},[18,103146,103148],{"className":53142,"code":103147,"language":53144,"meta":23,"style":23},"pos=\"0 0 1\"\n",[25,103149,103150],{"__ignoreMap":23},[28,103151,103152],{"class":30,"line":31},[28,103153,103147],{"class":34},[14,103155,103156],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[188,103158,103160],{"id":103159},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103162,103163,103164,82605,103167,103169],{},"不同 ",[25,103165,103166],{},"type",[25,103168,31572],{}," 含义不同：",[353,103171,103172,103187],{},[356,103173,103174],{},[359,103175,103176,103180,103185],{},[362,103177,103178],{"align":23813},[25,103179,103166],{},[362,103181,103182,103184],{"align":23813},[25,103183,31572],{}," 示例",[362,103186,100759],{"align":23813},[400,103188,103189,103203,103218,103237],{},[359,103190,103191,103195,103200],{},[405,103192,103193],{"align":23813},[25,103194,53789],{},[405,103196,103197],{"align":23813},[25,103198,103199],{},"size=\"0.1 0.2 0.3\"",[405,103201,103202],{"align":23813},"x\u002Fy\u002Fz 半边长，不是完整长度",[359,103204,103205,103210,103215],{},[405,103206,103207],{"align":23813},[25,103208,103209],{},"sphere",[405,103211,103212],{"align":23813},[25,103213,103214],{},"size=\"0.1\"",[405,103216,103217],{"align":23813},"球半径",[359,103219,103220,103225,103230],{},[405,103221,103222],{"align":23813},[25,103223,103224],{},"capsule",[405,103226,103227],{"align":23813},[25,103228,103229],{},"size=\"0.03\"",[405,103231,103232,103233,103236],{"align":23813},"胶囊半径，长度常用 ",[25,103234,103235],{},"fromto"," 指定",[359,103238,103239,103244,103249],{},[405,103240,103241],{"align":23813},[25,103242,103243],{},"plane",[405,103245,103246],{"align":23813},[25,103247,103248],{},"size=\"3 3 0.1\"",[405,103250,103251],{"align":23813},"可视平面大小，通常当地面",[14,103253,103254,103255,103257,103258,103260],{},"最容易踩坑的是 box：",[25,103256,102083],{}," 表示边长大约是 ",[25,103259,32113],{},"，因为 MuJoCo 用的是半边长。",[188,103262,103264],{"id":103263},"site-是什么","site 是什么",[14,103266,103267,103270],{},[25,103268,103269],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[171,103272,103273,103276,103279,103282],{},[174,103274,103275],{},"标记机械臂末端。",[174,103277,103278],{},"标记目标位置。",[174,103280,103281],{},"放传感器或相机参考点。",[174,103283,103284],{},"在 Python 中读取某个关键点的世界坐标。",[14,103286,103287,103288,101077,103291,103294],{},"在后面的 Reacher 任务中，",[25,103289,103290],{},"tip",[25,103292,103293],{},"target"," 就会用 site 表示。",[159,103296,101312],{"id":101311},[18,103298,103300],{"className":20,"code":103299,"language":22,"meta":23,"style":23},"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",[25,103301,103302,103308,103318,103322,103326,103334,103339,103343,103347,103351,103356,103360,103365,103370,103375,103380,103384,103388,103392,103396,103400,103404,103416,103428,103436,103440,103455,103470,103474,103487,103502,103515,103528,103532,103548,103552,103556,103567,103579,103591,103603,103607,103611,103623],{"__ignoreMap":23},[28,103303,103304,103306],{"class":30,"line":31},[28,103305,30468],{"class":38},[28,103307,101360],{"class":34},[28,103309,103310,103312,103314,103316],{"class":30,"line":94},[28,103311,30468],{"class":38},[28,103313,31456],{"class":34},[28,103315,31459],{"class":38},[28,103317,31462],{"class":34},[28,103319,103320],{"class":30,"line":109},[28,103321,2477],{"emptyLinePlaceholder":144},[28,103323,103324],{"class":30,"line":125},[28,103325,2477],{"emptyLinePlaceholder":144},[28,103327,103328,103330,103332],{"class":30,"line":131},[28,103329,101373],{"class":45},[28,103331,13641],{"class":38},[28,103333,101378],{"class":320},[28,103335,103336],{"class":30,"line":1291},[28,103337,103338],{"class":320},"\u003Cmujoco model=\"xml_basic\">\n",[28,103340,103341],{"class":30,"line":1297},[28,103342,101388],{"class":320},[28,103344,103345],{"class":30,"line":1388},[28,103346,2477],{"emptyLinePlaceholder":144},[28,103348,103349],{"class":30,"line":1394},[28,103350,101397],{"class":320},[28,103352,103353],{"class":30,"line":1406},[28,103354,103355],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[28,103357,103358],{"class":30,"line":1689},[28,103359,2477],{"emptyLinePlaceholder":144},[28,103361,103362],{"class":30,"line":1694},[28,103363,103364],{"class":320},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[28,103366,103367],{"class":30,"line":1700},[28,103368,103369],{"class":320},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[28,103371,103372],{"class":30,"line":1705},[28,103373,103374],{"class":320},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,103376,103377],{"class":30,"line":1719},[28,103378,103379],{"class":320},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,103381,103382],{"class":30,"line":1724},[28,103383,101426],{"class":320},[28,103385,103386],{"class":30,"line":1730},[28,103387,101431],{"class":320},[28,103389,103390],{"class":30,"line":1751},[28,103391,101436],{"class":320},[28,103393,103394],{"class":30,"line":1756},[28,103395,95757],{"class":320},[28,103397,103398],{"class":30,"line":1770},[28,103399,2477],{"emptyLinePlaceholder":144},[28,103401,103402],{"class":30,"line":1775},[28,103403,2477],{"emptyLinePlaceholder":144},[28,103405,103406,103408,103410,103412,103414],{"class":30,"line":1804},[28,103407,32023],{"class":38},[28,103409,2050],{"class":2040},[28,103411,101457],{"class":34},[28,103413,95745],{"class":45},[28,103415,3816],{"class":34},[28,103417,103418,103420,103422,103424,103426],{"class":30,"line":1809},[28,103419,101466],{"class":34},[28,103421,39],{"class":38},[28,103423,101471],{"class":34},[28,103425,101373],{"class":45},[28,103427,227],{"class":34},[28,103429,103430,103432,103434],{"class":30,"line":1826},[28,103431,101480],{"class":34},[28,103433,39],{"class":38},[28,103435,101485],{"class":34},[28,103437,103438],{"class":30,"line":1831},[28,103439,2477],{"emptyLinePlaceholder":144},[28,103441,103442,103445,103447,103450,103453],{"class":30,"line":1836},[28,103443,103444],{"class":34},"    box_body_id ",[28,103446,39],{"class":38},[28,103448,103449],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[28,103451,103452],{"class":320},"\"red_box\"",[28,103454,227],{"class":34},[28,103456,103457,103460,103462,103465,103468],{"class":30,"line":1841},[28,103458,103459],{"class":34},"    site_id ",[28,103461,39],{"class":38},[28,103463,103464],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[28,103466,103467],{"class":320},"\"box_center\"",[28,103469,227],{"class":34},[28,103471,103472],{"class":30,"line":1855},[28,103473,2477],{"emptyLinePlaceholder":144},[28,103475,103476,103478,103481,103483,103485],{"class":30,"line":1860},[28,103477,3178],{"class":38},[28,103479,103480],{"class":34}," box_body_id ",[28,103482,99],{"class":38},[28,103484,4170],{"class":45},[28,103486,3816],{"class":34},[28,103488,103489,103492,103495,103497,103500],{"class":30,"line":2654},[28,103490,103491],{"class":38},"        raise",[28,103493,103494],{"class":45}," RuntimeError",[28,103496,221],{"class":34},[28,103498,103499],{"class":320},"\"body red_box not found\"",[28,103501,227],{"class":34},[28,103503,103504,103506,103509,103511,103513],{"class":30,"line":2668},[28,103505,3178],{"class":38},[28,103507,103508],{"class":34}," site_id ",[28,103510,99],{"class":38},[28,103512,4170],{"class":45},[28,103514,3816],{"class":34},[28,103516,103517,103519,103521,103523,103526],{"class":30,"line":2676},[28,103518,103491],{"class":38},[28,103520,103494],{"class":45},[28,103522,221],{"class":34},[28,103524,103525],{"class":320},"\"site box_center not found\"",[28,103527,227],{"class":34},[28,103529,103530],{"class":30,"line":2681},[28,103531,2477],{"emptyLinePlaceholder":144},[28,103533,103534,103536,103538,103540,103542,103544,103546],{"class":30,"line":2687},[28,103535,3278],{"class":38},[28,103537,101560],{"class":34},[28,103539,26121],{"class":38},[28,103541,32519],{"class":45},[28,103543,221],{"class":34},[28,103545,1799],{"class":45},[28,103547,30862],{"class":34},[28,103549,103550],{"class":30,"line":2693},[28,103551,101575],{"class":34},[28,103553,103554],{"class":30,"line":2698},[28,103555,2477],{"emptyLinePlaceholder":144},[28,103557,103558,103560,103562,103565],{"class":30,"line":8025},[28,103559,31375],{"class":45},[28,103561,221],{"class":34},[28,103563,103564],{"class":320},"\"simulation time:\"",[28,103566,101537],{"class":34},[28,103568,103569,103571,103573,103576],{"class":30,"line":8049},[28,103570,31375],{"class":45},[28,103572,221],{"class":34},[28,103574,103575],{"class":320},"\"box body position:\"",[28,103577,103578],{"class":34},", data.xpos[box_body_id].copy())\n",[28,103580,103581,103583,103585,103588],{"class":30,"line":8054},[28,103582,31375],{"class":45},[28,103584,221],{"class":34},[28,103586,103587],{"class":320},"\"site position:\"",[28,103589,103590],{"class":34},", data.site_xpos[site_id].copy())\n",[28,103592,103593,103595,103597,103600],{"class":30,"line":8060},[28,103594,31375],{"class":45},[28,103596,221],{"class":34},[28,103598,103599],{"class":320},"\"box qpos:\"",[28,103601,103602],{"class":34},", np.array(data.qpos))\n",[28,103604,103605],{"class":30,"line":8087},[28,103606,2477],{"emptyLinePlaceholder":144},[28,103608,103609],{"class":30,"line":8092},[28,103610,2477],{"emptyLinePlaceholder":144},[28,103612,103613,103615,103617,103619,103621],{"class":30,"line":8098},[28,103614,1608],{"class":38},[28,103616,31296],{"class":45},[28,103618,101618],{"class":38},[28,103620,101621],{"class":320},[28,103622,3816],{"class":34},[28,103624,103625],{"class":30,"line":8110},[28,103626,101628],{"class":34},[14,103628,103629],{},"保存为：",[18,103631,103633],{"className":23899,"code":103632,"language":23901,"meta":23,"style":23},"touch ch2_xml_basic.py\n",[25,103634,103635],{"__ignoreMap":23},[28,103636,103637,103639],{"class":30,"line":31},[28,103638,101342],{"class":2040},[28,103640,103641],{"class":320}," ch2_xml_basic.py\n",[14,103643,102360],{},[18,103645,103647],{"className":23899,"code":103646,"language":23901,"meta":23,"style":23},"python ch2_xml_basic.py\n",[25,103648,103649],{"__ignoreMap":23},[28,103650,103651,103653],{"class":30,"line":31},[28,103652,22],{"class":2040},[28,103654,103641],{"class":320},[188,103656,101631],{"id":101631},[14,103658,103659],{},"用名字查找 body：",[18,103661,103663],{"className":20,"code":103662,"language":22,"meta":23,"style":23},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[25,103664,103665],{"__ignoreMap":23},[28,103666,103667,103670,103672,103674,103676],{"class":30,"line":31},[28,103668,103669],{"class":34},"box_body_id ",[28,103671,39],{"class":38},[28,103673,103449],{"class":34},[28,103675,103452],{"class":320},[28,103677,227],{"class":34},[14,103679,103680],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103682,103683],{},"用名字查找 site：",[18,103685,103687],{"className":20,"code":103686,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[25,103688,103689],{"__ignoreMap":23},[28,103690,103691,103694,103696,103698,103700],{"class":30,"line":31},[28,103692,103693],{"class":34},"site_id ",[28,103695,39],{"class":38},[28,103697,103464],{"class":34},[28,103699,103467],{"class":320},[28,103701,227],{"class":34},[14,103703,103704,103705,103708,103709,103712],{},"注意第二个参数是对象类型。查 body 就用 ",[25,103706,103707],{},"mjOBJ_BODY","，查 site 就用 ",[25,103710,103711],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103714,103715],{},"读取世界坐标：",[18,103717,103719],{"className":20,"code":103718,"language":22,"meta":23,"style":23},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[25,103720,103721,103726],{"__ignoreMap":23},[28,103722,103723],{"class":30,"line":31},[28,103724,103725],{"class":34},"data.xpos[box_body_id]\n",[28,103727,103728],{"class":30,"line":94},[28,103729,103730],{"class":34},"data.site_xpos[site_id]\n",[14,103732,103733,103736,103737,103740],{},[25,103734,103735],{},"xpos"," 是 body 的世界坐标，",[25,103738,103739],{},"site_xpos"," 是 site 的世界坐标。",[188,103742,101767],{"id":101767},[18,103744,103746],{"className":20,"code":103745,"language":22,"meta":23,"style":23},"import mujoco\nimport numpy as np\n",[25,103747,103748,103754],{"__ignoreMap":23},[28,103749,103750,103752],{"class":30,"line":31},[28,103751,30468],{"class":38},[28,103753,101360],{"class":34},[28,103755,103756,103758,103760,103762],{"class":30,"line":94},[28,103757,30468],{"class":38},[28,103759,31456],{"class":34},[28,103761,31459],{"class":38},[28,103763,31462],{"class":34},[14,103765,103766,103767,103770,103771,103774,103775,428,103778,28463],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[25,103768,103769],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[25,103772,103773],{},"as np"," 是习惯写法，后面就可以写 ",[25,103776,103777],{},"np.array(...)",[25,103779,103780],{},"np.round(...)",[18,103782,103783],{"className":20,"code":101654,"language":22,"meta":23,"style":23},[25,103784,103785,103793,103797],{"__ignoreMap":23},[28,103786,103787,103789,103791],{"class":30,"line":31},[28,103788,101373],{"class":45},[28,103790,13641],{"class":38},[28,103792,101378],{"class":320},[28,103794,103795],{"class":30,"line":94},[28,103796,101669],{"class":320},[28,103798,103799],{"class":30,"line":109},[28,103800,95757],{"class":320},[14,103802,103803,103804,28463],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[25,103805,103806],{},"mujoco.MjModel.from_xml_string(XML)",[18,103808,103810],{"className":53142,"code":103809,"language":53144,"meta":23,"style":23},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,103811,103812],{"__ignoreMap":23},[28,103813,103814,103816,103818,103820,103822,103824,103826,103828,103831,103833,103835,103838,103840,103842,103845],{"class":30,"line":31},[28,103815,99],{"class":34},[28,103817,103269],{"class":51375},[28,103819,14997],{"class":2040},[28,103821,39],{"class":34},[28,103823,103467],{"class":320},[28,103825,101165],{"class":2040},[28,103827,39],{"class":34},[28,103829,103830],{"class":320},"\"0 0 0\"",[28,103832,101195],{"class":2040},[28,103834,39],{"class":34},[28,103836,103837],{"class":320},"\"0.03\"",[28,103839,78842],{"class":2040},[28,103841,39],{"class":34},[28,103843,103844],{"class":320},"\"0 1 0 1\"",[28,103846,101203],{"class":34},[14,103848,103849,103851,103852,103855,103856,103858,103859,103862],{},[25,103850,103269],{}," 是标记点。",[25,103853,103854],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[25,103857,103229],{}," 表示显示出来的小球大小。",[25,103860,103861],{},"rgba=\"0 1 0 1\""," 表示绿色。",[18,103864,103865],{"className":20,"code":103662,"language":22,"meta":23,"style":23},[25,103866,103867],{"__ignoreMap":23},[28,103868,103869,103871,103873,103875,103877],{"class":30,"line":31},[28,103870,103669],{"class":34},[28,103872,39],{"class":38},[28,103874,103449],{"class":34},[28,103876,103452],{"class":320},[28,103878,227],{"class":34},[14,103880,103881,103882,103884],{},"这行的作用是：根据名字 ",[25,103883,103452],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103886,103887],{},"拆开看：",[171,103889,103890,103896,103901,103907],{},[174,103891,103892,103895],{},[25,103893,103894],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[174,103897,103898,103900],{},[25,103899,102144],{}," 是被查询的模型。",[174,103902,103903,103906],{},[25,103904,103905],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[174,103908,103909,103911],{},[25,103910,103452],{}," 是 XML 里写的名字。",[18,103913,103914],{"className":20,"code":103686,"language":22,"meta":23,"style":23},[25,103915,103916],{"__ignoreMap":23},[28,103917,103918,103920,103922,103924,103926],{"class":30,"line":31},[28,103919,103693],{"class":34},[28,103921,39],{"class":38},[28,103923,103464],{"class":34},[28,103925,103467],{"class":320},[28,103927,227],{"class":34},[14,103929,103930,103931,28463],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[25,103932,103467],{},[18,103934,103936],{"className":20,"code":103935,"language":22,"meta":23,"style":23},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[25,103937,103938,103950],{"__ignoreMap":23},[28,103939,103940,103942,103944,103946,103948],{"class":30,"line":31},[28,103941,1608],{"class":38},[28,103943,103480],{"class":34},[28,103945,99],{"class":38},[28,103947,4170],{"class":45},[28,103949,3816],{"class":34},[28,103951,103952,103955,103957,103959,103961],{"class":30,"line":94},[28,103953,103954],{"class":38},"    raise",[28,103956,103494],{"class":45},[28,103958,221],{"class":34},[28,103960,103499],{"class":320},[28,103962,227],{"class":34},[14,103964,103965,103967,103968,103971,103972,103975,103976,103979],{},[25,103966,1608],{}," 是条件判断。",[25,103969,103970],{},"mj_name2id"," 找不到对象时会返回 ",[25,103973,103974],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[25,103977,103978],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[18,103981,103983],{"className":20,"code":103982,"language":22,"meta":23,"style":23},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[25,103984,103985,104001],{"__ignoreMap":23},[28,103986,103987,103989,103991,103993,103995,103997,103999],{"class":30,"line":31},[28,103988,3102],{"class":38},[28,103990,101560],{"class":34},[28,103992,26121],{"class":38},[28,103994,32519],{"class":45},[28,103996,221],{"class":34},[28,103998,1799],{"class":45},[28,104000,30862],{"class":34},[28,104002,104003],{"class":30,"line":94},[28,104004,101758],{"class":34},[14,104006,104007],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[18,104009,104011],{"className":20,"code":104010,"language":22,"meta":23,"style":23},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[25,104012,104013],{"__ignoreMap":23},[28,104014,104015,104017,104019,104021],{"class":30,"line":31},[28,104016,30491],{"class":45},[28,104018,221],{"class":34},[28,104020,103575],{"class":320},[28,104022,103578],{"class":34},[14,104024,104025,104027,104028,104031],{},[25,104026,101138],{}," 保存所有 body 的世界坐标。",[25,104029,104030],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[18,104033,104035],{"className":20,"code":104034,"language":22,"meta":23,"style":23},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[25,104036,104037],{"__ignoreMap":23},[28,104038,104039,104041,104043,104045],{"class":30,"line":31},[28,104040,30491],{"class":45},[28,104042,221],{"class":34},[28,104044,103587],{"class":320},[28,104046,103590],{"class":34},[14,104048,104049,104052,104053,104055],{},[25,104050,104051],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[25,104054,103036],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[18,104057,104059],{"className":20,"code":104058,"language":22,"meta":23,"style":23},"print(\"box qpos:\", np.array(data.qpos))\n",[25,104060,104061],{"__ignoreMap":23},[28,104062,104063,104065,104067,104069],{"class":30,"line":31},[28,104064,30491],{"class":45},[28,104066,221],{"class":34},[28,104068,103599],{"class":320},[28,104070,103602],{"class":34},[14,104072,104073,104074,104077],{},"这里打印广义位置数组。",[25,104075,104076],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[159,104079,102375],{"id":102374},[14,104081,104082,104083,104086,104087,28463],{},"程序会输出 ",[25,104084,104085],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[25,104088,104089],{},"qpos",[14,104091,104092,104094,104095,104098,104099,104102],{},[25,104093,104030],{}," 是 body 的世界坐标位置。",[25,104096,104097],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[25,104100,104101],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104104,82297,104105,82605,104107,104109],{},[25,104106,103036],{},[25,104108,103854],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104111,104112],{},"如果你把 site 改成：",[18,104114,104116],{"className":53142,"code":104115,"language":53144,"meta":23,"style":23},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104117,104118],{"__ignoreMap":23},[28,104119,104120,104122,104124,104126,104128,104131,104133,104135,104138,104140,104142,104144,104146,104148,104150],{"class":30,"line":31},[28,104121,99],{"class":34},[28,104123,103269],{"class":51375},[28,104125,14997],{"class":2040},[28,104127,39],{"class":34},[28,104129,104130],{"class":320},"\"box_top\"",[28,104132,101165],{"class":2040},[28,104134,39],{"class":34},[28,104136,104137],{"class":320},"\"0 0 0.15\"",[28,104139,101195],{"class":2040},[28,104141,39],{"class":34},[28,104143,103837],{"class":320},[28,104145,78842],{"class":2040},[28,104147,39],{"class":34},[28,104149,103844],{"class":320},[28,104151,101203],{"class":34},[14,104153,104154,104155,104158],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[25,104156,104157],{},"site position"," 就会比 body position 的 z 坐标更高。",[159,104160,102407],{"id":102406},[171,104162,104163,104172,104175,104182,104188,104199],{},[174,104164,102470,104165,104167,104168,102473,104170,28463],{},[25,104166,103040],{}," 的初始高度从 ",[25,104169,46],{},[25,104171,52],{},[174,104173,104174],{},"重新运行程序。",[174,104176,104177,104178,104181],{},"观察 ",[25,104179,104180],{},"box qpos"," 和最终位置是否变化。",[174,104183,104184,104185,104187],{},"故意把 ",[25,104186,103269],{}," 名称改错，确认程序能报错。",[174,104189,102470,104190,104192,104193,102473,104195,104198],{},[25,104191,101179],{}," 的颜色 ",[25,104194,102091],{},[25,104196,104197],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[174,104200,102470,104201,82605,104203,102473,104206,104209,104210,104212],{},[25,104202,103036],{},[25,104204,104205],{},"pos",[25,104207,104208],{},"0 0 0.2","，观察 ",[25,104211,104157],{}," 如何变化。",[159,104214,102512],{"id":102511},[188,104216,104218],{"id":104217},"xml-error-schema-violation",[25,104219,104220],{},"XML Error: Schema violation",[14,104222,104223],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[188,104225,104227,81365,104229],{"id":104226},"mj_name2id-返回-1",[25,104228,103970],{},[25,104230,103974],{},[14,104232,104233,104234,104237],{},"说明名字没有找到。检查 XML 中 ",[25,104235,104236],{},"name=\"...\"","，并确认对象类型正确。",[188,104239,104240],{"id":104240},"物体不下落",[14,104242,102582],{},[171,104244,104245,104250,104255],{},[174,104246,104247,104248],{},"body 是否有 ",[25,104249,101679],{},[174,104251,104252,104253],{},"gravity 是否为 ",[25,104254,102648],{},[174,104256,104257,104258,104260],{},"body 是否被固定在 ",[25,104259,101900],{}," 中",[188,104262,104263],{"id":104263},"坐标看起来不符合预期",[14,104265,104266],{},"先区分两种坐标：",[353,104268,104269,104278],{},[356,104270,104271],{},[359,104272,104273,104276],{},[362,104274,104275],{"align":23813},"坐标",[362,104277,100759],{"align":23813},[400,104279,104280,104290],{},[359,104281,104282,104287],{},[405,104283,104284,104285],{"align":23813},"XML 里的 ",[25,104286,104205],{},[405,104288,104289],{"align":23813},"相对父 body 的局部坐标",[359,104291,104292,104298],{},[405,104293,104294,25056,104296],{"align":23813},[25,104295,101138],{},[25,104297,104051],{},[405,104299,104300],{"align":23813},"仿真更新后的世界坐标",[14,104302,104303,104304,104306,104307,82614,104310,104312],{},"如果你修改了 ",[25,104305,101129],{},"，但还没调用 ",[25,104308,104309],{},"mj_forward",[25,104311,101274],{},"，世界坐标可能还没有更新。",[159,104314,102666],{"id":102665},[14,104316,104317],{},"MJCF 建模先掌握四件事：",[171,104319,104320,104325,104330,104335],{},[174,104321,104322,104324],{},[25,104323,51875],{}," 表示刚体层级。",[174,104326,104327,104329],{},[25,104328,101179],{}," 表示形状、碰撞和质量。",[174,104331,104332,104334],{},[25,104333,103015],{}," 决定 body 能不能动、怎么动。",[174,104336,104337,104339],{},[25,104338,103269],{}," 用来标记关键点，方便 Python 读取位置。",[14,104341,104342],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[136,104344,104345],{},"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":23,"searchDepth":94,"depth":94,"links":104347},[104348,104349,104350,104356,104360,104361,104362,104369],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":104351},[104352,104353,104354,104355],{"id":103019,"depth":109,"text":103019},{"id":103133,"depth":109,"text":103133},{"id":103159,"depth":109,"text":103160},{"id":103263,"depth":109,"text":103264},{"id":101311,"depth":94,"text":101312,"children":104357},[104358,104359],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":104363},[104364,104365,104367,104368],{"id":104217,"depth":109,"text":104220},{"id":104226,"depth":109,"text":104366},"mj_name2id 返回 -1",{"id":104240,"depth":109,"text":104240},{"id":104263,"depth":109,"text":104263},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102713,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104376,"title":104377,"body":104378,"description":23,"extension":142,"meta":105873,"navigation":144,"path":105874,"seo":105875,"stem":105876,"__hash__":105877},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104379,"toc":105845},[104380,104383,104385,104388,104391,104429,104432,104438,104441,104443,104445,104472,104474,104488,104490,104531,104533,104557,104559,104562,104571,104580,104583,104592,104600,104609,104612,104622,104625,104677,104684,104690,104698,104746,104749,104768,104771,104779,104783,104792,104825,104827,105175,105177,105189,105191,105202,105204,105207,105228,105234,105237,105262,105272,105275,105283,105286,105289,105310,105321,105323,105343,105346,105367,105376,105395,105401,105426,105429,105443,105450,105474,105477,105485,105494,105510,105522,105530,105539,105541,105544,105568,105573,105576,105598,105600,105639,105641,105648,105650,105658,105661,105664,105676,105717,105724,105735,105742,105745,105794,105797,105800,105806,105808,105813,105839,105842],[10,104381,104377],{"id":104382},"_3python-控制接口读取状态与推进仿真",[159,104384,100706],{"id":100705},[14,104386,104387],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104389,104390],{},"你将学习:",[171,104392,104393,104398,104403,104407,104412,104423],{},[174,104394,104395],{},[25,104396,104397],{},"MjModel.from_xml_string",[174,104399,104400],{},[25,104401,104402],{},"MjData(model)",[174,104404,104405],{},[25,104406,101274],{},[174,104408,104409],{},[25,104410,104411],{},"mj_resetData",[174,104413,104414,104415,428,104417,428,104420],{},"读取 ",[25,104416,104089],{},[25,104418,104419],{},"qvel",[25,104421,104422],{},"ctrl",[174,104424,104425,104426],{},"使用 ",[25,104427,104428],{},"model.opt.timestep",[14,104430,104431],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[18,104433,104436],{"className":104434,"code":104435,"language":5264,"meta":23},[5262],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[25,104437,104435],{"__ignoreMap":23},[14,104439,104440],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[159,104442,100829],{"id":100828},[14,104444,100832],{},[18,104446,104448],{"className":23899,"code":104447,"language":23901,"meta":23,"style":23},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[25,104449,104450],{"__ignoreMap":23},[28,104451,104452,104454,104456,104458,104460,104463,104465,104467,104469],{"class":30,"line":31},[28,104453,24654],{"class":2040},[28,104455,26393],{"class":320},[28,104457,23911],{"class":320},[28,104459,26478],{"class":45},[28,104461,104462],{"class":320}," python3",[28,104464,100857],{"class":320},[28,104466,102560],{"class":320},[28,104468,100873],{"class":320},[28,104470,104471],{"class":320}," glfw\n",[14,104473,102878],{},[18,104475,104476],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},[25,104477,104478],{"__ignoreMap":23},[28,104479,104480,104482,104484,104486],{"class":30,"line":31},[28,104481,23908],{"class":2040},[28,104483,23911],{"class":320},[28,104485,100989],{"class":320},[28,104487,100992],{"class":320},[14,104489,102895],{},[18,104491,104493],{"className":23899,"code":104492,"language":23901,"meta":23,"style":23},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[25,104494,104495,104512,104521],{"__ignoreMap":23},[28,104496,104497,104499,104501,104503,104506,104508,104510],{"class":30,"line":31},[28,104498,30408],{"class":2040},[28,104500,29254],{"class":320},[28,104502,25193],{"class":45},[28,104504,104505],{"class":320}," mujoco-python-api",[28,104507,101034],{"class":320},[28,104509,101037],{"class":45},[28,104511,101040],{"class":45},[28,104513,104514,104516,104518],{"class":30,"line":94},[28,104515,30408],{"class":2040},[28,104517,101047],{"class":320},[28,104519,104520],{"class":320}," mujoco-python-api\n",[28,104522,104523,104525,104527,104529],{"class":30,"line":109},[28,104524,23908],{"class":2040},[28,104526,23911],{"class":320},[28,104528,100989],{"class":320},[28,104530,100992],{"class":320},[14,104532,101063],{},[171,104534,104535,104542,104551],{},[174,104536,104537,101077,104539,104541],{},[25,104538,100734],{},[25,104540,100739],{}," 是官方 Python bindings 的类名。",[174,104543,104544,104545,104548,104549,28463],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[25,104546,104547],{},"mjModel"," 在 Python 中是 ",[25,104550,100768],{},[174,104552,104553,104554,28463],{},"不要使用 ",[25,104555,104556],{},"sim = mujoco_py.MjSim(...)",[159,104558,101104],{"id":101103},[14,104560,104561],{},"仿真推进核心代码:",[18,104563,104565],{"className":20,"code":104564,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\n",[25,104566,104567],{"__ignoreMap":23},[28,104568,104569],{"class":30,"line":31},[28,104570,104564],{"class":34},[14,104572,104573,104574,428,104576,428,104578,28463],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[25,104575,101129],{},[25,104577,101132],{},[25,104579,101126],{},[14,104581,104582],{},"重置仿真:",[18,104584,104586],{"className":20,"code":104585,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\n",[25,104587,104588],{"__ignoreMap":23},[28,104589,104590],{"class":30,"line":31},[28,104591,104585],{"class":34},[14,104593,104594,104595,82614,104597,104599],{},"如果手动修改了 ",[25,104596,101129],{},[25,104598,101132],{},"，通常应调用:",[18,104601,104603],{"className":20,"code":104602,"language":22,"meta":23,"style":23},"mujoco.mj_forward(model, data)\n",[25,104604,104605],{"__ignoreMap":23},[28,104606,104607],{"class":30,"line":31},[28,104608,104602],{"class":34},[14,104610,104611],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[188,104613,104615,428,104617,428,104619,104621],{"id":104614},"qposqvelctrl-是什么",[25,104616,104089],{},[25,104618,104419],{},[25,104620,104422],{}," 是什么",[14,104623,104624],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[353,104626,104627,104639],{},[356,104628,104629],{},[359,104630,104631,104634,104636],{},[362,104632,104633],{"align":23813},"字段",[362,104635,100759],{"align":23813},[362,104637,104638],{"align":23813},"谁来修改",[400,104640,104641,104653,104665],{},[359,104642,104643,104647,104650],{},[405,104644,104645],{"align":23813},[25,104646,101129],{},[405,104648,104649],{"align":23813},"广义位置，例如小车位置、关节角、自由物体位置姿态",[405,104651,104652],{"align":23813},"MuJoCo 更新，也可以手动设置初始状态",[359,104654,104655,104659,104662],{},[405,104656,104657],{"align":23813},[25,104658,101132],{},[405,104660,104661],{"align":23813},"广义速度，例如小车速度、关节角速度",[405,104663,104664],{"align":23813},"MuJoCo 更新，也可以手动清零",[359,104666,104667,104671,104674],{},[405,104668,104669],{"align":23813},[25,104670,101135],{},[405,104672,104673],{"align":23813},"actuator 的控制输入",[405,104675,104676],{"align":23813},"主要由你的控制代码写入",[14,104678,9102,104679,101077,104681,104683],{},[25,104680,104089],{},[25,104682,104419],{}," 不一定同维。自由刚体就是典型例子：",[18,104685,104688],{"className":104686,"code":104687,"language":5264,"meta":23},[5262],"freejoint: qpos 7 维，qvel 6 维\n",[25,104689,104687],{"__ignoreMap":23},[188,104691,104693,101077,104695,104697],{"id":104692},"mj_step-和-mj_forward-的区别",[25,104694,101274],{},[25,104696,104309],{}," 的区别",[353,104699,104700,104713],{},[356,104701,104702],{},[359,104703,104704,104707,104710],{},[362,104705,104706],{"align":23813},"函数",[362,104708,104709],{"align":23813},"是否推进时间",[362,104711,104712],{"align":23813},"什么时候用",[400,104714,104715,104728],{},[359,104716,104717,104722,104725],{},[405,104718,104719],{"align":23813},[25,104720,104721],{},"mj_step(model, data)",[405,104723,104724],{"align":23813},"是",[405,104726,104727],{"align":23813},"正常仿真循环，每调用一次前进一步",[359,104729,104730,104735,104738],{},[405,104731,104732],{"align":23813},[25,104733,104734],{},"mj_forward(model, data)",[405,104736,104737],{"align":23813},"否",[405,104739,104740,104741,428,104743,104745],{"align":23813},"手动改了 ",[25,104742,104089],{},[25,104744,104419],{}," 后，刷新派生量",[14,104747,104748],{},"例如你写：",[18,104750,104752],{"className":20,"code":104751,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\n",[25,104753,104754],{"__ignoreMap":23},[28,104755,104756,104759,104761,104763,104765],{"class":30,"line":31},[28,104757,104758],{"class":34},"data.qpos[",[28,104760,52],{"class":45},[28,104762,4520],{"class":34},[28,104764,39],{"class":38},[28,104766,104767],{"class":45}," 2.0\n",[14,104769,104770],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[18,104772,104773],{"className":20,"code":104602,"language":22,"meta":23,"style":23},[25,104774,104775],{"__ignoreMap":23},[28,104776,104777],{"class":30,"line":31},[28,104778,104602],{"class":34},[188,104780,104782],{"id":104781},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104784,104785,104788,104789,104791],{},[25,104786,104787],{},"mujoco.mj_resetData(model, data)"," 会把 ",[25,104790,33477],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[18,104793,104795],{"className":20,"code":104794,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[25,104796,104797,104801,104811,104821],{"__ignoreMap":23},[28,104798,104799],{"class":30,"line":31},[28,104800,104585],{"class":34},[28,104802,104803,104806,104808],{"class":30,"line":94},[28,104804,104805],{"class":34},"data.qpos[:] ",[28,104807,39],{"class":38},[28,104809,104810],{"class":34}," random_qpos\n",[28,104812,104813,104816,104818],{"class":30,"line":109},[28,104814,104815],{"class":34},"data.qvel[:] ",[28,104817,39],{"class":38},[28,104819,104820],{"class":45}," 0.0\n",[28,104822,104823],{"class":30,"line":125},[28,104824,104602],{"class":34},[159,104826,101312],{"id":101311},[18,104828,104830],{"className":20,"code":104829,"language":22,"meta":23,"style":23},"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",[25,104831,104832,104838,104848,104852,104856,104864,104869,104873,104877,104881,104886,104890,104895,104900,104905,104909,104913,104917,104921,104925,104929,104948,104955,104967,104978,104994,105010,105014,105018,105030,105042,105050,105054,105065,105069,105085,105089,105093,105102,105106,105111,105120,105124,105137,105142,105151,105155,105159,105171],{"__ignoreMap":23},[28,104833,104834,104836],{"class":30,"line":31},[28,104835,30468],{"class":38},[28,104837,101360],{"class":34},[28,104839,104840,104842,104844,104846],{"class":30,"line":94},[28,104841,30468],{"class":38},[28,104843,31456],{"class":34},[28,104845,31459],{"class":38},[28,104847,31462],{"class":34},[28,104849,104850],{"class":30,"line":109},[28,104851,2477],{"emptyLinePlaceholder":144},[28,104853,104854],{"class":30,"line":125},[28,104855,2477],{"emptyLinePlaceholder":144},[28,104857,104858,104860,104862],{"class":30,"line":131},[28,104859,101373],{"class":45},[28,104861,13641],{"class":38},[28,104863,101378],{"class":320},[28,104865,104866],{"class":30,"line":1291},[28,104867,104868],{"class":320},"\u003Cmujoco model=\"state_api\">\n",[28,104870,104871],{"class":30,"line":1297},[28,104872,101388],{"class":320},[28,104874,104875],{"class":30,"line":1388},[28,104876,2477],{"emptyLinePlaceholder":144},[28,104878,104879],{"class":30,"line":1394},[28,104880,101397],{"class":320},[28,104882,104883],{"class":30,"line":1406},[28,104884,104885],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[28,104887,104888],{"class":30,"line":1689},[28,104889,2477],{"emptyLinePlaceholder":144},[28,104891,104892],{"class":30,"line":1694},[28,104893,104894],{"class":320},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[28,104896,104897],{"class":30,"line":1700},[28,104898,104899],{"class":320},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[28,104901,104902],{"class":30,"line":1705},[28,104903,104904],{"class":320},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[28,104906,104907],{"class":30,"line":1719},[28,104908,101426],{"class":320},[28,104910,104911],{"class":30,"line":1724},[28,104912,101431],{"class":320},[28,104914,104915],{"class":30,"line":1730},[28,104916,101436],{"class":320},[28,104918,104919],{"class":30,"line":1751},[28,104920,95757],{"class":320},[28,104922,104923],{"class":30,"line":1756},[28,104924,2477],{"emptyLinePlaceholder":144},[28,104926,104927],{"class":30,"line":1770},[28,104928,2477],{"emptyLinePlaceholder":144},[28,104930,104931,104933,104936,104939,104941,104944,104946],{"class":30,"line":1775},[28,104932,32023],{"class":38},[28,104934,104935],{"class":2040}," print_state",[28,104937,104938],{"class":34},"(prefix: ",[28,104940,1376],{"class":45},[28,104942,104943],{"class":34},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,104945,95745],{"class":45},[28,104947,3816],{"class":34},[28,104949,104950,104952],{"class":30,"line":1804},[28,104951,31375],{"class":45},[28,104953,104954],{"class":34},"(prefix)\n",[28,104956,104957,104959,104961,104964],{"class":30,"line":1809},[28,104958,31375],{"class":45},[28,104960,221],{"class":34},[28,104962,104963],{"class":320},"\"  timestep:\"",[28,104965,104966],{"class":34},", model.opt.timestep)\n",[28,104968,104969,104971,104973,104976],{"class":30,"line":1826},[28,104970,31375],{"class":45},[28,104972,221],{"class":34},[28,104974,104975],{"class":320},"\"  time:\"",[28,104977,101537],{"class":34},[28,104979,104980,104982,104984,104987,104990,104992],{"class":30,"line":1831},[28,104981,31375],{"class":45},[28,104983,221],{"class":34},[28,104985,104986],{"class":320},"\"  qpos:\"",[28,104988,104989],{"class":34},", np.round(data.qpos.copy(), ",[28,104991,507],{"class":45},[28,104993,30573],{"class":34},[28,104995,104996,104998,105000,105003,105006,105008],{"class":30,"line":1836},[28,104997,31375],{"class":45},[28,104999,221],{"class":34},[28,105001,105002],{"class":320},"\"  qvel:\"",[28,105004,105005],{"class":34},", np.round(data.qvel.copy(), ",[28,105007,507],{"class":45},[28,105009,30573],{"class":34},[28,105011,105012],{"class":30,"line":1841},[28,105013,2477],{"emptyLinePlaceholder":144},[28,105015,105016],{"class":30,"line":1855},[28,105017,2477],{"emptyLinePlaceholder":144},[28,105019,105020,105022,105024,105026,105028],{"class":30,"line":1860},[28,105021,32023],{"class":38},[28,105023,2050],{"class":2040},[28,105025,101457],{"class":34},[28,105027,95745],{"class":45},[28,105029,3816],{"class":34},[28,105031,105032,105034,105036,105038,105040],{"class":30,"line":2654},[28,105033,101466],{"class":34},[28,105035,39],{"class":38},[28,105037,101471],{"class":34},[28,105039,101373],{"class":45},[28,105041,227],{"class":34},[28,105043,105044,105046,105048],{"class":30,"line":2668},[28,105045,101480],{"class":34},[28,105047,39],{"class":38},[28,105049,101485],{"class":34},[28,105051,105052],{"class":30,"line":2676},[28,105053,2477],{"emptyLinePlaceholder":144},[28,105055,105056,105059,105062],{"class":30,"line":2681},[28,105057,105058],{"class":34},"    print_state(",[28,105060,105061],{"class":320},"\"initial\"",[28,105063,105064],{"class":34},", model, data)\n",[28,105066,105067],{"class":30,"line":2687},[28,105068,2477],{"emptyLinePlaceholder":144},[28,105070,105071,105073,105075,105077,105079,105081,105083],{"class":30,"line":2693},[28,105072,3278],{"class":38},[28,105074,101560],{"class":34},[28,105076,26121],{"class":38},[28,105078,32519],{"class":45},[28,105080,221],{"class":34},[28,105082,866],{"class":45},[28,105084,30862],{"class":34},[28,105086,105087],{"class":30,"line":2698},[28,105088,101575],{"class":34},[28,105090,105091],{"class":30,"line":8025},[28,105092,2477],{"emptyLinePlaceholder":144},[28,105094,105095,105097,105100],{"class":30,"line":8049},[28,105096,105058],{"class":34},[28,105098,105099],{"class":320},"\"after 50 steps\"",[28,105101,105064],{"class":34},[28,105103,105104],{"class":30,"line":8054},[28,105105,2477],{"emptyLinePlaceholder":144},[28,105107,105108],{"class":30,"line":8060},[28,105109,105110],{"class":34},"    mujoco.mj_resetData(model, data)\n",[28,105112,105113,105115,105118],{"class":30,"line":8087},[28,105114,105058],{"class":34},[28,105116,105117],{"class":320},"\"after reset\"",[28,105119,105064],{"class":34},[28,105121,105122],{"class":30,"line":8092},[28,105123,2477],{"emptyLinePlaceholder":144},[28,105125,105126,105129,105131,105133,105135],{"class":30,"line":8098},[28,105127,105128],{"class":34},"    data.qpos[",[28,105130,52],{"class":45},[28,105132,4520],{"class":34},[28,105134,39],{"class":38},[28,105136,104767],{"class":45},[28,105138,105139],{"class":30,"line":8110},[28,105140,105141],{"class":34},"    mujoco.mj_forward(model, data)\n",[28,105143,105144,105146,105149],{"class":30,"line":8122},[28,105145,105058],{"class":34},[28,105147,105148],{"class":320},"\"after manual qpos edit\"",[28,105150,105064],{"class":34},[28,105152,105153],{"class":30,"line":8134},[28,105154,2477],{"emptyLinePlaceholder":144},[28,105156,105157],{"class":30,"line":9793},[28,105158,2477],{"emptyLinePlaceholder":144},[28,105160,105161,105163,105165,105167,105169],{"class":30,"line":9818},[28,105162,1608],{"class":38},[28,105164,31296],{"class":45},[28,105166,101618],{"class":38},[28,105168,101621],{"class":320},[28,105170,3816],{"class":34},[28,105172,105173],{"class":30,"line":9841},[28,105174,101628],{"class":34},[14,105176,103629],{},[18,105178,105180],{"className":23899,"code":105179,"language":23901,"meta":23,"style":23},"touch ch3_python_state.py\n",[25,105181,105182],{"__ignoreMap":23},[28,105183,105184,105186],{"class":30,"line":31},[28,105185,101342],{"class":2040},[28,105187,105188],{"class":320}," ch3_python_state.py\n",[14,105190,102360],{},[18,105192,105194],{"className":23899,"code":105193,"language":23901,"meta":23,"style":23},"python ch3_python_state.py\n",[25,105195,105196],{"__ignoreMap":23},[28,105197,105198,105200],{"class":30,"line":31},[28,105199,22],{"class":2040},[28,105201,105188],{"class":320},[188,105203,101631],{"id":101631},[14,105205,105206],{},"打印状态的函数：",[18,105208,105210],{"className":20,"code":105209,"language":22,"meta":23,"style":23},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[25,105211,105212],{"__ignoreMap":23},[28,105213,105214,105216,105218,105220,105222,105224,105226],{"class":30,"line":31},[28,105215,32023],{"class":38},[28,105217,104935],{"class":2040},[28,105219,104938],{"class":34},[28,105221,1376],{"class":45},[28,105223,104943],{"class":34},[28,105225,95745],{"class":45},[28,105227,3816],{"class":34},[14,105229,105230,105231,105233],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[25,105232,33477],{}," 里发生了什么。",[14,105235,105236],{},"推进 50 步：",[18,105238,105240],{"className":20,"code":105239,"language":22,"meta":23,"style":23},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[25,105241,105242,105258],{"__ignoreMap":23},[28,105243,105244,105246,105248,105250,105252,105254,105256],{"class":30,"line":31},[28,105245,3102],{"class":38},[28,105247,101560],{"class":34},[28,105249,26121],{"class":38},[28,105251,32519],{"class":45},[28,105253,221],{"class":34},[28,105255,866],{"class":45},[28,105257,30862],{"class":34},[28,105259,105260],{"class":30,"line":94},[28,105261,101758],{"class":34},[14,105263,105264,105265,105268,105269,105271],{},"由于 ",[25,105266,105267],{},"timestep=0.01","，所以 50 步后时间约为 ",[25,105270,35405],{}," 秒。",[14,105273,105274],{},"重置：",[18,105276,105277],{"className":20,"code":104585,"language":22,"meta":23,"style":23},[25,105278,105279],{"__ignoreMap":23},[28,105280,105281],{"class":30,"line":31},[28,105282,104585],{"class":34},[14,105284,105285],{},"这会把时间、位置、速度恢复到初始状态。",[14,105287,105288],{},"手动改高度：",[18,105290,105292],{"className":20,"code":105291,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[25,105293,105294,105306],{"__ignoreMap":23},[28,105295,105296,105298,105300,105302,105304],{"class":30,"line":31},[28,105297,104758],{"class":34},[28,105299,52],{"class":45},[28,105301,4520],{"class":34},[28,105303,39],{"class":38},[28,105305,104767],{"class":45},[28,105307,105308],{"class":30,"line":94},[28,105309,104602],{"class":34},[14,105311,105312,105313,105316,105317,105320],{},"这个例子里 ",[25,105314,105315],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[25,105318,105319],{},"2.0"," 表示把小球放到更高的位置。",[188,105322,101767],{"id":101767},[18,105324,105325],{"className":20,"code":105209,"language":22,"meta":23,"style":23},[25,105326,105327],{"__ignoreMap":23},[28,105328,105329,105331,105333,105335,105337,105339,105341],{"class":30,"line":31},[28,105330,32023],{"class":38},[28,105332,104935],{"class":2040},[28,105334,104938],{"class":34},[28,105336,1376],{"class":45},[28,105338,104943],{"class":34},[28,105340,95745],{"class":45},[28,105342,3816],{"class":34},[14,105344,105345],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[171,105347,105348,105357,105362],{},[174,105349,105350,105353,105354,105356],{},[25,105351,105352],{},"prefix","：一段文字，比如 ",[25,105355,105061],{},"，用来说明现在打印的是哪个阶段。",[174,105358,105359,105361],{},[25,105360,102144],{},"：MuJoCo 模型。",[174,105363,105364,105366],{},[25,105365,33477],{},"：MuJoCo 当前状态。",[14,105368,105369,428,105372,105375],{},[25,105370,105371],{},"prefix: str",[25,105373,105374],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[18,105377,105379],{"className":20,"code":105378,"language":22,"meta":23,"style":23},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[25,105380,105381],{"__ignoreMap":23},[28,105382,105383,105385,105387,105389,105391,105393],{"class":30,"line":31},[28,105384,30491],{"class":45},[28,105386,221],{"class":34},[28,105388,104986],{"class":320},[28,105390,104989],{"class":34},[28,105392,507],{"class":45},[28,105394,30573],{"class":34},[14,105396,105397,105400],{},[25,105398,105399],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[18,105402,105404],{"className":20,"code":105403,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[25,105405,105406,105418],{"__ignoreMap":23},[28,105407,105408,105410,105412,105414,105416],{"class":30,"line":31},[28,105409,101693],{"class":34},[28,105411,39],{"class":38},[28,105413,101471],{"class":34},[28,105415,101373],{"class":45},[28,105417,227],{"class":34},[28,105419,105420,105422,105424],{"class":30,"line":94},[28,105421,101717],{"class":34},[28,105423,39],{"class":38},[28,105425,101485],{"class":34},[14,105427,105428],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[18,105430,105432],{"className":20,"code":105431,"language":22,"meta":23,"style":23},"print_state(\"initial\", model, data)\n",[25,105433,105434],{"__ignoreMap":23},[28,105435,105436,105439,105441],{"class":30,"line":31},[28,105437,105438],{"class":34},"print_state(",[28,105440,105061],{"class":320},[28,105442,105064],{"class":34},[14,105444,105445,105446,105449],{},"调用刚才定义的 ",[25,105447,105448],{},"print_state"," 函数，打印初始状态。",[18,105451,105452],{"className":20,"code":105239,"language":22,"meta":23,"style":23},[25,105453,105454,105470],{"__ignoreMap":23},[28,105455,105456,105458,105460,105462,105464,105466,105468],{"class":30,"line":31},[28,105457,3102],{"class":38},[28,105459,101560],{"class":34},[28,105461,26121],{"class":38},[28,105463,32519],{"class":45},[28,105465,221],{"class":34},[28,105467,866],{"class":45},[28,105469,30862],{"class":34},[28,105471,105472],{"class":30,"line":94},[28,105473,101758],{"class":34},[14,105475,105476],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[18,105478,105479],{"className":20,"code":104585,"language":22,"meta":23,"style":23},[25,105480,105481],{"__ignoreMap":23},[28,105482,105483],{"class":30,"line":31},[28,105484,104585],{"class":34},[14,105486,105487,105488,105490,105491,105493],{},"重置 ",[25,105489,33477],{},"。注意它不会重新创建 ",[25,105492,102144],{},"，因为模型结构没有变，只是状态回到初始值。",[18,105495,105496],{"className":20,"code":104751,"language":22,"meta":23,"style":23},[25,105497,105498],{"__ignoreMap":23},[28,105499,105500,105502,105504,105506,105508],{"class":30,"line":31},[28,105501,104758],{"class":34},[28,105503,52],{"class":45},[28,105505,4520],{"class":34},[28,105507,39],{"class":38},[28,105509,104767],{"class":45},[14,105511,105512,105513,428,105516,428,105519,105521],{},"这行是“手动改状态”。在 freejoint 中，",[25,105514,105515],{},"qpos[0]",[25,105517,105518],{},"qpos[1]",[25,105520,105315],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[18,105523,105524],{"className":20,"code":104602,"language":22,"meta":23,"style":23},[25,105525,105526],{"__ignoreMap":23},[28,105527,105528],{"class":30,"line":31},[28,105529,104602],{"class":34},[14,105531,105532,105533,105535,105536,105538],{},"手动改完 ",[25,105534,104089],{}," 后，调用 ",[25,105537,104309],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[159,105540,102375],{"id":102374},[14,105542,105543],{},"你会看到:",[171,105545,105546,105551,105556,105559],{},[174,105547,105548,105549],{},"初始时间为 ",[25,105550,407],{},[174,105552,105553,105554],{},"50 步后时间约为 ",[25,105555,35405],{},[174,105557,105558],{},"reset 后状态恢复",[174,105560,105561,105562,105565,105566],{},"手动修改 ",[25,105563,105564],{},"data.qpos[2]"," 后，小球高度变为 ",[25,105567,105319],{},[14,105569,105570,105572],{},[25,105571,105315],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105574,105575],{},"输出里可以重点看三件事：",[171,105577,105578,105586,105591],{},[174,105579,105580,105582,105583,105585],{},[25,105581,2464],{}," 是否随着 ",[25,105584,101274],{}," 增加。",[174,105587,105588,105590],{},[25,105589,104089],{}," 的 z 坐标是否因为下落而变化。",[174,105592,105593,105595,105596,28463],{},[25,105594,104411],{}," 后时间是否回到 ",[25,105597,407],{},[159,105599,102407],{"id":102406},[171,105601,105602,105608,105614,105620,105623,105632],{},[174,105603,105604,105605,28463],{},"修改 timestep 为 ",[25,105606,105607],{},"0.005",[174,105609,105610,105611,28463],{},"重新运行，检查 50 步后时间是否约为 ",[25,105612,105613],{},"0.25",[174,105615,105616,105617,28463],{},"修改重力为 ",[25,105618,105619],{},"0 0 -1.0",[174,105621,105622],{},"观察小球下降速度是否变慢。",[174,105624,102470,105625,102473,105628,105631],{},[25,105626,105627],{},"data.qpos[2] = 2.0",[25,105629,105630],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[174,105633,105634,105635,105638],{},"注释掉 ",[25,105636,105637],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[159,105640,102512],{"id":102511},[188,105642,105644,105645,105647],{"id":105643},"修改-dataqpos-后位置没有更新","修改 ",[25,105646,101129],{}," 后位置没有更新",[14,105649,102521],{},[18,105651,105652],{"className":20,"code":104602,"language":22,"meta":23,"style":23},[25,105653,105654],{"__ignoreMap":23},[28,105655,105656],{"class":30,"line":31},[28,105657,104602],{"class":34},[188,105659,105660],{"id":105660},"数组维度看不懂",[14,105662,105663],{},"打印模型维度:",[18,105665,105667],{"className":20,"code":105666,"language":22,"meta":23,"style":23},"print(model.nq, model.nv, model.nu)\n",[25,105668,105669],{"__ignoreMap":23},[28,105670,105671,105673],{"class":30,"line":31},[28,105672,30491],{"class":45},[28,105674,105675],{"class":34},"(model.nq, model.nv, model.nu)\n",[353,105677,105678,105686],{},[356,105679,105680],{},[359,105681,105682,105684],{},[362,105683,104633],{"align":23813},[362,105685,100759],{"align":23813},[400,105687,105688,105698,105708],{},[359,105689,105690,105695],{},[405,105691,105692],{"align":23813},[25,105693,105694],{},"nq",[405,105696,105697],{"align":23813},"位置变量数量",[359,105699,105700,105705],{},[405,105701,105702],{"align":23813},[25,105703,105704],{},"nv",[405,105706,105707],{"align":23813},"速度变量数量",[359,105709,105710,105714],{},[405,105711,105712],{"align":23813},[25,105713,102221],{},[405,105715,105716],{"align":23813},"控制输入数量",[188,105718,105720,105721,105723],{"id":105719},"误以为-qpos-一定等于关节数","误以为 ",[25,105722,104089],{}," 一定等于关节数",[14,105725,105726,105727,82605,105729,105731,105732,105734],{},"不是。例如 ",[25,105728,101679],{},[25,105730,104089],{}," 是 7 维，但 ",[25,105733,104419],{}," 是 6 维。",[188,105736,105738,105739,105741],{"id":105737},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[25,105740,104089],{}," 的第几位",[14,105743,105744],{},"初学时可以先打印：",[18,105746,105748],{"className":20,"code":105747,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[25,105749,105750,105760,105770,105782],{"__ignoreMap":23},[28,105751,105752,105754,105756,105758],{"class":30,"line":31},[28,105753,30491],{"class":45},[28,105755,221],{"class":34},[28,105757,101498],{"class":320},[28,105759,101501],{"class":34},[28,105761,105762,105764,105766,105768],{"class":30,"line":94},[28,105763,30491],{"class":45},[28,105765,221],{"class":34},[28,105767,101510],{"class":320},[28,105769,101513],{"class":34},[28,105771,105772,105774,105776,105779],{"class":30,"line":109},[28,105773,30491],{"class":45},[28,105775,221],{"class":34},[28,105777,105778],{"class":320},"\"qpos:\"",[28,105780,105781],{"class":34},", data.qpos)\n",[28,105783,105784,105786,105788,105791],{"class":30,"line":125},[28,105785,30491],{"class":45},[28,105787,221],{"class":34},[28,105789,105790],{"class":320},"\"qvel:\"",[28,105792,105793],{"class":34},", data.qvel)\n",[14,105795,105796],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[188,105798,105799],{"id":105799},"仿真结果每次都一样",[14,105801,105802,105803,105805],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[25,105804,104089],{},"、目标点或控制输入。",[159,105807,102666],{"id":102665},[14,105809,105810,105811,24696],{},"Python 控制 MuJoCo 的核心就是读写 ",[25,105812,33477],{},[171,105814,105815,105823,105828,105833],{},[174,105816,105817,105818,101077,105820,105822],{},"用 ",[25,105819,101129],{},[25,105821,101132],{}," 读取状态。",[174,105824,105817,105825,105827],{},[25,105826,101135],{}," 写入控制。",[174,105829,105817,105830,105832],{},[25,105831,101274],{}," 推进时间。",[174,105834,105835,105836,105838],{},"手动改状态后用 ",[25,105837,104309],{}," 刷新派生量。",[14,105840,105841],{},"理解这一章后，就可以进入关节和 actuator 控制。",[136,105843,105844],{},"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":23,"searchDepth":94,"depth":94,"links":105846},[105847,105848,105849,105856,105860,105861,105862,105872],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":105850},[105851,105853,105855],{"id":104614,"depth":109,"text":105852},"qpos、qvel、ctrl 是什么",{"id":104692,"depth":109,"text":105854},"mj_step 和 mj_forward 的区别",{"id":104781,"depth":109,"text":104782},{"id":101311,"depth":94,"text":101312,"children":105857},[105858,105859],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":105863},[105864,105866,105867,105869,105871],{"id":105643,"depth":109,"text":105865},"修改 data.qpos 后位置没有更新",{"id":105660,"depth":109,"text":105660},{"id":105719,"depth":109,"text":105868},"误以为 qpos 一定等于关节数",{"id":105737,"depth":109,"text":105870},"不知道某个元素在 qpos 的第几位",{"id":105799,"depth":109,"text":105799},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104377,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105879,"title":105880,"body":105881,"description":23,"extension":142,"meta":107571,"navigation":144,"path":107572,"seo":107573,"stem":107574,"__hash__":107575},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105882,"toc":107547},[105883,105886,105888,105891,105893,105918,105921,105940,105943,105945,105947,105971,105973,105987,105989,106030,106032,106056,106058,106061,106095,106097,106110,106113,106181,106190,106194,106197,106231,106237,106240,106244,106283,106286,106306,106310,106353,106355,106384,106387,106393,106396,106398,106792,106794,106806,106808,106819,106821,106824,106853,106861,106864,106899,106902,106904,106912,106915,106917,106928,106938,106958,106961,106997,107009,107057,107076,107118,107131,107159,107164,107185,107195,107213,107216,107250,107253,107273,107276,107295,107301,107303,107306,107312,107318,107328,107331,107337,107346,107348,107394,107396,107402,107408,107411,107414,107434,107437,107443,107449,107451,107474,107477,107480,107489,107492,107530,107532,107535,107541,107544],[10,105884,105880],{"id":105885},"_4关节actuator-与力控制",[159,105887,100706],{"id":100705},[14,105889,105890],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105892,104390],{},[171,105894,105895,105901,105906,105910,105915],{},[174,105896,105897,105900],{},[25,105898,105899],{},"hinge"," 关节",[174,105902,105903],{},[25,105904,105905],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[174,105907,105908],{},[25,105909,101135],{},[174,105911,105912],{},[25,105913,105914],{},"ctrlrange",[174,105916,105917],{},"读取关节角和角速度",[14,105919,105920],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[18,105922,105924],{"className":20,"code":105923,"language":22,"meta":23,"style":23},"data.ctrl[0] = ...\n",[25,105925,105926],{"__ignoreMap":23},[28,105927,105928,105931,105933,105935,105937],{"class":30,"line":31},[28,105929,105930],{"class":34},"data.ctrl[",[28,105932,407],{"class":45},[28,105934,4520],{"class":34},[28,105936,39],{"class":38},[28,105938,105939],{"class":45}," ...\n",[14,105941,105942],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[159,105944,100829],{"id":100828},[14,105946,100832],{},[18,105948,105949],{"className":23899,"code":104447,"language":23901,"meta":23,"style":23},[25,105950,105951],{"__ignoreMap":23},[28,105952,105953,105955,105957,105959,105961,105963,105965,105967,105969],{"class":30,"line":31},[28,105954,24654],{"class":2040},[28,105956,26393],{"class":320},[28,105958,23911],{"class":320},[28,105960,26478],{"class":45},[28,105962,104462],{"class":320},[28,105964,100857],{"class":320},[28,105966,102560],{"class":320},[28,105968,100873],{"class":320},[28,105970,104471],{"class":320},[14,105972,102878],{},[18,105974,105975],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},[25,105976,105977],{"__ignoreMap":23},[28,105978,105979,105981,105983,105985],{"class":30,"line":31},[28,105980,23908],{"class":2040},[28,105982,23911],{"class":320},[28,105984,100989],{"class":320},[28,105986,100992],{"class":320},[14,105988,102895],{},[18,105990,105992],{"className":23899,"code":105991,"language":23901,"meta":23,"style":23},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[25,105993,105994,106011,106020],{"__ignoreMap":23},[28,105995,105996,105998,106000,106002,106005,106007,106009],{"class":30,"line":31},[28,105997,30408],{"class":2040},[28,105999,29254],{"class":320},[28,106001,25193],{"class":45},[28,106003,106004],{"class":320}," mujoco-control",[28,106006,101034],{"class":320},[28,106008,101037],{"class":45},[28,106010,101040],{"class":45},[28,106012,106013,106015,106017],{"class":30,"line":94},[28,106014,30408],{"class":2040},[28,106016,101047],{"class":320},[28,106018,106019],{"class":320}," mujoco-control\n",[28,106021,106022,106024,106026,106028],{"class":30,"line":109},[28,106023,23908],{"class":2040},[28,106025,23911],{"class":320},[28,106027,100989],{"class":320},[28,106029,100992],{"class":320},[14,106031,101063],{},[171,106033,106034,106040,106047,106053],{},[174,106035,106036,106039],{},[25,106037,106038],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[174,106041,106042,106044,106045,28463],{},[25,106043,101135],{}," 长度等于 ",[25,106046,102217],{},[174,106048,82297,106049,106052],{},[25,106050,106051],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[174,106054,106055],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[159,106057,101104],{"id":101103},[14,106059,106060],{},"关节决定 body 如何运动:",[18,106062,106064],{"className":53142,"code":106063,"language":53144,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,106065,106066],{"__ignoreMap":23},[28,106067,106068,106070,106072,106074,106076,106079,106081,106083,106085,106088,106090,106093],{"class":30,"line":31},[28,106069,99],{"class":34},[28,106071,103015],{"class":51375},[28,106073,14997],{"class":2040},[28,106075,39],{"class":34},[28,106077,106078],{"class":320},"\"hinge\"",[28,106080,53899],{"class":2040},[28,106082,39],{"class":34},[28,106084,106078],{"class":320},[28,106086,106087],{"class":2040}," axis",[28,106089,39],{"class":34},[28,106091,106092],{"class":320},"\"0 1 0\"",[28,106094,101203],{"class":34},[14,106096,103111],{},[171,106098,106099,106104,106107],{},[174,106100,106101,106102],{},"名字是 ",[25,106103,105899],{},[174,106105,106106],{},"类型是旋转关节",[174,106108,106109],{},"绕 y 轴旋转",[14,106111,106112],{},"actuator 决定如何施加控制:",[18,106114,106116],{"className":53142,"code":106115,"language":53144,"meta":23,"style":23},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[25,106117,106118,106127,106173],{"__ignoreMap":23},[28,106119,106120,106122,106125],{"class":30,"line":31},[28,106121,99],{"class":34},[28,106123,106124],{"class":51375},"actuator",[28,106126,51382],{"class":34},[28,106128,106129,106131,106134,106136,106138,106141,106144,106146,106148,106151,106153,106155,106158,106160,106163,106166,106168,106171],{"class":30,"line":94},[28,106130,52219],{"class":34},[28,106132,106133],{"class":51375},"motor",[28,106135,14997],{"class":2040},[28,106137,39],{"class":34},[28,106139,106140],{"class":320},"\"hinge_motor\"",[28,106142,106143],{"class":2040}," joint",[28,106145,39],{"class":34},[28,106147,106078],{"class":320},[28,106149,106150],{"class":2040}," gear",[28,106152,39],{"class":34},[28,106154,3755],{"class":320},[28,106156,106157],{"class":2040}," ctrlrange",[28,106159,39],{"class":34},[28,106161,106162],{"class":320},"\"-2 2\"",[28,106164,106165],{"class":2040}," ctrllimited",[28,106167,39],{"class":34},[28,106169,106170],{"class":320},"\"true\"",[28,106172,101203],{"class":34},[28,106174,106175,106177,106179],{"class":30,"line":109},[28,106176,51860],{"class":34},[28,106178,106124],{"class":51375},[28,106180,51382],{"class":34},[14,106182,106183,106186,106187,28463],{},[25,106184,106185],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[25,106188,106189],{},"[-2, 2]",[188,106191,106193],{"id":106192},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106195,106196],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[353,106198,106199,106209],{},[356,106200,106201],{},[359,106202,106203,106205,106207],{},[362,106204,25831],{"align":23813},[362,106206,102755],{"align":23813},[362,106208,100793],{"align":23813},[400,106210,106211,106221],{},[359,106212,106213,106215,106218],{},[405,106214,103015],{"align":23813},[405,106216,106217],{"align":23813},"定义能怎么动",[405,106219,106220],{"align":23813},"门轴允许门旋转",[359,106222,106223,106225,106228],{},[405,106224,106124],{"align":23813},[405,106226,106227],{"align":23813},"定义怎么施力或控制",[405,106229,106230],{"align":23813},"人推门、马达带动门",[14,106232,106233,106234,106236],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[25,106235,101135],{}," 主动控制它。",[14,106238,106239],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[188,106241,106243],{"id":106242},"hinge-joint","hinge joint",[18,106245,106247],{"className":53142,"code":106246,"language":53144,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106248,106249],{"__ignoreMap":23},[28,106250,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106276,106278,106281],{"class":30,"line":31},[28,106252,99],{"class":34},[28,106254,103015],{"class":51375},[28,106256,14997],{"class":2040},[28,106258,39],{"class":34},[28,106260,106078],{"class":320},[28,106262,53899],{"class":2040},[28,106264,39],{"class":34},[28,106266,106078],{"class":320},[28,106268,106087],{"class":2040},[28,106270,39],{"class":34},[28,106272,106092],{"class":320},[28,106274,106275],{"class":2040}," damping",[28,106277,39],{"class":34},[28,106279,106280],{"class":320},"\"0.1\"",[28,106282,101203],{"class":34},[14,106284,106285],{},"含义：",[171,106287,106288,106294,106300],{},[174,106289,106290,106293],{},[25,106291,106292],{},"type=\"hinge\"","：只能绕一个轴旋转。",[174,106295,106296,106299],{},[25,106297,106298],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[174,106301,106302,106305],{},[25,106303,106304],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[188,106307,106309],{"id":106308},"motor-actuator","motor actuator",[18,106311,106313],{"className":53142,"code":106312,"language":53144,"meta":23,"style":23},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106314,106315],{"__ignoreMap":23},[28,106316,106317,106319,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339,106341,106343,106345,106347,106349,106351],{"class":30,"line":31},[28,106318,99],{"class":34},[28,106320,106133],{"class":51375},[28,106322,14997],{"class":2040},[28,106324,39],{"class":34},[28,106326,106140],{"class":320},[28,106328,106143],{"class":2040},[28,106330,39],{"class":34},[28,106332,106078],{"class":320},[28,106334,106150],{"class":2040},[28,106336,39],{"class":34},[28,106338,3755],{"class":320},[28,106340,106157],{"class":2040},[28,106342,39],{"class":34},[28,106344,106162],{"class":320},[28,106346,106165],{"class":2040},[28,106348,39],{"class":34},[28,106350,106170],{"class":320},[28,106352,101203],{"class":34},[14,106354,106285],{},[171,106356,106357,106366,106372,106378],{},[174,106358,106359,106362,106363,106365],{},[25,106360,106361],{},"joint=\"hinge\"","：这个电机作用在名为 ",[25,106364,105899],{}," 的关节上。",[174,106367,106368,106371],{},[25,106369,106370],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[174,106373,106374,106377],{},[25,106375,106376],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[174,106379,106380,106383],{},[25,106381,106382],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106385,106386],{},"简单理解：",[18,106388,106391],{"className":106389,"code":106390,"language":5264,"meta":23},[5262],"实际施加效果 ≈ data.ctrl[0] * gear\n",[25,106392,106390],{"__ignoreMap":23},[14,106394,106395],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[159,106397,101312],{"id":101311},[18,106399,106401],{"className":20,"code":106400,"language":22,"meta":23,"style":23},"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",[25,106402,106403,106410,106414,106420,106430,106434,106438,106446,106451,106456,106460,106464,106469,106474,106478,106483,106488,106493,106498,106502,106506,106510,106515,106520,106525,106529,106533,106537,106541,106553,106565,106573,106577,106587,106597,106607,106611,106624,106637,106641,106658,106672,106707,106711,106715,106726,106741,106756,106768,106772,106776,106788],{"__ignoreMap":23},[28,106404,106405,106407],{"class":30,"line":31},[28,106406,30468],{"class":38},[28,106408,106409],{"class":34}," math\n",[28,106411,106412],{"class":30,"line":94},[28,106413,2477],{"emptyLinePlaceholder":144},[28,106415,106416,106418],{"class":30,"line":109},[28,106417,30468],{"class":38},[28,106419,101360],{"class":34},[28,106421,106422,106424,106426,106428],{"class":30,"line":125},[28,106423,30468],{"class":38},[28,106425,31456],{"class":34},[28,106427,31459],{"class":38},[28,106429,31462],{"class":34},[28,106431,106432],{"class":30,"line":131},[28,106433,2477],{"emptyLinePlaceholder":144},[28,106435,106436],{"class":30,"line":1291},[28,106437,2477],{"emptyLinePlaceholder":144},[28,106439,106440,106442,106444],{"class":30,"line":1297},[28,106441,101373],{"class":45},[28,106443,13641],{"class":38},[28,106445,101378],{"class":320},[28,106447,106448],{"class":30,"line":1388},[28,106449,106450],{"class":320},"\u003Cmujoco model=\"one_link_motor\">\n",[28,106452,106453],{"class":30,"line":1394},[28,106454,106455],{"class":320},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[28,106457,106458],{"class":30,"line":1406},[28,106459,2477],{"emptyLinePlaceholder":144},[28,106461,106462],{"class":30,"line":1689},[28,106463,101397],{"class":320},[28,106465,106466],{"class":30,"line":1694},[28,106467,106468],{"class":320},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[28,106470,106471],{"class":30,"line":1700},[28,106472,106473],{"class":320},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[28,106475,106476],{"class":30,"line":1705},[28,106477,2477],{"emptyLinePlaceholder":144},[28,106479,106480],{"class":30,"line":1719},[28,106481,106482],{"class":320},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[28,106484,106485],{"class":30,"line":1724},[28,106486,106487],{"class":320},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,106489,106490],{"class":30,"line":1730},[28,106491,106492],{"class":320},"        \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",[28,106494,106495],{"class":30,"line":1751},[28,106496,106497],{"class":320},"      \u003C\u002Fbody>\n",[28,106499,106500],{"class":30,"line":1756},[28,106501,101426],{"class":320},[28,106503,106504],{"class":30,"line":1770},[28,106505,101431],{"class":320},[28,106507,106508],{"class":30,"line":1775},[28,106509,2477],{"emptyLinePlaceholder":144},[28,106511,106512],{"class":30,"line":1804},[28,106513,106514],{"class":320},"  \u003Cactuator>\n",[28,106516,106517],{"class":30,"line":1809},[28,106518,106519],{"class":320},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[28,106521,106522],{"class":30,"line":1826},[28,106523,106524],{"class":320},"  \u003C\u002Factuator>\n",[28,106526,106527],{"class":30,"line":1831},[28,106528,101436],{"class":320},[28,106530,106531],{"class":30,"line":1836},[28,106532,95757],{"class":320},[28,106534,106535],{"class":30,"line":1841},[28,106536,2477],{"emptyLinePlaceholder":144},[28,106538,106539],{"class":30,"line":1855},[28,106540,2477],{"emptyLinePlaceholder":144},[28,106542,106543,106545,106547,106549,106551],{"class":30,"line":1860},[28,106544,32023],{"class":38},[28,106546,2050],{"class":2040},[28,106548,101457],{"class":34},[28,106550,95745],{"class":45},[28,106552,3816],{"class":34},[28,106554,106555,106557,106559,106561,106563],{"class":30,"line":2654},[28,106556,101466],{"class":34},[28,106558,39],{"class":38},[28,106560,101471],{"class":34},[28,106562,101373],{"class":45},[28,106564,227],{"class":34},[28,106566,106567,106569,106571],{"class":30,"line":2668},[28,106568,101480],{"class":34},[28,106570,39],{"class":38},[28,106572,101485],{"class":34},[28,106574,106575],{"class":30,"line":2676},[28,106576,2477],{"emptyLinePlaceholder":144},[28,106578,106579,106581,106583,106585],{"class":30,"line":2681},[28,106580,31375],{"class":45},[28,106582,221],{"class":34},[28,106584,101498],{"class":320},[28,106586,101501],{"class":34},[28,106588,106589,106591,106593,106595],{"class":30,"line":2687},[28,106590,31375],{"class":45},[28,106592,221],{"class":34},[28,106594,101510],{"class":320},[28,106596,101513],{"class":34},[28,106598,106599,106601,106603,106605],{"class":30,"line":2693},[28,106600,31375],{"class":45},[28,106602,221],{"class":34},[28,106604,101522],{"class":320},[28,106606,101525],{"class":34},[28,106608,106609],{"class":30,"line":2698},[28,106610,2477],{"emptyLinePlaceholder":144},[28,106612,106613,106615,106618,106620,106622],{"class":30,"line":8025},[28,106614,3178],{"class":38},[28,106616,106617],{"class":34}," model.nu ",[28,106619,21025],{"class":38},[28,106621,25196],{"class":45},[28,106623,3816],{"class":34},[28,106625,106626,106628,106630,106632,106635],{"class":30,"line":8049},[28,106627,103491],{"class":38},[28,106629,103494],{"class":45},[28,106631,221],{"class":34},[28,106633,106634],{"class":320},"\"expected exactly one actuator\"",[28,106636,227],{"class":34},[28,106638,106639],{"class":30,"line":8054},[28,106640,2477],{"emptyLinePlaceholder":144},[28,106642,106643,106645,106647,106649,106651,106653,106656],{"class":30,"line":8060},[28,106644,3278],{"class":38},[28,106646,31692],{"class":34},[28,106648,26121],{"class":38},[28,106650,32519],{"class":45},[28,106652,221],{"class":34},[28,106654,106655],{"class":45},"2000",[28,106657,30862],{"class":34},[28,106659,106660,106663,106665,106667,106669],{"class":30,"line":8087},[28,106661,106662],{"class":34},"        t ",[28,106664,39],{"class":38},[28,106666,31692],{"class":34},[28,106668,668],{"class":38},[28,106670,106671],{"class":34}," model.opt.timestep\n",[28,106673,106674,106677,106679,106681,106683,106686,106688,106691,106693,106695,106698,106700,106702,106704],{"class":30,"line":8092},[28,106675,106676],{"class":34},"        data.ctrl[",[28,106678,407],{"class":45},[28,106680,4520],{"class":34},[28,106682,39],{"class":38},[28,106684,106685],{"class":45}," 1.5",[28,106687,6595],{"class":38},[28,106689,106690],{"class":34}," math.sin(",[28,106692,105319],{"class":45},[28,106694,6595],{"class":38},[28,106696,106697],{"class":34}," math.pi ",[28,106699,668],{"class":38},[28,106701,61942],{"class":45},[28,106703,6595],{"class":38},[28,106705,106706],{"class":34}," t)\n",[28,106708,106709],{"class":30,"line":8098},[28,106710,101575],{"class":34},[28,106712,106713],{"class":30,"line":8110},[28,106714,2477],{"emptyLinePlaceholder":144},[28,106716,106717,106719,106721,106724],{"class":30,"line":8122},[28,106718,31375],{"class":45},[28,106720,221],{"class":34},[28,106722,106723],{"class":320},"\"time:\"",[28,106725,101537],{"class":34},[28,106727,106728,106730,106732,106735,106737,106739],{"class":30,"line":8134},[28,106729,31375],{"class":45},[28,106731,221],{"class":34},[28,106733,106734],{"class":320},"\"joint qpos:\"",[28,106736,104989],{"class":34},[28,106738,507],{"class":45},[28,106740,30573],{"class":34},[28,106742,106743,106745,106747,106750,106752,106754],{"class":30,"line":9793},[28,106744,31375],{"class":45},[28,106746,221],{"class":34},[28,106748,106749],{"class":320},"\"joint qvel:\"",[28,106751,105005],{"class":34},[28,106753,507],{"class":45},[28,106755,30573],{"class":34},[28,106757,106758,106760,106762,106765],{"class":30,"line":9818},[28,106759,31375],{"class":45},[28,106761,221],{"class":34},[28,106763,106764],{"class":320},"\"last ctrl:\"",[28,106766,106767],{"class":34},", data.ctrl.copy())\n",[28,106769,106770],{"class":30,"line":9841},[28,106771,2477],{"emptyLinePlaceholder":144},[28,106773,106774],{"class":30,"line":9865},[28,106775,2477],{"emptyLinePlaceholder":144},[28,106777,106778,106780,106782,106784,106786],{"class":30,"line":9870},[28,106779,1608],{"class":38},[28,106781,31296],{"class":45},[28,106783,101618],{"class":38},[28,106785,101621],{"class":320},[28,106787,3816],{"class":34},[28,106789,106790],{"class":30,"line":9875},[28,106791,101628],{"class":34},[14,106793,103629],{},[18,106795,106797],{"className":23899,"code":106796,"language":23901,"meta":23,"style":23},"touch ch4_joint_motor.py\n",[25,106798,106799],{"__ignoreMap":23},[28,106800,106801,106803],{"class":30,"line":31},[28,106802,101342],{"class":2040},[28,106804,106805],{"class":320}," ch4_joint_motor.py\n",[14,106807,102360],{},[18,106809,106811],{"className":23899,"code":106810,"language":23901,"meta":23,"style":23},"python ch4_joint_motor.py\n",[25,106812,106813],{"__ignoreMap":23},[28,106814,106815,106817],{"class":30,"line":31},[28,106816,22],{"class":2040},[28,106818,106805],{"class":320},[188,106820,101631],{"id":101631},[14,106822,106823],{},"检查 actuator 数量：",[18,106825,106827],{"className":20,"code":106826,"language":22,"meta":23,"style":23},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[25,106828,106829,106841],{"__ignoreMap":23},[28,106830,106831,106833,106835,106837,106839],{"class":30,"line":31},[28,106832,1608],{"class":38},[28,106834,106617],{"class":34},[28,106836,21025],{"class":38},[28,106838,25196],{"class":45},[28,106840,3816],{"class":34},[28,106842,106843,106845,106847,106849,106851],{"class":30,"line":94},[28,106844,103954],{"class":38},[28,106846,103494],{"class":45},[28,106848,221],{"class":34},[28,106850,106634],{"class":320},[28,106852,227],{"class":34},[14,106854,106855,106857,106858,106860],{},[25,106856,102217],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[25,106859,101135],{}," 长度应该是 1。",[14,106862,106863],{},"产生正弦控制信号：",[18,106865,106867],{"className":20,"code":106866,"language":22,"meta":23,"style":23},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[25,106868,106869],{"__ignoreMap":23},[28,106870,106871,106873,106875,106877,106879,106881,106883,106885,106887,106889,106891,106893,106895,106897],{"class":30,"line":31},[28,106872,105930],{"class":34},[28,106874,407],{"class":45},[28,106876,4520],{"class":34},[28,106878,39],{"class":38},[28,106880,106685],{"class":45},[28,106882,6595],{"class":38},[28,106884,106690],{"class":34},[28,106886,105319],{"class":45},[28,106888,6595],{"class":38},[28,106890,106697],{"class":34},[28,106892,668],{"class":38},[28,106894,61942],{"class":45},[28,106896,6595],{"class":38},[28,106898,106706],{"class":34},[14,106900,106901],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106903,101732],{},[18,106905,106906],{"className":20,"code":104564,"language":22,"meta":23,"style":23},[25,106907,106908],{"__ignoreMap":23},[28,106909,106910],{"class":30,"line":31},[28,106911,104564],{"class":34},[14,106913,106914],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[188,106916,101767],{"id":101767},[18,106918,106920],{"className":20,"code":106919,"language":22,"meta":23,"style":23},"import math\n",[25,106921,106922],{"__ignoreMap":23},[28,106923,106924,106926],{"class":30,"line":31},[28,106925,30468],{"class":38},[28,106927,106409],{"class":34},[14,106929,106930,106931,101077,106934,106937],{},"导入 Python 标准库里的数学模块。后面要用 ",[25,106932,106933],{},"math.sin",[25,106935,106936],{},"math.pi"," 生成周期变化的控制信号。",[18,106939,106940],{"className":20,"code":103745,"language":22,"meta":23,"style":23},[25,106941,106942,106948],{"__ignoreMap":23},[28,106943,106944,106946],{"class":30,"line":31},[28,106945,30468],{"class":38},[28,106947,101360],{"class":34},[28,106949,106950,106952,106954,106956],{"class":30,"line":94},[28,106951,30468],{"class":38},[28,106953,31456],{"class":34},[28,106955,31459],{"class":38},[28,106957,31462],{"class":34},[14,106959,106960],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[18,106962,106963],{"className":53142,"code":106246,"language":53144,"meta":23,"style":23},[25,106964,106965],{"__ignoreMap":23},[28,106966,106967,106969,106971,106973,106975,106977,106979,106981,106983,106985,106987,106989,106991,106993,106995],{"class":30,"line":31},[28,106968,99],{"class":34},[28,106970,103015],{"class":51375},[28,106972,14997],{"class":2040},[28,106974,39],{"class":34},[28,106976,106078],{"class":320},[28,106978,53899],{"class":2040},[28,106980,39],{"class":34},[28,106982,106078],{"class":320},[28,106984,106087],{"class":2040},[28,106986,39],{"class":34},[28,106988,106092],{"class":320},[28,106990,106275],{"class":2040},[28,106992,39],{"class":34},[28,106994,106280],{"class":320},[28,106996,101203],{"class":34},[14,106998,106999,107000,107002,107003,107005,107006,107008],{},"这行定义关节。",[25,107001,105899],{}," 表示旋转关节。",[25,107004,106298],{}," 表示绕 y 轴旋转。",[25,107007,106304],{}," 表示有一点阻尼，运动不会完全无损耗。",[18,107010,107012],{"className":53142,"code":107011,"language":53144,"meta":23,"style":23},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[25,107013,107014],{"__ignoreMap":23},[28,107015,107016,107018,107020,107022,107024,107027,107029,107031,107034,107037,107039,107042,107044,107046,107048,107050,107052,107055],{"class":30,"line":31},[28,107017,99],{"class":34},[28,107019,101179],{"class":51375},[28,107021,14997],{"class":2040},[28,107023,39],{"class":34},[28,107025,107026],{"class":320},"\"link_geom\"",[28,107028,53899],{"class":2040},[28,107030,39],{"class":34},[28,107032,107033],{"class":320},"\"capsule\"",[28,107035,107036],{"class":2040}," fromto",[28,107038,39],{"class":34},[28,107040,107041],{"class":320},"\"0 0 0 0 0 0.5\"",[28,107043,101195],{"class":2040},[28,107045,39],{"class":34},[28,107047,103837],{"class":320},[28,107049,102060],{"class":2040},[28,107051,39],{"class":34},[28,107053,107054],{"class":320},"\"0.5\"",[28,107056,101203],{"class":34},[14,107058,107059,107060,107062,107063,107065,107066,107069,107070,28463,107073,107075],{},"这行定义摆杆的形状。",[25,107061,103224],{}," 是胶囊体，适合表示杆子。",[25,107064,103235],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[25,107067,107068],{},"(0,0,0)"," 延伸到 ",[25,107071,107072],{},"(0,0,0.5)",[25,107074,103229],{}," 是半径。",[18,107077,107078],{"className":53142,"code":106312,"language":53144,"meta":23,"style":23},[25,107079,107080],{"__ignoreMap":23},[28,107081,107082,107084,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104,107106,107108,107110,107112,107114,107116],{"class":30,"line":31},[28,107083,99],{"class":34},[28,107085,106133],{"class":51375},[28,107087,14997],{"class":2040},[28,107089,39],{"class":34},[28,107091,106140],{"class":320},[28,107093,106143],{"class":2040},[28,107095,39],{"class":34},[28,107097,106078],{"class":320},[28,107099,106150],{"class":2040},[28,107101,39],{"class":34},[28,107103,3755],{"class":320},[28,107105,106157],{"class":2040},[28,107107,39],{"class":34},[28,107109,106162],{"class":320},[28,107111,106165],{"class":2040},[28,107113,39],{"class":34},[28,107115,106170],{"class":320},[28,107117,101203],{"class":34},[14,107119,107120,107121,107123,107124,107127,107128,107130],{},"这行定义电机。它作用在 ",[25,107122,105899],{}," 关节上。",[25,107125,107126],{},"gear"," 可以理解成放大倍数。",[25,107129,105914],{}," 限制控制输入范围。",[18,107132,107133],{"className":20,"code":106826,"language":22,"meta":23,"style":23},[25,107134,107135,107147],{"__ignoreMap":23},[28,107136,107137,107139,107141,107143,107145],{"class":30,"line":31},[28,107138,1608],{"class":38},[28,107140,106617],{"class":34},[28,107142,21025],{"class":38},[28,107144,25196],{"class":45},[28,107146,3816],{"class":34},[28,107148,107149,107151,107153,107155,107157],{"class":30,"line":94},[28,107150,103954],{"class":38},[28,107152,103494],{"class":45},[28,107154,221],{"class":34},[28,107156,106634],{"class":320},[28,107158,227],{"class":34},[14,107160,107161,107163],{},[25,107162,102217],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[18,107165,107167],{"className":20,"code":107166,"language":22,"meta":23,"style":23},"for step in range(2000):\n",[25,107168,107169],{"__ignoreMap":23},[28,107170,107171,107173,107175,107177,107179,107181,107183],{"class":30,"line":31},[28,107172,3102],{"class":38},[28,107174,31692],{"class":34},[28,107176,26121],{"class":38},[28,107178,32519],{"class":45},[28,107180,221],{"class":34},[28,107182,106655],{"class":45},[28,107184,30862],{"class":34},[14,107186,107187,107188,107190,107191,107194],{},"循环 2000 步。这里没有用 ",[25,107189,1196],{},"，而是用 ",[25,107192,107193],{},"step","，因为后面要用当前步数计算时间。",[18,107196,107198],{"className":20,"code":107197,"language":22,"meta":23,"style":23},"t = step * model.opt.timestep\n",[25,107199,107200],{"__ignoreMap":23},[28,107201,107202,107205,107207,107209,107211],{"class":30,"line":31},[28,107203,107204],{"class":34},"t ",[28,107206,39],{"class":38},[28,107208,31692],{"class":34},[28,107210,668],{"class":38},[28,107212,106671],{"class":34},[14,107214,107215],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[18,107217,107218],{"className":20,"code":106866,"language":22,"meta":23,"style":23},[25,107219,107220],{"__ignoreMap":23},[28,107221,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248],{"class":30,"line":31},[28,107223,105930],{"class":34},[28,107225,407],{"class":45},[28,107227,4520],{"class":34},[28,107229,39],{"class":38},[28,107231,106685],{"class":45},[28,107233,6595],{"class":38},[28,107235,106690],{"class":34},[28,107237,105319],{"class":45},[28,107239,6595],{"class":38},[28,107241,106697],{"class":34},[28,107243,668],{"class":38},[28,107245,61942],{"class":45},[28,107247,6595],{"class":38},[28,107249,106706],{"class":34},[14,107251,107252],{},"这行给电机输入一个正弦波。拆开看：",[171,107254,107255,107261,107267],{},[174,107256,107257,107260],{},[25,107258,107259],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[174,107262,107263,107266],{},[25,107264,107265],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[174,107268,107269,107272],{},[25,107270,107271],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107274,107275],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[18,107277,107279],{"className":20,"code":107278,"language":22,"meta":23,"style":23},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[25,107280,107281],{"__ignoreMap":23},[28,107282,107283,107285,107287,107289,107291,107293],{"class":30,"line":31},[28,107284,30491],{"class":45},[28,107286,221],{"class":34},[28,107288,106734],{"class":320},[28,107290,104989],{"class":34},[28,107292,507],{"class":45},[28,107294,30573],{"class":34},[14,107296,107297,107298,107300],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[25,107299,101129],{}," 只有一个数。",[159,107302,102375],{"id":102374},[14,107304,107305],{},"输出类似:",[18,107307,107310],{"className":107308,"code":107309,"language":5264,"meta":23},[5262],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[25,107311,107309],{"__ignoreMap":23},[14,107313,107314,107315,107317],{},"这里 ",[25,107316,106185],{}," 是电机输入。",[14,107319,107320,107323,107324,107327],{},[25,107321,107322],{},"joint qpos"," 是关节角度，单位通常是弧度。",[25,107325,107326],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107329,107330],{},"角度单位提示：",[18,107332,107335],{"className":107333,"code":107334,"language":5264,"meta":23},[5262],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[25,107336,107334],{"__ignoreMap":23},[14,107338,107339,107340,107342,107343,107345],{},"如果你看到 ",[25,107341,104089],{}," 是 ",[25,107344,35405],{},"，大约就是 28.6 度。",[159,107347,102407],{"id":102406},[171,107349,107350,107357,107360,107367,107370,107378,107386],{},[174,107351,102470,107352,102473,107354,28463],{},[25,107353,106370],{},[25,107355,107356],{},"gear=\"5\"",[174,107358,107359],{},"重新运行，观察关节运动是否更剧烈。",[174,107361,102470,107362,102473,107364,28463],{},[25,107363,105914],{},[25,107365,107366],{},"-0.2 0.2",[174,107368,107369],{},"重新运行，观察控制能力是否变弱。",[174,107371,107372,107373,107375,107376,28463],{},"去掉 actuator，确认 ",[25,107374,102217],{}," 变成 ",[25,107377,407],{},[174,107379,102470,107380,102473,107382,107385],{},[25,107381,106304],{},[25,107383,107384],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[174,107387,102470,107388,102473,107390,107393],{},[25,107389,106298],{},[25,107391,107392],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[159,107395,102512],{"id":102511},[188,107397,107399],{"id":107398},"indexerror-index-0-is-out-of-bounds",[25,107400,107401],{},"IndexError: index 0 is out of bounds",[14,107403,107404,107405,107407],{},"原因是 ",[25,107406,106051],{},"，没有 actuator。",[188,107409,107410],{"id":107410},"关节几乎不动",[14,107412,107413],{},"可能原因:",[171,107415,107416,107421,107425,107431],{},[174,107417,107418,107420],{},[25,107419,107126],{}," 太小",[174,107422,107423,107420],{},[25,107424,105914],{},[174,107426,107427,107430],{},[25,107428,107429],{},"damping"," 太大",[174,107432,107433],{},"重力方向导致运动不明显",[188,107435,107436],{"id":107436},"模型编译失败",[14,107438,107439,107440,107442],{},"检查 actuator 引用的 ",[25,107441,106361],{}," 是否存在，joint 名称是否拼写一致。",[188,107444,107446,107448],{"id":107445},"datactrl0-写了但没有效果",[25,107447,106185],{}," 写了但没有效果",[14,107450,102634],{},[171,107452,107453,107458,107461,107466,107471],{},[174,107454,107455,107457],{},[25,107456,102217],{}," 是否大于 0。",[174,107459,107460],{},"motor 是否引用了正确 joint。",[174,107462,107463,107465],{},[25,107464,107126],{}," 是否太小。",[174,107467,107468,107470],{},[25,107469,105914],{}," 是否把输入限制得太小。",[174,107472,107473],{},"body 是否真的有可动 joint。",[188,107475,107476],{"id":107476},"控制输入超过范围会怎样",[14,107478,107479],{},"如果设置了：",[18,107481,107483],{"className":53142,"code":107482,"language":53144,"meta":23,"style":23},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[25,107484,107485],{"__ignoreMap":23},[28,107486,107487],{"class":30,"line":31},[28,107488,107482],{"class":34},[14,107490,107491],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[18,107493,107495],{"className":20,"code":107494,"language":22,"meta":23,"style":23},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[25,107496,107497,107517],{"__ignoreMap":23},[28,107498,107499,107502,107504,107507,107509,107511,107513,107515],{"class":30,"line":31},[28,107500,107501],{"class":34},"action ",[28,107503,39],{"class":38},[28,107505,107506],{"class":34}," np.clip(action, ",[28,107508,742],{"class":38},[28,107510,105319],{"class":45},[28,107512,12512],{"class":34},[28,107514,105319],{"class":45},[28,107516,227],{"class":34},[28,107518,107519,107521,107523,107525,107527],{"class":30,"line":94},[28,107520,105930],{"class":34},[28,107522,407],{"class":45},[28,107524,4520],{"class":34},[28,107526,39],{"class":38},[28,107528,107529],{"class":34}," action\n",[159,107531,102666],{"id":102665},[14,107533,107534],{},"这一章建立了控制任务的基本形式：",[18,107536,107539],{"className":107537,"code":107538,"language":5264,"meta":23},[5262],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[25,107540,107538],{"__ignoreMap":23},[14,107542,107543],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[136,107545,107546],{},"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":23,"searchDepth":94,"depth":94,"links":107548},[107549,107550,107551,107556,107560,107561,107562,107570],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":107552},[107553,107554,107555],{"id":106192,"depth":109,"text":106193},{"id":106242,"depth":109,"text":106243},{"id":106308,"depth":109,"text":106309},{"id":101311,"depth":94,"text":101312,"children":107557},[107558,107559],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":107563},[107564,107565,107566,107567,107569],{"id":107398,"depth":109,"text":107401},{"id":107410,"depth":109,"text":107410},{"id":107436,"depth":109,"text":107436},{"id":107445,"depth":109,"text":107568},"data.ctrl[0] 写了但没有效果",{"id":107476,"depth":109,"text":107476},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105880,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107577,"title":107578,"body":107579,"description":23,"extension":142,"meta":109488,"navigation":144,"path":109489,"seo":109490,"stem":109491,"__hash__":109492},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107580,"toc":109464},[107581,107584,107586,107589,107597,107600,107617,107620,107645,107648,107694,107696,107698,107753,107755,107774,107776,107819,107822,107839,107842,107858,107868,107875,107877,107880,107883,107917,107920,107968,107972,107975,107989,107998,108002,108005,108030,108033,108037,108050,108053,108059,108062,108077,108079,108082,108342,108344,108356,108359,108671,108673,108685,108687,108690,108705,108710,108713,108735,108738,108741,108775,108778,108782,108793,108796,108813,108816,108830,108837,108857,108864,108878,108881,108893,108908,108928,108931,108953,108956,108960,108975,108986,109001,109004,109034,109050,109079,109087,109111,109114,109132,109142,109154,109161,109170,109176,109185,109188,109190,109199,109202,109217,109219,109222,109233,109236,109247,109250,109268,109270,109287,109290,109318,109320,109324,109327,109357,109363,109366,109370,109378,109381,109383,109404,109407,109410,109426,109429,109445,109447,109450,109461],[10,107582,107578],{"id":107583},"_5viewer-可视化与-renderer-离屏渲染",[159,107585,100706],{"id":100705},[14,107587,107588],{},"本章掌握两类可视化方式:",[171,107590,107591,107594],{},[174,107592,107593],{},"交互式 viewer: 适合人工观察仿真",[174,107595,107596],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107598,107599],{},"使用官方接口:",[18,107601,107603],{"className":20,"code":107602,"language":22,"meta":23,"style":23},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[25,107604,107605,107612],{"__ignoreMap":23},[28,107606,107607,107609],{"class":30,"line":31},[28,107608,30468],{"class":38},[28,107610,107611],{"class":34}," mujoco.viewer\n",[28,107613,107614],{"class":30,"line":94},[28,107615,107616],{"class":34},"mujoco.viewer.launch_passive(model, data)\n",[14,107618,107619],{},"以及:",[18,107621,107623],{"className":20,"code":107622,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[25,107624,107625,107635],{"__ignoreMap":23},[28,107626,107627,107630,107632],{"class":30,"line":31},[28,107628,107629],{"class":34},"renderer ",[28,107631,39],{"class":38},[28,107633,107634],{"class":34}," mujoco.Renderer(model)\n",[28,107636,107637,107640,107642],{"class":30,"line":94},[28,107638,107639],{"class":34},"image ",[28,107641,39],{"class":38},[28,107643,107644],{"class":34}," renderer.render()\n",[14,107646,107647],{},"新手建议先理解二者区别：",[353,107649,107650,107666],{},[356,107651,107652],{},[359,107653,107654,107657,107660,107663],{},[362,107655,107656],{"align":23813},"工具",[362,107658,107659],{"align":23813},"用途",[362,107661,107662],{"align":23813},"是否打开窗口",[362,107664,107665],{"align":23813},"常见场景",[400,107667,107668,107681],{},[359,107669,107670,107673,107676,107678],{},[405,107671,107672],{"align":23813},"Viewer",[405,107674,107675],{"align":23813},"人眼实时观察仿真",[405,107677,104724],{"align":23813},[405,107679,107680],{"align":23813},"调试模型、看控制效果",[359,107682,107683,107686,107689,107691],{},[405,107684,107685],{"align":23813},"Renderer",[405,107687,107688],{"align":23813},"生成图像数组",[405,107690,104737],{"align":23813},[405,107692,107693],{"align":23813},"保存图片、训练视觉策略、服务器批量采集",[159,107695,100829],{"id":100828},[14,107697,100832],{},[18,107699,107701],{"className":23899,"code":107700,"language":23901,"meta":23,"style":23},"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",[25,107702,107703,107715,107725,107733,107741],{"__ignoreMap":23},[28,107704,107705,107707,107709,107711,107713],{"class":30,"line":31},[28,107706,24654],{"class":2040},[28,107708,26393],{"class":320},[28,107710,23911],{"class":320},[28,107712,26478],{"class":45},[28,107714,24756],{"class":45},[28,107716,107717,107719,107721,107723],{"class":30,"line":94},[28,107718,100867],{"class":320},[28,107720,100870],{"class":320},[28,107722,100873],{"class":320},[28,107724,24756],{"class":45},[28,107726,107727,107729,107731],{"class":30,"line":109},[28,107728,100880],{"class":320},[28,107730,100883],{"class":320},[28,107732,24756],{"class":45},[28,107734,107735,107737,107739],{"class":30,"line":125},[28,107736,100890],{"class":320},[28,107738,100893],{"class":320},[28,107740,24756],{"class":45},[28,107742,107743,107745,107747,107749,107751],{"class":30,"line":131},[28,107744,100900],{"class":320},[28,107746,100903],{"class":320},[28,107748,100906],{"class":320},[28,107750,100909],{"class":320},[28,107752,102575],{"class":320},[14,107754,102878],{},[18,107756,107758],{"className":23899,"code":107757,"language":23901,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy pillow\n",[25,107759,107760],{"__ignoreMap":23},[28,107761,107762,107764,107766,107768,107771],{"class":30,"line":31},[28,107763,23908],{"class":2040},[28,107765,23911],{"class":320},[28,107767,100989],{"class":320},[28,107769,107770],{"class":320}," numpy",[28,107772,107773],{"class":320}," pillow\n",[14,107775,102895],{},[18,107777,107779],{"className":23899,"code":107778,"language":23901,"meta":23,"style":23},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[25,107780,107781,107798,107807],{"__ignoreMap":23},[28,107782,107783,107785,107787,107789,107792,107794,107796],{"class":30,"line":31},[28,107784,30408],{"class":2040},[28,107786,29254],{"class":320},[28,107788,25193],{"class":45},[28,107790,107791],{"class":320}," mujoco-render",[28,107793,101034],{"class":320},[28,107795,101037],{"class":45},[28,107797,101040],{"class":45},[28,107799,107800,107802,107804],{"class":30,"line":94},[28,107801,30408],{"class":2040},[28,107803,101047],{"class":320},[28,107805,107806],{"class":320}," mujoco-render\n",[28,107808,107809,107811,107813,107815,107817],{"class":30,"line":109},[28,107810,23908],{"class":2040},[28,107812,23911],{"class":320},[28,107814,100989],{"class":320},[28,107816,107770],{"class":320},[28,107818,107773],{"class":320},[14,107820,107821],{},"离屏渲染后端:",[18,107823,107825],{"className":23899,"code":107824,"language":23901,"meta":23,"style":23},"export MUJOCO_GL=egl\n",[25,107826,107827],{"__ignoreMap":23},[28,107828,107829,107831,107834,107836],{"class":30,"line":31},[28,107830,25120],{"class":38},[28,107832,107833],{"class":34}," MUJOCO_GL",[28,107835,39],{"class":38},[28,107837,107838],{"class":34},"egl\n",[14,107840,107841],{},"或:",[18,107843,107845],{"className":23899,"code":107844,"language":23901,"meta":23,"style":23},"export MUJOCO_GL=osmesa\n",[25,107846,107847],{"__ignoreMap":23},[28,107848,107849,107851,107853,107855],{"class":30,"line":31},[28,107850,25120],{"class":38},[28,107852,107833],{"class":34},[28,107854,39],{"class":38},[28,107856,107857],{"class":34},"osmesa\n",[14,107859,107860,107861,107864,107865,28463],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[25,107862,107863],{},"egl"," 失败，再尝试 ",[25,107866,107867],{},"osmesa",[14,107869,107870,107871,107874],{},"如果你在本机桌面环境运行，通常先不要设置 ",[25,107872,107873],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[159,107876,101104],{"id":101103},[14,107878,107879],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107881,107882],{},"典型 viewer 流程:",[18,107884,107886],{"className":20,"code":107885,"language":22,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[25,107887,107888,107901,107908,107912],{"__ignoreMap":23},[28,107889,107890,107893,107896,107898],{"class":30,"line":31},[28,107891,107892],{"class":38},"with",[28,107894,107895],{"class":34}," mujoco.viewer.launch_passive(model, data) ",[28,107897,31459],{"class":38},[28,107899,107900],{"class":34}," viewer:\n",[28,107902,107903,107905],{"class":30,"line":94},[28,107904,2328],{"class":38},[28,107906,107907],{"class":34}," viewer.is_running():\n",[28,107909,107910],{"class":30,"line":109},[28,107911,101575],{"class":34},[28,107913,107914],{"class":30,"line":125},[28,107915,107916],{"class":34},"        viewer.sync()\n",[14,107918,107919],{},"典型 renderer 流程:",[18,107921,107923],{"className":20,"code":107922,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[25,107924,107925,107951,107955,107960],{"__ignoreMap":23},[28,107926,107927,107929,107931,107934,107936,107938,107940,107942,107944,107946,107949],{"class":30,"line":31},[28,107928,107629],{"class":34},[28,107930,39],{"class":38},[28,107932,107933],{"class":34}," mujoco.Renderer(model, ",[28,107935,25059],{"class":5293},[28,107937,39],{"class":38},[28,107939,42418],{"class":45},[28,107941,12512],{"class":34},[28,107943,25055],{"class":5293},[28,107945,39],{"class":38},[28,107947,107948],{"class":45},"640",[28,107950,227],{"class":34},[28,107952,107953],{"class":30,"line":94},[28,107954,104564],{"class":34},[28,107956,107957],{"class":30,"line":109},[28,107958,107959],{"class":34},"renderer.update_scene(data)\n",[28,107961,107962,107964,107966],{"class":30,"line":125},[28,107963,107639],{"class":34},[28,107965,39],{"class":38},[28,107967,107644],{"class":34},[188,107969,107971],{"id":107970},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107973,107974],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[18,107976,107978],{"className":20,"code":107977,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\nviewer.sync()\n",[25,107979,107980,107984],{"__ignoreMap":23},[28,107981,107982],{"class":30,"line":31},[28,107983,104564],{"class":34},[28,107985,107986],{"class":30,"line":94},[28,107987,107988],{"class":34},"viewer.sync()\n",[14,107990,107991,107993,107994,107997],{},[25,107992,101274],{}," 负责算物理，",[25,107995,107996],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[188,107999,108001],{"id":108000},"为什么要-sleep","为什么要 sleep",[14,108003,108004],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[18,108006,108008],{"className":20,"code":108007,"language":22,"meta":23,"style":23},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[25,108009,108010],{"__ignoreMap":23},[28,108011,108012,108015,108017,108020,108022,108025,108027],{"class":30,"line":31},[28,108013,108014],{"class":34},"sleep_time ",[28,108016,39],{"class":38},[28,108018,108019],{"class":34}," model.opt.timestep ",[28,108021,742],{"class":38},[28,108023,108024],{"class":34}," (time.time() ",[28,108026,742],{"class":38},[28,108028,108029],{"class":34}," step_start)\n",[14,108031,108032],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[188,108034,108036],{"id":108035},"renderer-输出是什么","renderer 输出是什么",[18,108038,108040],{"className":20,"code":108039,"language":22,"meta":23,"style":23},"image = renderer.render()\n",[25,108041,108042],{"__ignoreMap":23},[28,108043,108044,108046,108048],{"class":30,"line":31},[28,108045,107639],{"class":34},[28,108047,39],{"class":38},[28,108049,107644],{"class":34},[14,108051,108052],{},"得到的是 NumPy 数组，形状通常是：",[18,108054,108057],{"className":108055,"code":108056,"language":5264,"meta":23},[5262],"(height, width, 3)\n",[25,108058,108056],{"__ignoreMap":23},[14,108060,108061],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[18,108063,108065],{"className":20,"code":108064,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(\"render_output.png\")\n",[25,108066,108067],{"__ignoreMap":23},[28,108068,108069,108072,108075],{"class":30,"line":31},[28,108070,108071],{"class":34},"Image.fromarray(image).save(",[28,108073,108074],{"class":320},"\"render_output.png\"",[28,108076,227],{"class":34},[159,108078,101312],{"id":101311},[14,108080,108081],{},"交互式 Viewer:",[18,108083,108085],{"className":20,"code":108084,"language":22,"meta":23,"style":23},"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",[25,108086,108087,108093,108097,108103,108109,108113,108117,108125,108130,108134,108138,108142,108147,108152,108156,108160,108164,108169,108173,108177,108181,108185,108189,108193,108205,108217,108225,108229,108239,108259,108269,108274,108279,108283,108300,108313,108318,108322,108326,108338],{"__ignoreMap":23},[28,108088,108089,108091],{"class":30,"line":31},[28,108090,30468],{"class":38},[28,108092,31905],{"class":34},[28,108094,108095],{"class":30,"line":94},[28,108096,2477],{"emptyLinePlaceholder":144},[28,108098,108099,108101],{"class":30,"line":109},[28,108100,30468],{"class":38},[28,108102,101360],{"class":34},[28,108104,108105,108107],{"class":30,"line":125},[28,108106,30468],{"class":38},[28,108108,107611],{"class":34},[28,108110,108111],{"class":30,"line":131},[28,108112,2477],{"emptyLinePlaceholder":144},[28,108114,108115],{"class":30,"line":1291},[28,108116,2477],{"emptyLinePlaceholder":144},[28,108118,108119,108121,108123],{"class":30,"line":1297},[28,108120,101373],{"class":45},[28,108122,13641],{"class":38},[28,108124,101378],{"class":320},[28,108126,108127],{"class":30,"line":1388},[28,108128,108129],{"class":320},"\u003Cmujoco model=\"viewer_demo\">\n",[28,108131,108132],{"class":30,"line":1394},[28,108133,101388],{"class":320},[28,108135,108136],{"class":30,"line":1406},[28,108137,2477],{"emptyLinePlaceholder":144},[28,108139,108140],{"class":30,"line":1689},[28,108141,101397],{"class":320},[28,108143,108144],{"class":30,"line":1694},[28,108145,108146],{"class":320},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[28,108148,108149],{"class":30,"line":1700},[28,108150,108151],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,108153,108154],{"class":30,"line":1705},[28,108155,2477],{"emptyLinePlaceholder":144},[28,108157,108158],{"class":30,"line":1719},[28,108159,101411],{"class":320},[28,108161,108162],{"class":30,"line":1724},[28,108163,101416],{"class":320},[28,108165,108166],{"class":30,"line":1730},[28,108167,108168],{"class":320},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,108170,108171],{"class":30,"line":1751},[28,108172,101426],{"class":320},[28,108174,108175],{"class":30,"line":1756},[28,108176,101431],{"class":320},[28,108178,108179],{"class":30,"line":1770},[28,108180,101436],{"class":320},[28,108182,108183],{"class":30,"line":1775},[28,108184,95757],{"class":320},[28,108186,108187],{"class":30,"line":1804},[28,108188,2477],{"emptyLinePlaceholder":144},[28,108190,108191],{"class":30,"line":1809},[28,108192,2477],{"emptyLinePlaceholder":144},[28,108194,108195,108197,108199,108201,108203],{"class":30,"line":1826},[28,108196,32023],{"class":38},[28,108198,2050],{"class":2040},[28,108200,101457],{"class":34},[28,108202,95745],{"class":45},[28,108204,3816],{"class":34},[28,108206,108207,108209,108211,108213,108215],{"class":30,"line":1831},[28,108208,101466],{"class":34},[28,108210,39],{"class":38},[28,108212,101471],{"class":34},[28,108214,101373],{"class":45},[28,108216,227],{"class":34},[28,108218,108219,108221,108223],{"class":30,"line":1836},[28,108220,101480],{"class":34},[28,108222,39],{"class":38},[28,108224,101485],{"class":34},[28,108226,108227],{"class":30,"line":1841},[28,108228,2477],{"emptyLinePlaceholder":144},[28,108230,108231,108233,108235,108237],{"class":30,"line":1855},[28,108232,34254],{"class":38},[28,108234,107895],{"class":34},[28,108236,31459],{"class":38},[28,108238,107900],{"class":34},[28,108240,108241,108244,108247,108249,108252,108254,108257],{"class":30,"line":1860},[28,108242,108243],{"class":38},"        while",[28,108245,108246],{"class":34}," viewer.is_running() ",[28,108248,30538],{"class":38},[28,108250,108251],{"class":34}," data.time ",[28,108253,99],{"class":38},[28,108255,108256],{"class":45}," 5.0",[28,108258,3816],{"class":34},[28,108260,108261,108264,108266],{"class":30,"line":2654},[28,108262,108263],{"class":34},"            step_start ",[28,108265,39],{"class":38},[28,108267,108268],{"class":34}," time.time()\n",[28,108270,108271],{"class":30,"line":2668},[28,108272,108273],{"class":34},"            mujoco.mj_step(model, data)\n",[28,108275,108276],{"class":30,"line":2676},[28,108277,108278],{"class":34},"            viewer.sync()\n",[28,108280,108281],{"class":30,"line":2681},[28,108282,2477],{"emptyLinePlaceholder":144},[28,108284,108285,108288,108290,108292,108294,108296,108298],{"class":30,"line":2687},[28,108286,108287],{"class":34},"            sleep_time ",[28,108289,39],{"class":38},[28,108291,108019],{"class":34},[28,108293,742],{"class":38},[28,108295,108024],{"class":34},[28,108297,742],{"class":38},[28,108299,108029],{"class":34},[28,108301,108302,108304,108307,108309,108311],{"class":30,"line":2693},[28,108303,4719],{"class":38},[28,108305,108306],{"class":34}," sleep_time ",[28,108308,1164],{"class":38},[28,108310,4170],{"class":45},[28,108312,3816],{"class":34},[28,108314,108315],{"class":30,"line":2698},[28,108316,108317],{"class":34},"                time.sleep(sleep_time)\n",[28,108319,108320],{"class":30,"line":8025},[28,108321,2477],{"emptyLinePlaceholder":144},[28,108323,108324],{"class":30,"line":8049},[28,108325,2477],{"emptyLinePlaceholder":144},[28,108327,108328,108330,108332,108334,108336],{"class":30,"line":8054},[28,108329,1608],{"class":38},[28,108331,31296],{"class":45},[28,108333,101618],{"class":38},[28,108335,101621],{"class":320},[28,108337,3816],{"class":34},[28,108339,108340],{"class":30,"line":8060},[28,108341,101628],{"class":34},[14,108343,103629],{},[18,108345,108347],{"className":23899,"code":108346,"language":23901,"meta":23,"style":23},"touch ch5_viewer.py\n",[25,108348,108349],{"__ignoreMap":23},[28,108350,108351,108353],{"class":30,"line":31},[28,108352,101342],{"class":2040},[28,108354,108355],{"class":320}," ch5_viewer.py\n",[14,108357,108358],{},"离屏 Renderer 保存图片:",[18,108360,108362],{"className":20,"code":108361,"language":22,"meta":23,"style":23},"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",[25,108363,108364,108376,108380,108386,108396,108400,108404,108412,108417,108421,108425,108429,108433,108438,108442,108446,108450,108454,108458,108462,108466,108470,108474,108478,108482,108494,108506,108514,108539,108543,108559,108563,108567,108582,108591,108595,108609,108614,108619,108623,108635,108647,108651,108655,108667],{"__ignoreMap":23},[28,108365,108366,108368,108371,108373],{"class":30,"line":31},[28,108367,30813],{"class":38},[28,108369,108370],{"class":34}," pathlib ",[28,108372,30468],{"class":38},[28,108374,108375],{"class":34}," Path\n",[28,108377,108378],{"class":30,"line":94},[28,108379,2477],{"emptyLinePlaceholder":144},[28,108381,108382,108384],{"class":30,"line":109},[28,108383,30468],{"class":38},[28,108385,101360],{"class":34},[28,108387,108388,108390,108392,108394],{"class":30,"line":125},[28,108389,30813],{"class":38},[28,108391,47339],{"class":45},[28,108393,47342],{"class":38},[28,108395,47345],{"class":34},[28,108397,108398],{"class":30,"line":131},[28,108399,2477],{"emptyLinePlaceholder":144},[28,108401,108402],{"class":30,"line":1291},[28,108403,2477],{"emptyLinePlaceholder":144},[28,108405,108406,108408,108410],{"class":30,"line":1297},[28,108407,101373],{"class":45},[28,108409,13641],{"class":38},[28,108411,101378],{"class":320},[28,108413,108414],{"class":30,"line":1388},[28,108415,108416],{"class":320},"\u003Cmujoco model=\"renderer_demo\">\n",[28,108418,108419],{"class":30,"line":1394},[28,108420,101388],{"class":320},[28,108422,108423],{"class":30,"line":1406},[28,108424,2477],{"emptyLinePlaceholder":144},[28,108426,108427],{"class":30,"line":1689},[28,108428,101397],{"class":320},[28,108430,108431],{"class":30,"line":1694},[28,108432,108146],{"class":320},[28,108434,108435],{"class":30,"line":1700},[28,108436,108437],{"class":320},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[28,108439,108440],{"class":30,"line":1705},[28,108441,108151],{"class":320},[28,108443,108444],{"class":30,"line":1719},[28,108445,2477],{"emptyLinePlaceholder":144},[28,108447,108448],{"class":30,"line":1724},[28,108449,101411],{"class":320},[28,108451,108452],{"class":30,"line":1730},[28,108453,101416],{"class":320},[28,108455,108456],{"class":30,"line":1751},[28,108457,108168],{"class":320},[28,108459,108460],{"class":30,"line":1756},[28,108461,101426],{"class":320},[28,108463,108464],{"class":30,"line":1770},[28,108465,101431],{"class":320},[28,108467,108468],{"class":30,"line":1775},[28,108469,101436],{"class":320},[28,108471,108472],{"class":30,"line":1804},[28,108473,95757],{"class":320},[28,108475,108476],{"class":30,"line":1809},[28,108477,2477],{"emptyLinePlaceholder":144},[28,108479,108480],{"class":30,"line":1826},[28,108481,2477],{"emptyLinePlaceholder":144},[28,108483,108484,108486,108488,108490,108492],{"class":30,"line":1831},[28,108485,32023],{"class":38},[28,108487,2050],{"class":2040},[28,108489,101457],{"class":34},[28,108491,95745],{"class":45},[28,108493,3816],{"class":34},[28,108495,108496,108498,108500,108502,108504],{"class":30,"line":1836},[28,108497,101466],{"class":34},[28,108499,39],{"class":38},[28,108501,101471],{"class":34},[28,108503,101373],{"class":45},[28,108505,227],{"class":34},[28,108507,108508,108510,108512],{"class":30,"line":1841},[28,108509,101480],{"class":34},[28,108511,39],{"class":38},[28,108513,101485],{"class":34},[28,108515,108516,108519,108521,108523,108525,108527,108529,108531,108533,108535,108537],{"class":30,"line":1855},[28,108517,108518],{"class":34},"    renderer ",[28,108520,39],{"class":38},[28,108522,107933],{"class":34},[28,108524,25059],{"class":5293},[28,108526,39],{"class":38},[28,108528,42418],{"class":45},[28,108530,12512],{"class":34},[28,108532,25055],{"class":5293},[28,108534,39],{"class":38},[28,108536,107948],{"class":45},[28,108538,227],{"class":34},[28,108540,108541],{"class":30,"line":1860},[28,108542,2477],{"emptyLinePlaceholder":144},[28,108544,108545,108547,108549,108551,108553,108555,108557],{"class":30,"line":2654},[28,108546,3278],{"class":38},[28,108548,101560],{"class":34},[28,108550,26121],{"class":38},[28,108552,32519],{"class":45},[28,108554,221],{"class":34},[28,108556,525],{"class":45},[28,108558,30862],{"class":34},[28,108560,108561],{"class":30,"line":2668},[28,108562,101575],{"class":34},[28,108564,108565],{"class":30,"line":2676},[28,108566,2477],{"emptyLinePlaceholder":144},[28,108568,108569,108572,108575,108577,108580],{"class":30,"line":2681},[28,108570,108571],{"class":34},"    renderer.update_scene(data, ",[28,108573,108574],{"class":5293},"camera",[28,108576,39],{"class":38},[28,108578,108579],{"class":320},"\"fixed_camera\"",[28,108581,227],{"class":34},[28,108583,108584,108587,108589],{"class":30,"line":2687},[28,108585,108586],{"class":34},"    image ",[28,108588,39],{"class":38},[28,108590,107644],{"class":34},[28,108592,108593],{"class":30,"line":2693},[28,108594,2477],{"emptyLinePlaceholder":144},[28,108596,108597,108600,108602,108605,108607],{"class":30,"line":2698},[28,108598,108599],{"class":34},"    output_path ",[28,108601,39],{"class":38},[28,108603,108604],{"class":34}," Path(",[28,108606,108074],{"class":320},[28,108608,227],{"class":34},[28,108610,108611],{"class":30,"line":8025},[28,108612,108613],{"class":34},"    Image.fromarray(image).save(output_path)\n",[28,108615,108616],{"class":30,"line":8049},[28,108617,108618],{"class":34},"    renderer.close()\n",[28,108620,108621],{"class":30,"line":8054},[28,108622,2477],{"emptyLinePlaceholder":144},[28,108624,108625,108627,108629,108632],{"class":30,"line":8060},[28,108626,31375],{"class":45},[28,108628,221],{"class":34},[28,108630,108631],{"class":320},"\"saved:\"",[28,108633,108634],{"class":34},", output_path.resolve())\n",[28,108636,108637,108639,108641,108644],{"class":30,"line":8087},[28,108638,31375],{"class":45},[28,108640,221],{"class":34},[28,108642,108643],{"class":320},"\"image shape:\"",[28,108645,108646],{"class":34},", image.shape)\n",[28,108648,108649],{"class":30,"line":8092},[28,108650,2477],{"emptyLinePlaceholder":144},[28,108652,108653],{"class":30,"line":8098},[28,108654,2477],{"emptyLinePlaceholder":144},[28,108656,108657,108659,108661,108663,108665],{"class":30,"line":8110},[28,108658,1608],{"class":38},[28,108660,31296],{"class":45},[28,108662,101618],{"class":38},[28,108664,101621],{"class":320},[28,108666,3816],{"class":34},[28,108668,108669],{"class":30,"line":8122},[28,108670,101628],{"class":34},[14,108672,103629],{},[18,108674,108676],{"className":23899,"code":108675,"language":23901,"meta":23,"style":23},"touch ch5_renderer.py\n",[25,108677,108678],{"__ignoreMap":23},[28,108679,108680,108682],{"class":30,"line":31},[28,108681,101342],{"class":2040},[28,108683,108684],{"class":320}," ch5_renderer.py\n",[188,108686,101631],{"id":101631},[14,108688,108689],{},"viewer 上下文：",[18,108691,108693],{"className":20,"code":108692,"language":22,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[25,108694,108695],{"__ignoreMap":23},[28,108696,108697,108699,108701,108703],{"class":30,"line":31},[28,108698,107892],{"class":38},[28,108700,107895],{"class":34},[28,108702,31459],{"class":38},[28,108704,107900],{"class":34},[14,108706,108707,108709],{},[25,108708,107892],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108711,108712],{},"窗口循环：",[18,108714,108716],{"className":20,"code":108715,"language":22,"meta":23,"style":23},"while viewer.is_running() and data.time \u003C 5.0:\n",[25,108717,108718],{"__ignoreMap":23},[28,108719,108720,108723,108725,108727,108729,108731,108733],{"class":30,"line":31},[28,108721,108722],{"class":38},"while",[28,108724,108246],{"class":34},[28,108726,30538],{"class":38},[28,108728,108251],{"class":34},[28,108730,99],{"class":38},[28,108732,108256],{"class":45},[28,108734,3816],{"class":34},[14,108736,108737],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108739,108740],{},"固定相机：",[18,108742,108744],{"className":53142,"code":108743,"language":53144,"meta":23,"style":23},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[25,108745,108746],{"__ignoreMap":23},[28,108747,108748,108750,108752,108754,108756,108758,108760,108762,108765,108768,108770,108773],{"class":30,"line":31},[28,108749,99],{"class":34},[28,108751,108574],{"class":51375},[28,108753,14997],{"class":2040},[28,108755,39],{"class":34},[28,108757,108579],{"class":320},[28,108759,101165],{"class":2040},[28,108761,39],{"class":34},[28,108763,108764],{"class":320},"\"1.5 -2.0 1.2\"",[28,108766,108767],{"class":2040}," xyaxes",[28,108769,39],{"class":34},[28,108771,108772],{"class":320},"\"1 0.75 0 0 0 1\"",[28,108774,101203],{"class":34},[14,108776,108777],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[188,108779,108781],{"id":108780},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[18,108783,108785],{"className":20,"code":108784,"language":22,"meta":23,"style":23},"import time\n",[25,108786,108787],{"__ignoreMap":23},[28,108788,108789,108791],{"class":30,"line":31},[28,108790,30468],{"class":38},[28,108792,31905],{"class":34},[14,108794,108795],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[18,108797,108799],{"className":20,"code":108798,"language":22,"meta":23,"style":23},"import mujoco\nimport mujoco.viewer\n",[25,108800,108801,108807],{"__ignoreMap":23},[28,108802,108803,108805],{"class":30,"line":31},[28,108804,30468],{"class":38},[28,108806,101360],{"class":34},[28,108808,108809,108811],{"class":30,"line":94},[28,108810,30468],{"class":38},[28,108812,107611],{"class":34},[14,108814,108815],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[18,108817,108818],{"className":20,"code":108692,"language":22,"meta":23,"style":23},[25,108819,108820],{"__ignoreMap":23},[28,108821,108822,108824,108826,108828],{"class":30,"line":31},[28,108823,107892],{"class":38},[28,108825,107895],{"class":34},[28,108827,31459],{"class":38},[28,108829,107900],{"class":34},[14,108831,108832,108833,108836],{},"打开一个 viewer 窗口。",[25,108834,108835],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[18,108838,108839],{"className":20,"code":108715,"language":22,"meta":23,"style":23},[25,108840,108841],{"__ignoreMap":23},[28,108842,108843,108845,108847,108849,108851,108853,108855],{"class":30,"line":31},[28,108844,108722],{"class":38},[28,108846,108246],{"class":34},[28,108848,30538],{"class":38},[28,108850,108251],{"class":34},[28,108852,99],{"class":38},[28,108854,108256],{"class":45},[28,108856,3816],{"class":34},[14,108858,108859,108860,108863],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[25,108861,108862],{},"viewer.is_running()"," 会变成 false，循环结束。",[18,108865,108867],{"className":20,"code":108866,"language":22,"meta":23,"style":23},"step_start = time.time()\n",[25,108868,108869],{"__ignoreMap":23},[28,108870,108871,108874,108876],{"class":30,"line":31},[28,108872,108873],{"class":34},"step_start ",[28,108875,39],{"class":38},[28,108877,108268],{"class":34},[14,108879,108880],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[18,108882,108883],{"className":20,"code":107977,"language":22,"meta":23,"style":23},[25,108884,108885,108889],{"__ignoreMap":23},[28,108886,108887],{"class":30,"line":31},[28,108888,104564],{"class":34},[28,108890,108891],{"class":30,"line":94},[28,108892,107988],{"class":34},[14,108894,108895,108897,108898,108900,108901,108903,108904,108907],{},[25,108896,101274],{}," 推进物理仿真。",[25,108899,107996],{}," 把最新的 ",[25,108902,33477],{}," 同步到窗口里显示。没有 ",[25,108905,108906],{},"sync()","，窗口可能看不到最新状态。",[18,108909,108910],{"className":20,"code":108007,"language":22,"meta":23,"style":23},[25,108911,108912],{"__ignoreMap":23},[28,108913,108914,108916,108918,108920,108922,108924,108926],{"class":30,"line":31},[28,108915,108014],{"class":34},[28,108917,39],{"class":38},[28,108919,108019],{"class":34},[28,108921,742],{"class":38},[28,108923,108024],{"class":34},[28,108925,742],{"class":38},[28,108927,108029],{"class":34},[14,108929,108930],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[18,108932,108934],{"className":20,"code":108933,"language":22,"meta":23,"style":23},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[25,108935,108936,108948],{"__ignoreMap":23},[28,108937,108938,108940,108942,108944,108946],{"class":30,"line":31},[28,108939,1608],{"class":38},[28,108941,108306],{"class":34},[28,108943,1164],{"class":38},[28,108945,4170],{"class":45},[28,108947,3816],{"class":34},[28,108949,108950],{"class":30,"line":94},[28,108951,108952],{"class":34},"    time.sleep(sleep_time)\n",[14,108954,108955],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[188,108957,108959],{"id":108958},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[18,108961,108963],{"className":20,"code":108962,"language":22,"meta":23,"style":23},"from pathlib import Path\n",[25,108964,108965],{"__ignoreMap":23},[28,108966,108967,108969,108971,108973],{"class":30,"line":31},[28,108968,30813],{"class":38},[28,108970,108370],{"class":34},[28,108972,30468],{"class":38},[28,108974,108375],{"class":34},[14,108976,108977,108978,108981,108982,108985],{},"导入 ",[25,108979,108980],{},"Path","，用来处理文件路径。相比直接写字符串，",[25,108983,108984],{},"Path(\"render_output.png\")"," 更清晰。",[18,108987,108989],{"className":20,"code":108988,"language":22,"meta":23,"style":23},"from PIL import Image\n",[25,108990,108991],{"__ignoreMap":23},[28,108992,108993,108995,108997,108999],{"class":30,"line":31},[28,108994,30813],{"class":38},[28,108996,47339],{"class":45},[28,108998,47342],{"class":38},[28,109000,47345],{"class":34},[14,109002,109003],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[18,109005,109006],{"className":53142,"code":108743,"language":53144,"meta":23,"style":23},[25,109007,109008],{"__ignoreMap":23},[28,109009,109010,109012,109014,109016,109018,109020,109022,109024,109026,109028,109030,109032],{"class":30,"line":31},[28,109011,99],{"class":34},[28,109013,108574],{"class":51375},[28,109015,14997],{"class":2040},[28,109017,39],{"class":34},[28,109019,108579],{"class":320},[28,109021,101165],{"class":2040},[28,109023,39],{"class":34},[28,109025,108764],{"class":320},[28,109027,108767],{"class":2040},[28,109029,39],{"class":34},[28,109031,108772],{"class":320},[28,109033,101203],{"class":34},[14,109035,109036,109037,109039,109040,109042,109043,109046,109047,109049],{},"定义一个相机。",[25,109038,79885],{}," 是相机名字。",[25,109041,104205],{}," 是相机在世界里的位置。",[25,109044,109045],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[25,109048,104205],{}," 来调视角。",[18,109051,109053],{"className":20,"code":109052,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[25,109054,109055],{"__ignoreMap":23},[28,109056,109057,109059,109061,109063,109065,109067,109069,109071,109073,109075,109077],{"class":30,"line":31},[28,109058,107629],{"class":34},[28,109060,39],{"class":38},[28,109062,107933],{"class":34},[28,109064,25059],{"class":5293},[28,109066,39],{"class":38},[28,109068,42418],{"class":45},[28,109070,12512],{"class":34},[28,109072,25055],{"class":5293},[28,109074,39],{"class":38},[28,109076,107948],{"class":45},[28,109078,227],{"class":34},[14,109080,109081,109082,101077,109084,109086],{},"创建离屏渲染器。",[25,109083,25059],{},[25,109085,25055],{}," 决定输出图片大小。",[18,109088,109089],{"className":20,"code":101735,"language":22,"meta":23,"style":23},[25,109090,109091,109107],{"__ignoreMap":23},[28,109092,109093,109095,109097,109099,109101,109103,109105],{"class":30,"line":31},[28,109094,3102],{"class":38},[28,109096,101560],{"class":34},[28,109098,26121],{"class":38},[28,109100,32519],{"class":45},[28,109102,221],{"class":34},[28,109104,525],{"class":45},[28,109106,30862],{"class":34},[28,109108,109109],{"class":30,"line":94},[28,109110,101758],{"class":34},[14,109112,109113],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[18,109115,109117],{"className":20,"code":109116,"language":22,"meta":23,"style":23},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[25,109118,109119],{"__ignoreMap":23},[28,109120,109121,109124,109126,109128,109130],{"class":30,"line":31},[28,109122,109123],{"class":34},"renderer.update_scene(data, ",[28,109125,108574],{"class":5293},[28,109127,39],{"class":38},[28,109129,108579],{"class":320},[28,109131,227],{"class":34},[14,109133,109134,109135,109137,109138,109141],{},"告诉 renderer：用当前 ",[25,109136,33477],{}," 的状态更新画面，并使用名为 ",[25,109139,109140],{},"fixed_camera"," 的相机视角。",[18,109143,109144],{"className":20,"code":108039,"language":22,"meta":23,"style":23},[25,109145,109146],{"__ignoreMap":23},[28,109147,109148,109150,109152],{"class":30,"line":31},[28,109149,107639],{"class":34},[28,109151,39],{"class":38},[28,109153,107644],{"class":34},[14,109155,109156,109157,109160],{},"真正渲染出图像。",[25,109158,109159],{},"image"," 是一个 NumPy 数组，不是文件。",[18,109162,109164],{"className":20,"code":109163,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(output_path)\n",[25,109165,109166],{"__ignoreMap":23},[28,109167,109168],{"class":30,"line":31},[28,109169,109163],{"class":34},[14,109171,109172,109173,28463],{},"把数组转换成图片，并保存到 ",[25,109174,109175],{},"render_output.png",[18,109177,109179],{"className":20,"code":109178,"language":22,"meta":23,"style":23},"renderer.close()\n",[25,109180,109181],{"__ignoreMap":23},[28,109182,109183],{"class":30,"line":31},[28,109184,109178],{"class":34},[14,109186,109187],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[159,109189,102375],{"id":102374},[14,109191,109192,109193,109195,109196,28463],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[25,109194,109175],{},"，并输出图像数组形状，例如 ",[25,109197,109198],{},"(480, 640, 3)",[14,109200,109201],{},"如果图片里看不到方块，先检查：",[171,109203,109204,109207,109210],{},[174,109205,109206],{},"方块是否掉到相机视野外。",[174,109208,109209],{},"camera 位置是否合理。",[174,109211,109212,109213,109216],{},"是否在 ",[25,109214,109215],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[159,109218,102407],{"id":102406},[14,109220,109221],{},"运行 viewer:",[18,109223,109225],{"className":23899,"code":109224,"language":23901,"meta":23,"style":23},"python ch5_viewer.py\n",[25,109226,109227],{"__ignoreMap":23},[28,109228,109229,109231],{"class":30,"line":31},[28,109230,22],{"class":2040},[28,109232,108355],{"class":320},[14,109234,109235],{},"运行 renderer:",[18,109237,109239],{"className":23899,"code":109238,"language":23901,"meta":23,"style":23},"python ch5_renderer.py\n",[25,109240,109241],{"__ignoreMap":23},[28,109242,109243,109245],{"class":30,"line":31},[28,109244,22],{"class":2040},[28,109246,108684],{"class":320},[14,109248,109249],{},"如果在服务器上运行:",[18,109251,109253],{"className":23899,"code":109252,"language":23901,"meta":23,"style":23},"MUJOCO_GL=egl python ch5_renderer.py\n",[25,109254,109255],{"__ignoreMap":23},[28,109256,109257,109259,109261,109263,109266],{"class":30,"line":31},[28,109258,107873],{"class":34},[28,109260,39],{"class":38},[28,109262,107863],{"class":320},[28,109264,109265],{"class":2040}," python",[28,109267,108684],{"class":320},[14,109269,107841],{},[18,109271,109273],{"className":23899,"code":109272,"language":23901,"meta":23,"style":23},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[25,109274,109275],{"__ignoreMap":23},[28,109276,109277,109279,109281,109283,109285],{"class":30,"line":31},[28,109278,107873],{"class":34},[28,109280,39],{"class":38},[28,109282,107867],{"class":320},[28,109284,109265],{"class":2040},[28,109286,108684],{"class":320},[14,109288,109289],{},"再做几个练习：",[171,109291,109292,109299,109302,109308],{},[174,109293,109294,109295,109298],{},"把 renderer 分辨率改成 ",[25,109296,109297],{},"height=240, width=320","，观察输出 shape。",[174,109300,109301],{},"把方块颜色改成蓝色，重新保存图片。",[174,109303,109304,109305,109307],{},"把相机 ",[25,109306,104205],{}," 改远一点，观察画面中物体是否变小。",[174,109309,109310,109311,102473,109314,109317],{},"把 viewer 示例中的 ",[25,109312,109313],{},"data.time \u003C 5.0",[25,109315,109316],{},"data.time \u003C 20.0","，观察更长时间。",[159,109319,102512],{"id":102511},[188,109321,109323],{"id":109322},"viewer-窗口打不开","viewer 窗口打不开",[14,109325,109326],{},"安装:",[18,109328,109330],{"className":23899,"code":109329,"language":23901,"meta":23,"style":23},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[25,109331,109332],{"__ignoreMap":23},[28,109333,109334,109336,109338,109340,109342,109344,109346,109348,109350,109352,109354],{"class":30,"line":31},[28,109335,24654],{"class":2040},[28,109337,26393],{"class":320},[28,109339,23911],{"class":320},[28,109341,26478],{"class":45},[28,109343,102565],{"class":320},[28,109345,100893],{"class":320},[28,109347,102570],{"class":320},[28,109349,100906],{"class":320},[28,109351,100912],{"class":320},[28,109353,100903],{"class":320},[28,109355,109356],{"class":320}," libXinerama\n",[188,109358,109360],{"id":109359},"glfwerror",[25,109361,109362],{},"GLFWError",[14,109364,109365],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[188,109367,109369],{"id":109368},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109371,109372,109373,82614,109375,109377],{},"尝试 ",[25,109374,101096],{},[25,109376,101099],{},"。可能存在版本差异。",[188,109379,109380],{"id":109380},"保存图片是黑的",[14,109382,102634],{},[171,109384,109385,109388,109391,109401],{},[174,109386,109387],{},"XML 里是否有 light。",[174,109389,109390],{},"相机是否对着模型。",[174,109392,109393,109394,109397,109398,28463],{},"是否先 ",[25,109395,109396],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[25,109399,109400],{},"renderer.render()",[174,109402,109403],{},"物体是否已经掉出视野。",[188,109405,109406],{"id":109406},"远程服务器没有显示器",[14,109408,109409],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[18,109411,109412],{"className":23899,"code":109252,"language":23901,"meta":23,"style":23},[25,109413,109414],{"__ignoreMap":23},[28,109415,109416,109418,109420,109422,109424],{"class":30,"line":31},[28,109417,107873],{"class":34},[28,109419,39],{"class":38},[28,109421,107863],{"class":320},[28,109423,109265],{"class":2040},[28,109425,108684],{"class":320},[14,109427,109428],{},"如果 EGL 不可用，再尝试：",[18,109430,109431],{"className":23899,"code":109272,"language":23901,"meta":23,"style":23},[25,109432,109433],{"__ignoreMap":23},[28,109434,109435,109437,109439,109441,109443],{"class":30,"line":31},[28,109436,107873],{"class":34},[28,109438,39],{"class":38},[28,109440,107867],{"class":320},[28,109442,109265],{"class":2040},[28,109444,108684],{"class":320},[159,109446,102666],{"id":102665},[14,109448,109449],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[171,109451,109452,109455,109458],{},[174,109453,109454],{},"先用 viewer 看模型和控制是否正常。",[174,109456,109457],{},"再用 renderer 保存图片或构造视觉观测。",[174,109459,109460],{},"最后把状态、动作、图像、奖励组织成训练数据。",[136,109462,109463],{},"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":23,"searchDepth":94,"depth":94,"links":109465},[109466,109467,109468,109473,109478,109479,109480,109487],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":109469},[109470,109471,109472],{"id":107970,"depth":109,"text":107971},{"id":108000,"depth":109,"text":108001},{"id":108035,"depth":109,"text":108036},{"id":101311,"depth":94,"text":101312,"children":109474},[109475,109476,109477],{"id":101631,"depth":109,"text":101631},{"id":108780,"depth":109,"text":108781},{"id":108958,"depth":109,"text":108959},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":109481},[109482,109483,109484,109485,109486],{"id":109322,"depth":109,"text":109323},{"id":109359,"depth":109,"text":109362},{"id":109368,"depth":109,"text":109369},{"id":109380,"depth":109,"text":109380},{"id":109406,"depth":109,"text":109406},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107578,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109494,"title":109495,"body":109496,"description":23,"extension":142,"meta":111407,"navigation":144,"path":111408,"seo":111409,"stem":111410,"__hash__":111411},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109497,"toc":111383},[109498,109501,109503,109506,109508,109527,109530,109536,109539,109541,109543,109567,109569,109583,109585,109626,109628,109639,109641,109644,109650,109653,109687,109690,109722,109725,109757,109761,109764,109804,109807,109813,109816,109822,109826,109829,109835,109838,109842,109845,109885,109887,109900,109903,109905,110487,110489,110501,110504,110515,110517,110520,110539,110551,110554,110575,110578,110581,110624,110627,110630,110650,110657,110659,110677,110692,110695,110701,110704,110710,110727,110734,110765,110776,110810,110821,110838,110847,110855,110860,110874,110877,110898,110904,110918,110923,110953,110963,110988,110996,111019,111022,111038,111041,111049,111055,111077,111090,111111,111120,111159,111170,111172,111175,111181,111184,111187,111193,111196,111216,111219,111221,111260,111262,111265,111273,111276,111279,111306,111309,111319,111325,111328,111334,111336,111342,111346,111349,111351,111354,111378,111381],[10,109499,109495],{"id":109500},"_6控制任务cartpole",[159,109502,100706],{"id":100705},[14,109504,109505],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109507,104390],{},[171,109509,109510,109513,109515,109518,109521,109524],{},[174,109511,109512],{},"slide joint",[174,109514,106243],{},[174,109516,109517],{},"cart force actuator",[174,109519,109520],{},"状态观测",[174,109522,109523],{},"简单控制循环",[174,109525,109526],{},"reward 设计雏形",[14,109528,109529],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[18,109531,109534],{"className":109532,"code":109533,"language":5264,"meta":23},[5262],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[25,109535,109533],{"__ignoreMap":23},[14,109537,109538],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[159,109540,100829],{"id":100828},[14,109542,100832],{},[18,109544,109545],{"className":23899,"code":104447,"language":23901,"meta":23,"style":23},[25,109546,109547],{"__ignoreMap":23},[28,109548,109549,109551,109553,109555,109557,109559,109561,109563,109565],{"class":30,"line":31},[28,109550,24654],{"class":2040},[28,109552,26393],{"class":320},[28,109554,23911],{"class":320},[28,109556,26478],{"class":45},[28,109558,104462],{"class":320},[28,109560,100857],{"class":320},[28,109562,102560],{"class":320},[28,109564,100873],{"class":320},[28,109566,104471],{"class":320},[14,109568,102878],{},[18,109570,109571],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},[25,109572,109573],{"__ignoreMap":23},[28,109574,109575,109577,109579,109581],{"class":30,"line":31},[28,109576,23908],{"class":2040},[28,109578,23911],{"class":320},[28,109580,100989],{"class":320},[28,109582,100992],{"class":320},[14,109584,102895],{},[18,109586,109588],{"className":23899,"code":109587,"language":23901,"meta":23,"style":23},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[25,109589,109590,109607,109616],{"__ignoreMap":23},[28,109591,109592,109594,109596,109598,109601,109603,109605],{"class":30,"line":31},[28,109593,30408],{"class":2040},[28,109595,29254],{"class":320},[28,109597,25193],{"class":45},[28,109599,109600],{"class":320}," mujoco-cartpole",[28,109602,101034],{"class":320},[28,109604,101037],{"class":45},[28,109606,101040],{"class":45},[28,109608,109609,109611,109613],{"class":30,"line":94},[28,109610,30408],{"class":2040},[28,109612,101047],{"class":320},[28,109614,109615],{"class":320}," mujoco-cartpole\n",[28,109617,109618,109620,109622,109624],{"class":30,"line":109},[28,109619,23908],{"class":2040},[28,109621,23911],{"class":320},[28,109623,100989],{"class":320},[28,109625,100992],{"class":320},[14,109627,101063],{},[171,109629,109630,109633,109636],{},[174,109631,109632],{},"本章不依赖 Gymnasium。",[174,109634,109635],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[174,109637,109638],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[159,109640,101104],{"id":101103},[14,109642,109643],{},"Cartpole 的模型结构:",[18,109645,109648],{"className":109646,"code":109647,"language":5264,"meta":23},[5262],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[25,109649,109647],{"__ignoreMap":23},[14,109651,109652],{},"小车通过 slide joint 左右移动:",[18,109654,109656],{"className":53142,"code":109655,"language":53144,"meta":23,"style":23},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[25,109657,109658],{"__ignoreMap":23},[28,109659,109660,109662,109664,109666,109668,109671,109673,109675,109678,109680,109682,109685],{"class":30,"line":31},[28,109661,99],{"class":34},[28,109663,103015],{"class":51375},[28,109665,14997],{"class":2040},[28,109667,39],{"class":34},[28,109669,109670],{"class":320},"\"cart_x\"",[28,109672,53899],{"class":2040},[28,109674,39],{"class":34},[28,109676,109677],{"class":320},"\"slide\"",[28,109679,106087],{"class":2040},[28,109681,39],{"class":34},[28,109683,109684],{"class":320},"\"1 0 0\"",[28,109686,101203],{"class":34},[14,109688,109689],{},"杆子通过 hinge joint 旋转:",[18,109691,109693],{"className":53142,"code":109692,"language":53144,"meta":23,"style":23},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,109694,109695],{"__ignoreMap":23},[28,109696,109697,109699,109701,109703,109705,109708,109710,109712,109714,109716,109718,109720],{"class":30,"line":31},[28,109698,99],{"class":34},[28,109700,103015],{"class":51375},[28,109702,14997],{"class":2040},[28,109704,39],{"class":34},[28,109706,109707],{"class":320},"\"pole_hinge\"",[28,109709,53899],{"class":2040},[28,109711,39],{"class":34},[28,109713,106078],{"class":320},[28,109715,106087],{"class":2040},[28,109717,39],{"class":34},[28,109719,106092],{"class":320},[28,109721,101203],{"class":34},[14,109723,109724],{},"控制力作用在小车 slide joint 上:",[18,109726,109728],{"className":53142,"code":109727,"language":53144,"meta":23,"style":23},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[25,109729,109730],{"__ignoreMap":23},[28,109731,109732,109734,109736,109738,109740,109743,109745,109747,109749,109751,109753,109755],{"class":30,"line":31},[28,109733,99],{"class":34},[28,109735,106133],{"class":51375},[28,109737,14997],{"class":2040},[28,109739,39],{"class":34},[28,109741,109742],{"class":320},"\"cart_motor\"",[28,109744,106143],{"class":2040},[28,109746,39],{"class":34},[28,109748,109670],{"class":320},[28,109750,106150],{"class":2040},[28,109752,39],{"class":34},[28,109754,54391],{"class":320},[28,109756,101203],{"class":34},[188,109758,109760],{"id":109759},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109762,109763],{},"这个简化模型有两个关节：",[353,109765,109766,109777],{},[356,109767,109768],{},[359,109769,109770,109772,109774],{},[362,109771,102818],{"align":23813},[362,109773,23814],{"align":23813},[362,109775,109776],{"align":23813},"对应状态",[400,109778,109779,109792],{},[359,109780,109781,109786,109789],{},[405,109782,109783],{"align":23813},[25,109784,109785],{},"cart_x",[405,109787,109788],{"align":23813},"slide",[405,109790,109791],{"align":23813},"小车 x 位置",[359,109793,109794,109799,109801],{},[405,109795,109796],{"align":23813},[25,109797,109798],{},"pole_hinge",[405,109800,105899],{"align":23813},[405,109802,109803],{"align":23813},"杆子角度",[14,109805,109806],{},"所以：",[18,109808,109811],{"className":109809,"code":109810,"language":5264,"meta":23},[5262],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[25,109812,109810],{"__ignoreMap":23},[14,109814,109815],{},"把它们拼起来就是观测：",[18,109817,109820],{"className":109818,"code":109819,"language":5264,"meta":23},[5262],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,109821,109819],{"__ignoreMap":23},[188,109823,109825],{"id":109824},"action-是什么","action 是什么",[14,109827,109828],{},"本章只有一个 actuator：",[18,109830,109833],{"className":109831,"code":109832,"language":5264,"meta":23},[5262],"data.ctrl[0] = action\n",[25,109834,109832],{"__ignoreMap":23},[14,109836,109837],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[188,109839,109841],{"id":109840},"reward-是什么","reward 是什么",[14,109843,109844],{},"奖励函数：",[18,109846,109848],{"className":20,"code":109847,"language":22,"meta":23,"style":23},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[25,109849,109850],{"__ignoreMap":23},[28,109851,109852,109854,109857,109859,109861,109863,109866,109868,109871,109873,109875,109877,109880,109882],{"class":30,"line":31},[28,109853,17123],{"class":38},[28,109855,109856],{"class":45}," float",[28,109858,221],{"class":34},[28,109860,102462],{"class":45},[28,109862,52346],{"class":38},[28,109864,109865],{"class":45}," 0.1",[28,109867,6595],{"class":38},[28,109869,109870],{"class":34}," cart_x ",[28,109872,668],{"class":38},[28,109874,109870],{"class":34},[28,109876,742],{"class":38},[28,109878,109879],{"class":34}," pole_angle ",[28,109881,668],{"class":38},[28,109883,109884],{"class":34}," pole_angle)\n",[14,109886,106285],{},[171,109888,109889,109894,109897],{},[174,109890,109891,109892,28463],{},"基础奖励是 ",[25,109893,102462],{},[174,109895,109896],{},"小车离中心越远，扣分越多。",[174,109898,109899],{},"杆子角度越大，扣分越多。",[14,109901,109902],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[159,109904,101312],{"id":101311},[18,109906,109908],{"className":20,"code":109907,"language":22,"meta":23,"style":23},"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",[25,109909,109910,109916,109926,109930,109934,109942,109947,109951,109955,109959,109964,109968,109973,109978,109983,109987,109992,109997,110002,110006,110010,110014,110018,110022,110027,110031,110035,110039,110043,110047,110057,110064,110068,110072,110086,110100,110113,110143,110147,110151,110163,110175,110183,110187,110200,110204,110208,110217,110221,110237,110247,110260,110273,110277,110300,110318,110322,110334,110338,110342,110352,110362,110366,110382,110423,110427,110447,110463,110467,110471,110483],{"__ignoreMap":23},[28,109911,109912,109914],{"class":30,"line":31},[28,109913,30468],{"class":38},[28,109915,101360],{"class":34},[28,109917,109918,109920,109922,109924],{"class":30,"line":94},[28,109919,30468],{"class":38},[28,109921,31456],{"class":34},[28,109923,31459],{"class":38},[28,109925,31462],{"class":34},[28,109927,109928],{"class":30,"line":109},[28,109929,2477],{"emptyLinePlaceholder":144},[28,109931,109932],{"class":30,"line":125},[28,109933,2477],{"emptyLinePlaceholder":144},[28,109935,109936,109938,109940],{"class":30,"line":131},[28,109937,101373],{"class":45},[28,109939,13641],{"class":38},[28,109941,101378],{"class":320},[28,109943,109944],{"class":30,"line":1291},[28,109945,109946],{"class":320},"\u003Cmujoco model=\"cartpole\">\n",[28,109948,109949],{"class":30,"line":1297},[28,109950,101388],{"class":320},[28,109952,109953],{"class":30,"line":1388},[28,109954,2477],{"emptyLinePlaceholder":144},[28,109956,109957],{"class":30,"line":1394},[28,109958,101397],{"class":320},[28,109960,109961],{"class":30,"line":1406},[28,109962,109963],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,109965,109966],{"class":30,"line":1689},[28,109967,2477],{"emptyLinePlaceholder":144},[28,109969,109970],{"class":30,"line":1694},[28,109971,109972],{"class":320},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[28,109974,109975],{"class":30,"line":1700},[28,109976,109977],{"class":320},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[28,109979,109980],{"class":30,"line":1705},[28,109981,109982],{"class":320},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[28,109984,109985],{"class":30,"line":1719},[28,109986,2477],{"emptyLinePlaceholder":144},[28,109988,109989],{"class":30,"line":1724},[28,109990,109991],{"class":320},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[28,109993,109994],{"class":30,"line":1730},[28,109995,109996],{"class":320},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[28,109998,109999],{"class":30,"line":1751},[28,110000,110001],{"class":320},"        \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",[28,110003,110004],{"class":30,"line":1756},[28,110005,106497],{"class":320},[28,110007,110008],{"class":30,"line":1770},[28,110009,101426],{"class":320},[28,110011,110012],{"class":30,"line":1775},[28,110013,101431],{"class":320},[28,110015,110016],{"class":30,"line":1804},[28,110017,2477],{"emptyLinePlaceholder":144},[28,110019,110020],{"class":30,"line":1809},[28,110021,106514],{"class":320},[28,110023,110024],{"class":30,"line":1826},[28,110025,110026],{"class":320},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,110028,110029],{"class":30,"line":1831},[28,110030,106524],{"class":320},[28,110032,110033],{"class":30,"line":1836},[28,110034,101436],{"class":320},[28,110036,110037],{"class":30,"line":1841},[28,110038,95757],{"class":320},[28,110040,110041],{"class":30,"line":1855},[28,110042,2477],{"emptyLinePlaceholder":144},[28,110044,110045],{"class":30,"line":1860},[28,110046,2477],{"emptyLinePlaceholder":144},[28,110048,110049,110051,110054],{"class":30,"line":2654},[28,110050,32023],{"class":38},[28,110052,110053],{"class":2040}," get_observation",[28,110055,110056],{"class":34},"(data: mujoco.MjData) -> np.ndarray:\n",[28,110058,110059,110061],{"class":30,"line":2668},[28,110060,4167],{"class":38},[28,110062,110063],{"class":34}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[28,110065,110066],{"class":30,"line":2676},[28,110067,2477],{"emptyLinePlaceholder":144},[28,110069,110070],{"class":30,"line":2681},[28,110071,2477],{"emptyLinePlaceholder":144},[28,110073,110074,110076,110079,110082,110084],{"class":30,"line":2687},[28,110075,32023],{"class":38},[28,110077,110078],{"class":2040}," compute_reward",[28,110080,110081],{"class":34},"(obs: np.ndarray) -> ",[28,110083,260],{"class":45},[28,110085,3816],{"class":34},[28,110087,110088,110091,110093,110096,110098],{"class":30,"line":2693},[28,110089,110090],{"class":34},"    cart_x ",[28,110092,39],{"class":38},[28,110094,110095],{"class":34}," obs[",[28,110097,407],{"class":45},[28,110099,33322],{"class":34},[28,110101,110102,110105,110107,110109,110111],{"class":30,"line":2698},[28,110103,110104],{"class":34},"    pole_angle ",[28,110106,39],{"class":38},[28,110108,110095],{"class":34},[28,110110,46],{"class":45},[28,110112,33322],{"class":34},[28,110114,110115,110117,110119,110121,110123,110125,110127,110129,110131,110133,110135,110137,110139,110141],{"class":30,"line":8025},[28,110116,4167],{"class":38},[28,110118,109856],{"class":45},[28,110120,221],{"class":34},[28,110122,102462],{"class":45},[28,110124,52346],{"class":38},[28,110126,109865],{"class":45},[28,110128,6595],{"class":38},[28,110130,109870],{"class":34},[28,110132,668],{"class":38},[28,110134,109870],{"class":34},[28,110136,742],{"class":38},[28,110138,109879],{"class":34},[28,110140,668],{"class":38},[28,110142,109884],{"class":34},[28,110144,110145],{"class":30,"line":8049},[28,110146,2477],{"emptyLinePlaceholder":144},[28,110148,110149],{"class":30,"line":8054},[28,110150,2477],{"emptyLinePlaceholder":144},[28,110152,110153,110155,110157,110159,110161],{"class":30,"line":8060},[28,110154,32023],{"class":38},[28,110156,2050],{"class":2040},[28,110158,101457],{"class":34},[28,110160,95745],{"class":45},[28,110162,3816],{"class":34},[28,110164,110165,110167,110169,110171,110173],{"class":30,"line":8087},[28,110166,101466],{"class":34},[28,110168,39],{"class":38},[28,110170,101471],{"class":34},[28,110172,101373],{"class":45},[28,110174,227],{"class":34},[28,110176,110177,110179,110181],{"class":30,"line":8092},[28,110178,101480],{"class":34},[28,110180,39],{"class":38},[28,110182,101485],{"class":34},[28,110184,110185],{"class":30,"line":8098},[28,110186,2477],{"emptyLinePlaceholder":144},[28,110188,110189,110191,110193,110195,110197],{"class":30,"line":8110},[28,110190,105128],{"class":34},[28,110192,46],{"class":45},[28,110194,4520],{"class":34},[28,110196,39],{"class":38},[28,110198,110199],{"class":45}," 0.1\n",[28,110201,110202],{"class":30,"line":8122},[28,110203,105141],{"class":34},[28,110205,110206],{"class":30,"line":8134},[28,110207,2477],{"emptyLinePlaceholder":144},[28,110209,110210,110213,110215],{"class":30,"line":9793},[28,110211,110212],{"class":34},"    total_reward ",[28,110214,39],{"class":38},[28,110216,104820],{"class":45},[28,110218,110219],{"class":30,"line":9818},[28,110220,2477],{"emptyLinePlaceholder":144},[28,110222,110223,110225,110227,110229,110231,110233,110235],{"class":30,"line":9841},[28,110224,3278],{"class":38},[28,110226,31692],{"class":34},[28,110228,26121],{"class":38},[28,110230,32519],{"class":45},[28,110232,221],{"class":34},[28,110234,6487],{"class":45},[28,110236,30862],{"class":34},[28,110238,110239,110242,110244],{"class":30,"line":9865},[28,110240,110241],{"class":34},"        obs ",[28,110243,39],{"class":38},[28,110245,110246],{"class":34}," get_observation(data)\n",[28,110248,110249,110252,110254,110256,110258],{"class":30,"line":9870},[28,110250,110251],{"class":34},"        pole_angle ",[28,110253,39],{"class":38},[28,110255,110095],{"class":34},[28,110257,46],{"class":45},[28,110259,33322],{"class":34},[28,110261,110262,110265,110267,110269,110271],{"class":30,"line":9875},[28,110263,110264],{"class":34},"        pole_angular_velocity ",[28,110266,39],{"class":38},[28,110268,110095],{"class":34},[28,110270,57],{"class":45},[28,110272,33322],{"class":34},[28,110274,110275],{"class":30,"line":9880},[28,110276,2477],{"emptyLinePlaceholder":144},[28,110278,110279,110282,110284,110287,110289,110291,110293,110295,110297],{"class":30,"line":9889},[28,110280,110281],{"class":34},"        action ",[28,110283,39],{"class":38},[28,110285,110286],{"class":45}," 2.0",[28,110288,6595],{"class":38},[28,110290,109879],{"class":34},[28,110292,693],{"class":38},[28,110294,61942],{"class":45},[28,110296,6595],{"class":38},[28,110298,110299],{"class":34}," pole_angular_velocity\n",[28,110301,110302,110304,110306,110308,110310,110312,110314,110316],{"class":30,"line":9894},[28,110303,110281],{"class":34},[28,110305,39],{"class":38},[28,110307,107506],{"class":34},[28,110309,742],{"class":38},[28,110311,102462],{"class":45},[28,110313,12512],{"class":34},[28,110315,102462],{"class":45},[28,110317,227],{"class":34},[28,110319,110320],{"class":30,"line":9900},[28,110321,2477],{"emptyLinePlaceholder":144},[28,110323,110324,110326,110328,110330,110332],{"class":30,"line":9921},[28,110325,106676],{"class":34},[28,110327,407],{"class":45},[28,110329,4520],{"class":34},[28,110331,39],{"class":38},[28,110333,107529],{"class":34},[28,110335,110336],{"class":30,"line":9927},[28,110337,101575],{"class":34},[28,110339,110340],{"class":30,"line":9941},[28,110341,2477],{"emptyLinePlaceholder":144},[28,110343,110344,110347,110349],{"class":30,"line":9947},[28,110345,110346],{"class":34},"        reward ",[28,110348,39],{"class":38},[28,110350,110351],{"class":34}," compute_reward(get_observation(data))\n",[28,110353,110354,110357,110359],{"class":30,"line":9974},[28,110355,110356],{"class":34},"        total_reward ",[28,110358,9554],{"class":38},[28,110360,110361],{"class":34}," reward\n",[28,110363,110364],{"class":30,"line":9983},[28,110365,2477],{"emptyLinePlaceholder":144},[28,110367,110368,110370,110372,110374,110376,110378,110380],{"class":30,"line":9989},[28,110369,2574],{"class":38},[28,110371,31692],{"class":34},[28,110373,542],{"class":38},[28,110375,5831],{"class":45},[28,110377,101618],{"class":38},[28,110379,4170],{"class":45},[28,110381,3816],{"class":34},[28,110383,110384,110386,110388,110391,110394,110397,110400,110402,110405,110408,110410,110412,110414,110416,110419,110421],{"class":30,"line":9997},[28,110385,34726],{"class":45},[28,110387,221],{"class":34},[28,110389,110390],{"class":320},"\"step:\"",[28,110392,110393],{"class":34},", step, ",[28,110395,110396],{"class":320},"\"obs:\"",[28,110398,110399],{"class":34},", np.round(obs, ",[28,110401,57],{"class":45},[28,110403,110404],{"class":34},"), ",[28,110406,110407],{"class":320},"\"action:\"",[28,110409,12512],{"class":34},[28,110411,32094],{"class":45},[28,110413,221],{"class":34},[28,110415,260],{"class":45},[28,110417,110418],{"class":34},"(action), ",[28,110420,57],{"class":45},[28,110422,30573],{"class":34},[28,110424,110425],{"class":30,"line":10002},[28,110426,2477],{"emptyLinePlaceholder":144},[28,110428,110429,110431,110433,110436,110438,110440,110443,110445],{"class":30,"line":16681},[28,110430,31375],{"class":45},[28,110432,221],{"class":34},[28,110434,110435],{"class":320},"\"total_reward:\"",[28,110437,12512],{"class":34},[28,110439,32094],{"class":45},[28,110441,110442],{"class":34},"(total_reward, ",[28,110444,57],{"class":45},[28,110446,30573],{"class":34},[28,110448,110449,110451,110453,110456,110459,110461],{"class":30,"line":16687},[28,110450,31375],{"class":45},[28,110452,221],{"class":34},[28,110454,110455],{"class":320},"\"final obs:\"",[28,110457,110458],{"class":34},", np.round(get_observation(data), ",[28,110460,57],{"class":45},[28,110462,30573],{"class":34},[28,110464,110465],{"class":30,"line":16710},[28,110466,2477],{"emptyLinePlaceholder":144},[28,110468,110469],{"class":30,"line":16716},[28,110470,2477],{"emptyLinePlaceholder":144},[28,110472,110473,110475,110477,110479,110481],{"class":30,"line":16739},[28,110474,1608],{"class":38},[28,110476,31296],{"class":45},[28,110478,101618],{"class":38},[28,110480,101621],{"class":320},[28,110482,3816],{"class":34},[28,110484,110485],{"class":30,"line":16753},[28,110486,101628],{"class":34},[14,110488,103629],{},[18,110490,110492],{"className":23899,"code":110491,"language":23901,"meta":23,"style":23},"touch ch6_cartpole.py\n",[25,110493,110494],{"__ignoreMap":23},[28,110495,110496,110498],{"class":30,"line":31},[28,110497,101342],{"class":2040},[28,110499,110500],{"class":320}," ch6_cartpole.py\n",[14,110502,110503],{},"运行：",[18,110505,110507],{"className":23899,"code":110506,"language":23901,"meta":23,"style":23},"python ch6_cartpole.py\n",[25,110508,110509],{"__ignoreMap":23},[28,110510,110511,110513],{"class":30,"line":31},[28,110512,22],{"class":2040},[28,110514,110500],{"class":320},[188,110516,101631],{"id":101631},[14,110518,110519],{},"构造观测：",[18,110521,110523],{"className":20,"code":110522,"language":22,"meta":23,"style":23},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[25,110524,110525,110533],{"__ignoreMap":23},[28,110526,110527,110529,110531],{"class":30,"line":31},[28,110528,32023],{"class":38},[28,110530,110053],{"class":2040},[28,110532,110056],{"class":34},[28,110534,110535,110537],{"class":30,"line":94},[28,110536,4167],{"class":38},[28,110538,110063],{"class":34},[14,110540,110541,110544,110545,110547,110548,110550],{},[25,110542,110543],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[25,110546,104089],{}," 2 维，",[25,110549,104419],{}," 2 维，所以 obs 是 4 维。",[14,110552,110553],{},"设置初始角度：",[18,110555,110557],{"className":20,"code":110556,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[25,110558,110559,110571],{"__ignoreMap":23},[28,110560,110561,110563,110565,110567,110569],{"class":30,"line":31},[28,110562,104758],{"class":34},[28,110564,46],{"class":45},[28,110566,4520],{"class":34},[28,110568,39],{"class":38},[28,110570,110199],{"class":45},[28,110572,110573],{"class":30,"line":94},[28,110574,104602],{"class":34},[14,110576,110577],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110579,110580],{},"简单反馈控制：",[18,110582,110584],{"className":20,"code":110583,"language":22,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[25,110585,110586,110606],{"__ignoreMap":23},[28,110587,110588,110590,110592,110594,110596,110598,110600,110602,110604],{"class":30,"line":31},[28,110589,107501],{"class":34},[28,110591,39],{"class":38},[28,110593,110286],{"class":45},[28,110595,6595],{"class":38},[28,110597,109879],{"class":34},[28,110599,693],{"class":38},[28,110601,61942],{"class":45},[28,110603,6595],{"class":38},[28,110605,110299],{"class":34},[28,110607,110608,110610,110612,110614,110616,110618,110620,110622],{"class":30,"line":94},[28,110609,107501],{"class":34},[28,110611,39],{"class":38},[28,110613,107506],{"class":34},[28,110615,742],{"class":38},[28,110617,102462],{"class":45},[28,110619,12512],{"class":34},[28,110621,102462],{"class":45},[28,110623,227],{"class":34},[14,110625,110626],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110628,110629],{},"限制动作：",[18,110631,110633],{"className":20,"code":110632,"language":22,"meta":23,"style":23},"np.clip(action, -1.0, 1.0)\n",[25,110634,110635],{"__ignoreMap":23},[28,110636,110637,110640,110642,110644,110646,110648],{"class":30,"line":31},[28,110638,110639],{"class":34},"np.clip(action, ",[28,110641,742],{"class":38},[28,110643,102462],{"class":45},[28,110645,12512],{"class":34},[28,110647,102462],{"class":45},[28,110649,227],{"class":34},[14,110651,110652,110653,110656],{},"因为 XML 里 ",[25,110654,110655],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[188,110658,101767],{"id":101767},[18,110660,110661],{"className":20,"code":110522,"language":22,"meta":23,"style":23},[25,110662,110663,110671],{"__ignoreMap":23},[28,110664,110665,110667,110669],{"class":30,"line":31},[28,110666,32023],{"class":38},[28,110668,110053],{"class":2040},[28,110670,110056],{"class":34},[28,110672,110673,110675],{"class":30,"line":94},[28,110674,4167],{"class":38},[28,110676,110063],{"class":34},[14,110678,110679,110680,110683,110684,110687,110688,110691],{},"这段定义了一个函数，用来获取当前观测。",[25,110681,110682],{},"data.qpos.copy()"," 是位置数组副本，",[25,110685,110686],{},"data.qvel.copy()"," 是速度数组副本。",[25,110689,110690],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110693,110694],{},"在本章模型里：",[18,110696,110699],{"className":110697,"code":110698,"language":5264,"meta":23},[5262],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[25,110700,110698],{"__ignoreMap":23},[14,110702,110703],{},"所以返回的 obs 是：",[18,110705,110708],{"className":110706,"code":110707,"language":5264,"meta":23},[5262],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[25,110709,110707],{"__ignoreMap":23},[18,110711,110713],{"className":20,"code":110712,"language":22,"meta":23,"style":23},"def compute_reward(obs: np.ndarray) -> float:\n",[25,110714,110715],{"__ignoreMap":23},[28,110716,110717,110719,110721,110723,110725],{"class":30,"line":31},[28,110718,32023],{"class":38},[28,110720,110078],{"class":2040},[28,110722,110081],{"class":34},[28,110724,260],{"class":45},[28,110726,3816],{"class":34},[14,110728,110729,110730,110733],{},"这行定义奖励函数。输入是观测 ",[25,110731,110732],{},"obs","，输出是一个浮点数奖励。",[18,110735,110737],{"className":20,"code":110736,"language":22,"meta":23,"style":23},"cart_x = obs[0]\npole_angle = obs[1]\n",[25,110738,110739,110752],{"__ignoreMap":23},[28,110740,110741,110744,110746,110748,110750],{"class":30,"line":31},[28,110742,110743],{"class":34},"cart_x ",[28,110745,39],{"class":38},[28,110747,110095],{"class":34},[28,110749,407],{"class":45},[28,110751,33322],{"class":34},[28,110753,110754,110757,110759,110761,110763],{"class":30,"line":94},[28,110755,110756],{"class":34},"pole_angle ",[28,110758,39],{"class":38},[28,110760,110095],{"class":34},[28,110762,46],{"class":45},[28,110764,33322],{"class":34},[14,110766,110767,110768,110771,110772,110775],{},"数组索引从 0 开始。",[25,110769,110770],{},"obs[0]"," 是第一个元素，也就是小车位置。",[25,110773,110774],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[18,110777,110778],{"className":20,"code":109847,"language":22,"meta":23,"style":23},[25,110779,110780],{"__ignoreMap":23},[28,110781,110782,110784,110786,110788,110790,110792,110794,110796,110798,110800,110802,110804,110806,110808],{"class":30,"line":31},[28,110783,17123],{"class":38},[28,110785,109856],{"class":45},[28,110787,221],{"class":34},[28,110789,102462],{"class":45},[28,110791,52346],{"class":38},[28,110793,109865],{"class":45},[28,110795,6595],{"class":38},[28,110797,109870],{"class":34},[28,110799,668],{"class":38},[28,110801,109870],{"class":34},[28,110803,742],{"class":38},[28,110805,109879],{"class":34},[28,110807,668],{"class":38},[28,110809,109884],{"class":34},[14,110811,110812,110813,110816,110817,110820],{},"这行计算奖励。",[25,110814,110815],{},"cart_x * cart_x"," 是小车位置的平方，",[25,110818,110819],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[18,110822,110824],{"className":20,"code":110823,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\n",[25,110825,110826],{"__ignoreMap":23},[28,110827,110828,110830,110832,110834,110836],{"class":30,"line":31},[28,110829,104758],{"class":34},[28,110831,46],{"class":45},[28,110833,4520],{"class":34},[28,110835,39],{"class":38},[28,110837,110199],{"class":45},[14,110839,110840,110841,110843,110844,110846],{},"手动设置杆子的初始角度。因为 ",[25,110842,105515],{}," 是小车位置，",[25,110845,105518],{}," 是杆子角度，所以这里改的是杆子。",[18,110848,110849],{"className":20,"code":104602,"language":22,"meta":23,"style":23},[25,110850,110851],{"__ignoreMap":23},[28,110852,110853],{"class":30,"line":31},[28,110854,104602],{"class":34},[14,110856,105561,110857,110859],{},[25,110858,104089],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[18,110861,110863],{"className":20,"code":110862,"language":22,"meta":23,"style":23},"total_reward = 0.0\n",[25,110864,110865],{"__ignoreMap":23},[28,110866,110867,110870,110872],{"class":30,"line":31},[28,110868,110869],{"class":34},"total_reward ",[28,110871,39],{"class":38},[28,110873,104820],{"class":45},[14,110875,110876],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[18,110878,110880],{"className":20,"code":110879,"language":22,"meta":23,"style":23},"for step in range(1000):\n",[25,110881,110882],{"__ignoreMap":23},[28,110883,110884,110886,110888,110890,110892,110894,110896],{"class":30,"line":31},[28,110885,3102],{"class":38},[28,110887,31692],{"class":34},[28,110889,26121],{"class":38},[28,110891,32519],{"class":45},[28,110893,221],{"class":34},[28,110895,6487],{"class":45},[28,110897,30862],{"class":34},[14,110899,110900,110901,110903],{},"循环 1000 步。",[25,110902,107193],{}," 是当前步数，从 0 到 999。",[18,110905,110907],{"className":20,"code":110906,"language":22,"meta":23,"style":23},"obs = get_observation(data)\n",[25,110908,110909],{"__ignoreMap":23},[28,110910,110911,110914,110916],{"class":30,"line":31},[28,110912,110913],{"class":34},"obs ",[28,110915,39],{"class":38},[28,110917,110246],{"class":34},[14,110919,110920,110921,28463],{},"读取当前状态，保存到 ",[25,110922,110732],{},[18,110924,110926],{"className":20,"code":110925,"language":22,"meta":23,"style":23},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[25,110927,110928,110940],{"__ignoreMap":23},[28,110929,110930,110932,110934,110936,110938],{"class":30,"line":31},[28,110931,110756],{"class":34},[28,110933,39],{"class":38},[28,110935,110095],{"class":34},[28,110937,46],{"class":45},[28,110939,33322],{"class":34},[28,110941,110942,110945,110947,110949,110951],{"class":30,"line":94},[28,110943,110944],{"class":34},"pole_angular_velocity ",[28,110946,39],{"class":38},[28,110948,110095],{"class":34},[28,110950,57],{"class":45},[28,110952,33322],{"class":34},[14,110954,110955,110956,110959,110960,28463],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[25,110957,110958],{},"obs[3]","？因为 obs 的顺序是 ",[25,110961,110962],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[18,110964,110966],{"className":20,"code":110965,"language":22,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[25,110967,110968],{"__ignoreMap":23},[28,110969,110970,110972,110974,110976,110978,110980,110982,110984,110986],{"class":30,"line":31},[28,110971,107501],{"class":34},[28,110973,39],{"class":38},[28,110975,110286],{"class":45},[28,110977,6595],{"class":38},[28,110979,109879],{"class":34},[28,110981,693],{"class":38},[28,110983,61942],{"class":45},[28,110985,6595],{"class":38},[28,110987,110299],{"class":34},[14,110989,110990,110991,101077,110993,110995],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[25,110992,105319],{},[25,110994,35405],{}," 是人为设置的系数，不是固定公式。",[18,110997,110999],{"className":20,"code":110998,"language":22,"meta":23,"style":23},"action = np.clip(action, -1.0, 1.0)\n",[25,111000,111001],{"__ignoreMap":23},[28,111002,111003,111005,111007,111009,111011,111013,111015,111017],{"class":30,"line":31},[28,111004,107501],{"class":34},[28,111006,39],{"class":38},[28,111008,107506],{"class":34},[28,111010,742],{"class":38},[28,111012,102462],{"class":45},[28,111014,12512],{"class":34},[28,111016,102462],{"class":45},[28,111018,227],{"class":34},[14,111020,111021],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[18,111023,111024],{"className":20,"code":109832,"language":22,"meta":23,"style":23},[25,111025,111026],{"__ignoreMap":23},[28,111027,111028,111030,111032,111034,111036],{"class":30,"line":31},[28,111029,105930],{"class":34},[28,111031,407],{"class":45},[28,111033,4520],{"class":34},[28,111035,39],{"class":38},[28,111037,107529],{"class":34},[14,111039,111040],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[18,111042,111043],{"className":20,"code":104564,"language":22,"meta":23,"style":23},[25,111044,111045],{"__ignoreMap":23},[28,111046,111047],{"class":30,"line":31},[28,111048,104564],{"class":34},[14,111050,111051,111052,111054],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[25,111053,106185],{}," 计算小车和杆子的下一刻状态。",[18,111056,111058],{"className":20,"code":111057,"language":22,"meta":23,"style":23},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[25,111059,111060,111069],{"__ignoreMap":23},[28,111061,111062,111065,111067],{"class":30,"line":31},[28,111063,111064],{"class":34},"reward ",[28,111066,39],{"class":38},[28,111068,110351],{"class":34},[28,111070,111071,111073,111075],{"class":30,"line":94},[28,111072,110869],{"class":34},[28,111074,9554],{"class":38},[28,111076,110361],{"class":34},[14,111078,111079,111080,111082,111083,111086,111087,28463],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[25,111081,9554],{}," 是简写，",[25,111084,111085],{},"total_reward += reward"," 等价于 ",[25,111088,111089],{},"total_reward = total_reward + reward",[18,111091,111093],{"className":20,"code":111092,"language":22,"meta":23,"style":23},"if step % 100 == 0:\n",[25,111094,111095],{"__ignoreMap":23},[28,111096,111097,111099,111101,111103,111105,111107,111109],{"class":30,"line":31},[28,111098,1608],{"class":38},[28,111100,31692],{"class":34},[28,111102,542],{"class":38},[28,111104,5831],{"class":45},[28,111106,101618],{"class":38},[28,111108,4170],{"class":45},[28,111110,3816],{"class":34},[14,111112,111113,111115,111116,111119],{},[25,111114,542],{}," 是取余数。",[25,111117,111118],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[18,111121,111123],{"className":20,"code":111122,"language":22,"meta":23,"style":23},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[25,111124,111125],{"__ignoreMap":23},[28,111126,111127,111129,111131,111133,111135,111137,111139,111141,111143,111145,111147,111149,111151,111153,111155,111157],{"class":30,"line":31},[28,111128,30491],{"class":45},[28,111130,221],{"class":34},[28,111132,110390],{"class":320},[28,111134,110393],{"class":34},[28,111136,110396],{"class":320},[28,111138,110399],{"class":34},[28,111140,57],{"class":45},[28,111142,110404],{"class":34},[28,111144,110407],{"class":320},[28,111146,12512],{"class":34},[28,111148,32094],{"class":45},[28,111150,221],{"class":34},[28,111152,260],{"class":45},[28,111154,110418],{"class":34},[28,111156,57],{"class":45},[28,111158,30573],{"class":34},[14,111160,111161,111162,111165,111166,111169],{},"打印当前步数、观测和动作。",[25,111163,111164],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[25,111167,111168],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[159,111171,102375],{"id":102374},[14,111173,111174],{},"观测向量:",[18,111176,111179],{"className":111177,"code":111178,"language":5264,"meta":23},[5262],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,111180,111178],{"__ignoreMap":23},[14,111182,111183],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111185,111186],{},"每隔 100 步会打印一次：",[18,111188,111191],{"className":111189,"code":111190,"language":5264,"meta":23},[5262],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[25,111192,111190],{"__ignoreMap":23},[14,111194,111195],{},"重点观察：",[171,111197,111198,111204,111209],{},[174,111199,111200,111203],{},[25,111201,111202],{},"pole_angle"," 是否越来越大。",[174,111205,111206,111208],{},[25,111207,109785],{}," 是否跑得太远。",[174,111210,111211,111212,82614,111214,28463],{},"action 是否经常被 clip 到 ",[25,111213,103974],{},[25,111215,46],{},[14,111217,111218],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[159,111220,102407],{"id":102406},[171,111222,111223,111229,111232,111238,111248,111254,111257],{},[174,111224,111225,111226,28463],{},"把初始角度改为 ",[25,111227,111228],{},"data.qpos[1] = 0.3",[174,111230,111231],{},"重新运行，观察控制是否变差。",[174,111233,111234,111235,111237],{},"把 actuator ",[25,111236,107126],{}," 改小。",[174,111239,111240,111241,111244,111245,28463],{},"打印 ",[25,111242,111243],{},"model.nq, model.nv, model.nu","，应为 ",[25,111246,111247],{},"2 2 1",[174,111249,111250,111251,111253],{},"把 reward 里的 ",[25,111252,110819],{}," 系数改大，观察总奖励变化。",[174,111255,111256],{},"把控制器改成反号，观察杆子是否更容易倒。",[174,111258,111259],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[159,111261,102512],{"id":102511},[188,111263,111264],{"id":111264},"杆子方向和预期不一致",[14,111266,102455,111267,111269,111270,111272],{},[25,111268,106298],{}," 和 capsule 的 ",[25,111271,103235],{},"，必要时用 viewer 可视化确认。",[188,111274,111275],{"id":111275},"控制器越控越倒",[14,111277,111278],{},"说明反馈符号可能反了，尝试:",[18,111280,111282],{"className":20,"code":111281,"language":22,"meta":23,"style":23},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[25,111283,111284],{"__ignoreMap":23},[28,111285,111286,111288,111290,111292,111294,111296,111298,111300,111302,111304],{"class":30,"line":31},[28,111287,107501],{"class":34},[28,111289,39],{"class":38},[28,111291,52346],{"class":38},[28,111293,105319],{"class":45},[28,111295,6595],{"class":38},[28,111297,109879],{"class":34},[28,111299,742],{"class":38},[28,111301,61942],{"class":45},[28,111303,6595],{"class":38},[28,111305,110299],{"class":34},[188,111307,111308],{"id":111308},"小车飞走",[14,111310,111311,111312,111314,111315,111318],{},"降低 ",[25,111313,107126],{}," 或缩小 ",[25,111316,111317],{},"action"," 的 clip 范围。",[188,111320,111322,111324],{"id":111321},"obs3-为什么是杆子角速度",[25,111323,110958],{}," 为什么是杆子角速度",[14,111326,111327],{},"因为这个模型里：",[18,111329,111332],{"className":111330,"code":111331,"language":5264,"meta":23},[5262],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[25,111333,111331],{"__ignoreMap":23},[14,111335,109806],{},[18,111337,111340],{"className":111338,"code":111339,"language":5264,"meta":23},[5262],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[25,111341,111339],{"__ignoreMap":23},[188,111343,111345],{"id":111344},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111347,111348],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[159,111350,102666],{"id":102665},[14,111352,111353],{},"一个控制任务通常包含：",[171,111355,111356,111359,111367,111372,111375],{},[174,111357,111358],{},"模型：Cartpole 的 body、joint、actuator。",[174,111360,111361,111362,428,111364,111366],{},"观测：从 ",[25,111363,104089],{},[25,111365,104419],{}," 里取状态。",[174,111368,111369,111370,28463],{},"动作：写入 ",[25,111371,101135],{},[174,111373,111374],{},"奖励：根据任务目标打分。",[174,111376,111377],{},"循环：obs -> action -> step -> reward。",[14,111379,111380],{},"这就是后面 Gymnasium 环境的基本骨架。",[136,111382,104345],{},{"title":23,"searchDepth":94,"depth":94,"links":111384},[111385,111386,111387,111392,111396,111397,111398,111406],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":111388},[111389,111390,111391],{"id":109759,"depth":109,"text":109760},{"id":109824,"depth":109,"text":109825},{"id":109840,"depth":109,"text":109841},{"id":101311,"depth":94,"text":101312,"children":111393},[111394,111395],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":111399},[111400,111401,111402,111403,111405],{"id":111264,"depth":109,"text":111264},{"id":111275,"depth":109,"text":111275},{"id":111308,"depth":109,"text":111308},{"id":111321,"depth":109,"text":111404},"obs[3] 为什么是杆子角速度",{"id":111344,"depth":109,"text":111345},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109495,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111413,"title":111414,"body":111415,"description":23,"extension":142,"meta":113429,"navigation":144,"path":113430,"seo":113431,"stem":113432,"__hash__":113433},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111416,"toc":113405},[111417,111420,111422,111425,111427,111444,111447,111450,111456,111459,111461,111463,111487,111489,111503,111505,111546,111548,111566,111568,111571,111577,111580,111608,111612,111618,111643,111646,111677,111684,111687,111690,111696,111699,111705,111708,111714,111718,111721,111746,111749,111751,112511,112513,112525,112527,112538,112540,112543,112560,112563,112565,112576,112579,112581,112627,112630,112643,112646,112728,112731,112733,112749,112759,112772,112775,112814,112824,112835,112845,112858,112861,112890,112893,112903,112906,112912,112929,112940,112942,112948,112965,112976,112997,113000,113012,113015,113036,113039,113047,113055,113072,113075,113144,113151,113159,113162,113175,113182,113184,113187,113193,113196,113199,113205,113211,113213,113253,113255,113261,113270,113273,113275,113295,113298,113301,113307,113311,113313,113340,113343,113346,113373,113379,113382,113385,113387,113390,113393,113399,113402],[10,111418,111414],{"id":111419},"_7控制任务reacher-机械臂到达目标",[159,111421,100706],{"id":100705},[14,111423,111424],{},"本章搭建一个二维两关节 reacher 任务。",[14,111426,104390],{},[171,111428,111429,111432,111435,111438,111441],{},[174,111430,111431],{},"两个 hinge joint",[174,111433,111434],{},"两个 motor actuator",[174,111436,111437],{},"site 作为末端点和目标点",[174,111439,111440],{},"根据末端和目标距离设计 reward",[174,111442,111443],{},"构造机械臂任务的基本形式",[14,111445,111446],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111448,111449],{},"Reacher 任务可以理解为：",[18,111451,111454],{"className":111452,"code":111453,"language":5264,"meta":23},[5262],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[25,111455,111453],{"__ignoreMap":23},[14,111457,111458],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[159,111460,100829],{"id":100828},[14,111462,100832],{},[18,111464,111465],{"className":23899,"code":104447,"language":23901,"meta":23,"style":23},[25,111466,111467],{"__ignoreMap":23},[28,111468,111469,111471,111473,111475,111477,111479,111481,111483,111485],{"class":30,"line":31},[28,111470,24654],{"class":2040},[28,111472,26393],{"class":320},[28,111474,23911],{"class":320},[28,111476,26478],{"class":45},[28,111478,104462],{"class":320},[28,111480,100857],{"class":320},[28,111482,102560],{"class":320},[28,111484,100873],{"class":320},[28,111486,104471],{"class":320},[14,111488,102878],{},[18,111490,111491],{"className":23899,"code":100978,"language":23901,"meta":23,"style":23},[25,111492,111493],{"__ignoreMap":23},[28,111494,111495,111497,111499,111501],{"class":30,"line":31},[28,111496,23908],{"class":2040},[28,111498,23911],{"class":320},[28,111500,100989],{"class":320},[28,111502,100992],{"class":320},[14,111504,102895],{},[18,111506,111508],{"className":23899,"code":111507,"language":23901,"meta":23,"style":23},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[25,111509,111510,111527,111536],{"__ignoreMap":23},[28,111511,111512,111514,111516,111518,111521,111523,111525],{"class":30,"line":31},[28,111513,30408],{"class":2040},[28,111515,29254],{"class":320},[28,111517,25193],{"class":45},[28,111519,111520],{"class":320}," mujoco-reacher",[28,111522,101034],{"class":320},[28,111524,101037],{"class":45},[28,111526,101040],{"class":45},[28,111528,111529,111531,111533],{"class":30,"line":94},[28,111530,30408],{"class":2040},[28,111532,101047],{"class":320},[28,111534,111535],{"class":320}," mujoco-reacher\n",[28,111537,111538,111540,111542,111544],{"class":30,"line":109},[28,111539,23908],{"class":2040},[28,111541,23911],{"class":320},[28,111543,100989],{"class":320},[28,111545,100992],{"class":320},[14,111547,101063],{},[171,111549,111550,111553,111556],{},[174,111551,111552],{},"本章使用低维状态，不使用图像输入。",[174,111554,111555],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[174,111557,111558,111559,428,111561,428,111563,111565],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[25,111560,104089],{},[25,111562,104419],{},[25,111564,103739],{}," 的方法一致。",[159,111567,101104],{"id":101103},[14,111569,111570],{},"Reacher 任务核心:",[18,111572,111575],{"className":111573,"code":111574,"language":5264,"meta":23},[5262],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[25,111576,111574],{"__ignoreMap":23},[14,111578,111579],{},"读取 site 世界坐标:",[18,111581,111583],{"className":20,"code":111582,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[25,111584,111585,111598],{"__ignoreMap":23},[28,111586,111587,111589,111591,111593,111596],{"class":30,"line":31},[28,111588,103693],{"class":34},[28,111590,39],{"class":38},[28,111592,103464],{"class":34},[28,111594,111595],{"class":320},"\"tip\"",[28,111597,227],{"class":34},[28,111599,111600,111603,111605],{"class":30,"line":94},[28,111601,111602],{"class":34},"tip_pos ",[28,111604,39],{"class":38},[28,111606,111607],{"class":34}," data.site_xpos[site_id]\n",[188,111609,111611],{"id":111610},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111613,111614,111615,111617],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[25,111616,104089],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[18,111619,111621],{"className":20,"code":111620,"language":22,"meta":23,"style":23},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[25,111622,111623,111633],{"__ignoreMap":23},[28,111624,111625,111628,111630],{"class":30,"line":31},[28,111626,111627],{"class":34},"tip ",[28,111629,39],{"class":38},[28,111631,111632],{"class":34}," data.site_xpos[tip_site_id]\n",[28,111634,111635,111638,111640],{"class":30,"line":94},[28,111636,111637],{"class":34},"target ",[28,111639,39],{"class":38},[28,111641,111642],{"class":34}," data.site_xpos[target_site_id]\n",[14,111644,111645],{},"这样 reward 就很容易写：",[18,111647,111649],{"className":20,"code":111648,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[25,111650,111651,111666],{"__ignoreMap":23},[28,111652,111653,111656,111658,111661,111663],{"class":30,"line":31},[28,111654,111655],{"class":34},"dist ",[28,111657,39],{"class":38},[28,111659,111660],{"class":34}," np.linalg.norm(tip ",[28,111662,742],{"class":38},[28,111664,111665],{"class":34}," target)\n",[28,111667,111668,111670,111672,111674],{"class":30,"line":94},[28,111669,111064],{"class":34},[28,111671,39],{"class":38},[28,111673,52346],{"class":38},[28,111675,111676],{"class":34},"dist\n",[14,111678,111679,111680,111683],{},"距离越小，",[25,111681,111682],{},"-dist"," 越接近 0，奖励越高。",[188,111685,111686],{"id":111686},"两关节机械臂的状态",[14,111688,111689],{},"这个模型有两个 hinge joint：",[18,111691,111694],{"className":111692,"code":111693,"language":5264,"meta":23},[5262],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[25,111695,111693],{"__ignoreMap":23},[14,111697,111698],{},"再加上末端和目标位置：",[18,111700,111703],{"className":111701,"code":111702,"language":5264,"meta":23},[5262],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[25,111704,111702],{"__ignoreMap":23},[14,111706,111707],{},"总维度：",[18,111709,111712],{"className":111710,"code":111711,"language":5264,"meta":23},[5262],"2 + 2 + 3 + 3 = 10\n",[25,111713,111711],{"__ignoreMap":23},[188,111715,111717],{"id":111716},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111719,111720],{},"本章把重力设为：",[18,111722,111724],{"className":53142,"code":111723,"language":53144,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,111725,111726],{"__ignoreMap":23},[28,111727,111728,111730,111732,111734,111736,111738,111740,111742,111744],{"class":30,"line":31},[28,111729,99],{"class":34},[28,111731,69241],{"class":51375},[28,111733,101253],{"class":2040},[28,111735,39],{"class":34},[28,111737,101258],{"class":320},[28,111739,101261],{"class":2040},[28,111741,39],{"class":34},[28,111743,103830],{"class":320},[28,111745,101203],{"class":34},[14,111747,111748],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[159,111750,101312],{"id":101311},[18,111752,111754],{"className":20,"code":111753,"language":22,"meta":23,"style":23},"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",[25,111755,111756,111762,111772,111776,111780,111788,111793,111798,111802,111806,111811,111816,111820,111825,111830,111835,111839,111844,111849,111854,111859,111863,111867,111871,111875,111879,111884,111889,111893,111897,111901,111905,111909,111924,111933,111945,111968,111975,111979,111983,111993,112007,112021,112028,112032,112036,112050,112062,112074,112087,112102,112119,112123,112127,112139,112151,112159,112167,112171,112187,112192,112205,112218,112233,112237,112272,112304,112308,112312,112321,112325,112341,112351,112362,112378,112394,112410,112426,112430,112448,112468,112487,112491,112495,112507],{"__ignoreMap":23},[28,111757,111758,111760],{"class":30,"line":31},[28,111759,30468],{"class":38},[28,111761,101360],{"class":34},[28,111763,111764,111766,111768,111770],{"class":30,"line":94},[28,111765,30468],{"class":38},[28,111767,31456],{"class":34},[28,111769,31459],{"class":38},[28,111771,31462],{"class":34},[28,111773,111774],{"class":30,"line":109},[28,111775,2477],{"emptyLinePlaceholder":144},[28,111777,111778],{"class":30,"line":125},[28,111779,2477],{"emptyLinePlaceholder":144},[28,111781,111782,111784,111786],{"class":30,"line":131},[28,111783,101373],{"class":45},[28,111785,13641],{"class":38},[28,111787,101378],{"class":320},[28,111789,111790],{"class":30,"line":1291},[28,111791,111792],{"class":320},"\u003Cmujoco model=\"two_link_reacher\">\n",[28,111794,111795],{"class":30,"line":1297},[28,111796,111797],{"class":320},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[28,111799,111800],{"class":30,"line":1388},[28,111801,2477],{"emptyLinePlaceholder":144},[28,111803,111804],{"class":30,"line":1394},[28,111805,101397],{"class":320},[28,111807,111808],{"class":30,"line":1406},[28,111809,111810],{"class":320},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[28,111812,111813],{"class":30,"line":1689},[28,111814,111815],{"class":320},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[28,111817,111818],{"class":30,"line":1694},[28,111819,2477],{"emptyLinePlaceholder":144},[28,111821,111822],{"class":30,"line":1700},[28,111823,111824],{"class":320},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[28,111826,111827],{"class":30,"line":1705},[28,111828,111829],{"class":320},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,111831,111832],{"class":30,"line":1719},[28,111833,111834],{"class":320},"      \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",[28,111836,111837],{"class":30,"line":1724},[28,111838,2477],{"emptyLinePlaceholder":144},[28,111840,111841],{"class":30,"line":1730},[28,111842,111843],{"class":320},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[28,111845,111846],{"class":30,"line":1751},[28,111847,111848],{"class":320},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,111850,111851],{"class":30,"line":1756},[28,111852,111853],{"class":320},"        \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",[28,111855,111856],{"class":30,"line":1770},[28,111857,111858],{"class":320},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[28,111860,111861],{"class":30,"line":1775},[28,111862,106497],{"class":320},[28,111864,111865],{"class":30,"line":1804},[28,111866,101426],{"class":320},[28,111868,111869],{"class":30,"line":1809},[28,111870,101431],{"class":320},[28,111872,111873],{"class":30,"line":1826},[28,111874,2477],{"emptyLinePlaceholder":144},[28,111876,111877],{"class":30,"line":1831},[28,111878,106514],{"class":320},[28,111880,111881],{"class":30,"line":1836},[28,111882,111883],{"class":320},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,111885,111886],{"class":30,"line":1841},[28,111887,111888],{"class":320},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,111890,111891],{"class":30,"line":1855},[28,111892,106524],{"class":320},[28,111894,111895],{"class":30,"line":1860},[28,111896,101436],{"class":320},[28,111898,111899],{"class":30,"line":2654},[28,111900,95757],{"class":320},[28,111902,111903],{"class":30,"line":2668},[28,111904,2477],{"emptyLinePlaceholder":144},[28,111906,111907],{"class":30,"line":2676},[28,111908,2477],{"emptyLinePlaceholder":144},[28,111910,111911,111913,111916,111919,111921],{"class":30,"line":2681},[28,111912,32023],{"class":38},[28,111914,111915],{"class":2040}," site_position",[28,111917,111918],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[28,111920,1376],{"class":45},[28,111922,111923],{"class":34},") -> np.ndarray:\n",[28,111925,111926,111928,111930],{"class":30,"line":2687},[28,111927,103459],{"class":34},[28,111929,39],{"class":38},[28,111931,111932],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[28,111934,111935,111937,111939,111941,111943],{"class":30,"line":2693},[28,111936,3178],{"class":38},[28,111938,103508],{"class":34},[28,111940,99],{"class":38},[28,111942,4170],{"class":45},[28,111944,3816],{"class":34},[28,111946,111947,111949,111951,111953,111955,111958,111960,111962,111964,111966],{"class":30,"line":2698},[28,111948,103491],{"class":38},[28,111950,103494],{"class":45},[28,111952,221],{"class":34},[28,111954,271],{"class":38},[28,111956,111957],{"class":320},"\"site not found: ",[28,111959,1102],{"class":45},[28,111961,79885],{"class":34},[28,111963,1150],{"class":45},[28,111965,465],{"class":320},[28,111967,227],{"class":34},[28,111969,111970,111972],{"class":30,"line":8025},[28,111971,4167],{"class":38},[28,111973,111974],{"class":34}," data.site_xpos[site_id].copy()\n",[28,111976,111977],{"class":30,"line":8049},[28,111978,2477],{"emptyLinePlaceholder":144},[28,111980,111981],{"class":30,"line":8054},[28,111982,2477],{"emptyLinePlaceholder":144},[28,111984,111985,111987,111990],{"class":30,"line":8060},[28,111986,32023],{"class":38},[28,111988,111989],{"class":2040}," get_obs",[28,111991,111992],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[28,111994,111995,111998,112000,112003,112005],{"class":30,"line":8087},[28,111996,111997],{"class":34},"    tip ",[28,111999,39],{"class":38},[28,112001,112002],{"class":34}," site_position(model, data, ",[28,112004,111595],{"class":320},[28,112006,227],{"class":34},[28,112008,112009,112012,112014,112016,112019],{"class":30,"line":8092},[28,112010,112011],{"class":34},"    target ",[28,112013,39],{"class":38},[28,112015,112002],{"class":34},[28,112017,112018],{"class":320},"\"target\"",[28,112020,227],{"class":34},[28,112022,112023,112025],{"class":30,"line":8098},[28,112024,4167],{"class":38},[28,112026,112027],{"class":34}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[28,112029,112030],{"class":30,"line":8110},[28,112031,2477],{"emptyLinePlaceholder":144},[28,112033,112034],{"class":30,"line":8122},[28,112035,2477],{"emptyLinePlaceholder":144},[28,112037,112038,112040,112043,112046,112048],{"class":30,"line":8134},[28,112039,32023],{"class":38},[28,112041,112042],{"class":2040}," reward",[28,112044,112045],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,112047,260],{"class":45},[28,112049,3816],{"class":34},[28,112051,112052,112054,112056,112058,112060],{"class":30,"line":9793},[28,112053,111997],{"class":34},[28,112055,39],{"class":38},[28,112057,112002],{"class":34},[28,112059,111595],{"class":320},[28,112061,227],{"class":34},[28,112063,112064,112066,112068,112070,112072],{"class":30,"line":9818},[28,112065,112011],{"class":34},[28,112067,39],{"class":38},[28,112069,112002],{"class":34},[28,112071,112018],{"class":320},[28,112073,227],{"class":34},[28,112075,112076,112079,112081,112083,112085],{"class":30,"line":9841},[28,112077,112078],{"class":34},"    dist ",[28,112080,39],{"class":38},[28,112082,111660],{"class":34},[28,112084,742],{"class":38},[28,112086,111665],{"class":34},[28,112088,112089,112092,112094,112097,112099],{"class":30,"line":9865},[28,112090,112091],{"class":34},"    control_cost ",[28,112093,39],{"class":38},[28,112095,112096],{"class":45}," 0.01",[28,112098,6595],{"class":38},[28,112100,112101],{"class":34}," np.sum(np.square(data.ctrl))\n",[28,112103,112104,112106,112108,112110,112112,112114,112116],{"class":30,"line":9870},[28,112105,4167],{"class":38},[28,112107,109856],{"class":45},[28,112109,221],{"class":34},[28,112111,742],{"class":38},[28,112113,111655],{"class":34},[28,112115,742],{"class":38},[28,112117,112118],{"class":34}," control_cost)\n",[28,112120,112121],{"class":30,"line":9875},[28,112122,2477],{"emptyLinePlaceholder":144},[28,112124,112125],{"class":30,"line":9880},[28,112126,2477],{"emptyLinePlaceholder":144},[28,112128,112129,112131,112133,112135,112137],{"class":30,"line":9889},[28,112130,32023],{"class":38},[28,112132,2050],{"class":2040},[28,112134,101457],{"class":34},[28,112136,95745],{"class":45},[28,112138,3816],{"class":34},[28,112140,112141,112143,112145,112147,112149],{"class":30,"line":9894},[28,112142,101466],{"class":34},[28,112144,39],{"class":38},[28,112146,101471],{"class":34},[28,112148,101373],{"class":45},[28,112150,227],{"class":34},[28,112152,112153,112155,112157],{"class":30,"line":9900},[28,112154,101480],{"class":34},[28,112156,39],{"class":38},[28,112158,101485],{"class":34},[28,112160,112161,112163,112165],{"class":30,"line":9921},[28,112162,110212],{"class":34},[28,112164,39],{"class":38},[28,112166,104820],{"class":45},[28,112168,112169],{"class":30,"line":9927},[28,112170,2477],{"emptyLinePlaceholder":144},[28,112172,112173,112175,112177,112179,112181,112183,112185],{"class":30,"line":9941},[28,112174,3278],{"class":38},[28,112176,31692],{"class":34},[28,112178,26121],{"class":38},[28,112180,32519],{"class":45},[28,112182,221],{"class":34},[28,112184,65149],{"class":45},[28,112186,30862],{"class":34},[28,112188,112189],{"class":30,"line":9947},[28,112190,112191],{"class":34},"        mujoco.mj_forward(model, data)\n",[28,112193,112194,112197,112199,112201,112203],{"class":30,"line":9974},[28,112195,112196],{"class":34},"        tip ",[28,112198,39],{"class":38},[28,112200,112002],{"class":34},[28,112202,111595],{"class":320},[28,112204,227],{"class":34},[28,112206,112207,112210,112212,112214,112216],{"class":30,"line":9983},[28,112208,112209],{"class":34},"        target ",[28,112211,39],{"class":38},[28,112213,112002],{"class":34},[28,112215,112018],{"class":320},[28,112217,227],{"class":34},[28,112219,112220,112223,112225,112228,112230],{"class":30,"line":9989},[28,112221,112222],{"class":34},"        error ",[28,112224,39],{"class":38},[28,112226,112227],{"class":34}," target ",[28,112229,742],{"class":38},[28,112231,112232],{"class":34}," tip\n",[28,112234,112235],{"class":30,"line":9997},[28,112236,2477],{"emptyLinePlaceholder":144},[28,112238,112239,112241,112243,112245,112247,112250,112252,112254,112257,112259,112262,112264,112266,112268,112270],{"class":30,"line":10002},[28,112240,106676],{"class":34},[28,112242,407],{"class":45},[28,112244,4520],{"class":34},[28,112246,39],{"class":38},[28,112248,112249],{"class":34}," np.clip(",[28,112251,105319],{"class":45},[28,112253,6595],{"class":38},[28,112255,112256],{"class":34}," error[",[28,112258,52],{"class":45},[28,112260,112261],{"class":34},"], ",[28,112263,742],{"class":38},[28,112265,102462],{"class":45},[28,112267,12512],{"class":34},[28,112269,102462],{"class":45},[28,112271,227],{"class":34},[28,112273,112274,112276,112278,112280,112282,112284,112286,112288,112290,112292,112294,112296,112298,112300,112302],{"class":30,"line":16681},[28,112275,106676],{"class":34},[28,112277,46],{"class":45},[28,112279,4520],{"class":34},[28,112281,39],{"class":38},[28,112283,112249],{"class":34},[28,112285,105319],{"class":45},[28,112287,6595],{"class":38},[28,112289,112256],{"class":34},[28,112291,407],{"class":45},[28,112293,112261],{"class":34},[28,112295,742],{"class":38},[28,112297,102462],{"class":45},[28,112299,12512],{"class":34},[28,112301,102462],{"class":45},[28,112303,227],{"class":34},[28,112305,112306],{"class":30,"line":16687},[28,112307,2477],{"emptyLinePlaceholder":144},[28,112309,112310],{"class":30,"line":16710},[28,112311,101575],{"class":34},[28,112313,112314,112316,112318],{"class":30,"line":16716},[28,112315,110356],{"class":34},[28,112317,9554],{"class":38},[28,112319,112320],{"class":34}," reward(model, data)\n",[28,112322,112323],{"class":30,"line":16739},[28,112324,2477],{"emptyLinePlaceholder":144},[28,112326,112327,112329,112331,112333,112335,112337,112339],{"class":30,"line":16753},[28,112328,2574],{"class":38},[28,112330,31692],{"class":34},[28,112332,542],{"class":38},[28,112334,5831],{"class":45},[28,112336,101618],{"class":38},[28,112338,4170],{"class":45},[28,112340,3816],{"class":34},[28,112342,112343,112346,112348],{"class":30,"line":16773},[28,112344,112345],{"class":34},"            obs ",[28,112347,39],{"class":38},[28,112349,112350],{"class":34}," get_obs(model, data)\n",[28,112352,112353,112355,112357,112359],{"class":30,"line":16779},[28,112354,34726],{"class":45},[28,112356,221],{"class":34},[28,112358,110390],{"class":320},[28,112360,112361],{"class":34},", step)\n",[28,112363,112364,112366,112368,112371,112374,112376],{"class":30,"line":16790},[28,112365,34726],{"class":45},[28,112367,221],{"class":34},[28,112369,112370],{"class":320},"\"  tip:\"",[28,112372,112373],{"class":34},", np.round(tip, ",[28,112375,57],{"class":45},[28,112377,30573],{"class":34},[28,112379,112380,112382,112384,112387,112390,112392],{"class":30,"line":16813},[28,112381,34726],{"class":45},[28,112383,221],{"class":34},[28,112385,112386],{"class":320},"\"  target:\"",[28,112388,112389],{"class":34},", np.round(target, ",[28,112391,57],{"class":45},[28,112393,30573],{"class":34},[28,112395,112396,112398,112400,112403,112406,112408],{"class":30,"line":16835},[28,112397,34726],{"class":45},[28,112399,221],{"class":34},[28,112401,112402],{"class":320},"\"  ctrl:\"",[28,112404,112405],{"class":34},", np.round(data.ctrl.copy(), ",[28,112407,57],{"class":45},[28,112409,30573],{"class":34},[28,112411,112412,112414,112416,112419,112422,112424],{"class":30,"line":16840},[28,112413,34726],{"class":45},[28,112415,221],{"class":34},[28,112417,112418],{"class":320},"\"  obs_dim:\"",[28,112420,112421],{"class":34},", obs.shape[",[28,112423,407],{"class":45},[28,112425,4734],{"class":34},[28,112427,112428],{"class":30,"line":16846},[28,112429,2477],{"emptyLinePlaceholder":144},[28,112431,112432,112434,112436,112438,112440,112442,112444,112446],{"class":30,"line":16860},[28,112433,31375],{"class":45},[28,112435,221],{"class":34},[28,112437,110435],{"class":320},[28,112439,12512],{"class":34},[28,112441,32094],{"class":45},[28,112443,110442],{"class":34},[28,112445,57],{"class":45},[28,112447,30573],{"class":34},[28,112449,112450,112452,112454,112457,112460,112462,112464,112466],{"class":30,"line":16873},[28,112451,31375],{"class":45},[28,112453,221],{"class":34},[28,112455,112456],{"class":320},"\"final tip:\"",[28,112458,112459],{"class":34},", np.round(site_position(model, data, ",[28,112461,111595],{"class":320},[28,112463,110404],{"class":34},[28,112465,57],{"class":45},[28,112467,30573],{"class":34},[28,112469,112470,112472,112474,112477,112479,112481,112483,112485],{"class":30,"line":16878},[28,112471,31375],{"class":45},[28,112473,221],{"class":34},[28,112475,112476],{"class":320},"\"target:\"",[28,112478,112459],{"class":34},[28,112480,112018],{"class":320},[28,112482,110404],{"class":34},[28,112484,57],{"class":45},[28,112486,30573],{"class":34},[28,112488,112489],{"class":30,"line":16892},[28,112490,2477],{"emptyLinePlaceholder":144},[28,112492,112493],{"class":30,"line":16897},[28,112494,2477],{"emptyLinePlaceholder":144},[28,112496,112497,112499,112501,112503,112505],{"class":30,"line":16903},[28,112498,1608],{"class":38},[28,112500,31296],{"class":45},[28,112502,101618],{"class":38},[28,112504,101621],{"class":320},[28,112506,3816],{"class":34},[28,112508,112509],{"class":30,"line":16908},[28,112510,101628],{"class":34},[14,112512,103629],{},[18,112514,112516],{"className":23899,"code":112515,"language":23901,"meta":23,"style":23},"touch ch7_reacher.py\n",[25,112517,112518],{"__ignoreMap":23},[28,112519,112520,112522],{"class":30,"line":31},[28,112521,101342],{"class":2040},[28,112523,112524],{"class":320}," ch7_reacher.py\n",[14,112526,110503],{},[18,112528,112530],{"className":23899,"code":112529,"language":23901,"meta":23,"style":23},"python ch7_reacher.py\n",[25,112531,112532],{"__ignoreMap":23},[28,112533,112534,112536],{"class":30,"line":31},[28,112535,22],{"class":2040},[28,112537,112524],{"class":320},[188,112539,101631],{"id":101631},[14,112541,112542],{},"读取 site 坐标：",[18,112544,112546],{"className":20,"code":112545,"language":22,"meta":23,"style":23},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[25,112547,112548],{"__ignoreMap":23},[28,112549,112550,112552,112554,112556,112558],{"class":30,"line":31},[28,112551,32023],{"class":38},[28,112553,111915],{"class":2040},[28,112555,111918],{"class":34},[28,112557,1376],{"class":45},[28,112559,111923],{"class":34},[14,112561,112562],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112564,110519],{},[18,112566,112568],{"className":20,"code":112567,"language":22,"meta":23,"style":23},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112569,112570],{"__ignoreMap":23},[28,112571,112572,112574],{"class":30,"line":31},[28,112573,17123],{"class":38},[28,112575,112027],{"class":34},[14,112577,112578],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112580,109844],{},[18,112582,112584],{"className":20,"code":112583,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[25,112585,112586,112598,112611],{"__ignoreMap":23},[28,112587,112588,112590,112592,112594,112596],{"class":30,"line":31},[28,112589,111655],{"class":34},[28,112591,39],{"class":38},[28,112593,111660],{"class":34},[28,112595,742],{"class":38},[28,112597,111665],{"class":34},[28,112599,112600,112603,112605,112607,112609],{"class":30,"line":94},[28,112601,112602],{"class":34},"control_cost ",[28,112604,39],{"class":38},[28,112606,112096],{"class":45},[28,112608,6595],{"class":38},[28,112610,112101],{"class":34},[28,112612,112613,112615,112617,112619,112621,112623,112625],{"class":30,"line":109},[28,112614,17123],{"class":38},[28,112616,109856],{"class":45},[28,112618,221],{"class":34},[28,112620,742],{"class":38},[28,112622,111655],{"class":34},[28,112624,742],{"class":38},[28,112626,112118],{"class":34},[14,112628,112629],{},"奖励由两部分组成：",[171,112631,112632,112637],{},[174,112633,112634,112636],{},[25,112635,111682],{},"：末端离目标越远，奖励越低。",[174,112638,112639,112642],{},[25,112640,112641],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112644,112645],{},"简单控制器：",[18,112647,112649],{"className":20,"code":112648,"language":22,"meta":23,"style":23},"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",[25,112650,112651,112664,112696],{"__ignoreMap":23},[28,112652,112653,112656,112658,112660,112662],{"class":30,"line":31},[28,112654,112655],{"class":34},"error ",[28,112657,39],{"class":38},[28,112659,112227],{"class":34},[28,112661,742],{"class":38},[28,112663,112232],{"class":34},[28,112665,112666,112668,112670,112672,112674,112676,112678,112680,112682,112684,112686,112688,112690,112692,112694],{"class":30,"line":94},[28,112667,105930],{"class":34},[28,112669,407],{"class":45},[28,112671,4520],{"class":34},[28,112673,39],{"class":38},[28,112675,112249],{"class":34},[28,112677,105319],{"class":45},[28,112679,6595],{"class":38},[28,112681,112256],{"class":34},[28,112683,52],{"class":45},[28,112685,112261],{"class":34},[28,112687,742],{"class":38},[28,112689,102462],{"class":45},[28,112691,12512],{"class":34},[28,112693,102462],{"class":45},[28,112695,227],{"class":34},[28,112697,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716,112718,112720,112722,112724,112726],{"class":30,"line":109},[28,112699,105930],{"class":34},[28,112701,46],{"class":45},[28,112703,4520],{"class":34},[28,112705,39],{"class":38},[28,112707,112249],{"class":34},[28,112709,105319],{"class":45},[28,112711,6595],{"class":38},[28,112713,112256],{"class":34},[28,112715,407],{"class":45},[28,112717,112261],{"class":34},[28,112719,742],{"class":38},[28,112721,102462],{"class":45},[28,112723,12512],{"class":34},[28,112725,102462],{"class":45},[28,112727,227],{"class":34},[14,112729,112730],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[188,112732,101767],{"id":101767},[18,112734,112735],{"className":20,"code":112545,"language":22,"meta":23,"style":23},[25,112736,112737],{"__ignoreMap":23},[28,112738,112739,112741,112743,112745,112747],{"class":30,"line":31},[28,112740,32023],{"class":38},[28,112742,111915],{"class":2040},[28,112744,111918],{"class":34},[28,112746,1376],{"class":45},[28,112748,111923],{"class":34},[14,112750,112751,112752,112754,112755,82614,112757,28463],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[25,112753,79885],{}," 是 site 的名字，比如 ",[25,112756,111595],{},[25,112758,112018],{},[18,112760,112762],{"className":20,"code":112761,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,112763,112764],{"__ignoreMap":23},[28,112765,112766,112768,112770],{"class":30,"line":31},[28,112767,103693],{"class":34},[28,112769,39],{"class":38},[28,112771,111932],{"class":34},[14,112773,112774],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[18,112776,112778],{"className":20,"code":112777,"language":22,"meta":23,"style":23},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[25,112779,112780,112792],{"__ignoreMap":23},[28,112781,112782,112784,112786,112788,112790],{"class":30,"line":31},[28,112783,1608],{"class":38},[28,112785,103508],{"class":34},[28,112787,99],{"class":38},[28,112789,4170],{"class":45},[28,112791,3816],{"class":34},[28,112793,112794,112796,112798,112800,112802,112804,112806,112808,112810,112812],{"class":30,"line":94},[28,112795,103954],{"class":38},[28,112797,103494],{"class":45},[28,112799,221],{"class":34},[28,112801,271],{"class":38},[28,112803,111957],{"class":320},[28,112805,1102],{"class":45},[28,112807,79885],{"class":34},[28,112809,1150],{"class":45},[28,112811,465],{"class":320},[28,112813,227],{"class":34},[14,112815,112816,112817,112820,112821,112823],{},"如果 site 没找到，就主动报错。",[25,112818,112819],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[25,112822,79885],{}," 的值放进字符串里。",[18,112825,112827],{"className":20,"code":112826,"language":22,"meta":23,"style":23},"return data.site_xpos[site_id].copy()\n",[25,112828,112829],{"__ignoreMap":23},[28,112830,112831,112833],{"class":30,"line":31},[28,112832,17123],{"class":38},[28,112834,111974],{"class":34},[14,112836,112837,112838,112840,112841,112844],{},"返回这个 site 的世界坐标。",[25,112839,103739],{}," 里的每一行都是一个 site 的 ",[25,112842,112843],{},"(x, y, z)"," 坐标。",[18,112846,112848],{"className":20,"code":112847,"language":22,"meta":23,"style":23},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,112849,112850],{"__ignoreMap":23},[28,112851,112852,112854,112856],{"class":30,"line":31},[28,112853,32023],{"class":38},[28,112855,111989],{"class":2040},[28,112857,111992],{"class":34},[14,112859,112860],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[18,112862,112864],{"className":20,"code":112863,"language":22,"meta":23,"style":23},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[25,112865,112866,112878],{"__ignoreMap":23},[28,112867,112868,112870,112872,112874,112876],{"class":30,"line":31},[28,112869,111627],{"class":34},[28,112871,39],{"class":38},[28,112873,112002],{"class":34},[28,112875,111595],{"class":320},[28,112877,227],{"class":34},[28,112879,112880,112882,112884,112886,112888],{"class":30,"line":94},[28,112881,111637],{"class":34},[28,112883,39],{"class":38},[28,112885,112002],{"class":34},[28,112887,112018],{"class":320},[28,112889,227],{"class":34},[14,112891,112892],{},"分别读取末端点和目标点的世界坐标。",[18,112894,112895],{"className":20,"code":112567,"language":22,"meta":23,"style":23},[25,112896,112897],{"__ignoreMap":23},[28,112898,112899,112901],{"class":30,"line":31},[28,112900,17123],{"class":38},[28,112902,112027],{"class":34},[14,112904,112905],{},"把四部分拼成一个观测数组：",[18,112907,112910],{"className":112908,"code":112909,"language":5264,"meta":23},[5262],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[25,112911,112909],{"__ignoreMap":23},[18,112913,112915],{"className":20,"code":112914,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\n",[25,112916,112917],{"__ignoreMap":23},[28,112918,112919,112921,112923,112925,112927],{"class":30,"line":31},[28,112920,111655],{"class":34},[28,112922,39],{"class":38},[28,112924,111660],{"class":34},[28,112926,742],{"class":38},[28,112928,111665],{"class":34},[14,112930,112931,112932,112935,112936,112939],{},"计算 tip 到 target 的距离。",[25,112933,112934],{},"tip - target"," 得到一个三维向量，",[25,112937,112938],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112941,14710],{},[18,112943,112946],{"className":112944,"code":112945,"language":5264,"meta":23},[5262],"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",[25,112947,112945],{"__ignoreMap":23},[18,112949,112951],{"className":20,"code":112950,"language":22,"meta":23,"style":23},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[25,112952,112953],{"__ignoreMap":23},[28,112954,112955,112957,112959,112961,112963],{"class":30,"line":31},[28,112956,112602],{"class":34},[28,112958,39],{"class":38},[28,112960,112096],{"class":45},[28,112962,6595],{"class":38},[28,112964,112101],{"class":34},[14,112966,112967,112968,112971,112972,112975],{},"计算动作惩罚。",[25,112969,112970],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[25,112973,112974],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[18,112977,112979],{"className":20,"code":112978,"language":22,"meta":23,"style":23},"return float(-dist - control_cost)\n",[25,112980,112981],{"__ignoreMap":23},[28,112982,112983,112985,112987,112989,112991,112993,112995],{"class":30,"line":31},[28,112984,17123],{"class":38},[28,112986,109856],{"class":45},[28,112988,221],{"class":34},[28,112990,742],{"class":38},[28,112992,111655],{"class":34},[28,112994,742],{"class":38},[28,112996,112118],{"class":34},[14,112998,112999],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[18,113001,113002],{"className":20,"code":110862,"language":22,"meta":23,"style":23},[25,113003,113004],{"__ignoreMap":23},[28,113005,113006,113008,113010],{"class":30,"line":31},[28,113007,110869],{"class":34},[28,113009,39],{"class":38},[28,113011,104820],{"class":45},[14,113013,113014],{},"累计奖励变量，记录整个运行过程的总分。",[18,113016,113018],{"className":20,"code":113017,"language":22,"meta":23,"style":23},"for step in range(500):\n",[25,113019,113020],{"__ignoreMap":23},[28,113021,113022,113024,113026,113028,113030,113032,113034],{"class":30,"line":31},[28,113023,3102],{"class":38},[28,113025,31692],{"class":34},[28,113027,26121],{"class":38},[28,113029,32519],{"class":45},[28,113031,221],{"class":34},[28,113033,65149],{"class":45},[28,113035,30862],{"class":34},[14,113037,113038],{},"运行 500 个控制步。",[18,113040,113041],{"className":20,"code":104602,"language":22,"meta":23,"style":23},[25,113042,113043],{"__ignoreMap":23},[28,113044,113045],{"class":30,"line":31},[28,113046,104602],{"class":34},[14,113048,113049,113050,101077,113052,113054],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[25,113051,103290],{},[25,113053,103293],{}," 是当前状态下的坐标。",[18,113056,113058],{"className":20,"code":113057,"language":22,"meta":23,"style":23},"error = target - tip\n",[25,113059,113060],{"__ignoreMap":23},[28,113061,113062,113064,113066,113068,113070],{"class":30,"line":31},[28,113063,112655],{"class":34},[28,113065,39],{"class":38},[28,113067,112227],{"class":34},[28,113069,742],{"class":38},[28,113071,112232],{"class":34},[14,113073,113074],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[18,113076,113078],{"className":20,"code":113077,"language":22,"meta":23,"style":23},"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",[25,113079,113080,113112],{"__ignoreMap":23},[28,113081,113082,113084,113086,113088,113090,113092,113094,113096,113098,113100,113102,113104,113106,113108,113110],{"class":30,"line":31},[28,113083,105930],{"class":34},[28,113085,407],{"class":45},[28,113087,4520],{"class":34},[28,113089,39],{"class":38},[28,113091,112249],{"class":34},[28,113093,105319],{"class":45},[28,113095,6595],{"class":38},[28,113097,112256],{"class":34},[28,113099,52],{"class":45},[28,113101,112261],{"class":34},[28,113103,742],{"class":38},[28,113105,102462],{"class":45},[28,113107,12512],{"class":34},[28,113109,102462],{"class":45},[28,113111,227],{"class":34},[28,113113,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132,113134,113136,113138,113140,113142],{"class":30,"line":94},[28,113115,105930],{"class":34},[28,113117,46],{"class":45},[28,113119,4520],{"class":34},[28,113121,39],{"class":38},[28,113123,112249],{"class":34},[28,113125,105319],{"class":45},[28,113127,6595],{"class":38},[28,113129,112256],{"class":34},[28,113131,407],{"class":45},[28,113133,112261],{"class":34},[28,113135,742],{"class":38},[28,113137,102462],{"class":45},[28,113139,12512],{"class":34},[28,113141,102462],{"class":45},[28,113143,227],{"class":34},[14,113145,113146,113147,113150],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[25,113148,113149],{},"error -> ctrl -> step"," 的流程。",[18,113152,113153],{"className":20,"code":104564,"language":22,"meta":23,"style":23},[25,113154,113155],{"__ignoreMap":23},[28,113156,113157],{"class":30,"line":31},[28,113158,104564],{"class":34},[14,113160,113161],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[18,113163,113165],{"className":20,"code":113164,"language":22,"meta":23,"style":23},"obs = get_obs(model, data)\n",[25,113166,113167],{"__ignoreMap":23},[28,113168,113169,113171,113173],{"class":30,"line":31},[28,113170,110913],{"class":34},[28,113172,39],{"class":38},[28,113174,112350],{"class":34},[14,113176,113177,113178,113181],{},"读取最新观测。后面打印 ",[25,113179,113180],{},"obs.shape[0]","，用来确认观测维度是 10。",[159,113183,102375],{"id":102374},[14,113185,113186],{},"观测维度为:",[18,113188,113191],{"className":113189,"code":113190,"language":5264,"meta":23},[5262],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[25,113192,113190],{"__ignoreMap":23},[14,113194,113195],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113197,113198],{},"程序每 100 步打印：",[18,113200,113203],{"className":113201,"code":113202,"language":5264,"meta":23},[5262],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[25,113204,113202],{"__ignoreMap":23},[14,113206,113207,113208,113210],{},"如果控制有效，你应该看到最终 ",[25,113209,103290],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[159,113212,102407],{"id":102406},[171,113214,113215,113218,113221,113227,113233,113240,113250],{},[174,113216,113217],{},"修改目标点位置。",[174,113219,113220],{},"重新运行，观察最终 tip 是否变化。",[174,113222,113223,113224,113226],{},"把 gravity 改成 ",[25,113225,102648],{},"，观察控制是否变差。",[174,113228,111240,113229,111244,113231,28463],{},[25,113230,102217],{},[25,113232,52],{},[174,113234,102470,113235,102473,113237,113239],{},[25,113236,110655],{},[25,113238,107366],{},"，观察机械臂是否更难移动。",[174,113241,102470,113242,82605,113244,102473,113246,113249],{},[25,113243,103293],{},[25,113245,104205],{},[25,113247,113248],{},"0.2 0 0.6","，观察 reward 和 final tip。",[174,113251,113252],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[159,113254,102512],{"id":102511},[188,113256,113258],{"id":113257},"site-not-found",[25,113259,113260],{},"site not found",[14,113262,113263,113264,101077,113267,28463],{},"检查 XML 中是否有 ",[25,113265,113266],{},"site name=\"tip\"",[25,113268,113269],{},"site name=\"target\"",[188,113271,113272],{"id":113272},"机械臂完全不动",[14,113274,102582],{},[171,113276,113277,113282,113285,113290],{},[174,113278,113279,113281],{},[25,113280,102217],{}," 是否为 2",[174,113283,113284],{},"actuator 是否引用正确 joint",[174,113286,113287,113289],{},[25,113288,101135],{}," 是否被赋值",[174,113291,113292,113293],{},"是否执行了 ",[25,113294,100744],{},[188,113296,113297],{"id":113297},"控制效果不好",[14,113299,113300],{},"正常。本章重点不是控制器最优，而是任务结构:",[18,113302,113305],{"className":113303,"code":113304,"language":5264,"meta":23},[5262],"obs → action → mj_step → reward → next_obs\n",[25,113306,113304],{"__ignoreMap":23},[188,113308,113310],{"id":113309},"tip-坐标不变化","tip 坐标不变化",[14,113312,102634],{},[171,113314,113315,113320,113328,113337],{},[174,113316,113317,113318,28463],{},"是否每步调用了 ",[25,113319,100744],{},[174,113321,113322,113323,101077,113325,28463],{},"是否写入了 ",[25,113324,106185],{},[25,113326,113327],{},"data.ctrl[1]",[174,113329,113330,113331,428,113334,28463],{},"actuator 是否正确引用 ",[25,113332,113333],{},"joint1",[25,113335,113336],{},"joint2",[174,113338,113339],{},"控制输入是否太小。",[188,113341,113342],{"id":113342},"目标点不会动",[14,113344,113345],{},"本章的 target 是固定 site：",[18,113347,113349],{"className":53142,"code":113348,"language":53144,"meta":23,"style":23},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[25,113350,113351],{"__ignoreMap":23},[28,113352,113353,113355,113357,113359,113361,113363,113365,113367,113370],{"class":30,"line":31},[28,113354,99],{"class":34},[28,113356,103269],{"class":51375},[28,113358,14997],{"class":2040},[28,113360,39],{"class":34},[28,113362,112018],{"class":320},[28,113364,101165],{"class":2040},[28,113366,39],{"class":34},[28,113368,113369],{"class":320},"\"0.5 0 0.4\"",[28,113371,113372],{"class":34}," ...\u002F>\n",[14,113374,113375,113376,113378],{},"它直接挂在 ",[25,113377,101900],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[188,113380,113381],{"id":113381},"机械臂不像真实机械臂",[14,113383,113384],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[159,113386,102666],{"id":102665},[14,113388,113389],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113391,113392],{},"核心公式：",[18,113394,113397],{"className":113395,"code":113396,"language":5264,"meta":23},[5262],"distance = ||tip - target||\nreward = -distance - action_cost\n",[25,113398,113396],{"__ignoreMap":23},[14,113400,113401],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[136,113403,113404],{},"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":23,"searchDepth":94,"depth":94,"links":113406},[113407,113408,113409,113414,113418,113419,113420,113428],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":113410},[113411,113412,113413],{"id":111610,"depth":109,"text":111611},{"id":111686,"depth":109,"text":111686},{"id":111716,"depth":109,"text":111717},{"id":101311,"depth":94,"text":101312,"children":113415},[113416,113417],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":113421},[113422,113423,113424,113425,113426,113427],{"id":113257,"depth":109,"text":113260},{"id":113272,"depth":109,"text":113272},{"id":113297,"depth":109,"text":113297},{"id":113309,"depth":109,"text":113310},{"id":113342,"depth":109,"text":113342},{"id":113381,"depth":109,"text":113381},{"id":102665,"depth":94,"text":102666},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111414,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113435,"title":113436,"body":113437,"description":23,"extension":142,"meta":116899,"navigation":144,"path":116900,"seo":116901,"stem":116902,"__hash__":116903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113438,"toc":116870},[113439,113442,113444,113447,113450,113475,113478,113484,113487,113493,113495,113497,113521,113523,113541,113543,113586,113588,113615,113617,113620,113672,113675,113681,113690,113693,113731,113734,113773,113776,113784,113791,113794,113800,113802,113856,113863,113908,113911,113915,113931,113941,113943,115204,115206,115218,115220,115231,115233,115236,115257,115260,115263,115296,115302,115305,115338,115341,115344,115385,115390,115404,115407,115420,115425,115448,115450,115465,115475,115490,115497,115517,115532,115550,115553,115570,115578,115594,115600,115632,115645,115677,115687,115722,115736,115782,115796,115838,115849,115862,115868,115901,115904,115931,115941,115981,115991,116008,116015,116033,116036,116077,116090,116105,116108,116131,116134,116146,116149,116168,116173,116194,116197,116212,116215,116249,116261,116276,116279,116304,116307,116326,116329,116361,116364,116388,116394,116424,116431,116444,116447,116449,116451,116457,116460,116463,116475,116478,116480,116534,116536,116540,116546,116555,116558,116565,116567,116590,116593,116597,116599,116617,116623,116625,116658,116661,116667,116671,116674,116694,116699,116703,116710,116730,116735,116739,116742,116762,116765,116851,116855,116858,116864,116867],[10,113440,113436],{"id":113441},"_8gymnasium-风格强化学习接口基础",[159,113443,100706],{"id":100705},[14,113445,113446],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113448,113449],{},"你将实现:",[18,113451,113453],{"className":20,"code":113452,"language":22,"meta":23,"style":23},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[25,113454,113455,113465],{"__ignoreMap":23},[28,113456,113457,113460,113462],{"class":30,"line":31},[28,113458,113459],{"class":34},"obs, info ",[28,113461,39],{"class":38},[28,113463,113464],{"class":34}," env.reset()\n",[28,113466,113467,113470,113472],{"class":30,"line":94},[28,113468,113469],{"class":34},"obs, reward, terminated, truncated, info ",[28,113471,39],{"class":38},[28,113473,113474],{"class":34}," env.step(action)\n",[14,113476,113477],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113479,113480,113481,113483],{},"前面章节的代码都是“脚本式”的：在 ",[25,113482,102354],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113485,113486],{},"可以先记住 Gymnasium 环境的核心交互：",[18,113488,113491],{"className":113489,"code":113490,"language":5264,"meta":23},[5262],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[25,113492,113490],{"__ignoreMap":23},[159,113494,100829],{"id":100828},[14,113496,100832],{},[18,113498,113499],{"className":23899,"code":104447,"language":23901,"meta":23,"style":23},[25,113500,113501],{"__ignoreMap":23},[28,113502,113503,113505,113507,113509,113511,113513,113515,113517,113519],{"class":30,"line":31},[28,113504,24654],{"class":2040},[28,113506,26393],{"class":320},[28,113508,23911],{"class":320},[28,113510,26478],{"class":45},[28,113512,104462],{"class":320},[28,113514,100857],{"class":320},[28,113516,102560],{"class":320},[28,113518,100873],{"class":320},[28,113520,104471],{"class":320},[14,113522,102878],{},[18,113524,113526],{"className":23899,"code":113525,"language":23901,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113527,113528],{"__ignoreMap":23},[28,113529,113530,113532,113534,113536,113538],{"class":30,"line":31},[28,113531,23908],{"class":2040},[28,113533,23911],{"class":320},[28,113535,100989],{"class":320},[28,113537,107770],{"class":320},[28,113539,113540],{"class":320}," gymnasium\n",[14,113542,102895],{},[18,113544,113546],{"className":23899,"code":113545,"language":23901,"meta":23,"style":23},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113547,113548,113565,113574],{"__ignoreMap":23},[28,113549,113550,113552,113554,113556,113559,113561,113563],{"class":30,"line":31},[28,113551,30408],{"class":2040},[28,113553,29254],{"class":320},[28,113555,25193],{"class":45},[28,113557,113558],{"class":320}," mujoco-gym-api",[28,113560,101034],{"class":320},[28,113562,101037],{"class":45},[28,113564,101040],{"class":45},[28,113566,113567,113569,113571],{"class":30,"line":94},[28,113568,30408],{"class":2040},[28,113570,101047],{"class":320},[28,113572,113573],{"class":320}," mujoco-gym-api\n",[28,113575,113576,113578,113580,113582,113584],{"class":30,"line":109},[28,113577,23908],{"class":2040},[28,113579,23911],{"class":320},[28,113581,100989],{"class":320},[28,113583,107770],{"class":320},[28,113585,113540],{"class":320},[14,113587,101063],{},[171,113589,113590,113600,113603,113609],{},[174,113591,113592,113593,113596,113597,28463],{},"本章使用 ",[25,113594,113595],{},"gymnasium","，不是旧版 ",[25,113598,113599],{},"gym",[174,113601,113602],{},"Gymnasium API 与旧 Gym API 有差异。",[174,113604,113605,113606,28463],{},"旧 Gym 常见返回值是 4 个: ",[25,113607,113608],{},"obs, reward, done, info",[174,113610,113611,113612,28463],{},"Gymnasium 返回值是 5 个: ",[25,113613,113614],{},"obs, reward, terminated, truncated, info",[159,113616,101104],{"id":101103},[14,113618,113619],{},"强化学习环境接口包含:",[353,113621,113622,113631],{},[356,113623,113624],{},[359,113625,113626,113629],{},[362,113627,113628],{"align":23813},"方法",[362,113630,102755],{"align":23813},[400,113632,113633,113643,113653,113663],{},[359,113634,113635,113640],{},[405,113636,113637],{"align":23813},[25,113638,113639],{},"reset()",[405,113641,113642],{"align":23813},"重置环境",[359,113644,113645,113650],{},[405,113646,113647],{"align":23813},[25,113648,113649],{},"step(action)",[405,113651,113652],{"align":23813},"执行动作",[359,113654,113655,113660],{},[405,113656,113657],{"align":23813},[25,113658,113659],{},"observation_space",[405,113661,113662],{"align":23813},"观测空间",[359,113664,113665,113670],{},[405,113666,113667],{"align":23813},[25,113668,113669],{},"action_space",[405,113671,23731],{"align":23813},[14,113673,113674],{},"一个最小环境需要完成:",[18,113676,113679],{"className":113677,"code":113678,"language":5264,"meta":23},[5262],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[25,113680,113678],{"__ignoreMap":23},[188,113682,113684,101077,113687,104697],{"id":113683},"terminated-和-truncated-的区别",[25,113685,113686],{},"terminated",[25,113688,113689],{},"truncated",[14,113691,113692],{},"Gymnasium 把“结束”拆成两个概念：",[353,113694,113695,113705],{},[356,113696,113697],{},[359,113698,113699,113701,113703],{},[362,113700,104633],{"align":23813},[362,113702,100759],{"align":23813},[362,113704,21264],{"align":23813},[400,113706,113707,113719],{},[359,113708,113709,113713,113716],{},[405,113710,113711],{"align":23813},[25,113712,113686],{},[405,113714,113715],{"align":23813},"任务自然结束",[405,113717,113718],{"align":23813},"机械臂到达目标、机器人摔倒",[359,113720,113721,113725,113728],{},[405,113722,113723],{"align":23813},[25,113724,113689],{},[405,113726,113727],{"align":23813},"因外部限制截断",[405,113729,113730],{"align":23813},"达到最大步数、时间限制",[14,113732,113733],{},"本章中：",[18,113735,113737],{"className":20,"code":113736,"language":22,"meta":23,"style":23},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[25,113738,113739,113754],{"__ignoreMap":23},[28,113740,113741,113744,113746,113749,113751],{"class":30,"line":31},[28,113742,113743],{"class":34},"terminated ",[28,113745,39],{"class":38},[28,113747,113748],{"class":34}," dist ",[28,113750,99],{"class":38},[28,113752,113753],{"class":45}," 0.05\n",[28,113755,113756,113759,113761,113763,113766,113768,113770],{"class":30,"line":94},[28,113757,113758],{"class":34},"truncated ",[28,113760,39],{"class":38},[28,113762,38949],{"class":45},[28,113764,113765],{"class":34},".steps ",[28,113767,1787],{"class":38},[28,113769,38949],{"class":45},[28,113771,113772],{"class":34},".max_steps\n",[14,113774,113775],{},"也就是：",[171,113777,113778,113781],{},[174,113779,113780],{},"末端距离目标小于 0.05，任务成功结束。",[174,113782,113783],{},"步数超过上限，episode 被截断。",[188,113785,113787,101077,113789],{"id":113786},"observation_space-和-action_space",[25,113788,113659],{},[25,113790,113669],{},[14,113792,113793],{},"这两个对象告诉算法：",[18,113795,113798],{"className":113796,"code":113797,"language":5264,"meta":23},[5262],"观测长什么样\n动作允许多大\n",[25,113799,113797],{"__ignoreMap":23},[14,113801,14710],{},[18,113803,113805],{"className":20,"code":113804,"language":22,"meta":23,"style":23},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[25,113806,113807],{"__ignoreMap":23},[28,113808,113809,113811,113814,113816,113819,113822,113825,113827,113829,113832,113834,113836,113838,113840,113842,113844,113846,113849,113851,113853],{"class":30,"line":31},[28,113810,30899],{"class":45},[28,113812,113813],{"class":34},".action_space ",[28,113815,39],{"class":38},[28,113817,113818],{"class":34}," spaces.Box(",[28,113820,113821],{"class":5293},"low",[28,113823,113824],{"class":38},"=-",[28,113826,102462],{"class":45},[28,113828,12512],{"class":34},[28,113830,113831],{"class":5293},"high",[28,113833,39],{"class":38},[28,113835,102462],{"class":45},[28,113837,12512],{"class":34},[28,113839,96022],{"class":5293},[28,113841,39],{"class":38},[28,113843,221],{"class":34},[28,113845,52],{"class":45},[28,113847,113848],{"class":34},",), ",[28,113850,93575],{"class":5293},[28,113852,39],{"class":38},[28,113854,113855],{"class":34},"np.float32)\n",[14,113857,113858,113859,113862],{},"表示动作是 2 维数组，每个值都在 ",[25,113860,113861],{},"[-1, 1]"," 范围内。",[18,113864,113866],{"className":20,"code":113865,"language":22,"meta":23,"style":23},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[25,113867,113868],{"__ignoreMap":23},[28,113869,113870,113872,113875,113877,113879,113881,113883,113886,113888,113890,113892,113894,113896,113898,113900,113902,113904,113906],{"class":30,"line":31},[28,113871,30899],{"class":45},[28,113873,113874],{"class":34},".observation_space ",[28,113876,39],{"class":38},[28,113878,113818],{"class":34},[28,113880,113821],{"class":5293},[28,113882,113824],{"class":38},[28,113884,113885],{"class":34},"np.inf, ",[28,113887,113831],{"class":5293},[28,113889,39],{"class":38},[28,113891,113885],{"class":34},[28,113893,96022],{"class":5293},[28,113895,39],{"class":38},[28,113897,221],{"class":34},[28,113899,659],{"class":45},[28,113901,113848],{"class":34},[28,113903,93575],{"class":5293},[28,113905,39],{"class":38},[28,113907,113855],{"class":34},[14,113909,113910],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[188,113912,113914],{"id":113913},"frame_skip-是什么","frame_skip 是什么",[18,113916,113918],{"className":20,"code":113917,"language":22,"meta":23,"style":23},"self.frame_skip = 5\n",[25,113919,113920],{"__ignoreMap":23},[28,113921,113922,113924,113927,113929],{"class":30,"line":31},[28,113923,30899],{"class":45},[28,113925,113926],{"class":34},".frame_skip ",[28,113928,39],{"class":38},[28,113930,54502],{"class":45},[14,113932,113933,113934,113937,113938,113940],{},"表示外部调用一次 ",[25,113935,113936],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[25,113939,101274],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[159,113942,101312],{"id":101311},[18,113944,113946],{"className":20,"code":113945,"language":22,"meta":23,"style":23},"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",[25,113947,113948,113960,113966,113976,113987,113991,113995,114003,114008,114012,114016,114020,114024,114028,114032,114036,114041,114045,114049,114053,114058,114062,114066,114070,114074,114078,114082,114086,114090,114094,114098,114102,114106,114110,114128,114143,114147,114160,114170,114185,114202,114206,114227,114246,114271,114285,114289,114299,114311,114321,114325,114367,114405,114409,114419,114435,114450,114469,114476,114480,114493,114508,114523,114536,114555,114571,114575,114616,114631,114646,114650,114689,114700,114713,114717,114727,114736,114740,114750,114765,114783,114787,114798,114815,114828,114832,114842,114846,114857,114868,114872,114886,114900,114916,114920,114933,114950,114965,114972,114976,114980,114992,115002,115020,115032,115044,115048,115056,115072,115081,115090,115098,115140,115153,115158,115162,115180,115184,115188,115200],{"__ignoreMap":23},[28,113949,113950,113952,113955,113957],{"class":30,"line":31},[28,113951,30468],{"class":38},[28,113953,113954],{"class":34}," gymnasium ",[28,113956,31459],{"class":38},[28,113958,113959],{"class":34}," gym\n",[28,113961,113962,113964],{"class":30,"line":94},[28,113963,30468],{"class":38},[28,113965,101360],{"class":34},[28,113967,113968,113970,113972,113974],{"class":30,"line":109},[28,113969,30468],{"class":38},[28,113971,31456],{"class":34},[28,113973,31459],{"class":38},[28,113975,31462],{"class":34},[28,113977,113978,113980,113982,113984],{"class":30,"line":125},[28,113979,30813],{"class":38},[28,113981,113954],{"class":34},[28,113983,30468],{"class":38},[28,113985,113986],{"class":34}," spaces\n",[28,113988,113989],{"class":30,"line":131},[28,113990,2477],{"emptyLinePlaceholder":144},[28,113992,113993],{"class":30,"line":1291},[28,113994,2477],{"emptyLinePlaceholder":144},[28,113996,113997,113999,114001],{"class":30,"line":1297},[28,113998,101373],{"class":45},[28,114000,13641],{"class":38},[28,114002,101378],{"class":320},[28,114004,114005],{"class":30,"line":1388},[28,114006,114007],{"class":320},"\u003Cmujoco model=\"gym_reacher\">\n",[28,114009,114010],{"class":30,"line":1394},[28,114011,111797],{"class":320},[28,114013,114014],{"class":30,"line":1406},[28,114015,2477],{"emptyLinePlaceholder":144},[28,114017,114018],{"class":30,"line":1689},[28,114019,101397],{"class":320},[28,114021,114022],{"class":30,"line":1694},[28,114023,111815],{"class":320},[28,114025,114026],{"class":30,"line":1700},[28,114027,2477],{"emptyLinePlaceholder":144},[28,114029,114030],{"class":30,"line":1705},[28,114031,111824],{"class":320},[28,114033,114034],{"class":30,"line":1719},[28,114035,111829],{"class":320},[28,114037,114038],{"class":30,"line":1724},[28,114039,114040],{"class":320},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114042,114043],{"class":30,"line":1730},[28,114044,2477],{"emptyLinePlaceholder":144},[28,114046,114047],{"class":30,"line":1751},[28,114048,111843],{"class":320},[28,114050,114051],{"class":30,"line":1756},[28,114052,111848],{"class":320},[28,114054,114055],{"class":30,"line":1770},[28,114056,114057],{"class":320},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114059,114060],{"class":30,"line":1775},[28,114061,111858],{"class":320},[28,114063,114064],{"class":30,"line":1804},[28,114065,106497],{"class":320},[28,114067,114068],{"class":30,"line":1809},[28,114069,101426],{"class":320},[28,114071,114072],{"class":30,"line":1826},[28,114073,101431],{"class":320},[28,114075,114076],{"class":30,"line":1831},[28,114077,2477],{"emptyLinePlaceholder":144},[28,114079,114080],{"class":30,"line":1836},[28,114081,106514],{"class":320},[28,114083,114084],{"class":30,"line":1841},[28,114085,111883],{"class":320},[28,114087,114088],{"class":30,"line":1855},[28,114089,111888],{"class":320},[28,114091,114092],{"class":30,"line":1860},[28,114093,106524],{"class":320},[28,114095,114096],{"class":30,"line":2654},[28,114097,101436],{"class":320},[28,114099,114100],{"class":30,"line":2668},[28,114101,95757],{"class":320},[28,114103,114104],{"class":30,"line":2676},[28,114105,2477],{"emptyLinePlaceholder":144},[28,114107,114108],{"class":30,"line":2681},[28,114109,2477],{"emptyLinePlaceholder":144},[28,114111,114112,114114,114117,114119,114121,114123,114126],{"class":30,"line":2687},[28,114113,14771],{"class":38},[28,114115,114116],{"class":2040}," ReacherEnv",[28,114118,221],{"class":34},[28,114120,113599],{"class":2040},[28,114122,768],{"class":34},[28,114124,114125],{"class":2040},"Env",[28,114127,30862],{"class":34},[28,114129,114130,114133,114135,114137,114140],{"class":30,"line":2693},[28,114131,114132],{"class":34},"    metadata ",[28,114134,39],{"class":38},[28,114136,4525],{"class":34},[28,114138,114139],{"class":320},"\"render_modes\"",[28,114141,114142],{"class":34},": []}\n",[28,114144,114145],{"class":30,"line":2698},[28,114146,2477],{"emptyLinePlaceholder":144},[28,114148,114149,114151,114153,114156,114158],{"class":30,"line":8025},[28,114150,30877],{"class":38},[28,114152,30880],{"class":45},[28,114154,114155],{"class":34},"(self) -> ",[28,114157,95745],{"class":45},[28,114159,3816],{"class":34},[28,114161,114162,114164,114166,114168],{"class":30,"line":8049},[28,114163,30893],{"class":45},[28,114165,17338],{"class":34},[28,114167,30905],{"class":45},[28,114169,2053],{"class":34},[28,114171,114172,114174,114177,114179,114181,114183],{"class":30,"line":8054},[28,114173,30921],{"class":45},[28,114175,114176],{"class":34},".model ",[28,114178,39],{"class":38},[28,114180,101471],{"class":34},[28,114182,101373],{"class":45},[28,114184,227],{"class":34},[28,114186,114187,114189,114192,114194,114197,114199],{"class":30,"line":8060},[28,114188,30921],{"class":45},[28,114190,114191],{"class":34},".data ",[28,114193,39],{"class":38},[28,114195,114196],{"class":34}," mujoco.MjData(",[28,114198,30899],{"class":45},[28,114200,114201],{"class":34},".model)\n",[28,114203,114204],{"class":30,"line":8087},[28,114205,2477],{"emptyLinePlaceholder":144},[28,114207,114208,114210,114213,114215,114218,114220,114223,114225],{"class":30,"line":8092},[28,114209,30921],{"class":45},[28,114211,114212],{"class":34},".tip_site_id ",[28,114214,39],{"class":38},[28,114216,114217],{"class":34}," mujoco.mj_name2id(",[28,114219,30899],{"class":45},[28,114221,114222],{"class":34},".model, mujoco.mjtObj.mjOBJ_SITE, ",[28,114224,111595],{"class":320},[28,114226,227],{"class":34},[28,114228,114229,114231,114234,114236,114238,114240,114242,114244],{"class":30,"line":8098},[28,114230,30921],{"class":45},[28,114232,114233],{"class":34},".target_site_id ",[28,114235,39],{"class":38},[28,114237,114217],{"class":34},[28,114239,30899],{"class":45},[28,114241,114222],{"class":34},[28,114243,112018],{"class":320},[28,114245,227],{"class":34},[28,114247,114248,114250,114252,114254,114256,114258,114261,114263,114265,114267,114269],{"class":30,"line":8110},[28,114249,2574],{"class":38},[28,114251,38949],{"class":45},[28,114253,114212],{"class":34},[28,114255,99],{"class":38},[28,114257,4170],{"class":45},[28,114259,114260],{"class":38}," or",[28,114262,38949],{"class":45},[28,114264,114233],{"class":34},[28,114266,99],{"class":38},[28,114268,4170],{"class":45},[28,114270,3816],{"class":34},[28,114272,114273,114276,114278,114280,114283],{"class":30,"line":8122},[28,114274,114275],{"class":38},"            raise",[28,114277,103494],{"class":45},[28,114279,221],{"class":34},[28,114281,114282],{"class":320},"\"required sites not found\"",[28,114284,227],{"class":34},[28,114286,114287],{"class":30,"line":8134},[28,114288,2477],{"emptyLinePlaceholder":144},[28,114290,114291,114293,114295,114297],{"class":30,"line":9793},[28,114292,30921],{"class":45},[28,114294,113926],{"class":34},[28,114296,39],{"class":38},[28,114298,54502],{"class":45},[28,114300,114301,114303,114306,114308],{"class":30,"line":9818},[28,114302,30921],{"class":45},[28,114304,114305],{"class":34},".max_steps ",[28,114307,39],{"class":38},[28,114309,114310],{"class":45}," 200\n",[28,114312,114313,114315,114317,114319],{"class":30,"line":9841},[28,114314,30921],{"class":45},[28,114316,113765],{"class":34},[28,114318,39],{"class":38},[28,114320,47409],{"class":45},[28,114322,114323],{"class":30,"line":9865},[28,114324,2477],{"emptyLinePlaceholder":144},[28,114326,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357,114359,114361,114363,114365],{"class":30,"line":9870},[28,114328,30921],{"class":45},[28,114330,113813],{"class":34},[28,114332,39],{"class":38},[28,114334,113818],{"class":34},[28,114336,113821],{"class":5293},[28,114338,113824],{"class":38},[28,114340,102462],{"class":45},[28,114342,12512],{"class":34},[28,114344,113831],{"class":5293},[28,114346,39],{"class":38},[28,114348,102462],{"class":45},[28,114350,12512],{"class":34},[28,114352,96022],{"class":5293},[28,114354,39],{"class":38},[28,114356,221],{"class":34},[28,114358,52],{"class":45},[28,114360,113848],{"class":34},[28,114362,93575],{"class":5293},[28,114364,39],{"class":38},[28,114366,113855],{"class":34},[28,114368,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391,114393,114395,114397,114399,114401,114403],{"class":30,"line":9875},[28,114370,30921],{"class":45},[28,114372,113874],{"class":34},[28,114374,39],{"class":38},[28,114376,113818],{"class":34},[28,114378,113821],{"class":5293},[28,114380,113824],{"class":38},[28,114382,113885],{"class":34},[28,114384,113831],{"class":5293},[28,114386,39],{"class":38},[28,114388,113885],{"class":34},[28,114390,96022],{"class":5293},[28,114392,39],{"class":38},[28,114394,221],{"class":34},[28,114396,659],{"class":45},[28,114398,113848],{"class":34},[28,114400,93575],{"class":5293},[28,114402,39],{"class":38},[28,114404,113855],{"class":34},[28,114406,114407],{"class":30,"line":9880},[28,114408,2477],{"emptyLinePlaceholder":144},[28,114410,114411,114413,114416],{"class":30,"line":9889},[28,114412,30877],{"class":38},[28,114414,114415],{"class":2040}," _get_obs",[28,114417,114418],{"class":34},"(self) -> np.ndarray:\n",[28,114420,114421,114423,114425,114427,114430,114432],{"class":30,"line":9894},[28,114422,112196],{"class":34},[28,114424,39],{"class":38},[28,114426,38949],{"class":45},[28,114428,114429],{"class":34},".data.site_xpos[",[28,114431,30899],{"class":45},[28,114433,114434],{"class":34},".tip_site_id].copy()\n",[28,114436,114437,114439,114441,114443,114445,114447],{"class":30,"line":9900},[28,114438,112209],{"class":34},[28,114440,39],{"class":38},[28,114442,38949],{"class":45},[28,114444,114429],{"class":34},[28,114446,30899],{"class":45},[28,114448,114449],{"class":34},".target_site_id].copy()\n",[28,114451,114452,114454,114456,114459,114461,114464,114466],{"class":30,"line":9921},[28,114453,110241],{"class":34},[28,114455,39],{"class":38},[28,114457,114458],{"class":34}," np.concatenate([",[28,114460,30899],{"class":45},[28,114462,114463],{"class":34},".data.qpos.copy(), ",[28,114465,30899],{"class":45},[28,114467,114468],{"class":34},".data.qvel.copy(), tip, target])\n",[28,114470,114471,114473],{"class":30,"line":9927},[28,114472,14829],{"class":38},[28,114474,114475],{"class":34}," obs.astype(np.float32)\n",[28,114477,114478],{"class":30,"line":9941},[28,114479,2477],{"emptyLinePlaceholder":144},[28,114481,114482,114484,114487,114489,114491],{"class":30,"line":9947},[28,114483,30877],{"class":38},[28,114485,114486],{"class":2040}," _get_reward",[28,114488,114155],{"class":34},[28,114490,260],{"class":45},[28,114492,3816],{"class":34},[28,114494,114495,114497,114499,114501,114503,114505],{"class":30,"line":9974},[28,114496,112196],{"class":34},[28,114498,39],{"class":38},[28,114500,38949],{"class":45},[28,114502,114429],{"class":34},[28,114504,30899],{"class":45},[28,114506,114507],{"class":34},".tip_site_id]\n",[28,114509,114510,114512,114514,114516,114518,114520],{"class":30,"line":9983},[28,114511,112209],{"class":34},[28,114513,39],{"class":38},[28,114515,38949],{"class":45},[28,114517,114429],{"class":34},[28,114519,30899],{"class":45},[28,114521,114522],{"class":34},".target_site_id]\n",[28,114524,114525,114528,114530,114532,114534],{"class":30,"line":9989},[28,114526,114527],{"class":34},"        dist ",[28,114529,39],{"class":38},[28,114531,111660],{"class":34},[28,114533,742],{"class":38},[28,114535,111665],{"class":34},[28,114537,114538,114541,114543,114545,114547,114550,114552],{"class":30,"line":9997},[28,114539,114540],{"class":34},"        control_cost ",[28,114542,39],{"class":38},[28,114544,112096],{"class":45},[28,114546,6595],{"class":38},[28,114548,114549],{"class":34}," np.sum(np.square(",[28,114551,30899],{"class":45},[28,114553,114554],{"class":34},".data.ctrl))\n",[28,114556,114557,114559,114561,114563,114565,114567,114569],{"class":30,"line":10002},[28,114558,14829],{"class":38},[28,114560,109856],{"class":45},[28,114562,221],{"class":34},[28,114564,742],{"class":38},[28,114566,111655],{"class":34},[28,114568,742],{"class":38},[28,114570,112118],{"class":34},[28,114572,114573],{"class":30,"line":16681},[28,114574,2477],{"emptyLinePlaceholder":144},[28,114576,114577,114579,114582,114585,114587,114590,114592,114594,114596,114598,114600,114603,114606,114608,114610,114612,114614],{"class":30,"line":16687},[28,114578,30877],{"class":38},[28,114580,114581],{"class":2040}," reset",[28,114583,114584],{"class":34},"(self, ",[28,114586,668],{"class":38},[28,114588,114589],{"class":34},", seed: ",[28,114591,224],{"class":45},[28,114593,25187],{"class":38},[28,114595,39009],{"class":45},[28,114597,13641],{"class":38},[28,114599,39009],{"class":45},[28,114601,114602],{"class":34},", options: ",[28,114604,114605],{"class":45},"dict",[28,114607,25187],{"class":38},[28,114609,39009],{"class":45},[28,114611,13641],{"class":38},[28,114613,39009],{"class":45},[28,114615,30862],{"class":34},[28,114617,114618,114620,114623,114626,114628],{"class":30,"line":16710},[28,114619,30893],{"class":45},[28,114621,114622],{"class":34},"().reset(",[28,114624,114625],{"class":5293},"seed",[28,114627,39],{"class":38},[28,114629,114630],{"class":34},"seed)\n",[28,114632,114633,114636,114638,114641,114643],{"class":30,"line":16716},[28,114634,114635],{"class":34},"        mujoco.mj_resetData(",[28,114637,30899],{"class":45},[28,114639,114640],{"class":34},".model, ",[28,114642,30899],{"class":45},[28,114644,114645],{"class":34},".data)\n",[28,114647,114648],{"class":30,"line":16739},[28,114649,2477],{"emptyLinePlaceholder":144},[28,114651,114652,114654,114657,114659,114661,114664,114666,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686],{"class":30,"line":16753},[28,114653,30921],{"class":45},[28,114655,114656],{"class":34},".data.qpos[:] ",[28,114658,39],{"class":38},[28,114660,38949],{"class":45},[28,114662,114663],{"class":34},".np_random.uniform(",[28,114665,113821],{"class":5293},[28,114667,113824],{"class":38},[28,114669,86285],{"class":45},[28,114671,12512],{"class":34},[28,114673,113831],{"class":5293},[28,114675,39],{"class":38},[28,114677,86285],{"class":45},[28,114679,12512],{"class":34},[28,114681,31572],{"class":5293},[28,114683,39],{"class":38},[28,114685,30899],{"class":45},[28,114687,114688],{"class":34},".model.nq)\n",[28,114690,114691,114693,114696,114698],{"class":30,"line":16773},[28,114692,30921],{"class":45},[28,114694,114695],{"class":34},".data.qvel[:] ",[28,114697,39],{"class":38},[28,114699,104820],{"class":45},[28,114701,114702,114705,114707,114709,114711],{"class":30,"line":16779},[28,114703,114704],{"class":34},"        mujoco.mj_forward(",[28,114706,30899],{"class":45},[28,114708,114640],{"class":34},[28,114710,30899],{"class":45},[28,114712,114645],{"class":34},[28,114714,114715],{"class":30,"line":16790},[28,114716,2477],{"emptyLinePlaceholder":144},[28,114718,114719,114721,114723,114725],{"class":30,"line":16813},[28,114720,30921],{"class":45},[28,114722,113765],{"class":34},[28,114724,39],{"class":38},[28,114726,47409],{"class":45},[28,114728,114729,114731,114733],{"class":30,"line":16835},[28,114730,14829],{"class":38},[28,114732,38949],{"class":45},[28,114734,114735],{"class":34},"._get_obs(), {}\n",[28,114737,114738],{"class":30,"line":16840},[28,114739,2477],{"emptyLinePlaceholder":144},[28,114741,114742,114744,114747],{"class":30,"line":16846},[28,114743,30877],{"class":38},[28,114745,114746],{"class":2040}," step",[28,114748,114749],{"class":34},"(self, action):\n",[28,114751,114752,114754,114756,114759,114761,114763],{"class":30,"line":16860},[28,114753,110281],{"class":34},[28,114755,39],{"class":38},[28,114757,114758],{"class":34}," np.asarray(action, ",[28,114760,93575],{"class":5293},[28,114762,39],{"class":38},[28,114764,113855],{"class":34},[28,114766,114767,114769,114771,114773,114775,114778,114780],{"class":30,"line":16873},[28,114768,110281],{"class":34},[28,114770,39],{"class":38},[28,114772,107506],{"class":34},[28,114774,30899],{"class":45},[28,114776,114777],{"class":34},".action_space.low, ",[28,114779,30899],{"class":45},[28,114781,114782],{"class":34},".action_space.high)\n",[28,114784,114785],{"class":30,"line":16878},[28,114786,2477],{"emptyLinePlaceholder":144},[28,114788,114789,114791,114794,114796],{"class":30,"line":16892},[28,114790,30921],{"class":45},[28,114792,114793],{"class":34},".data.ctrl[:] ",[28,114795,39],{"class":38},[28,114797,107529],{"class":34},[28,114799,114800,114802,114804,114806,114808,114810,114812],{"class":30,"line":16897},[28,114801,3480],{"class":38},[28,114803,101560],{"class":34},[28,114805,26121],{"class":38},[28,114807,32519],{"class":45},[28,114809,221],{"class":34},[28,114811,30899],{"class":45},[28,114813,114814],{"class":34},".frame_skip):\n",[28,114816,114817,114820,114822,114824,114826],{"class":30,"line":16903},[28,114818,114819],{"class":34},"            mujoco.mj_step(",[28,114821,30899],{"class":45},[28,114823,114640],{"class":34},[28,114825,30899],{"class":45},[28,114827,114645],{"class":34},[28,114829,114830],{"class":30,"line":16908},[28,114831,2477],{"emptyLinePlaceholder":144},[28,114833,114834,114836,114838,114840],{"class":30,"line":16922},[28,114835,30921],{"class":45},[28,114837,113765],{"class":34},[28,114839,9554],{"class":38},[28,114841,55774],{"class":45},[28,114843,114844],{"class":30,"line":16927},[28,114845,2477],{"emptyLinePlaceholder":144},[28,114847,114848,114850,114852,114854],{"class":30,"line":16932},[28,114849,110241],{"class":34},[28,114851,39],{"class":38},[28,114853,38949],{"class":45},[28,114855,114856],{"class":34},"._get_obs()\n",[28,114858,114859,114861,114863,114865],{"class":30,"line":16946},[28,114860,110346],{"class":34},[28,114862,39],{"class":38},[28,114864,38949],{"class":45},[28,114866,114867],{"class":34},"._get_reward()\n",[28,114869,114870],{"class":30,"line":16958},[28,114871,2477],{"emptyLinePlaceholder":144},[28,114873,114874,114876,114878,114880,114882,114884],{"class":30,"line":16963},[28,114875,112196],{"class":34},[28,114877,39],{"class":38},[28,114879,38949],{"class":45},[28,114881,114429],{"class":34},[28,114883,30899],{"class":45},[28,114885,114507],{"class":34},[28,114887,114888,114890,114892,114894,114896,114898],{"class":30,"line":16976},[28,114889,112209],{"class":34},[28,114891,39],{"class":38},[28,114893,38949],{"class":45},[28,114895,114429],{"class":34},[28,114897,30899],{"class":45},[28,114899,114522],{"class":34},[28,114901,114902,114904,114906,114908,114911,114913],{"class":30,"line":16981},[28,114903,114527],{"class":34},[28,114905,39],{"class":38},[28,114907,109856],{"class":45},[28,114909,114910],{"class":34},"(np.linalg.norm(tip ",[28,114912,742],{"class":38},[28,114914,114915],{"class":34}," target))\n",[28,114917,114918],{"class":30,"line":16986},[28,114919,2477],{"emptyLinePlaceholder":144},[28,114921,114922,114925,114927,114929,114931],{"class":30,"line":16991},[28,114923,114924],{"class":34},"        terminated ",[28,114926,39],{"class":38},[28,114928,113748],{"class":34},[28,114930,99],{"class":38},[28,114932,113753],{"class":45},[28,114934,114935,114938,114940,114942,114944,114946,114948],{"class":30,"line":17004},[28,114936,114937],{"class":34},"        truncated ",[28,114939,39],{"class":38},[28,114941,38949],{"class":45},[28,114943,113765],{"class":34},[28,114945,1787],{"class":38},[28,114947,38949],{"class":45},[28,114949,113772],{"class":34},[28,114951,114952,114955,114957,114959,114962],{"class":30,"line":17009},[28,114953,114954],{"class":34},"        info ",[28,114956,39],{"class":38},[28,114958,4525],{"class":34},[28,114960,114961],{"class":320},"\"distance\"",[28,114963,114964],{"class":34},": dist}\n",[28,114966,114967,114969],{"class":30,"line":32709},[28,114968,14829],{"class":38},[28,114970,114971],{"class":34}," obs, reward, terminated, truncated, info\n",[28,114973,114974],{"class":30,"line":32715},[28,114975,2477],{"emptyLinePlaceholder":144},[28,114977,114978],{"class":30,"line":32721},[28,114979,2477],{"emptyLinePlaceholder":144},[28,114981,114982,114984,114986,114988,114990],{"class":30,"line":32727},[28,114983,32023],{"class":38},[28,114985,2050],{"class":2040},[28,114987,101457],{"class":34},[28,114989,95745],{"class":45},[28,114991,3816],{"class":34},[28,114993,114994,114997,114999],{"class":30,"line":32733},[28,114995,114996],{"class":34},"    env ",[28,114998,39],{"class":38},[28,115000,115001],{"class":34}," ReacherEnv()\n",[28,115003,115004,115007,115009,115012,115014,115016,115018],{"class":30,"line":32744},[28,115005,115006],{"class":34},"    obs, info ",[28,115008,39],{"class":38},[28,115010,115011],{"class":34}," env.reset(",[28,115013,114625],{"class":5293},[28,115015,39],{"class":38},[28,115017,407],{"class":45},[28,115019,227],{"class":34},[28,115021,115022,115024,115026,115029],{"class":30,"line":32750},[28,115023,31375],{"class":45},[28,115025,221],{"class":34},[28,115027,115028],{"class":320},"\"initial obs shape:\"",[28,115030,115031],{"class":34},", obs.shape)\n",[28,115033,115034,115036,115038,115041],{"class":30,"line":32770},[28,115035,31375],{"class":45},[28,115037,221],{"class":34},[28,115039,115040],{"class":320},"\"initial info:\"",[28,115042,115043],{"class":34},", info)\n",[28,115045,115046],{"class":30,"line":32776},[28,115047,2477],{"emptyLinePlaceholder":144},[28,115049,115050,115052,115054],{"class":30,"line":32787},[28,115051,110212],{"class":34},[28,115053,39],{"class":38},[28,115055,104820],{"class":45},[28,115057,115058,115060,115062,115064,115066,115068,115070],{"class":30,"line":32793},[28,115059,3278],{"class":38},[28,115061,31692],{"class":34},[28,115063,26121],{"class":38},[28,115065,32519],{"class":45},[28,115067,221],{"class":34},[28,115069,102],{"class":45},[28,115071,30862],{"class":34},[28,115073,115074,115076,115078],{"class":30,"line":32799},[28,115075,110281],{"class":34},[28,115077,39],{"class":38},[28,115079,115080],{"class":34}," env.action_space.sample()\n",[28,115082,115083,115086,115088],{"class":30,"line":32805},[28,115084,115085],{"class":34},"        obs, reward, terminated, truncated, info ",[28,115087,39],{"class":38},[28,115089,113474],{"class":34},[28,115091,115092,115094,115096],{"class":30,"line":32811},[28,115093,110356],{"class":34},[28,115095,9554],{"class":38},[28,115097,110361],{"class":34},[28,115099,115100,115102,115104,115106,115108,115111,115113,115115,115118,115120,115122,115125,115127,115129,115132,115134,115136,115138],{"class":30,"line":32817},[28,115101,32527],{"class":45},[28,115103,221],{"class":34},[28,115105,110390],{"class":320},[28,115107,110393],{"class":34},[28,115109,115110],{"class":320},"\"reward:\"",[28,115112,12512],{"class":34},[28,115114,32094],{"class":45},[28,115116,115117],{"class":34},"(reward, ",[28,115119,57],{"class":45},[28,115121,110404],{"class":34},[28,115123,115124],{"class":320},"\"distance:\"",[28,115126,12512],{"class":34},[28,115128,32094],{"class":45},[28,115130,115131],{"class":34},"(info[",[28,115133,114961],{"class":320},[28,115135,112261],{"class":34},[28,115137,57],{"class":45},[28,115139,30573],{"class":34},[28,115141,115142,115144,115147,115150],{"class":30,"line":32823},[28,115143,2574],{"class":38},[28,115145,115146],{"class":34}," terminated ",[28,115148,115149],{"class":38},"or",[28,115151,115152],{"class":34}," truncated:\n",[28,115154,115155],{"class":30,"line":32829},[28,115156,115157],{"class":38},"            break\n",[28,115159,115160],{"class":30,"line":32849},[28,115161,2477],{"emptyLinePlaceholder":144},[28,115163,115164,115166,115168,115170,115172,115174,115176,115178],{"class":30,"line":32855},[28,115165,31375],{"class":45},[28,115167,221],{"class":34},[28,115169,110435],{"class":320},[28,115171,12512],{"class":34},[28,115173,32094],{"class":45},[28,115175,110442],{"class":34},[28,115177,57],{"class":45},[28,115179,30573],{"class":34},[28,115181,115182],{"class":30,"line":32871},[28,115183,2477],{"emptyLinePlaceholder":144},[28,115185,115186],{"class":30,"line":32877},[28,115187,2477],{"emptyLinePlaceholder":144},[28,115189,115190,115192,115194,115196,115198],{"class":30,"line":32891},[28,115191,1608],{"class":38},[28,115193,31296],{"class":45},[28,115195,101618],{"class":38},[28,115197,101621],{"class":320},[28,115199,3816],{"class":34},[28,115201,115202],{"class":30,"line":32897},[28,115203,101628],{"class":34},[14,115205,103629],{},[18,115207,115209],{"className":23899,"code":115208,"language":23901,"meta":23,"style":23},"touch ch8_gym_env.py\n",[25,115210,115211],{"__ignoreMap":23},[28,115212,115213,115215],{"class":30,"line":31},[28,115214,101342],{"class":2040},[28,115216,115217],{"class":320}," ch8_gym_env.py\n",[14,115219,110503],{},[18,115221,115223],{"className":23899,"code":115222,"language":23901,"meta":23,"style":23},"python ch8_gym_env.py\n",[25,115224,115225],{"__ignoreMap":23},[28,115226,115227,115229],{"class":30,"line":31},[28,115228,22],{"class":2040},[28,115230,115217],{"class":320},[188,115232,101631],{"id":101631},[14,115234,115235],{},"继承 Gymnasium 环境：",[18,115237,115239],{"className":20,"code":115238,"language":22,"meta":23,"style":23},"class ReacherEnv(gym.Env):\n",[25,115240,115241],{"__ignoreMap":23},[28,115242,115243,115245,115247,115249,115251,115253,115255],{"class":30,"line":31},[28,115244,14771],{"class":38},[28,115246,114116],{"class":2040},[28,115248,221],{"class":34},[28,115250,113599],{"class":2040},[28,115252,768],{"class":34},[28,115254,114125],{"class":2040},[28,115256,30862],{"class":34},[14,115258,115259],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115261,115262],{},"初始化模型：",[18,115264,115266],{"className":20,"code":115265,"language":22,"meta":23,"style":23},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[25,115267,115268,115282],{"__ignoreMap":23},[28,115269,115270,115272,115274,115276,115278,115280],{"class":30,"line":31},[28,115271,30899],{"class":45},[28,115273,114176],{"class":34},[28,115275,39],{"class":38},[28,115277,101471],{"class":34},[28,115279,101373],{"class":45},[28,115281,227],{"class":34},[28,115283,115284,115286,115288,115290,115292,115294],{"class":30,"line":94},[28,115285,30899],{"class":45},[28,115287,114191],{"class":34},[28,115289,39],{"class":38},[28,115291,114196],{"class":34},[28,115293,30899],{"class":45},[28,115295,114201],{"class":34},[14,115297,115298,115299,115301],{},"这和前面章节一样，只是现在放到了类的 ",[25,115300,30905],{}," 里。",[14,115303,115304],{},"缓存 site ID：",[18,115306,115308],{"className":20,"code":115307,"language":22,"meta":23,"style":23},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[25,115309,115310,115324],{"__ignoreMap":23},[28,115311,115312,115314,115316,115318,115320,115322],{"class":30,"line":31},[28,115313,30899],{"class":45},[28,115315,114212],{"class":34},[28,115317,39],{"class":38},[28,115319,114217],{"class":34},[28,115321,89629],{"class":45},[28,115323,227],{"class":34},[28,115325,115326,115328,115330,115332,115334,115336],{"class":30,"line":94},[28,115327,30899],{"class":45},[28,115329,114233],{"class":34},[28,115331,39],{"class":38},[28,115333,114217],{"class":34},[28,115335,89629],{"class":45},[28,115337,227],{"class":34},[14,115339,115340],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115342,115343],{},"reset：",[18,115345,115347],{"className":20,"code":115346,"language":22,"meta":23,"style":23},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[25,115348,115349],{"__ignoreMap":23},[28,115350,115351,115353,115355,115357,115359,115361,115363,115365,115367,115369,115371,115373,115375,115377,115379,115381,115383],{"class":30,"line":31},[28,115352,32023],{"class":38},[28,115354,114581],{"class":2040},[28,115356,114584],{"class":34},[28,115358,668],{"class":38},[28,115360,114589],{"class":34},[28,115362,224],{"class":45},[28,115364,25187],{"class":38},[28,115366,39009],{"class":45},[28,115368,13641],{"class":38},[28,115370,39009],{"class":45},[28,115372,114602],{"class":34},[28,115374,114605],{"class":45},[28,115376,25187],{"class":38},[28,115378,39009],{"class":45},[28,115380,13641],{"class":38},[28,115382,39009],{"class":45},[28,115384,30862],{"class":34},[14,115386,115387,115389],{},[25,115388,70131],{}," 做四件事：",[171,115391,115392,115395,115398,115401],{},[174,115393,115394],{},"设置随机种子。",[174,115396,115397],{},"重置 MuJoCo data。",[174,115399,115400],{},"随机初始化关节角。",[174,115402,115403],{},"返回初始观测和 info。",[14,115405,115406],{},"step：",[18,115408,115410],{"className":20,"code":115409,"language":22,"meta":23,"style":23},"def step(self, action):\n",[25,115411,115412],{"__ignoreMap":23},[28,115413,115414,115416,115418],{"class":30,"line":31},[28,115415,32023],{"class":38},[28,115417,114746],{"class":2040},[28,115419,114749],{"class":34},[14,115421,115422,115424],{},[25,115423,107193],{}," 做六件事：",[171,115426,115427,115430,115436,115439,115442,115445],{},[174,115428,115429],{},"检查并裁剪 action。",[174,115431,115432,115433,28463],{},"写入 ",[25,115434,115435],{},"self.data.ctrl",[174,115437,115438],{},"连续推进若干个 MuJoCo 物理步。",[174,115440,115441],{},"计算新观测。",[174,115443,115444],{},"计算奖励和结束条件。",[174,115446,115447],{},"返回 Gymnasium 标准五元组。",[188,115449,101767],{"id":101767},[18,115451,115453],{"className":20,"code":115452,"language":22,"meta":23,"style":23},"import gymnasium as gym\n",[25,115454,115455],{"__ignoreMap":23},[28,115456,115457,115459,115461,115463],{"class":30,"line":31},[28,115458,30468],{"class":38},[28,115460,113954],{"class":34},[28,115462,31459],{"class":38},[28,115464,113959],{"class":34},[14,115466,115467,115468,115470,115471,115474],{},"导入 Gymnasium，并起别名 ",[25,115469,113599],{},"。后面写 ",[25,115472,115473],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[18,115476,115478],{"className":20,"code":115477,"language":22,"meta":23,"style":23},"from gymnasium import spaces\n",[25,115479,115480],{"__ignoreMap":23},[28,115481,115482,115484,115486,115488],{"class":30,"line":31},[28,115483,30813],{"class":38},[28,115485,113954],{"class":34},[28,115487,30468],{"class":38},[28,115489,113986],{"class":34},[14,115491,115492,115493,115496],{},"导入空间定义工具。",[25,115494,115495],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[18,115498,115499],{"className":20,"code":115238,"language":22,"meta":23,"style":23},[25,115500,115501],{"__ignoreMap":23},[28,115502,115503,115505,115507,115509,115511,115513,115515],{"class":30,"line":31},[28,115504,14771],{"class":38},[28,115506,114116],{"class":2040},[28,115508,221],{"class":34},[28,115510,113599],{"class":2040},[28,115512,768],{"class":34},[28,115514,114125],{"class":2040},[28,115516,30862],{"class":34},[14,115518,115519,115520,115523,115524,115526,115527,101077,115529,115531],{},"定义一个类，名字叫 ",[25,115521,115522],{},"ReacherEnv","。括号里的 ",[25,115525,115473],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[25,115528,70131],{},[25,115530,107193],{}," 这两个核心方法。",[18,115533,115535],{"className":20,"code":115534,"language":22,"meta":23,"style":23},"metadata = {\"render_modes\": []}\n",[25,115536,115537],{"__ignoreMap":23},[28,115538,115539,115542,115544,115546,115548],{"class":30,"line":31},[28,115540,115541],{"class":34},"metadata ",[28,115543,39],{"class":38},[28,115545,4525],{"class":34},[28,115547,114139],{"class":320},[28,115549,114142],{"class":34},[14,115551,115552],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[18,115554,115556],{"className":20,"code":115555,"language":22,"meta":23,"style":23},"def __init__(self) -> None:\n",[25,115557,115558],{"__ignoreMap":23},[28,115559,115560,115562,115564,115566,115568],{"class":30,"line":31},[28,115561,32023],{"class":38},[28,115563,30880],{"class":45},[28,115565,114155],{"class":34},[28,115567,95745],{"class":45},[28,115569,3816],{"class":34},[14,115571,115572,115574,115575,28463],{},[25,115573,30905],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[25,115576,115577],{},"env = ReacherEnv()",[18,115579,115581],{"className":20,"code":115580,"language":22,"meta":23,"style":23},"super().__init__()\n",[25,115582,115583],{"__ignoreMap":23},[28,115584,115585,115588,115590,115592],{"class":30,"line":31},[28,115586,115587],{"class":45},"super",[28,115589,17338],{"class":34},[28,115591,30905],{"class":45},[28,115593,2053],{"class":34},[14,115595,115596,115597,115599],{},"调用父类 ",[25,115598,115473],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[18,115601,115602],{"className":20,"code":115265,"language":22,"meta":23,"style":23},[25,115603,115604,115618],{"__ignoreMap":23},[28,115605,115606,115608,115610,115612,115614,115616],{"class":30,"line":31},[28,115607,30899],{"class":45},[28,115609,114176],{"class":34},[28,115611,39],{"class":38},[28,115613,101471],{"class":34},[28,115615,101373],{"class":45},[28,115617,227],{"class":34},[28,115619,115620,115622,115624,115626,115628,115630],{"class":30,"line":94},[28,115621,30899],{"class":45},[28,115623,114191],{"class":34},[28,115625,39],{"class":38},[28,115627,114196],{"class":34},[28,115629,30899],{"class":45},[28,115631,114201],{"class":34},[14,115633,115634,115635,115637,115638,101077,115641,115644],{},"把 MuJoCo 模型和状态保存到 ",[25,115636,30899],{}," 上。",[25,115639,115640],{},"self.model",[25,115642,115643],{},"self.data"," 表示这个环境对象自己的模型和状态。",[18,115646,115647],{"className":20,"code":115307,"language":22,"meta":23,"style":23},[25,115648,115649,115663],{"__ignoreMap":23},[28,115650,115651,115653,115655,115657,115659,115661],{"class":30,"line":31},[28,115652,30899],{"class":45},[28,115654,114212],{"class":34},[28,115656,39],{"class":38},[28,115658,114217],{"class":34},[28,115660,89629],{"class":45},[28,115662,227],{"class":34},[28,115664,115665,115667,115669,115671,115673,115675],{"class":30,"line":94},[28,115666,30899],{"class":45},[28,115668,114233],{"class":34},[28,115670,39],{"class":38},[28,115672,114217],{"class":34},[28,115674,89629],{"class":45},[28,115676,227],{"class":34},[14,115678,115679,115680,101077,115683,115686],{},"提前查好 tip 和 target 的 site ID。这样 ",[25,115681,115682],{},"_get_obs",[25,115684,115685],{},"_get_reward"," 里就不用每次按名字查找。",[18,115688,115690],{"className":20,"code":115689,"language":22,"meta":23,"style":23},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[25,115691,115692,115702,115712],{"__ignoreMap":23},[28,115693,115694,115696,115698,115700],{"class":30,"line":31},[28,115695,30899],{"class":45},[28,115697,113926],{"class":34},[28,115699,39],{"class":38},[28,115701,54502],{"class":45},[28,115703,115704,115706,115708,115710],{"class":30,"line":94},[28,115705,30899],{"class":45},[28,115707,114305],{"class":34},[28,115709,39],{"class":38},[28,115711,114310],{"class":45},[28,115713,115714,115716,115718,115720],{"class":30,"line":109},[28,115715,30899],{"class":45},[28,115717,113765],{"class":34},[28,115719,39],{"class":38},[28,115721,47409],{"class":45},[14,115723,115724,115727,115728,115731,115732,115735],{},[25,115725,115726],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[25,115729,115730],{},"max_steps"," 是一个 episode 最多运行多少步。",[25,115733,115734],{},"steps"," 记录当前 episode 已经走了多少步。",[18,115737,115738],{"className":20,"code":113804,"language":22,"meta":23,"style":23},[25,115739,115740],{"__ignoreMap":23},[28,115741,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780],{"class":30,"line":31},[28,115743,30899],{"class":45},[28,115745,113813],{"class":34},[28,115747,39],{"class":38},[28,115749,113818],{"class":34},[28,115751,113821],{"class":5293},[28,115753,113824],{"class":38},[28,115755,102462],{"class":45},[28,115757,12512],{"class":34},[28,115759,113831],{"class":5293},[28,115761,39],{"class":38},[28,115763,102462],{"class":45},[28,115765,12512],{"class":34},[28,115767,96022],{"class":5293},[28,115769,39],{"class":38},[28,115771,221],{"class":34},[28,115773,52],{"class":45},[28,115775,113848],{"class":34},[28,115777,93575],{"class":5293},[28,115779,39],{"class":38},[28,115781,113855],{"class":34},[14,115783,115784,115785,115788,115789,101077,115792,115795],{},"定义动作空间。",[25,115786,115787],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[25,115790,115791],{},"low=-1.0",[25,115793,115794],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[18,115797,115798],{"className":20,"code":113865,"language":22,"meta":23,"style":23},[25,115799,115800],{"__ignoreMap":23},[28,115801,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824,115826,115828,115830,115832,115834,115836],{"class":30,"line":31},[28,115803,30899],{"class":45},[28,115805,113874],{"class":34},[28,115807,39],{"class":38},[28,115809,113818],{"class":34},[28,115811,113821],{"class":5293},[28,115813,113824],{"class":38},[28,115815,113885],{"class":34},[28,115817,113831],{"class":5293},[28,115819,39],{"class":38},[28,115821,113885],{"class":34},[28,115823,96022],{"class":5293},[28,115825,39],{"class":38},[28,115827,221],{"class":34},[28,115829,659],{"class":45},[28,115831,113848],{"class":34},[28,115833,93575],{"class":5293},[28,115835,39],{"class":38},[28,115837,113855],{"class":34},[14,115839,115840,115841,115844,115845,115848],{},"定义观测空间。",[25,115842,115843],{},"shape=(10,)"," 表示观测是 10 个数。",[25,115846,115847],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[18,115850,115852],{"className":20,"code":115851,"language":22,"meta":23,"style":23},"def _get_obs(self) -> np.ndarray:\n",[25,115853,115854],{"__ignoreMap":23},[28,115855,115856,115858,115860],{"class":30,"line":31},[28,115857,32023],{"class":38},[28,115859,114415],{"class":2040},[28,115861,114418],{"class":34},[14,115863,115864,115865,115867],{},"定义内部函数，用来生成观测。函数名前面的 ",[25,115866,1196],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[18,115869,115871],{"className":20,"code":115870,"language":22,"meta":23,"style":23},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[25,115872,115873,115887],{"__ignoreMap":23},[28,115874,115875,115877,115879,115881,115883,115885],{"class":30,"line":31},[28,115876,111627],{"class":34},[28,115878,39],{"class":38},[28,115880,38949],{"class":45},[28,115882,114429],{"class":34},[28,115884,30899],{"class":45},[28,115886,114434],{"class":34},[28,115888,115889,115891,115893,115895,115897,115899],{"class":30,"line":94},[28,115890,111637],{"class":34},[28,115892,39],{"class":38},[28,115894,38949],{"class":45},[28,115896,114429],{"class":34},[28,115898,30899],{"class":45},[28,115900,114449],{"class":34},[14,115902,115903],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[18,115905,115907],{"className":20,"code":115906,"language":22,"meta":23,"style":23},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[25,115908,115909,115925],{"__ignoreMap":23},[28,115910,115911,115913,115915,115917,115919,115921,115923],{"class":30,"line":31},[28,115912,110913],{"class":34},[28,115914,39],{"class":38},[28,115916,114458],{"class":34},[28,115918,30899],{"class":45},[28,115920,114463],{"class":34},[28,115922,30899],{"class":45},[28,115924,114468],{"class":34},[28,115926,115927,115929],{"class":30,"line":94},[28,115928,17123],{"class":38},[28,115930,114475],{"class":34},[14,115932,115933,115934,115937,115938,115940],{},"拼接观测，并转换成 ",[25,115935,115936],{},"float32","。很多强化学习库默认使用 ",[25,115939,115936],{},"，所以这里主动转换。",[18,115942,115943],{"className":20,"code":115346,"language":22,"meta":23,"style":23},[25,115944,115945],{"__ignoreMap":23},[28,115946,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979],{"class":30,"line":31},[28,115948,32023],{"class":38},[28,115950,114581],{"class":2040},[28,115952,114584],{"class":34},[28,115954,668],{"class":38},[28,115956,114589],{"class":34},[28,115958,224],{"class":45},[28,115960,25187],{"class":38},[28,115962,39009],{"class":45},[28,115964,13641],{"class":38},[28,115966,39009],{"class":45},[28,115968,114602],{"class":34},[28,115970,114605],{"class":45},[28,115972,25187],{"class":38},[28,115974,39009],{"class":45},[28,115976,13641],{"class":38},[28,115978,39009],{"class":45},[28,115980,30862],{"class":34},[14,115982,115983,115984,115986,115987,115990],{},"定义 reset。",[25,115985,114625],{}," 用来控制随机数，保证实验可以复现。",[25,115988,115989],{},"options"," 用来接收额外配置，本章暂时不用。",[18,115992,115994],{"className":20,"code":115993,"language":22,"meta":23,"style":23},"super().reset(seed=seed)\n",[25,115995,115996],{"__ignoreMap":23},[28,115997,115998,116000,116002,116004,116006],{"class":30,"line":31},[28,115999,115587],{"class":45},[28,116001,114622],{"class":34},[28,116003,114625],{"class":5293},[28,116005,39],{"class":38},[28,116007,114630],{"class":34},[14,116009,116010,116011,116014],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[25,116012,116013],{},"self.np_random"," 生成可复现的随机数。",[18,116016,116018],{"className":20,"code":116017,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(self.model, self.data)\n",[25,116019,116020],{"__ignoreMap":23},[28,116021,116022,116025,116027,116029,116031],{"class":30,"line":31},[28,116023,116024],{"class":34},"mujoco.mj_resetData(",[28,116026,30899],{"class":45},[28,116028,114640],{"class":34},[28,116030,30899],{"class":45},[28,116032,114645],{"class":34},[14,116034,116035],{},"把 MuJoCo 状态重置到默认状态。",[18,116037,116039],{"className":20,"code":116038,"language":22,"meta":23,"style":23},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[25,116040,116041],{"__ignoreMap":23},[28,116042,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075],{"class":30,"line":31},[28,116044,30899],{"class":45},[28,116046,114656],{"class":34},[28,116048,39],{"class":38},[28,116050,38949],{"class":45},[28,116052,114663],{"class":34},[28,116054,113821],{"class":5293},[28,116056,113824],{"class":38},[28,116058,86285],{"class":45},[28,116060,12512],{"class":34},[28,116062,113831],{"class":5293},[28,116064,39],{"class":38},[28,116066,86285],{"class":45},[28,116068,12512],{"class":34},[28,116070,31572],{"class":5293},[28,116072,39],{"class":38},[28,116074,30899],{"class":45},[28,116076,114688],{"class":34},[14,116078,115400,116079,116082,116083,116086,116087,116089],{},[25,116080,116081],{},"[:]"," 表示修改整个数组。",[25,116084,116085],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[25,116088,102209],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[18,116091,116093],{"className":20,"code":116092,"language":22,"meta":23,"style":23},"self.data.qvel[:] = 0.0\n",[25,116094,116095],{"__ignoreMap":23},[28,116096,116097,116099,116101,116103],{"class":30,"line":31},[28,116098,30899],{"class":45},[28,116100,114695],{"class":34},[28,116102,39],{"class":38},[28,116104,104820],{"class":45},[14,116106,116107],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[18,116109,116111],{"className":20,"code":116110,"language":22,"meta":23,"style":23},"self.steps = 0\nreturn self._get_obs(), {}\n",[25,116112,116113,116123],{"__ignoreMap":23},[28,116114,116115,116117,116119,116121],{"class":30,"line":31},[28,116116,30899],{"class":45},[28,116118,113765],{"class":34},[28,116120,39],{"class":38},[28,116122,47409],{"class":45},[28,116124,116125,116127,116129],{"class":30,"line":94},[28,116126,17123],{"class":38},[28,116128,38949],{"class":45},[28,116130,114735],{"class":34},[14,116132,116133],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[18,116135,116136],{"className":20,"code":115409,"language":22,"meta":23,"style":23},[25,116137,116138],{"__ignoreMap":23},[28,116139,116140,116142,116144],{"class":30,"line":31},[28,116141,32023],{"class":38},[28,116143,114746],{"class":2040},[28,116145,114749],{"class":34},[14,116147,116148],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[18,116150,116152],{"className":20,"code":116151,"language":22,"meta":23,"style":23},"action = np.asarray(action, dtype=np.float32)\n",[25,116153,116154],{"__ignoreMap":23},[28,116155,116156,116158,116160,116162,116164,116166],{"class":30,"line":31},[28,116157,107501],{"class":34},[28,116159,39],{"class":38},[28,116161,114758],{"class":34},[28,116163,93575],{"class":5293},[28,116165,39],{"class":38},[28,116167,113855],{"class":34},[14,116169,116170,116171,28463],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[25,116172,115936],{},[18,116174,116176],{"className":20,"code":116175,"language":22,"meta":23,"style":23},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[25,116177,116178],{"__ignoreMap":23},[28,116179,116180,116182,116184,116186,116188,116190,116192],{"class":30,"line":31},[28,116181,107501],{"class":34},[28,116183,39],{"class":38},[28,116185,107506],{"class":34},[28,116187,30899],{"class":45},[28,116189,114777],{"class":34},[28,116191,30899],{"class":45},[28,116193,114782],{"class":34},[14,116195,116196],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[18,116198,116200],{"className":20,"code":116199,"language":22,"meta":23,"style":23},"self.data.ctrl[:] = action\n",[25,116201,116202],{"__ignoreMap":23},[28,116203,116204,116206,116208,116210],{"class":30,"line":31},[28,116205,30899],{"class":45},[28,116207,114793],{"class":34},[28,116209,39],{"class":38},[28,116211,107529],{"class":34},[14,116213,116214],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[18,116216,116218],{"className":20,"code":116217,"language":22,"meta":23,"style":23},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[25,116219,116220,116236],{"__ignoreMap":23},[28,116221,116222,116224,116226,116228,116230,116232,116234],{"class":30,"line":31},[28,116223,3102],{"class":38},[28,116225,101560],{"class":34},[28,116227,26121],{"class":38},[28,116229,32519],{"class":45},[28,116231,221],{"class":34},[28,116233,30899],{"class":45},[28,116235,114814],{"class":34},[28,116237,116238,116241,116243,116245,116247],{"class":30,"line":94},[28,116239,116240],{"class":34},"    mujoco.mj_step(",[28,116242,30899],{"class":45},[28,116244,114640],{"class":34},[28,116246,30899],{"class":45},[28,116248,114645],{"class":34},[14,116250,116251,116252,116255,116256,116258,116259,28463],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[25,116253,116254],{},"frame_skip=5","，所以外部调用一次 ",[25,116257,113936],{},"，内部实际执行 5 次 ",[25,116260,101274],{},[18,116262,116264],{"className":20,"code":116263,"language":22,"meta":23,"style":23},"self.steps += 1\n",[25,116265,116266],{"__ignoreMap":23},[28,116267,116268,116270,116272,116274],{"class":30,"line":31},[28,116269,30899],{"class":45},[28,116271,113765],{"class":34},[28,116273,9554],{"class":38},[28,116275,55774],{"class":45},[14,116277,116278],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[18,116280,116282],{"className":20,"code":116281,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nreward = self._get_reward()\n",[25,116283,116284,116294],{"__ignoreMap":23},[28,116285,116286,116288,116290,116292],{"class":30,"line":31},[28,116287,110913],{"class":34},[28,116289,39],{"class":38},[28,116291,38949],{"class":45},[28,116293,114856],{"class":34},[28,116295,116296,116298,116300,116302],{"class":30,"line":94},[28,116297,111064],{"class":34},[28,116299,39],{"class":38},[28,116301,38949],{"class":45},[28,116303,114867],{"class":34},[14,116305,116306],{},"计算新的观测和奖励。",[18,116308,116310],{"className":20,"code":116309,"language":22,"meta":23,"style":23},"dist = float(np.linalg.norm(tip - target))\n",[25,116311,116312],{"__ignoreMap":23},[28,116313,116314,116316,116318,116320,116322,116324],{"class":30,"line":31},[28,116315,111655],{"class":34},[28,116317,39],{"class":38},[28,116319,109856],{"class":45},[28,116321,114910],{"class":34},[28,116323,742],{"class":38},[28,116325,114915],{"class":34},[14,116327,116328],{},"计算末端到目标的距离，并转换成 Python float。",[18,116330,116331],{"className":20,"code":113736,"language":22,"meta":23,"style":23},[25,116332,116333,116345],{"__ignoreMap":23},[28,116334,116335,116337,116339,116341,116343],{"class":30,"line":31},[28,116336,113743],{"class":34},[28,116338,39],{"class":38},[28,116340,113748],{"class":34},[28,116342,99],{"class":38},[28,116344,113753],{"class":45},[28,116346,116347,116349,116351,116353,116355,116357,116359],{"class":30,"line":94},[28,116348,113758],{"class":34},[28,116350,39],{"class":38},[28,116352,38949],{"class":45},[28,116354,113765],{"class":34},[28,116356,1787],{"class":38},[28,116358,38949],{"class":45},[28,116360,113772],{"class":34},[14,116362,116363],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[18,116365,116367],{"className":20,"code":116366,"language":22,"meta":23,"style":23},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[25,116368,116369,116382],{"__ignoreMap":23},[28,116370,116371,116374,116376,116378,116380],{"class":30,"line":31},[28,116372,116373],{"class":34},"info ",[28,116375,39],{"class":38},[28,116377,4525],{"class":34},[28,116379,114961],{"class":320},[28,116381,114964],{"class":34},[28,116383,116384,116386],{"class":30,"line":94},[28,116385,17123],{"class":38},[28,116387,114971],{"class":34},[14,116389,116390,116393],{},[25,116391,116392],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[18,116395,116397],{"className":20,"code":116396,"language":22,"meta":23,"style":23},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[25,116398,116399,116408],{"__ignoreMap":23},[28,116400,116401,116404,116406],{"class":30,"line":31},[28,116402,116403],{"class":34},"env ",[28,116405,39],{"class":38},[28,116407,115001],{"class":34},[28,116409,116410,116412,116414,116416,116418,116420,116422],{"class":30,"line":94},[28,116411,113459],{"class":34},[28,116413,39],{"class":38},[28,116415,115011],{"class":34},[28,116417,114625],{"class":5293},[28,116419,39],{"class":38},[28,116421,407],{"class":45},[28,116423,227],{"class":34},[14,116425,116426,116427,116430],{},"创建环境并重置。",[25,116428,116429],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[18,116432,116434],{"className":20,"code":116433,"language":22,"meta":23,"style":23},"action = env.action_space.sample()\n",[25,116435,116436],{"__ignoreMap":23},[28,116437,116438,116440,116442],{"class":30,"line":31},[28,116439,107501],{"class":34},[28,116441,39],{"class":38},[28,116443,115080],{"class":34},[14,116445,116446],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[159,116448,102375],{"id":102374},[14,116450,105543],{},[18,116452,116455],{"className":116453,"code":116454,"language":5264,"meta":23},[5262],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[25,116456,116454],{"__ignoreMap":23},[14,116458,116459],{},"这个环境已经具备强化学习环境的基本结构。",[14,116461,116462],{},"主函数里使用随机动作：",[18,116464,116465],{"className":20,"code":116433,"language":22,"meta":23,"style":23},[25,116466,116467],{"__ignoreMap":23},[28,116468,116469,116471,116473],{"class":30,"line":31},[28,116470,107501],{"class":34},[28,116472,39],{"class":38},[28,116474,115080],{"class":34},[14,116476,116477],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[159,116479,102407],{"id":102406},[171,116481,116482,116485,116491,116500,116509,116518,116524],{},[174,116483,116484],{},"运行程序。",[174,116486,116487,116488,28463],{},"确认 ",[25,116489,116490],{},"obs.shape == (10,)",[174,116492,111240,116493,116496,116497,28463],{},[25,116494,116495],{},"env.action_space","，应类似 ",[25,116498,116499],{},"Box(-1.0, 1.0, (2,), float32)",[174,116501,105644,116502,116505,116506,28463],{},[25,116503,116504],{},"self.max_steps = 10","，确认环境会更快 ",[25,116507,116508],{},"truncated=True",[174,116510,102470,116511,102473,116514,116517],{},[25,116512,116513],{},"terminated = dist \u003C 0.05",[25,116515,116516],{},"dist \u003C 0.2","，观察是否更容易结束。",[174,116519,102470,116520,116523],{},[25,116521,116522],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[174,116525,116526,116527,116529,116530,116533],{},"在 ",[25,116528,116392],{}," 里加入 ",[25,116531,116532],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[159,116535,102512],{"id":102511},[188,116537,116539],{"id":116538},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116541,116542,116543,116545],{},"Gymnasium 的 ",[25,116544,107193],{}," 返回 5 个值:",[18,116547,116549],{"className":20,"code":116548,"language":22,"meta":23,"style":23},"obs, reward, terminated, truncated, info\n",[25,116550,116551],{"__ignoreMap":23},[28,116552,116553],{"class":30,"line":31},[28,116554,116548],{"class":34},[14,116556,116557],{},"不是旧 Gym 的 4 个值。",[188,116559,116561,116564],{"id":116560},"datactrl-action-维度错误",[25,116562,116563],{},"data.ctrl[:] = action"," 维度错误",[14,116566,102582],{},[18,116568,116570],{"className":20,"code":116569,"language":22,"meta":23,"style":23},"print(self.model.nu)\nprint(action.shape)\n",[25,116571,116572,116583],{"__ignoreMap":23},[28,116573,116574,116576,116578,116580],{"class":30,"line":31},[28,116575,30491],{"class":45},[28,116577,221],{"class":34},[28,116579,30899],{"class":45},[28,116581,116582],{"class":34},".model.nu)\n",[28,116584,116585,116587],{"class":30,"line":94},[28,116586,30491],{"class":45},[28,116588,116589],{"class":34},"(action.shape)\n",[14,116591,116592],{},"两者必须匹配。",[188,116594,116596],{"id":116595},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116598,102521],{},[18,116600,116602],{"className":20,"code":116601,"language":22,"meta":23,"style":23},"mujoco.mj_forward(self.model, self.data)\n",[25,116603,116604],{"__ignoreMap":23},[28,116605,116606,116609,116611,116613,116615],{"class":30,"line":31},[28,116607,116608],{"class":34},"mujoco.mj_forward(",[28,116610,30899],{"class":45},[28,116612,114640],{"class":34},[28,116614,30899],{"class":45},[28,116616,114645],{"class":34},[188,116618,116620,116622],{"id":116619},"observation_space-维度和-obs-不一致",[25,116621,113659],{}," 维度和 obs 不一致",[14,116624,102634],{},[18,116626,116628],{"className":20,"code":116627,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[25,116629,116630,116640,116647],{"__ignoreMap":23},[28,116631,116632,116634,116636,116638],{"class":30,"line":31},[28,116633,110913],{"class":34},[28,116635,39],{"class":38},[28,116637,38949],{"class":45},[28,116639,114856],{"class":34},[28,116641,116642,116644],{"class":30,"line":94},[28,116643,30491],{"class":45},[28,116645,116646],{"class":34},"(obs.shape)\n",[28,116648,116649,116651,116653,116655],{"class":30,"line":109},[28,116650,30491],{"class":45},[28,116652,221],{"class":34},[28,116654,30899],{"class":45},[28,116656,116657],{"class":34},".observation_space.shape)\n",[14,116659,116660],{},"两者必须一致。本章观测是：",[18,116662,116665],{"className":116663,"code":116664,"language":5264,"meta":23},[5262],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[25,116666,116664],{"__ignoreMap":23},[188,116668,116670],{"id":116669},"action-超过范围","action 超过范围",[14,116672,116673],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[18,116675,116676],{"className":20,"code":116175,"language":22,"meta":23,"style":23},[25,116677,116678],{"__ignoreMap":23},[28,116679,116680,116682,116684,116686,116688,116690,116692],{"class":30,"line":31},[28,116681,107501],{"class":34},[28,116683,39],{"class":38},[28,116685,107506],{"class":34},[28,116687,30899],{"class":45},[28,116689,114777],{"class":34},[28,116691,30899],{"class":45},[28,116693,114782],{"class":34},[14,116695,116696,116697,28463],{},"这能避免无效动作直接写入 ",[25,116698,101135],{},[188,116700,116702],{"id":116701},"忘记返回-info","忘记返回 info",[14,116704,116542,116705,101077,116707,116709],{},[25,116706,70131],{},[25,116708,107193],{}," 都会返回 info：",[18,116711,116712],{"className":20,"code":113452,"language":22,"meta":23,"style":23},[25,116713,116714,116722],{"__ignoreMap":23},[28,116715,116716,116718,116720],{"class":30,"line":31},[28,116717,113459],{"class":34},[28,116719,39],{"class":38},[28,116721,113464],{"class":34},[28,116723,116724,116726,116728],{"class":30,"line":94},[28,116725,113469],{"class":34},[28,116727,39],{"class":38},[28,116729,113474],{"class":34},[14,116731,116732,116733,28463],{},"即使暂时没有额外信息，也返回 ",[25,116734,32535],{},[159,116736,116738],{"id":116737},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116740,116741],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[171,116743,116744,116747,116750,116753,116756,116759],{},[174,116745,116746],{},"更稳定的 reward。",[174,116748,116749],{},"合理的 episode 长度。",[174,116751,116752],{},"可重复的随机目标采样。",[174,116754,116755],{},"render 接口。",[174,116757,116758],{},"环境注册代码。",[174,116760,116761],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116763,116764],{},"如果只是自己写训练循环，最小形式是：",[18,116766,116768],{"className":20,"code":116767,"language":22,"meta":23,"style":23},"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",[25,116769,116770,116778,116794,116798,116814,116823,116832,116842],{"__ignoreMap":23},[28,116771,116772,116774,116776],{"class":30,"line":31},[28,116773,116403],{"class":34},[28,116775,39],{"class":38},[28,116777,115001],{"class":34},[28,116779,116780,116782,116784,116786,116788,116790,116792],{"class":30,"line":94},[28,116781,113459],{"class":34},[28,116783,39],{"class":38},[28,116785,115011],{"class":34},[28,116787,114625],{"class":5293},[28,116789,39],{"class":38},[28,116791,407],{"class":45},[28,116793,227],{"class":34},[28,116795,116796],{"class":30,"line":109},[28,116797,2477],{"emptyLinePlaceholder":144},[28,116799,116800,116802,116804,116806,116808,116810,116812],{"class":30,"line":125},[28,116801,3102],{"class":38},[28,116803,101560],{"class":34},[28,116805,26121],{"class":38},[28,116807,32519],{"class":45},[28,116809,221],{"class":34},[28,116811,6487],{"class":45},[28,116813,30862],{"class":34},[28,116815,116816,116819,116821],{"class":30,"line":131},[28,116817,116818],{"class":34},"    action ",[28,116820,39],{"class":38},[28,116822,115080],{"class":34},[28,116824,116825,116828,116830],{"class":30,"line":1291},[28,116826,116827],{"class":34},"    obs, reward, terminated, truncated, info ",[28,116829,39],{"class":38},[28,116831,113474],{"class":34},[28,116833,116834,116836,116838,116840],{"class":30,"line":1297},[28,116835,3178],{"class":38},[28,116837,115146],{"class":34},[28,116839,115149],{"class":38},[28,116841,115152],{"class":34},[28,116843,116844,116847,116849],{"class":30,"line":1388},[28,116845,116846],{"class":34},"        obs, info ",[28,116848,39],{"class":38},[28,116850,113464],{"class":34},[159,116852,116854],{"id":116853},"_9本章小结","9.本章小结",[14,116856,116857],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[18,116859,116862],{"className":116860,"code":116861,"language":5264,"meta":23},[5262],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[25,116863,116861],{"__ignoreMap":23},[14,116865,116866],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[136,116868,116869],{},"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":23,"searchDepth":94,"depth":94,"links":116871},[116872,116873,116874,116881,116885,116886,116887,116897,116898],{"id":100705,"depth":94,"text":100706},{"id":100828,"depth":94,"text":100829},{"id":101103,"depth":94,"text":101104,"children":116875},[116876,116878,116880],{"id":113683,"depth":109,"text":116877},"terminated 和 truncated 的区别",{"id":113786,"depth":109,"text":116879},"observation_space 和 action_space",{"id":113913,"depth":109,"text":113914},{"id":101311,"depth":94,"text":101312,"children":116882},[116883,116884],{"id":101631,"depth":109,"text":101631},{"id":101767,"depth":109,"text":101767},{"id":102374,"depth":94,"text":102375},{"id":102406,"depth":94,"text":102407},{"id":102511,"depth":94,"text":102512,"children":116888},[116889,116890,116892,116893,116895,116896],{"id":116538,"depth":109,"text":116539},{"id":116560,"depth":109,"text":116891},"data.ctrl[:] = action 维度错误",{"id":116595,"depth":109,"text":116596},{"id":116619,"depth":109,"text":116894},"observation_space 维度和 obs 不一致",{"id":116669,"depth":109,"text":116670},{"id":116701,"depth":109,"text":116702},{"id":116737,"depth":94,"text":116738},{"id":116853,"depth":94,"text":116854},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113436,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116905,"title":116906,"body":116907,"description":117330,"extension":142,"meta":117331,"navigation":144,"path":117332,"seo":117333,"stem":117334,"__hash__":117335},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116908,"toc":117320},[116909,116913,116916,116919,116939,116945,116951,116961,116964,116967,116987,116990,116994,116997,117003,117006,117020,117023,117026,117100,117103,117109,117112,117135,117138,117188,117191,117197,117200,117203,117206,117225,117228,117234,117237,117240,117243,117263,117266,117269,117272,117317],[10,116910,116912],{"id":116911},"mujoco-学习","MuJoCo 学习",[14,116914,116915],{},"初版",[14,116917,116918],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[171,116920,116921,116924,116927,116936],{},[174,116922,116923],{},"MuJoCo 模型文件在描述什么。",[174,116925,116926],{},"Python 代码怎样读取和推进仿真。",[174,116928,116929,428,116931,428,116933,116935],{},[25,116930,104089],{},[25,116932,104419],{},[25,116934,104422],{}," 这些数组为什么重要。",[174,116937,116938],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116940,116941,116942,116944],{},"默认环境为 Fedora 44、Python >= 3.10、",[25,116943,101086],{}," 官方 Python bindings。",[14,116946,116947,116948,116950],{},"注意：本文禁止使用 ",[25,116949,101071],{},"。所有示例均使用：",[18,116952,116953],{"className":20,"code":101637,"language":22,"meta":23,"style":23},[25,116954,116955],{"__ignoreMap":23},[28,116956,116957,116959],{"class":30,"line":31},[28,116958,30468],{"class":38},[28,116960,101360],{"class":34},[159,116962,116963],{"id":116963},"适合谁阅读",[14,116965,116966],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[171,116968,116969,116972,116975,116978],{},[174,116970,116971],{},"没学过 MuJoCo，只会一点 Python。",[174,116973,116974],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[174,116976,116977],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[174,116979,116980,116981,116983,116984,116986],{},"以前接触过 ",[25,116982,101071],{},"，现在想迁移到官方 ",[25,116985,101080],{}," Python bindings。",[14,116988,116989],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[159,116991,116993],{"id":116992},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116995,116996],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[18,116998,117001],{"className":116999,"code":117000,"language":5264,"meta":23},[5262],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[25,117002,117000],{"__ignoreMap":23},[14,117004,117005],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[171,117007,117008,117011,117014,117017],{},[174,117009,117010],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[174,117012,117013],{},"快速测试控制算法，不必一开始就上真实机器人。",[174,117015,117016],{},"生成强化学习环境。",[174,117018,117019],{},"采集状态、动作、图像、奖励等训练数据。",[159,117021,117022],{"id":117022},"学习前的心智模型",[14,117024,117025],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[353,117027,117028,117040],{},[356,117029,117030],{},[359,117031,117032,117035,117038],{},[362,117033,117034],{"align":23813},"部分",[362,117036,117037],{"align":23813},"负责什么",[362,117039,21264],{"align":23813},[400,117041,117042,117053,117065,117077,117089],{},[359,117043,117044,117047,117050],{},[405,117045,117046],{"align":23813},"MJCF XML",[405,117048,117049],{"align":23813},"定义世界和机器人结构",[405,117051,117052],{"align":23813},"地面、盒子、关节、电机、摄像头",[359,117054,117055,117059,117062],{},[405,117056,117057],{"align":23813},[25,117058,100768],{},[405,117060,117061],{"align":23813},"编译后的静态模型",[405,117063,117064],{"align":23813},"有几个关节、有几个电机、时间步长是多少",[359,117066,117067,117071,117074],{},[405,117068,117069],{"align":23813},[25,117070,100778],{},[405,117072,117073],{"align":23813},"运行中的动态状态",[405,117075,117076],{"align":23813},"当前时间、位置、速度、电机输入",[359,117078,117079,117083,117086],{},[405,117080,117081],{"align":23813},[25,117082,101274],{},[405,117084,117085],{"align":23813},"推进一步物理仿真",[405,117087,117088],{"align":23813},"根据重力、力、碰撞更新状态",[359,117090,117091,117094,117097],{},[405,117092,117093],{"align":23813},"Viewer \u002F Renderer",[405,117095,117096],{"align":23813},"把仿真显示出来",[405,117098,117099],{"align":23813},"打开窗口或保存图片",[14,117101,117102],{},"一句话总结：",[18,117104,117107],{"className":117105,"code":117106,"language":5264,"meta":23},[5262],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[25,117108,117106],{"__ignoreMap":23},[14,117110,117111],{},"参考来源：",[1211,117113,117114,117121,117128],{},[174,117115,117116,117117],{},"MuJoCo Python 官方文档：",[35,117118,117119],{"href":117119,"rel":117120},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23942],[174,117122,117123,117124],{},"MuJoCo XML Reference：",[35,117125,117126],{"href":117126,"rel":117127},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23942],[174,117129,117130,117131],{},"MuJoCo Overview：",[35,117132,117133],{"href":117133,"rel":117134},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23942],[159,117136,117137],{"id":117137},"章节目录",[171,117139,117140,117146,117152,117158,117164,117170,117176,117182],{},[174,117141,117142],{},[35,117143,117145],{"href":117144},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[174,117147,117148],{},[35,117149,117151],{"href":117150},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[174,117153,117154],{},[35,117155,117157],{"href":117156},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[174,117159,117160],{},[35,117161,117163],{"href":117162},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[174,117165,117166],{},[35,117167,117169],{"href":117168},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[174,117171,117172],{},[35,117173,117175],{"href":117174},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[174,117177,117178],{},[35,117179,117181],{"href":117180},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[174,117183,117184],{},[35,117185,117187],{"href":117186},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[159,117189,117190],{"id":117190},"推荐学习路线",[18,117192,117195],{"className":117193,"code":117194,"language":5264,"meta":23},[5262],"环境安装\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",[25,117196,117194],{"__ignoreMap":23},[14,117198,117199],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[159,117201,117202],{"id":117202},"建议的目录结构",[14,117204,117205],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[18,117207,117209],{"className":23899,"code":117208,"language":23901,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[25,117210,117211,117219],{"__ignoreMap":23},[28,117212,117213,117215,117217],{"class":30,"line":31},[28,117214,101325],{"class":2040},[28,117216,29294],{"class":45},[28,117218,101330],{"class":320},[28,117220,117221,117223],{"class":30,"line":94},[28,117222,101335],{"class":45},[28,117224,101330],{"class":320},[14,117226,117227],{},"每一章的代码都单独保存：",[18,117229,117232],{"className":117230,"code":117231,"language":5264,"meta":23},[5262],"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",[25,117233,117231],{"__ignoreMap":23},[14,117235,117236],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[159,117238,117239],{"id":117239},"学习方法",[14,117241,117242],{},"每章建议按这个顺序操作：",[171,117244,117245,117248,117251,117254,117257,117260],{},[174,117246,117247],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[174,117249,117250],{},"复制最小可运行代码，保存成指定文件。",[174,117252,117253],{},"运行代码，确认没有报错。",[174,117255,117256],{},"对照“运行结果说明”理解输出。",[174,117258,117259],{},"做“验证步骤”，主动改一两个参数。",[174,117261,117262],{},"遇到报错先看“常见错误与解决方案”。",[14,117264,117265],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[159,117267,117268],{"id":117268},"全局排错顺序",[14,117270,117271],{},"遇到问题时，按下面顺序查：",[171,117273,117274,117280,117286,117291,117294,117297,117304,117314],{},[174,117275,117276,117277],{},"Python 环境是否激活：",[25,117278,117279],{},"which python",[174,117281,117282,117283],{},"MuJoCo 是否能导入：",[25,117284,117285],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[174,117287,117288,117289],{},"是否误装了 ",[25,117290,101071],{},[174,117292,117293],{},"XML 标签是否闭合、属性是否拼写正确",[174,117295,117296],{},"actuator 引用的 joint 名字是否存在",[174,117298,117299,117301,117302],{},[25,117300,101135],{}," 的长度是否等于 ",[25,117303,102217],{},[174,117305,105644,117306,82614,117308,117310,117311],{},[25,117307,104089],{},[25,117309,104419],{}," 后是否调用了 ",[25,117312,117313],{},"mujoco.mj_forward",[174,117315,117316],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[136,117318,117319],{},"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":23,"searchDepth":94,"depth":94,"links":117321},[117322,117323,117324,117325,117326,117327,117328,117329],{"id":116963,"depth":94,"text":116963},{"id":116992,"depth":94,"text":116993},{"id":117022,"depth":94,"text":117022},{"id":117137,"depth":94,"text":117137},{"id":117190,"depth":94,"text":117190},{"id":117202,"depth":94,"text":117202},{"id":117239,"depth":94,"text":117239},{"id":117268,"depth":94,"text":117268},"仿真搭建。",{"category":23455},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116906,"description":117330},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117337,"title":117338,"body":117339,"description":141,"extension":142,"meta":117794,"navigation":144,"path":117795,"seo":117796,"stem":117797,"__hash__":117798},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117340,"toc":117792},[117341,117344,117347,117353,117789],[10,117342,117338],{"id":117343},"_1-最常用的基本操作更新",[14,117345,117346],{},"装linux系统教程：",[14,117348,117349],{},[35,117350,117351],{"href":117351,"rel":117352},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23942],[18,117354,117358],{"className":117355,"code":117356,"language":117357,"meta":23,"style":23},"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",[25,117359,117360,117365,117370,117379,117384,117393,117398,117418,117423,117434,117439,117448,117453,117481,117486,117505,117510,117529,117533,117538,117554,117558,117563,117593,117597,117602,117618,117622,117627,117642,117646,117651,117667,117671,117676,117688,117700,117704,117709,117726,117730,117735,117753,117757,117762,117771,117775,117780],{"__ignoreMap":23},[28,117361,117362],{"class":30,"line":31},[28,117363,117364],{"class":105},"#更新相关的知识\n",[28,117366,117367],{"class":30,"line":94},[28,117368,117369],{"class":105},"# 更新软件包列表（从服务器获取最新软件信息）\n",[28,117371,117372,117374,117377],{"class":30,"line":109},[28,117373,24654],{"class":2040},[28,117375,117376],{"class":320}," apt",[28,117378,26320],{"class":320},[28,117380,117381],{"class":30,"line":125},[28,117382,117383],{"class":105},"# 升级所有可更新的软件包（不删除旧包）\n",[28,117385,117386,117388,117390],{"class":30,"line":131},[28,117387,24654],{"class":2040},[28,117389,117376],{"class":320},[28,117391,117392],{"class":320}," upgrade\n",[28,117394,117395],{"class":30,"line":1291},[28,117396,117397],{"class":105},"#更新和升级软件包\n",[28,117399,117400,117402,117404,117407,117409,117411,117413,117416],{"class":30,"line":1297},[28,117401,24654],{"class":2040},[28,117403,117376],{"class":320},[28,117405,117406],{"class":320}," update",[28,117408,26268],{"class":34},[28,117410,24654],{"class":2040},[28,117412,117376],{"class":320},[28,117414,117415],{"class":320}," upgrade",[28,117417,101040],{"class":45},[28,117419,117420],{"class":30,"line":1388},[28,117421,117422],{"class":105},"#列出可更新的软件包及版本信息\n",[28,117424,117425,117428,117431],{"class":30,"line":1394},[28,117426,117427],{"class":2040},"apt",[28,117429,117430],{"class":320}," list",[28,117432,117433],{"class":45}," --upgradable\n",[28,117435,117436],{"class":30,"line":1406},[28,117437,117438],{"class":105},"#彻底升级（处理依赖关系，可能删除旧包）\n",[28,117440,117441,117443,117445],{"class":30,"line":1689},[28,117442,24654],{"class":2040},[28,117444,117376],{"class":320},[28,117446,117447],{"class":320}," full-upgrade\n",[28,117449,117450],{"class":30,"line":1694},[28,117451,117452],{"class":105},"#设置指定版本\n",[28,117454,117455,117457,117459,117461,117463,117466,117468,117470,117472,117474,117477,117479],{"class":30,"line":1700},[28,117456,24654],{"class":2040},[28,117458,117376],{"class":320},[28,117460,23911],{"class":320},[28,117462,28980],{"class":38},[28,117464,117465],{"class":320},"package_nam",[28,117467,291],{"class":34},[28,117469,1164],{"class":38},[28,117471,39],{"class":320},[28,117473,99],{"class":38},[28,117475,117476],{"class":320},"version_numbe",[28,117478,880],{"class":34},[28,117480,51382],{"class":38},[28,117482,117483],{"class":30,"line":1705},[28,117484,117485],{"class":105},"#只安装软件包不升级\n",[28,117487,117488,117490,117492,117494,117496,117498,117500,117502],{"class":30,"line":1719},[28,117489,24654],{"class":2040},[28,117491,117376],{"class":320},[28,117493,23911],{"class":320},[28,117495,28980],{"class":38},[28,117497,117465],{"class":320},[28,117499,291],{"class":34},[28,117501,1164],{"class":38},[28,117503,117504],{"class":45}," --no-upgrade\n",[28,117506,117507],{"class":30,"line":1724},[28,117508,117509],{"class":105},"#只升级，不存在就不安装\n",[28,117511,117512,117514,117516,117518,117520,117522,117524,117526],{"class":30,"line":1730},[28,117513,24654],{"class":2040},[28,117515,117376],{"class":320},[28,117517,23911],{"class":320},[28,117519,28980],{"class":38},[28,117521,117465],{"class":320},[28,117523,291],{"class":34},[28,117525,1164],{"class":38},[28,117527,117528],{"class":45}," --only-upgrade\n",[28,117530,117531],{"class":30,"line":1751},[28,117532,2477],{"emptyLinePlaceholder":144},[28,117534,117535],{"class":30,"line":1756},[28,117536,117537],{"class":105},"#安装指定的软件命令\n",[28,117539,117540,117542,117544,117546,117548,117550,117552],{"class":30,"line":1770},[28,117541,24654],{"class":2040},[28,117543,117376],{"class":320},[28,117545,23911],{"class":320},[28,117547,28980],{"class":38},[28,117549,117465],{"class":320},[28,117551,291],{"class":34},[28,117553,51382],{"class":38},[28,117555,117556],{"class":30,"line":1775},[28,117557,2477],{"emptyLinePlaceholder":144},[28,117559,117560],{"class":30,"line":1804},[28,117561,117562],{"class":105},"#安装多个软件包\n",[28,117564,117565,117567,117569,117571,117573,117576,117579,117581,117583,117586,117588,117590],{"class":30,"line":1809},[28,117566,24654],{"class":2040},[28,117568,117376],{"class":320},[28,117570,23911],{"class":320},[28,117572,28980],{"class":38},[28,117574,117575],{"class":320},"package_",[28,117577,117578],{"class":38},"1>",[28,117580,28980],{"class":38},[28,117582,117575],{"class":320},[28,117584,117585],{"class":38},"2>",[28,117587,28980],{"class":38},[28,117589,117575],{"class":320},[28,117591,117592],{"class":38},"3>\n",[28,117594,117595],{"class":30,"line":1826},[28,117596,2477],{"emptyLinePlaceholder":144},[28,117598,117599],{"class":30,"line":1831},[28,117600,117601],{"class":105},"#更新指定的软件命令\n",[28,117603,117604,117606,117608,117610,117612,117614,117616],{"class":30,"line":1836},[28,117605,24654],{"class":2040},[28,117607,117376],{"class":320},[28,117609,117406],{"class":320},[28,117611,28980],{"class":38},[28,117613,117465],{"class":320},[28,117615,291],{"class":34},[28,117617,51382],{"class":38},[28,117619,117620],{"class":30,"line":1841},[28,117621,2477],{"emptyLinePlaceholder":144},[28,117623,117624],{"class":30,"line":1855},[28,117625,117626],{"class":105},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[28,117628,117629,117631,117634,117636,117638,117640],{"class":30,"line":1860},[28,117630,117427],{"class":2040},[28,117632,117633],{"class":320}," show",[28,117635,28980],{"class":38},[28,117637,117465],{"class":320},[28,117639,291],{"class":34},[28,117641,51382],{"class":38},[28,117643,117644],{"class":30,"line":2654},[28,117645,2477],{"emptyLinePlaceholder":144},[28,117647,117648],{"class":30,"line":2668},[28,117649,117650],{"class":105},"#删除软件包命令\n",[28,117652,117653,117655,117657,117659,117661,117663,117665],{"class":30,"line":2676},[28,117654,24654],{"class":2040},[28,117656,117376],{"class":320},[28,117658,26157],{"class":320},[28,117660,28980],{"class":38},[28,117662,117465],{"class":320},[28,117664,291],{"class":34},[28,117666,51382],{"class":38},[28,117668,117669],{"class":30,"line":2681},[28,117670,2477],{"emptyLinePlaceholder":144},[28,117672,117673],{"class":30,"line":2687},[28,117674,117675],{"class":105},"# 清理旧版本和缓存（释放磁盘空间）\n",[28,117677,117678,117680,117682,117685],{"class":30,"line":2693},[28,117679,24654],{"class":2040},[28,117681,117376],{"class":320},[28,117683,117684],{"class":320}," autoremove",[28,117686,117687],{"class":105},"  # 删除不再需要的依赖和库文件\n",[28,117689,117690,117692,117694,117697],{"class":30,"line":2698},[28,117691,24654],{"class":2040},[28,117693,117376],{"class":320},[28,117695,117696],{"class":320}," clean",[28,117698,117699],{"class":105},"       # 清理下载的缓存包\n",[28,117701,117702],{"class":30,"line":8025},[28,117703,2477],{"emptyLinePlaceholder":144},[28,117705,117706],{"class":30,"line":8049},[28,117707,117708],{"class":105},"#移除软件包及配置文件\n",[28,117710,117711,117713,117715,117718,117720,117722,117724],{"class":30,"line":8054},[28,117712,24654],{"class":2040},[28,117714,117376],{"class":320},[28,117716,117717],{"class":320}," purge",[28,117719,28980],{"class":38},[28,117721,117465],{"class":320},[28,117723,291],{"class":34},[28,117725,51382],{"class":38},[28,117727,117728],{"class":30,"line":8060},[28,117729,2477],{"emptyLinePlaceholder":144},[28,117731,117732],{"class":30,"line":8087},[28,117733,117734],{"class":105},"#查找软件包命令\n",[28,117736,117737,117739,117741,117744,117746,117749,117751],{"class":30,"line":8092},[28,117738,24654],{"class":2040},[28,117740,117376],{"class":320},[28,117742,117743],{"class":320}," search",[28,117745,28980],{"class":38},[28,117747,117748],{"class":320},"keywor",[28,117750,528],{"class":34},[28,117752,51382],{"class":38},[28,117754,117755],{"class":30,"line":8098},[28,117756,2477],{"emptyLinePlaceholder":144},[28,117758,117759],{"class":30,"line":8110},[28,117760,117761],{"class":105},"#列出所有已安装的包\n",[28,117763,117764,117766,117768],{"class":30,"line":8122},[28,117765,117427],{"class":2040},[28,117767,117430],{"class":320},[28,117769,117770],{"class":45}," --installed\n",[28,117772,117773],{"class":30,"line":8134},[28,117774,2477],{"emptyLinePlaceholder":144},[28,117776,117777],{"class":30,"line":9793},[28,117778,117779],{"class":105},"#列出所有已安装的包的版本信息\n",[28,117781,117782,117784,117786],{"class":30,"line":9818},[28,117783,117427],{"class":2040},[28,117785,117430],{"class":320},[28,117787,117788],{"class":45}," --all-versions\n",[136,117790,117791],{},"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":23,"searchDepth":94,"depth":94,"links":117793},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117338,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117800,"title":117801,"body":117802,"description":141,"extension":142,"meta":118543,"navigation":144,"path":118544,"seo":118545,"stem":118546,"__hash__":118547},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117803,"toc":118530},[117804,117807,117811,117814,117820,117824,117828,117834,117839,117844,117849,117854,117859,117862,117865,117868,117871,117875,117878,117883,117886,117891,117894,117899,117906,117909,117912,117915,117918,117921,117932,117936,117940,117945,117950,117954,117959,117963,117968,117972,117976,117981,117984,118029,118034,118038,118042,118047,118053,118058,118068,118073,118083,118088,118093,118120,118124,118127,118132,118135,118160,118164,118169,118172,118177,118182,118202,118207,118210,118225,118229,118282,118285,118290,118294,118297,118312,118315,118318,118323,118327,118331,118334,118338,118342,118345,118350,118355,118359,118366,118374,118377,118384,118389,118394,118397,118402,118409,118414,118421,118425,118427,118432,118436,118439,118442,118447,118450,118455,118458,118463,118468,118473,118477,118482,118486,118527],[10,117805,117801],{"id":117806},"_2-linux装机教程",[159,117808,117810],{"id":117809},"_21-实体机","2.1 实体机",[14,117812,117813],{},"使用清华源：（Ubuntu24.04）",[14,117815,117816],{},[35,117817,117818],{"href":117818,"rel":117819},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23942],[159,117821,117823],{"id":117822},"_22-普通虚拟机","2.2 普通虚拟机",[188,117825,117827],{"id":117826},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117829,117830],{},[35,117831,117832],{"href":117832,"rel":117833},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23942],[14,117835,117836],{},[1539,117837],{"alt":23,"src":117838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117840,117841],{},[1539,117842],{"alt":23,"src":117843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117845,117846],{},[1539,117847],{"alt":23,"src":117848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117850,117851],{},[1539,117852],{"alt":23,"src":117853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117855,117856],{},[1539,117857],{"alt":23,"src":117858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117860,117861],{},"内存4G（4096MB）；",[14,117863,117864],{},"CPU给4个核；",[14,117866,117867],{},"硬盘动态分配60G；",[14,117869,117870],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[188,117872,117874],{"id":117873},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117876,117877],{},"按照1.1的步骤下载Ubuntu",[14,117879,117880],{},[1539,117881],{"alt":23,"src":117882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117884,117885],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117887,117888],{},[1539,117889],{"alt":23,"src":117890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117892,117893],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117895,117896],{},[1539,117897],{"alt":23,"src":117898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117900,117901,117902,117905],{},"选择“正常安装”(找不到都用Alt+F7)， ",[365,117903,117904],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117907,117908],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117910,117911],{},"将改动写入磁盘吗 继续",[14,117913,117914],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117916,117917],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117919,117920],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117922,117923,117924,117927,117928,117931],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[365,117925,117926],{},"除了"," 选不发送系统信息与不升级之外， ",[365,117929,117930],{},"其它"," 都跳过或前进）",[188,117933,117935],{"id":117934},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22075,117937,117939],{"id":117938},"_2231-全屏","2.2.3.1 全屏",[14,117941,117942],{},[1539,117943],{"alt":23,"src":117944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117946,117947],{},[1539,117948],{"alt":23,"src":117949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22075,117951,117953],{"id":117952},"_2232-文件交换","2.2.3.2 文件交换",[14,117955,117956],{},[1539,117957],{"alt":23,"src":117958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22075,117960,117962],{"id":117961},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117964,117965],{},[1539,117966],{"alt":23,"src":117967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[159,117969,117971],{"id":117970},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[188,117973,117975],{"id":117974},"_231-简介与优缺点","2.3.1 简介与优缺点",[171,117977,117978],{},[174,117979,117980],{},"什么情况下推荐？",[14,117982,117983],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[171,117985,117986],{"start":94},[174,117987,117988,117989],{},"优缺点：",[171,117990,117991,118021],{},[174,117992,117993,117994],{},"优点：",[171,117995,117996,117999,118006,118009,118012,118015,118018],{},[174,117997,117998],{},"WSL2是最好的Linux发行版;(bushi)",[174,118000,118001,118002,118005],{},"性能损耗极低。且比在Windows上跑深度性能 ",[365,118003,118004],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[174,118007,118008],{},"非常方便调用USB设备，可以USB直通;",[174,118010,118011],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[174,118013,118014],{},"非常方便Win与WSL2互相传文件等协同操作;",[174,118016,118017],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[174,118019,118020],{},"非常方便使用Windows的VScode远程开发;",[174,118022,118023,118024],{},"缺点：",[171,118025,118026],{},[174,118027,118028],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118030,118031],{},[1539,118032],{"alt":23,"src":118033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[188,118035,118037],{"id":118036},"_232-安装教程","2.3.2 安装教程",[22075,118039,118041],{"id":118040},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[171,118043,118044],{},[174,118045,118046],{},"方法一(图形界面)",[14,118048,118049,118050,24696],{},"用Win+R输入",[25,118051,118052],{},"appwiz.cpl",[14,118054,118055],{},[1539,118056],{"alt":23,"src":118057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118059,118060,118061,118064,118065,26551],{},"点击OK进入 ",[365,118062,118063],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[365,118066,118067],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118069,118070],{},[1539,118071],{"alt":23,"src":118072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118074,118075,118076,101077,118079,118082],{},"选择 ",[365,118077,118078],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[365,118080,118081],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118084,118085],{},[1539,118086],{"alt":23,"src":118087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[171,118089,118090],{"start":94},[174,118091,118092],{},"方法二(命令行)",[18,118094,118098],{"className":118095,"code":118096,"language":118097,"meta":23,"style":23},"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",[25,118099,118100,118105,118110,118115],{"__ignoreMap":23},[28,118101,118102],{"class":30,"line":31},[28,118103,118104],{},"# 开启 Linux 子系统\n",[28,118106,118107],{"class":30,"line":94},[28,118108,118109],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[28,118111,118112],{"class":30,"line":109},[28,118113,118114],{},"# 开启虚拟机平台\n",[28,118116,118117],{"class":30,"line":125},[28,118118,118119],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22075,118121,118123],{"id":118122},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118125,118126],{},"用管理员权限打开powershell",[14,118128,118129],{},[1539,118130],{"alt":23,"src":118131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118133,118134],{},"升级WSL并设置默认版本为WSL2",[18,118136,118138],{"className":118095,"code":118137,"language":118097,"meta":23,"style":23},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[25,118139,118140,118145,118150,118155],{"__ignoreMap":23},[28,118141,118142],{"class":30,"line":31},[28,118143,118144],{},"# 更新 wsl\n",[28,118146,118147],{"class":30,"line":94},[28,118148,118149],{},"wsl --update\n",[28,118151,118152],{"class":30,"line":109},[28,118153,118154],{},"# 将 wsl 版本设置为 wsl2\n",[28,118156,118157],{"class":30,"line":125},[28,118158,118159],{},"wsl --set-default-version 2\n",[22075,118161,118163],{"id":118162},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[171,118165,118166],{},[174,118167,118168],{},"方式一(商店下载)",[14,118170,118171],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118173,118174],{},[1539,118175],{"alt":23,"src":118176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[171,118178,118179],{"start":94},[174,118180,118181],{},"方式二(命令行安装)",[18,118183,118185],{"className":118095,"code":118184,"language":118097,"meta":23,"style":23},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[25,118186,118187,118192,118197],{"__ignoreMap":23},[28,118188,118189],{"class":30,"line":31},[28,118190,118191],{},"# 列出可安装的 Linux 版本\n",[28,118193,118194],{"class":30,"line":94},[28,118195,118196],{},"#（需要科学手段）\n",[28,118198,118199],{"class":30,"line":109},[28,118200,118201],{},"wsl --list --online\n",[14,118203,118204],{},[1539,118205],{"alt":23,"src":118206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118208,118209],{},"选择对应发行版并安装",[18,118211,118213],{"className":118095,"code":118212,"language":118097,"meta":23,"style":23},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[25,118214,118215,118220],{"__ignoreMap":23},[28,118216,118217],{"class":30,"line":31},[28,118218,118219],{},"# Ubuntu安装完毕后需要重启系统\n",[28,118221,118222],{"class":30,"line":94},[28,118223,118224],{},"wsl --install -d Ubuntu-24.04\n",[22075,118226,118228],{"id":118227},"_2324-查看系统状态","2.3.2.4 查看系统状态",[18,118230,118232],{"className":118095,"code":118231,"language":118097,"meta":23,"style":23},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[25,118233,118234,118239,118244,118249,118254,118258,118262,118267,118272,118277],{"__ignoreMap":23},[28,118235,118236],{"class":30,"line":31},[28,118237,118238],{},"# 查看 wsl\n",[28,118240,118241],{"class":30,"line":94},[28,118242,118243],{},"wsl -l\n",[28,118245,118246],{"class":30,"line":109},[28,118247,118248],{},"# 查看 wsl 运行版本或模式\n",[28,118250,118251],{"class":30,"line":125},[28,118252,118253],{},"wsl -l -v\n",[28,118255,118256],{"class":30,"line":131},[28,118257,2477],{"emptyLinePlaceholder":144},[28,118259,118260],{"class":30,"line":1291},[28,118261,2477],{"emptyLinePlaceholder":144},[28,118263,118264],{"class":30,"line":1297},[28,118265,118266],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[28,118268,118269],{"class":30,"line":1388},[28,118270,118271],{},"wsl --set-version \u003Cdistro> 2\n",[28,118273,118274],{"class":30,"line":1394},[28,118275,118276],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[28,118278,118279],{"class":30,"line":1406},[28,118280,118281],{},"wsl --unregister \u003Cdistro>\n",[14,118283,118284],{},"输出Version为2即正常",[14,118286,118287],{},[1539,118288],{"alt":23,"src":118289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22075,118291,118293],{"id":118292},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118295,118296],{},"直接在Powershell里输入wsl命令进入子系统",[18,118298,118300],{"className":118095,"code":118299,"language":118097,"meta":23,"style":23},"# 进入子系统\nwsl\n",[25,118301,118302,118307],{"__ignoreMap":23},[28,118303,118304],{"class":30,"line":31},[28,118305,118306],{},"# 进入子系统\n",[28,118308,118309],{"class":30,"line":94},[28,118310,118311],{},"wsl\n",[14,118313,118314],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118316,118317],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118319,118320],{},[1539,118321],{"alt":23,"src":118322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[188,118324,118326],{"id":118325},"_233-配置各种环境","2.3.3 配置各种环境",[22075,118328,118330],{"id":118329},"_2331-换源","2.3.3.1 换源",[14,118332,118333],{},"(同实体机LINUX，往下找教程)",[22075,118335,118337],{"id":118336},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22987,118339,118341],{"id":118340},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118343,118344],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118346,118347],{},[1539,118348],{"alt":23,"src":118349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118351,118352],{},[1539,118353],{"alt":23,"src":118354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22987,118356,118358],{"id":118357},"_23322-cuda","2.3.3.2.2 CUDA",[14,118360,118361,118362],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[35,118363,118364],{"href":118364,"rel":118365},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23942],[14,118367,118368,118371],{},[1539,118369],{"alt":23,"src":118370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1539,118372],{"alt":23,"src":118373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118375,118376],{},"在下方的网站，选择合适的版本。",[14,118378,118379,118380],{},"WSL2 专属 CUDA 指南：",[35,118381,118382],{"href":118382,"rel":118383},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23942],[14,118385,118386],{},[365,118387,118388],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118390,118391],{},[1539,118392],{"alt":23,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118395,118396],{},"挨行敲一遍",[14,118398,118399],{},[1539,118400],{"alt":23,"src":118401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118403,118404,118405,118408],{},"敲完后，输入",[25,118406,118407],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118410,118411],{},[1539,118412],{"alt":23,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118415,118416,118417,118420],{},"（请详看下方教程的",[365,118418,118419],{},"安装CUDA的配置环境来看","如何配置环境）",[22987,118422,118424],{"id":118423},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118426,118333],{},[14,118428,118429],{},[1539,118430],{"alt":23,"src":118431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22075,118433,118435],{"id":118434},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118437,118438],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118440,118441],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118443,118444],{},[1539,118445],{"alt":23,"src":118446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118448,118449],{},"连接WSL2",[14,118451,118452],{},[1539,118453],{"alt":23,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118456,118457],{},"远程开发成功。",[14,118459,118460],{},[1539,118461],{"alt":23,"src":118462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118464,118465],{},[1539,118466],{"alt":23,"src":118467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118469,118470],{},[1539,118471],{"alt":23,"src":118472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22075,118474,118476],{"id":118475},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118478,118479],{},[1539,118480],{"alt":23,"src":118481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22075,118483,118485],{"id":118484},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[18,118487,118489],{"className":117355,"code":118488,"language":117357,"meta":23,"style":23},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[25,118490,118491,118499,118507,118518,118522],{"__ignoreMap":23},[28,118492,118493,118495,118497],{"class":30,"line":31},[28,118494,24654],{"class":2040},[28,118496,117376],{"class":320},[28,118498,26320],{"class":320},[28,118500,118501,118503,118505],{"class":30,"line":94},[28,118502,24654],{"class":2040},[28,118504,117376],{"class":320},[28,118506,117392],{"class":320},[28,118508,118509,118511,118513,118515],{"class":30,"line":109},[28,118510,24654],{"class":2040},[28,118512,117376],{"class":320},[28,118514,23911],{"class":320},[28,118516,118517],{"class":320}," mesa-utils\n",[28,118519,118520],{"class":30,"line":125},[28,118521,2477],{"emptyLinePlaceholder":144},[28,118523,118524],{"class":30,"line":131},[28,118525,118526],{"class":105},"#然后重启wsl2即可\n",[136,118528,118529],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":94,"depth":94,"links":118531},[118532,118533,118538],{"id":117809,"depth":94,"text":117810},{"id":117822,"depth":94,"text":117823,"children":118534},[118535,118536,118537],{"id":117826,"depth":109,"text":117827},{"id":117873,"depth":109,"text":117874},{"id":117934,"depth":109,"text":117935},{"id":117970,"depth":94,"text":117971,"children":118539},[118540,118541,118542],{"id":117974,"depth":109,"text":117975},{"id":118036,"depth":109,"text":118037},{"id":118325,"depth":109,"text":118326},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117801,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118549,"title":118550,"body":118551,"description":141,"extension":142,"meta":121487,"navigation":144,"path":121488,"seo":121489,"stem":121490,"__hash__":121491},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118552,"toc":121459},[118553,118556,118560,118566,118570,118576,118580,118768,118771,118776,118780,118784,118787,118790,118796,118801,118804,118807,118812,118845,118850,118854,118931,118934,118939,118943,118946,118985,118988,118997,119015,119020,119027,119144,119149,119152,119179,119184,119188,119197,119247,119254,119258,119261,119275,119282,119316,119321,119325,119348,119351,119356,119360,119363,119366,119369,119411,119415,119418,119421,119462,119466,119470,119473,119478,119483,119486,119509,119512,119520,119525,119528,119533,119538,119541,119546,119550,119555,119578,119583,119645,119653,119658,119663,119666,119671,119674,119679,119684,119702,119707,119713,119718,119732,119736,119739,119742,119745,119788,119791,119796,119897,119900,119905,119909,119913,119950,119954,119958,119962,120008,120012,120057,120061,120068,120076,120131,120134,120211,120214,120237,120241,120244,120249,120254,120262,120265,120270,120275,120280,120283,120288,120297,120300,120305,120308,120379,120384,120387,120392,120395,120400,120403,120408,120411,120416,120421,120424,120499,120502,120515,120520,120523,120537,120540,120569,120574,120603,120606,120611,120615,120620,120629,120632,120637,120640,120645,120648,120651,120656,120659,120664,120669,120672,120677,120680,120805,120810,120840,120843,120848,120853,120870,120873,120916,120919,120946,120951,120964,121107,121111,121116,121130,121133,121184,121187,121217,121220,121236,121241,121255,121258,121325,121330,121339,121344,121347,121359,121364,121371,121395,121398,121403,121406,121425,121430,121437,121449,121456],[10,118554,118550],{"id":118555},"_3-安装必备配置",[159,118557,118559],{"id":118558},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[18,118561,118564],{"className":118562,"code":118563,"language":5264},[5262],"  打开下方网站（注意，该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",[25,118565,118563],{"__ignoreMap":23},[188,118567,118569],{"id":118568},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[18,118571,118574],{"className":118572,"code":118573,"language":5264},[5262],"  输入以下命令\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",[25,118575,118573],{"__ignoreMap":23},[188,118577,118579],{"id":118578},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[18,118581,118585],{"className":118582,"code":118583,"language":118584,"meta":23,"style":23},"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",[25,118586,118587,118595,118606,118618,118632,118636,118646,118651,118655,118659,118664,118668,118680,118684,118689,118693,118704,118708,118724,118728,118739,118743,118748,118752,118760],{"__ignoreMap":23},[28,118588,118589,118591,118593],{"class":30,"line":31},[28,118590,24654],{"class":2040},[28,118592,117376],{"class":320},[28,118594,26320],{"class":320},[28,118596,118597,118599,118601,118603],{"class":30,"line":94},[28,118598,24654],{"class":2040},[28,118600,117376],{"class":320},[28,118602,23911],{"class":320},[28,118604,118605],{"class":320}," vim\n",[28,118607,118608,118610,118613,118615],{"class":30,"line":109},[28,118609,24654],{"class":2040},[28,118611,118612],{"class":320}," rm",[28,118614,25403],{"class":45},[28,118616,118617],{"class":320}," \u002Fetc\u002Fapt\u002Fsources.list\n",[28,118619,118620,118622,118624,118626,118629],{"class":30,"line":125},[28,118621,24654],{"class":2040},[28,118623,118612],{"class":320},[28,118625,25403],{"class":45},[28,118627,118628],{"class":320}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[28,118630,118631],{"class":45},"**\n",[28,118633,118634],{"class":30,"line":131},[28,118635,2477],{"emptyLinePlaceholder":144},[28,118637,118638,118640,118643],{"class":30,"line":1291},[28,118639,24654],{"class":2040},[28,118641,118642],{"class":320}," vim",[28,118644,118645],{"class":320}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[28,118647,118648],{"class":30,"line":1297},[28,118649,118650],{"class":320},"```\n",[28,118652,118653],{"class":30,"line":1388},[28,118654,2477],{"emptyLinePlaceholder":144},[28,118656,118657],{"class":30,"line":1394},[28,118658,2477],{"emptyLinePlaceholder":144},[28,118660,118661],{"class":30,"line":1406},[28,118662,118663],{"class":2040},"选择好Ubuntu版本后，复制下方的内容。\n",[28,118665,118666],{"class":30,"line":1689},[28,118667,2477],{"emptyLinePlaceholder":144},[28,118669,118670,118672,118675,118678],{"class":30,"line":1694},[28,118671,441],{"class":38},[28,118673,118674],{"class":320},"[](",[28,118676,118677],{"class":2040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[28,118679,227],{"class":320},[28,118681,118682],{"class":30,"line":1700},[28,118683,2477],{"emptyLinePlaceholder":144},[28,118685,118686],{"class":30,"line":1705},[28,118687,118688],{"class":2040},"粘贴进去\n",[28,118690,118691],{"class":30,"line":1719},[28,118692,2477],{"emptyLinePlaceholder":144},[28,118694,118695,118697,118699,118702],{"class":30,"line":1724},[28,118696,441],{"class":38},[28,118698,118674],{"class":320},[28,118700,118701],{"class":2040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[28,118703,227],{"class":320},[28,118705,118706],{"class":30,"line":1730},[28,118707,2477],{"emptyLinePlaceholder":144},[28,118709,118710,118713,118716,118719,118721],{"class":30,"line":1751},[28,118711,118712],{"class":2040},"按一下ESC，然后英文冒号，输入",[28,118714,118715],{"class":320}," `",[28,118717,118718],{"class":2040},":wq!",[28,118720,1176],{"class":320},[28,118722,118723],{"class":2040},"然后回车\n",[28,118725,118726],{"class":30,"line":1756},[28,118727,2477],{"emptyLinePlaceholder":144},[28,118729,118730,118732,118734,118737],{"class":30,"line":1770},[28,118731,441],{"class":38},[28,118733,118674],{"class":320},[28,118735,118736],{"class":2040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[28,118738,227],{"class":320},[28,118740,118741],{"class":30,"line":1775},[28,118742,2477],{"emptyLinePlaceholder":144},[28,118744,118745],{"class":30,"line":1804},[28,118746,118747],{"class":2040},"输入以下命令\n",[28,118749,118750],{"class":30,"line":1809},[28,118751,2477],{"emptyLinePlaceholder":144},[28,118753,118754,118757],{"class":30,"line":1826},[28,118755,118756],{"class":320},"```",[28,118758,118759],{"class":2040},"Bash\n",[28,118761,118762,118764,118766],{"class":30,"line":1831},[28,118763,24654],{"class":2040},[28,118765,117376],{"class":320},[28,118767,26320],{"class":320},[14,118769,118770],{},"这里被替换成对应学校则成功",[14,118772,118773],{},[1539,118774],{"alt":23,"src":118775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[159,118777,118779],{"id":118778},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[188,118781,118783],{"id":118782},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118785,118786],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118788,118789],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118791,118792],{},[35,118793,118794],{"href":118794,"rel":118795},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23942],[14,118797,118798],{},[1539,118799],{"alt":23,"src":118800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118802,118803],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118805,118806],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118808,118809],{},[1539,118810],{"alt":23,"src":118811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[18,118813,118815],{"className":117355,"code":118814,"language":117357,"meta":23,"style":23},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[25,118816,118817,118822,118829,118834],{"__ignoreMap":23},[28,118818,118819],{"class":30,"line":31},[28,118820,118821],{"class":105},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[28,118823,118824,118826],{"class":30,"line":94},[28,118825,101335],{"class":45},[28,118827,118828],{"class":320}," ~\u002FDownloads\n",[28,118830,118831],{"class":30,"line":109},[28,118832,118833],{"class":105},"#下方chrome安装包名不一定是这个，根据名字来看\n",[28,118835,118836,118838,118840,118842],{"class":30,"line":125},[28,118837,24654],{"class":2040},[28,118839,117376],{"class":320},[28,118841,23911],{"class":320},[28,118843,118844],{"class":320}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118846,118847],{},[1539,118848],{"alt":23,"src":118849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[188,118851,118853],{"id":118852},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[18,118855,118857],{"className":117355,"code":118856,"language":117357,"meta":23,"style":23},"# 老版\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",[25,118858,118859,118864,118872,118883,118888,118892,118897,118907,118915,118926],{"__ignoreMap":23},[28,118860,118861],{"class":30,"line":31},[28,118862,118863],{"class":105},"# 老版\n",[28,118865,118866,118868,118870],{"class":30,"line":94},[28,118867,24654],{"class":2040},[28,118869,117376],{"class":320},[28,118871,26320],{"class":320},[28,118873,118874,118876,118878,118880],{"class":30,"line":109},[28,118875,24654],{"class":2040},[28,118877,117376],{"class":320},[28,118879,23911],{"class":320},[28,118881,118882],{"class":320}," neofetch\n",[28,118884,118885],{"class":30,"line":125},[28,118886,118887],{"class":2040},"neofetch\n",[28,118889,118890],{"class":30,"line":131},[28,118891,2477],{"emptyLinePlaceholder":144},[28,118893,118894],{"class":30,"line":1291},[28,118895,118896],{"class":105},"# 新版\n",[28,118898,118899,118901,118904],{"class":30,"line":1297},[28,118900,24654],{"class":2040},[28,118902,118903],{"class":320}," add-apt-repository",[28,118905,118906],{"class":320}," ppa:zhangsongcui3371\u002Ffastfetch\n",[28,118908,118909,118911,118913],{"class":30,"line":1388},[28,118910,24654],{"class":2040},[28,118912,117376],{"class":320},[28,118914,26320],{"class":320},[28,118916,118917,118919,118921,118923],{"class":30,"line":1394},[28,118918,24654],{"class":2040},[28,118920,117376],{"class":320},[28,118922,23911],{"class":320},[28,118924,118925],{"class":320}," fastfetch\n",[28,118927,118928],{"class":30,"line":1406},[28,118929,118930],{"class":2040},"fastfetch\n",[14,118932,118933],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118935,118936],{},[1539,118937],{"alt":23,"src":118938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[188,118940,118942],{"id":118941},"_323-移除snap应用","3.2.3 移除snap应用",[14,118944,118945],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[18,118947,118949],{"className":117355,"code":118948,"language":117357,"meta":23,"style":23},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[25,118950,118951,118963,118974],{"__ignoreMap":23},[28,118952,118953,118955,118957,118960],{"class":30,"line":31},[28,118954,24654],{"class":2040},[28,118956,26591],{"class":320},[28,118958,118959],{"class":320}," disable",[28,118961,118962],{"class":320}," snapd.service\n",[28,118964,118965,118967,118969,118971],{"class":30,"line":94},[28,118966,24654],{"class":2040},[28,118968,26591],{"class":320},[28,118970,118959],{"class":320},[28,118972,118973],{"class":320}," snapd.socket\n",[28,118975,118976,118978,118980,118982],{"class":30,"line":109},[28,118977,24654],{"class":2040},[28,118979,26591],{"class":320},[28,118981,118959],{"class":320},[28,118983,118984],{"class":320}," snapd.seeded.service\n",[14,118986,118987],{},"然后查看snap应用列表",[14,118989,118990,118991,118996],{},"根据你安装的选择不同（最小安装或普通安装），有",[35,118992,118995],{"href":118993,"rel":118994},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23942],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[18,118998,119000],{"className":117355,"code":118999,"language":117357,"meta":23,"style":23},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[25,119001,119002,119007],{"__ignoreMap":23},[28,119003,119004],{"class":30,"line":31},[28,119005,119006],{"class":105},"# 查询当前系统上snap安装了哪些app\n",[28,119008,119009,119012],{"class":30,"line":94},[28,119010,119011],{"class":2040},"snap",[28,119013,119014],{"class":320}," list\n",[14,119016,119017],{},[1539,119018],{"alt":23,"src":119019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119021,119022,119023,119026],{},"卸载掉图中所有应用，按照 ",[365,119024,119025],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[18,119028,119030],{"className":117355,"code":119029,"language":117357,"meta":23,"style":23},"#移除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",[25,119031,119032,119037,119049,119054,119065,119070,119081,119086,119097,119102,119106,119111,119122,119133],{"__ignoreMap":23},[28,119033,119034],{"class":30,"line":31},[28,119035,119036],{"class":105},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[28,119038,119039,119041,119044,119046],{"class":30,"line":94},[28,119040,24654],{"class":2040},[28,119042,119043],{"class":320}," snap",[28,119045,26157],{"class":320},[28,119047,119048],{"class":320}," snap-store\n",[28,119050,119051],{"class":30,"line":109},[28,119052,119053],{"class":105},"#移除firefox浏览器\n",[28,119055,119056,119058,119060,119062],{"class":30,"line":125},[28,119057,24654],{"class":2040},[28,119059,119043],{"class":320},[28,119061,26157],{"class":320},[28,119063,119064],{"class":320}," firefox\n",[28,119066,119067],{"class":30,"line":131},[28,119068,119069],{"class":105},"#移除gnome-42-2204\n",[28,119071,119072,119074,119076,119078],{"class":30,"line":1291},[28,119073,24654],{"class":2040},[28,119075,119043],{"class":320},[28,119077,26157],{"class":320},[28,119079,119080],{"class":320}," gnome-42-2204\n",[28,119082,119083],{"class":30,"line":1297},[28,119084,119085],{"class":105},"#移除gtk-common-themes\n",[28,119087,119088,119090,119092,119094],{"class":30,"line":1388},[28,119089,24654],{"class":2040},[28,119091,119043],{"class":320},[28,119093,26157],{"class":320},[28,119095,119096],{"class":320}," gtk-common-themes\n",[28,119098,119099],{"class":30,"line":1394},[28,119100,119101],{"class":105},"#移除其它...\n",[28,119103,119104],{"class":30,"line":1406},[28,119105,2751],{"class":34},[28,119107,119108],{"class":30,"line":1689},[28,119109,119110],{"class":105},"#移除core22,bare以及snapd\n",[28,119112,119113,119115,119117,119119],{"class":30,"line":1694},[28,119114,24654],{"class":2040},[28,119116,119043],{"class":320},[28,119118,26157],{"class":320},[28,119120,119121],{"class":320}," core22\n",[28,119123,119124,119126,119128,119130],{"class":30,"line":1700},[28,119125,24654],{"class":2040},[28,119127,119043],{"class":320},[28,119129,26157],{"class":320},[28,119131,119132],{"class":320}," bare\n",[28,119134,119135,119137,119139,119141],{"class":30,"line":1705},[28,119136,24654],{"class":2040},[28,119138,119043],{"class":320},[28,119140,26157],{"class":320},[28,119142,119143],{"class":320}," snapd\n",[14,119145,119146],{},[1539,119147],{"alt":23,"src":119148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119150,119151],{},"输入以下命令查看是否还有snap包",[18,119153,119155],{"className":117355,"code":119154,"language":117357,"meta":23,"style":23},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[25,119156,119157,119163,119167,119171,119175],{"__ignoreMap":23},[28,119158,119159,119161],{"class":30,"line":31},[28,119160,119011],{"class":2040},[28,119162,119014],{"class":320},[28,119164,119165],{"class":30,"line":94},[28,119166,118863],{"class":105},[28,119168,119169],{"class":30,"line":109},[28,119170,118887],{"class":2040},[28,119172,119173],{"class":30,"line":125},[28,119174,118896],{"class":105},[28,119176,119177],{"class":30,"line":131},[28,119178,118930],{"class":2040},[14,119180,119181],{},[1539,119182],{"alt":23,"src":119183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[188,119185,119187],{"id":119186},"_324-移除snap","3.2.4 移除snap",[14,119189,119190,119191,119196],{},"在删除掉",[35,119192,119195],{"href":119193,"rel":119194},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23942],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[18,119198,119200],{"className":117355,"code":119199,"language":117357,"meta":23,"style":23}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[25,119201,119202,119207,119220,119225,119236],{"__ignoreMap":23},[28,119203,119204],{"class":30,"line":31},[28,119205,119206],{"class":105}," #使用apt移除掉snap\n",[28,119208,119209,119211,119213,119215,119218],{"class":30,"line":94},[28,119210,24654],{"class":2040},[28,119212,117376],{"class":320},[28,119214,117684],{"class":320},[28,119216,119217],{"class":45}," --purge",[28,119219,119143],{"class":320},[28,119221,119222],{"class":30,"line":109},[28,119223,119224],{"class":105},"#移除snapd的一些目录\n",[28,119226,119227,119229,119231,119233],{"class":30,"line":125},[28,119228,24654],{"class":2040},[28,119230,118612],{"class":320},[28,119232,25403],{"class":45},[28,119234,119235],{"class":320}," \u002Fvar\u002Fcache\u002Fsnapd\n",[28,119237,119238,119240,119242,119244],{"class":30,"line":131},[28,119239,24654],{"class":2040},[28,119241,118612],{"class":320},[28,119243,25403],{"class":45},[28,119245,119246],{"class":320}," ~\u002Fsnap\n",[14,119248,119249,119250,119253],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[25,119251,119252],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[188,119255,119257],{"id":119256},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119259,119260],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[18,119262,119264],{"className":117355,"code":119263,"language":117357,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[25,119265,119266],{"__ignoreMap":23},[28,119267,119268,119270,119272],{"class":30,"line":31},[28,119269,24654],{"class":2040},[28,119271,118642],{"class":320},[28,119273,119274],{"class":320}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119276,119277,119278,119281],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[25,119279,119280],{},":wq"," 回车",[18,119283,119285],{"className":117355,"code":119284,"language":117357,"meta":23,"style":23},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[25,119286,119287,119294,119308],{"__ignoreMap":23},[28,119288,119289,119292],{"class":30,"line":31},[28,119290,119291],{"class":2040},"Package:",[28,119293,119143],{"class":320},[28,119295,119296,119299,119302,119305],{"class":30,"line":94},[28,119297,119298],{"class":2040},"Pin:",[28,119300,119301],{"class":320}," release",[28,119303,119304],{"class":320}," a=",[28,119306,119307],{"class":45},"*\n",[28,119309,119310,119313],{"class":30,"line":109},[28,119311,119312],{"class":2040},"Pin-Priority:",[28,119314,119315],{"class":45}," -10\n",[14,119317,119318],{},[1539,119319],{"alt":23,"src":119320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[188,119322,119324],{"id":119323},"_326-测试是否成功","3.2.6 测试是否成功",[18,119326,119328],{"className":117355,"code":119327,"language":117357,"meta":23,"style":23},"sudo apt update\nsudo apt install firefox\n",[25,119329,119330,119338],{"__ignoreMap":23},[28,119331,119332,119334,119336],{"class":30,"line":31},[28,119333,24654],{"class":2040},[28,119335,117376],{"class":320},[28,119337,26320],{"class":320},[28,119339,119340,119342,119344,119346],{"class":30,"line":94},[28,119341,24654],{"class":2040},[28,119343,117376],{"class":320},[28,119345,23911],{"class":320},[28,119347,119064],{"class":320},[14,119349,119350],{},"这里提示snapd无法被安装，就证明成功了",[14,119352,119353],{},[1539,119354],{"alt":23,"src":119355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[188,119357,119359],{"id":119358},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119361,119362],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119364,119365],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119367,119368],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[18,119370,119372],{"className":117355,"code":119371,"language":117357,"meta":23,"style":23},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[25,119373,119374,119379,119388,119393,119401],{"__ignoreMap":23},[28,119375,119376],{"class":30,"line":31},[28,119377,119378],{"class":105},"# 添加Mozilla提供的源\n",[28,119380,119381,119383,119385],{"class":30,"line":94},[28,119382,24654],{"class":2040},[28,119384,118903],{"class":320},[28,119386,119387],{"class":320}," ppa:mozillateam\u002Fppa\n",[28,119389,119390],{"class":30,"line":109},[28,119391,119392],{"class":105},"# 安装Firefox\n",[28,119394,119395,119397,119399],{"class":30,"line":125},[28,119396,24654],{"class":2040},[28,119398,117376],{"class":320},[28,119400,26320],{"class":320},[28,119402,119403,119405,119407,119409],{"class":30,"line":131},[28,119404,24654],{"class":2040},[28,119406,117376],{"class":320},[28,119408,23911],{"class":320},[28,119410,119064],{"class":320},[188,119412,119414],{"id":119413},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119416,119417],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119419,119420],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[18,119422,119424],{"className":117355,"code":119423,"language":117357,"meta":23,"style":23},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[25,119425,119426,119431,119441,119449,119453],{"__ignoreMap":23},[28,119427,119428],{"class":30,"line":31},[28,119429,119430],{"class":105},"#删掉禁止安装snap的配置文件\n",[28,119432,119433,119435,119437,119439],{"class":30,"line":94},[28,119434,24654],{"class":2040},[28,119436,118612],{"class":320},[28,119438,25403],{"class":45},[28,119440,119274],{"class":320},[28,119442,119443,119445,119447],{"class":30,"line":109},[28,119444,24654],{"class":2040},[28,119446,117376],{"class":320},[28,119448,26320],{"class":320},[28,119450,119451],{"class":30,"line":125},[28,119452,2477],{"emptyLinePlaceholder":144},[28,119454,119455,119457,119459],{"class":30,"line":131},[28,119456,24654],{"class":2040},[28,119458,117376],{"class":320},[28,119460,119461],{"class":320}," dist-update\n",[159,119463,119465],{"id":119464},"_33-中文输入法","3.3 中文输入法",[188,119467,119469],{"id":119468},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119471,119472],{},"官网下载搜狗输入法",[14,119474,119475],{},[1539,119476],{"alt":23,"src":119477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119479,119480],{},[1539,119481],{"alt":23,"src":119482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119484,119485],{},"打开终端输入如下",[18,119487,119489],{"className":117355,"code":119488,"language":117357,"meta":23,"style":23},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[25,119490,119491,119498],{"__ignoreMap":23},[28,119492,119493,119495],{"class":30,"line":31},[28,119494,101335],{"class":45},[28,119496,119497],{"class":320}," ~\u002FDownloads\u002F\n",[28,119499,119500,119502,119504,119506],{"class":30,"line":94},[28,119501,24654],{"class":2040},[28,119503,117376],{"class":320},[28,119505,23911],{"class":320},[28,119507,119508],{"class":320}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119510,119511],{},"打开Fcitx",[14,119513,119514,119517],{},[1539,119515],{"alt":23,"src":119516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1539,119518],{"alt":23,"src":119519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119521,119522],{},[1539,119523],{"alt":23,"src":119524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119526,119527],{},"添加搜狗输入法",[14,119529,119530],{},[1539,119531],{"alt":23,"src":119532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119534,119535],{},[1539,119536],{"alt":23,"src":119537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119539,119540],{},"将搜狗输入法设置为唯一输入法",[14,119542,119543],{},[1539,119544],{"alt":23,"src":119545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[188,119547,119549],{"id":119548},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[171,119551,119552],{},[174,119553,119554],{},"卸载旧输入法",[18,119556,119558],{"className":118582,"code":119557,"language":118584,"meta":23,"style":23},"sudo apt purge fcitx* ibus*\n",[25,119559,119560],{"__ignoreMap":23},[28,119561,119562,119564,119566,119568,119571,119573,119576],{"class":30,"line":31},[28,119563,24654],{"class":2040},[28,119565,117376],{"class":320},[28,119567,117717],{"class":320},[28,119569,119570],{"class":320}," fcitx",[28,119572,668],{"class":45},[28,119574,119575],{"class":320}," ibus",[28,119577,119307],{"class":45},[171,119579,119580],{"start":94},[174,119581,119582],{},"安装Fcitx5",[18,119584,119586],{"className":117355,"code":119585,"language":117357,"meta":23,"style":23},"# 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",[25,119587,119588,119593,119607,119611,119616,119625,119633],{"__ignoreMap":23},[28,119589,119590],{"class":30,"line":31},[28,119591,119592],{"class":105},"# Ubuntu22.04及以上、Debian12及以上\n",[28,119594,119595,119597,119599,119601,119604],{"class":30,"line":94},[28,119596,24654],{"class":2040},[28,119598,117376],{"class":320},[28,119600,23911],{"class":320},[28,119602,119603],{"class":320}," fcitx5",[28,119605,119606],{"class":320}," fcitx5-chinese-addons\n",[28,119608,119609],{"class":30,"line":109},[28,119610,2477],{"emptyLinePlaceholder":144},[28,119612,119613],{"class":30,"line":125},[28,119614,119615],{"class":105},"# Ubuntu20.04\n",[28,119617,119618,119620,119622],{"class":30,"line":131},[28,119619,24654],{"class":2040},[28,119621,118903],{"class":320},[28,119623,119624],{"class":320}," ppa:zhsj\u002Ffcitx5\n",[28,119626,119627,119629,119631],{"class":30,"line":1291},[28,119628,24654],{"class":2040},[28,119630,117376],{"class":320},[28,119632,26320],{"class":320},[28,119634,119635,119637,119639,119641,119643],{"class":30,"line":1297},[28,119636,24654],{"class":2040},[28,119638,117376],{"class":320},[28,119640,23911],{"class":320},[28,119642,119603],{"class":320},[28,119644,119606],{"class":320},[171,119646,119647,119650],{"start":109},[174,119648,119649],{},"Reboot System",[174,119651,119652],{},"启动Fcitx5",[14,119654,119655],{},[1539,119656],{"alt":23,"src":119657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[171,119659,119660],{"start":131},[174,119661,119662],{},"修改一些设置",[14,119664,119665],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119667,119668],{},[1539,119669],{"alt":23,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119672,119673],{},"添加快捷键以便于更好切换中英文",[14,119675,119676],{},[1539,119677],{"alt":23,"src":119678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[171,119680,119681],{"start":1291},[174,119682,119683],{},"重启",[18,119685,119687],{"className":118582,"code":119686,"language":118584,"meta":23,"style":23},"sudo shutdown -r now\n",[25,119688,119689],{"__ignoreMap":23},[28,119690,119691,119693,119696,119699],{"class":30,"line":31},[28,119692,24654],{"class":2040},[28,119694,119695],{"class":320}," shutdown",[28,119697,119698],{"class":45}," -r",[28,119700,119701],{"class":320}," now\n",[171,119703,119704],{"start":1297},[174,119705,119706],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119708,119709],{},[35,119710,119711],{"href":119711,"rel":119712},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23942],[171,119714,119715],{"start":1388},[174,119716,119717],{},"再重启",[18,119719,119720],{"className":118582,"code":119686,"language":118584,"meta":23,"style":23},[25,119721,119722],{"__ignoreMap":23},[28,119723,119724,119726,119728,119730],{"class":30,"line":31},[28,119725,24654],{"class":2040},[28,119727,119695],{"class":320},[28,119729,119698],{"class":45},[28,119731,119701],{"class":320},[159,119733,119735],{"id":119734},"_34-pip3源替换","3.4 pip3源替换",[14,119737,119738],{},"非Debian系发行版需要做。",[14,119740,119741],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119743,119744],{},"使用dnf的系统也可能不用做。",[18,119746,119748],{"className":117355,"code":119747,"language":117357,"meta":23,"style":23},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,119749,119750,119755,119762,119767,119772],{"__ignoreMap":23},[28,119751,119752],{"class":30,"line":31},[28,119753,119754],{"class":105},"# 检查是否已安装 pip\n",[28,119756,119757,119760],{"class":30,"line":94},[28,119758,119759],{"class":2040},"pip3",[28,119761,26371],{"class":45},[28,119763,119764],{"class":30,"line":109},[28,119765,119766],{"class":105},"# 如果未安装，先安装 pip3（见下方）\n",[28,119768,119769],{"class":30,"line":125},[28,119770,119771],{"class":105},"# 配置 pip 使用清华源\n",[28,119773,119774,119776,119779,119782,119785],{"class":30,"line":131},[28,119775,119759],{"class":2040},[28,119777,119778],{"class":320}," config",[28,119780,119781],{"class":320}," set",[28,119783,119784],{"class":320}," global.index-url",[28,119786,119787],{"class":320}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119789,119790],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119792,119793],{},[1539,119794],{"alt":23,"src":119795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[18,119797,119799],{"className":117355,"code":119798,"language":117357,"meta":23,"style":23},"#安装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",[25,119800,119801,119806,119814,119825,119829,119834,119853,119857,119862,119874,119878,119883],{"__ignoreMap":23},[28,119802,119803],{"class":30,"line":31},[28,119804,119805],{"class":105},"#安装pip3\n",[28,119807,119808,119810,119812],{"class":30,"line":94},[28,119809,24654],{"class":2040},[28,119811,117376],{"class":320},[28,119813,26320],{"class":320},[28,119815,119816,119818,119820,119822],{"class":30,"line":109},[28,119817,24654],{"class":2040},[28,119819,26154],{"class":320},[28,119821,23911],{"class":320},[28,119823,119824],{"class":320}," python3-pip\n",[28,119826,119827],{"class":30,"line":125},[28,119828,2477],{"emptyLinePlaceholder":144},[28,119830,119831],{"class":30,"line":131},[28,119832,119833],{"class":105},"#更新pip3\n",[28,119835,119836,119838,119840,119842,119844,119846,119849,119851],{"class":30,"line":1291},[28,119837,100938],{"class":2040},[28,119839,100941],{"class":45},[28,119841,100964],{"class":320},[28,119843,23911],{"class":320},[28,119845,26508],{"class":45},[28,119847,119848],{"class":320}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[28,119850,100969],{"class":45},[28,119852,100972],{"class":320},[28,119854,119855],{"class":30,"line":1297},[28,119856,2477],{"emptyLinePlaceholder":144},[28,119858,119859],{"class":30,"line":1388},[28,119860,119861],{"class":105},"#设置pip源为清华源\n",[28,119863,119864,119866,119868,119870,119872],{"class":30,"line":1394},[28,119865,119759],{"class":2040},[28,119867,119778],{"class":320},[28,119869,119781],{"class":320},[28,119871,119784],{"class":320},[28,119873,119787],{"class":320},[28,119875,119876],{"class":30,"line":1406},[28,119877,2477],{"emptyLinePlaceholder":144},[28,119879,119880],{"class":30,"line":1689},[28,119881,119882],{"class":105},"#测试\n",[28,119884,119885,119887,119889,119891,119893,119895],{"class":30,"line":1694},[28,119886,100938],{"class":2040},[28,119888,100941],{"class":45},[28,119890,100964],{"class":320},[28,119892,23911],{"class":320},[28,119894,100969],{"class":45},[28,119896,100972],{"class":320},[14,119898,119899],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119901,119902],{},[1539,119903],{"alt":23,"src":119904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[159,119906,119908],{"id":119907},"_35-显卡驱动安装","3.5 显卡驱动安装",[188,119910,119912],{"id":119911},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[18,119914,119916],{"className":118582,"code":119915,"language":118584,"meta":23,"style":23},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[25,119917,119918,119923,119938,119943],{"__ignoreMap":23},[28,119919,119920],{"class":30,"line":31},[28,119921,119922],{"class":105},"# 如果是使用apt安装的驱动\n",[28,119924,119925,119927,119929,119931,119933,119936],{"class":30,"line":94},[28,119926,24654],{"class":2040},[28,119928,26154],{"class":320},[28,119930,26157],{"class":320},[28,119932,119217],{"class":45},[28,119934,119935],{"class":320}," nvidia",[28,119937,119307],{"class":45},[28,119939,119940],{"class":30,"line":109},[28,119941,119942],{"class":105},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[28,119944,119945,119947],{"class":30,"line":125},[28,119946,24654],{"class":2040},[28,119948,119949],{"class":320}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[188,119951,119953],{"id":119952},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22075,119955,119957],{"id":119956},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22987,119959,119961],{"id":119960},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[18,119963,119965],{"className":118582,"code":119964,"language":118584,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,119966,119967,119972,119983,119988,119998,120003],{"__ignoreMap":23},[28,119968,119969],{"class":30,"line":31},[28,119970,119971],{"class":105},"# 安装英伟达驱动\n",[28,119973,119974,119976,119978,119980],{"class":30,"line":94},[28,119975,24654],{"class":2040},[28,119977,117376],{"class":320},[28,119979,23911],{"class":320},[28,119981,119982],{"class":320}," nvidia-driver-版本号\n",[28,119984,119985],{"class":30,"line":109},[28,119986,119987],{"class":105},"# 重启 \n",[28,119989,119990,119992,119994,119996],{"class":30,"line":125},[28,119991,24654],{"class":2040},[28,119993,119695],{"class":320},[28,119995,119698],{"class":45},[28,119997,119701],{"class":320},[28,119999,120000],{"class":30,"line":131},[28,120001,120002],{"class":105},"# 检查驱动是否安装成功\n",[28,120004,120005],{"class":30,"line":1291},[28,120006,120007],{"class":2040},"nvidia-smi\n",[22987,120009,120011],{"id":120010},"_35212-debian","3.5.2.1.2 Debian",[18,120013,120015],{"className":118582,"code":120014,"language":118584,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120016,120017,120021,120035,120039,120049,120053],{"__ignoreMap":23},[28,120018,120019],{"class":30,"line":31},[28,120020,119971],{"class":105},[28,120022,120023,120025,120027,120029,120032],{"class":30,"line":94},[28,120024,24654],{"class":2040},[28,120026,117376],{"class":320},[28,120028,23911],{"class":320},[28,120030,120031],{"class":320}," nvidia-driver",[28,120033,120034],{"class":320}," nvidia-settings\n",[28,120036,120037],{"class":30,"line":109},[28,120038,119987],{"class":105},[28,120040,120041,120043,120045,120047],{"class":30,"line":125},[28,120042,24654],{"class":2040},[28,120044,119695],{"class":320},[28,120046,119698],{"class":45},[28,120048,119701],{"class":320},[28,120050,120051],{"class":30,"line":131},[28,120052,120002],{"class":105},[28,120054,120055],{"class":30,"line":1291},[28,120056,120007],{"class":2040},[22075,120058,120060],{"id":120059},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120062,120063,120064,120067],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[365,120065,120066],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120069,120070,120071],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23630,120072,120073],{},[365,120074,120075],{},"（也可以不禁用桌面环境，直接进行下一步。）",[18,120077,120079],{"className":118582,"code":120078,"language":118584,"meta":23,"style":23},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[25,120080,120081,120086,120096,120101,120114,120119],{"__ignoreMap":23},[28,120082,120083],{"class":30,"line":31},[28,120084,120085],{"class":105},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[28,120087,120088,120090,120093],{"class":30,"line":94},[28,120089,24654],{"class":2040},[28,120091,120092],{"class":320}," telinit",[28,120094,120095],{"class":45}," 3\n",[28,120097,120098],{"class":30,"line":109},[28,120099,120100],{"class":105},"# ubuntu 使用下方命令\n",[28,120102,120103,120105,120108,120111],{"class":30,"line":125},[28,120104,24654],{"class":2040},[28,120106,120107],{"class":320}," service",[28,120109,120110],{"class":320}," lightdm",[28,120112,120113],{"class":320}," stop\n",[28,120115,120116],{"class":30,"line":131},[28,120117,120118],{"class":105},"# Fedora 使用下方命令\n",[28,120120,120121,120123,120125,120128],{"class":30,"line":1291},[28,120122,24654],{"class":2040},[28,120124,26591],{"class":320},[28,120126,120127],{"class":320}," isolate",[28,120129,120130],{"class":320}," multi-user.target\n",[14,120132,120133],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[18,120135,120137],{"className":118582,"code":120136,"language":118584,"meta":23,"style":23},"# 编译环境+准备工作\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",[25,120138,120139,120144,120155,120160,120167,120172,120184,120189,120196,120201],{"__ignoreMap":23},[28,120140,120141],{"class":30,"line":31},[28,120142,120143],{"class":105},"# 编译环境+准备工作\n",[28,120145,120146,120148,120150,120152],{"class":30,"line":94},[28,120147,24654],{"class":2040},[28,120149,117376],{"class":320},[28,120151,23911],{"class":320},[28,120153,120154],{"class":320}," build-essential\n",[28,120156,120157],{"class":30,"line":109},[28,120158,120159],{"class":105},"# 进入到.run目录中\n",[28,120161,120162,120164],{"class":30,"line":125},[28,120163,101335],{"class":45},[28,120165,120166],{"class":320}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[28,120168,120169],{"class":30,"line":131},[28,120170,120171],{"class":105},"# 给驱动文件增加可执行权限：\n",[28,120173,120174,120176,120178,120181],{"class":30,"line":1291},[28,120175,24654],{"class":2040},[28,120177,24657],{"class":320},[28,120179,120180],{"class":320}," a+x",[28,120182,120183],{"class":320}," NVIDIA-Linux-x86_64-550.107.02.run\n",[28,120185,120186],{"class":30,"line":1297},[28,120187,120188],{"class":105},"# 然后执行安装：\n",[28,120190,120191,120193],{"class":30,"line":1388},[28,120192,24654],{"class":2040},[28,120194,120195],{"class":320}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[28,120197,120198],{"class":30,"line":1394},[28,120199,120200],{"class":105},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[28,120202,120203,120205,120208],{"class":30,"line":1406},[28,120204,24654],{"class":2040},[28,120206,120207],{"class":320}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[28,120209,120210],{"class":45},"  --no-opengl-files\n",[14,120212,120213],{},"安装完毕重启即可",[18,120215,120217],{"className":118582,"code":120216,"language":118584,"meta":23,"style":23},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120218,120219,120223,120229,120233],{"__ignoreMap":23},[28,120220,120221],{"class":30,"line":31},[28,120222,119987],{"class":105},[28,120224,120225,120227],{"class":30,"line":94},[28,120226,24654],{"class":2040},[28,120228,26725],{"class":320},[28,120230,120231],{"class":30,"line":109},[28,120232,120002],{"class":105},[28,120234,120235],{"class":30,"line":125},[28,120236,120007],{"class":2040},[188,120238,120240],{"id":120239},"_353-安装cuda","3.5.3 安装CUDA",[14,120242,120243],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120245,120246],{},[1539,120247],{"alt":23,"src":120248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[171,120250,120251],{},[174,120252,120253],{},"先查看显卡驱动所支持的最高CUDA版本",[18,120255,120256],{"className":118582,"code":120007,"language":118584,"meta":23,"style":23},[25,120257,120258],{"__ignoreMap":23},[28,120259,120260],{"class":30,"line":31},[28,120261,120007],{"class":2040},[14,120263,120264],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120266,120267],{},[1539,120268],{"alt":23,"src":120269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[171,120271,120272],{"start":94},[174,120273,120274],{},"下载CUDA并安装CUDA",[14,120276,118361,120277],{},[35,120278,118364],{"href":118364,"rel":120279},[23942],[14,120281,120282],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120284,120285],{},[1539,120286],{"alt":23,"src":120287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120289,120290,120291,120296],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[35,120292,120295],{"href":120293,"rel":120294},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23942],"Vinci机器人队单片机教程","）",[14,120298,120299],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120301,120302],{},[1539,120303],{"alt":23,"src":120304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120306,120307],{},"将最下方框框里的命令敲入终端",[18,120309,120311],{"className":118582,"code":120310,"language":118584,"meta":23,"style":23},"# 在当前文件夹下创建一个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",[25,120312,120313,120318,120327,120332,120339,120344,120352,120357,120368,120373],{"__ignoreMap":23},[28,120314,120315],{"class":30,"line":31},[28,120316,120317],{"class":105},"# 在当前文件夹下创建一个ttt的子文件夹\n",[28,120319,120320,120322,120324],{"class":30,"line":94},[28,120321,101325],{"class":2040},[28,120323,29294],{"class":45},[28,120325,120326],{"class":320}," .\u002Fttt\n",[28,120328,120329],{"class":30,"line":109},[28,120330,120331],{"class":105},"# 进入ttt文件夹\n",[28,120333,120334,120336],{"class":30,"line":125},[28,120335,101335],{"class":45},[28,120337,120338],{"class":320}," ttt\n",[28,120340,120341],{"class":30,"line":131},[28,120342,120343],{"class":105},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[28,120345,120346,120349],{"class":30,"line":1291},[28,120347,120348],{"class":2040},"wget",[28,120350,120351],{"class":320}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120353,120354],{"class":30,"line":1297},[28,120355,120356],{"class":105},"# 给予权限\n",[28,120358,120359,120361,120363,120365],{"class":30,"line":1388},[28,120360,24654],{"class":2040},[28,120362,24657],{"class":320},[28,120364,120180],{"class":320},[28,120366,120367],{"class":320}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120369,120370],{"class":30,"line":1394},[28,120371,120372],{"class":105},"# 运行脚本\n",[28,120374,120375,120377],{"class":30,"line":1406},[28,120376,24654],{"class":2040},[28,120378,120367],{"class":320},[14,120380,120381],{},[1539,120382],{"alt":23,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120385,120386],{},"正在安装中：",[14,120388,120389],{},[1539,120390],{"alt":23,"src":120391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120393,120394],{},"输入accept接受即可",[14,120396,120397],{},[1539,120398],{"alt":23,"src":120399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120401,120402],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120404,120405],{},[1539,120406],{"alt":23,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120409,120410],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120412,120413],{},[1539,120414],{"alt":23,"src":120415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[171,120417,120418],{"start":109},[174,120419,120420],{},"配置环境",[14,120422,120423],{},"根据上方确认一下路径，比如我上面红色框起来的为",[18,120425,120427],{"className":118582,"code":120426,"language":118584,"meta":23,"style":23},"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",[25,120428,120429,120445,120460],{"__ignoreMap":23},[28,120430,120431,120434,120437,120440,120443],{"class":30,"line":31},[28,120432,120433],{"class":2040},"Please",[28,120435,120436],{"class":320}," make",[28,120438,120439],{"class":320}," sure",[28,120441,120442],{"class":320}," that",[28,120444,2751],{"class":34},[28,120446,120447,120449,120452,120455,120458],{"class":30,"line":94},[28,120448,52346],{"class":2040},[28,120450,120451],{"class":320},"   PATH",[28,120453,120454],{"class":320}," includes",[28,120456,120457],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[28,120459,2751],{"class":34},[28,120461,120462,120464,120467,120469,120472,120475,120477,120480,120483,120486,120489,120491,120494,120496],{"class":30,"line":109},[28,120463,52346],{"class":2040},[28,120465,120466],{"class":320},"   LD_LIBRARY_PATH",[28,120468,120454],{"class":320},[28,120470,120471],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[28,120473,120474],{"class":320}," or,",[28,120476,5286],{"class":320},[28,120478,120479],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[28,120481,120482],{"class":320}," to",[28,120484,120485],{"class":320}," \u002Fetc\u002Fld.so.conf",[28,120487,120488],{"class":320}," and",[28,120490,27308],{"class":320},[28,120492,120493],{"class":320}," ldconfig",[28,120495,64679],{"class":320},[28,120497,120498],{"class":320}," root\n",[14,120500,120501],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[18,120503,120505],{"className":118582,"code":120504,"language":118584,"meta":23,"style":23},"which nvcc\n",[25,120506,120507],{"__ignoreMap":23},[28,120508,120509,120512],{"class":30,"line":31},[28,120510,120511],{"class":45},"which",[28,120513,120514],{"class":320}," nvcc\n",[14,120516,120517],{},[1539,120518],{"alt":23,"src":120519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120521,120522],{},"所以我进行以下操作：",[18,120524,120526],{"className":118582,"code":120525,"language":118584,"meta":23,"style":23},"sudo vim ~\u002F.bashrc\n",[25,120527,120528],{"__ignoreMap":23},[28,120529,120530,120532,120534],{"class":30,"line":31},[28,120531,24654],{"class":2040},[28,120533,118642],{"class":320},[28,120535,120536],{"class":320}," ~\u002F.bashrc\n",[14,120538,120539],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[18,120541,120543],{"className":118582,"code":120542,"language":118584,"meta":23,"style":23},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[25,120544,120545,120557],{"__ignoreMap":23},[28,120546,120547,120549,120552,120554],{"class":30,"line":31},[28,120548,25120],{"class":38},[28,120550,120551],{"class":34}," PATH",[28,120553,39],{"class":38},[28,120555,120556],{"class":34},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[28,120558,120559,120561,120564,120566],{"class":30,"line":94},[28,120560,25120],{"class":38},[28,120562,120563],{"class":34}," LD_LIBRARY_PATH",[28,120565,39],{"class":38},[28,120567,120568],{"class":34},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120570,120571],{},[1539,120572],{"alt":23,"src":120573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[18,120575,120577],{"className":118582,"code":120576,"language":118584,"meta":23,"style":23},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[25,120578,120579,120584,120590,120595],{"__ignoreMap":23},[28,120580,120581],{"class":30,"line":31},[28,120582,120583],{"class":105},"# 刷新当前终端的环境变量\n",[28,120585,120586,120588],{"class":30,"line":94},[28,120587,100952],{"class":45},[28,120589,120536],{"class":320},[28,120591,120592],{"class":30,"line":109},[28,120593,120594],{"class":105},"# 验证CUDA是否安装成功\n",[28,120596,120597,120600],{"class":30,"line":125},[28,120598,120599],{"class":2040},"nvcc",[28,120601,120602],{"class":45}," -V\n",[14,120604,120605],{},"出现下图这种则安装成功。",[14,120607,120608],{},[1539,120609],{"alt":23,"src":120610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[188,120612,120614],{"id":120613},"_354-安装cudnn","3.5.4 安装cuDNN",[171,120616,120617],{},[174,120618,120619],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120621,120622,120623,120628],{},"前往 NVIDIA cuDNN 下载页面：",[35,120624,120627],{"href":120625,"rel":120626},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23942],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120630,120631],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120633,120634],{},[1539,120635],{"alt":23,"src":120636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120638,120639],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120641,120642],{},[1539,120643],{"alt":23,"src":120644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120646,120647],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120649,120650],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120652,120653],{},[365,120654,120655],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120657,120658],{},"下载好的：",[14,120660,120661],{},[1539,120662],{"alt":23,"src":120663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[171,120665,120666],{"start":94},[174,120667,120668],{},"安装cuDNN",[14,120670,120671],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120673,120674],{},[1539,120675],{"alt":23,"src":120676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120678,120679],{},"解压文件，并复制到对应位置完成安装",[18,120681,120683],{"className":118582,"code":120682,"language":118584,"meta":23,"style":23},"# 解压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",[25,120684,120685,120690,120701,120706,120713,120718,120734,120748,120753,120764,120773,120777,120793],{"__ignoreMap":23},[28,120686,120687],{"class":30,"line":31},[28,120688,120689],{"class":105},"# 解压cuDNN文件\n",[28,120691,120692,120695,120698],{"class":30,"line":94},[28,120693,120694],{"class":2040},"tar",[28,120696,120697],{"class":45}," -xvf",[28,120699,120700],{"class":320}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[28,120702,120703],{"class":30,"line":109},[28,120704,120705],{"class":105},"# cd进文件夹\n",[28,120707,120708,120710],{"class":30,"line":125},[28,120709,101335],{"class":45},[28,120711,120712],{"class":320}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[28,120714,120715],{"class":30,"line":131},[28,120716,120717],{"class":105},"# 复制cuDNN文件到CUDA目录\n",[28,120719,120720,120722,120724,120727,120729,120732],{"class":30,"line":1291},[28,120721,24654],{"class":2040},[28,120723,27939],{"class":320},[28,120725,120726],{"class":320}," include\u002Fcudnn",[28,120728,668],{"class":45},[28,120730,120731],{"class":320},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[28,120733,2751],{"class":34},[28,120735,120736,120738,120740,120743,120745],{"class":30,"line":1297},[28,120737,24654],{"class":2040},[28,120739,27939],{"class":320},[28,120741,120742],{"class":320}," lib\u002Flibcudnn",[28,120744,668],{"class":45},[28,120746,120747],{"class":320},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[28,120749,120750],{"class":30,"line":1388},[28,120751,120752],{"class":105},"# 对比一下有没有缺文件\n",[28,120754,120755,120757,120760,120762],{"class":30,"line":1394},[28,120756,26839],{"class":2040},[28,120758,120759],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[28,120761,668],{"class":45},[28,120763,2751],{"class":34},[28,120765,120766,120768,120771],{"class":30,"line":1406},[28,120767,26839],{"class":2040},[28,120769,120770],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[28,120772,119307],{"class":45},[28,120774,120775],{"class":30,"line":1689},[28,120776,120356],{"class":105},[28,120778,120779,120781,120783,120786,120788,120790],{"class":30,"line":1694},[28,120780,24654],{"class":2040},[28,120782,24657],{"class":320},[28,120784,120785],{"class":320}," a+r",[28,120787,120759],{"class":320},[28,120789,668],{"class":45},[28,120791,120792],{"class":34},"   \n",[28,120794,120795,120797,120799,120801,120803],{"class":30,"line":1700},[28,120796,24654],{"class":2040},[28,120798,24657],{"class":320},[28,120800,120785],{"class":320},[28,120802,120770],{"class":320},[28,120804,119307],{"class":45},[171,120806,120807],{"start":109},[174,120808,120809],{},"检查是否安装成功",[18,120811,120813],{"className":118582,"code":120812,"language":118584,"meta":23,"style":23},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[25,120814,120815,120820],{"__ignoreMap":23},[28,120816,120817],{"class":30,"line":31},[28,120818,120819],{"class":105},"# 检查cuDNN版本命令\n",[28,120821,120822,120825,120828,120830,120832,120835,120838],{"class":30,"line":94},[28,120823,120824],{"class":2040},"cat",[28,120826,120827],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[28,120829,25187],{"class":38},[28,120831,30314],{"class":2040},[28,120833,120834],{"class":320}," CUDNN_MAJOR",[28,120836,120837],{"class":45}," -A",[28,120839,47799],{"class":45},[14,120841,120842],{},"出现下图这样的就是安装成功了",[14,120844,120845],{},[1539,120846],{"alt":23,"src":120847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[171,120849,120850],{"start":125},[174,120851,120852],{},"软链接(一般不需要)",[18,120854,120856],{"className":118582,"code":120855,"language":118584,"meta":23,"style":23},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[25,120857,120858,120863],{"__ignoreMap":23},[28,120859,120860],{"class":30,"line":31},[28,120861,120862],{"class":105},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[28,120864,120865,120867],{"class":30,"line":94},[28,120866,24654],{"class":2040},[28,120868,120869],{"class":320}," ldconfig\n",[14,120871,120872],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[18,120874,120879],{"className":120875,"code":120876,"language":120877,"meta":120878,"style":23},"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",[25,120880,120881,120886,120891,120896,120901,120906,120911],{"__ignoreMap":23},[28,120882,120883],{"class":30,"line":31},[28,120884,120885],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[28,120887,120888],{"class":30,"line":94},[28,120889,120890],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[28,120892,120893],{"class":30,"line":109},[28,120894,120895],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[28,120897,120898],{"class":30,"line":125},[28,120899,120900],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[28,120902,120903],{"class":30,"line":131},[28,120904,120905],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[28,120907,120908],{"class":30,"line":1291},[28,120909,120910],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[28,120912,120913],{"class":30,"line":1297},[28,120914,120915],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120917,120918],{},"运行下方的命令",[18,120920,120922],{"className":118582,"code":120921,"language":118584,"meta":23,"style":23},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[25,120923,120924,120929,120936,120941],{"__ignoreMap":23},[28,120925,120926],{"class":30,"line":31},[28,120927,120928],{"class":105},"# cd进入CUDA路径\n",[28,120930,120931,120933],{"class":30,"line":94},[28,120932,101335],{"class":45},[28,120934,120935],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[28,120937,120938],{"class":30,"line":109},[28,120939,120940],{"class":105}," # 查看本路径下的需要软链接的文件名\n",[28,120942,120943],{"class":30,"line":125},[28,120944,120945],{"class":2040}," ls\n",[14,120947,120948],{},[1539,120949],{"alt":23,"src":120950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120952,120953,120954,18487,120957,18487,120960,120963],{},"如上图，我需要将",[25,120955,120956],{},"libcudnn_xxx_xxxxx.so.8.9.7",[25,120958,120959],{},"libcudnn_xxx_xxxxx.so.8",[25,120961,120962],{},"libcudnn_xxx_xxxxx.so","软链接",[18,120965,120967],{"className":118582,"code":120966,"language":118584,"meta":23,"style":23},"# 创建符号链接。对于每个 .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",[25,120968,120969,120974,120990,121004,121018,121032,121046,121060,121074,121079,121085,121090],{"__ignoreMap":23},[28,120970,120971],{"class":30,"line":31},[28,120972,120973],{"class":105},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[28,120975,120976,120978,120981,120984,120987],{"class":30,"line":94},[28,120977,24654],{"class":2040},[28,120979,120980],{"class":320}," ln",[28,120982,120983],{"class":45}," -sf",[28,120985,120986],{"class":320}," libcudnn_cnn_train.so.8.9.7",[28,120988,120989],{"class":320}," libcudnn_cnn_train.so.8\n",[28,120991,120992,120994,120996,120998,121001],{"class":30,"line":109},[28,120993,24654],{"class":2040},[28,120995,120980],{"class":320},[28,120997,120983],{"class":45},[28,120999,121000],{"class":320}," libcudnn_adv_infer.so.8.9.7",[28,121002,121003],{"class":320}," libcudnn_adv_infer.so.8\n",[28,121005,121006,121008,121010,121012,121015],{"class":30,"line":125},[28,121007,24654],{"class":2040},[28,121009,120980],{"class":320},[28,121011,120983],{"class":45},[28,121013,121014],{"class":320}," libcudnn_adv_train.so.8.9.7",[28,121016,121017],{"class":320}," libcudnn_adv_train.so.8\n",[28,121019,121020,121022,121024,121026,121029],{"class":30,"line":131},[28,121021,24654],{"class":2040},[28,121023,120980],{"class":320},[28,121025,120983],{"class":45},[28,121027,121028],{"class":320}," libcudnn_cnn_infer.so.8.9.7",[28,121030,121031],{"class":320}," libcudnn_cnn_infer.so.8\n",[28,121033,121034,121036,121038,121040,121043],{"class":30,"line":1291},[28,121035,24654],{"class":2040},[28,121037,120980],{"class":320},[28,121039,120983],{"class":45},[28,121041,121042],{"class":320}," libcudnn.so.8.9.7",[28,121044,121045],{"class":320}," libcudnn.so.8\n",[28,121047,121048,121050,121052,121054,121057],{"class":30,"line":1297},[28,121049,24654],{"class":2040},[28,121051,120980],{"class":320},[28,121053,120983],{"class":45},[28,121055,121056],{"class":320}," libcudnn_ops_infer.so.8.9.7",[28,121058,121059],{"class":320}," libcudnn_ops_infer.so.8\n",[28,121061,121062,121064,121066,121068,121071],{"class":30,"line":1388},[28,121063,24654],{"class":2040},[28,121065,120980],{"class":320},[28,121067,120983],{"class":45},[28,121069,121070],{"class":320}," libcudnn_ops_train.so.8.9.7",[28,121072,121073],{"class":320}," libcudnn_ops_train.so.8\n",[28,121075,121076],{"class":30,"line":1394},[28,121077,121078],{"class":105},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[28,121080,121081,121083],{"class":30,"line":1406},[28,121082,24654],{"class":2040},[28,121084,120869],{"class":320},[28,121086,121087],{"class":30,"line":1689},[28,121088,121089],{"class":105},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[28,121091,121092,121094,121097,121100,121102,121105],{"class":30,"line":1694},[28,121093,26839],{"class":2040},[28,121095,121096],{"class":45}," -l",[28,121098,121099],{"class":320}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[28,121101,668],{"class":45},[28,121103,121104],{"class":320},".so",[28,121106,119307],{"class":45},[188,121108,121110],{"id":121109},"_355-常见问题","3.5.5 常见问题",[171,121112,121113],{},[174,121114,121115],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[18,121117,121119],{"className":118582,"code":121118,"language":118584,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[25,121120,121121],{"__ignoreMap":23},[28,121122,121123,121125,121127],{"class":30,"line":31},[28,121124,24654],{"class":2040},[28,121126,118642],{"class":320},[28,121128,121129],{"class":320}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121131,121132],{},"blacklist-nouveau.conf文件内容如下：",[18,121134,121136],{"className":118582,"code":121135,"language":118584,"meta":23,"style":23},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[25,121137,121138,121146,121153,121165,121175],{"__ignoreMap":23},[28,121139,121140,121143],{"class":30,"line":31},[28,121141,121142],{"class":2040},"blacklist",[28,121144,121145],{"class":320}," nouveau\n",[28,121147,121148,121150],{"class":30,"line":94},[28,121149,121142],{"class":2040},[28,121151,121152],{"class":320}," lbm-nouveau\n",[28,121154,121155,121157,121160,121163],{"class":30,"line":109},[28,121156,115989],{"class":2040},[28,121158,121159],{"class":320}," nouveau",[28,121161,121162],{"class":320}," modeset=",[28,121164,3162],{"class":45},[28,121166,121167,121170,121172],{"class":30,"line":125},[28,121168,121169],{"class":45},"alias",[28,121171,121159],{"class":320},[28,121173,121174],{"class":320}," off\n",[28,121176,121177,121179,121182],{"class":30,"line":131},[28,121178,121169],{"class":45},[28,121180,121181],{"class":320}," lbm-nouveau",[28,121183,121174],{"class":320},[14,121185,121186],{},"接着运行下方命令",[18,121188,121190],{"className":118582,"code":121189,"language":118584,"meta":23,"style":23},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[25,121191,121192,121202,121207],{"__ignoreMap":23},[28,121193,121194,121196,121199],{"class":30,"line":31},[28,121195,24654],{"class":2040},[28,121197,121198],{"class":320}," update-initramfs",[28,121200,121201],{"class":45}," -u\n",[28,121203,121204],{"class":30,"line":94},[28,121205,121206],{"class":2040},"或者\n",[28,121208,121209,121211,121214],{"class":30,"line":109},[28,121210,24654],{"class":2040},[28,121212,121213],{"class":320}," dracut",[28,121215,121216],{"class":45}," --force\n",[14,121218,121219],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[18,121221,121223],{"className":118582,"code":121222,"language":118584,"meta":23,"style":23},"lsmod | grep nouveau\n",[25,121224,121225],{"__ignoreMap":23},[28,121226,121227,121230,121232,121234],{"class":30,"line":31},[28,121228,121229],{"class":2040},"lsmod",[28,121231,25187],{"class":38},[28,121233,30314],{"class":2040},[28,121235,121145],{"class":320},[171,121237,121238],{"start":94},[174,121239,121240],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[18,121242,121244],{"className":118582,"code":121243,"language":118584,"meta":23,"style":23},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[25,121245,121246],{"__ignoreMap":23},[28,121247,121248,121250,121252],{"class":30,"line":31},[28,121249,24654],{"class":2040},[28,121251,118642],{"class":320},[28,121253,121254],{"class":320}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121256,121257],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[18,121259,121261],{"className":118582,"code":121260,"language":118584,"meta":23,"style":23},"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",[25,121262,121263,121271,121279,121287,121294,121302,121312,121320],{"__ignoreMap":23},[28,121264,121265,121268],{"class":30,"line":31},[28,121266,121267],{"class":2040},"Section",[28,121269,121270],{"class":320}," \"OutputClass\"\n",[28,121272,121273,121276],{"class":30,"line":94},[28,121274,121275],{"class":2040},"   Identifier",[28,121277,121278],{"class":320}," \"nvidia\"\n",[28,121280,121281,121284],{"class":30,"line":109},[28,121282,121283],{"class":2040},"   MatchDriver",[28,121285,121286],{"class":320}," \"nvidia-drm\"\n",[28,121288,121289,121292],{"class":30,"line":125},[28,121290,121291],{"class":2040},"   Driver",[28,121293,121278],{"class":320},[28,121295,121296,121299],{"class":30,"line":131},[28,121297,121298],{"class":2040},"   Option",[28,121300,121301],{"class":320}," \"AllowEmptyInitialConfiguration\"\n",[28,121303,121304,121306,121309],{"class":30,"line":1291},[28,121305,121298],{"class":2040},[28,121307,121308],{"class":320}," \"PrimaryGPU\"",[28,121310,121311],{"class":320}," \"yes\"\n",[28,121313,121314,121317],{"class":30,"line":1297},[28,121315,121316],{"class":2040},"   ModulePath",[28,121318,121319],{"class":320}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[28,121321,121322],{"class":30,"line":1388},[28,121323,121324],{"class":2040},"EndSection\n",[171,121326,121327],{"start":109},[174,121328,121329],{},"安装N卡驱动提示错误",[18,121331,121333],{"className":120875,"code":121332,"language":120877,"meta":120878,"style":23},"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",[25,121334,121335],{"__ignoreMap":23},[28,121336,121337],{"class":30,"line":31},[28,121338,121332],{},[171,121340,121341],{},[174,121342,121343],{},"检查当前运行的内核版本：",[14,121345,121346],{},"运行以下命令以查看你当前正在使用的内核版本：",[18,121348,121350],{"className":117355,"code":121349,"language":117357,"meta":23,"style":23},"uname -r\n",[25,121351,121352],{"__ignoreMap":23},[28,121353,121354,121356],{"class":30,"line":31},[28,121355,70279],{"class":2040},[28,121357,121358],{"class":45}," -r\n",[171,121360,121361],{"start":94},[174,121362,121363],{},"安装内核开发文件：",[14,121365,121366,121367,121370],{},"确保你已经安装了与当前内核版本相匹配的 ",[25,121368,121369],{},"kernel-devel"," 包。运行以下命令来安装：",[18,121372,121374],{"className":117355,"code":121373,"language":117357,"meta":23,"style":23},"sudo dnf install kernel-devel-$(uname -r)\n",[25,121375,121376],{"__ignoreMap":23},[28,121377,121378,121380,121382,121384,121387,121389,121391,121393],{"class":30,"line":31},[28,121379,24654],{"class":2040},[28,121381,26393],{"class":320},[28,121383,23911],{"class":320},[28,121385,121386],{"class":320}," kernel-devel-",[28,121388,25177],{"class":34},[28,121390,70279],{"class":2040},[28,121392,119698],{"class":45},[28,121394,227],{"class":34},[14,121396,121397],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[171,121399,121400],{"start":109},[174,121401,121402],{},"安装内核源代码（如果需要）：",[14,121404,121405],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[18,121407,121409],{"className":117355,"code":121408,"language":117357,"meta":23,"style":23},"sudo dnf install kernel-headers kernel-source\n",[25,121410,121411],{"__ignoreMap":23},[28,121412,121413,121415,121417,121419,121422],{"class":30,"line":31},[28,121414,24654],{"class":2040},[28,121416,26393],{"class":320},[28,121418,23911],{"class":320},[28,121420,121421],{"class":320}," kernel-headers",[28,121423,121424],{"class":320}," kernel-source\n",[171,121426,121427],{"start":125},[174,121428,121429],{},"检查安装：",[14,121431,121432,121433,121436],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[25,121434,121435],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[18,121438,121440],{"className":117355,"code":121439,"language":117357,"meta":23,"style":23},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[25,121441,121442],{"__ignoreMap":23},[28,121443,121444,121446],{"class":30,"line":31},[28,121445,26839],{"class":2040},[28,121447,121448],{"class":320}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121450,121451,121452,121455],{},"如果仍然遇到问题，可以通过 ",[25,121453,121454],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[136,121457,121458],{},"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":23,"searchDepth":94,"depth":94,"links":121460},[121461,121465,121475,121479,121480],{"id":118558,"depth":94,"text":118559,"children":121462},[121463,121464],{"id":118568,"depth":109,"text":118569},{"id":118578,"depth":109,"text":118579},{"id":118778,"depth":94,"text":118779,"children":121466},[121467,121468,121469,121470,121471,121472,121473,121474],{"id":118782,"depth":109,"text":118783},{"id":118852,"depth":109,"text":118853},{"id":118941,"depth":109,"text":118942},{"id":119186,"depth":109,"text":119187},{"id":119256,"depth":109,"text":119257},{"id":119323,"depth":109,"text":119324},{"id":119358,"depth":109,"text":119359},{"id":119413,"depth":109,"text":119414},{"id":119464,"depth":94,"text":119465,"children":121476},[121477,121478],{"id":119468,"depth":109,"text":119469},{"id":119548,"depth":109,"text":119549},{"id":119734,"depth":94,"text":119735},{"id":119907,"depth":94,"text":119908,"children":121481},[121482,121483,121484,121485,121486],{"id":119911,"depth":109,"text":119912},{"id":119952,"depth":109,"text":119953},{"id":120239,"depth":109,"text":120240},{"id":120613,"depth":109,"text":120614},{"id":121109,"depth":109,"text":121110},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118550,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121493,"title":121494,"body":121495,"description":141,"extension":142,"meta":121835,"navigation":144,"path":121836,"seo":121837,"stem":121838,"__hash__":121839},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121496,"toc":121833},[121497,121500,121505,121508,121754,121759,121762,121798,121801,121830],[10,121498,121494],{"id":121499},"_4-命令教程长期积累",[171,121501,121502],{},[174,121503,121504],{},"大多数命令",[14,121506,121507],{},"常用 Linux 命令速查：",[18,121509,121511],{"className":117355,"code":121510,"language":117357,"meta":23,"style":23},"# 文件与目录\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",[25,121512,121513,121518,121525,121532,121540,121547,121554,121562,121570,121577,121584,121592,121596,121601,121608,121616,121623,121627,121632,121639,121647,121655,121663,121671,121675,121680,121688,121695,121702,121710,121718,121722,121727,121736,121745],{"__ignoreMap":23},[28,121514,121515],{"class":30,"line":31},[28,121516,121517],{"class":105},"# 文件与目录\n",[28,121519,121520,121522],{"class":30,"line":94},[28,121521,26839],{"class":2040},[28,121523,121524],{"class":105},"        # 列出目录内容\n",[28,121526,121527,121529],{"class":30,"line":109},[28,121528,101335],{"class":45},[28,121530,121531],{"class":105},"        # 切换目录\n",[28,121533,121534,121537],{"class":30,"line":125},[28,121535,121536],{"class":45},"pwd",[28,121538,121539],{"class":105},"       # 显示当前路径\n",[28,121541,121542,121544],{"class":30,"line":131},[28,121543,101325],{"class":2040},[28,121545,121546],{"class":105},"     # 创建目录\n",[28,121548,121549,121551],{"class":30,"line":1291},[28,121550,25400],{"class":2040},[28,121552,121553],{"class":105},"        # 删除文件或目录\n",[28,121555,121556,121559],{"class":30,"line":1297},[28,121557,121558],{"class":2040},"cp",[28,121560,121561],{"class":105},"        # 复制文件或目录\n",[28,121563,121564,121567],{"class":30,"line":1388},[28,121565,121566],{"class":2040},"mv",[28,121568,121569],{"class":105},"        # 移动\u002F重命名文件或目录\n",[28,121571,121572,121574],{"class":30,"line":1394},[28,121573,101342],{"class":2040},[28,121575,121576],{"class":105},"     # 创建空文件\n",[28,121578,121579,121581],{"class":30,"line":1406},[28,121580,120824],{"class":2040},[28,121582,121583],{"class":105},"       # 查看文件内容\n",[28,121585,121586,121589],{"class":30,"line":1689},[28,121587,121588],{"class":2040},"head\u002Ftail",[28,121590,121591],{"class":105}," # 查看文件头部\u002F尾部\n",[28,121593,121594],{"class":30,"line":1694},[28,121595,2477],{"emptyLinePlaceholder":144},[28,121597,121598],{"class":30,"line":1700},[28,121599,121600],{"class":105},"# 权限管理\n",[28,121602,121603,121605],{"class":30,"line":1705},[28,121604,24689],{"class":2040},[28,121606,121607],{"class":105},"     # 修改文件权限\n",[28,121609,121610,121613],{"class":30,"line":1719},[28,121611,121612],{"class":2040},"chown",[28,121614,121615],{"class":105},"     # 修改文件所有者\n",[28,121617,121618,121620],{"class":30,"line":1724},[28,121619,24654],{"class":2040},[28,121621,121622],{"class":105},"      # 以管理员身份执行\n",[28,121624,121625],{"class":30,"line":1730},[28,121626,2477],{"emptyLinePlaceholder":144},[28,121628,121629],{"class":30,"line":1751},[28,121630,121631],{"class":105},"# 系统信息\n",[28,121633,121634,121636],{"class":30,"line":1756},[28,121635,70279],{"class":2040},[28,121637,121638],{"class":105},"     # 系统信息\n",[28,121640,121641,121644],{"class":30,"line":1770},[28,121642,121643],{"class":2040},"df",[28,121645,121646],{"class":105},"        # 磁盘使用情况\n",[28,121648,121649,121652],{"class":30,"line":1775},[28,121650,121651],{"class":2040},"free",[28,121653,121654],{"class":105},"      # 内存使用情况\n",[28,121656,121657,121660],{"class":30,"line":1804},[28,121658,121659],{"class":2040},"top\u002Fhtop",[28,121661,121662],{"class":105},"  # 进程监控\n",[28,121664,121665,121668],{"class":30,"line":1809},[28,121666,121667],{"class":2040},"ps",[28,121669,121670],{"class":105},"        # 查看进程\n",[28,121672,121673],{"class":30,"line":1826},[28,121674,2477],{"emptyLinePlaceholder":144},[28,121676,121677],{"class":30,"line":1831},[28,121678,121679],{"class":105},"# 网络\n",[28,121681,121682,121685],{"class":30,"line":1836},[28,121683,121684],{"class":2040},"ping",[28,121686,121687],{"class":105},"      # 测试网络连通性\n",[28,121689,121690,121692],{"class":30,"line":1841},[28,121691,26927],{"class":2040},[28,121693,121694],{"class":105},"      # 发送 HTTP 请求\n",[28,121696,121697,121699],{"class":30,"line":1855},[28,121698,120348],{"class":2040},[28,121700,121701],{"class":105},"      # 下载文件\n",[28,121703,121704,121707],{"class":30,"line":1860},[28,121705,121706],{"class":2040},"ssh",[28,121708,121709],{"class":105},"       # 远程登录\n",[28,121711,121712,121715],{"class":30,"line":2654},[28,121713,121714],{"class":2040},"scp",[28,121716,121717],{"class":105},"       # 远程文件传输\n",[28,121719,121720],{"class":30,"line":2668},[28,121721,2477],{"emptyLinePlaceholder":144},[28,121723,121724],{"class":30,"line":2676},[28,121725,121726],{"class":105},"# 包管理（Debian\u002FUbuntu）\n",[28,121728,121729,121731,121733],{"class":30,"line":2681},[28,121730,117427],{"class":2040},[28,121732,117406],{"class":320},[28,121734,121735],{"class":105},"   # 更新软件源\n",[28,121737,121738,121740,121742],{"class":30,"line":2687},[28,121739,117427],{"class":2040},[28,121741,23911],{"class":320},[28,121743,121744],{"class":105},"  # 安装软件包\n",[28,121746,121747,121749,121751],{"class":30,"line":2693},[28,121748,117427],{"class":2040},[28,121750,26157],{"class":320},[28,121752,121753],{"class":105},"   # 卸载软件包\n",[171,121755,121756],{"start":94},[174,121757,121758],{},"KDE Dolphin 以root打开",[14,121760,121761],{},"kde5",[18,121763,121765],{"className":117355,"code":121764,"language":117357,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[25,121766,121767],{"__ignoreMap":23},[28,121768,121769,121772,121775,121778,121780,121782,121785,121788,121790,121793,121795],{"class":30,"line":31},[28,121770,121771],{"class":2040},"pkexec",[28,121773,121774],{"class":320}," env",[28,121776,121777],{"class":320}," DISPLAY=",[28,121779,28221],{"class":34},[28,121781,28279],{"class":320},[28,121783,121784],{"class":34},"$XAUTHORITY ",[28,121786,121787],{"class":320},"KDE_SESSION_VERSION=",[28,121789,533],{"class":45},[28,121791,121792],{"class":320}," KDE_FULL_SESSION=",[28,121794,1439],{"class":45},[28,121796,121797],{"class":320}," dolphin\n",[14,121799,121800],{},"kde6",[18,121802,121804],{"className":117355,"code":121803,"language":117357,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[25,121805,121806],{"__ignoreMap":23},[28,121807,121808,121810,121812,121814,121816,121818,121820,121822,121824,121826,121828],{"class":30,"line":31},[28,121809,121771],{"class":2040},[28,121811,121774],{"class":320},[28,121813,121777],{"class":320},[28,121815,28221],{"class":34},[28,121817,28279],{"class":320},[28,121819,121784],{"class":34},[28,121821,121787],{"class":320},[28,121823,558],{"class":45},[28,121825,121792],{"class":320},[28,121827,1439],{"class":45},[28,121829,121797],{"class":320},[136,121831,121832],{},"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":23,"searchDepth":94,"depth":94,"links":121834},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121494,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121841,"title":121842,"body":121843,"description":141,"extension":142,"meta":121857,"navigation":144,"path":121858,"seo":121859,"stem":121860,"__hash__":121861},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121844,"toc":121855},[121845,121848],[10,121846,121842],{"id":121847},"_5-各种环境配置",[14,121849,121850],{},[35,121851,121854],{"href":121852,"rel":121853},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23942],"电控组环境搭建大全",{"title":23,"searchDepth":94,"depth":94,"links":121856},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121842,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121863,"title":121864,"body":121865,"description":141,"extension":142,"meta":122213,"navigation":144,"path":122214,"seo":122215,"stem":122216,"__hash__":122217},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121866,"toc":122205},[121867,121870,121874,121878,121882,121887,121894,121898,122191,122195,122202],[10,121868,121864],{"id":121869},"_6-拓展功能",[159,121871,121873],{"id":121872},"_61-wine","6.1 Wine",[159,121875,121877],{"id":121876},"_62-android","6.2 Android",[188,121879,121881],{"id":121880},"_621-i卡a卡","6.2.1 I卡、A卡",[171,121883,121884],{},[174,121885,121886],{},"Wayland-Waydroid(体验超级好)",[14,121888,121889,121890],{},"Waydroid 官网与安装指南：",[35,121891,121892],{"href":121892,"rel":121893},"https:\u002F\u002Fwaydro.id\u002F",[23942],[188,121895,121897],{"id":121896},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[171,121899,121900],{},[174,121901,121902,121903,121905,121906,121910,121912,121915,121920,122117],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53791,121904],{},"BlissOS 官网下载：",[35,121907,121908],{"href":121908,"rel":121909},"https:\u002F\u002Fblissos.org\u002F",[23942],[53791,121911],{},[1539,121913],{"alt":23,"src":121914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[171,121916,121917],{"start":109},[174,121918,121919],{},"比较推荐的配置",[18,121921,121923],{"className":117355,"code":121922,"language":117357,"meta":23,"style":23},"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",[25,121924,121925,121932,121942,121952,121962,121974,121984,121991,122001,122010,122019,122029,122039,122048,122058,122068,122080,122090,122099,122109],{"__ignoreMap":23},[28,121926,121927,121930],{"class":30,"line":31},[28,121928,121929],{"class":2040},"qemu-system-x86_64",[28,121931,24756],{"class":45},[28,121933,121934,121937,121940],{"class":30,"line":94},[28,121935,121936],{"class":45},"        -M",[28,121938,121939],{"class":320}," q35,vmport=off",[28,121941,24756],{"class":45},[28,121943,121944,121947,121950],{"class":30,"line":109},[28,121945,121946],{"class":45},"        -accel",[28,121948,121949],{"class":320}," kvm",[28,121951,24756],{"class":45},[28,121953,121954,121957,121960],{"class":30,"line":125},[28,121955,121956],{"class":45},"        -cpu",[28,121958,121959],{"class":320}," qemu64,+sse3,+sse4.2",[28,121961,24756],{"class":45},[28,121963,121964,121967,121970,121972],{"class":30,"line":131},[28,121965,121966],{"class":45},"        -smp",[28,121968,121969],{"class":320}," 8,cores=",[28,121971,507],{"class":45},[28,121973,24756],{"class":45},[28,121975,121976,121979,121982],{"class":30,"line":1291},[28,121977,121978],{"class":45},"        -m",[28,121980,121981],{"class":320}," 6G",[28,121983,24756],{"class":45},[28,121985,121986,121989],{"class":30,"line":1297},[28,121987,121988],{"class":45},"        -usb",[28,121990,24756],{"class":45},[28,121992,121993,121996,121999],{"class":30,"line":1388},[28,121994,121995],{"class":45},"        -device",[28,121997,121998],{"class":320}," virtio-tablet",[28,122000,24756],{"class":45},[28,122002,122003,122005,122008],{"class":30,"line":1394},[28,122004,121995],{"class":45},[28,122006,122007],{"class":320}," virtio-keyboard",[28,122009,24756],{"class":45},[28,122011,122012,122014,122017],{"class":30,"line":1406},[28,122013,121995],{"class":45},[28,122015,122016],{"class":320}," usb-tablet",[28,122018,24756],{"class":45},[28,122020,122021,122024,122027],{"class":30,"line":1689},[28,122022,122023],{"class":45},"        -bios",[28,122025,122026],{"class":320}," OVMF-pure-efi64.fd",[28,122028,24756],{"class":45},[28,122030,122031,122034,122037],{"class":30,"line":1694},[28,122032,122033],{"class":45},"        -net",[28,122035,122036],{"class":320}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[28,122038,24756],{"class":45},[28,122040,122041,122043,122046],{"class":30,"line":1700},[28,122042,122033],{"class":45},[28,122044,122045],{"class":320}," nic,model=virtio",[28,122047,24756],{"class":45},[28,122049,122050,122053,122056],{"class":30,"line":1705},[28,122051,122052],{"class":45},"        -audio",[28,122054,122055],{"class":320}," sdl,model=hda",[28,122057,24756],{"class":45},[28,122059,122060,122063,122066],{"class":30,"line":1719},[28,122061,122062],{"class":45},"        -display",[28,122064,122065],{"class":320}," sdl,gl=on,show-cursor=on",[28,122067,24756],{"class":45},[28,122069,122070,122072,122075,122078],{"class":30,"line":1724},[28,122071,121995],{"class":45},[28,122073,122074],{"class":320}," virtio-vga-gl,xres=1920,yres=",[28,122076,122077],{"class":45},"1080",[28,122079,24756],{"class":45},[28,122081,122082,122085,122088],{"class":30,"line":1730},[28,122083,122084],{"class":45},"        -drive",[28,122086,122087],{"class":320}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[28,122089,24756],{"class":45},[28,122091,122092,122094,122097],{"class":30,"line":1751},[28,122093,122084],{"class":45},[28,122095,122096],{"class":320}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[28,122098,24756],{"class":45},[28,122100,122101,122104,122107],{"class":30,"line":1756},[28,122102,122103],{"class":45},"        -monitor",[28,122105,122106],{"class":320}," stdio",[28,122108,24756],{"class":45},[28,122110,122111,122114],{"class":30,"line":1770},[28,122112,122113],{"class":45},"        -serial",[28,122115,122116],{"class":320}," none\n",[171,122118,122119],{"start":131},[174,122120,122121,122122],{},"常用操作：",[171,122123,122124,122127,122183],{},[174,122125,122126],{},"全屏：Ctrl+Alt+F",[174,122128,122129,122130,122135],{},"adb调试",[171,122131,122132],{},[174,122133,122134],{},"使Linux与Android用ADB连接。",[18,122136,122138],{"className":117355,"code":122137,"language":117357,"meta":23,"style":23},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[25,122139,122140,122145,122156,122161,122173,122178],{"__ignoreMap":23},[28,122141,122142],{"class":30,"line":31},[28,122143,122144],{"class":105},"# 连接安卓\n",[28,122146,122147,122150,122153],{"class":30,"line":94},[28,122148,122149],{"class":2040},"adb",[28,122151,122152],{"class":320}," connect",[28,122154,122155],{"class":45}," 127.0.0.1\n",[28,122157,122158],{"class":30,"line":109},[28,122159,122160],{"class":105},"# 打开shell\n",[28,122162,122163,122165,122167,122170],{"class":30,"line":125},[28,122164,122149],{"class":2040},[28,122166,26961],{"class":45},[28,122168,122169],{"class":320}," 127.0.0.1:5555",[28,122171,122172],{"class":320}," shell\n",[28,122174,122175],{"class":30,"line":131},[28,122176,122177],{"class":105},"# 使用root权限\n",[28,122179,122180],{"class":30,"line":1291},[28,122181,122182],{"class":2040},"su\n",[174,122184,122185,122186],{},"中文输入法",[171,122187,122188],{},[174,122189,122190],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[159,122192,122194],{"id":122193},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122196,122197,122198],{},"rEFInd 官网与文档：",[35,122199,122200],{"href":122200,"rel":122201},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23942],[136,122203,122204],{},"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":23,"searchDepth":94,"depth":94,"links":122206},[122207,122208,122212],{"id":121872,"depth":94,"text":121873},{"id":121876,"depth":94,"text":121877,"children":122209},[122210,122211],{"id":121880,"depth":109,"text":121881},{"id":121896,"depth":109,"text":121897},{"id":122193,"depth":94,"text":122194},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121864,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122219,"title":122220,"body":122221,"description":141,"extension":142,"meta":125520,"navigation":144,"path":125521,"seo":125522,"stem":125523,"__hash__":125524},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122222,"toc":125494},[122223,122226,122230,122233,122240,122490,122493,122565,122568,122572,122576,122581,122584,122587,122590,122595,122598,122601,122604,122609,122612,122617,122620,122623,122628,122631,122636,122639,122643,122647,122650,122655,122658,122672,122675,122678,122687,122690,122699,122702,122705,122714,122717,122726,122729,122732,122741,122744,122747,122762,122765,122768,122777,122782,122785,122788,122797,122800,122809,122812,122821,122824,122833,122838,122841,122849,122854,122857,122866,122869,122877,122882,122885,122894,122897,122900,122904,122907,122912,122915,122920,122934,122939,122944,122955,122960,122966,122971,122986,122991,122994,122999,123004,123009,123017,123022,123029,123034,123045,123050,123053,123057,123060,123063,123068,123071,123090,123095,123098,123107,123112,123115,123137,123140,123170,123173,123178,123181,123195,123200,123219,123222,123225,123230,123242,123247,123252,123255,123260,123263,123278,123281,123286,123291,123295,123300,123340,123343,123347,123353,123359,123364,123367,123374,123379,123386,123389,123392,123399,123413,123416,123476,123479,123493,123505,123508,123511,123514,123578,123581,123584,123587,123607,123610,123615,123622,123626,123629,123633,123638,123643,123647,123650,123653,123695,123700,123703,123725,123740,123742,123747,123759,123819,123821,123823,123877,123879,123881,123887,123892,123895,123900,123904,123907,123969,123974,123977,123979,123983,123995,124077,124079,124081,124135,124141,124143,124147,124152,124154,124159,124163,124183,124218,124222,124225,124228,124231,124238,124241,124253,124256,124271,124274,124293,124341,124344,124361,124364,124378,124383,124386,124395,124410,124422,124460,124465,124474,124479,124484,124510,124519,124523,124527,124532,124535,124539,124543,124548,124551,124556,124559,124564,124567,124572,124575,124579,124584,124587,124592,124595,124599,124604,124607,124612,124615,124620,124623,124627,124632,124635,124640,124643,124648,124651,124655,124660,124663,124668,124671,124676,124679,124684,124687,124692,124695,124700,124703,124707,124712,124715,124720,124727,124731,124736,124739,124744,124747,124751,124756,124759,124762,124765,124768,124771,124775,124778,124788,124793,124798,124820,124825,124830,124837,124841,124846,124849,124852,124857,124860,124863,124866,124869,124872,124875,124878,124881,124884,124887,124890,124893,124898,124903,124908,124913,124918,124923,124928,124931,124935,124938,124942,124947,124952,124957,124962,124966,124972,124980,124985,124988,124993,125008,125011,125016,125050,125065,125068,125123,125149,125161,125164,125173,125176,125191,125196,125199,125205,125210,125213,125218,125221,125226,125231,125238,125241,125256,125259,125294,125299,125307,125345,125348,125351,125356,125359,125364,125375,125409,125414,125417,125426,125431,125437,125440,125445,125454,125459,125462,125465,125470,125478,125481,125486,125491],[10,122224,122220],{"id":122225},"_7-其他操作",[159,122227,122229],{"id":122228},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122231,122232],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122234,122235,122236,122239],{},"进入工控机的硬盘目录，进入",[25,122237,122238],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[18,122241,122245],{"className":122242,"code":122243,"language":122244,"meta":23,"style":23},"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",[25,122246,122247,122255,122266,122273,122280,122292,122299,122311,122322,122333,122340,122347,122354,122366,122378,122385,122397,122409,122416,122428,122440,122452,122463,122470,122481],{"__ignoreMap":23},[28,122248,122249,122252],{"class":30,"line":31},[28,122250,122251],{"class":51375},"network",[28,122253,122254],{"class":34},": \n",[28,122256,122257,122260,122262,122264],{"class":30,"line":94},[28,122258,122259],{"class":51375},"  version",[28,122261,51512],{"class":34},[28,122263,52],{"class":45},[28,122265,2751],{"class":34},[28,122267,122268,122271],{"class":30,"line":109},[28,122269,122270],{"class":51375},"  wifis",[28,122272,122254],{"class":34},[28,122274,122275,122278],{"class":30,"line":125},[28,122276,122277],{"class":51375},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[28,122279,122254],{"class":34},[28,122281,122282,122285,122287,122290],{"class":30,"line":131},[28,122283,122284],{"class":51375},"      renderer",[28,122286,51512],{"class":34},[28,122288,122289],{"class":320},"NetworkManager",[28,122291,2751],{"class":34},[28,122293,122294,122297],{"class":30,"line":1291},[28,122295,122296],{"class":51375},"      match",[28,122298,122254],{"class":34},[28,122300,122301,122304,122306,122309],{"class":30,"line":1297},[28,122302,122303],{"class":51375},"        name",[28,122305,51512],{"class":34},[28,122307,122308],{"class":320},"\"wlan0\"",[28,122310,2751],{"class":34},[28,122312,122313,122316,122318,122320],{"class":30,"line":1388},[28,122314,122315],{"class":51375},"      dhcp4",[28,122317,51512],{"class":34},[28,122319,1439],{"class":45},[28,122321,2751],{"class":34},[28,122323,122324,122327,122329,122331],{"class":30,"line":1394},[28,122325,122326],{"class":51375},"      dhcp6",[28,122328,51512],{"class":34},[28,122330,1439],{"class":45},[28,122332,2751],{"class":34},[28,122334,122335,122338],{"class":30,"line":1406},[28,122336,122337],{"class":51375},"      access-points",[28,122339,122254],{"class":34},[28,122341,122342,122345],{"class":30,"line":1689},[28,122343,122344],{"class":320},"        \"EMIS_Vinci_Robocon_5G\"",[28,122346,122254],{"class":34},[28,122348,122349,122352],{"class":30,"line":1694},[28,122350,122351],{"class":51375},"          auth",[28,122353,122254],{"class":34},[28,122355,122356,122359,122361,122364],{"class":30,"line":1700},[28,122357,122358],{"class":51375},"            key-management",[28,122360,51512],{"class":34},[28,122362,122363],{"class":320},"\"psk\"",[28,122365,2751],{"class":34},[28,122367,122368,122371,122373,122376],{"class":30,"line":1705},[28,122369,122370],{"class":51375},"            password",[28,122372,51512],{"class":34},[28,122374,122375],{"class":320},"\"vinci666\"",[28,122377,2751],{"class":34},[28,122379,122380,122383],{"class":30,"line":1719},[28,122381,122382],{"class":51375},"          networkmanager",[28,122384,122254],{"class":34},[28,122386,122387,122390,122392,122395],{"class":30,"line":1724},[28,122388,122389],{"class":51375},"            uuid",[28,122391,51512],{"class":34},[28,122393,122394],{"class":320},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[28,122396,2751],{"class":34},[28,122398,122399,122402,122404,122407],{"class":30,"line":1730},[28,122400,122401],{"class":51375},"            name",[28,122403,51512],{"class":34},[28,122405,122406],{"class":320},"\"EMIS_Vinci_Robocon_5G\"",[28,122408,2751],{"class":34},[28,122410,122411,122414],{"class":30,"line":1751},[28,122412,122413],{"class":51375},"            passthrough",[28,122415,122254],{"class":34},[28,122417,122418,122421,122423,122426],{"class":30,"line":1756},[28,122419,122420],{"class":51375},"              wifi-security.auth-alg",[28,122422,51512],{"class":34},[28,122424,122425],{"class":320},"\"open\"",[28,122427,2751],{"class":34},[28,122429,122430,122433,122435,122438],{"class":30,"line":1770},[28,122431,122432],{"class":51375},"              ipv6.addr-gen-mode",[28,122434,51512],{"class":34},[28,122436,122437],{"class":320},"\"default\"",[28,122439,2751],{"class":34},[28,122441,122442,122445,122447,122450],{"class":30,"line":1775},[28,122443,122444],{"class":51375},"              ipv6.ip6-privacy",[28,122446,51512],{"class":34},[28,122448,122449],{"class":320},"\"-1\"",[28,122451,2751],{"class":34},[28,122453,122454,122457,122459,122461],{"class":30,"line":1804},[28,122455,122456],{"class":51375},"              proxy._",[28,122458,51512],{"class":34},[28,122460,7729],{"class":320},[28,122462,2751],{"class":34},[28,122464,122465,122468],{"class":30,"line":1809},[28,122466,122467],{"class":51375},"      networkmanager",[28,122469,122254],{"class":34},[28,122471,122472,122475,122477,122479],{"class":30,"line":1826},[28,122473,122474],{"class":51375},"        uuid",[28,122476,51512],{"class":34},[28,122478,122394],{"class":320},[28,122480,2751],{"class":34},[28,122482,122483,122485,122487],{"class":30,"line":1831},[28,122484,122303],{"class":51375},[28,122486,51512],{"class":34},[28,122488,122489],{"class":320},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122491,122492],{},"将其改为新wifi的名和密码：",[18,122494,122496],{"className":122242,"code":122495,"language":122244,"meta":23,"style":23},"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",[25,122497,122498,122504,122513,122519,122526,122535,122543,122549,122555],{"__ignoreMap":23},[28,122499,122500,122502],{"class":30,"line":31},[28,122501,122251],{"class":51375},[28,122503,3816],{"class":34},[28,122505,122506,122508,122510],{"class":30,"line":94},[28,122507,122259],{"class":51375},[28,122509,51512],{"class":34},[28,122511,122512],{"class":45},"2\n",[28,122514,122515,122517],{"class":30,"line":109},[28,122516,122270],{"class":51375},[28,122518,3816],{"class":34},[28,122520,122521,122524],{"class":30,"line":125},[28,122522,122523],{"class":51375},"    wlan0",[28,122525,3816],{"class":34},[28,122527,122528,122530,122532],{"class":30,"line":131},[28,122529,122315],{"class":51375},[28,122531,51512],{"class":34},[28,122533,122534],{"class":45},"true\n",[28,122536,122537,122539,122541],{"class":30,"line":1291},[28,122538,122326],{"class":51375},[28,122540,51512],{"class":34},[28,122542,122534],{"class":45},[28,122544,122545,122547],{"class":30,"line":1297},[28,122546,122337],{"class":51375},[28,122548,3816],{"class":34},[28,122550,122551,122553],{"class":30,"line":1388},[28,122552,122344],{"class":320},[28,122554,3816],{"class":34},[28,122556,122557,122560,122562],{"class":30,"line":1394},[28,122558,122559],{"class":51375},"          password",[28,122561,51512],{"class":34},[28,122563,122564],{"class":320},"\"vinci666\"\n",[14,122566,122567],{},"工控机开机即可连上网。",[159,122569,122571],{"id":122570},"_72-ssh远程开发","7.2 SSH远程开发",[188,122573,122575],{"id":122574},"_721-环境准备","7.2.1 环境准备",[14,122577,122578],{},[365,122579,122580],{},"1.硬件准备",[14,122582,122583],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122585,122586],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122588,122589],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122591,122592],{},[365,122593,122594],{},"2.设置固定IP",[14,122596,122597],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122599,122600],{},"1.进入设置界面",[14,122602,122603],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122605,122606],{},[1539,122607],{"alt":23,"src":122608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122610,122611],{},"2.配置所连接的网络",[14,122613,122614],{},[1539,122615],{"alt":23,"src":122616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122618,122619],{},"3.设置固定IP",[14,122621,122622],{},"查看当前IP地址。",[14,122624,122625],{},[1539,122626],{"alt":23,"src":122627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122629,122630],{},"设置固定IP。",[14,122632,122633],{},[1539,122634],{"alt":23,"src":122635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122637,122638],{},"至此，IP配置完毕。",[188,122640,122642],{"id":122641},"_722-环境搭建","7.2.2 环境搭建",[14,122644,122645],{},[365,122646,25831],{},[14,122648,122649],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122651,122652],{},[365,122653,122654],{},"实现",[14,122656,122657],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[171,122659,122660,122663,122666,122669],{},[174,122661,122662],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[174,122664,122665],{},"远程主机启动SSH服务；",[174,122667,122668],{},"本地主机登陆远程主机；",[174,122670,122671],{},"实现数据传输。",[14,122673,122674],{},"1.安装SSH客户端与服务端",[14,122676,122677],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[18,122679,122681],{"className":120875,"code":122680,"language":120877,"meta":120878,"style":23}," sudo apt install openssh-server\n",[25,122682,122683],{"__ignoreMap":23},[28,122684,122685],{"class":30,"line":31},[28,122686,122680],{},[14,122688,122689],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[18,122691,122693],{"className":120875,"code":122692,"language":120877,"meta":120878,"style":23},"sudo apt install openssh-client\n",[25,122694,122695],{"__ignoreMap":23},[28,122696,122697],{"class":30,"line":31},[28,122698,122692],{},[14,122700,122701],{},"2.远程主机启动SSH服务",[14,122703,122704],{},"远程主机启动 ssh 服务命令如下：",[18,122706,122708],{"className":120875,"code":122707,"language":120877,"meta":120878,"style":23},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[25,122709,122710],{"__ignoreMap":23},[28,122711,122712],{"class":30,"line":31},[28,122713,122707],{},[14,122715,122716],{},"启动后可使用如下命令查看服务是否正常运行：",[18,122718,122720],{"className":120875,"code":122719,"language":120877,"meta":120878,"style":23},"ps -e | grep ssh\n",[25,122721,122722],{"__ignoreMap":23},[28,122723,122724],{"class":30,"line":31},[28,122725,122719],{},[14,122727,122728],{},"如果启动成功，会包含 sshd 程序。",[14,122730,122731],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[18,122733,122735],{"className":120875,"code":122734,"language":120877,"meta":120878,"style":23},"sudo systemctl enable ssh\n",[25,122736,122737],{"__ignoreMap":23},[28,122738,122739],{"class":30,"line":31},[28,122740,122734],{},[14,122742,122743],{},"3.本地远程登录",[14,122745,122746],{},"登录远程主机可以调用如下命令:",[18,122748,122750],{"className":117355,"code":122749,"language":117357,"meta":23,"style":23},"ssh -X 用户名@ip地址\n",[25,122751,122752],{"__ignoreMap":23},[28,122753,122754,122756,122759],{"class":30,"line":31},[28,122755,121706],{"class":2040},[28,122757,122758],{"class":45}," -X",[28,122760,122761],{"class":320}," 用户名@ip地址\n",[14,122763,122764],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122766,122767],{},"如果退出，可以调用exit命令：",[18,122769,122771],{"className":120875,"code":122770,"language":120877,"meta":120878,"style":23},"exit\n",[25,122772,122773],{"__ignoreMap":23},[28,122774,122775],{"class":30,"line":31},[28,122776,122770],{},[14,122778,122779],{},[365,122780,122781],{},"4.实现数据传输",[14,122783,122784],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122786,122787],{},"上传文件指令格式如下：",[18,122789,122791],{"className":120875,"code":122790,"language":120877,"meta":120878,"style":23},"scp 本地文件路径 账号@ip:路径\n",[25,122792,122793],{"__ignoreMap":23},[28,122794,122795],{"class":30,"line":31},[28,122796,122790],{},[14,122798,122799],{},"上传文件夹指令格式如下：",[18,122801,122803],{"className":120875,"code":122802,"language":120877,"meta":120878,"style":23},"scp -r 本地文件夹路径 账号@ip:路径\n",[25,122804,122805],{"__ignoreMap":23},[28,122806,122807],{"class":30,"line":31},[28,122808,122802],{},[14,122810,122811],{},"下载文件指令格式如下：",[18,122813,122815],{"className":120875,"code":122814,"language":120877,"meta":120878,"style":23},"scp 账号@ip:路径 本地文件夹路径\n",[25,122816,122817],{"__ignoreMap":23},[28,122818,122819],{"class":30,"line":31},[28,122820,122814],{},[14,122822,122823],{},"下载文件夹指令格式如下：",[18,122825,122827],{"className":120875,"code":122826,"language":120877,"meta":120878,"style":23},"scp -r 账号@ip:路径 本地文件夹路径\n",[25,122828,122829],{"__ignoreMap":23},[28,122830,122831],{"class":30,"line":31},[28,122832,122826],{},[14,122834,122835],{},[365,122836,122837],{},"优化",[14,122839,122840],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[171,122842,122843,122846],{},[174,122844,122845],{},"本地生成密钥对；",[174,122847,122848],{},"将公钥上传至远程主机。",[14,122850,122851],{},[365,122852,122853],{},"1.生成密钥对",[14,122855,122856],{},"本地客户端生成公私钥：（一路回车默认即可）",[18,122858,122860],{"className":120875,"code":122859,"language":120877,"meta":120878,"style":23},"ssh-keygen\n",[25,122861,122862],{"__ignoreMap":23},[28,122863,122864],{"class":30,"line":31},[28,122865,122859],{},[14,122867,122868],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[171,122870,122871,122874],{},[174,122872,122873],{},"id_rsa （私钥）；",[174,122875,122876],{},"id_rsa.pub (公钥)。",[14,122878,122879],{},[365,122880,122881],{},"2.公钥上传",[14,122883,122884],{},"上传指令如下：",[18,122886,122888],{"className":120875,"code":122887,"language":120877,"meta":120878,"style":23},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[25,122889,122890],{"__ignoreMap":23},[28,122891,122892],{"class":30,"line":31},[28,122893,122887],{},[14,122895,122896],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122898,122899],{},"以后再远程登录就无需录入密码了。",[188,122901,122903],{"id":122902},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122905,122906],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122908,122909],{},[365,122910,122911],{},"1.准备工作",[14,122913,122914],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122916,122917],{},[365,122918,122919],{},"2.为VScode安装远程开发插件",[14,122921,122922,122923,122926,122927,122930,122931,28463],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[25,122924,122925],{},"扩展：商店","的搜索栏输入",[25,122928,122929],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[25,122932,122933],{},"安装",[14,122935,122936],{},[1539,122937],{"alt":23,"src":122938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122940,122941],{},[365,122942,122943],{},"3.配置远程连接",[14,122945,122946,122947,122950,122951,122954],{},"步骤1：使用快捷键",[25,122948,122949],{},"ctrl + shift + p","打开命令输入窗口，并输入",[25,122952,122953],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122956,122957],{},[1539,122958],{"alt":23,"src":122959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122961,122962,122963,28463],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[25,122964,122965],{},"Add New SSH Host",[14,122967,122968],{},[1539,122969],{"alt":23,"src":122970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122972,122973,122974,122977,122978,122981,122982,122985],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[25,122975,122976],{},"ssh +X ubuntu@192.168.43.164","，其中，",[25,122979,122980],{},"ubuntu","需要替换为你的登录用户名，",[25,122983,122984],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122987,122988],{},[1539,122989],{"alt":23,"src":122990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122992,122993],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122995,122996],{},[1539,122997],{"alt":23,"src":122998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123000,123001],{},[1539,123002],{"alt":23,"src":123003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123005,123006],{},[365,123007,123008],{},"4.使用",[14,123010,123011,123012,122950,123014,123016],{},"步骤1：继续使用快捷键",[25,123013,122949],{},[25,123015,122953],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123018,123019],{},[1539,123020],{"alt":23,"src":123021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123023,123024,123025,123028],{},"或者，也可以点击侧边栏的",[25,123026,123027],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123030,123031],{},[1539,123032],{"alt":23,"src":123033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123035,123036,123037,123040,123041,123044],{},"步骤2：选择菜单栏的",[25,123038,123039],{},"文件","下的",[25,123042,123043],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123046,123047],{},[1539,123048],{"alt":23,"src":123049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123051,123052],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[159,123054,123056],{"id":123055},"_73-远程桌面","7.3 远程桌面",[14,123058,123059],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123061,123062],{},"我们选择使用VNC来看。",[171,123064,123065],{},[174,123066,123067],{},"安装VNC服务器：",[14,123069,123070],{},"这里以TigerVNC为例进行安装：",[18,123072,123074],{"className":117355,"code":123073,"language":117357,"meta":23,"style":23},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[25,123075,123076],{"__ignoreMap":23},[28,123077,123078,123080,123082,123084,123087],{"class":30,"line":31},[28,123079,24654],{"class":2040},[28,123081,117376],{"class":320},[28,123083,23911],{"class":320},[28,123085,123086],{"class":320}," tigervnc-standalone-server",[28,123088,123089],{"class":320}," tigervnc-common\n",[171,123091,123092],{"start":94},[174,123093,123094],{},"设置VNC密码：",[14,123096,123097],{},"为VNC用户设置密码，运行以下命令：",[18,123099,123101],{"className":117355,"code":123100,"language":117357,"meta":23,"style":23},"vncpasswd\n",[25,123102,123103],{"__ignoreMap":23},[28,123104,123105],{"class":30,"line":31},[28,123106,123100],{"class":2040},[171,123108,123109],{"start":109},[174,123110,123111],{},"配置VNC启动脚本:",[14,123113,123114],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[18,123116,123118],{"className":117355,"code":123117,"language":117357,"meta":23,"style":23},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[25,123119,123120,123129],{"__ignoreMap":23},[28,123121,123122,123124,123126],{"class":30,"line":31},[28,123123,101325],{"class":2040},[28,123125,29294],{"class":45},[28,123127,123128],{"class":320}," ~\u002F.vnc\n",[28,123130,123131,123134],{"class":30,"line":94},[28,123132,123133],{"class":2040},"nano",[28,123135,123136],{"class":320}," ~\u002F.vnc\u002Fxstartup\n",[14,123138,123139],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[18,123141,123143],{"className":117355,"code":123142,"language":117357,"meta":23,"style":23},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[25,123144,123145,123150,123158,123165],{"__ignoreMap":23},[28,123146,123147],{"class":30,"line":31},[28,123148,123149],{"class":105},"#!\u002Fbin\u002Fsh\n",[28,123151,123152,123155],{"class":30,"line":94},[28,123153,123154],{"class":45},"unset",[28,123156,123157],{"class":320}," SESSION_MANAGER\n",[28,123159,123160,123162],{"class":30,"line":109},[28,123161,123154],{"class":45},[28,123163,123164],{"class":320}," DBUS_SESSION_BUS_ADDRESS\n",[28,123166,123167],{"class":30,"line":125},[28,123168,123169],{"class":2040},"gnome-session\n",[14,123171,123172],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[171,123174,123175],{"start":125},[174,123176,123177],{},"给予执行权限：",[14,123179,123180],{},"为xstartup文件设置执行权限：",[18,123182,123184],{"className":117355,"code":123183,"language":117357,"meta":23,"style":23},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[25,123185,123186],{"__ignoreMap":23},[28,123187,123188,123190,123193],{"class":30,"line":31},[28,123189,24689],{"class":2040},[28,123191,123192],{"class":320}," +x",[28,123194,123136],{"class":320},[171,123196,123197],{"start":131},[174,123198,123199],{},"启动VNC服务器：",[18,123201,123203],{"className":117355,"code":123202,"language":117357,"meta":23,"style":23},"vncserver -geometry 1920x1080 -localhost=0\n",[25,123204,123205],{"__ignoreMap":23},[28,123206,123207,123210,123213,123216],{"class":30,"line":31},[28,123208,123209],{"class":2040},"vncserver",[28,123211,123212],{"class":45}," -geometry",[28,123214,123215],{"class":320}," 1920x1080",[28,123217,123218],{"class":45}," -localhost=0\n",[14,123220,123221],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123223,123224],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[171,123226,123227],{"start":1291},[174,123228,123229],{},"查看已开启的VNC服务器：",[18,123231,123233],{"className":117355,"code":123232,"language":117357,"meta":23,"style":23},"vncserver -list\n",[25,123234,123235],{"__ignoreMap":23},[28,123236,123237,123239],{"class":30,"line":31},[28,123238,123209],{"class":2040},[28,123240,123241],{"class":45}," -list\n",[14,123243,123244],{},[1539,123245],{"alt":23,"src":123246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[171,123248,123249],{"start":1297},[174,123250,123251],{},"连接到VNC服务器：",[14,123253,123254],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[171,123256,123257],{"start":1388},[174,123258,123259],{},"停止VNC服务器：",[14,123261,123262],{},"如果需要停止VNC服务器，可以使用以下命令：",[18,123264,123266],{"className":117355,"code":123265,"language":117357,"meta":23,"style":23},"vncserver -kill :1\n",[25,123267,123268],{"__ignoreMap":23},[28,123269,123270,123272,123275],{"class":30,"line":31},[28,123271,123209],{"class":2040},[28,123273,123274],{"class":45}," -kill",[28,123276,123277],{"class":320}," :1\n",[14,123279,123280],{},"将:1替换为你实际使用的显示编号。",[14,123282,123283],{},[1539,123284],{"alt":23,"src":123285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123287,123288],{},[1539,123289],{"alt":23,"src":123290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[159,123292,123294],{"id":123293},"_74-usb端口设置","7.4 USB端口设置",[14,123296,123297],{},[365,123298,123299],{},"首先先配置好权限",[18,123301,123303],{"className":117355,"code":123302,"language":117357,"meta":23,"style":23},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[25,123304,123305,123310,123323,123330,123335],{"__ignoreMap":23},[28,123306,123307],{"class":30,"line":31},[28,123308,123309],{"class":105},"# 将用户权限提高\n",[28,123311,123312,123314,123316,123318,123321],{"class":30,"line":94},[28,123313,24654],{"class":2040},[28,123315,26652],{"class":320},[28,123317,26655],{"class":45},[28,123319,123320],{"class":320}," dialout",[28,123322,26660],{"class":34},[28,123324,123325,123327],{"class":30,"line":109},[28,123326,26679],{"class":2040},[28,123328,123329],{"class":320}," dialout\n",[28,123331,123332],{"class":30,"line":125},[28,123333,123334],{"class":105},"# 查看下面命令是否输出dialout（若输出才正常）\n",[28,123336,123337],{"class":30,"line":131},[28,123338,123339],{"class":2040},"groups\n",[14,123341,123342],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[188,123344,123346],{"id":123345},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123348,123349,123352],{},[365,123350,123351],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123354,123355,123358],{},[365,123356,123357],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123360,123361],{},[365,123362,123363],{},"流程如下：",[14,123365,123366],{},"（1）.查找设备idVendor和idProduct",[14,123368,123369,123370,123373],{},"接入两个USB设备，在终端调用指令",[25,123371,123372],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123375,123376],{},[1539,123377],{"alt":23,"src":123378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123380,123381,123382,123385],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[25,123383,123384],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123387,123388],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123390,123391],{},"（2）.编写映射规则",[14,123393,123394,123395,123398],{},"在",[25,123396,123397],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[18,123400,123402],{"className":117355,"code":123401,"language":117357,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[25,123403,123404],{"__ignoreMap":23},[28,123405,123406,123408,123410],{"class":30,"line":31},[28,123407,24654],{"class":2040},[28,123409,118642],{"class":320},[28,123411,123412],{"class":320}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123414,123415],{},"输入如下内容：",[18,123417,123419],{"className":117355,"code":123418,"language":117357,"meta":23,"style":23},"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",[25,123420,123421,123451],{"__ignoreMap":23},[28,123422,123423,123426,123428,123431,123434,123437,123440,123442,123445,123448],{"class":30,"line":31},[28,123424,123425],{"class":34},"KERNEL",[28,123427,39],{"class":38},[28,123429,123430],{"class":320},"=\"ttyUSB*\",",[28,123432,123433],{"class":2040}," ATTRS",[28,123435,123436],{"class":320},"{idVendor}==",[28,123438,123439],{"class":2040},"\"10c4\"",[28,123441,49],{"class":2040},[28,123443,123444],{"class":320}," ATTRS{idProduct}==\"ea60\",",[28,123446,123447],{"class":320}," MODE:=\"0777\",",[28,123449,123450],{"class":320}," SYMLINK+=\"mylidar\"\n",[28,123452,123453,123455,123457,123459,123461,123463,123466,123468,123471,123473],{"class":30,"line":94},[28,123454,123425],{"class":34},[28,123456,39],{"class":38},[28,123458,123430],{"class":320},[28,123460,123433],{"class":2040},[28,123462,123436],{"class":320},[28,123464,123465],{"class":2040},"\"1a86\"",[28,123467,49],{"class":2040},[28,123469,123470],{"class":320}," ATTRS{idProduct}==\"7523\",",[28,123472,123447],{"class":320},[28,123474,123475],{"class":320}," SYMLINK+=\"mycar\"\n",[14,123477,123478],{},"代码解释：",[1211,123480,123481,123484,123487,123490],{},[174,123482,123483],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[174,123485,123486],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[174,123488,123489],{},"SYMLINK是符号连接，即绑定的别名；",[174,123491,123492],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123494,123495,123496,123499,123502],{},"***小提示：***",[23630,123497,123498],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[25,123500,123501],{},"\u002Fetc\u002Fudev\u002Frule.d",[23630,123503,123504],{},"目录即可。",[14,123506,123507],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123509,123510],{},"（3）.使规则生效",[14,123512,123513],{},"在终端下输入如下指令：",[18,123515,123517],{"className":117355,"code":123516,"language":117357,"meta":23,"style":23},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[25,123518,123519,123524,123536,123547,123551,123556,123569],{"__ignoreMap":23},[28,123520,123521],{"class":30,"line":31},[28,123522,123523],{"class":105},"# Ubuntu用下方命令\n",[28,123525,123526,123528,123530,123533],{"class":30,"line":94},[28,123527,24654],{"class":2040},[28,123529,120107],{"class":320},[28,123531,123532],{"class":320}," udev",[28,123534,123535],{"class":320}," reload\n",[28,123537,123538,123540,123542,123544],{"class":30,"line":109},[28,123539,24654],{"class":2040},[28,123541,120107],{"class":320},[28,123543,123532],{"class":320},[28,123545,123546],{"class":320}," restart\n",[28,123548,123549],{"class":30,"line":125},[28,123550,2477],{"emptyLinePlaceholder":144},[28,123552,123553],{"class":30,"line":131},[28,123554,123555],{"class":105},"#Fedora用下方命令\n",[28,123557,123558,123560,123563,123566],{"class":30,"line":1291},[28,123559,24654],{"class":2040},[28,123561,123562],{"class":320}," udevadm",[28,123564,123565],{"class":320}," control",[28,123567,123568],{"class":45}," --reload\n",[28,123570,123571,123573,123575],{"class":30,"line":1297},[28,123572,24654],{"class":2040},[28,123574,123562],{"class":320},[28,123576,123577],{"class":320}," trigger\n",[14,123579,123580],{},"再重新插拔设备即可。",[14,123582,123583],{},"（4）.测试",[14,123585,123586],{},"终端下输入如下指令",[18,123588,123590],{"className":117355,"code":123589,"language":117357,"meta":23,"style":23},"ll \u002Fdev | grep ttyUSB\n",[25,123591,123592],{"__ignoreMap":23},[28,123593,123594,123597,123600,123602,123604],{"class":30,"line":31},[28,123595,123596],{"class":2040},"ll",[28,123598,123599],{"class":320}," \u002Fdev",[28,123601,25187],{"class":38},[28,123603,30314],{"class":2040},[28,123605,123606],{"class":320}," ttyUSB\n",[14,123608,123609],{},"运行结果如下：",[14,123611,123612],{},[1539,123613],{"alt":23,"src":123614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123616,123617,123618,123621],{},"也可以多次插拔USB设备，会发现设备端口",[25,123619,123620],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123623,123624],{},[365,123625,118023],{},[14,123627,123628],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[188,123630,123632],{"id":123631},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123634,123635,123637],{},[365,123636,123351],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123639,123640,123642],{},[365,123641,123357],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123644,123645],{},[365,123646,123363],{},[14,123648,123649],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123651,123652],{},"调用如下指令查看第一台雷达的USB信息：",[18,123654,123656],{"className":117355,"code":123655,"language":117357,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[25,123657,123658,123678],{"__ignoreMap":23},[28,123659,123660,123663,123665,123668,123671,123673,123675],{"class":30,"line":31},[28,123661,123662],{"class":2040},"udevadm",[28,123664,69896],{"class":320},[28,123666,123667],{"class":45}," --attribute-walk",[28,123669,123670],{"class":45}," --name=\u002Fdev\u002FttyUSB0",[28,123672,25187],{"class":38},[28,123674,30314],{"class":2040},[28,123676,123677],{"class":320}," KERNELS\n",[28,123679,123680,123682,123684,123686,123689,123691,123693],{"class":30,"line":94},[28,123681,123662],{"class":2040},[28,123683,69896],{"class":320},[28,123685,123667],{"class":45},[28,123687,123688],{"class":45}," --name=\u002Fdev\u002FttyACM0",[28,123690,25187],{"class":38},[28,123692,30314],{"class":2040},[28,123694,123677],{"class":320},[14,123696,123697],{},[1539,123698],{"alt":23,"src":123699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123701,123702],{},"调用如下指令查看第二台雷达的USB信息：",[18,123704,123706],{"className":117355,"code":123705,"language":117357,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[25,123707,123708],{"__ignoreMap":23},[28,123709,123710,123712,123714,123716,123719,123721,123723],{"class":30,"line":31},[28,123711,123662],{"class":2040},[28,123713,69896],{"class":320},[28,123715,123667],{"class":45},[28,123717,123718],{"class":45}," --name=\u002Fdev\u002FttyUSB1",[28,123720,25187],{"class":38},[28,123722,30314],{"class":2040},[28,123724,123677],{"class":320},[14,123726,123727,123728,123731,123732,123735,123736,123739],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[25,123729,123730],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[25,123733,123734],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[365,123737,123738],{},"唯一性标识","”。",[14,123741,123391],{},[14,123743,123394,123744,123746],{},[25,123745,123397],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[18,123748,123749],{"className":117355,"code":123401,"language":117357,"meta":23,"style":23},[25,123750,123751],{"__ignoreMap":23},[28,123752,123753,123755,123757],{"class":30,"line":31},[28,123754,24654],{"class":2040},[28,123756,118642],{"class":320},[28,123758,123412],{"class":320},[18,123760,123762],{"className":117355,"code":123761,"language":117357,"meta":23,"style":23},"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",[25,123763,123764,123793],{"__ignoreMap":23},[28,123765,123766,123768,123770,123772,123775,123777,123780,123783,123785,123788,123790],{"class":30,"line":31},[28,123767,123425],{"class":34},[28,123769,39],{"class":38},[28,123771,123430],{"class":320},[28,123773,123774],{"class":34}," KERNELS",[28,123776,39],{"class":38},[28,123778,123779],{"class":320},"=\"1-1.3:1.0\",",[28,123781,123782],{"class":2040}," MODE:",[28,123784,39],{"class":320},[28,123786,123787],{"class":2040},"\"0777\"",[28,123789,49],{"class":2040},[28,123791,123792],{"class":320}," SYMLINK+=\"rplidar_front\"\n",[28,123794,123795,123797,123799,123801,123803,123805,123808,123810,123812,123814,123816],{"class":30,"line":94},[28,123796,123425],{"class":34},[28,123798,39],{"class":38},[28,123800,123430],{"class":320},[28,123802,123774],{"class":34},[28,123804,39],{"class":38},[28,123806,123807],{"class":320},"=\"1-1.4:1.0\",",[28,123809,123782],{"class":2040},[28,123811,39],{"class":320},[28,123813,123787],{"class":2040},[28,123815,49],{"class":2040},[28,123817,123818],{"class":320}," SYMLINK+=\"rplidar_back\"\n",[14,123820,123510],{},[14,123822,123513],{},[18,123824,123825],{"className":117355,"code":123516,"language":117357,"meta":23,"style":23},[25,123826,123827,123831,123841,123851,123855,123859,123869],{"__ignoreMap":23},[28,123828,123829],{"class":30,"line":31},[28,123830,123523],{"class":105},[28,123832,123833,123835,123837,123839],{"class":30,"line":94},[28,123834,24654],{"class":2040},[28,123836,120107],{"class":320},[28,123838,123532],{"class":320},[28,123840,123535],{"class":320},[28,123842,123843,123845,123847,123849],{"class":30,"line":109},[28,123844,24654],{"class":2040},[28,123846,120107],{"class":320},[28,123848,123532],{"class":320},[28,123850,123546],{"class":320},[28,123852,123853],{"class":30,"line":125},[28,123854,2477],{"emptyLinePlaceholder":144},[28,123856,123857],{"class":30,"line":131},[28,123858,123555],{"class":105},[28,123860,123861,123863,123865,123867],{"class":30,"line":1291},[28,123862,24654],{"class":2040},[28,123864,123562],{"class":320},[28,123866,123565],{"class":320},[28,123868,123568],{"class":45},[28,123870,123871,123873,123875],{"class":30,"line":1297},[28,123872,24654],{"class":2040},[28,123874,123562],{"class":320},[28,123876,123577],{"class":320},[14,123878,123580],{},[14,123880,123583],{},[14,123882,123586,123883,123886],{},[25,123884,123885],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123888,123889],{},[1539,123890],{"alt":23,"src":123891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123893,123894],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123896,123897,123899],{},[365,123898,118023],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[188,123901,123903],{"id":123902},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123905,123906],{},"（1）.查看所连接的主机USB接口的信息",[18,123908,123910],{"className":117355,"code":123909,"language":117357,"meta":23,"style":23},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[25,123911,123912,123942],{"__ignoreMap":23},[28,123913,123914,123916,123918,123921,123923,123925,123927,123929,123932,123935,123937,123940],{"class":30,"line":31},[28,123915,123662],{"class":2040},[28,123917,69896],{"class":320},[28,123919,123920],{"class":45}," -a",[28,123922,29294],{"class":45},[28,123924,28500],{"class":34},[28,123926,123662],{"class":2040},[28,123928,69896],{"class":320},[28,123930,123931],{"class":45}," -q",[28,123933,123934],{"class":320}," path",[28,123936,25193],{"class":45},[28,123938,123939],{"class":320}," \u002Fdev\u002FttyACM0",[28,123941,227],{"class":34},[28,123943,123944,123946,123948,123950,123952,123954,123956,123958,123960,123962,123964,123967],{"class":30,"line":94},[28,123945,123662],{"class":2040},[28,123947,69896],{"class":320},[28,123949,123920],{"class":45},[28,123951,29294],{"class":45},[28,123953,28500],{"class":34},[28,123955,123662],{"class":2040},[28,123957,69896],{"class":320},[28,123959,123931],{"class":45},[28,123961,123934],{"class":320},[28,123963,25193],{"class":45},[28,123965,123966],{"class":320}," \u002Fdev\u002FttyUSB0",[28,123968,227],{"class":34},[14,123970,123971],{},[1539,123972],{"alt":23,"src":123973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123975,123976],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123978,123391],{},[14,123980,123394,123981,123746],{},[25,123982,123397],{},[18,123984,123985],{"className":117355,"code":123401,"language":117357,"meta":23,"style":23},[25,123986,123987],{"__ignoreMap":23},[28,123988,123989,123991,123993],{"class":30,"line":31},[28,123990,24654],{"class":2040},[28,123992,118642],{"class":320},[28,123994,123412],{"class":320},[18,123996,123998],{"className":117355,"code":123997,"language":117357,"meta":23,"style":23},"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",[25,123999,124000,124028,124054],{"__ignoreMap":23},[28,124001,124002,124004,124006,124009,124011,124013,124015,124017,124020,124023,124025],{"class":30,"line":31},[28,124003,123425],{"class":34},[28,124005,39],{"class":38},[28,124007,124008],{"class":320},"=\"ttyACM*\",",[28,124010,123433],{"class":2040},[28,124012,123436],{"class":320},[28,124014,123465],{"class":2040},[28,124016,49],{"class":2040},[28,124018,124019],{"class":320}," ATTRS{idProduct}==\"55d4\",",[28,124021,124022],{"class":320}," ATTRS{serial}==\"0001\",",[28,124024,123447],{"class":320},[28,124026,124027],{"class":320}," SYMLINK+=\"ttyACM_MCU\"\n",[28,124029,124030,124032,124034,124036,124038,124040,124042,124044,124046,124049,124051],{"class":30,"line":94},[28,124031,123425],{"class":34},[28,124033,39],{"class":38},[28,124035,124008],{"class":320},[28,124037,123433],{"class":2040},[28,124039,123436],{"class":320},[28,124041,123465],{"class":2040},[28,124043,49],{"class":2040},[28,124045,124019],{"class":320},[28,124047,124048],{"class":320}," ATTRS{serial}==\"0002\",",[28,124050,123447],{"class":320},[28,124052,124053],{"class":320}," SYMLINK+=\"ttyACM_Lidar\"\n",[28,124055,124056,124058,124060,124062,124064,124066,124068,124070,124072,124074],{"class":30,"line":109},[28,124057,123425],{"class":34},[28,124059,39],{"class":38},[28,124061,123430],{"class":320},[28,124063,123433],{"class":2040},[28,124065,123436],{"class":320},[28,124067,123465],{"class":2040},[28,124069,49],{"class":2040},[28,124071,123470],{"class":320},[28,124073,123447],{"class":320},[28,124075,124076],{"class":320}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124078,123510],{},[14,124080,123513],{},[18,124082,124083],{"className":117355,"code":123516,"language":117357,"meta":23,"style":23},[25,124084,124085,124089,124099,124109,124113,124117,124127],{"__ignoreMap":23},[28,124086,124087],{"class":30,"line":31},[28,124088,123523],{"class":105},[28,124090,124091,124093,124095,124097],{"class":30,"line":94},[28,124092,24654],{"class":2040},[28,124094,120107],{"class":320},[28,124096,123532],{"class":320},[28,124098,123535],{"class":320},[28,124100,124101,124103,124105,124107],{"class":30,"line":109},[28,124102,24654],{"class":2040},[28,124104,120107],{"class":320},[28,124106,123532],{"class":320},[28,124108,123546],{"class":320},[28,124110,124111],{"class":30,"line":125},[28,124112,2477],{"emptyLinePlaceholder":144},[28,124114,124115],{"class":30,"line":131},[28,124116,123555],{"class":105},[28,124118,124119,124121,124123,124125],{"class":30,"line":1291},[28,124120,24654],{"class":2040},[28,124122,123562],{"class":320},[28,124124,123565],{"class":320},[28,124126,123568],{"class":45},[28,124128,124129,124131,124133],{"class":30,"line":1297},[28,124130,24654],{"class":2040},[28,124132,123562],{"class":320},[28,124134,123577],{"class":320},[14,124136,124137,124138],{},"再重新插拔设备即可，或者 ",[365,124139,124140],{},"直接重启系统。",[14,124142,123583],{},[14,124144,123586,124145,123886],{},[25,124146,123885],{},[14,124148,124149],{},[1539,124150],{"alt":23,"src":124151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124153,123894],{},[14,124155,124156,124158],{},[365,124157,118023],{}," 一些设备可能没有串口号等。",[188,124160,124162],{"id":124161},"_744-其他注意事项","7.4.4 其他注意事项",[14,124164,124165,124166,124168,124169,124172,124173,18487,124176,124179,124180,124182],{},"并非所有的USB设备端口号都是",[25,124167,123620],{},"的格式，比如Arduino的端口号可能是",[25,124170,124171],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[25,124174,124175],{},"videon",[25,124177,124178],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[25,124181,124175],{},"端口，绑定时需要关联的也是该接口。",[14,124184,124185,124186,124189,124190,124193,124194,124196,124197,124200,124201,124204,124205,124208,124209,124208,124212,124208,124215,28463],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[25,124187,124188],{},"KERNEL==\"ttyUSB*\"","修改为",[25,124191,124192],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[25,124195,124188],{},"修改为类似于",[25,124198,124199],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[25,124202,124203],{},"video[0,2,4,6]","表示可以绑定的端口为",[25,124206,124207],{},"video0","或",[25,124210,124211],{},"video2",[25,124213,124214],{},"video4",[25,124216,124217],{},"video6",[159,124219,124221],{"id":124220},"_75-挂载内网网页","7.5 挂载内网网页",[14,124223,124224],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124226,124227],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124229,124230],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124232,124233,124234],{},"Termux 下载地址（F-Droid）：",[35,124235,124236],{"href":124236,"rel":124237},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23942],[14,124239,124240],{},"首先打开app后，先更新软件缓存：",[18,124242,124244],{"className":117355,"code":124243,"language":117357,"meta":23,"style":23},"pkg update\n",[25,124245,124246],{"__ignoreMap":23},[28,124247,124248,124251],{"class":30,"line":31},[28,124249,124250],{"class":2040},"pkg",[28,124252,26320],{"class":320},[14,124254,124255],{},"然后换源",[18,124257,124259],{"className":117355,"code":124258,"language":117357,"meta":23,"style":23},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[25,124260,124261],{"__ignoreMap":23},[28,124262,124263,124265,124268],{"class":30,"line":31},[28,124264,123133],{"class":2040},[28,124266,124267],{"class":34}," $PREFIX",[28,124269,124270],{"class":320},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124272,124273],{},"将该文件内容替换为下面：",[18,124275,124277],{"className":117355,"code":124276,"language":117357,"meta":23,"style":23},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[25,124278,124279],{"__ignoreMap":23},[28,124280,124281,124284,124287,124290],{"class":30,"line":31},[28,124282,124283],{"class":2040},"deb",[28,124285,124286],{"class":320}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[28,124288,124289],{"class":320}," stable",[28,124291,124292],{"class":320}," main\n",[1211,124294,124295,124322],{},[174,124296,124297,124298,124300,124301],{},"如果你使用的是",[25,124299,123133],{},"编辑器：",[1211,124302,124303,124310,124316],{},[174,124304,124305,124306,124309],{},"按 ",[25,124307,124308],{},"Ctrl+O"," 保存文件。",[174,124311,124305,124312,124315],{},[25,124313,124314],{},"Enter"," 确认文件名。",[174,124317,124305,124318,124321],{},[25,124319,124320],{},"Ctrl+X"," 退出编辑器。",[174,124323,124297,124324,124300,124327],{},[25,124325,124326],{},"vim",[1211,124328,124329,124335],{},[174,124330,124305,124331,124334],{},[25,124332,124333],{},"Esc"," 退出编辑模式。",[174,124336,124337,124338,124340],{},"输入 ",[25,124339,119280],{}," 保存并退出。",[14,124342,124343],{},"接下来重新更新软件源：",[18,124345,124347],{"className":117355,"code":124346,"language":117357,"meta":23,"style":23},"pkg update && pkg upgrade\n",[25,124348,124349],{"__ignoreMap":23},[28,124350,124351,124353,124355,124357,124359],{"class":30,"line":31},[28,124352,124250],{"class":2040},[28,124354,117406],{"class":320},[28,124356,26268],{"class":34},[28,124358,124250],{"class":2040},[28,124360,117392],{"class":320},[14,124362,124363],{},"安装python：",[18,124365,124367],{"className":117355,"code":124366,"language":117357,"meta":23,"style":23},"pkg install python\n",[25,124368,124369],{"__ignoreMap":23},[28,124370,124371,124373,124375],{"class":30,"line":31},[28,124372,124250],{"class":2040},[28,124374,23911],{"class":320},[28,124376,124377],{"class":320}," python\n",[14,124379,124380,26551],{},[365,124381,124382],{},"通过Termux访问设备存储",[14,124384,124385],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[18,124387,124389],{"className":117355,"code":124388,"language":117357,"meta":23,"style":23},"termux-setup-storage\n",[25,124390,124391],{"__ignoreMap":23},[28,124392,124393],{"class":30,"line":31},[28,124394,124388],{"class":2040},[171,124396,124397],{},[174,124398,124399,26551,124402],{},[365,124400,124401],{},"进入HTML文件所在的目录",[171,124403,124404],{},[174,124405,124406,124407,124409],{},"使用",[25,124408,101335],{},"命令进入HTML文件所在的目录：",[18,124411,124413],{"className":117355,"code":124412,"language":117357,"meta":23,"style":23},"cd ~\u002Fyour_html_folder\n",[25,124414,124415],{"__ignoreMap":23},[28,124416,124417,124419],{"class":30,"line":31},[28,124418,101335],{"class":45},[28,124420,124421],{"class":320}," ~\u002Fyour_html_folder\n",[171,124423,124424],{"start":94},[174,124425,124426,26551,124429,124434,124451],{},[365,124427,124428],{},"启动Python HTTP服务器",[171,124430,124431],{},[174,124432,124433],{},"运行以下命令启动一个简单的HTTP服务器：",[18,124435,124437],{"className":117355,"code":124436,"language":117357,"meta":23,"style":23},"python -m http.server 8000\n",[25,124438,124439],{"__ignoreMap":23},[28,124440,124441,124443,124445,124448],{"class":30,"line":31},[28,124442,22],{"class":2040},[28,124444,100941],{"class":45},[28,124446,124447],{"class":320}," http.server",[28,124449,124450],{"class":45}," 8000\n",[171,124452,124453],{"start":109},[174,124454,124455,124456,124459],{},"这会在端口",[25,124457,124458],{},"8000","上启动一个Web服务器。",[1211,124461,124462],{},[174,124463,124464],{},"启动服务器后，Termux会显示日志信息，例如：",[18,124466,124468],{"className":120875,"code":124467,"language":120877,"meta":120878,"style":23},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[25,124469,124470],{"__ignoreMap":23},[28,124471,124472],{"class":30,"line":31},[28,124473,124467],{},[1211,124475,124476],{},[174,124477,124478],{},"这表示服务器已成功启动。",[14,124480,124481],{},[365,124482,124483],{},"在浏览器中访问HTML文件",[171,124485,124486],{},[174,124487,124488,26551,124491,124496],{},[365,124489,124490],{},"在同一设备上访问",[171,124492,124493],{},[174,124494,124495],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[18,124497,124500],{"className":124498,"code":124499,"language":71739,"meta":23,"style":23},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[25,124501,124502],{"__ignoreMap":23},[28,124503,124504,124507],{"class":30,"line":31},[28,124505,124506],{"class":34},"http:",[28,124508,124509],{"class":105},"\u002F\u002Flocalhost:8000\n",[1211,124511,124512],{},[174,124513,124514,124515,124518],{},"如果HTML文件中有",[25,124516,124517],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[159,124520,124522],{"id":124521},"_76-linux重点知识","7.6 Linux重点知识",[188,124524,124526],{"id":124525},"_761-关于点的说明","7.6.1 关于点的说明",[14,124528,124529],{},[1539,124530],{"alt":23,"src":124531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124533,124534],{},"一点本目录，两点上目录",[188,124536,124538],{"id":124537},"_762-目录","7.6.2 目录",[22075,124540,124542],{"id":124541},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124544,124545],{},[365,124546,124547],{},"\u002Fboot:",[14,124549,124550],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124552,124553],{},[365,124554,124555],{},"\u002Fetc:",[14,124557,124558],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124560,124561],{},[365,124562,124563],{},"\u002Flib：",[14,124565,124566],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124568,124569],{},[365,124570,124571],{},"\u002Fsys:",[14,124573,124574],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22075,124576,124578],{"id":124577},"_7622-指令集合","7.6.2.2 指令集合",[14,124580,124581],{},[365,124582,124583],{},"\u002Fbin:",[14,124585,124586],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124588,124589],{},[365,124590,124591],{},"\u002Fsbin:",[14,124593,124594],{},"只有系统管理员才能使用的程序和指令",[22075,124596,124598],{"id":124597},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124600,124601],{},[365,124602,124603],{},"\u002Fdev:",[14,124605,124606],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124608,124609],{},[365,124610,124611],{},"\u002Fmedia:",[14,124613,124614],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124616,124617],{},[365,124618,124619],{},"\u002Fmnt:",[14,124621,124622],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22075,124624,124626],{"id":124625},"_7624-临时文件","7.6.2.4 临时文件",[14,124628,124629],{},[365,124630,124631],{},"\u002Frun:",[14,124633,124634],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124636,124637],{},[365,124638,124639],{},"\u002Flost+found:",[14,124641,124642],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124644,124645],{},[365,124646,124647],{},"\u002Ftmp:",[14,124649,124650],{},"这个目录是用来存放一些临时文件的",[22075,124652,124654],{"id":124653},"_7625-账户","7.6.2.5 账户",[14,124656,124657],{},[365,124658,124659],{},"\u002Froot：",[14,124661,124662],{},"系统管理员的用户主目录",[14,124664,124665,26551],{},[365,124666,124667],{},"\u002Fhome",[14,124669,124670],{},"用户的主目录，以用户的账号命名的",[14,124672,124673,26551],{},[365,124674,124675],{},"\u002Fusr",[14,124677,124678],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124680,124681],{},[365,124682,124683],{},"\u002Fusr\u002Fbin：",[14,124685,124686],{},"系统用户使用的应用程序与指令",[14,124688,124689],{},[365,124690,124691],{},"\u002Fusr\u002Fsbin：",[14,124693,124694],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124696,124697],{},[365,124698,124699],{},"\u002Fusr\u002Fsrc：",[14,124701,124702],{},"内核源代码默认的放置目录",[22075,124704,124706],{"id":124705},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124708,124709],{},[365,124710,124711],{},"\u002Fvar：",[14,124713,124714],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124716,124717],{},[365,124718,124719],{},"\u002Fproc:",[14,124721,124722,124723,124726],{},"管理 ",[365,124724,124725],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22075,124728,124730],{"id":124729},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124732,124733],{},[365,124734,124735],{},"\u002Fopt:",[14,124737,124738],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124740,124741],{},[365,124742,124743],{},"\u002Fsrv:",[14,124745,124746],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[188,124748,124750],{"id":124749},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124752,124753],{},[1539,124754],{"alt":23,"src":124755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124757,124758],{},"windows-->linux:",[14,124760,124761],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124763,124764],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124766,124767],{},"linux传输文件到windows",[14,124769,124770],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[188,124772,124774],{"id":124773},"_764-易忘知识","7.6.4 易忘知识",[14,124776,124777],{},"操作系统内核查看",[18,124779,124780],{"className":117355,"code":121349,"language":117357,"meta":23,"style":23},[25,124781,124782],{"__ignoreMap":23},[28,124783,124784,124786],{"class":30,"line":31},[28,124785,70279],{"class":2040},[28,124787,121358],{"class":45},[14,124789,124790],{},[1539,124791],{"alt":23,"src":124792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124794,124795],{},[1539,124796],{"alt":23,"src":124797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[18,124799,124801],{"className":117355,"code":124800,"language":117357,"meta":23,"style":23},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[25,124802,124803,124815],{"__ignoreMap":23},[28,124804,124805,124807,124810,124813],{"class":30,"line":31},[28,124806,121566],{"class":2040},[28,124808,124809],{"class":320}," mvtest",[28,124811,124812],{"class":320}," mvtest2",[28,124814,2751],{"class":34},[28,124816,124817],{"class":30,"line":94},[28,124818,124819],{"class":2040},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124821,124822],{},[1539,124823],{"alt":23,"src":124824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124826,124827],{},[1539,124828],{"alt":23,"src":124829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124831,124832,124833,124836],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[25,124834,124835],{},"du -a"," 可以快速查看磁盘使用细节。",[188,124838,124840],{"id":124839},"_765-vim","7.6.5 Vim",[14,124842,124843],{},[1539,124844],{"alt":23,"src":124845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124847,124848],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124850,124851],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124853,124854],{},[365,124855,124856],{},"1.命令模式：",[14,124858,124859],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124861,124862],{},"x 删除当前光标所在处的字符",[14,124864,124865],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124867,124868],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124870,124871],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124873,124874],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124876,124877],{},"dd 剪切当前行",[14,124879,124880],{},"yy 复制当前行",[14,124882,124883],{},"p 粘贴剪贴板内容到光标下方",[14,124885,124886],{},"P 粘贴剪贴板内容到光标上方",[14,124888,124889],{},"u 撤销上一次操作",[14,124891,124892],{},"ctrl+r 重做上一次操作",[14,124894,124895,124897],{},[1001,124896],{}," 保存文件",[14,124899,124900,124902],{},[855,124901],{}," 退出Vim编辑器",[14,124904,124905,124907],{},[855,124906],{},"! 强制退出Vim编辑器，不保存修改",[14,124909,124910],{},[365,124911,124912],{},"2.输入模式：",[14,124914,124915],{},[1539,124916],{"alt":23,"src":124917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124919,124920],{},[365,124921,124922],{},"3.底线命令模式：",[14,124924,124925],{},[1539,124926],{"alt":23,"src":124927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124929,124930],{},"按下esc可以退出底线命令模式",[188,124932,124934],{"id":124933},"_766-apt","7.6.6 apt",[14,124936,124937],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[188,124939,124941],{"id":124940},"_767-home与root的区别","7.6.7 home与root的区别",[14,124943,124944],{},[1539,124945],{"alt":23,"src":124946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124948,124949],{},[1539,124950],{"alt":23,"src":124951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124953,124954],{},[1539,124955],{"alt":23,"src":124956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124958,124959],{},[1539,124960],{"alt":23,"src":124961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[188,124963,124965],{"id":124964},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124967,124968],{},[35,124969,124970],{"href":124970,"rel":124971},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23942],[171,124973,124974,124977],{},[174,124975,124976],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[174,124978,124979],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124981,124982],{},[1539,124983],{"alt":23,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124986,124987],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124989,124990],{},[1539,124991],{"alt":23,"src":124992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[18,124994,124996],{"className":120875,"code":124995,"language":120877,"meta":120878,"style":23},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[25,124997,124998,125003],{"__ignoreMap":23},[28,124999,125000],{"class":30,"line":31},[28,125001,125002],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[28,125004,125005],{"class":30,"line":94},[28,125006,125007],{},".\u002Fpycharm.sh\n",[14,125009,125010],{},"3️⃣创建.desktop文件",[14,125012,125013],{},[365,125014,125015],{},"原理：",[1211,125017,125018,125028],{},[174,125019,125020,125021,125027],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[365,125022,125023,125026],{},[25,125024,125025],{},".desktop"," 文件"," 来识别应用。",[174,125029,125030,125032,125033],{},[25,125031,125025],{}," 文件相当于一个“应用注册表”，告诉系统：",[1211,125034,125035,125038,125041,125044,125047],{},[174,125036,125037],{},"应用名字（Name）",[174,125039,125040],{},"图标（Icon）",[174,125042,125043],{},"执行命令（Exec）",[174,125045,125046],{},"分类（Categories）",[174,125048,125049],{},"是否需要终端（Terminal）",[18,125051,125053],{"className":120875,"code":125052,"language":120877,"meta":120878,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[25,125054,125055,125060],{"__ignoreMap":23},[28,125056,125057],{"class":30,"line":31},[28,125058,125059],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[28,125061,125062],{"class":30,"line":94},[28,125063,125064],{},"nano pycharm.desktop\n",[14,125066,125067],{},"nano是一个命令行下的编辑器，也可以使用vim",[18,125069,125071],{"className":120875,"code":125070,"language":120877,"meta":120878,"style":23},"[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",[25,125072,125073,125078,125083,125088,125093,125098,125103,125108,125113,125118],{"__ignoreMap":23},[28,125074,125075],{"class":30,"line":31},[28,125076,125077],{},"[Desktop Entry]\n",[28,125079,125080],{"class":30,"line":94},[28,125081,125082],{},"Version=1.0\n",[28,125084,125085],{"class":30,"line":109},[28,125086,125087],{},"Type=Application\n",[28,125089,125090],{"class":30,"line":125},[28,125091,125092],{},"Name=PyCharm\n",[28,125094,125095],{"class":30,"line":131},[28,125096,125097],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[28,125099,125100],{"class":30,"line":1291},[28,125101,125102],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[28,125104,125105],{"class":30,"line":1297},[28,125106,125107],{},"Comment=JetBrains PyCharm IDE\n",[28,125109,125110],{"class":30,"line":1388},[28,125111,125112],{},"Categories=Development;IDE;\n",[28,125114,125115],{"class":30,"line":1394},[28,125116,125117],{},"Terminal=false\n",[28,125119,125120],{"class":30,"line":1406},[28,125121,125122],{},"StartupWMClass=jetbrains-pycharm\n",[1211,125124,125125,125131,125137,125143],{},[174,125126,125127,125130],{},[25,125128,125129],{},"Exec"," → 点击图标时执行的命令",[174,125132,125133,125136],{},[25,125134,125135],{},"Icon"," → 显示在菜单和桌面上的图标",[174,125138,125139,125142],{},[25,125140,125141],{},"Terminal=false"," → 不打开终端",[174,125144,125145,125148],{},[25,125146,125147],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125150,125151,125152],"blockquote",{},[14,125153,125154,125155,125157,125158],{},"可以理解成 ",[25,125156,125025],{}," 文件是 Linux 的 ",[365,125159,125160],{},"快捷方式配置文件",[14,125162,125163],{},"4️⃣设置可执行权限",[18,125165,125167],{"className":120875,"code":125166,"language":120877,"meta":120878,"style":23},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[25,125168,125169],{"__ignoreMap":23},[28,125170,125171],{"class":30,"line":31},[28,125172,125166],{},[14,125174,125175],{},"5️⃣桌面图标启动的话如下：",[18,125177,125179],{"className":120875,"code":125178,"language":120877,"meta":120878,"style":23},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[25,125180,125181,125186],{"__ignoreMap":23},[28,125182,125183],{"class":30,"line":31},[28,125184,125185],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[28,125187,125188],{"class":30,"line":94},[28,125189,125190],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[171,125192,125193],{"start":109},[174,125194,125195],{},"下载Appimage文件实现软件的安装",[14,125197,125198],{},"1️⃣先下载appimage",[14,125200,125201],{},[35,125202,125203],{"href":125203,"rel":125204},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23942],[14,125206,125207],{},[1539,125208],{"alt":23,"src":125209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125211,125212],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125214,125215],{},[1539,125216],{"alt":23,"src":125217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125219,125220],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125222,125223],{},[1539,125224],{"alt":23,"src":125225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125227,125228],{},[1539,125229],{"alt":23,"src":125230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125232,125233,125234,125237],{},"3️⃣给他们放在",[25,125235,125236],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125239,125240],{},"4️⃣给软件执行权限",[18,125242,125244],{"className":120875,"code":125243,"language":120877,"meta":120878,"style":23},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[25,125245,125246,125251],{"__ignoreMap":23},[28,125247,125248],{"class":30,"line":31},[28,125249,125250],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[28,125252,125253],{"class":30,"line":94},[28,125254,125255],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125257,125258],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[18,125260,125262],{"className":117355,"code":125261,"language":117357,"meta":23,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[25,125263,125264,125271,125278,125284],{"__ignoreMap":23},[28,125265,125266,125268],{"class":30,"line":31},[28,125267,101335],{"class":45},[28,125269,125270],{"class":320}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[28,125272,125273,125275],{"class":30,"line":94},[28,125274,101342],{"class":2040},[28,125276,125277],{"class":320}," .\u002Fqqmusic.desktop\n",[28,125279,125280,125282],{"class":30,"line":109},[28,125281,124326],{"class":2040},[28,125283,125277],{"class":320},[28,125285,125286,125288,125290,125292],{"class":30,"line":125},[28,125287,24654],{"class":2040},[28,125289,24657],{"class":320},[28,125291,123192],{"class":320},[28,125293,125277],{"class":320},[14,125295,125296,125298],{},[25,125297,101342],{},"：一个 Linux 命令，主要功能是：",[1211,125300,125301,125304],{},[174,125302,125303],{},"如果文件不存在，就创建一个新的空文件",[174,125305,125306],{},"如果文件已存在，就更新该文件的最后修改时间",[18,125308,125310],{"className":120875,"code":125309,"language":120877,"meta":120878,"style":23},"[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",[25,125311,125312,125316,125321,125326,125331,125335,125340],{"__ignoreMap":23},[28,125313,125314],{"class":30,"line":31},[28,125315,125077],{},[28,125317,125318],{"class":30,"line":94},[28,125319,125320],{},"Name=QQ音乐\n",[28,125322,125323],{"class":30,"line":109},[28,125324,125325],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[28,125327,125328],{"class":30,"line":125},[28,125329,125330],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[28,125332,125333],{"class":30,"line":131},[28,125334,125087],{},[28,125336,125337],{"class":30,"line":1291},[28,125338,125339],{},"Categories=Audio;Music;Player;\n",[28,125341,125342],{"class":30,"line":1297},[28,125343,125344],{},"Comment=QQ Music Client for Linux\n",[14,125346,125347],{},"将文件复制进去",[14,125349,125350],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125352,125353],{},[1539,125354],{"alt":23,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125357,125358],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125360,125361],{},[1539,125362],{"alt":23,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125365,125366,125367,125370,125371,125374],{},"如果你用的不是KDE，那么也可以直接修改",[25,125368,125369],{},"qqmuic.desktop","：在exec的末尾加上",[25,125372,125373],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[18,125376,125378],{"className":120875,"code":125377,"language":120877,"meta":120878,"style":23},"[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",[25,125379,125380,125384,125388,125393,125397,125401,125405],{"__ignoreMap":23},[28,125381,125382],{"class":30,"line":31},[28,125383,125077],{},[28,125385,125386],{"class":30,"line":94},[28,125387,125320],{},[28,125389,125390],{"class":30,"line":109},[28,125391,125392],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[28,125394,125395],{"class":30,"line":125},[28,125396,125330],{},[28,125398,125399],{"class":30,"line":131},[28,125400,125087],{},[28,125402,125403],{"class":30,"line":1291},[28,125404,125339],{},[28,125406,125407],{"class":30,"line":1297},[28,125408,125344],{},[14,125410,125411],{},[1539,125412],{"alt":23,"src":125413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125415,125416],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[18,125418,125420],{"className":120875,"code":125419,"language":120877,"meta":120878,"style":23},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[25,125421,125422],{"__ignoreMap":23},[28,125423,125424],{"class":30,"line":31},[28,125425,125419],{},[171,125427,125428],{"start":125},[174,125429,125430],{},"去Flathub上安装软件",[14,125432,125433],{},[35,125434,125435],{"href":125435,"rel":125436},"https:\u002F\u002Fflathub.org\u002F",[23942],[14,125438,125439],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125441,125442],{},[1539,125443],{"alt":23,"src":125444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[18,125446,125448],{"className":120875,"code":125447,"language":120877,"meta":120878,"style":23},"flatpak install flathub com.obsproject.Studio\n",[25,125449,125450],{"__ignoreMap":23},[28,125451,125452],{"class":30,"line":31},[28,125453,125447],{},[14,125455,125456],{},[1539,125457],{"alt":23,"src":125458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125460,125461],{},"2️⃣运行软件",[14,125463,125464],{},"a.官方方式：",[14,125466,125467],{},[1539,125468],{"alt":23,"src":125469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[18,125471,125472],{"className":120875,"code":125447,"language":120877,"meta":120878,"style":23},[25,125473,125474],{"__ignoreMap":23},[28,125475,125476],{"class":30,"line":31},[28,125477,125447],{},[14,125479,125480],{},"b.当普通软件运行：",[14,125482,125483],{},[1539,125484],{"alt":23,"src":125485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125487,125488],{},[1539,125489],{"alt":23,"src":125490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[136,125492,125493],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":94,"depth":94,"links":125495},[125496,125497,125502,125503,125509,125510],{"id":122228,"depth":94,"text":122229},{"id":122570,"depth":94,"text":122571,"children":125498},[125499,125500,125501],{"id":122574,"depth":109,"text":122575},{"id":122641,"depth":109,"text":122642},{"id":122902,"depth":109,"text":122903},{"id":123055,"depth":94,"text":123056},{"id":123293,"depth":94,"text":123294,"children":125504},[125505,125506,125507,125508],{"id":123345,"depth":109,"text":123346},{"id":123631,"depth":109,"text":123632},{"id":123902,"depth":109,"text":123903},{"id":124161,"depth":109,"text":124162},{"id":124220,"depth":94,"text":124221},{"id":124521,"depth":94,"text":124522,"children":125511},[125512,125513,125514,125515,125516,125517,125518,125519],{"id":124525,"depth":109,"text":124526},{"id":124537,"depth":109,"text":124538},{"id":124749,"depth":109,"text":124750},{"id":124773,"depth":109,"text":124774},{"id":124839,"depth":109,"text":124840},{"id":124933,"depth":109,"text":124934},{"id":124940,"depth":109,"text":124941},{"id":124964,"depth":109,"text":124965},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122220,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125526,"title":125527,"body":125528,"description":141,"extension":142,"meta":125532,"navigation":144,"path":125533,"seo":125534,"stem":125535,"__hash__":125536},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125529,"toc":125530},[],{"title":23,"searchDepth":94,"depth":94,"links":125531},[],{"category":30341},"\u002Fwiki\u002F2025-01-27-linux",{"title":125527,"description":141},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125538,"title":125539,"body":125540,"description":125544,"extension":142,"meta":125935,"navigation":144,"path":125936,"seo":125937,"stem":125938,"__hash__":125939},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125541,"toc":125933},[125542,125545,125549,125566,125569,125622,125626,125628,125668,125677,125681,125684,125925,125930],[14,125543,125544],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125546,125548],{"id":125547},"_1ubuntu环境配置","1.Ubuntu环境配置",[171,125550,125551,125554,125557,125560,125563],{},[174,125552,125553],{},"ubuntu环境换源",[174,125555,125556],{},"安装cuda",[174,125558,125559],{},"安装miniconda",[174,125561,125562],{},"安装pytorch",[174,125564,125565],{},"安装genesis",[14,125567,125568],{},"参考链接：",[18,125570,125572],{"className":23899,"code":125571,"language":23901,"meta":23,"style":23},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[25,125573,125574],{"__ignoreMap":23},[28,125575,125576,125579,125582,125585,125587,125590,125593,125595,125598,125601,125603,125606,125609,125611,125614,125617,125619],{"class":30,"line":31},[28,125577,125578],{"class":2040},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[28,125580,125581],{"class":320},"=blogdetail",[28,125583,125584],{"class":34},"&sharetype",[28,125586,39],{"class":38},[28,125588,125589],{"class":320},"blogdetail",[28,125591,125592],{"class":34},"&sharerId",[28,125594,39],{"class":38},[28,125596,125597],{"class":320},"144728092",[28,125599,125600],{"class":34},"&sharerefer",[28,125602,39],{"class":38},[28,125604,125605],{"class":320},"PC",[28,125607,125608],{"class":34},"&sharesource",[28,125610,39],{"class":38},[28,125612,125613],{"class":320},"qq_69379513",[28,125615,125616],{"class":34},"&sharefrom",[28,125618,39],{"class":38},[28,125620,125621],{"class":320},"from_link\n",[10,125623,125625],{"id":125624},"_2genesis-报错issue","2.Genesis 报错issue",[14,125627,125568],{},[18,125629,125630],{"className":23899,"code":125571,"language":23901,"meta":23,"style":23},[25,125631,125632],{"__ignoreMap":23},[28,125633,125634,125636,125638,125640,125642,125644,125646,125648,125650,125652,125654,125656,125658,125660,125662,125664,125666],{"class":30,"line":31},[28,125635,125578],{"class":2040},[28,125637,125581],{"class":320},[28,125639,125584],{"class":34},[28,125641,39],{"class":38},[28,125643,125589],{"class":320},[28,125645,125592],{"class":34},[28,125647,39],{"class":38},[28,125649,125597],{"class":320},[28,125651,125600],{"class":34},[28,125653,39],{"class":38},[28,125655,125605],{"class":320},[28,125657,125608],{"class":34},[28,125659,39],{"class":38},[28,125661,125613],{"class":320},[28,125663,125616],{"class":34},[28,125665,39],{"class":38},[28,125667,125621],{"class":320},[18,125669,125671],{"className":23899,"code":125670,"language":23901,"meta":23,"style":23},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[25,125672,125673],{"__ignoreMap":23},[28,125674,125675],{"class":30,"line":31},[28,125676,125670],{"class":2040},[10,125678,125680],{"id":125679},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125682,125683],{},"hello_robot.py",[18,125685,125687],{"className":20,"code":125686,"language":22,"meta":23,"style":23},"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",[25,125688,125689,125695,125710,125714,125726,125738,125742,125755,125759,125778,125788,125798,125812,125816,125820,125825,125829,125839,125846,125860,125867,125877,125882,125886,125904,125909,125913,125920],{"__ignoreMap":23},[28,125690,125691,125693],{"class":30,"line":31},[28,125692,30468],{"class":38},[28,125694,45381],{"class":34},[28,125696,125697,125700,125703,125705,125707],{"class":30,"line":94},[28,125698,125699],{"class":34},"os.environ[",[28,125701,125702],{"class":320},"'PYOPENGL_PLATFORM'",[28,125704,4520],{"class":34},[28,125706,39],{"class":38},[28,125708,125709],{"class":320}," 'glx'\n",[28,125711,125712],{"class":30,"line":109},[28,125713,2477],{"emptyLinePlaceholder":144},[28,125715,125716,125718,125721,125723],{"class":30,"line":125},[28,125717,30468],{"class":38},[28,125719,125720],{"class":34}," genesis ",[28,125722,31459],{"class":38},[28,125724,125725],{"class":34}," gs\n",[28,125727,125728,125730,125733,125735],{"class":30,"line":131},[28,125729,30813],{"class":38},[28,125731,125732],{"class":34}," pynput ",[28,125734,30468],{"class":38},[28,125736,125737],{"class":34}," keyboard\n",[28,125739,125740],{"class":30,"line":1291},[28,125741,2477],{"emptyLinePlaceholder":144},[28,125743,125744,125747,125750,125752],{"class":30,"line":1297},[28,125745,125746],{"class":34},"gs.init(",[28,125748,125749],{"class":5293},"backend",[28,125751,39],{"class":38},[28,125753,125754],{"class":34},"gs.gpu)\n",[28,125756,125757],{"class":30,"line":1388},[28,125758,2477],{"emptyLinePlaceholder":144},[28,125760,125761,125764,125766,125769,125772,125774,125776],{"class":30,"line":1394},[28,125762,125763],{"class":34},"scene ",[28,125765,39],{"class":38},[28,125767,125768],{"class":34}," gs.Scene(",[28,125770,125771],{"class":5293},"show_viewer",[28,125773,39],{"class":38},[28,125775,31552],{"class":45},[28,125777,227],{"class":34},[28,125779,125780,125783,125785],{"class":30,"line":1406},[28,125781,125782],{"class":34},"plane ",[28,125784,39],{"class":38},[28,125786,125787],{"class":34}," scene.add_entity(gs.morphs.Plane())\n",[28,125789,125790,125793,125795],{"class":30,"line":1689},[28,125791,125792],{"class":34},"franka ",[28,125794,39],{"class":38},[28,125796,125797],{"class":34}," scene.add_entity(\n",[28,125799,125800,125803,125805,125807,125810],{"class":30,"line":1694},[28,125801,125802],{"class":34},"    gs.morphs.MJCF(",[28,125804,45430],{"class":5293},[28,125806,39],{"class":38},[28,125808,125809],{"class":320},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[28,125811,38123],{"class":34},[28,125813,125814],{"class":30,"line":1700},[28,125815,227],{"class":34},[28,125817,125818],{"class":30,"line":1705},[28,125819,2477],{"emptyLinePlaceholder":144},[28,125821,125822],{"class":30,"line":1719},[28,125823,125824],{"class":34},"scene.build()\n",[28,125826,125827],{"class":30,"line":1724},[28,125828,2477],{"emptyLinePlaceholder":144},[28,125830,125831,125833,125836],{"class":30,"line":1730},[28,125832,32023],{"class":38},[28,125834,125835],{"class":2040}," on_press",[28,125837,125838],{"class":34},"(key):\n",[28,125840,125841,125844],{"class":30,"line":1751},[28,125842,125843],{"class":38},"    try",[28,125845,3816],{"class":34},[28,125847,125848,125850,125853,125855,125858],{"class":30,"line":1756},[28,125849,2574],{"class":38},[28,125851,125852],{"class":34}," key.char ",[28,125854,3026],{"class":38},[28,125856,125857],{"class":320}," 'q'",[28,125859,3816],{"class":34},[28,125861,125862,125864],{"class":30,"line":1770},[28,125863,15809],{"class":38},[28,125865,125866],{"class":45}," False\n",[28,125868,125869,125872,125875],{"class":30,"line":1775},[28,125870,125871],{"class":38},"    except",[28,125873,125874],{"class":45}," AttributeError",[28,125876,3816],{"class":34},[28,125878,125879],{"class":30,"line":1804},[28,125880,125881],{"class":38},"        pass\n",[28,125883,125884],{"class":30,"line":1809},[28,125885,2477],{"emptyLinePlaceholder":144},[28,125887,125888,125891,125893,125896,125899,125901],{"class":30,"line":1826},[28,125889,125890],{"class":34},"listener ",[28,125892,39],{"class":38},[28,125894,125895],{"class":34}," keyboard.Listener(",[28,125897,125898],{"class":5293},"on_press",[28,125900,39],{"class":38},[28,125902,125903],{"class":34},"on_press)\n",[28,125905,125906],{"class":30,"line":1831},[28,125907,125908],{"class":34},"listener.start()\n",[28,125910,125911],{"class":30,"line":1836},[28,125912,2477],{"emptyLinePlaceholder":144},[28,125914,125915,125917],{"class":30,"line":1841},[28,125916,108722],{"class":38},[28,125918,125919],{"class":34}," listener.running:\n",[28,125921,125922],{"class":30,"line":1855},[28,125923,125924],{"class":34},"    scene.step()\n",[14,125926,125927],{},[1539,125928],{"alt":23,"src":125929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[136,125931,125932],{},"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":23,"searchDepth":94,"depth":94,"links":125934},[],{"category":23455},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125539,"description":125544},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125941,"title":125942,"body":125943,"description":141,"extension":142,"meta":125958,"navigation":144,"path":125959,"seo":125960,"stem":125961,"__hash__":125962},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125944,"toc":125955},[125945,125948,125952],[10,125946,125942],{"id":125947},"_1-基础知识",[159,125949,125951],{"id":125950},"_11-js的组成","1.1 js的组成",[14,125953,125954],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":23,"searchDepth":94,"depth":94,"links":125956},[125957],{"id":125950,"depth":94,"text":125951},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125942,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125964,"title":125965,"body":125966,"description":141,"extension":142,"meta":126105,"navigation":144,"path":126106,"seo":126107,"stem":126108,"__hash__":126109},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125967,"toc":126093},[125968,125971,125975,125978,125982,125992,125996,125999,126002,126005,126009,126016,126022,126026,126032,126043,126047,126050,126054,126057,126061,126064,126068,126071,126075,126078,126081,126084,126087,126090],[10,125969,125965],{"id":125970},"_2-vscode必备内容",[159,125972,125974],{"id":125973},"_21-标签分类","2.1 标签分类",[14,125976,125977],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[159,125979,125981],{"id":125980},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125983,125984,125985,125987,125988,125991],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[25,125986,441],{}," 然后按 ",[25,125989,125990],{},"Tab","，快速自动生成基本结构。",[159,125993,125995],{"id":125994},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125997,125998],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126000,126001],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126003,126004],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[159,126006,126008],{"id":126007},"_24-视图缩放","2.4 视图缩放",[14,126010,126011,126012,126015],{},"缩放视图 ",[25,126013,126014],{},"ctrl+"," 可实现代码增大。",[14,126017,126018,126021],{},[25,126019,126020],{},"ctrl-"," 可实现代码减小。",[159,126023,126025],{"id":126024},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126027,126028,126029,28463],{},"VSCode 新建文件快捷键为 ",[25,126030,126031],{},"ctrl+N",[14,126033,126034,126035,126038,126039,126042],{},"保存快捷键为 ",[25,126036,126037],{},"ctrl+S","，将文本保存为 ",[25,126040,126041],{},".html"," 文件。",[159,126044,126046],{"id":126045},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126048,126049],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[159,126051,126053],{"id":126052},"_27-vscode-icons","2.7 vscode-icons",[14,126055,126056],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[159,126058,126060],{"id":126059},"_28-easy-less","2.8 Easy LESS",[14,126062,126063],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[159,126065,126067],{"id":126066},"_29-会了吧插件","2.9 会了吧插件",[14,126069,126070],{},"会了吧插件可以展示代码中英语单词的意思。",[159,126072,126074],{"id":126073},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126076,126077],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126079,126080],{},"②选定多个相同的单词:ctrl+D",[14,126082,126083],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126085,126086],{},"④全局替换某些单词:ctrl+h",[14,126088,126089],{},"⑤快速定位到某一行:ctrl+g",[14,126091,126092],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":23,"searchDepth":94,"depth":94,"links":126094},[126095,126096,126097,126098,126099,126100,126101,126102,126103,126104],{"id":125973,"depth":94,"text":125974},{"id":125980,"depth":94,"text":125981},{"id":125994,"depth":94,"text":125995},{"id":126007,"depth":94,"text":126008},{"id":126024,"depth":94,"text":126025},{"id":126045,"depth":94,"text":126046},{"id":126052,"depth":94,"text":126053},{"id":126059,"depth":94,"text":126060},{"id":126066,"depth":94,"text":126067},{"id":126073,"depth":94,"text":126074},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125965,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126111,"title":126112,"body":126113,"description":141,"extension":142,"meta":126272,"navigation":144,"path":126273,"seo":126274,"stem":126275,"__hash__":126276},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126114,"toc":126264},[126115,126118,126122,126132,126138,126144,126148,126157,126161,126166,126169,126172,126176,126179,126189,126198,126207,126216,126226,126233,126238,126243,126256],[10,126116,126112],{"id":126117},"_3-html文本与容器标签",[159,126119,126121],{"id":126120},"_31-标题标签","3.1 标题标签",[14,126123,126124,126127,126128,126131],{},[25,126125,126126],{},"\u003Ch1>","我是一级标签",[25,126129,126130],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126133,126134,126127,126136],{},[25,126135,126126],{},[25,126137,126130],{},[14,126139,123394,126140,126143],{},[25,126141,126142],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[159,126145,126147],{"id":126146},"_32-段落标签","3.2 段落标签",[14,126149,126150,126153,126154],{},[25,126151,126152],{},"\u003Cp>","....",[25,126155,126156],{},"\u003C\u002Fp>",[159,126158,126160],{"id":126159},"_33-换行标签","3.3 换行标签",[14,126162,126163],{},[25,126164,126165],{},"\u003Cbr \u002F>",[14,126167,126168],{},"具有强制换行的作用",[14,126170,126171],{},"单标签",[159,126173,126175],{"id":126174},"_34-文本格式化标签","3.4 文本格式化标签",[14,126177,126178],{},"提供粗体、斜体和下划线等效果",[14,126180,126181,126182,82614,126185,126188],{},"加粗：",[25,126183,126184],{},"\u003Cstrong>...\u003C\u002Fstrong>",[25,126186,126187],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126190,126191,126192,82614,126195,126188],{},"斜体：",[25,126193,126194],{},"\u003Cem>...\u003C\u002Fem>",[25,126196,126197],{},"\u003Ci>...\u003C\u002Fi>",[14,126199,126200,126201,82614,126204,126188],{},"删除线：",[25,126202,126203],{},"\u003Cdel>...\u003C\u002Fdel>",[25,126205,126206],{},"\u003Cs>...\u003C\u002Fs>",[14,126208,126209,126210,82614,126213,126188],{},"下划线：",[25,126211,126212],{},"\u003Cins>...\u003C\u002Fins>",[25,126214,126215],{},"\u003Cu>...\u003C\u002Fu>",[159,126217,126219,126220,18487,126223,102752],{"id":126218},"_35-div和span标签","3.5 ",[25,126221,126222],{},"\u003Cdiv>",[25,126224,126225],{},"\u003Cspan>",[14,126227,126228,101077,126230,126232],{},[25,126229,126222],{},[25,126231,126225],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126234,126235],{},[25,126236,126237],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126239,126240],{},[25,126241,126242],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126244,126245,126246,126248,126249,126251,126252,126255],{},"两者特点：①",[25,126247,126222],{}," 标签用来布局，但一行通常只放一个 ",[25,126250,126222],{},"。可以理解为一个大盒子，独占一行，在 ",[25,126253,126254],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126257,77324,126258,126260,126261,126263],{},[25,126259,126225],{}," 标签也可用于布局，一行可以放多个 ",[25,126262,126225],{},"，可理解为小盒子。",{"title":23,"searchDepth":94,"depth":94,"links":126265},[126266,126267,126268,126269,126270],{"id":126120,"depth":94,"text":126121},{"id":126146,"depth":94,"text":126147},{"id":126159,"depth":94,"text":126160},{"id":126174,"depth":94,"text":126175},{"id":126218,"depth":94,"text":126271},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126112,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126278,"title":126279,"body":126280,"description":141,"extension":142,"meta":126477,"navigation":144,"path":126478,"seo":126479,"stem":126480,"__hash__":126481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126281,"toc":126469},[126282,126285,126289,126292,126298,126305,126311,126317,126320,126323,126326,126329,126332,126335,126338,126342,126345,126348,126351,126357,126363,126369,126376,126380,126386,126392,126395,126398,126404,126410,126416,126419,126422,126426,126429,126439,126445,126449,126458,126462,126465],[10,126283,126279],{"id":126284},"_4-html图像与链接",[159,126286,126288],{"id":126287},"_41-图像标签","4.1 图像标签",[14,126290,126291],{},"（1）标签",[14,126293,126294,126297],{},[25,126295,126296],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126299,126300,126301,126304],{},"src是",[25,126302,126303],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126306,126307,126308],{},"alt:文本，替换文本。图像不能显示的文字 ",[25,126309,126310],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126312,126313,126314],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[25,126315,126316],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126318,126319],{},"width:像素，设置图像的宽度",[14,126321,126322],{},"height:像素，设置图像的高度",[14,126324,126325],{},"border：像素，设置图像的边框粗细",[14,126327,126328],{},"（2）图像标签属性的注意点：",[14,126330,126331],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126333,126334],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126336,126337],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[159,126339,126341],{"id":126340},"_42-路径注意要点","4.2 路径注意要点：",[14,126343,126344],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126346,126347],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126349,126350],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126352,126353,126354],{},"①同一级路径：图像文件位于HTML文件同一级，如",[25,126355,126356],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126358,126359,126360],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[25,126361,126362],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126364,126365,126366],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[25,126367,126368],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126370,126371,126372,465],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[35,126373,126374],{"href":126374,"rel":126375},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23942],[159,126377,126379],{"id":126378},"_43-超链接标签","4.3 超链接标签",[14,126381,126382,126385],{},[25,126383,126384],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126387,126388,126389],{},"①语法格式：",[25,126390,126391],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126393,126394],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126396,126397],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126399,126400,126401],{},"③链接分类：外部链接：",[25,126402,126403],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126405,126406,126407],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[25,126408,126409],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126411,126412,126413],{},"空链接：如果当时没有确定链接目标时，",[25,126414,126415],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126417,126418],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126420,126421],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[159,126423,126425],{"id":126424},"_44-锚点链接","4.4 锚点链接",[14,126427,126428],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126430,126431,126432,126435,126436],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[25,126433,126434],{},"\u003Ca href=\"#two\">","第二级",[25,126437,126438],{},"\u003C\u002Fa>",[14,126440,126441,126442],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[25,126443,126444],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[159,126446,126448],{"id":126447},"_45-注释标签","4.5 注释标签",[14,126450,126451,126454,126455],{},[25,126452,126453],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[25,126456,126457],{},"ctrl+\u002F",[159,126459,126461],{"id":126460},"_46-特殊字符","4.6 特殊字符",[14,126463,126464],{},"可以实现添加多个空格",[1539,126466],{"style":126467,"src":126468},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":23,"searchDepth":94,"depth":94,"links":126470},[126471,126472,126473,126474,126475,126476],{"id":126287,"depth":94,"text":126288},{"id":126340,"depth":94,"text":126341},{"id":126378,"depth":94,"text":126379},{"id":126424,"depth":94,"text":126425},{"id":126447,"depth":94,"text":126448},{"id":126460,"depth":94,"text":126461},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126279,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126483,"title":126484,"body":126485,"description":141,"extension":142,"meta":126778,"navigation":144,"path":126779,"seo":126780,"stem":126781,"__hash__":126782},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126486,"toc":126769},[126487,126490,126494,126497,126500,126503,126506,126509,126512,126515,126518,126521,126541,126547,126551,126554,126557,126560,126563,126566,126569,126573,126576,126579,126582,126585,126598,126603,126606,126609,126624,126627,126630,126633,126636,126639,126643,126646,126653,126656,126659,126662,126665,126668,126674,126677,126680,126686,126689,126692,126695,126701,126704,126707,126721,126728,126731,126734,126741,126750,126753,126756,126759,126763,126766],[10,126488,126484],{"id":126489},"_5-html表格列表与表单",[159,126491,126493],{"id":126492},"_51-表格标签","5.1 表格标签",[14,126495,126496],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126498,126499],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126501,126502],{},"②表格基本语法：",[1539,126504],{"style":126467,"src":126505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126507,126508],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1539,126510],{"style":126467,"src":126511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126513,126514],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1539,126516],{"style":126467,"src":126517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126519,126520],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126522,126523,126526,126527,126529,126530,126533,126534,126536,126537,126540],{},[25,126524,126525],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[25,126528,126525],{},"内部必须拥有",[25,126531,126532],{},"\u003Ctr>","标签，一般位于第一行，",[25,126535,126525],{},"比",[25,126538,126539],{},"\u003Cth>","范围广",[14,126542,126543,126546],{},[25,126544,126545],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[159,126548,126550],{"id":126549},"_52-合并单元格","5.2 合并单元格",[14,126552,126553],{},"（1）合并单元格方式：",[14,126555,126556],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126558,126559],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126561,126562],{},"（2）目标单元格：",[14,126564,126565],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126567,126568],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[159,126570,126572],{"id":126571},"_53-列表标签","5.3 列表标签",[14,126574,126575],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126577,126578],{},"①无序列表：",[1539,126580],{"style":126467,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126583,126584],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126586,126587,126590,126591,126594,126595,126597],{},[25,126588,126589],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[25,126592,126593],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[25,126596,126589],{},"中输入其他标签或文字是不对的",[14,126599,126600,126602],{},[25,126601,126593],{},"之间相当于一个容器，可以容纳所有元素",[14,126604,126605],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126607,126608],{},"在css中去除前边的小圆点采用如下代码:",[18,126610,126614],{"className":126611,"code":126612,"language":126613,"meta":23,"style":23},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[25,126615,126616],{"__ignoreMap":23},[28,126617,126618,126621],{"class":30,"line":31},[28,126619,126620],{"class":51375},"list-style",[28,126622,126623],{"class":34},": none;\n",[14,126625,126626],{},"②有序列表：",[1539,126628],{"style":126467,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126631,126632],{},"③自定义列表：",[1539,126634],{"style":126467,"src":126635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1539,126637],{"style":126467,"src":126638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[159,126640,126642],{"id":126641},"_54-表单标签","5.4 表单标签",[14,126644,126645],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126647,126648,126649,126652],{},"（1）表单域：包含单元素的区域，",[25,126650,126651],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1539,126654],{"style":126467,"src":126655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126657,126658],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126660,126661],{},"表单元素提交必须有name属性",[14,126663,126664],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126666,126667],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126669,77301,126670,126673],{},[25,126671,126672],{},"\u003Cinput>","输入表单元素",[1539,126675],{"style":126467,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1539,126678],{"style":126467,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126681,126682,126683],{},"单选按钮：",[25,126684,126685],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1539,126687],{"style":126467,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126690,126691],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1539,126693],{"style":126467,"src":126694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126696,126697,126700],{},[365,126698,126699],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126702,126703],{},"②select下拉表单元素：可以节约页面控件",[1539,126705],{"style":126467,"src":126706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126708,126709,13872,126711,126714,126715,126717,126718,126720],{},[365,126710,250],{},[25,126712,126713],{},"\u003Cselect>","中至少包含一对",[25,126716,102773],{},"；在",[25,126719,102773],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126722,126723,126724,126727],{},"③",[25,126725,126726],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1539,126729],{"style":126467,"src":126730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126732,126733],{},"3行20列",[159,126735,126737,126738,102752],{"id":126736},"_55-lable标签","5.5 ",[25,126739,126740],{},"\u003Clable>",[14,126742,126743,126744,126746,126747,126749],{},"它不是表单标签，但常常与表单标签搭配使用，",[25,126745,126740],{},"标签用于绑定一个表单标签，当点击",[25,126748,126740],{},"标签内的文本",[14,126751,126752],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1539,126754],{"style":126467,"src":126755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1539,126757],{"style":126467,"src":126758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[159,126760,126762],{"id":126761},"_56-实例","5.6 实例",[1539,126764],{"style":126467,"src":126765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[136,126767,126768],{},"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":23,"searchDepth":94,"depth":94,"links":126770},[126771,126772,126773,126774,126775,126777],{"id":126492,"depth":94,"text":126493},{"id":126549,"depth":94,"text":126550},{"id":126571,"depth":94,"text":126572},{"id":126641,"depth":94,"text":126642},{"id":126736,"depth":94,"text":126776},"5.5 \u003Clable>标签",{"id":126761,"depth":94,"text":126762},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126484,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126784,"title":126785,"body":126786,"description":141,"extension":142,"meta":127335,"navigation":144,"path":127336,"seo":127337,"stem":127338,"__hash__":127339},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126787,"toc":127310},[126788,126791,126795,126798,126801,126805,126808,126811,126814,126817,126820,126823,126826,126830,126833,126837,126840,126843,126846,126850,126853,126856,126859,126865,126868,126871,126874,126877,126880,126883,126886,126919,126923,126926,126929,126932,126936,126939,126942,126945,126948,126951,126955,126958,126961,126964,126968,126971,126975,126978,126982,126985,126990,126994,126997,127001,127004,127007,127010,127013,127040,127043,127047,127050,127053,127058,127061,127064,127068,127071,127076,127079,127082,127085,127089,127092,127095,127098,127102,127105,127108,127111,127115,127119,127122,127162,127165,127169,127176,127179,127183,127186,127232,127236,127239,127242,127245,127273,127277,127280,127307],[10,126789,126785],{"id":126790},"_6-css语法与文本样式",[159,126792,126794],{"id":126793},"_61-css语法规范","6.1 css语法规范",[14,126796,126797],{},"由两部分组成，选择器及一条或多条声明",[1539,126799],{"style":126467,"src":126800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126802,126803],{},[365,126804,250],{},[14,126806,126807],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126809,126810],{},"②属性与属性值以“键值对”的形式出现",[14,126812,126813],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126815,126816],{},"④属性和属性值之间用英文“;”分开",[1539,126818],{"style":126467,"src":126819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1539,126821],{"style":126467,"src":126822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1539,126824],{"style":126467,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[159,126827,126829],{"id":126828},"_62-css选择器","6.2 css选择器",[14,126831,126832],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[188,126834,126836],{"id":126835},"_621-标签选择器","6.2.1 标签选择器",[14,126838,126839],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126841,126842],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1539,126844],{"style":126467,"src":126845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[188,126847,126849],{"id":126848},"_622-类选择器","6.2.2 类选择器",[14,126851,126852],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126854,126855],{},"②样例",[1539,126857],{"style":126467,"src":126858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126860,126861,126862,126864],{},"③ ",[365,126863,126699],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126866,126867],{},"可以理解为给这个标签起了个名字，来表示；",[14,126869,126870],{},"长名称或词组可以使用横线来为选择器命名；",[14,126872,126873],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126875,126876],{},"命名要有意义；",[1539,126878],{"style":126467,"src":126879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126881,126882],{},"类选择器也可以指定特殊的元素p.center{}",[14,126884,126885],{},"p.center和.center都对",[18,126887,126889],{"className":126611,"code":126888,"language":126613,"meta":23,"style":23},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[25,126890,126891,126896,126905,126915],{"__ignoreMap":23},[28,126892,126893],{"class":30,"line":31},[28,126894,126895],{"class":105},"\u002F* 类选择器指定特殊元素 *\u002F\n",[28,126897,126898,126900,126903],{"class":30,"line":94},[28,126899,14],{"class":51375},[28,126901,126902],{"class":2040},".center",[28,126904,15649],{"class":34},[28,126906,126907,126909,126911,126913],{"class":30,"line":109},[28,126908,70601],{"class":45},[28,126910,51512],{"class":34},[28,126912,51667],{"class":45},[28,126914,1367],{"class":34},[28,126916,126917],{"class":30,"line":125},[28,126918,1642],{"class":34},[188,126920,126922],{"id":126921},"_623-多类名使用","6.2.3 多类名使用",[14,126924,126925],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1539,126927],{"style":126467,"src":126928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126930,126931],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[188,126933,126935],{"id":126934},"_624-id选择器","6.2.4 id选择器",[14,126937,126938],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126940,126941],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1539,126943],{"style":126467,"src":126944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126946,126947],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126949,126950],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[188,126952,126954],{"id":126953},"_625-通配符选择器","6.2.5 通配符选择器",[14,126956,126957],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126959,126960],{},"* {",[14,126962,126963],{},"color=\"red\"}",[188,126965,126967],{"id":126966},"_626-总结","6.2.6 总结",[1539,126969],{"style":126467,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[159,126972,126974],{"id":126973},"_63-css字体属性","6.3 css字体属性",[14,126976,126977],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[188,126979,126981],{"id":126980},"_631-字体系列","6.3.1 字体系列",[14,126983,126984],{},"font-family: '宋体';",[14,126986,126987,126989],{},[365,126988,250],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[188,126991,126993],{"id":126992},"_632-字体大小","6.3.2 字体大小",[14,126995,126996],{},"font-size: 20px",[14,126998,126999,26551],{},[365,127000,126699],{},[14,127002,127003],{},"①px（像素）大小是网页的最常用单位",[14,127005,127006],{},"②谷歌浏览器默认为16px",[14,127008,127009],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127011,127012],{},"④可以给body指定整个页面的大小：会自动引用",[18,127014,127016],{"className":126611,"code":127015,"language":126613,"meta":23,"style":23},"body {\n  font-size: 16px;\n}\n",[25,127017,127018,127024,127036],{"__ignoreMap":23},[28,127019,127020,127022],{"class":30,"line":31},[28,127021,51875],{"class":51375},[28,127023,15649],{"class":34},[28,127025,127026,127028,127030,127032,127034],{"class":30,"line":94},[28,127027,70701],{"class":45},[28,127029,51512],{"class":34},[28,127031,811],{"class":45},[28,127033,51567],{"class":38},[28,127035,1367],{"class":34},[28,127037,127038],{"class":30,"line":109},[28,127039,1642],{"class":34},[14,127041,127042],{},"⑤标题标签比较特殊，需要单独指定大小",[188,127044,127046],{"id":127045},"_633-字体粗细","6.3.3 字体粗细",[14,127048,127049],{},"font-weight: bold;",[14,127051,127052],{},"font-weight: 100；",[14,127054,127055,127057],{},[365,127056,250],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127059,127060],{},"font-weight= 400;",[14,127062,127063],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[188,127065,127067],{"id":127066},"_634-文字样式","6.3.4 文字样式",[14,127069,127070],{},"font-style: normal；",[14,127072,127073,26551],{},[365,127074,127075],{},"属性值",[14,127077,127078],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127080,127081],{},"②italic：浏览器会显示斜体的字体样式",[1539,127083],{"style":126467,"src":127084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[188,127086,127088],{"id":127087},"_635-字体符合属性","6.3.5 字体符合属性",[1539,127090],{"style":126467,"src":127091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1539,127093],{"style":126467,"src":127094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127096,127097],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127099,127100,26551],{},[365,127101,126699],{},[14,127103,127104],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127106,127107],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127109,127110],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[159,127112,127114],{"id":127113},"_64-css-test文本属性","6.4 css test文本属性",[188,127116,127118],{"id":127117},"_641-文本颜色","6.4.1 文本颜色",[14,127120,127121],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[18,127123,127125],{"className":126611,"code":127124,"language":126613,"meta":23,"style":23},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[25,127126,127127,127132,127138,127148,127153,127158],{"__ignoreMap":23},[28,127128,127129],{"class":30,"line":31},[28,127130,127131],{"class":105},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[28,127133,127134,127136],{"class":30,"line":94},[28,127135,14],{"class":51375},[28,127137,15649],{"class":34},[28,127139,127140,127142,127144,127146],{"class":30,"line":109},[28,127141,70980],{"class":45},[28,127143,51512],{"class":34},[28,127145,57496],{"class":45},[28,127147,1367],{"class":34},[28,127149,127150],{"class":30,"line":125},[28,127151,127152],{"class":105},"  \u002F* color: #ff0000; *\u002F\n",[28,127154,127155],{"class":30,"line":131},[28,127156,127157],{"class":105},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[28,127159,127160],{"class":30,"line":1291},[28,127161,1642],{"class":34},[1539,127163],{"style":126467,"src":127164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[188,127166,127168],{"id":127167},"_642-对齐文本","6.4.2 对齐文本",[14,127170,127171,127172,127175],{},"text-align属于用于设置元素内文本内容的 ",[365,127173,127174],{},"水平对齐"," 方式",[14,127177,127178],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[188,127180,127182],{"id":127181},"_643-装饰文本","6.4.3 装饰文本",[14,127184,127185],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[18,127187,127189],{"className":126611,"code":127188,"language":126613,"meta":23,"style":23},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[25,127190,127191,127197,127207,127211,127217,127228],{"__ignoreMap":23},[28,127192,127193,127195],{"class":30,"line":31},[28,127194,35],{"class":51375},[28,127196,15649],{"class":34},[28,127198,127199,127201,127203,127205],{"class":30,"line":94},[28,127200,70577],{"class":45},[28,127202,51512],{"class":34},[28,127204,54812],{"class":45},[28,127206,1367],{"class":34},[28,127208,127209],{"class":30,"line":109},[28,127210,1642],{"class":34},[28,127212,127213,127215],{"class":30,"line":125},[28,127214,14],{"class":51375},[28,127216,15649],{"class":34},[28,127218,127219,127221,127223,127226],{"class":30,"line":131},[28,127220,70577],{"class":45},[28,127222,51512],{"class":34},[28,127224,127225],{"class":45},"underline",[28,127227,1367],{"class":34},[28,127229,127230],{"class":30,"line":1291},[28,127231,1642],{"class":34},[188,127233,127235],{"id":127234},"_644-文本缩进","6.4.4 文本缩进",[14,127237,127238],{},"实现文本的第一行首行缩进自己指定的距离",[14,127240,127241],{},"20px往右边走；-20px往左边走",[14,127243,127244],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[18,127246,127248],{"className":126611,"code":127247,"language":126613,"meta":23,"style":23},"p {\n  text-indent: 2em;\n}\n",[25,127249,127250,127256,127269],{"__ignoreMap":23},[28,127251,127252,127254],{"class":30,"line":31},[28,127253,14],{"class":51375},[28,127255,15649],{"class":34},[28,127257,127258,127261,127263,127265,127267],{"class":30,"line":94},[28,127259,127260],{"class":45},"  text-indent",[28,127262,51512],{"class":34},[28,127264,52],{"class":45},[28,127266,23630],{"class":38},[28,127268,1367],{"class":34},[28,127270,127271],{"class":30,"line":109},[28,127272,1642],{"class":34},[188,127274,127276],{"id":127275},"_645-行间距","6.4.5 行间距",[14,127278,127279],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[18,127281,127283],{"className":126611,"code":127282,"language":126613,"meta":23,"style":23},"p {\n  line-height: 1.6;\n}\n",[25,127284,127285,127291,127303],{"__ignoreMap":23},[28,127286,127287,127289],{"class":30,"line":31},[28,127288,14],{"class":51375},[28,127290,15649],{"class":34},[28,127292,127293,127296,127298,127301],{"class":30,"line":94},[28,127294,127295],{"class":45},"  line-height",[28,127297,51512],{"class":34},[28,127299,127300],{"class":45},"1.6",[28,127302,1367],{"class":34},[28,127304,127305],{"class":30,"line":109},[28,127306,1642],{"class":34},[136,127308,127309],{},"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":23,"searchDepth":94,"depth":94,"links":127311},[127312,127313,127321,127328],{"id":126793,"depth":94,"text":126794},{"id":126828,"depth":94,"text":126829,"children":127314},[127315,127316,127317,127318,127319,127320],{"id":126835,"depth":109,"text":126836},{"id":126848,"depth":109,"text":126849},{"id":126921,"depth":109,"text":126922},{"id":126934,"depth":109,"text":126935},{"id":126953,"depth":109,"text":126954},{"id":126966,"depth":109,"text":126967},{"id":126973,"depth":94,"text":126974,"children":127322},[127323,127324,127325,127326,127327],{"id":126980,"depth":109,"text":126981},{"id":126992,"depth":109,"text":126993},{"id":127045,"depth":109,"text":127046},{"id":127066,"depth":109,"text":127067},{"id":127087,"depth":109,"text":127088},{"id":127113,"depth":94,"text":127114,"children":127329},[127330,127331,127332,127333,127334],{"id":127117,"depth":109,"text":127118},{"id":127167,"depth":109,"text":127168},{"id":127181,"depth":109,"text":127182},{"id":127234,"depth":109,"text":127235},{"id":127275,"depth":109,"text":127276},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126785,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127341,"title":127342,"body":127343,"description":141,"extension":142,"meta":127992,"navigation":144,"path":127993,"seo":127994,"stem":127995,"__hash__":127996},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127344,"toc":127973},[127345,127348,127352,127356,127416,127420,127430,127433,127436,127440,127465,127469,127472,127475,127478,127481,127484,127488,127491,127494,127536,127539,127565,127571,127574,127578,127582,127588,127591,127594,127597,127600,127603,127606,127651,127655,127658,127661,127665,127669,127698,127701,127706,127709,127712,127715,127718,127722,127726,127729,127731,127734,127738,127741,127745,127748,127751,127754,127758,127762,127768,127778,127781,127784,127787,127790,127793,127916,127924,127932,127970],[10,127346,127342],{"id":127347},"_7-css引入方式与选择器进阶",[159,127349,127351],{"id":127350},"_71-css引入方式","7.1 css引入方式",[188,127353,127355],{"id":127354},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[18,127357,127361],{"className":127358,"code":127359,"language":127360,"meta":23,"style":23},"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",[25,127362,127363,127371,127378,127390,127403,127408],{"__ignoreMap":23},[28,127364,127365,127367,127369],{"class":30,"line":31},[28,127366,99],{"class":34},[28,127368,136],{"class":51375},[28,127370,51382],{"class":34},[28,127372,127373,127376],{"class":30,"line":94},[28,127374,127375],{"class":51375},"  h1",[28,127377,15649],{"class":34},[28,127379,127380,127383,127385,127388],{"class":30,"line":109},[28,127381,127382],{"class":45},"    color",[28,127384,51512],{"class":34},[28,127386,127387],{"class":45},"blue",[28,127389,1367],{"class":34},[28,127391,127392,127395,127397,127399,127401],{"class":30,"line":125},[28,127393,127394],{"class":45},"    font-size",[28,127396,51512],{"class":34},[28,127398,1006],{"class":45},[28,127400,51567],{"class":38},[28,127402,1367],{"class":34},[28,127404,127405],{"class":30,"line":131},[28,127406,127407],{"class":34},"  }\n",[28,127409,127410,127412,127414],{"class":30,"line":1291},[28,127411,51860],{"class":34},[28,127413,136],{"class":51375},[28,127415,51382],{"class":34},[14,127417,127418,26551],{},[365,127419,126699],{},[14,127421,77301,127422,127425,127426,127429],{},[25,127423,127424],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[25,127427,127428],{},"\u003Chead>","标签中",[14,127431,127432],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127434,127435],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[188,127437,127439],{"id":127438},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[18,127441,127443],{"className":127358,"code":127442,"language":127360,"meta":23,"style":23},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[25,127444,127445],{"__ignoreMap":23},[28,127446,127447,127449,127451,127453,127455,127458,127461,127463],{"class":30,"line":31},[28,127448,99],{"class":34},[28,127450,14],{"class":51375},[28,127452,62701],{"class":2040},[28,127454,39],{"class":34},[28,127456,127457],{"class":320},"\"color: red; font-size: 16px;\"",[28,127459,127460],{"class":34},">这是一个段落\u003C\u002F",[28,127462,14],{"class":51375},[28,127464,51382],{"class":34},[14,127466,127467,26551],{},[365,127468,126699],{},[14,127470,127471],{},"①style其实就是标签的属性",[14,127473,127474],{},"②在双引号中间，写法要符合css规范",[14,127476,127477],{},"③可以控制当前的标签设置样式",[14,127479,127480],{},"④书写繁琐，简单时才用",[14,127482,127483],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[188,127485,127487],{"id":127486},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127489,127490],{},"使用最多，单独建一个css文件，然后html引用",[14,127492,127493],{},"①css文件部分： style.css",[18,127495,127497],{"className":126611,"code":127496,"language":126613,"meta":23,"style":23},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[25,127498,127499,127504,127510,127520,127532],{"__ignoreMap":23},[28,127500,127501],{"class":30,"line":31},[28,127502,127503],{"class":105},"\u002F* style.css *\u002F\n",[28,127505,127506,127508],{"class":30,"line":94},[28,127507,10],{"class":51375},[28,127509,15649],{"class":34},[28,127511,127512,127514,127516,127518],{"class":30,"line":109},[28,127513,70980],{"class":45},[28,127515,51512],{"class":34},[28,127517,127387],{"class":45},[28,127519,1367],{"class":34},[28,127521,127522,127524,127526,127528,127530],{"class":30,"line":125},[28,127523,70701],{"class":45},[28,127525,51512],{"class":34},[28,127527,1006],{"class":45},[28,127529,51567],{"class":38},[28,127531,1367],{"class":34},[28,127533,127534],{"class":30,"line":131},[28,127535,1642],{"class":34},[14,127537,127538],{},"②html部分",[18,127540,127542],{"className":127358,"code":127541,"language":127360,"meta":23,"style":23},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[25,127543,127544],{"__ignoreMap":23},[28,127545,127546,127548,127550,127552,127554,127556,127558,127560,127563],{"class":30,"line":31},[28,127547,99],{"class":34},[28,127549,69080],{"class":51375},[28,127551,69083],{"class":2040},[28,127553,39],{"class":34},[28,127555,69088],{"class":320},[28,127557,61132],{"class":2040},[28,127559,39],{"class":34},[28,127561,127562],{"class":320},"\"style.css\"",[28,127564,51382],{"class":34},[14,127566,127567,127570],{},[25,127568,127569],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127572,127573],{},"ctrl+0回到页面原来大小",[159,127575,127577],{"id":127576},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[188,127579,127581],{"id":127580},"_721-快速生成html","7.2.1 快速生成html",[14,127583,127584,127585],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[25,127586,127587],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127589,127590],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127592,127593],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127595,127596],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127598,127599],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127601,127602],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127604,127605],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[18,127607,127609],{"className":127358,"code":127608,"language":127360,"meta":23,"style":23},"\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",[25,127610,127611,127616,127621,127626,127631,127636,127641,127646],{"__ignoreMap":23},[28,127612,127613],{"class":30,"line":31},[28,127614,127615],{"class":105},"\u003C!-- Emmet 语法示例 -->\n",[28,127617,127618],{"class":30,"line":94},[28,127619,127620],{"class":105},"\u003C!-- div*3        → 生成3个div -->\n",[28,127622,127623],{"class":30,"line":109},[28,127624,127625],{"class":105},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[28,127627,127628],{"class":30,"line":125},[28,127629,127630],{"class":105},"\u003C!-- div+p        → 兄弟div和p -->\n",[28,127632,127633],{"class":30,"line":131},[28,127634,127635],{"class":105},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[28,127637,127638],{"class":30,"line":1291},[28,127639,127640],{"class":105},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[28,127642,127643],{"class":30,"line":1297},[28,127644,127645],{"class":105},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[28,127647,127648],{"class":30,"line":1388},[28,127649,127650],{"class":105},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[188,127652,127654],{"id":127653},"_722-快速生成css","7.2.2 快速生成css",[14,127656,127657],{},"简写开头",[14,127659,127660],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[159,127662,127664],{"id":127663},"_73-css复合选择器","7.3 css复合选择器",[188,127666,127668],{"id":127667},"_731-后代选择器","7.3.1 后代选择器",[18,127670,127672],{"className":126611,"code":127671,"language":126613,"meta":23,"style":23},".parent .child {\n  color: blue;\n}\n",[25,127673,127674,127684,127694],{"__ignoreMap":23},[28,127675,127676,127679,127682],{"class":30,"line":31},[28,127677,127678],{"class":2040},".parent",[28,127680,127681],{"class":2040}," .child",[28,127683,15649],{"class":34},[28,127685,127686,127688,127690,127692],{"class":30,"line":94},[28,127687,70980],{"class":45},[28,127689,51512],{"class":34},[28,127691,127387],{"class":45},[28,127693,1367],{"class":34},[28,127695,127696],{"class":30,"line":109},[28,127697,1642],{"class":34},[14,127699,127700],{},"元素1 元素2 {样式声明}",[14,127702,127703],{},[365,127704,127705],{},"注意点:",[14,127707,127708],{},"①元素1和元素2中间用空格隔开",[14,127710,127711],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127713,127714],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127716,127717],{},"④元素1和元素2可以是任意基础选择器",[188,127719,127721],{"id":127720},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127723,127724],{},[365,127725,127705],{},[14,127727,127728],{},"①元素1和元素2中间用大于号隔开",[14,127730,127711],{},[14,127732,127733],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[188,127735,127737],{"id":127736},"_733-并集选择器","7.3.3 并集选择器",[14,127739,127740],{},"元素1，元素2 {样式声明}",[14,127742,127743],{},[365,127744,127705],{},[14,127746,127747],{},"①元素1和元素2中间用逗号隔开",[14,127749,127750],{},"②逗号可以理解为和的意思",[14,127752,127753],{},"③并集选择器通常用于集体声明",[188,127755,127757],{"id":127756},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127759,127760],{},[365,127761,127705],{},[14,127763,127764,127765,127767],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69080,127766],{},"－:visited－:hover－:active。",[14,127769,127770,127771,127774,127775,25818],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127772,127773],"hover",{}," 、 ",[127776,127777],"first-child",{},[14,127779,127780],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127782,127783],{},"link对没访问的进行设置",[14,127785,127786],{},"vistied对已访问的进行改变",[14,127788,127789],{},"hover鼠标经过就会变",[14,127791,127792],{},"active常按(点)就会变",[18,127794,127796],{"className":126611,"code":127795,"language":126613,"meta":23,"style":23},"\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",[25,127797,127798,127803,127812,127822,127832,127836,127845,127856,127860,127868,127878,127888,127892,127901,127912],{"__ignoreMap":23},[28,127799,127800],{"class":30,"line":31},[28,127801,127802],{"class":105},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[28,127804,127805,127807,127810],{"class":30,"line":94},[28,127806,35],{"class":51375},[28,127808,127809],{"class":2040},":link",[28,127811,15649],{"class":34},[28,127813,127814,127816,127818,127820],{"class":30,"line":109},[28,127815,70980],{"class":45},[28,127817,51512],{"class":34},[28,127819,62444],{"class":45},[28,127821,1367],{"class":34},[28,127823,127824,127826,127828,127830],{"class":30,"line":125},[28,127825,70577],{"class":45},[28,127827,51512],{"class":34},[28,127829,54812],{"class":45},[28,127831,1367],{"class":34},[28,127833,127834],{"class":30,"line":131},[28,127835,1642],{"class":34},[28,127837,127838,127840,127843],{"class":30,"line":1291},[28,127839,35],{"class":51375},[28,127841,127842],{"class":2040},":visited",[28,127844,15649],{"class":34},[28,127846,127847,127849,127851,127854],{"class":30,"line":1297},[28,127848,70980],{"class":45},[28,127850,51512],{"class":34},[28,127852,127853],{"class":45},"purple",[28,127855,1367],{"class":34},[28,127857,127858],{"class":30,"line":1388},[28,127859,1642],{"class":34},[28,127861,127862,127864,127866],{"class":30,"line":1394},[28,127863,35],{"class":51375},[28,127865,61015],{"class":2040},[28,127867,15649],{"class":34},[28,127869,127870,127872,127874,127876],{"class":30,"line":1406},[28,127871,70980],{"class":45},[28,127873,51512],{"class":34},[28,127875,54964],{"class":45},[28,127877,1367],{"class":34},[28,127879,127880,127882,127884,127886],{"class":30,"line":1689},[28,127881,70577],{"class":45},[28,127883,51512],{"class":34},[28,127885,127225],{"class":45},[28,127887,1367],{"class":34},[28,127889,127890],{"class":30,"line":1694},[28,127891,1642],{"class":34},[28,127893,127894,127896,127899],{"class":30,"line":1700},[28,127895,35],{"class":51375},[28,127897,127898],{"class":2040},":active",[28,127900,15649],{"class":34},[28,127902,127903,127905,127907,127910],{"class":30,"line":1705},[28,127904,70980],{"class":45},[28,127906,51512],{"class":34},[28,127908,127909],{"class":45},"green",[28,127911,1367],{"class":34},[28,127913,127914],{"class":30,"line":1719},[28,127915,1642],{"class":34},[188,127917,127919,127920,127923],{"id":127918},"_735-伪类选择器","7.3.5 ",[127921,127922],"focus",{},"伪类选择器",[14,127925,127926,127928,127929,127931],{},[127921,127927],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[25,127930,126672],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[18,127933,127935],{"className":126611,"code":127934,"language":126613,"meta":23,"style":23},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[25,127936,127937,127945,127956,127966],{"__ignoreMap":23},[28,127938,127939,127941,127943],{"class":30,"line":31},[28,127940,53896],{"class":51375},[28,127942,61975],{"class":2040},[28,127944,15649],{"class":34},[28,127946,127947,127950,127952,127954],{"class":30,"line":94},[28,127948,127949],{"class":45},"  border-color",[28,127951,51512],{"class":34},[28,127953,54964],{"class":45},[28,127955,1367],{"class":34},[28,127957,127958,127960,127962,127964],{"class":30,"line":109},[28,127959,70873],{"class":45},[28,127961,51512],{"class":34},[28,127963,54812],{"class":45},[28,127965,1367],{"class":34},[28,127967,127968],{"class":30,"line":125},[28,127969,1642],{"class":34},[136,127971,127972],{},"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":23,"searchDepth":94,"depth":94,"links":127974},[127975,127980,127984],{"id":127350,"depth":94,"text":127351,"children":127976},[127977,127978,127979],{"id":127354,"depth":109,"text":127355},{"id":127438,"depth":109,"text":127439},{"id":127486,"depth":109,"text":127487},{"id":127576,"depth":94,"text":127577,"children":127981},[127982,127983],{"id":127580,"depth":109,"text":127581},{"id":127653,"depth":109,"text":127654},{"id":127663,"depth":94,"text":127664,"children":127985},[127986,127987,127988,127989,127990],{"id":127667,"depth":109,"text":127668},{"id":127720,"depth":109,"text":127721},{"id":127736,"depth":109,"text":127737},{"id":127756,"depth":109,"text":127757},{"id":127918,"depth":109,"text":127991},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127342,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127998,"title":127999,"body":128000,"description":141,"extension":142,"meta":129923,"navigation":144,"path":129924,"seo":129925,"stem":129926,"__hash__":129927},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128001,"toc":129897},[128002,128005,128009,128018,128022,128048,128053,128056,128059,128062,128065,128069,128072,128082,128090,128094,128129,128134,128137,128140,128143,128146,128150,128153,128162,128166,128179,128184,128187,128190,128193,128197,128200,128204,128207,128262,128265,128296,128299,128353,128357,128360,128526,128649,128652,128655,128658,128661,128665,128668,128672,128675,128678,128682,128685,128716,128743,128771,128774,128778,128804,128847,128851,128945,128948,128975,128978,128981,128984,128987,128990,128993,128996,128999,129002,129006,129063,129090,129094,129142,129146,129187,129189,129192,129195,129198,129201,129205,129297,129300,129303,129306,129310,129433,129634,129638,129642,129645,129648,129651,129655,129658,129661,129686,129689,129692,129695,129698,129701,129705,129713,129775,129778,129836,129839,129842,129845,129848,129851,129854,129857,129894],[10,128003,127999],{"id":128004},"_8-css显示模式与背景特性",[159,128006,128008],{"id":128007},"_81-css元素显示模式","8.1 css元素显示模式",[14,128010,128011,128012,128014,128015,128017],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[25,128013,126222],{},"自己占一行，比如一行可以放多个",[25,128016,126225],{},"，HTML 元素一般分为块元素和行内元素两种类型",[188,128019,128021],{"id":128020},"_811-块元素","8.1.1 块元素",[14,128023,128024,128025,128027,128028,428,128031,428,128033,428,128035,428,128038,428,128041,128044,128045,128047],{},"常见的块元素有",[25,128026,126126],{},"~",[25,128029,128030],{},"\u003Ch6>",[25,128032,126152],{},[25,128034,126222],{},[25,128036,128037],{},"\u003Cul>",[25,128039,128040],{},"\u003Col>",[25,128042,128043],{},"\u003Cli>","等，其中 ",[25,128046,126222],{}," 标签是最典型的块元素",[14,128049,128050],{},[365,128051,128052],{},"块级元素的特点：",[14,128054,128055],{},"① 比较霸道，自己独占一行。",[14,128057,128058],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128060,128061],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128063,128064],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128066,128067],{},[365,128068,250],{},[14,128070,128071],{},"①文字类的元素内不能使用块级元素",[14,128073,77324,128074,128076,128077,128079,128080],{},[25,128075,126152],{}," 标签主要用于存放文字，因此 ",[25,128078,126152],{}," 里面不能放块级元素，特别是不能放",[25,128081,126222],{},[14,128083,128084,128085,128027,128087,128089],{},"⑥同理， ",[25,128086,126126],{},[25,128088,128030],{},"等都是文字类块级标签，里面也不能放其他块级元素",[188,128091,128093],{"id":128092},"_812-行内元素","8.1.2 行内元素",[14,128095,128096,128097,428,128099,428,128102,428,128105,428,128108,428,128111,428,128114,428,128117,428,128120,428,128123,128125,128126,128128],{},"常见的行内元素有 ",[25,128098,126384],{},[25,128100,128101],{},"\u003Cstrong>",[25,128103,128104],{},"\u003Cb>",[25,128106,128107],{},"\u003Cem>",[25,128109,128110],{},"\u003Ci>",[25,128112,128113],{},"\u003Cdel>",[25,128115,128116],{},"\u003Cs>",[25,128118,128119],{},"\u003Cins>",[25,128121,128122],{},"\u003Cu>",[25,128124,126225],{}," 等，其中 ",[25,128127,126225],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128130,128131],{},[365,128132,128133],{},"特点：",[14,128135,128136],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128138,128139],{},"② 高、宽直接设置是无效的。",[14,128141,128142],{},"③ 默认宽度就是它本身内容的宽度。",[14,128144,128145],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128147,128148],{},[365,128149,250],{},[14,128151,128152],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128154,128155,128156,128158,128159,128161],{},"②特殊情况链接 ",[25,128157,126384],{}," 里面可以放块级元素，但是给 ",[25,128160,126384],{}," 转换一下块级模式最安全",[188,128163,128165],{"id":128164},"_813-行内块元素","8.1.3 行内块元素",[14,128167,128168,128169,428,128172,428,128175,128178],{},"在行内元素中有几个特殊的标签 —— ",[25,128170,128171],{},"\u003Cimg \u002F>",[25,128173,128174],{},"\u003Cinput \u002F>",[25,128176,128177],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128180,128181],{},[365,128182,128183],{},"行内块元素的特点：",[14,128185,128186],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128188,128189],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128191,128192],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[188,128194,128196],{"id":128195},"_814-总结","8.1.4 总结",[1539,128198],{"style":126467,"src":128199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[188,128201,128203],{"id":128202},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128205,128206],{},"①转换为块元素：display:block;",[18,128208,128210],{"className":126611,"code":128209,"language":126613,"meta":23,"style":23},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[25,128211,128212,128217,128223,128234,128246,128258],{"__ignoreMap":23},[28,128213,128214],{"class":30,"line":31},[28,128215,128216],{"class":105},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[28,128218,128219,128221],{"class":30,"line":94},[28,128220,35],{"class":51375},[28,128222,15649],{"class":34},[28,128224,128225,128228,128230,128232],{"class":30,"line":109},[28,128226,128227],{"class":45},"  display",[28,128229,51512],{"class":34},[28,128231,60944],{"class":45},[28,128233,1367],{"class":34},[28,128235,128236,128238,128240,128242,128244],{"class":30,"line":125},[28,128237,70643],{"class":45},[28,128239,51512],{"class":34},[28,128241,525],{"class":45},[28,128243,51567],{"class":38},[28,128245,1367],{"class":34},[28,128247,128248,128250,128252,128254,128256],{"class":30,"line":131},[28,128249,70863],{"class":45},[28,128251,51512],{"class":34},[28,128253,614],{"class":45},[28,128255,51567],{"class":38},[28,128257,1367],{"class":34},[28,128259,128260],{"class":30,"line":1291},[28,128261,1642],{"class":34},[14,128263,128264],{},"②转换为行内元素：display:inline;",[18,128266,128268],{"className":126611,"code":128267,"language":126613,"meta":23,"style":23},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[25,128269,128270,128275,128281,128292],{"__ignoreMap":23},[28,128271,128272],{"class":30,"line":31},[28,128273,128274],{"class":105},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[28,128276,128277,128279],{"class":30,"line":94},[28,128278,51686],{"class":51375},[28,128280,15649],{"class":34},[28,128282,128283,128285,128287,128290],{"class":30,"line":109},[28,128284,128227],{"class":45},[28,128286,51512],{"class":34},[28,128288,128289],{"class":45},"inline",[28,128291,1367],{"class":34},[28,128293,128294],{"class":30,"line":125},[28,128295,1642],{"class":34},[14,128297,128298],{},"③转换为行内块：display:inline-block;",[18,128300,128302],{"className":126611,"code":128301,"language":126613,"meta":23,"style":23},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[25,128303,128304,128309,128315,128325,128337,128349],{"__ignoreMap":23},[28,128305,128306],{"class":30,"line":31},[28,128307,128308],{"class":105},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[28,128310,128311,128313],{"class":30,"line":94},[28,128312,28],{"class":51375},[28,128314,15649],{"class":34},[28,128316,128317,128319,128321,128323],{"class":30,"line":109},[28,128318,128227],{"class":45},[28,128320,51512],{"class":34},[28,128322,72458],{"class":45},[28,128324,1367],{"class":34},[28,128326,128327,128329,128331,128333,128335],{"class":30,"line":125},[28,128328,70643],{"class":45},[28,128330,51512],{"class":34},[28,128332,822],{"class":45},[28,128334,51567],{"class":38},[28,128336,1367],{"class":34},[28,128338,128339,128341,128343,128345,128347],{"class":30,"line":131},[28,128340,70863],{"class":45},[28,128342,51512],{"class":34},[28,128344,1155],{"class":45},[28,128346,51567],{"class":38},[28,128348,1367],{"class":34},[28,128350,128351],{"class":30,"line":1291},[28,128352,1642],{"class":34},[188,128354,128356],{"id":128355},"_816-小米侧边栏","8.1.6 小米侧边栏",[1539,128358],{"style":126467,"src":128359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[18,128361,128363],{"className":127358,"code":128362,"language":127360,"meta":23,"style":23},"\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",[25,128364,128365,128370,128385,128404,128423,128442,128461,128480,128499,128518],{"__ignoreMap":23},[28,128366,128367],{"class":30,"line":31},[28,128368,128369],{"class":105},"\u003C!-- 小米侧边栏案例 -->\n",[28,128371,128372,128374,128376,128378,128380,128383],{"class":30,"line":94},[28,128373,99],{"class":34},[28,128375,51686],{"class":51375},[28,128377,53561],{"class":2040},[28,128379,39],{"class":34},[28,128381,128382],{"class":320},"\"sidebar\"",[28,128384,51382],{"class":34},[28,128386,128387,128389,128391,128393,128395,128397,128400,128402],{"class":30,"line":109},[28,128388,52219],{"class":34},[28,128390,35],{"class":51375},[28,128392,61132],{"class":2040},[28,128394,39],{"class":34},[28,128396,61137],{"class":320},[28,128398,128399],{"class":34},">手机 电话卡\u003C\u002F",[28,128401,35],{"class":51375},[28,128403,51382],{"class":34},[28,128405,128406,128408,128410,128412,128414,128416,128419,128421],{"class":30,"line":125},[28,128407,52219],{"class":34},[28,128409,35],{"class":51375},[28,128411,61132],{"class":2040},[28,128413,39],{"class":34},[28,128415,61137],{"class":320},[28,128417,128418],{"class":34},">电视 盒子\u003C\u002F",[28,128420,35],{"class":51375},[28,128422,51382],{"class":34},[28,128424,128425,128427,128429,128431,128433,128435,128438,128440],{"class":30,"line":131},[28,128426,52219],{"class":34},[28,128428,35],{"class":51375},[28,128430,61132],{"class":2040},[28,128432,39],{"class":34},[28,128434,61137],{"class":320},[28,128436,128437],{"class":34},">笔记本 平板\u003C\u002F",[28,128439,35],{"class":51375},[28,128441,51382],{"class":34},[28,128443,128444,128446,128448,128450,128452,128454,128457,128459],{"class":30,"line":1291},[28,128445,52219],{"class":34},[28,128447,35],{"class":51375},[28,128449,61132],{"class":2040},[28,128451,39],{"class":34},[28,128453,61137],{"class":320},[28,128455,128456],{"class":34},">出行 穿戴\u003C\u002F",[28,128458,35],{"class":51375},[28,128460,51382],{"class":34},[28,128462,128463,128465,128467,128469,128471,128473,128476,128478],{"class":30,"line":1297},[28,128464,52219],{"class":34},[28,128466,35],{"class":51375},[28,128468,61132],{"class":2040},[28,128470,39],{"class":34},[28,128472,61137],{"class":320},[28,128474,128475],{"class":34},">智能 路由器\u003C\u002F",[28,128477,35],{"class":51375},[28,128479,51382],{"class":34},[28,128481,128482,128484,128486,128488,128490,128492,128495,128497],{"class":30,"line":1388},[28,128483,52219],{"class":34},[28,128485,35],{"class":51375},[28,128487,61132],{"class":2040},[28,128489,39],{"class":34},[28,128491,61137],{"class":320},[28,128493,128494],{"class":34},">健康 儿童\u003C\u002F",[28,128496,35],{"class":51375},[28,128498,51382],{"class":34},[28,128500,128501,128503,128505,128507,128509,128511,128514,128516],{"class":30,"line":1394},[28,128502,52219],{"class":34},[28,128504,35],{"class":51375},[28,128506,61132],{"class":2040},[28,128508,39],{"class":34},[28,128510,61137],{"class":320},[28,128512,128513],{"class":34},">耳机 音响\u003C\u002F",[28,128515,35],{"class":51375},[28,128517,51382],{"class":34},[28,128519,128520,128522,128524],{"class":30,"line":1406},[28,128521,51860],{"class":34},[28,128523,51686],{"class":51375},[28,128525,51382],{"class":34},[18,128527,128529],{"className":126611,"code":128528,"language":126613,"meta":23,"style":23},".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",[25,128530,128531,128540,128550,128563,128575,128587,128599,128609,128620,128624,128634,128645],{"__ignoreMap":23},[28,128532,128533,128536,128538],{"class":30,"line":31},[28,128534,128535],{"class":2040},".sidebar",[28,128537,1475],{"class":51375},[28,128539,15649],{"class":34},[28,128541,128542,128544,128546,128548],{"class":30,"line":94},[28,128543,128227],{"class":45},[28,128545,51512],{"class":34},[28,128547,60944],{"class":45},[28,128549,1367],{"class":34},[28,128551,128552,128554,128556,128559,128561],{"class":30,"line":109},[28,128553,70643],{"class":45},[28,128555,51512],{"class":34},[28,128557,128558],{"class":45},"234",[28,128560,51567],{"class":38},[28,128562,1367],{"class":34},[28,128564,128565,128567,128569,128571,128573],{"class":30,"line":125},[28,128566,70863],{"class":45},[28,128568,51512],{"class":34},[28,128570,665],{"class":45},[28,128572,51567],{"class":38},[28,128574,1367],{"class":34},[28,128576,128577,128579,128581,128583,128585],{"class":30,"line":131},[28,128578,127295],{"class":45},[28,128580,51512],{"class":34},[28,128582,665],{"class":45},[28,128584,51567],{"class":38},[28,128586,1367],{"class":34},[28,128588,128589,128591,128593,128595,128597],{"class":30,"line":1291},[28,128590,70898],{"class":45},[28,128592,51512],{"class":34},[28,128594,1155],{"class":45},[28,128596,51567],{"class":38},[28,128598,1367],{"class":34},[28,128600,128601,128603,128605,128607],{"class":30,"line":1297},[28,128602,70980],{"class":45},[28,128604,51512],{"class":34},[28,128606,60917],{"class":45},[28,128608,1367],{"class":34},[28,128610,128611,128613,128615,128618],{"class":30,"line":1388},[28,128612,70953],{"class":45},[28,128614,51512],{"class":34},[28,128616,128617],{"class":45},"#55585a",[28,128619,1367],{"class":34},[28,128621,128622],{"class":30,"line":1394},[28,128623,1642],{"class":34},[28,128625,128626,128628,128630,128632],{"class":30,"line":1406},[28,128627,128535],{"class":2040},[28,128629,1475],{"class":51375},[28,128631,61015],{"class":2040},[28,128633,15649],{"class":34},[28,128635,128636,128638,128640,128643],{"class":30,"line":1689},[28,128637,70953],{"class":45},[28,128639,51512],{"class":34},[28,128641,128642],{"class":45},"#ff6700",[28,128644,1367],{"class":34},[28,128646,128647],{"class":30,"line":1694},[28,128648,1642],{"class":34},[1539,128650],{"style":126467,"src":128651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128653,128654],{},"行高=盒子高度：实现文字的垂直居中",[14,128656,128657],{},"原理讲解：",[1539,128659],{"style":126467,"src":128660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[159,128662,128664],{"id":128663},"_82-css背景","8.2 css背景",[14,128666,128667],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[188,128669,128671],{"id":128670},"_821-背景颜色","8.2.1 背景颜色",[14,128673,128674],{},"background-color:颜色值;",[14,128676,128677],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[188,128679,128681],{"id":128680},"_822-背景图片","8.2.2 背景图片",[14,128683,128684],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[18,128686,128688],{"className":126611,"code":128687,"language":126613,"meta":23,"style":23},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[25,128689,128690,128696,128712],{"__ignoreMap":23},[28,128691,128692,128694],{"class":30,"line":31},[28,128693,51686],{"class":51375},[28,128695,15649],{"class":34},[28,128697,128698,128701,128703,128705,128707,128710],{"class":30,"line":94},[28,128699,128700],{"class":45},"  background-image",[28,128702,51512],{"class":34},[28,128704,61801],{"class":45},[28,128706,221],{"class":34},[28,128708,128709],{"class":5293},"images\u002Fbg.png",[28,128711,2796],{"class":34},[28,128713,128714],{"class":30,"line":109},[28,128715,1642],{"class":34},[353,128717,128718,128727],{},[356,128719,128720],{},[359,128721,128722,128725],{},[362,128723,128724],{"align":23813},"参数值",[362,128726,102755],{"align":23813},[400,128728,128729,128736],{},[359,128730,128731,128733],{},[405,128732,54812],{"align":23813},[405,128734,128735],{"align":23813},"无背景图（默认的）",[359,128737,128738,128740],{},[405,128739,61801],{"align":23813},[405,128741,128742],{"align":23813},"使用绝对或相对地址指定背景图像",[18,128744,128745],{"className":126611,"code":128687,"language":126613,"meta":23,"style":23},[25,128746,128747,128753,128767],{"__ignoreMap":23},[28,128748,128749,128751],{"class":30,"line":31},[28,128750,51686],{"class":51375},[28,128752,15649],{"class":34},[28,128754,128755,128757,128759,128761,128763,128765],{"class":30,"line":94},[28,128756,128700],{"class":45},[28,128758,51512],{"class":34},[28,128760,61801],{"class":45},[28,128762,221],{"class":34},[28,128764,128709],{"class":5293},[28,128766,2796],{"class":34},[28,128768,128769],{"class":30,"line":109},[28,128770,1642],{"class":34},[14,128772,128773],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[188,128775,128777],{"id":128776},"_823-背景平铺","8.2.3 背景平铺",[18,128779,128781],{"className":126611,"code":128780,"language":126613,"meta":23,"style":23},"div {\n  background-repeat: no-repeat;\n}\n",[25,128782,128783,128789,128800],{"__ignoreMap":23},[28,128784,128785,128787],{"class":30,"line":31},[28,128786,51686],{"class":51375},[28,128788,15649],{"class":34},[28,128790,128791,128794,128796,128798],{"class":30,"line":94},[28,128792,128793],{"class":45},"  background-repeat",[28,128795,51512],{"class":34},[28,128797,61811],{"class":45},[28,128799,1367],{"class":34},[28,128801,128802],{"class":30,"line":109},[28,128803,1642],{"class":34},[353,128805,128806,128814],{},[356,128807,128808],{},[359,128809,128810,128812],{},[362,128811,128724],{"align":23813},[362,128813,102755],{"align":23813},[400,128815,128816,128824,128831,128839],{},[359,128817,128818,128821],{},[405,128819,128820],{"align":23813},"repeat",[405,128822,128823],{"align":23813},"背景图像在纵向和横向上平铺（默认的）",[359,128825,128826,128828],{},[405,128827,61811],{"align":23813},[405,128829,128830],{"align":23813},"背景图像不平铺",[359,128832,128833,128836],{},[405,128834,128835],{"align":23813},"repeat-x",[405,128837,128838],{"align":23813},"背景图像在横向上平铺",[359,128840,128841,128844],{},[405,128842,128843],{"align":23813},"repeat-y",[405,128845,128846],{"align":23813},"背景图像在纵向平铺",[188,128848,128850],{"id":128849},"_824-背景图片位置","8.2.4 背景图片位置",[18,128852,128854],{"className":126611,"code":128853,"language":126613,"meta":23,"style":23},"\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",[25,128855,128856,128861,128867,128881,128885,128890,128896,128912,128916,128921,128927,128941],{"__ignoreMap":23},[28,128857,128858],{"class":30,"line":31},[28,128859,128860],{"class":105},"\u002F* 方位名词 *\u002F\n",[28,128862,128863,128865],{"class":30,"line":94},[28,128864,51686],{"class":51375},[28,128866,15649],{"class":34},[28,128868,128869,128872,128874,128876,128879],{"class":30,"line":109},[28,128870,128871],{"class":45},"  background-position",[28,128873,51512],{"class":34},[28,128875,51667],{"class":45},[28,128877,128878],{"class":45}," top",[28,128880,1367],{"class":34},[28,128882,128883],{"class":30,"line":125},[28,128884,1642],{"class":34},[28,128886,128887],{"class":30,"line":131},[28,128888,128889],{"class":105},"\u002F* 精确单位 *\u002F\n",[28,128891,128892,128894],{"class":30,"line":1291},[28,128893,51686],{"class":51375},[28,128895,15649],{"class":34},[28,128897,128898,128900,128902,128904,128906,128908,128910],{"class":30,"line":1297},[28,128899,128871],{"class":45},[28,128901,51512],{"class":34},[28,128903,102],{"class":45},[28,128905,51567],{"class":38},[28,128907,57579],{"class":45},[28,128909,51567],{"class":38},[28,128911,1367],{"class":34},[28,128913,128914],{"class":30,"line":1388},[28,128915,1642],{"class":34},[28,128917,128918],{"class":30,"line":1394},[28,128919,128920],{"class":105},"\u002F* 混合单位 *\u002F\n",[28,128922,128923,128925],{"class":30,"line":1406},[28,128924,51686],{"class":51375},[28,128926,15649],{"class":34},[28,128928,128929,128931,128933,128935,128937,128939],{"class":30,"line":1689},[28,128930,128871],{"class":45},[28,128932,51512],{"class":34},[28,128934,102],{"class":45},[28,128936,51567],{"class":38},[28,128938,17221],{"class":45},[28,128940,1367],{"class":34},[28,128942,128943],{"class":30,"line":1694},[28,128944,1642],{"class":34},[14,128946,128947],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[353,128949,128950,128958],{},[356,128951,128952],{},[359,128953,128954,128956],{},[362,128955,128724],{"align":23813},[362,128957,25947],{"align":23813},[400,128959,128960,128967],{},[359,128961,128962,128964],{},[405,128963,52043],{"align":23813},[405,128965,128966],{"align":23813},"百分数|由浮点数和单位标识符组成的长度值",[359,128968,128969,128972],{},[405,128970,128971],{"align":23813},"position",[405,128973,128974],{"align":23813},"top|center|bottom|left|center|right 方位名词",[14,128976,128977],{},"其他说明：",[14,128979,128980],{},"①参数是方位名词",[14,128982,128983],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128985,128986],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128988,128989],{},"②参数是精确单位",[14,128991,128992],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128994,128995],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128997,128998],{},"③参数是混合单位",[14,129000,129001],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[188,129003,129005],{"id":129004},"_825-背景图片固定","8.2.5 背景图片固定",[18,129007,129009],{"className":126611,"code":129008,"language":126613,"meta":23,"style":23},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[25,129010,129011,129016,129022,129034,129038,129043,129049,129059],{"__ignoreMap":23},[28,129012,129013],{"class":30,"line":31},[28,129014,129015],{"class":105},"\u002F* 背景滚动（默认） *\u002F\n",[28,129017,129018,129020],{"class":30,"line":94},[28,129019,51686],{"class":51375},[28,129021,15649],{"class":34},[28,129023,129024,129027,129029,129032],{"class":30,"line":109},[28,129025,129026],{"class":45},"  background-attachment",[28,129028,51512],{"class":34},[28,129030,129031],{"class":45},"scroll",[28,129033,1367],{"class":34},[28,129035,129036],{"class":30,"line":125},[28,129037,1642],{"class":34},[28,129039,129040],{"class":30,"line":131},[28,129041,129042],{"class":105},"\u002F* 背景固定 *\u002F\n",[28,129044,129045,129047],{"class":30,"line":1291},[28,129046,51686],{"class":51375},[28,129048,15649],{"class":34},[28,129050,129051,129053,129055,129057],{"class":30,"line":1297},[28,129052,129026],{"class":45},[28,129054,51512],{"class":34},[28,129056,86308],{"class":45},[28,129058,1367],{"class":34},[28,129060,129061],{"class":30,"line":1388},[28,129062,1642],{"class":34},[353,129064,129065,129074],{},[356,129066,129067],{},[359,129068,129069,129072],{},[362,129070,129071],{"align":23813},"参数",[362,129073,102755],{"align":23813},[400,129075,129076,129083],{},[359,129077,129078,129080],{},[405,129079,129031],{"align":23813},[405,129081,129082],{"align":23813},"背景图像是随对象内容滚动",[359,129084,129085,129087],{},[405,129086,86308],{"align":23813},[405,129088,129089],{"align":23813},"背景图像固定",[188,129091,129093],{"id":129092},"_826-背景样式合写","8.2.6 背景样式合写",[18,129095,129097],{"className":126611,"code":129096,"language":126613,"meta":23,"style":23},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[25,129098,129099,129104,129110,129138],{"__ignoreMap":23},[28,129100,129101],{"class":30,"line":31},[28,129102,129103],{"class":105},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[28,129105,129106,129108],{"class":30,"line":94},[28,129107,51686],{"class":51375},[28,129109,15649],{"class":34},[28,129111,129112,129114,129116,129118,129121,129123,129125,129127,129129,129132,129134,129136],{"class":30,"line":109},[28,129113,70686],{"class":45},[28,129115,51512],{"class":34},[28,129117,60917],{"class":45},[28,129119,129120],{"class":45}," url",[28,129122,221],{"class":34},[28,129124,128709],{"class":5293},[28,129126,13791],{"class":34},[28,129128,61811],{"class":45},[28,129130,129131],{"class":45}," fixed",[28,129133,17221],{"class":45},[28,129135,128878],{"class":45},[28,129137,1367],{"class":34},[28,129139,129140],{"class":30,"line":125},[28,129141,1642],{"class":34},[188,129143,129145],{"id":129144},"_827-背景色半透明","8.2.7 背景色半透明",[18,129147,129149],{"className":126611,"code":129148,"language":126613,"meta":23,"style":23},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[25,129150,129151,129157,129183],{"__ignoreMap":23},[28,129152,129153,129155],{"class":30,"line":31},[28,129154,51686],{"class":51375},[28,129156,15649],{"class":34},[28,129158,129159,129161,129163,129165,129167,129169,129171,129173,129175,129177,129179,129181],{"class":30,"line":94},[28,129160,70686],{"class":45},[28,129162,51512],{"class":34},[28,129164,55185],{"class":45},[28,129166,221],{"class":34},[28,129168,407],{"class":45},[28,129170,12512],{"class":34},[28,129172,407],{"class":45},[28,129174,12512],{"class":34},[28,129176,407],{"class":45},[28,129178,12512],{"class":34},[28,129180,100580],{"class":45},[28,129182,2796],{"class":34},[28,129184,129185],{"class":30,"line":109},[28,129186,1642],{"class":34},[14,129188,99455],{},[14,129190,129191],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129193,129194],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129196,129197],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129199,129200],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[188,129202,129204],{"id":129203},"_828-总结","8.2.8 总结",[353,129206,129207,129218],{},[356,129208,129209],{},[359,129210,129211,129214,129216],{},[362,129212,129213],{"align":23813},"属性",[362,129215,102755],{"align":23813},[362,129217,368],{"align":23813},[400,129219,129220,129231,129242,129253,129264,129275,129286],{},[359,129221,129222,129225,129228],{},[405,129223,129224],{"align":23813},"background-color",[405,129226,129227],{"align":23813},"背景颜色",[405,129229,129230],{"align":23813},"预定义的颜色值\u002F十六进制\u002FRGB代码",[359,129232,129233,129236,129239],{},[405,129234,129235],{"align":23813},"background-image",[405,129237,129238],{"align":23813},"背景图片",[405,129240,129241],{"align":23813},"url(图片路径)",[359,129243,129244,129247,129250],{},[405,129245,129246],{"align":23813},"background-repeat",[405,129248,129249],{"align":23813},"是否平铺",[405,129251,129252],{"align":23813},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[359,129254,129255,129258,129261],{},[405,129256,129257],{"align":23813},"background-position",[405,129259,129260],{"align":23813},"背景位置",[405,129262,129263],{"align":23813},"length\u002Fposition 分别是x和y坐标",[359,129265,129266,129269,129272],{},[405,129267,129268],{"align":23813},"background-attachment",[405,129270,129271],{"align":23813},"背景附着",[405,129273,129274],{"align":23813},"scroll(背景滚动) \u002Ffixed (背景固定)",[359,129276,129277,129280,129283],{},[405,129278,129279],{"align":23813},"背景简写",[405,129281,129282],{"align":23813},"书写更简单",[405,129284,129285],{"align":23813},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[359,129287,129288,129291,129294],{},[405,129289,129290],{"align":23813},"背景半透明",[405,129292,129293],{"align":23813},"背景颜色半透明",[405,129295,129296],{"align":23813},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129298,129299],{},"颜色渐变：",[1539,129301],{"style":126467,"src":129302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1539,129304],{"style":126467,"src":129305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[188,129307,129309],{"id":129308},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[18,129311,129313],{"className":127358,"code":129312,"language":127360,"meta":23,"style":23},"\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",[25,129314,129315,129330,129349,129368,129387,129406,129425],{"__ignoreMap":23},[28,129316,129317,129319,129321,129323,129325,129328],{"class":30,"line":31},[28,129318,99],{"class":34},[28,129320,51686],{"class":51375},[28,129322,53561],{"class":2040},[28,129324,39],{"class":34},[28,129326,129327],{"class":320},"\"nav\"",[28,129329,51382],{"class":34},[28,129331,129332,129334,129336,129338,129340,129342,129345,129347],{"class":30,"line":94},[28,129333,52219],{"class":34},[28,129335,35],{"class":51375},[28,129337,61132],{"class":2040},[28,129339,39],{"class":34},[28,129341,61137],{"class":320},[28,129343,129344],{"class":34},">五彩导航1\u003C\u002F",[28,129346,35],{"class":51375},[28,129348,51382],{"class":34},[28,129350,129351,129353,129355,129357,129359,129361,129364,129366],{"class":30,"line":109},[28,129352,52219],{"class":34},[28,129354,35],{"class":51375},[28,129356,61132],{"class":2040},[28,129358,39],{"class":34},[28,129360,61137],{"class":320},[28,129362,129363],{"class":34},">五彩导航2\u003C\u002F",[28,129365,35],{"class":51375},[28,129367,51382],{"class":34},[28,129369,129370,129372,129374,129376,129378,129380,129383,129385],{"class":30,"line":125},[28,129371,52219],{"class":34},[28,129373,35],{"class":51375},[28,129375,61132],{"class":2040},[28,129377,39],{"class":34},[28,129379,61137],{"class":320},[28,129381,129382],{"class":34},">五彩导航3\u003C\u002F",[28,129384,35],{"class":51375},[28,129386,51382],{"class":34},[28,129388,129389,129391,129393,129395,129397,129399,129402,129404],{"class":30,"line":131},[28,129390,52219],{"class":34},[28,129392,35],{"class":51375},[28,129394,61132],{"class":2040},[28,129396,39],{"class":34},[28,129398,61137],{"class":320},[28,129400,129401],{"class":34},">五彩导航4\u003C\u002F",[28,129403,35],{"class":51375},[28,129405,51382],{"class":34},[28,129407,129408,129410,129412,129414,129416,129418,129421,129423],{"class":30,"line":1291},[28,129409,52219],{"class":34},[28,129411,35],{"class":51375},[28,129413,61132],{"class":2040},[28,129415,39],{"class":34},[28,129417,61137],{"class":320},[28,129419,129420],{"class":34},">五彩导航5\u003C\u002F",[28,129422,35],{"class":51375},[28,129424,51382],{"class":34},[28,129426,129427,129429,129431],{"class":30,"line":1297},[28,129428,51860],{"class":34},[28,129430,51686],{"class":51375},[28,129432,51382],{"class":34},[18,129434,129436],{"className":126611,"code":129435,"language":126613,"meta":23,"style":23},".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",[25,129437,129438,129447,129457,129469,129481,129491,129503,129513,129517,129542,129565,129588,129611],{"__ignoreMap":23},[28,129439,129440,129443,129445],{"class":30,"line":31},[28,129441,129442],{"class":2040},".nav",[28,129444,1475],{"class":51375},[28,129446,15649],{"class":34},[28,129448,129449,129451,129453,129455],{"class":30,"line":94},[28,129450,128227],{"class":45},[28,129452,51512],{"class":34},[28,129454,72458],{"class":45},[28,129456,1367],{"class":34},[28,129458,129459,129461,129463,129465,129467],{"class":30,"line":109},[28,129460,70643],{"class":45},[28,129462,51512],{"class":34},[28,129464,1023],{"class":45},[28,129466,51567],{"class":38},[28,129468,1367],{"class":34},[28,129470,129471,129473,129475,129477,129479],{"class":30,"line":125},[28,129472,70863],{"class":45},[28,129474,51512],{"class":34},[28,129476,1062],{"class":45},[28,129478,51567],{"class":38},[28,129480,1367],{"class":34},[28,129482,129483,129485,129487,129489],{"class":30,"line":131},[28,129484,70601],{"class":45},[28,129486,51512],{"class":34},[28,129488,51667],{"class":45},[28,129490,1367],{"class":34},[28,129492,129493,129495,129497,129499,129501],{"class":30,"line":1291},[28,129494,127295],{"class":45},[28,129496,51512],{"class":34},[28,129498,1062],{"class":45},[28,129500,51567],{"class":38},[28,129502,1367],{"class":34},[28,129504,129505,129507,129509,129511],{"class":30,"line":1297},[28,129506,70980],{"class":45},[28,129508,51512],{"class":34},[28,129510,60917],{"class":45},[28,129512,1367],{"class":34},[28,129514,129515],{"class":30,"line":1388},[28,129516,1642],{"class":34},[28,129518,129519,129521,129523,129526,129528,129530,129533,129535,129537,129539],{"class":30,"line":1394},[28,129520,129442],{"class":2040},[28,129522,1475],{"class":51375},[28,129524,129525],{"class":2040},":nth-child",[28,129527,221],{"class":34},[28,129529,46],{"class":45},[28,129531,129532],{"class":34},") { ",[28,129534,129224],{"class":45},[28,129536,51512],{"class":34},[28,129538,128642],{"class":45},[28,129540,129541],{"class":34},"; }\n",[28,129543,129544,129546,129548,129550,129552,129554,129556,129558,129560,129563],{"class":30,"line":1406},[28,129545,129442],{"class":2040},[28,129547,1475],{"class":51375},[28,129549,129525],{"class":2040},[28,129551,221],{"class":34},[28,129553,52],{"class":45},[28,129555,129532],{"class":34},[28,129557,129224],{"class":45},[28,129559,51512],{"class":34},[28,129561,129562],{"class":45},"#ff0000",[28,129564,129541],{"class":34},[28,129566,129567,129569,129571,129573,129575,129577,129579,129581,129583,129586],{"class":30,"line":1689},[28,129568,129442],{"class":2040},[28,129570,1475],{"class":51375},[28,129572,129525],{"class":2040},[28,129574,221],{"class":34},[28,129576,57],{"class":45},[28,129578,129532],{"class":34},[28,129580,129224],{"class":45},[28,129582,51512],{"class":34},[28,129584,129585],{"class":45},"#00a4ff",[28,129587,129541],{"class":34},[28,129589,129590,129592,129594,129596,129598,129600,129602,129604,129606,129609],{"class":30,"line":1694},[28,129591,129442],{"class":2040},[28,129593,1475],{"class":51375},[28,129595,129525],{"class":2040},[28,129597,221],{"class":34},[28,129599,507],{"class":45},[28,129601,129532],{"class":34},[28,129603,129224],{"class":45},[28,129605,51512],{"class":34},[28,129607,129608],{"class":45},"#ff00ff",[28,129610,129541],{"class":34},[28,129612,129613,129615,129617,129619,129621,129623,129625,129627,129629,129632],{"class":30,"line":1700},[28,129614,129442],{"class":2040},[28,129616,1475],{"class":51375},[28,129618,129525],{"class":2040},[28,129620,221],{"class":34},[28,129622,533],{"class":45},[28,129624,129532],{"class":34},[28,129626,129224],{"class":45},[28,129628,51512],{"class":34},[28,129630,129631],{"class":45},"#00ff00",[28,129633,129541],{"class":34},[159,129635,129637],{"id":129636},"_83-css三大特性","8.3 css三大特性",[188,129639,129641],{"id":129640},"_831-层叠性","8.3.1 层叠性",[14,129643,129644],{},"为了解决样式冲突问题",[14,129646,129647],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129649,129650],{},"   ②样式不冲突，不会层叠",[188,129652,129654],{"id":129653},"_832-继承性","8.3.2 继承性",[14,129656,129657],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129659,129660],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[18,129662,129664],{"className":126611,"code":129663,"language":126613,"meta":23,"style":23},"p {\n  color: #333;\n}\n",[25,129665,129666,129672,129682],{"__ignoreMap":23},[28,129667,129668,129670],{"class":30,"line":31},[28,129669,14],{"class":51375},[28,129671,15649],{"class":34},[28,129673,129674,129676,129678,129680],{"class":30,"line":94},[28,129675,70980],{"class":45},[28,129677,51512],{"class":34},[28,129679,62444],{"class":45},[28,129681,1367],{"class":34},[28,129683,129684],{"class":30,"line":109},[28,129685,1642],{"class":34},[1539,129687],{"style":126467,"src":129688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129690,129691],{},"解释：①行高可以跟单位也可以不跟单位",[14,129693,129694],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129696,129697],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129699,129700],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[188,129702,129704],{"id":129703},"_833-优先级","8.3.3 优先级",[171,129706,129707,129710],{},[174,129708,129709],{},"选择器相同，则执行层叠性",[174,129711,129712],{},"选择器不同，则根据选择器权重执行",[353,129714,129715,129725],{},[356,129716,129717],{},[359,129718,129719,129722],{},[362,129720,129721],{"align":23813},"选择器",[362,129723,129724],{"align":23813},"选择器权重",[400,129726,129727,129735,129743,129751,129759,129767],{},[359,129728,129729,129732],{},[405,129730,129731],{"align":23813},"继承 或者*",[405,129733,129734],{"align":23813},"0，0，0，0",[359,129736,129737,129740],{},[405,129738,129739],{"align":23813},"标签选择器",[405,129741,129742],{"align":23813},"0，0，0，1",[359,129744,129745,129748],{},[405,129746,129747],{"align":23813},"类选择器，伪类选择器",[405,129749,129750],{"align":23813},"0，0，1，0",[359,129752,129753,129756],{},[405,129754,129755],{"align":23813},"ID选择器",[405,129757,129758],{"align":23813},"0，1，0，0",[359,129760,129761,129764],{},[405,129762,129763],{"align":23813},"行内样式",[405,129765,129766],{"align":23813},"1，0，0，0",[359,129768,129769,129772],{},[405,129770,129771],{"align":23813},"！important",[405,129773,129774],{"align":23813},"无穷大",[14,129776,129777],{},"! important用法：",[18,129779,129781],{"className":126611,"code":129780,"language":126613,"meta":23,"style":23},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[25,129782,129783,129788,129794,129807,129811,129816,129822,129832],{"__ignoreMap":23},[28,129784,129785],{"class":30,"line":31},[28,129786,129787],{"class":105},"\u002F* !important 拥有最高优先级 *\u002F\n",[28,129789,129790,129792],{"class":30,"line":94},[28,129791,51686],{"class":51375},[28,129793,15649],{"class":34},[28,129795,129796,129798,129800,129802,129805],{"class":30,"line":109},[28,129797,70980],{"class":45},[28,129799,51512],{"class":34},[28,129801,51720],{"class":45},[28,129803,129804],{"class":38}," !important",[28,129806,1367],{"class":34},[28,129808,129809],{"class":30,"line":125},[28,129810,1642],{"class":34},[28,129812,129813],{"class":30,"line":131},[28,129814,129815],{"class":105},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[28,129817,129818,129820],{"class":30,"line":1291},[28,129819,51686],{"class":51375},[28,129821,15649],{"class":34},[28,129823,129824,129826,129828,129830],{"class":30,"line":1297},[28,129825,70980],{"class":45},[28,129827,51512],{"class":34},[28,129829,57496],{"class":45},[28,129831,1367],{"class":34},[28,129833,129834],{"class":30,"line":1388},[28,129835,1642],{"class":34},[14,129837,129838],{},"优先级注意点：",[14,129840,129841],{},"①权重是有4组数字组成,但是不会有进位",[14,129843,129844],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129846,129847],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129849,129850],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129852,129853],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129855,129856],{},"⑥复合选择器",[353,129858,129859,129869],{},[356,129860,129861],{},[359,129862,129863,129866],{},[362,129864,129865],{"align":23813},"div ul li",[362,129867,129868],{"align":23813},"0,0,0,3",[400,129870,129871,129879,129887],{},[359,129872,129873,129876],{},[405,129874,129875],{"align":23813},".nav ul li",[405,129877,129878],{"align":23813},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[359,129880,129881,129884],{},[405,129882,129883],{"align":23813},"a:hover",[405,129885,129886],{"align":23813},"0,0,1,1",[359,129888,129889,129892],{},[405,129890,129891],{"align":23813},".nav a",[405,129893,129886],{"align":23813},[136,129895,129896],{},"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":23,"searchDepth":94,"depth":94,"links":129898},[129899,129907,129918],{"id":128007,"depth":94,"text":128008,"children":129900},[129901,129902,129903,129904,129905,129906],{"id":128020,"depth":109,"text":128021},{"id":128092,"depth":109,"text":128093},{"id":128164,"depth":109,"text":128165},{"id":128195,"depth":109,"text":128196},{"id":128202,"depth":109,"text":128203},{"id":128355,"depth":109,"text":128356},{"id":128663,"depth":94,"text":128664,"children":129908},[129909,129910,129911,129912,129913,129914,129915,129916,129917],{"id":128670,"depth":109,"text":128671},{"id":128680,"depth":109,"text":128681},{"id":128776,"depth":109,"text":128777},{"id":128849,"depth":109,"text":128850},{"id":129004,"depth":109,"text":129005},{"id":129092,"depth":109,"text":129093},{"id":129144,"depth":109,"text":129145},{"id":129203,"depth":109,"text":129204},{"id":129308,"depth":109,"text":129309},{"id":129636,"depth":94,"text":129637,"children":129919},[129920,129921,129922],{"id":129640,"depth":109,"text":129641},{"id":129653,"depth":109,"text":129654},{"id":129703,"depth":109,"text":129704},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127999,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129929,"title":129930,"body":129931,"description":141,"extension":142,"meta":131521,"navigation":144,"path":131522,"seo":131523,"stem":131524,"__hash__":131525},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129932,"toc":131500},[129933,129936,129940,129943,129946,129949,129952,129955,129958,129961,129965,129973,130010,130046,130049,130063,130068,130102,130105,130198,130203,130206,130236,130239,130244,130252,130256,130263,130309,130353,130358,130361,130364,130367,130370,130373,130376,130378,130381,130385,130390,130434,130439,130442,130445,130482,130487,130490,130493,130496,130499,130531,130534,130537,130540,130572,130575,130578,130581,130585,130588,130620,130623,130627,130647,130650,130658,130661,130665,130670,130673,130705,130710,130713,130751,130755,130760,130763,130766,130797,130800,130817,130822,130874,130934,130939,130993,131031,131035,131039,131042,131046,131054,131057,131059,131070,131075,131123,131157,131160,131163,131166,131169,131213,131216,131219,131222,131225,131228,131231,131275,131278,131281,131284,131287,131290,131293,131299,131302,131346,131349,131352,131355,131358,131361,131405,131408,131410,131413,131417,131421,131459,131463,131466,131469,131473,131481,131485,131488,131491,131494,131497],[10,129934,129930],{"id":129935},"_9-css盒模型浮动与切图",[159,129937,129939],{"id":129938},"_91-盒子模型","9.1 盒子模型",[14,129941,129942],{},"利用盒子来设计网页",[14,129944,129945],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129947,129948],{},"网页布局设置：",[14,129950,129951],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129953,129954],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129956,129957],{},"③往盒子里装内容",[1539,129959],{"style":126467,"src":129960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[188,129962,129964],{"id":129963},"_911-边框border","9.1.1 边框（border）",[171,129966,129967,129970],{},[174,129968,129969],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[174,129971,129972],{},"语法",[18,129974,129976],{"className":126611,"code":129975,"language":126613,"meta":23,"style":23},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[25,129977,129978,129983,129989,130006],{"__ignoreMap":23},[28,129979,129980],{"class":30,"line":31},[28,129981,129982],{"class":105},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[28,129984,129985,129987],{"class":30,"line":94},[28,129986,51686],{"class":51375},[28,129988,15649],{"class":34},[28,129990,129991,129993,129995,129997,129999,130001,130004],{"class":30,"line":109},[28,129992,70971],{"class":45},[28,129994,51512],{"class":34},[28,129996,46],{"class":45},[28,129998,51567],{"class":38},[28,130000,51596],{"class":45},[28,130002,130003],{"class":45}," #ccc",[28,130005,1367],{"class":34},[28,130007,130008],{"class":30,"line":125},[28,130009,1642],{"class":34},[353,130011,130012,130020],{},[356,130013,130014],{},[359,130015,130016,130018],{},[362,130017,129213],{"align":23813},[362,130019,102755],{"align":23813},[400,130021,130022,130030,130038],{},[359,130023,130024,130027],{},[405,130025,130026],{"align":23813},"border-width",[405,130028,130029],{"align":23813},"定义边框粗细，单位是px",[359,130031,130032,130035],{},[405,130033,130034],{"align":23813},"border-style",[405,130036,130037],{"align":23813},"边框的样式",[359,130039,130040,130043],{},[405,130041,130042],{"align":23813},"border-color",[405,130044,130045],{"align":23813},"边框的颜色",[14,130047,130048],{},"边框样式 border-style 可以设置如下值：",[1211,130050,130051,130054,130057,130060],{},[174,130052,130053],{},"none：没有边框即忽略所有边框的宽度（默认值）",[174,130055,130056],{},"solid：边框为单实线(最为常用的)",[174,130058,130059],{},"dashed：边框为虚线",[174,130061,130062],{},"dotted：边框为点线",[171,130064,130065],{"start":109},[174,130066,130067],{},"边框的合写分写",[18,130069,130070],{"className":126611,"code":129975,"language":126613,"meta":23,"style":23},[25,130071,130072,130076,130082,130098],{"__ignoreMap":23},[28,130073,130074],{"class":30,"line":31},[28,130075,129982],{"class":105},[28,130077,130078,130080],{"class":30,"line":94},[28,130079,51686],{"class":51375},[28,130081,15649],{"class":34},[28,130083,130084,130086,130088,130090,130092,130094,130096],{"class":30,"line":109},[28,130085,70971],{"class":45},[28,130087,51512],{"class":34},[28,130089,46],{"class":45},[28,130091,51567],{"class":38},[28,130093,51596],{"class":45},[28,130095,130003],{"class":45},[28,130097,1367],{"class":34},[28,130099,130100],{"class":30,"line":125},[28,130101,1642],{"class":34},[14,130103,130104],{},"边框分开写法：",[18,130106,130108],{"className":126611,"code":130107,"language":126613,"meta":23,"style":23},"\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",[25,130109,130110,130115,130121,130139,130157,130176,130194],{"__ignoreMap":23},[28,130111,130112],{"class":30,"line":31},[28,130113,130114],{"class":105},"\u002F* 边框分开写法 *\u002F\n",[28,130116,130117,130119],{"class":30,"line":94},[28,130118,51686],{"class":51375},[28,130120,15649],{"class":34},[28,130122,130123,130126,130128,130130,130132,130134,130137],{"class":30,"line":109},[28,130124,130125],{"class":45},"  border-top",[28,130127,51512],{"class":34},[28,130129,46],{"class":45},[28,130131,51567],{"class":38},[28,130133,51596],{"class":45},[28,130135,130136],{"class":45}," #000",[28,130138,1367],{"class":34},[28,130140,130141,130144,130146,130148,130150,130152,130155],{"class":30,"line":125},[28,130142,130143],{"class":45},"  border-right",[28,130145,51512],{"class":34},[28,130147,52],{"class":45},[28,130149,51567],{"class":38},[28,130151,62316],{"class":45},[28,130153,130154],{"class":45}," #333",[28,130156,1367],{"class":34},[28,130158,130159,130162,130164,130166,130168,130171,130174],{"class":30,"line":131},[28,130160,130161],{"class":45},"  border-bottom",[28,130163,51512],{"class":34},[28,130165,57],{"class":45},[28,130167,51567],{"class":38},[28,130169,130170],{"class":45}," dotted",[28,130172,130173],{"class":45}," #666",[28,130175,1367],{"class":34},[28,130177,130178,130181,130183,130185,130187,130189,130192],{"class":30,"line":1291},[28,130179,130180],{"class":45},"  border-left",[28,130182,51512],{"class":34},[28,130184,46],{"class":45},[28,130186,51567],{"class":38},[28,130188,51596],{"class":45},[28,130190,130191],{"class":45}," #999",[28,130193,1367],{"class":34},[28,130195,130196],{"class":30,"line":1297},[28,130197,1642],{"class":34},[171,130199,130200],{"start":125},[174,130201,130202],{},"表格的细线边框",[14,130204,130205],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[18,130207,130209],{"className":126611,"code":130208,"language":126613,"meta":23,"style":23},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[25,130210,130211,130216,130222,130232],{"__ignoreMap":23},[28,130212,130213],{"class":30,"line":31},[28,130214,130215],{"class":105},"\u002F* 表格细线边框合并 *\u002F\n",[28,130217,130218,130220],{"class":30,"line":94},[28,130219,353],{"class":51375},[28,130221,15649],{"class":34},[28,130223,130224,130226,130228,130230],{"class":30,"line":109},[28,130225,70653],{"class":45},[28,130227,51512],{"class":34},[28,130229,65110],{"class":45},[28,130231,1367],{"class":34},[28,130233,130234],{"class":30,"line":125},[28,130235,1642],{"class":34},[14,130237,130238],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[171,130240,130241],{"start":131},[174,130242,130243],{},"解决边框额外增加盒子的实际大小的方法：",[1211,130245,130246,130249],{},[174,130247,130248],{},"测量盒子大小的时候,不量边框",[174,130250,130251],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[188,130253,130255],{"id":130254},"_912-内边距","9.1.2 内边距",[171,130257,130258,130261],{},[174,130259,130260],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[174,130262,129972],{},[353,130264,130265,130275],{},[356,130266,130267],{},[359,130268,130269,130272],{},[362,130270,130271],{"align":23813},"值的个数",[362,130273,130274],{"align":23813},"表达意思",[400,130276,130277,130285,130293,130301],{},[359,130278,130279,130282],{},[405,130280,130281],{"align":23813},"padding: 5px;",[405,130283,130284],{"align":23813},"1个值，代表上下左右都有5个元素",[359,130286,130287,130290],{},[405,130288,130289],{"align":23813},"padding: 5px 10px;",[405,130291,130292],{"align":23813},"2个值，代表上下内边距为5像素，左右内边距为10像素",[359,130294,130295,130298],{},[405,130296,130297],{"align":23813},"padding: 5px 10px 20px;",[405,130299,130300],{"align":23813},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[359,130302,130303,130306],{},[405,130304,130305],{"align":23813},"padding: 5px 10px 20px 30px;",[405,130307,130308],{"align":23813},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[353,130310,130311,130319],{},[356,130312,130313],{},[359,130314,130315,130317],{},[362,130316,129213],{"align":23813},[362,130318,102755],{"align":23813},[400,130320,130321,130329,130337,130345],{},[359,130322,130323,130326],{},[405,130324,130325],{"align":23813},"padding-left",[405,130327,130328],{"align":23813},"左内边距",[359,130330,130331,130334],{},[405,130332,130333],{"align":23813},"padding-right",[405,130335,130336],{"align":23813},"右内边距",[359,130338,130339,130342],{},[405,130340,130341],{"align":23813},"padding-top",[405,130343,130344],{"align":23813},"上内边距",[359,130346,130347,130350],{},[405,130348,130349],{"align":23813},"padding-bottom",[405,130351,130352],{"align":23813},"下内边距",[171,130354,130355],{"start":109},[174,130356,130357],{},"内边距会影响盒子的实际大小",[14,130359,130360],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130362,130363],{},"①内容和边框有了距离，添加了内边距",[14,130365,130366],{},"②padding影响了盒子实际大小",[14,130368,130369],{},"内边距对盒子大小的影响：",[14,130371,130372],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130374,130375],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130377,95279],{},[14,130379,130380],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[188,130382,130384],{"id":130383},"_913-外边距","9.1.3 外边距",[171,130386,130387],{},[174,130388,130389],{},"控制盒子与盒子之间的距离",[353,130391,130392,130400],{},[356,130393,130394],{},[359,130395,130396,130398],{},[362,130397,129213],{"align":23813},[362,130399,102755],{"align":23813},[400,130401,130402,130410,130418,130426],{},[359,130403,130404,130407],{},[405,130405,130406],{"align":23813},"margin-left",[405,130408,130409],{"align":23813},"左外边距",[359,130411,130412,130415],{},[405,130413,130414],{"align":23813},"margin-right",[405,130416,130417],{"align":23813},"右外边距",[359,130419,130420,130423],{},[405,130421,130422],{"align":23813},"margin-top",[405,130424,130425],{"align":23813},"上外边距",[359,130427,130428,130431],{},[405,130429,130430],{"align":23813},"margin-bottom",[405,130432,130433],{"align":23813},"下外边距",[171,130435,130436],{"start":94},[174,130437,130438],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130440,130441],{},"①盒子必须指定了宽度（width）",[14,130443,130444],{},"②盒子左右的外边距都设置为 auto",[18,130446,130448],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,130449,130450,130455,130462,130478],{"__ignoreMap":23},[28,130451,130452],{"class":30,"line":31},[28,130453,130454],{"class":105},"\u002F* margin 复合写法（同上） *\u002F\n",[28,130456,130457,130460],{"class":30,"line":94},[28,130458,130459],{"class":2040},".box",[28,130461,15649],{"class":34},[28,130463,130464,130466,130468,130470,130472,130475],{"class":30,"line":109},[28,130465,70545],{"class":45},[28,130467,51512],{"class":34},[28,130469,407],{"class":45},[28,130471,51631],{"class":45},[28,130473,130474],{"class":34},";  ",[28,130476,130477],{"class":105},"\u002F* 块级盒子水平居中 *\u002F\n",[28,130479,130480],{"class":30,"line":125},[28,130481,1642],{"class":34},[171,130483,130484],{"start":109},[174,130485,130486],{},"外边距塌陷问题",[14,130488,130489],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1539,130491],{"style":126467,"src":130492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130494,130495],{},"解决方案：",[14,130497,130498],{},"①可以为父亲元素定义上边距",[18,130500,130501],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,130502,130503,130507,130513,130527],{"__ignoreMap":23},[28,130504,130505],{"class":30,"line":31},[28,130506,130454],{"class":105},[28,130508,130509,130511],{"class":30,"line":94},[28,130510,130459],{"class":2040},[28,130512,15649],{"class":34},[28,130514,130515,130517,130519,130521,130523,130525],{"class":30,"line":109},[28,130516,70545],{"class":45},[28,130518,51512],{"class":34},[28,130520,407],{"class":45},[28,130522,51631],{"class":45},[28,130524,130474],{"class":34},[28,130526,130477],{"class":105},[28,130528,130529],{"class":30,"line":125},[28,130530,1642],{"class":34},[14,130532,130533],{},"②可以为父亲元素定义上内边距",[14,130535,130536],{},"③可以为父亲元素添加overflow:hidden",[1539,130538],{"style":126467,"src":130539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[18,130541,130542],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,130543,130544,130548,130554,130568],{"__ignoreMap":23},[28,130545,130546],{"class":30,"line":31},[28,130547,130454],{"class":105},[28,130549,130550,130552],{"class":30,"line":94},[28,130551,130459],{"class":2040},[28,130553,15649],{"class":34},[28,130555,130556,130558,130560,130562,130564,130566],{"class":30,"line":109},[28,130557,70545],{"class":45},[28,130559,51512],{"class":34},[28,130561,407],{"class":45},[28,130563,51631],{"class":45},[28,130565,130474],{"class":34},[28,130567,130477],{"class":105},[28,130569,130570],{"class":30,"line":125},[28,130571,1642],{"class":34},[1539,130573],{"style":126467,"src":130574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130576,130577],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130579,130580],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[188,130582,130584],{"id":130583},"_914-清除内外边距","9.1.4 清除内外边距",[14,130586,130587],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[18,130589,130590],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,130591,130592,130596,130602,130616],{"__ignoreMap":23},[28,130593,130594],{"class":30,"line":31},[28,130595,130454],{"class":105},[28,130597,130598,130600],{"class":30,"line":94},[28,130599,130459],{"class":2040},[28,130601,15649],{"class":34},[28,130603,130604,130606,130608,130610,130612,130614],{"class":30,"line":109},[28,130605,70545],{"class":45},[28,130607,51512],{"class":34},[28,130609,407],{"class":45},[28,130611,51631],{"class":45},[28,130613,130474],{"class":34},[28,130615,130477],{"class":105},[28,130617,130618],{"class":30,"line":125},[28,130619,1642],{"class":34},[14,130621,130622],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[188,130624,130626],{"id":130625},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1211,130628,130629,130632,130635,130638,130641,130644],{},[174,130630,130631],{},"文件→打开 ：可以打开我们要测量的图片",[174,130633,130634],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[174,130636,130637],{},"右击标尺，把里面的单位改为像素",[174,130639,130640],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[174,130642,130643],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[174,130645,130646],{},"用选区拖动 可以测量大小",[1539,130648],{"style":126467,"src":130649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1211,130651,130652,130655],{},[174,130653,130654],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[174,130656,130657],{},"吸管取色工具",[1539,130659],{"style":126467,"src":130660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[188,130662,130664],{"id":130663},"_916-案例","9.1.6 案例",[171,130666,130667],{},[174,130668,130669],{},"小米商品",[1539,130671],{"style":126467,"src":130672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[18,130674,130675],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,130676,130677,130681,130687,130701],{"__ignoreMap":23},[28,130678,130679],{"class":30,"line":31},[28,130680,130454],{"class":105},[28,130682,130683,130685],{"class":30,"line":94},[28,130684,130459],{"class":2040},[28,130686,15649],{"class":34},[28,130688,130689,130691,130693,130695,130697,130699],{"class":30,"line":109},[28,130690,70545],{"class":45},[28,130692,51512],{"class":34},[28,130694,407],{"class":45},[28,130696,51631],{"class":45},[28,130698,130474],{"class":34},[28,130700,130477],{"class":105},[28,130702,130703],{"class":30,"line":125},[28,130704,1642],{"class":34},[171,130706,130707],{"start":94},[174,130708,130709],{},"快报模块",[1539,130711],{"style":126467,"src":130712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[18,130714,130716],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[25,130717,130718,130723,130738,130743],{"__ignoreMap":23},[28,130719,130720],{"class":30,"line":31},[28,130721,130722],{"class":105},"\u003C!-- HTML 代码示例 -->\n",[28,130724,130725,130727,130729,130731,130733,130736],{"class":30,"line":94},[28,130726,99],{"class":34},[28,130728,51686],{"class":51375},[28,130730,53561],{"class":2040},[28,130732,39],{"class":34},[28,130734,130735],{"class":320},"\"example\"",[28,130737,51382],{"class":34},[28,130739,130740],{"class":30,"line":109},[28,130741,130742],{"class":34},"  示例内容\n",[28,130744,130745,130747,130749],{"class":30,"line":125},[28,130746,51860],{"class":34},[28,130748,51686],{"class":51375},[28,130750,51382],{"class":34},[188,130752,130754],{"id":130753},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[171,130756,130757],{},[174,130758,130759],{},"圆角边框",[14,130761,130762],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1539,130764],{"style":126467,"src":130765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[18,130767,130769],{"className":126611,"code":130768,"language":126613,"meta":23,"style":23},"div {\n  border: 1px solid #ccc;\n}\n",[25,130770,130771,130777,130793],{"__ignoreMap":23},[28,130772,130773,130775],{"class":30,"line":31},[28,130774,51686],{"class":51375},[28,130776,15649],{"class":34},[28,130778,130779,130781,130783,130785,130787,130789,130791],{"class":30,"line":94},[28,130780,70971],{"class":45},[28,130782,51512],{"class":34},[28,130784,46],{"class":45},[28,130786,51567],{"class":38},[28,130788,51596],{"class":45},[28,130790,130003],{"class":45},[28,130792,1367],{"class":34},[28,130794,130795],{"class":30,"line":109},[28,130796,1642],{"class":34},[14,130798,130799],{},"解释:",[1211,130801,130802,130805,130808,130811,130814],{},[174,130803,130804],{},"参数值可以为数值或百分比的形式",[174,130806,130807],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[174,130809,130810],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[174,130812,130813],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[174,130815,130816],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[171,130818,130819],{"start":94},[174,130820,130821],{},"盒子阴影",[18,130823,130825],{"className":126611,"code":130824,"language":126613,"meta":23,"style":23},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[25,130826,130827,130833,130870],{"__ignoreMap":23},[28,130828,130829,130831],{"class":30,"line":31},[28,130830,51686],{"class":51375},[28,130832,15649],{"class":34},[28,130834,130835,130838,130840,130842,130844,130846,130848,130850,130852,130854,130856,130858,130860,130862,130864,130866,130868],{"class":30,"line":94},[28,130836,130837],{"class":45},"  box-shadow",[28,130839,51512],{"class":34},[28,130841,407],{"class":45},[28,130843,14832],{"class":45},[28,130845,51567],{"class":38},[28,130847,2115],{"class":45},[28,130849,51567],{"class":38},[28,130851,78842],{"class":45},[28,130853,221],{"class":34},[28,130855,407],{"class":45},[28,130857,12512],{"class":34},[28,130859,407],{"class":45},[28,130861,12512],{"class":34},[28,130863,407],{"class":45},[28,130865,12512],{"class":34},[28,130867,86285],{"class":45},[28,130869,2796],{"class":34},[28,130871,130872],{"class":30,"line":109},[28,130873,1642],{"class":34},[353,130875,130876,130884],{},[356,130877,130878],{},[359,130879,130880,130882],{},[362,130881,368],{"align":23813},[362,130883,27567],{"align":23813},[400,130885,130886,130894,130902,130910,130918,130926],{},[359,130887,130888,130891],{},[405,130889,130890],{"align":23813},"h-shadow",[405,130892,130893],{"align":23813},"必需,水平阴影的位置,允许负值",[359,130895,130896,130899],{},[405,130897,130898],{"align":23813},"v-shadow",[405,130900,130901],{"align":23813},"必需,垂直阴影的位置,允许负值",[359,130903,130904,130907],{},[405,130905,130906],{"align":23813},"blur",[405,130908,130909],{"align":23813},"可选,模糊距离,就是影子的虚实",[359,130911,130912,130915],{},[405,130913,130914],{"align":23813},"spread",[405,130916,130917],{"align":23813},"可选,阴影尺寸",[359,130919,130920,130923],{},[405,130921,130922],{"align":23813},"color",[405,130924,130925],{"align":23813},"可选,阴影的颜色",[359,130927,130928,130931],{},[405,130929,130930],{"align":23813},"inset",[405,130932,130933],{"align":23813},"可选,将外部阴影(outset)改为内部阴影",[171,130935,130936],{"start":109},[174,130937,130938],{},"文字阴影",[18,130940,130942],{"className":126611,"code":130941,"language":126613,"meta":23,"style":23},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[25,130943,130944,130950,130989],{"__ignoreMap":23},[28,130945,130946,130948],{"class":30,"line":31},[28,130947,14],{"class":51375},[28,130949,15649],{"class":34},[28,130951,130952,130955,130957,130959,130961,130963,130965,130967,130969,130971,130973,130975,130977,130979,130981,130983,130985,130987],{"class":30,"line":94},[28,130953,130954],{"class":45},"  text-shadow",[28,130956,51512],{"class":34},[28,130958,46],{"class":45},[28,130960,51567],{"class":38},[28,130962,25196],{"class":45},[28,130964,51567],{"class":38},[28,130966,14832],{"class":45},[28,130968,51567],{"class":38},[28,130970,78842],{"class":45},[28,130972,221],{"class":34},[28,130974,407],{"class":45},[28,130976,12512],{"class":34},[28,130978,407],{"class":45},[28,130980,12512],{"class":34},[28,130982,407],{"class":45},[28,130984,12512],{"class":34},[28,130986,100580],{"class":45},[28,130988,2796],{"class":34},[28,130990,130991],{"class":30,"line":109},[28,130992,1642],{"class":34},[353,130994,130995,131003],{},[356,130996,130997],{},[359,130998,130999,131001],{},[362,131000,368],{"align":23813},[362,131002,27567],{"align":23813},[400,131004,131005,131011,131018,131025],{},[359,131006,131007,131009],{},[405,131008,130890],{"align":23813},[405,131010,130893],{"align":23813},[359,131012,131013,131015],{},[405,131014,130898],{"align":23813},[405,131016,131017],{"align":23813},"必需,垂直阴影位置,允许负值",[359,131019,131020,131022],{},[405,131021,130906],{"align":23813},[405,131023,131024],{"align":23813},"可选,模糊的距离",[359,131026,131027,131029],{},[405,131028,130922],{"align":23813},[405,131030,130925],{"align":23813},[159,131032,131034],{"id":131033},"_92-浮动","9.2 浮动",[188,131036,131038],{"id":131037},"_921-浮动介绍","9.2.1 浮动介绍",[14,131040,131041],{},"在16.2中详细介绍",[188,131043,131045],{"id":131044},"_922-清除浮动","9.2.2 清除浮动",[171,131047,131048,131051],{},[174,131049,131050],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[174,131052,131053],{},"清除浮动的本质",[14,131055,131056],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131058,9102],{},[1211,131060,131061,131064,131067],{},[174,131062,131063],{},"如果父盒子本身有高度，则不需要清除浮动",[174,131065,131066],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[174,131068,131069],{},"父级有了高度，就不会影响下面的标准流了",[171,131071,131072],{"start":109},[174,131073,131074],{},"清除浮动样式",[18,131076,131078],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[25,131079,131080,131087,131098,131102,131109,131119],{"__ignoreMap":23},[28,131081,131082,131085],{"class":30,"line":31},[28,131083,131084],{"class":2040},".left",[28,131086,15649],{"class":34},[28,131088,131089,131092,131094,131096],{"class":30,"line":94},[28,131090,131091],{"class":45},"  float",[28,131093,51512],{"class":34},[28,131095,23813],{"class":45},[28,131097,1367],{"class":34},[28,131099,131100],{"class":30,"line":109},[28,131101,1642],{"class":34},[28,131103,131104,131107],{"class":30,"line":125},[28,131105,131106],{"class":2040},".right",[28,131108,15649],{"class":34},[28,131110,131111,131113,131115,131117],{"class":30,"line":131},[28,131112,131091],{"class":45},[28,131114,51512],{"class":34},[28,131116,72597],{"class":45},[28,131118,1367],{"class":34},[28,131120,131121],{"class":30,"line":1291},[28,131122,1642],{"class":34},[353,131124,131125,131133],{},[356,131126,131127],{},[359,131128,131129,131131],{},[362,131130,127075],{"align":23813},[362,131132,27567],{"align":23813},[400,131134,131135,131142,131149],{},[359,131136,131137,131139],{},[405,131138,23813],{"align":23813},[405,131140,131141],{"align":23813},"不允许左侧有浮动元素（清除左侧浮动的影响）",[359,131143,131144,131146],{},[405,131145,72597],{"align":23813},[405,131147,131148],{"align":23813},"不允许右侧有浮动元素（清除右侧浮动的影响）",[359,131150,131151,131154],{},[405,131152,131153],{"align":23813},"both",[405,131155,131156],{"align":23813},"同时清除左右侧浮动的影响",[14,131158,131159],{},"法一",[14,131161,131162],{},"额外标签法也称为隔墙法",[14,131164,131165],{},"使用方式：",[14,131167,131168],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[18,131170,131171],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,131172,131173,131179,131189,131193,131199,131209],{"__ignoreMap":23},[28,131174,131175,131177],{"class":30,"line":31},[28,131176,131084],{"class":2040},[28,131178,15649],{"class":34},[28,131180,131181,131183,131185,131187],{"class":30,"line":94},[28,131182,131091],{"class":45},[28,131184,51512],{"class":34},[28,131186,23813],{"class":45},[28,131188,1367],{"class":34},[28,131190,131191],{"class":30,"line":109},[28,131192,1642],{"class":34},[28,131194,131195,131197],{"class":30,"line":125},[28,131196,131106],{"class":2040},[28,131198,15649],{"class":34},[28,131200,131201,131203,131205,131207],{"class":30,"line":131},[28,131202,131091],{"class":45},[28,131204,51512],{"class":34},[28,131206,72597],{"class":45},[28,131208,1367],{"class":34},[28,131210,131211],{"class":30,"line":1291},[28,131212,1642],{"class":34},[14,131214,131215],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131217,131218],{},"优点： 通俗易懂，书写方便",[14,131220,131221],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131223,131224],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131226,131227],{},"法二",[14,131229,131230],{},"父级添加overflow属性",[18,131232,131233],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,131234,131235,131241,131251,131255,131261,131271],{"__ignoreMap":23},[28,131236,131237,131239],{"class":30,"line":31},[28,131238,131084],{"class":2040},[28,131240,15649],{"class":34},[28,131242,131243,131245,131247,131249],{"class":30,"line":94},[28,131244,131091],{"class":45},[28,131246,51512],{"class":34},[28,131248,23813],{"class":45},[28,131250,1367],{"class":34},[28,131252,131253],{"class":30,"line":109},[28,131254,1642],{"class":34},[28,131256,131257,131259],{"class":30,"line":125},[28,131258,131106],{"class":2040},[28,131260,15649],{"class":34},[28,131262,131263,131265,131267,131269],{"class":30,"line":131},[28,131264,131091],{"class":45},[28,131266,51512],{"class":34},[28,131268,72597],{"class":45},[28,131270,1367],{"class":34},[28,131272,131273],{"class":30,"line":1291},[28,131274,1642],{"class":34},[14,131276,131277],{},"overflow: hidden;",[14,131279,131280],{},"优点：代码简洁",[14,131282,131283],{},"缺点：无法显示溢出的部分",[14,131285,131286],{},"注意：是给父元素添加代码",[14,131288,131289],{},"法三",[14,131291,131292],{},"父级添加after伪元素",[14,131294,131295,131298],{},[131296,131297],"after",{}," 方式是额外标签法的升级版",[14,131300,131301],{},"使用的时候复制就可以",[18,131303,131304],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,131305,131306,131312,131322,131326,131332,131342],{"__ignoreMap":23},[28,131307,131308,131310],{"class":30,"line":31},[28,131309,131084],{"class":2040},[28,131311,15649],{"class":34},[28,131313,131314,131316,131318,131320],{"class":30,"line":94},[28,131315,131091],{"class":45},[28,131317,51512],{"class":34},[28,131319,23813],{"class":45},[28,131321,1367],{"class":34},[28,131323,131324],{"class":30,"line":109},[28,131325,1642],{"class":34},[28,131327,131328,131330],{"class":30,"line":125},[28,131329,131106],{"class":2040},[28,131331,15649],{"class":34},[28,131333,131334,131336,131338,131340],{"class":30,"line":131},[28,131335,131091],{"class":45},[28,131337,51512],{"class":34},[28,131339,72597],{"class":45},[28,131341,1367],{"class":34},[28,131343,131344],{"class":30,"line":1291},[28,131345,1642],{"class":34},[14,131347,131348],{},"优点：没有增加标签，结构更简单",[14,131350,131351],{},"缺点：照顾低版本浏览器",[14,131353,131354],{},"代表网站： 百度、淘宝网、网易等",[14,131356,131357],{},"法四",[14,131359,131360],{},"父级添加双伪元素",[18,131362,131363],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,131364,131365,131371,131381,131385,131391,131401],{"__ignoreMap":23},[28,131366,131367,131369],{"class":30,"line":31},[28,131368,131084],{"class":2040},[28,131370,15649],{"class":34},[28,131372,131373,131375,131377,131379],{"class":30,"line":94},[28,131374,131091],{"class":45},[28,131376,51512],{"class":34},[28,131378,23813],{"class":45},[28,131380,1367],{"class":34},[28,131382,131383],{"class":30,"line":109},[28,131384,1642],{"class":34},[28,131386,131387,131389],{"class":30,"line":125},[28,131388,131106],{"class":2040},[28,131390,15649],{"class":34},[28,131392,131393,131395,131397,131399],{"class":30,"line":131},[28,131394,131091],{"class":45},[28,131396,51512],{"class":34},[28,131398,72597],{"class":45},[28,131400,1367],{"class":34},[28,131402,131403],{"class":30,"line":1291},[28,131404,1642],{"class":34},[14,131406,131407],{},"优点：代码更简洁",[14,131409,131351],{},[14,131411,131412],{},"代表网站：小米、腾讯等",[159,131414,131416],{"id":131415},"_93-ps切图","9.3 PS切图",[188,131418,131420],{"id":131419},"_931-常见图片格式","9.3.1 常见图片格式",[353,131422,131423,131433],{},[356,131424,131425],{},[359,131426,131427,131430],{},[362,131428,131429],{"align":23813},"jpg图像格式",[362,131431,131432],{"align":23813},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[400,131434,131435,131443,131451],{},[359,131436,131437,131440],{},[405,131438,131439],{"align":23813},"gif图像格式",[405,131441,131442],{"align":23813},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[359,131444,131445,131448],{},[405,131446,131447],{"align":23813},"png图像格式",[405,131449,131450],{"align":23813},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[359,131452,131453,131456],{},[405,131454,131455],{"align":23813},"PSD图像格式",[405,131457,131458],{"align":23813},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[188,131460,131462],{"id":131461},"_932-图层切图","9.3.2 图层切图",[14,131464,131465],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131467,131468],{},"按住shift选中两个图层->图层菜单->合并图层",[188,131470,131472],{"id":131471},"_933-切片切图","9.3.3 切片切图",[1211,131474,131475,131478],{},[174,131476,131477],{},"利用切片工具手动划出",[174,131479,131480],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[188,131482,131484],{"id":131483},"_934-切图步骤","9.3.4 切图步骤",[14,131486,131487],{},"用切片工具选中：",[1539,131489],{"style":126467,"src":131490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131492,131493],{},"文件 -> 导出",[1539,131495],{"style":126467,"src":131496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[136,131498,131499],{},"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":23,"searchDepth":94,"depth":94,"links":131501},[131502,131511,131515],{"id":129938,"depth":94,"text":129939,"children":131503},[131504,131505,131506,131507,131508,131509,131510],{"id":129963,"depth":109,"text":129964},{"id":130254,"depth":109,"text":130255},{"id":130383,"depth":109,"text":130384},{"id":130583,"depth":109,"text":130584},{"id":130625,"depth":109,"text":130626},{"id":130663,"depth":109,"text":130664},{"id":130753,"depth":109,"text":130754},{"id":131033,"depth":94,"text":131034,"children":131512},[131513,131514],{"id":131037,"depth":109,"text":131038},{"id":131044,"depth":109,"text":131045},{"id":131415,"depth":94,"text":131416,"children":131516},[131517,131518,131519,131520],{"id":131419,"depth":109,"text":131420},{"id":131461,"depth":109,"text":131462},{"id":131471,"depth":109,"text":131472},{"id":131483,"depth":109,"text":131484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129930,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131527,"title":131528,"body":131529,"description":141,"extension":142,"meta":132170,"navigation":144,"path":132171,"seo":132172,"stem":132173,"__hash__":132174},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131530,"toc":132158},[131531,131534,131538,131564,131598,131602,131606,131609,131651,131658,131668,131676,131678,131681,131684,131687,131694,131708,131712,131715,131744,131748,131751,131765,131769,131772,131800,131804,131807,131833,131837,131842,131875,131880,131908,131912,131929,131975,131980,132024,132041,132148,132156],[10,131532,131528],{"id":131533},"_10-css规范与学成在线案例",[159,131535,131537],{"id":131536},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[171,131539,131540,131546,131552,131558],{},[174,131541,131542,131545],{},[365,131543,131544],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[174,131547,131548,131551],{},[365,131549,131550],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[174,131553,131554,131557],{},[365,131555,131556],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[174,131559,131560,131563],{},[365,131561,131562],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[18,131565,131566],{"className":126611,"code":129975,"language":126613,"meta":23,"style":23},[25,131567,131568,131572,131578,131594],{"__ignoreMap":23},[28,131569,131570],{"class":30,"line":31},[28,131571,129982],{"class":105},[28,131573,131574,131576],{"class":30,"line":94},[28,131575,51686],{"class":51375},[28,131577,15649],{"class":34},[28,131579,131580,131582,131584,131586,131588,131590,131592],{"class":30,"line":109},[28,131581,70971],{"class":45},[28,131583,51512],{"class":34},[28,131585,46],{"class":45},[28,131587,51567],{"class":38},[28,131589,51596],{"class":45},[28,131591,130003],{"class":45},[28,131593,1367],{"class":34},[28,131595,131596],{"class":30,"line":125},[28,131597,1642],{"class":34},[159,131599,131601],{"id":131600},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[188,131603,131605],{"id":131604},"_1021-header头部制作","10.2.1 header头部制作",[1539,131607],{"style":126467,"src":131608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1211,131610,131611,131618,131625,131631,131638,131645],{},[174,131612,131613,131614,131617],{},"1号是版心盒子 ",[365,131615,131616],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[174,131619,131620,131621,131624],{},"版心盒子 里面包含 2号盒子 ",[365,131622,131623],{},"logo"," 图标",[174,131626,131627,131628,131630],{},"版心盒子 里面包含 3号盒子 ",[365,131629,53788],{}," 导航栏",[174,131632,131633,131634,131637],{},"版心盒子 里面包含 4号盒子 ",[365,131635,131636],{},"search"," 搜索框",[174,131639,131640,131641,131644],{},"版心盒子 里面包含 5号盒子 ",[365,131642,131643],{},"user"," 个人信息",[174,131646,131647,131648],{},"注意，要求里面的 ",[365,131649,131650],{},"4个子盒子 必须都浮动",[171,131652,131653],{},[174,131654,131655],{},[365,131656,131657],{},"导航栏注意点:",[14,131659,131660,131661,131664,131665],{},"实际开发中， ",[365,131662,131663],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[365,131666,131667],{},"用 li 包含链接(li+a)的做法",[1211,131669,131670,131673],{},[174,131671,131672],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[174,131674,131675],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131677,9102],{},[14,131679,131680],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131682,131683],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131685,131686],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[171,131688,131689],{"start":94},[174,131690,131691],{},[365,131692,131693],{},"4号盒子search的细节：",[1211,131695,131696,131699,131702],{},[174,131697,131698],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[174,131700,131701],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[174,131703,131704,131707],{},[25,131705,131706],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[188,131709,131711],{"id":131710},"_1022-banner制作","10.2.2 banner制作",[1539,131713],{"style":126467,"src":131714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1211,131716,131717,131724,131730,131737],{},[174,131718,131719,131720,131723],{},"1号盒子是通栏的大盒子 ",[365,131721,131722],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[174,131725,131726,131727,131729],{},"2号盒子是版心 ",[365,131728,1001],{}," ， 要水平居中对齐",[174,131731,131732,131733,131736],{},"3号盒子版心内，左对齐 ",[365,131734,131735],{},"subnav"," 侧导航栏",[174,131738,131739,131740,131743],{},"4号盒子版心内，右对齐 ",[365,131741,131742],{},"course"," 课程",[188,131745,131747],{"id":131746},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1539,131749],{"style":126467,"src":131750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1211,131752,131753,131756,131759,131762],{},[174,131754,131755],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[174,131757,131758],{},"1号盒子是标题 H3 左侧浮动",[174,131760,131761],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[174,131763,131764],{},"3号盒子 右浮动 mod 修改",[188,131766,131768],{"id":131767},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1539,131770],{"style":126467,"src":131771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1211,131773,131774,131780,131787,131794,131797],{},[174,131775,131776,131777,131779],{},"1号盒子为最大的盒子 ",[365,131778,53789],{}," 版心水平居中对齐",[174,131781,131782,131783,131786],{},"2号盒子为上面部分 ",[365,131784,131785],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[174,131788,131789,131790,131793],{},"3号盒子为底下部分 ",[365,131791,131792],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[174,131795,131796],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[174,131798,131799],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[188,131801,131803],{"id":131802},"_1025-底部模块制作","10.2.5 底部模块制作",[1539,131805],{"style":126467,"src":131806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1211,131808,131809,131816,131819,131826],{},[174,131810,131811,131812,131815],{},"1号盒子通栏大盒子 底部 ",[365,131813,131814],{},"footer"," 给高度 底色是白色",[174,131817,131818],{},"2号盒子版心水平居中",[174,131820,131821,131822,131825],{},"3号盒子版权 ",[365,131823,131824],{},"copyright"," 左对齐",[174,131827,131828,131829,131832],{},"4号盒子 链接组 ",[365,131830,131831],{},"links"," 右对齐",[188,131834,131836],{"id":131835},"_1026-代码模块","10.2.6 代码模块",[171,131838,131839],{},[174,131840,131841],{},"html部分",[18,131843,131845],{"className":127358,"code":131844,"language":127360,"meta":23,"style":23},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[25,131846,131847],{"__ignoreMap":23},[28,131848,131849,131851,131853,131855,131857,131860,131863,131865,131868,131871,131873],{"class":30,"line":31},[28,131850,99],{"class":34},[28,131852,35],{"class":51375},[28,131854,61132],{"class":2040},[28,131856,39],{"class":34},[28,131858,131859],{"class":320},"\"https:\u002F\u002Fexample.com\"",[28,131861,131862],{"class":2040}," target",[28,131864,39],{"class":34},[28,131866,131867],{"class":320},"\"_blank\"",[28,131869,131870],{"class":34},">链接文字\u003C\u002F",[28,131872,35],{"class":51375},[28,131874,51382],{"class":34},[171,131876,131877],{"start":94},[174,131878,131879],{},"css部分",[18,131881,131882],{"className":127358,"code":131844,"language":127360,"meta":23,"style":23},[25,131883,131884],{"__ignoreMap":23},[28,131885,131886,131888,131890,131892,131894,131896,131898,131900,131902,131904,131906],{"class":30,"line":31},[28,131887,99],{"class":34},[28,131889,35],{"class":51375},[28,131891,61132],{"class":2040},[28,131893,39],{"class":34},[28,131895,131859],{"class":320},[28,131897,131862],{"class":2040},[28,131899,39],{"class":34},[28,131901,131867],{"class":320},[28,131903,131870],{"class":34},[28,131905,35],{"class":51375},[28,131907,51382],{"class":34},[188,131909,131911],{"id":131910},"_1027-收获","10.2.7 收获",[171,131913,131914,131917,131920,131923,131926],{},[174,131915,131916],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[174,131918,131919],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[174,131921,131922],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[174,131924,131925],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[174,131927,131928],{},"遗忘代码",[18,131930,131932],{"className":126611,"code":131931,"language":126613,"meta":23,"style":23},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[25,131933,131934,131956,131961,131971],{"__ignoreMap":23},[28,131935,131936,131938,131940,131942,131944,131946,131948,131950,131952,131954],{"class":30,"line":31},[28,131937,51686],{"class":51375},[28,131939,12512],{"class":34},[28,131941,14],{"class":51375},[28,131943,12512],{"class":34},[28,131945,10],{"class":51375},[28,131947,12512],{"class":34},[28,131949,1211],{"class":51375},[28,131951,12512],{"class":34},[28,131953,174],{"class":51375},[28,131955,15649],{"class":34},[28,131957,131958],{"class":30,"line":94},[28,131959,131960],{"class":105},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[28,131962,131963,131965,131967,131969],{"class":30,"line":109},[28,131964,128227],{"class":45},[28,131966,51512],{"class":34},[28,131968,60944],{"class":45},[28,131970,1367],{"class":34},[28,131972,131973],{"class":30,"line":125},[28,131974,1642],{"class":34},[171,131976,131977],{"start":1291},[174,131978,131979],{},"html引css的程序",[18,131981,131982],{"className":126611,"code":131931,"language":126613,"meta":23,"style":23},[25,131983,131984,132006,132010,132020],{"__ignoreMap":23},[28,131985,131986,131988,131990,131992,131994,131996,131998,132000,132002,132004],{"class":30,"line":31},[28,131987,51686],{"class":51375},[28,131989,12512],{"class":34},[28,131991,14],{"class":51375},[28,131993,12512],{"class":34},[28,131995,10],{"class":51375},[28,131997,12512],{"class":34},[28,131999,1211],{"class":51375},[28,132001,12512],{"class":34},[28,132003,174],{"class":51375},[28,132005,15649],{"class":34},[28,132007,132008],{"class":30,"line":94},[28,132009,131960],{"class":105},[28,132011,132012,132014,132016,132018],{"class":30,"line":109},[28,132013,128227],{"class":45},[28,132015,51512],{"class":34},[28,132017,60944],{"class":45},[28,132019,1367],{"class":34},[28,132021,132022],{"class":30,"line":125},[28,132023,1642],{"class":34},[171,132025,132026,132029,132032,132035,132038],{"start":1297},[174,132027,132028],{},"浮动的盒子不会有外边距合并问题",[174,132030,132031],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[174,132033,132034],{},"ctrl+g快速定位行；shift+alt多个光标",[174,132036,132037],{},"学习上方各个模块的选择器起名方法，以后就这样用",[174,132039,132040],{},"在写选择器时尽量写全一些，例如",[18,132042,132044],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},"\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",[25,132045,132046,132051,132067,132072,132087,132092,132107,132112,132127,132132],{"__ignoreMap":23},[28,132047,132048],{"class":30,"line":31},[28,132049,132050],{"class":105},"\u002F* 静态定位（默认） *\u002F\n",[28,132052,132053,132056,132058,132060,132062,132065],{"class":30,"line":94},[28,132054,132055],{"class":2040},".static",[28,132057,79882],{"class":34},[28,132059,128971],{"class":45},[28,132061,51512],{"class":34},[28,132063,132064],{"class":45},"static",[28,132066,129541],{"class":34},[28,132068,132069],{"class":30,"line":109},[28,132070,132071],{"class":105},"\u002F* 相对定位 *\u002F\n",[28,132073,132074,132077,132079,132081,132083,132085],{"class":30,"line":125},[28,132075,132076],{"class":2040},".relative",[28,132078,79882],{"class":34},[28,132080,128971],{"class":45},[28,132082,51512],{"class":34},[28,132084,54839],{"class":45},[28,132086,129541],{"class":34},[28,132088,132089],{"class":30,"line":131},[28,132090,132091],{"class":105},"\u002F* 绝对定位 *\u002F\n",[28,132093,132094,132097,132099,132101,132103,132105],{"class":30,"line":1291},[28,132095,132096],{"class":2040},".absolute",[28,132098,79882],{"class":34},[28,132100,128971],{"class":45},[28,132102,51512],{"class":34},[28,132104,54906],{"class":45},[28,132106,129541],{"class":34},[28,132108,132109],{"class":30,"line":1297},[28,132110,132111],{"class":105},"\u002F* 固定定位 *\u002F\n",[28,132113,132114,132117,132119,132121,132123,132125],{"class":30,"line":1388},[28,132115,132116],{"class":2040},".fixed",[28,132118,79882],{"class":34},[28,132120,128971],{"class":45},[28,132122,51512],{"class":34},[28,132124,86308],{"class":45},[28,132126,129541],{"class":34},[28,132128,132129],{"class":30,"line":1394},[28,132130,132131],{"class":105},"\u002F* 粘性定位 *\u002F\n",[28,132133,132134,132137,132139,132141,132143,132146],{"class":30,"line":1406},[28,132135,132136],{"class":2040},".sticky",[28,132138,79882],{"class":34},[28,132140,128971],{"class":45},[28,132142,51512],{"class":34},[28,132144,132145],{"class":45},"sticky",[28,132147,129541],{"class":34},[171,132149,132150,132153],{"start":1694},[174,132151,132152],{},"一定要用好注释",[174,132154,132155],{},"浮动的盒子不会有外边距合并的问题",[136,132157,131499],{},{"title":23,"searchDepth":94,"depth":94,"links":132159},[132160,132161],{"id":131536,"depth":94,"text":131537},{"id":131600,"depth":94,"text":131601,"children":132162},[132163,132164,132165,132166,132167,132168,132169],{"id":131604,"depth":109,"text":131605},{"id":131710,"depth":109,"text":131711},{"id":131746,"depth":109,"text":131747},{"id":131767,"depth":109,"text":131768},{"id":131802,"depth":109,"text":131803},{"id":131835,"depth":109,"text":131836},{"id":131910,"depth":109,"text":131911},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131528,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132176,"title":132177,"body":132178,"description":141,"extension":142,"meta":133664,"navigation":144,"path":133665,"seo":133666,"stem":133667,"__hash__":133668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132179,"toc":133656},[132180,132183,132187,132191,132202,132206,132223,132267,132300,132303,132320,132323,132326,132370,132374,132378,132381,132384,132388,132391,132402,132465,132506,132509,132524,132578,132586,132589,132600,132654,132680,132683,132696,132750,132782,132836,132859,132913,132916,132919,132926,132980,133001,133055,133058,133061,133146,133154,133211,133234,133238,133241,133259,133263,133282,133336,133374,133378,133381,133384,133406,133410,133418,133421,133426,133437,133440,133444,133458,133502,133505,133509,133512,133517,133543,133548,133625,133628,133632,133635,133638,133641,133644,133647,133650,133653],[10,132181,132177],{"id":132182},"_11-传统布局与定位体系",[159,132184,132186],{"id":132185},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[188,132188,132190],{"id":132189},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1211,132192,132193,132196,132199],{},[174,132194,132195],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[174,132197,132198],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[174,132200,132201],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[188,132203,132205],{"id":132204},"_1112-浮动","11.1.2 浮动",[1211,132207,132208,132211,132214,132217,132220],{},[174,132209,132210],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[174,132212,132213],{},"浮动可以改变元素标签默认的排列方式",[174,132215,132216],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[174,132218,132219],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[174,132221,132222],{},"在使用行内块转换时盒子之间是有空隙的",[18,132224,132225],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,132226,132227,132233,132243,132247,132253,132263],{"__ignoreMap":23},[28,132228,132229,132231],{"class":30,"line":31},[28,132230,131084],{"class":2040},[28,132232,15649],{"class":34},[28,132234,132235,132237,132239,132241],{"class":30,"line":94},[28,132236,131091],{"class":45},[28,132238,51512],{"class":34},[28,132240,23813],{"class":45},[28,132242,1367],{"class":34},[28,132244,132245],{"class":30,"line":109},[28,132246,1642],{"class":34},[28,132248,132249,132251],{"class":30,"line":125},[28,132250,131106],{"class":2040},[28,132252,15649],{"class":34},[28,132254,132255,132257,132259,132261],{"class":30,"line":131},[28,132256,131091],{"class":45},[28,132258,51512],{"class":34},[28,132260,72597],{"class":45},[28,132262,1367],{"class":34},[28,132264,132265],{"class":30,"line":1291},[28,132266,1642],{"class":34},[353,132268,132269,132277],{},[356,132270,132271],{},[359,132272,132273,132275],{},[362,132274,127075],{"align":23813},[362,132276,27567],{"align":23813},[400,132278,132279,132286,132293],{},[359,132280,132281,132283],{},[405,132282,54812],{"align":23813},[405,132284,132285],{"align":23813},"元素不浮动（默认值）",[359,132287,132288,132290],{},[405,132289,23813],{"align":23813},[405,132291,132292],{"align":23813},"元素向左浮动",[359,132294,132295,132297],{},[405,132296,72597],{"align":23813},[405,132298,132299],{"align":23813},"元素向右浮动",[14,132301,132302],{},"浮动重点：",[1211,132304,132305,132308,132311,132314,132317],{},[174,132306,132307],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[174,132309,132310],{},"浮动的元素会一行内显示并且元素顶部对齐",[174,132312,132313],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[174,132315,132316],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[174,132318,132319],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132321,132322],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132324,132325],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[18,132327,132328],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,132329,132330,132336,132346,132350,132356,132366],{"__ignoreMap":23},[28,132331,132332,132334],{"class":30,"line":31},[28,132333,131084],{"class":2040},[28,132335,15649],{"class":34},[28,132337,132338,132340,132342,132344],{"class":30,"line":94},[28,132339,131091],{"class":45},[28,132341,51512],{"class":34},[28,132343,23813],{"class":45},[28,132345,1367],{"class":34},[28,132347,132348],{"class":30,"line":109},[28,132349,1642],{"class":34},[28,132351,132352,132354],{"class":30,"line":125},[28,132353,131106],{"class":2040},[28,132355,15649],{"class":34},[28,132357,132358,132360,132362,132364],{"class":30,"line":131},[28,132359,131091],{"class":45},[28,132361,51512],{"class":34},[28,132363,72597],{"class":45},[28,132365,1367],{"class":34},[28,132367,132368],{"class":30,"line":1291},[28,132369,1642],{"class":34},[188,132371,132373],{"id":132372},"_1113-定位","11.1.3 定位",[22075,132375,132377],{"id":132376},"_11131-使用场景","11.1.3.1 使用场景",[14,132379,132380],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132382,132383],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22075,132385,132387],{"id":132386},"_11132-定位组成","11.1.3.2 定位组成",[14,132389,132390],{},"定位 = 定位模式 + 边偏移",[171,132392,132393],{},[174,132394,132395,132398,132399],{},[365,132396,132397],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[365,132400,132401],{},"定位模式",[18,132403,132405],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[25,132406,132407,132413,132427,132444,132461],{"__ignoreMap":23},[28,132408,132409,132411],{"class":30,"line":31},[28,132410,130459],{"class":2040},[28,132412,15649],{"class":34},[28,132414,132415,132418,132420,132422,132424],{"class":30,"line":94},[28,132416,132417],{"class":45},"  position",[28,132419,51512],{"class":34},[28,132421,54839],{"class":45},[28,132423,130474],{"class":34},[28,132425,132426],{"class":105},"\u002F* 定位模式 *\u002F\n",[28,132428,132429,132432,132434,132436,132438,132441],{"class":30,"line":109},[28,132430,132431],{"class":45},"  top",[28,132433,51512],{"class":34},[28,132435,659],{"class":45},[28,132437,51567],{"class":38},[28,132439,132440],{"class":34},";           ",[28,132442,132443],{"class":105},"\u002F* 边偏移：上 *\u002F\n",[28,132445,132446,132449,132451,132453,132455,132458],{"class":30,"line":125},[28,132447,132448],{"class":45},"  left",[28,132450,51512],{"class":34},[28,132452,102],{"class":45},[28,132454,51567],{"class":38},[28,132456,132457],{"class":34},";          ",[28,132459,132460],{"class":105},"\u002F* 边偏移：左 *\u002F\n",[28,132462,132463],{"class":30,"line":131},[28,132464,1642],{"class":34},[353,132466,132467,132476],{},[356,132468,132469],{},[359,132470,132471,132473],{},[362,132472,368],{"align":23813},[362,132474,132475],{"align":23813},"语义",[400,132477,132478,132485,132492,132499],{},[359,132479,132480,132482],{},[405,132481,132064],{"align":23813},[405,132483,132484],{"align":23813},"静态定位",[359,132486,132487,132489],{},[405,132488,54839],{"align":23813},[405,132490,132491],{"align":23813},"相对定位",[359,132493,132494,132496],{},[405,132495,54906],{"align":23813},[405,132497,132498],{"align":23813},"绝对定位",[359,132500,132501,132503],{},[405,132502,86308],{"align":23813},[405,132504,132505],{"align":23813},"固定定位",[14,132507,132508],{},"（1）静态定位：",[1211,132510,132511,132522],{},[174,132512,132513,132514,132517,132518,132521],{},"静态定位是元素的 ",[365,132515,132516],{},"默认定位方式"," ， ",[365,132519,132520],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[174,132523,5258],{},[18,132525,132526],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132527,132528,132534,132546,132560,132574],{"__ignoreMap":23},[28,132529,132530,132532],{"class":30,"line":31},[28,132531,130459],{"class":2040},[28,132533,15649],{"class":34},[28,132535,132536,132538,132540,132542,132544],{"class":30,"line":94},[28,132537,132417],{"class":45},[28,132539,51512],{"class":34},[28,132541,54839],{"class":45},[28,132543,130474],{"class":34},[28,132545,132426],{"class":105},[28,132547,132548,132550,132552,132554,132556,132558],{"class":30,"line":109},[28,132549,132431],{"class":45},[28,132551,51512],{"class":34},[28,132553,659],{"class":45},[28,132555,51567],{"class":38},[28,132557,132440],{"class":34},[28,132559,132443],{"class":105},[28,132561,132562,132564,132566,132568,132570,132572],{"class":30,"line":125},[28,132563,132448],{"class":45},[28,132565,51512],{"class":34},[28,132567,102],{"class":45},[28,132569,51567],{"class":38},[28,132571,132457],{"class":34},[28,132573,132460],{"class":105},[28,132575,132576],{"class":30,"line":131},[28,132577,1642],{"class":34},[1211,132579,132580,132583],{},[174,132581,132582],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[174,132584,132585],{},"静态定位在布局时我们几乎不用的",[14,132587,132588],{},"（2）相对定位",[1211,132590,132591,132598],{},[174,132592,132593,132594,132597],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[365,132595,132596],{},"原来的位置"," 来说的（自恋型）",[174,132599,5258],{},[18,132601,132602],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132603,132604,132610,132622,132636,132650],{"__ignoreMap":23},[28,132605,132606,132608],{"class":30,"line":31},[28,132607,130459],{"class":2040},[28,132609,15649],{"class":34},[28,132611,132612,132614,132616,132618,132620],{"class":30,"line":94},[28,132613,132417],{"class":45},[28,132615,51512],{"class":34},[28,132617,54839],{"class":45},[28,132619,130474],{"class":34},[28,132621,132426],{"class":105},[28,132623,132624,132626,132628,132630,132632,132634],{"class":30,"line":109},[28,132625,132431],{"class":45},[28,132627,51512],{"class":34},[28,132629,659],{"class":45},[28,132631,51567],{"class":38},[28,132633,132440],{"class":34},[28,132635,132443],{"class":105},[28,132637,132638,132640,132642,132644,132646,132648],{"class":30,"line":125},[28,132639,132448],{"class":45},[28,132641,51512],{"class":34},[28,132643,102],{"class":45},[28,132645,51567],{"class":38},[28,132647,132457],{"class":34},[28,132649,132460],{"class":105},[28,132651,132652],{"class":30,"line":131},[28,132653,1642],{"class":34},[1211,132655,132656],{},[174,132657,132658,132659,132661,132662,132664,132665,132668,132669,132672,132673,132675,132676,132679],{},"相对定位的特点：",[53791,132660],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53791,132663],{},"  ② ",[365,132666,132667],{},"原来"," 在标准流的 ",[365,132670,132671],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53791,132674],{},"  ③因此， ",[365,132677,132678],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132681,132682],{},"（3）绝对定位",[1211,132684,132685,132694],{},[174,132686,132687,132689,132690,132693],{},[365,132688,132498],{}," 是元素在移动位置的时候，是相对于它 ",[365,132691,132692],{},"祖先元素"," 来说的（拼爹型）",[174,132695,5258],{},[18,132697,132698],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132699,132700,132706,132718,132732,132746],{"__ignoreMap":23},[28,132701,132702,132704],{"class":30,"line":31},[28,132703,130459],{"class":2040},[28,132705,15649],{"class":34},[28,132707,132708,132710,132712,132714,132716],{"class":30,"line":94},[28,132709,132417],{"class":45},[28,132711,51512],{"class":34},[28,132713,54839],{"class":45},[28,132715,130474],{"class":34},[28,132717,132426],{"class":105},[28,132719,132720,132722,132724,132726,132728,132730],{"class":30,"line":109},[28,132721,132431],{"class":45},[28,132723,51512],{"class":34},[28,132725,659],{"class":45},[28,132727,51567],{"class":38},[28,132729,132440],{"class":34},[28,132731,132443],{"class":105},[28,132733,132734,132736,132738,132740,132742,132744],{"class":30,"line":125},[28,132735,132448],{"class":45},[28,132737,51512],{"class":34},[28,132739,102],{"class":45},[28,132741,51567],{"class":38},[28,132743,132457],{"class":34},[28,132745,132460],{"class":105},[28,132747,132748],{"class":30,"line":131},[28,132749,1642],{"class":34},[1211,132751,132752,132767,132776,132779],{},[174,132753,132754,132755,132757,132758,132760,132761,132763,132764,132766],{},"绝对定位的特点：",[53791,132756],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53791,132759],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53791,132762],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53791,132765],{},"  (4)固定定位",[174,132768,132769,132771,132772,132775],{},[365,132770,132505],{}," 是元素 ",[365,132773,132774],{},"固定于浏览器可视区的位置"," 。（认死理型）",[174,132777,132778],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[174,132780,132781],{},"语法:",[18,132783,132784],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132785,132786,132792,132804,132818,132832],{"__ignoreMap":23},[28,132787,132788,132790],{"class":30,"line":31},[28,132789,130459],{"class":2040},[28,132791,15649],{"class":34},[28,132793,132794,132796,132798,132800,132802],{"class":30,"line":94},[28,132795,132417],{"class":45},[28,132797,51512],{"class":34},[28,132799,54839],{"class":45},[28,132801,130474],{"class":34},[28,132803,132426],{"class":105},[28,132805,132806,132808,132810,132812,132814,132816],{"class":30,"line":109},[28,132807,132431],{"class":45},[28,132809,51512],{"class":34},[28,132811,659],{"class":45},[28,132813,51567],{"class":38},[28,132815,132440],{"class":34},[28,132817,132443],{"class":105},[28,132819,132820,132822,132824,132826,132828,132830],{"class":30,"line":125},[28,132821,132448],{"class":45},[28,132823,51512],{"class":34},[28,132825,102],{"class":45},[28,132827,51567],{"class":38},[28,132829,132457],{"class":34},[28,132831,132460],{"class":105},[28,132833,132834],{"class":30,"line":131},[28,132835,1642],{"class":34},[1211,132837,132838,132847],{},[174,132839,132840,132841,132843,132844,132846],{},"特点:",[53791,132842],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53791,132845],{},"  ②固定定位不再占有原先的位置,完全脱标",[174,132848,132849,132850,132852,132853,132855,132856,132858],{},"固定在版心位置的方法:",[53791,132851],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53791,132854],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53791,132857],{},"  实例：",[18,132860,132861],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132862,132863,132869,132881,132895,132909],{"__ignoreMap":23},[28,132864,132865,132867],{"class":30,"line":31},[28,132866,130459],{"class":2040},[28,132868,15649],{"class":34},[28,132870,132871,132873,132875,132877,132879],{"class":30,"line":94},[28,132872,132417],{"class":45},[28,132874,51512],{"class":34},[28,132876,54839],{"class":45},[28,132878,130474],{"class":34},[28,132880,132426],{"class":105},[28,132882,132883,132885,132887,132889,132891,132893],{"class":30,"line":109},[28,132884,132431],{"class":45},[28,132886,51512],{"class":34},[28,132888,659],{"class":45},[28,132890,51567],{"class":38},[28,132892,132440],{"class":34},[28,132894,132443],{"class":105},[28,132896,132897,132899,132901,132903,132905,132907],{"class":30,"line":125},[28,132898,132448],{"class":45},[28,132900,51512],{"class":34},[28,132902,102],{"class":45},[28,132904,51567],{"class":38},[28,132906,132457],{"class":34},[28,132908,132460],{"class":105},[28,132910,132911],{"class":30,"line":131},[28,132912,1642],{"class":34},[1539,132914],{"style":126467,"src":132915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132917,132918],{},"(5)粘性定位",[1211,132920,132921,132924],{},[174,132922,132923],{},"粘性定位可以被认为是相对定位和固定定位的混合",[174,132925,5258],{},[18,132927,132928],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,132929,132930,132936,132948,132962,132976],{"__ignoreMap":23},[28,132931,132932,132934],{"class":30,"line":31},[28,132933,130459],{"class":2040},[28,132935,15649],{"class":34},[28,132937,132938,132940,132942,132944,132946],{"class":30,"line":94},[28,132939,132417],{"class":45},[28,132941,51512],{"class":34},[28,132943,54839],{"class":45},[28,132945,130474],{"class":34},[28,132947,132426],{"class":105},[28,132949,132950,132952,132954,132956,132958,132960],{"class":30,"line":109},[28,132951,132431],{"class":45},[28,132953,51512],{"class":34},[28,132955,659],{"class":45},[28,132957,51567],{"class":38},[28,132959,132440],{"class":34},[28,132961,132443],{"class":105},[28,132963,132964,132966,132968,132970,132972,132974],{"class":30,"line":125},[28,132965,132448],{"class":45},[28,132967,51512],{"class":34},[28,132969,102],{"class":45},[28,132971,51567],{"class":38},[28,132973,132457],{"class":34},[28,132975,132460],{"class":105},[28,132977,132978],{"class":30,"line":131},[28,132979,1642],{"class":34},[1211,132981,132982],{},[174,132983,132984,132985,132987,132988,132990,132991,132993,132994,132997,132998,133000],{},"粘性定位的特点：",[53791,132986],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53791,132989],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53791,132992],{},"  ③必须添加 top 、left、right、bottom ",[365,132995,132996],{},"其中一个"," 才有效",[53791,132999],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[18,133002,133003],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,133004,133005,133011,133023,133037,133051],{"__ignoreMap":23},[28,133006,133007,133009],{"class":30,"line":31},[28,133008,130459],{"class":2040},[28,133010,15649],{"class":34},[28,133012,133013,133015,133017,133019,133021],{"class":30,"line":94},[28,133014,132417],{"class":45},[28,133016,51512],{"class":34},[28,133018,54839],{"class":45},[28,133020,130474],{"class":34},[28,133022,132426],{"class":105},[28,133024,133025,133027,133029,133031,133033,133035],{"class":30,"line":109},[28,133026,132431],{"class":45},[28,133028,51512],{"class":34},[28,133030,659],{"class":45},[28,133032,51567],{"class":38},[28,133034,132440],{"class":34},[28,133036,132443],{"class":105},[28,133038,133039,133041,133043,133045,133047,133049],{"class":30,"line":125},[28,133040,132448],{"class":45},[28,133042,51512],{"class":34},[28,133044,102],{"class":45},[28,133046,51567],{"class":38},[28,133048,132457],{"class":34},[28,133050,132460],{"class":105},[28,133052,133053],{"class":30,"line":131},[28,133054,1642],{"class":34},[1539,133056],{"style":126467,"src":133057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133059,133060],{},"(6)总结",[353,133062,133063,133078],{},[356,133064,133065],{},[359,133066,133067,133069,133072,133075],{},[362,133068,132401],{"align":23813},[362,133070,133071],{"align":23813},"是否脱标",[362,133073,133074],{"align":23813},"移动位置",[362,133076,133077],{"align":23813},"是否常用",[400,133079,133080,133093,133107,133121,133134],{},[359,133081,133082,133085,133087,133090],{},[405,133083,133084],{"align":23813},"Static 静态定位",[405,133086,104737],{"align":23813},[405,133088,133089],{"align":23813},"不能使用边偏移",[405,133091,133092],{"align":23813},"很少",[359,133094,133095,133098,133101,133104],{},[405,133096,133097],{"align":23813},"Relative 相对定位",[405,133099,133100],{"align":23813},"否(占有位置)",[405,133102,133103],{"align":23813},"相对于自身位置移动",[405,133105,133106],{"align":23813},"基本单独使用",[359,133108,133109,133112,133115,133118],{},[405,133110,133111],{"align":23813},"Absolute 绝对定位",[405,133113,133114],{"align":23813},"是(不占有位置)",[405,133116,133117],{"align":23813},"带有定位的父级",[405,133119,133120],{"align":23813},"要和定位父级元素搭配使用",[359,133122,133123,133126,133128,133131],{},[405,133124,133125],{"align":23813},"Fixed 固定定位",[405,133127,133114],{"align":23813},[405,133129,133130],{"align":23813},"浏览器可视区",[405,133132,133133],{"align":23813},"单独使用,不需要父级",[359,133135,133136,133139,133141,133143],{},[405,133137,133138],{"align":23813},"Sticky 粘性定位",[405,133140,133100],{"align":23813},[405,133142,133130],{"align":23813},[405,133144,133145],{"align":23813},"当前阶段少",[171,133147,133148],{"start":94},[174,133149,133150,133153],{},[365,133151,133152],{},"边偏移"," 则决定了该元素的最终位置",[353,133155,133156,133167],{},[356,133157,133158],{},[359,133159,133160,133163,133165],{},[362,133161,133162],{"align":23813},"边偏移属性",[362,133164,27570],{"align":23813},[362,133166,27567],{"align":23813},[400,133168,133169,133180,133191,133201],{},[359,133170,133171,133174,133177],{},[405,133172,133173],{"align":23813},"top",[405,133175,133176],{"align":23813},"top: 80px;",[405,133178,133179],{"align":23813},"顶端偏移量，定义元素相对于父元素上边线的距离",[359,133181,133182,133185,133188],{},[405,133183,133184],{"align":23813},"bottom",[405,133186,133187],{"align":23813},"bottom: 80px ;",[405,133189,133190],{"align":23813},"底部偏移量，定义元素相对于其父元素下边线的距离",[359,133192,133193,133195,133198],{},[405,133194,23813],{"align":23813},[405,133196,133197],{"align":23813},"left: 80px ;",[405,133199,133200],{"align":23813},"左侧偏移量，定义元素相对于其父元素左边线的距离",[359,133202,133203,133205,133208],{},[405,133204,72597],{"align":23813},[405,133206,133207],{"align":23813},"right: 80px ;",[405,133209,133210],{"align":23813},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1211,133212,133213],{},[174,133214,9102,133215,133217,133218,133220,133221,133223,133224,133227,133228,133230,133231,133233],{},[53791,133216],{},"  ① ",[365,133219,133152],{}," 需要和 ",[365,133222,132401],{}," 联合使用， ",[365,133225,133226],{},"单独使用无效"," ；",[53791,133229],{},"  ②top和bottom不要同时使用",[53791,133232],{},"  ③left和right不要同时使用",[22075,133235,133237],{"id":133236},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133239,133240],{},"子级是绝对定位的话，父级要用相对定位",[1211,133242,133243,133246,133249,133252],{},[174,133244,133245],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[174,133247,133248],{},"父盒子需要加定位限制子盒子在父盒子内显示",[174,133250,133251],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[174,133253,133254,133255,133258],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[365,133256,133257],{},"子绝父绝"," 也会遇到",[22075,133260,133262],{"id":133261},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1211,133264,133265,133280],{},[174,133266,133267,133268,133271,133272,133275,133276,133279],{},"在使用 ",[365,133269,133270],{},"定位"," 布局时，可能会 ",[365,133273,133274],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[365,133277,133278],{},"z-index"," 来控制盒子的前后次序 (z轴)",[174,133281,5258],{},[18,133283,133284],{"className":126611,"code":132404,"language":126613,"meta":23,"style":23},[25,133285,133286,133292,133304,133318,133332],{"__ignoreMap":23},[28,133287,133288,133290],{"class":30,"line":31},[28,133289,130459],{"class":2040},[28,133291,15649],{"class":34},[28,133293,133294,133296,133298,133300,133302],{"class":30,"line":94},[28,133295,132417],{"class":45},[28,133297,51512],{"class":34},[28,133299,54839],{"class":45},[28,133301,130474],{"class":34},[28,133303,132426],{"class":105},[28,133305,133306,133308,133310,133312,133314,133316],{"class":30,"line":109},[28,133307,132431],{"class":45},[28,133309,51512],{"class":34},[28,133311,659],{"class":45},[28,133313,51567],{"class":38},[28,133315,132440],{"class":34},[28,133317,132443],{"class":105},[28,133319,133320,133322,133324,133326,133328,133330],{"class":30,"line":125},[28,133321,132448],{"class":45},[28,133323,51512],{"class":34},[28,133325,102],{"class":45},[28,133327,51567],{"class":38},[28,133329,132457],{"class":34},[28,133331,132460],{"class":105},[28,133333,133334],{"class":30,"line":131},[28,133335,1642],{"class":34},[1211,133337,133338],{},[174,133339,133340,133341,133217,133343,133345,133346,127774,133349,82614,133352,133354,133355,133357,133358,133361,133362,133227,133365,133367,133368,133371,133373],{},"z-index的特性",[53791,133342],{},[365,133344,127075],{}," ： ",[365,133347,133348],{},"正整数",[365,133350,133351],{},"负整数",[365,133353,407],{}," ，默认值是 0，数值越大，盒子越靠上；",[53791,133356],{},"  ②如果 ",[365,133359,133360],{},"属性值相同"," ，则按照书写顺序， ",[365,133363,133364],{},"后来居上",[53791,133366],{},"  ③数字后面 ",[365,133369,133370],{},"不能加单位",[53791,133372],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22075,133375,133377],{"id":133376},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133379,133380],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133382,133383],{},"方法:",[1211,133385,133386,133396],{},[174,133387,133388,133389,133392,133393],{},"left: 50%; 让 ",[365,133390,133391],{},"盒子的左侧"," 移动到 ",[365,133394,133395],{},"父级元素的水平中心位置",[174,133397,133398,133399,133402,133403],{},"margin-left: -100px; 让盒子 ",[365,133400,133401],{},"向左"," 移动 ",[365,133404,133405],{},"自身宽度的一半",[22075,133407,133409],{"id":133408},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[171,133411,133412,133415],{},[174,133413,133414],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[174,133416,133417],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133419,133420],{},"也就是说绝对定位和固定定位和浮动类似",[171,133422,133423],{"start":109},[174,133424,133425],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1211,133427,133428,133431,133434],{},[174,133429,133430],{},"可以用inline-block 转换为行内块",[174,133432,133433],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[174,133435,133436],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133438,133439],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22075,133441,133443],{"id":133442},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[171,133445,133446,133449,133452,133455],{},[174,133447,133448],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[174,133450,133451],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[174,133453,133454],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[174,133456,133457],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[18,133459,133460],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,133461,133462,133468,133478,133482,133488,133498],{"__ignoreMap":23},[28,133463,133464,133466],{"class":30,"line":31},[28,133465,131084],{"class":2040},[28,133467,15649],{"class":34},[28,133469,133470,133472,133474,133476],{"class":30,"line":94},[28,133471,131091],{"class":45},[28,133473,51512],{"class":34},[28,133475,23813],{"class":45},[28,133477,1367],{"class":34},[28,133479,133480],{"class":30,"line":109},[28,133481,1642],{"class":34},[28,133483,133484,133486],{"class":30,"line":125},[28,133485,131106],{"class":2040},[28,133487,15649],{"class":34},[28,133489,133490,133492,133494,133496],{"class":30,"line":131},[28,133491,131091],{"class":45},[28,133493,51512],{"class":34},[28,133495,72597],{"class":45},[28,133497,1367],{"class":34},[28,133499,133500],{"class":30,"line":1291},[28,133501,1642],{"class":34},[1539,133503],{"style":126467,"src":133504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22075,133506,133508],{"id":133507},"_11138-轮播图","11.1.3.8 轮播图",[1539,133510],{"style":126467,"src":133511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[171,133513,133514],{},[174,133515,133516],{},"制作顺序:",[1211,133518,133519,133522,133525,133534],{},[174,133520,133521],{},"大盒子我们类名为： tb-promo 淘宝广告",[174,133523,133524],{},"里面先放一张图片",[174,133526,133527,133528,133530,133531,133533],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53791,133529],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53791,133532],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[174,133535,133536,133537,133539,133540,133542],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53791,133538],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53791,133541],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[171,133544,133545],{"start":94},[174,133546,133547],{},"代码模块",[18,133549,133551],{"className":126611,"code":133550,"language":126613,"meta":23,"style":23},"\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",[25,133552,133553,133558,133565,133575,133585,133595,133599,133604,133611,133621],{"__ignoreMap":23},[28,133554,133555],{"class":30,"line":31},[28,133556,133557],{"class":105},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[28,133559,133560,133563],{"class":30,"line":94},[28,133561,133562],{"class":2040},".son",[28,133564,15649],{"class":34},[28,133566,133567,133569,133571,133573],{"class":30,"line":109},[28,133568,132417],{"class":45},[28,133570,51512],{"class":34},[28,133572,54906],{"class":45},[28,133574,1367],{"class":34},[28,133576,133577,133579,133581,133583],{"class":30,"line":125},[28,133578,132431],{"class":45},[28,133580,51512],{"class":34},[28,133582,407],{"class":45},[28,133584,1367],{"class":34},[28,133586,133587,133589,133591,133593],{"class":30,"line":131},[28,133588,132448],{"class":45},[28,133590,51512],{"class":34},[28,133592,407],{"class":45},[28,133594,1367],{"class":34},[28,133596,133597],{"class":30,"line":1291},[28,133598,1642],{"class":34},[28,133600,133601],{"class":30,"line":1297},[28,133602,133603],{"class":105},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[28,133605,133606,133609],{"class":30,"line":1388},[28,133607,133608],{"class":2040},".father",[28,133610,15649],{"class":34},[28,133612,133613,133615,133617,133619],{"class":30,"line":1394},[28,133614,132417],{"class":45},[28,133616,51512],{"class":34},[28,133618,54839],{"class":45},[28,133620,1367],{"class":34},[28,133622,133623],{"class":30,"line":1406},[28,133624,1642],{"class":34},[14,133626,133627],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[188,133629,133631],{"id":133630},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1539,133633],{"style":126467,"src":133634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133636,133637],{},"✨ 黄金口诀：",[14,133639,133640],{},"\"TOP正下负上，LEFT正右负左\"",[14,133642,133643],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133645,133646],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133648,133649],{},"✨ 简单记：",[14,133651,133652],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[136,133654,133655],{},"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":23,"searchDepth":94,"depth":94,"links":133657},[133658],{"id":132185,"depth":94,"text":132186,"children":133659},[133660,133661,133662,133663],{"id":132189,"depth":109,"text":132190},{"id":132204,"depth":109,"text":132205},{"id":132372,"depth":109,"text":132373},{"id":133630,"depth":109,"text":133631},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132177,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133670,"title":133671,"body":133672,"description":141,"extension":142,"meta":135095,"navigation":144,"path":135096,"seo":135097,"stem":135098,"__hash__":135099},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133673,"toc":135074},[133674,133677,133681,133689,133693,133698,133706,133718,133722,133727,133735,133746,133750,133755,133796,133804,133808,133811,133814,133817,133911,133914,134008,134011,134105,134108,134111,134146,134149,134152,134182,134185,134188,134191,134194,134197,134200,134203,134273,134276,134280,134284,134325,134329,134335,134338,134341,134345,134348,134351,134354,134435,134438,134441,134445,134449,134452,134455,134458,134461,134464,134470,134479,134483,134502,134506,134516,134519,134522,134525,134528,134531,134534,134537,134540,134549,134553,134562,134565,134570,134623,134628,134794,134797,134800,134805,134808,134811,134814,134817,134822,134970,134973,134976,134981,134984,134989,135023,135026,135029,135033,135036,135043,135046,135049,135052,135055,135058,135061,135064,135068,135071],[10,133675,133671],{"id":133676},"_12-显示隐藏与图形资源",[159,133678,133680],{"id":133679},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1211,133682,133683,133686],{},[174,133684,133685],{},"目的:让一个元素在页面中消失或者显示出来",[174,133687,133688],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[188,133690,133692],{"id":133691},"_1211-display-显示","12.1.1 display 显示",[171,133694,133695],{},[174,133696,133697],{},"display 设置或检索对象是否及如何显示",[1211,133699,133700,133703],{},[174,133701,133702],{},"display: none;隐藏对象",[174,133704,133705],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[171,133707,133708,133715],{"start":94},[174,133709,133710,133711,133714],{},"特点： display 隐藏元素后， ",[365,133712,133713],{},"不再占"," 有原来的位置",[174,133716,133717],{},"在js中使用非常的广泛",[188,133719,133721],{"id":133720},"_1212-visibility可见性","12.1.2 visibility可见性",[171,133723,133724],{},[174,133725,133726],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1211,133728,133729,133732],{},[174,133730,133731],{},"visibility： visible；元素可见",[174,133733,133734],{},"visibility：hidden；元素隐藏",[171,133736,133737,133740,133743],{"start":94},[174,133738,133739],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[174,133741,133742],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[174,133744,133745],{},"隐藏后继续占有原有位置",[188,133747,133749],{"id":133748},"_1213-overflow溢出","12.1.3 overflow溢出",[1211,133751,133752],{},[174,133753,133754],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[353,133756,133757,133765],{},[356,133758,133759],{},[359,133760,133761,133763],{},[362,133762,127075],{"align":23813},[362,133764,27567],{"align":23813},[400,133766,133767,133775,133782,133789],{},[359,133768,133769,133772],{},[405,133770,133771],{"align":23813},"visible",[405,133773,133774],{"align":23813},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[359,133776,133777,133779],{},[405,133778,61789],{"align":23813},[405,133780,133781],{"align":23813},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[359,133783,133784,133786],{},[405,133785,129031],{"align":23813},[405,133787,133788],{"align":23813},"不管超出内容否，总是显示滚动条",[359,133790,133791,133793],{},[405,133792,72738],{"align":23813},[405,133794,133795],{"align":23813},"超出自动显示滚动条，不超出不显示滚动条",[1211,133797,133798,133801],{},[174,133799,133800],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[174,133802,133803],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[188,133805,133807],{"id":133806},"_1214-案例收获","12.1.4 案例收获",[1539,133809],{"style":126467,"src":133810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133812,133813],{},"问题：没做出来动态效果，使用hover没实现",[14,133815,133816],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[18,133818,133819],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,133820,133821,133825,133839,133843,133857,133861,133875,133879,133893,133897],{"__ignoreMap":23},[28,133822,133823],{"class":30,"line":31},[28,133824,132050],{"class":105},[28,133826,133827,133829,133831,133833,133835,133837],{"class":30,"line":94},[28,133828,132055],{"class":2040},[28,133830,79882],{"class":34},[28,133832,128971],{"class":45},[28,133834,51512],{"class":34},[28,133836,132064],{"class":45},[28,133838,129541],{"class":34},[28,133840,133841],{"class":30,"line":109},[28,133842,132071],{"class":105},[28,133844,133845,133847,133849,133851,133853,133855],{"class":30,"line":125},[28,133846,132076],{"class":2040},[28,133848,79882],{"class":34},[28,133850,128971],{"class":45},[28,133852,51512],{"class":34},[28,133854,54839],{"class":45},[28,133856,129541],{"class":34},[28,133858,133859],{"class":30,"line":131},[28,133860,132091],{"class":105},[28,133862,133863,133865,133867,133869,133871,133873],{"class":30,"line":1291},[28,133864,132096],{"class":2040},[28,133866,79882],{"class":34},[28,133868,128971],{"class":45},[28,133870,51512],{"class":34},[28,133872,54906],{"class":45},[28,133874,129541],{"class":34},[28,133876,133877],{"class":30,"line":1297},[28,133878,132111],{"class":105},[28,133880,133881,133883,133885,133887,133889,133891],{"class":30,"line":1388},[28,133882,132116],{"class":2040},[28,133884,79882],{"class":34},[28,133886,128971],{"class":45},[28,133888,51512],{"class":34},[28,133890,86308],{"class":45},[28,133892,129541],{"class":34},[28,133894,133895],{"class":30,"line":1394},[28,133896,132131],{"class":105},[28,133898,133899,133901,133903,133905,133907,133909],{"class":30,"line":1406},[28,133900,132136],{"class":2040},[28,133902,79882],{"class":34},[28,133904,128971],{"class":45},[28,133906,51512],{"class":34},[28,133908,132145],{"class":45},[28,133910,129541],{"class":34},[14,133912,133913],{},"完整代码：",[18,133915,133916],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,133917,133918,133922,133936,133940,133954,133958,133972,133976,133990,133994],{"__ignoreMap":23},[28,133919,133920],{"class":30,"line":31},[28,133921,132050],{"class":105},[28,133923,133924,133926,133928,133930,133932,133934],{"class":30,"line":94},[28,133925,132055],{"class":2040},[28,133927,79882],{"class":34},[28,133929,128971],{"class":45},[28,133931,51512],{"class":34},[28,133933,132064],{"class":45},[28,133935,129541],{"class":34},[28,133937,133938],{"class":30,"line":109},[28,133939,132071],{"class":105},[28,133941,133942,133944,133946,133948,133950,133952],{"class":30,"line":125},[28,133943,132076],{"class":2040},[28,133945,79882],{"class":34},[28,133947,128971],{"class":45},[28,133949,51512],{"class":34},[28,133951,54839],{"class":45},[28,133953,129541],{"class":34},[28,133955,133956],{"class":30,"line":131},[28,133957,132091],{"class":105},[28,133959,133960,133962,133964,133966,133968,133970],{"class":30,"line":1291},[28,133961,132096],{"class":2040},[28,133963,79882],{"class":34},[28,133965,128971],{"class":45},[28,133967,51512],{"class":34},[28,133969,54906],{"class":45},[28,133971,129541],{"class":34},[28,133973,133974],{"class":30,"line":1297},[28,133975,132111],{"class":105},[28,133977,133978,133980,133982,133984,133986,133988],{"class":30,"line":1388},[28,133979,132116],{"class":2040},[28,133981,79882],{"class":34},[28,133983,128971],{"class":45},[28,133985,51512],{"class":34},[28,133987,86308],{"class":45},[28,133989,129541],{"class":34},[28,133991,133992],{"class":30,"line":1394},[28,133993,132131],{"class":105},[28,133995,133996,133998,134000,134002,134004,134006],{"class":30,"line":1406},[28,133997,132136],{"class":2040},[28,133999,79882],{"class":34},[28,134001,128971],{"class":45},[28,134003,51512],{"class":34},[28,134005,132145],{"class":45},[28,134007,129541],{"class":34},[14,134009,134010],{},"分布思路重点详解：",[18,134012,134013],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,134014,134015,134019,134033,134037,134051,134055,134069,134073,134087,134091],{"__ignoreMap":23},[28,134016,134017],{"class":30,"line":31},[28,134018,132050],{"class":105},[28,134020,134021,134023,134025,134027,134029,134031],{"class":30,"line":94},[28,134022,132055],{"class":2040},[28,134024,79882],{"class":34},[28,134026,128971],{"class":45},[28,134028,51512],{"class":34},[28,134030,132064],{"class":45},[28,134032,129541],{"class":34},[28,134034,134035],{"class":30,"line":109},[28,134036,132071],{"class":105},[28,134038,134039,134041,134043,134045,134047,134049],{"class":30,"line":125},[28,134040,132076],{"class":2040},[28,134042,79882],{"class":34},[28,134044,128971],{"class":45},[28,134046,51512],{"class":34},[28,134048,54839],{"class":45},[28,134050,129541],{"class":34},[28,134052,134053],{"class":30,"line":131},[28,134054,132091],{"class":105},[28,134056,134057,134059,134061,134063,134065,134067],{"class":30,"line":1291},[28,134058,132096],{"class":2040},[28,134060,79882],{"class":34},[28,134062,128971],{"class":45},[28,134064,51512],{"class":34},[28,134066,54906],{"class":45},[28,134068,129541],{"class":34},[28,134070,134071],{"class":30,"line":1297},[28,134072,132111],{"class":105},[28,134074,134075,134077,134079,134081,134083,134085],{"class":30,"line":1388},[28,134076,132116],{"class":2040},[28,134078,79882],{"class":34},[28,134080,128971],{"class":45},[28,134082,51512],{"class":34},[28,134084,86308],{"class":45},[28,134086,129541],{"class":34},[28,134088,134089],{"class":30,"line":1394},[28,134090,132131],{"class":105},[28,134092,134093,134095,134097,134099,134101,134103],{"class":30,"line":1406},[28,134094,132136],{"class":2040},[28,134096,79882],{"class":34},[28,134098,128971],{"class":45},[28,134100,51512],{"class":34},[28,134102,132145],{"class":45},[28,134104,129541],{"class":34},[1539,134106],{"style":126467,"src":134107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134109,134110],{},"图片太大，盒子太小，此时需要修改图片的大小",[18,134112,134114],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[25,134115,134116],{"__ignoreMap":23},[28,134117,134118,134120,134122,134124,134126,134129,134131,134133,134136,134139,134141,134144],{"class":30,"line":31},[28,134119,99],{"class":34},[28,134121,1539],{"class":51375},[28,134123,55314],{"class":2040},[28,134125,39],{"class":34},[28,134127,134128],{"class":320},"\"images\u002Fpic.jpg\"",[28,134130,55322],{"class":2040},[28,134132,39],{"class":34},[28,134134,134135],{"class":320},"\"描述文字\"",[28,134137,134138],{"class":2040}," title",[28,134140,39],{"class":34},[28,134142,134143],{"class":320},"\"悬停提示\"",[28,134145,51382],{"class":34},[1539,134147],{"style":126467,"src":134148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134150,134151],{},"制造遮罩层",[18,134153,134154],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,134155,134156],{"__ignoreMap":23},[28,134157,134158,134160,134162,134164,134166,134168,134170,134172,134174,134176,134178,134180],{"class":30,"line":31},[28,134159,99],{"class":34},[28,134161,1539],{"class":51375},[28,134163,55314],{"class":2040},[28,134165,39],{"class":34},[28,134167,134128],{"class":320},[28,134169,55322],{"class":2040},[28,134171,39],{"class":34},[28,134173,134135],{"class":320},[28,134175,134138],{"class":2040},[28,134177,39],{"class":34},[28,134179,134143],{"class":320},[28,134181,51382],{"class":34},[14,134183,134184],{},"此时是这样的为标准流",[1539,134186],{"style":126467,"src":134187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134189,134190],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134192,134193],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134195,134196],{},"让他在中间，用center(background-position)",[14,134198,134199],{},"将需要变的尽可能放到一个盒子中",[14,134201,134202],{},"放大盒子上内部盒子发生变化",[18,134204,134206],{"className":126611,"code":134205,"language":126613,"meta":23,"style":23},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[25,134207,134208,134214,134224,134228,134235,134245,134257,134269],{"__ignoreMap":23},[28,134209,134210,134212],{"class":30,"line":31},[28,134211,127678],{"class":2040},[28,134213,15649],{"class":34},[28,134215,134216,134218,134220,134222],{"class":30,"line":94},[28,134217,132417],{"class":45},[28,134219,51512],{"class":34},[28,134221,54839],{"class":45},[28,134223,1367],{"class":34},[28,134225,134226],{"class":30,"line":109},[28,134227,1642],{"class":34},[28,134229,134230,134233],{"class":30,"line":125},[28,134231,134232],{"class":2040},".child",[28,134234,15649],{"class":34},[28,134236,134237,134239,134241,134243],{"class":30,"line":131},[28,134238,132417],{"class":45},[28,134240,51512],{"class":34},[28,134242,54906],{"class":45},[28,134244,1367],{"class":34},[28,134246,134247,134249,134251,134253,134255],{"class":30,"line":1291},[28,134248,132431],{"class":45},[28,134250,51512],{"class":34},[28,134252,866],{"class":45},[28,134254,542],{"class":38},[28,134256,1367],{"class":34},[28,134258,134259,134261,134263,134265,134267],{"class":30,"line":1297},[28,134260,132448],{"class":45},[28,134262,51512],{"class":34},[28,134264,866],{"class":45},[28,134266,542],{"class":38},[28,134268,1367],{"class":34},[28,134270,134271],{"class":30,"line":1388},[28,134272,1642],{"class":34},[14,134274,134275],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[159,134277,134279],{"id":134278},"_122-精灵图","12.2 精灵图",[188,134281,134283],{"id":134282},"_1221-理解","12.2.1 理解",[171,134285,134286,134304],{},[174,134287,134288,134289,132517,134292,134295,134296,134299,134300,134303],{},"目的： ",[365,134290,134291],{},"为了有效地减少服务器接收和发送请求的次数",[365,134293,134294],{},"提高"," 页面的 ",[365,134297,134298],{},"加载速度"," ，出现了 ",[365,134301,134302],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[174,134305,134306,134307,134309,134310,134312,134313,134315,134316,134318,134319,134321,134322,134324],{},"使用精灵图核心：",[53791,134308],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53791,134311],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53791,134314],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53791,134317],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53791,134320],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53791,134323],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[188,134326,134328],{"id":134327},"_1222-扒图","12.2.2 扒图",[18,134330,134333],{"className":134331,"code":134332,"language":5264},[5262],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[25,134334,134332],{"__ignoreMap":23},[1539,134336],{"style":126467,"src":134337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1539,134339],{"style":126467,"src":134340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[188,134342,134344],{"id":134343},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1539,134346],{"style":126467,"src":134347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134349,134350],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1539,134352],{"style":126467,"src":134353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[18,134355,134357],{"className":126611,"code":134356,"language":126613,"meta":23,"style":23},"\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",[25,134358,134359,134364,134371,134383,134395,134414,134431],{"__ignoreMap":23},[28,134360,134361],{"class":30,"line":31},[28,134362,134363],{"class":105},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[28,134365,134366,134369],{"class":30,"line":94},[28,134367,134368],{"class":2040},".icon",[28,134370,15649],{"class":34},[28,134372,134373,134375,134377,134379,134381],{"class":30,"line":109},[28,134374,70643],{"class":45},[28,134376,51512],{"class":34},[28,134378,102],{"class":45},[28,134380,51567],{"class":38},[28,134382,1367],{"class":34},[28,134384,134385,134387,134389,134391,134393],{"class":30,"line":125},[28,134386,70863],{"class":45},[28,134388,51512],{"class":34},[28,134390,102],{"class":45},[28,134392,51567],{"class":38},[28,134394,1367],{"class":34},[28,134396,134397,134399,134401,134403,134405,134408,134410,134412],{"class":30,"line":131},[28,134398,70686],{"class":45},[28,134400,51512],{"class":34},[28,134402,61801],{"class":45},[28,134404,221],{"class":34},[28,134406,134407],{"class":5293},"sprites.png",[28,134409,13791],{"class":34},[28,134411,61811],{"class":45},[28,134413,1367],{"class":34},[28,134415,134416,134418,134420,134422,134424,134427,134429],{"class":30,"line":1291},[28,134417,128871],{"class":45},[28,134419,51512],{"class":34},[28,134421,51838],{"class":45},[28,134423,51567],{"class":38},[28,134425,134426],{"class":45}," -20",[28,134428,51567],{"class":38},[28,134430,1367],{"class":34},[28,134432,134433],{"class":30,"line":1297},[28,134434,1642],{"class":34},[1539,134436],{"style":126467,"src":134437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134439,134440],{},"在前端中坐标轴的正方向是右和下",[159,134442,134444],{"id":134443},"_123-字体图标","12.3 字体图标",[188,134446,134448],{"id":134447},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134450,134451],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134453,134454],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134456,134457],{},"1.图片文件还是比较大的。",[14,134459,134460],{},"2.图片本身放大和缩小会失真。",[14,134462,134463],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134465,134466,134467,25818],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[365,134468,134469],{},"字体图标 iconfont",[14,134471,134472,134475,134476,28463],{},[365,134473,134474],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[365,134477,134478],{},"展示的是图标，本质属于字体",[188,134480,134482],{"id":134481},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1211,134484,134485,134490,134493,134496,134499],{},[174,134486,134487,134489],{},[365,134488,25954],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[174,134491,134492],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[174,134494,134495],{},"兼容性：几乎支持所有的浏览器，请放心使用",[174,134497,134498],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[174,134500,134501],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[188,134503,134505],{"id":134504},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1211,134507,134508],{},[174,134509,134510,134511],{},"icomoon字体库：",[35,134512,134515],{"href":134513,"rel":134514},"http:\u002F\u002Ficomoon.io\u002F",[23942],"http:\u002F\u002Ficomoon.io",[14,134517,134518],{},"进去之后点icomoon app",[1539,134520],{"style":126467,"src":134521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134523,134524],{},"可以对其编辑：",[1539,134526],{"style":126467,"src":134527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134529,134530],{},"生成字体：",[1539,134532],{"style":126467,"src":134533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134535,134536],{},"下载：",[1539,134538],{"style":126467,"src":134539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1211,134541,134542],{},[174,134543,134544,134545],{},"阿里iconfont字体库： ",[35,134546,134547],{"href":134547,"rel":134548},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23942],[188,134550,134552],{"id":134551},"_1234-字体图标的引入","12.3.4 字体图标的引入",[171,134554,134555],{},[174,134556,134557,134558,134561],{},"把下载包里面的 ",[365,134559,134560],{},"fonts"," 文件夹放入页面根目录下",[1539,134563],{"style":126467,"src":134564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[171,134566,134567],{"start":94},[174,134568,134569],{},"字体文件格式",[353,134571,134572,134581],{},[356,134573,134574],{},[359,134575,134576,134579],{},[362,134577,134578],{"align":23813},"格式",[362,134580,23817],{"align":23813},[400,134582,134583,134593,134603,134613],{},[359,134584,134585,134590],{},[405,134586,134587],{"align":23813},[365,134588,134589],{},".ttf",[405,134591,134592],{"align":23813},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[359,134594,134595,134600],{},[405,134596,134597],{"align":23813},[365,134598,134599],{},".woff",[405,134601,134602],{"align":23813},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[359,134604,134605,134610],{},[405,134606,134607],{"align":23813},[365,134608,134609],{},".eot",[405,134611,134612],{"align":23813},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[359,134614,134615,134620],{},[405,134616,134617],{"align":23813},[365,134618,134619],{},"svg",[405,134621,134622],{"align":23813},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[171,134624,134625],{"start":109},[174,134626,134627],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[18,134629,134631],{"className":126611,"code":134630,"language":126613,"meta":23,"style":23},"\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",[25,134632,134633,134638,134645,134657,134673,134698,134719,134739,134759,134763,134769,134779,134790],{"__ignoreMap":23},[28,134634,134635],{"class":30,"line":31},[28,134636,134637],{"class":105},"\u002F* 引入字体图标 *\u002F\n",[28,134639,134640,134643],{"class":30,"line":94},[28,134641,134642],{"class":38},"@font-face",[28,134644,15649],{"class":34},[28,134646,134647,134650,134652,134655],{"class":30,"line":109},[28,134648,134649],{"class":45},"  font-family",[28,134651,51512],{"class":34},[28,134653,134654],{"class":320},"'icomoon'",[28,134656,1367],{"class":34},[28,134658,134659,134662,134664,134666,134668,134671],{"class":30,"line":125},[28,134660,134661],{"class":45},"  src",[28,134663,51512],{"class":34},[28,134665,61801],{"class":45},[28,134667,221],{"class":34},[28,134669,134670],{"class":320},"'fonts\u002Ficomoon.eot'",[28,134672,2796],{"class":34},[28,134674,134675,134677,134679,134681,134683,134686,134688,134691,134693,134696],{"class":30,"line":131},[28,134676,134661],{"class":45},[28,134678,51512],{"class":34},[28,134680,61801],{"class":45},[28,134682,221],{"class":34},[28,134684,134685],{"class":320},"'fonts\u002Ficomoon.eot?#iefix'",[28,134687,13791],{"class":34},[28,134689,134690],{"class":45},"format",[28,134692,221],{"class":34},[28,134694,134695],{"class":320},"'embedded-opentype'",[28,134697,38123],{"class":34},[28,134699,134700,134703,134705,134708,134710,134712,134714,134717],{"class":30,"line":1291},[28,134701,134702],{"class":45},"       url",[28,134704,221],{"class":34},[28,134706,134707],{"class":320},"'fonts\u002Ficomoon.woff'",[28,134709,13791],{"class":34},[28,134711,134690],{"class":45},[28,134713,221],{"class":34},[28,134715,134716],{"class":320},"'woff'",[28,134718,38123],{"class":34},[28,134720,134721,134723,134725,134728,134730,134732,134734,134737],{"class":30,"line":1297},[28,134722,134702],{"class":45},[28,134724,221],{"class":34},[28,134726,134727],{"class":320},"'fonts\u002Ficomoon.ttf'",[28,134729,13791],{"class":34},[28,134731,134690],{"class":45},[28,134733,221],{"class":34},[28,134735,134736],{"class":320},"'truetype'",[28,134738,38123],{"class":34},[28,134740,134741,134743,134745,134748,134750,134752,134754,134757],{"class":30,"line":1388},[28,134742,134702],{"class":45},[28,134744,221],{"class":34},[28,134746,134747],{"class":320},"'fonts\u002Ficomoon.svg#icomoon'",[28,134749,13791],{"class":34},[28,134751,134690],{"class":45},[28,134753,221],{"class":34},[28,134755,134756],{"class":320},"'svg'",[28,134758,2796],{"class":34},[28,134760,134761],{"class":30,"line":1394},[28,134762,1642],{"class":34},[28,134764,134765,134767],{"class":30,"line":1406},[28,134766,134368],{"class":2040},[28,134768,15649],{"class":34},[28,134770,134771,134773,134775,134777],{"class":30,"line":1689},[28,134772,134649],{"class":45},[28,134774,51512],{"class":34},[28,134776,134654],{"class":320},[28,134778,1367],{"class":34},[28,134780,134781,134784,134786,134788],{"class":30,"line":1694},[28,134782,134783],{"class":45},"  font-style",[28,134785,51512],{"class":34},[28,134787,63916],{"class":45},[28,134789,1367],{"class":34},[28,134791,134792],{"class":30,"line":1700},[28,134793,1642],{"class":34},[14,134795,134796],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1539,134798],{"style":126467,"src":134799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[171,134801,134802],{"start":125},[174,134803,134804],{},"添加字体",[1539,134806],{"style":126467,"src":134807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134809,134810],{},"复制：",[1539,134812],{"style":126467,"src":134813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134815,134816],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[171,134818,134819],{"start":131},[174,134820,134821],{},"代码展示：",[18,134823,134824],{"className":126611,"code":134630,"language":126613,"meta":23,"style":23},[25,134825,134826,134830,134836,134846,134860,134882,134900,134918,134936,134940,134946,134956,134966],{"__ignoreMap":23},[28,134827,134828],{"class":30,"line":31},[28,134829,134637],{"class":105},[28,134831,134832,134834],{"class":30,"line":94},[28,134833,134642],{"class":38},[28,134835,15649],{"class":34},[28,134837,134838,134840,134842,134844],{"class":30,"line":109},[28,134839,134649],{"class":45},[28,134841,51512],{"class":34},[28,134843,134654],{"class":320},[28,134845,1367],{"class":34},[28,134847,134848,134850,134852,134854,134856,134858],{"class":30,"line":125},[28,134849,134661],{"class":45},[28,134851,51512],{"class":34},[28,134853,61801],{"class":45},[28,134855,221],{"class":34},[28,134857,134670],{"class":320},[28,134859,2796],{"class":34},[28,134861,134862,134864,134866,134868,134870,134872,134874,134876,134878,134880],{"class":30,"line":131},[28,134863,134661],{"class":45},[28,134865,51512],{"class":34},[28,134867,61801],{"class":45},[28,134869,221],{"class":34},[28,134871,134685],{"class":320},[28,134873,13791],{"class":34},[28,134875,134690],{"class":45},[28,134877,221],{"class":34},[28,134879,134695],{"class":320},[28,134881,38123],{"class":34},[28,134883,134884,134886,134888,134890,134892,134894,134896,134898],{"class":30,"line":1291},[28,134885,134702],{"class":45},[28,134887,221],{"class":34},[28,134889,134707],{"class":320},[28,134891,13791],{"class":34},[28,134893,134690],{"class":45},[28,134895,221],{"class":34},[28,134897,134716],{"class":320},[28,134899,38123],{"class":34},[28,134901,134902,134904,134906,134908,134910,134912,134914,134916],{"class":30,"line":1297},[28,134903,134702],{"class":45},[28,134905,221],{"class":34},[28,134907,134727],{"class":320},[28,134909,13791],{"class":34},[28,134911,134690],{"class":45},[28,134913,221],{"class":34},[28,134915,134736],{"class":320},[28,134917,38123],{"class":34},[28,134919,134920,134922,134924,134926,134928,134930,134932,134934],{"class":30,"line":1388},[28,134921,134702],{"class":45},[28,134923,221],{"class":34},[28,134925,134747],{"class":320},[28,134927,13791],{"class":34},[28,134929,134690],{"class":45},[28,134931,221],{"class":34},[28,134933,134756],{"class":320},[28,134935,2796],{"class":34},[28,134937,134938],{"class":30,"line":1394},[28,134939,1642],{"class":34},[28,134941,134942,134944],{"class":30,"line":1406},[28,134943,134368],{"class":2040},[28,134945,15649],{"class":34},[28,134947,134948,134950,134952,134954],{"class":30,"line":1689},[28,134949,134649],{"class":45},[28,134951,51512],{"class":34},[28,134953,134654],{"class":320},[28,134955,1367],{"class":34},[28,134957,134958,134960,134962,134964],{"class":30,"line":1694},[28,134959,134783],{"class":45},[28,134961,51512],{"class":34},[28,134963,63916],{"class":45},[28,134965,1367],{"class":34},[28,134967,134968],{"class":30,"line":1700},[28,134969,1642],{"class":34},[1539,134971],{"style":126467,"src":134972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134974,134975],{},"更加细节展示：",[171,134977,134978],{},[174,134979,134980],{},"html 标签内添加小图标",[1539,134982],{"style":126467,"src":134983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[171,134985,134986],{"start":94},[174,134987,134988],{},"给标签定义字体",[18,134990,134991],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,134992,134993,134997,135011,135015],{"__ignoreMap":23},[28,134994,134995],{"class":30,"line":31},[28,134996,130722],{"class":105},[28,134998,134999,135001,135003,135005,135007,135009],{"class":30,"line":94},[28,135000,99],{"class":34},[28,135002,51686],{"class":51375},[28,135004,53561],{"class":2040},[28,135006,39],{"class":34},[28,135008,130735],{"class":320},[28,135010,51382],{"class":34},[28,135012,135013],{"class":30,"line":109},[28,135014,130742],{"class":34},[28,135016,135017,135019,135021],{"class":30,"line":125},[28,135018,51860],{"class":34},[28,135020,51686],{"class":51375},[28,135022,51382],{"class":34},[14,135024,135025],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1539,135027],{"style":126467,"src":135028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[188,135030,135032],{"id":135031},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135034,135035],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135037,135038,135039,135042],{},"把压缩包里面的 ",[365,135040,135041],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135044,135045],{},"打开网站，点下方：",[1539,135047],{"style":126467,"src":135048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1539,135050],{"style":126467,"src":135051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1539,135053],{"style":126467,"src":135054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135056,135057],{},"点yes重新加载",[14,135059,135060],{},"然后重复之前的操作就可以实现了",[14,135062,135063],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[188,135065,135067],{"id":135066},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1539,135069],{"style":126467,"src":135070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[136,135072,135073],{},"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":23,"searchDepth":94,"depth":94,"links":135075},[135076,135082,135087],{"id":133679,"depth":94,"text":133680,"children":135077},[135078,135079,135080,135081],{"id":133691,"depth":109,"text":133692},{"id":133720,"depth":109,"text":133721},{"id":133748,"depth":109,"text":133749},{"id":133806,"depth":109,"text":133807},{"id":134278,"depth":94,"text":134279,"children":135083},[135084,135085,135086],{"id":134282,"depth":109,"text":134283},{"id":134327,"depth":109,"text":134328},{"id":134343,"depth":109,"text":134344},{"id":134443,"depth":94,"text":134444,"children":135088},[135089,135090,135091,135092,135093,135094],{"id":134447,"depth":109,"text":134448},{"id":134481,"depth":109,"text":134482},{"id":134504,"depth":109,"text":134505},{"id":134551,"depth":109,"text":134552},{"id":135031,"depth":109,"text":135032},{"id":135066,"depth":109,"text":135067},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133671,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135101,"title":135102,"body":135103,"description":141,"extension":142,"meta":136330,"navigation":144,"path":136331,"seo":136332,"stem":136333,"__hash__":136334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135104,"toc":136311},[135105,135108,135112,135115,135129,135197,135227,135230,135234,135238,135340,135387,135391,135394,135397,135431,135434,135437,135440,135443,135446,135449,135452,135454,135457,135460,135463,135466,135469,135472,135475,135503,135506,135510,135513,135520,135523,135526,135552,135555,135559,135562,135565,135572,135576,135579,135581,135613,135616,135619,135631,135637,135640,135643,135646,135648,135652,135655,135658,135661,135706,135710,135712,135715,135722,135764,135767,135771,135776,135790,135794,135797,135800,135803,135806,135809,135843,135846,135849,135903,135906,135909,135912,135915,135967,135970,135973,136022,136026,136028,136031,136034,136037,136040,136043,136101,136104,136110,136113,136116,136148,136151,136155,136159,136162,136194,136198,136201,136245,136249,136252,136255,136258,136261,136264,136267,136270,136272,136275,136277,136280,136283,136286,136289,136294,136297,136299,136302,136305,136308],[10,135106,135102],{"id":135107},"_13-界面样式与布局技巧",[159,135109,135111],{"id":135110},"_131-css三角","13.1 css三角",[14,135113,135114],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1211,135116,135117,135120,135123,135126],{},[174,135118,135119],{},"用css 边框可以模拟三角效果",[174,135121,135122],{},"宽度高度为0",[174,135124,135125],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[174,135127,135128],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[18,135130,135132],{"className":126611,"code":135131,"language":126613,"meta":23,"style":23},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[25,135133,135134,135139,135146,135156,135166,135182,135193],{"__ignoreMap":23},[28,135135,135136],{"class":30,"line":31},[28,135137,135138],{"class":105},"\u002F* CSS 实现三角形 *\u002F\n",[28,135140,135141,135144],{"class":30,"line":94},[28,135142,135143],{"class":2040},".triangle",[28,135145,15649],{"class":34},[28,135147,135148,135150,135152,135154],{"class":30,"line":109},[28,135149,70643],{"class":45},[28,135151,51512],{"class":34},[28,135153,407],{"class":45},[28,135155,1367],{"class":34},[28,135157,135158,135160,135162,135164],{"class":30,"line":125},[28,135159,70863],{"class":45},[28,135161,51512],{"class":34},[28,135163,407],{"class":45},[28,135165,1367],{"class":34},[28,135167,135168,135170,135172,135174,135176,135178,135180],{"class":30,"line":131},[28,135169,70971],{"class":45},[28,135171,51512],{"class":34},[28,135173,659],{"class":45},[28,135175,51567],{"class":38},[28,135177,51596],{"class":45},[28,135179,64066],{"class":45},[28,135181,1367],{"class":34},[28,135183,135184,135187,135189,135191],{"class":30,"line":1291},[28,135185,135186],{"class":45},"  border-bottom-color",[28,135188,51512],{"class":34},[28,135190,62444],{"class":45},[28,135192,1367],{"class":34},[28,135194,135195],{"class":30,"line":1297},[28,135196,1642],{"class":34},[18,135198,135199],{"className":126611,"code":130768,"language":126613,"meta":23,"style":23},[25,135200,135201,135207,135223],{"__ignoreMap":23},[28,135202,135203,135205],{"class":30,"line":31},[28,135204,51686],{"class":51375},[28,135206,15649],{"class":34},[28,135208,135209,135211,135213,135215,135217,135219,135221],{"class":30,"line":94},[28,135210,70971],{"class":45},[28,135212,51512],{"class":34},[28,135214,46],{"class":45},[28,135216,51567],{"class":38},[28,135218,51596],{"class":45},[28,135220,130003],{"class":45},[28,135222,1367],{"class":34},[28,135224,135225],{"class":30,"line":109},[28,135226,1642],{"class":34},[1539,135228],{"style":126467,"src":135229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[159,135231,135233],{"id":135232},"_132-css用户界面样式","13.2 css用户界面样式",[188,135235,135237],{"id":135236},"_1321-鼠标样式","13.2.1 鼠标样式",[18,135239,135241],{"className":126611,"code":135240,"language":126613,"meta":23,"style":23},"\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",[25,135242,135243,135248,135267,135285,135304,135321],{"__ignoreMap":23},[28,135244,135245],{"class":30,"line":31},[28,135246,135247],{"class":105},"\u002F* 鼠标样式 *\u002F\n",[28,135249,135250,135252,135254,135257,135259,135261,135264],{"class":30,"line":94},[28,135251,51686],{"class":51375},[28,135253,79882],{"class":34},[28,135255,135256],{"class":45},"cursor",[28,135258,51512],{"class":34},[28,135260,62105],{"class":45},[28,135262,135263],{"class":34},"; }   ",[28,135265,135266],{"class":105},"\u002F* 手型 *\u002F\n",[28,135268,135269,135271,135273,135275,135277,135280,135282],{"class":30,"line":109},[28,135270,51686],{"class":51375},[28,135272,79882],{"class":34},[28,135274,135256],{"class":45},[28,135276,51512],{"class":34},[28,135278,135279],{"class":45},"default",[28,135281,135263],{"class":34},[28,135283,135284],{"class":105},"\u002F* 默认 *\u002F\n",[28,135286,135287,135289,135291,135293,135295,135298,135301],{"class":30,"line":125},[28,135288,51686],{"class":51375},[28,135290,79882],{"class":34},[28,135292,135256],{"class":45},[28,135294,51512],{"class":34},[28,135296,135297],{"class":45},"move",[28,135299,135300],{"class":34},"; }      ",[28,135302,135303],{"class":105},"\u002F* 移动 *\u002F\n",[28,135305,135306,135308,135310,135312,135314,135316,135318],{"class":30,"line":131},[28,135307,51686],{"class":51375},[28,135309,79882],{"class":34},[28,135311,135256],{"class":45},[28,135313,51512],{"class":34},[28,135315,5264],{"class":45},[28,135317,135300],{"class":34},[28,135319,135320],{"class":105},"\u002F* 文本 *\u002F\n",[28,135322,135323,135325,135327,135329,135331,135334,135337],{"class":30,"line":1291},[28,135324,51686],{"class":51375},[28,135326,79882],{"class":34},[28,135328,135256],{"class":45},[28,135330,51512],{"class":34},[28,135332,135333],{"class":45},"not-allowed",[28,135335,135336],{"class":34},"; } ",[28,135338,135339],{"class":105},"\u002F* 禁止 *\u002F\n",[353,135341,135342,135350],{},[356,135343,135344],{},[359,135345,135346,135348],{},[362,135347,127075],{"align":23813},[362,135349,27567],{"align":23813},[400,135351,135352,135359,135366,135373,135380],{},[359,135353,135354,135356],{},[405,135355,135279],{"align":23813},[405,135357,135358],{"align":23813},"小白 默认",[359,135360,135361,135363],{},[405,135362,62105],{"align":23813},[405,135364,135365],{"align":23813},"小手",[359,135367,135368,135370],{},[405,135369,135297],{"align":23813},[405,135371,135372],{"align":23813},"移动",[359,135374,135375,135377],{},[405,135376,5264],{"align":23813},[405,135378,135379],{"align":23813},"文本",[359,135381,135382,135384],{},[405,135383,135333],{"align":23813},[405,135385,135386],{"align":23813},"禁止",[188,135388,135390],{"id":135389},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135392,135393],{},"去除表单轮廓线",[14,135395,135396],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[18,135398,135399],{"className":126611,"code":129975,"language":126613,"meta":23,"style":23},[25,135400,135401,135405,135411,135427],{"__ignoreMap":23},[28,135402,135403],{"class":30,"line":31},[28,135404,129982],{"class":105},[28,135406,135407,135409],{"class":30,"line":94},[28,135408,51686],{"class":51375},[28,135410,15649],{"class":34},[28,135412,135413,135415,135417,135419,135421,135423,135425],{"class":30,"line":109},[28,135414,70971],{"class":45},[28,135416,51512],{"class":34},[28,135418,46],{"class":45},[28,135420,51567],{"class":38},[28,135422,51596],{"class":45},[28,135424,130003],{"class":45},[28,135426,1367],{"class":34},[28,135428,135429],{"class":30,"line":125},[28,135430,1642],{"class":34},[14,135432,135433],{},"文本域：",[1539,135435],{"style":126467,"src":135436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135438,135439],{},"此时会有一个空白区域",[1539,135441],{"style":126467,"src":135442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135444,135445],{},"写在同一行就不会出现这个问题",[1539,135447],{"style":126467,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135450,135451],{},"文本域是行内块元素，一定记住！！！",[14,135453,98292],{},[1539,135455],{"style":126467,"src":135456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135458,135459],{},"文本域尽量放在一行",[14,135461,135462],{},"知识回顾：cols是列，rols是行",[1539,135464],{"style":126467,"src":135465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135467,135468],{},"它可以进行拖动，显然这是我们不愿意看到的",[1539,135470],{"style":126467,"src":135471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135473,135474],{},"使用resize进行解决",[18,135476,135478],{"className":126611,"code":135477,"language":126613,"meta":23,"style":23},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[25,135479,135480,135486,135499],{"__ignoreMap":23},[28,135481,135482,135484],{"class":30,"line":31},[28,135483,53896],{"class":51375},[28,135485,15649],{"class":34},[28,135487,135488,135490,135492,135494,135496],{"class":30,"line":94},[28,135489,70873],{"class":45},[28,135491,51512],{"class":34},[28,135493,54812],{"class":45},[28,135495,130474],{"class":34},[28,135497,135498],{"class":105},"\u002F* 取消表单轮廓线 *\u002F\n",[28,135500,135501],{"class":30,"line":109},[28,135502,1642],{"class":34},[14,135504,135505],{},"此时就无法通过右下方实现拖动了",[188,135507,135509],{"id":135508},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135511,135512],{},"实现一个盒子中的文字和图片对齐",[14,135514,135515,135516,135519],{},"用于设置一个元素的 ",[365,135517,135518],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135521,135522],{},"图片和文字默认是基线对齐",[1539,135524],{"style":126467,"src":135525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[18,135527,135528],{"className":126611,"code":135477,"language":126613,"meta":23,"style":23},[25,135529,135530,135536,135548],{"__ignoreMap":23},[28,135531,135532,135534],{"class":30,"line":31},[28,135533,53896],{"class":51375},[28,135535,15649],{"class":34},[28,135537,135538,135540,135542,135544,135546],{"class":30,"line":94},[28,135539,70873],{"class":45},[28,135541,51512],{"class":34},[28,135543,54812],{"class":45},[28,135545,130474],{"class":34},[28,135547,135498],{"class":105},[28,135549,135550],{"class":30,"line":109},[28,135551,1642],{"class":34},[1539,135553],{"style":126467,"src":135554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22075,135556,135558],{"id":135557},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135560,135561],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1539,135563],{"style":126467,"src":135564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135566,135567,135568,135571],{},"此时可以给图片、表单这些行内块元素的 ",[365,135569,135570],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22075,135573,135575],{"id":135574},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135577,135578],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135580,14710],{},[18,135582,135584],{"className":126611,"code":135583,"language":126613,"meta":23,"style":23},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[25,135585,135586,135591,135597,135609],{"__ignoreMap":23},[28,135587,135588],{"class":30,"line":31},[28,135589,135590],{"class":105},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[28,135592,135593,135595],{"class":30,"line":94},[28,135594,1539],{"class":51375},[28,135596,15649],{"class":34},[28,135598,135599,135602,135604,135607],{"class":30,"line":109},[28,135600,135601],{"class":45},"  vertical-align",[28,135603,51512],{"class":34},[28,135605,135606],{"class":45},"middle",[28,135608,1367],{"class":34},[28,135610,135611],{"class":30,"line":125},[28,135612,1642],{"class":34},[1539,135614],{"style":126467,"src":135615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135617,135618],{},"主要解决方法有两种：",[171,135620,135621],{},[174,135622,135623,135626,135627,135630],{},[365,135624,135625],{},"给图片"," 添加 ",[365,135628,135629],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135632,135633,135634],{},"2.把图片转换为块级元素 ",[365,135635,135636],{},"display: block",[14,135638,135639],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135641,135642],{},"img {",[14,135644,135645],{},"vertical-align:middle;",[14,135647,1150],{},[188,135649,135651],{"id":135650},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135653,135654],{},"效果：",[1539,135656],{"style":126467,"src":135657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135659,135660],{},"单行文本溢出显示省略号--必须满足三个条件：",[18,135662,135664],{"className":126611,"code":135663,"language":126613,"meta":23,"style":23},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[25,135665,135666,135671,135677,135687,135692,135702],{"__ignoreMap":23},[28,135667,135668],{"class":30,"line":31},[28,135669,135670],{"class":105},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[28,135672,135673,135675],{"class":30,"line":94},[28,135674,1539],{"class":51375},[28,135676,15649],{"class":34},[28,135678,135679,135681,135683,135685],{"class":30,"line":109},[28,135680,135601],{"class":45},[28,135682,51512],{"class":34},[28,135684,135606],{"class":45},[28,135686,1367],{"class":34},[28,135688,135689],{"class":30,"line":125},[28,135690,135691],{"class":105},"  \u002F* 或 *\u002F\n",[28,135693,135694,135696,135698,135700],{"class":30,"line":131},[28,135695,128227],{"class":45},[28,135697,51512],{"class":34},[28,135699,60944],{"class":45},[28,135701,1367],{"class":34},[28,135703,135704],{"class":30,"line":1291},[28,135705,1642],{"class":34},[188,135707,135709],{"id":135708},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135711,135654],{},[1539,135713],{"style":126467,"src":135714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135716,135717,135718,135721],{},"多行文本溢出显示省略号， ",[365,135719,135720],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[18,135723,135724],{"className":126611,"code":135663,"language":126613,"meta":23,"style":23},[25,135725,135726,135730,135736,135746,135750,135760],{"__ignoreMap":23},[28,135727,135728],{"class":30,"line":31},[28,135729,135670],{"class":105},[28,135731,135732,135734],{"class":30,"line":94},[28,135733,1539],{"class":51375},[28,135735,15649],{"class":34},[28,135737,135738,135740,135742,135744],{"class":30,"line":109},[28,135739,135601],{"class":45},[28,135741,51512],{"class":34},[28,135743,135606],{"class":45},[28,135745,1367],{"class":34},[28,135747,135748],{"class":30,"line":125},[28,135749,135691],{"class":105},[28,135751,135752,135754,135756,135758],{"class":30,"line":131},[28,135753,128227],{"class":45},[28,135755,51512],{"class":34},[28,135757,60944],{"class":45},[28,135759,1367],{"class":34},[28,135761,135762],{"class":30,"line":1291},[28,135763,1642],{"class":34},[14,135765,135766],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[159,135768,135770],{"id":135769},"_133-常见布局技巧","13.3 常见布局技巧",[14,135772,135773],{},[365,135774,135775],{},"巧妙利用一个技术更快更好的布局：",[171,135777,135778,135781,135784,135787],{},[174,135779,135780],{},"margin负值的运用",[174,135782,135783],{},"文字围绕浮动元素",[174,135785,135786],{},"行内块的巧妙运用",[174,135788,135789],{},"CSS三角强化",[188,135791,135793],{"id":135792},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135795,135796],{},"应用场景：",[1539,135798],{"style":126467,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1539,135801],{"style":126467,"src":135802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135804,135805],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135807,135808],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[18,135810,135811],{"className":126611,"code":129975,"language":126613,"meta":23,"style":23},[25,135812,135813,135817,135823,135839],{"__ignoreMap":23},[28,135814,135815],{"class":30,"line":31},[28,135816,129982],{"class":105},[28,135818,135819,135821],{"class":30,"line":94},[28,135820,51686],{"class":51375},[28,135822,15649],{"class":34},[28,135824,135825,135827,135829,135831,135833,135835,135837],{"class":30,"line":109},[28,135826,70971],{"class":45},[28,135828,51512],{"class":34},[28,135830,46],{"class":45},[28,135832,51567],{"class":38},[28,135834,51596],{"class":45},[28,135836,130003],{"class":45},[28,135838,1367],{"class":34},[28,135840,135841],{"class":30,"line":125},[28,135842,1642],{"class":34},[1539,135844],{"style":126467,"src":135845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135847,135848],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[18,135850,135852],{"className":126611,"code":135851,"language":126613,"meta":23,"style":23},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,135853,135854,135859,135865,135875,135887,135899],{"__ignoreMap":23},[28,135855,135856],{"class":30,"line":31},[28,135857,135858],{"class":105},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[28,135860,135861,135863],{"class":30,"line":94},[28,135862,130459],{"class":2040},[28,135864,15649],{"class":34},[28,135866,135867,135869,135871,135873],{"class":30,"line":109},[28,135868,132417],{"class":45},[28,135870,51512],{"class":34},[28,135872,54839],{"class":45},[28,135874,1367],{"class":34},[28,135876,135877,135879,135881,135883,135885],{"class":30,"line":125},[28,135878,132431],{"class":45},[28,135880,51512],{"class":34},[28,135882,659],{"class":45},[28,135884,51567],{"class":38},[28,135886,1367],{"class":34},[28,135888,135889,135891,135893,135895,135897],{"class":30,"line":131},[28,135890,132448],{"class":45},[28,135892,51512],{"class":34},[28,135894,102],{"class":45},[28,135896,51567],{"class":38},[28,135898,1367],{"class":34},[28,135900,135901],{"class":30,"line":1291},[28,135902,1642],{"class":34},[14,135904,135905],{},"加上上述代码会发现：",[1539,135907],{"style":126467,"src":135908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135910,135911],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135913,135914],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[18,135916,135917],{"className":126611,"code":135851,"language":126613,"meta":23,"style":23},[25,135918,135919,135923,135929,135939,135951,135963],{"__ignoreMap":23},[28,135920,135921],{"class":30,"line":31},[28,135922,135858],{"class":105},[28,135924,135925,135927],{"class":30,"line":94},[28,135926,130459],{"class":2040},[28,135928,15649],{"class":34},[28,135930,135931,135933,135935,135937],{"class":30,"line":109},[28,135932,132417],{"class":45},[28,135934,51512],{"class":34},[28,135936,54839],{"class":45},[28,135938,1367],{"class":34},[28,135940,135941,135943,135945,135947,135949],{"class":30,"line":125},[28,135942,132431],{"class":45},[28,135944,51512],{"class":34},[28,135946,659],{"class":45},[28,135948,51567],{"class":38},[28,135950,1367],{"class":34},[28,135952,135953,135955,135957,135959,135961],{"class":30,"line":131},[28,135954,132448],{"class":45},[28,135956,51512],{"class":34},[28,135958,102],{"class":45},[28,135960,51567],{"class":38},[28,135962,1367],{"class":34},[28,135964,135965],{"class":30,"line":1291},[28,135966,1642],{"class":34},[14,135968,135969],{},"解决方式2：",[14,135971,135972],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[18,135974,135976],{"className":126611,"code":135975,"language":126613,"meta":23,"style":23},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,135977,135978,135984,135994,136006,136018],{"__ignoreMap":23},[28,135979,135980,135982],{"class":30,"line":31},[28,135981,51686],{"class":51375},[28,135983,15649],{"class":34},[28,135985,135986,135988,135990,135992],{"class":30,"line":94},[28,135987,132417],{"class":45},[28,135989,51512],{"class":34},[28,135991,54839],{"class":45},[28,135993,1367],{"class":34},[28,135995,135996,135998,136000,136002,136004],{"class":30,"line":109},[28,135997,132431],{"class":45},[28,135999,51512],{"class":34},[28,136001,659],{"class":45},[28,136003,51567],{"class":38},[28,136005,1367],{"class":34},[28,136007,136008,136010,136012,136014,136016],{"class":30,"line":125},[28,136009,132448],{"class":45},[28,136011,51512],{"class":34},[28,136013,102],{"class":45},[28,136015,51567],{"class":38},[28,136017,1367],{"class":34},[28,136019,136020],{"class":30,"line":131},[28,136021,1642],{"class":34},[188,136023,136025],{"id":136024},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136027,135796],{},[1539,136029],{"style":126467,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136032,136033],{},"实现结构图：",[1539,136035],{"style":126467,"src":136036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136038,136039],{},"巧妙运用浮动元素不会压住文字的特性",[14,136041,136042],{},"代码显示：",[18,136044,136046],{"className":126611,"code":136045,"language":126613,"meta":23,"style":23},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,136047,136048,136054,136064,136068,136073,136077,136083,136097],{"__ignoreMap":23},[28,136049,136050,136052],{"class":30,"line":31},[28,136051,130459],{"class":2040},[28,136053,15649],{"class":34},[28,136055,136056,136058,136060,136062],{"class":30,"line":94},[28,136057,131091],{"class":45},[28,136059,51512],{"class":34},[28,136061,23813],{"class":45},[28,136063,1367],{"class":34},[28,136065,136066],{"class":30,"line":109},[28,136067,1642],{"class":34},[28,136069,136070],{"class":30,"line":125},[28,136071,136072],{"class":34},"```Css\n",[28,136074,136075],{"class":30,"line":131},[28,136076,130454],{"class":105},[28,136078,136079,136081],{"class":30,"line":1291},[28,136080,130459],{"class":2040},[28,136082,15649],{"class":34},[28,136084,136085,136087,136089,136091,136093,136095],{"class":30,"line":1297},[28,136086,70545],{"class":45},[28,136088,51512],{"class":34},[28,136090,407],{"class":45},[28,136092,51631],{"class":45},[28,136094,130474],{"class":34},[28,136096,130477],{"class":105},[28,136098,136099],{"class":30,"line":1388},[28,136100,1642],{"class":34},[14,136102,136103],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[18,136105,136108],{"className":136106,"code":136107,"language":5264},[5262],"\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",[25,136109,136107],{"__ignoreMap":23},[1539,136111],{"style":126467,"src":136112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136114,136115],{},"最终展示结果：",[18,136117,136118],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,136119,136120,136124,136130,136144],{"__ignoreMap":23},[28,136121,136122],{"class":30,"line":31},[28,136123,130454],{"class":105},[28,136125,136126,136128],{"class":30,"line":94},[28,136127,130459],{"class":2040},[28,136129,15649],{"class":34},[28,136131,136132,136134,136136,136138,136140,136142],{"class":30,"line":109},[28,136133,70545],{"class":45},[28,136135,51512],{"class":34},[28,136137,407],{"class":45},[28,136139,51631],{"class":45},[28,136141,130474],{"class":34},[28,136143,130477],{"class":105},[28,136145,136146],{"class":30,"line":125},[28,136147,1642],{"class":34},[1539,136149],{"style":126467,"src":136150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[159,136152,136154],{"id":136153},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[188,136156,136158],{"id":136157},"_1341-原理","13.4.1 原理",[1539,136160],{"style":126467,"src":136161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[18,136163,136164],{"className":126611,"code":130447,"language":126613,"meta":23,"style":23},[25,136165,136166,136170,136176,136190],{"__ignoreMap":23},[28,136167,136168],{"class":30,"line":31},[28,136169,130454],{"class":105},[28,136171,136172,136174],{"class":30,"line":94},[28,136173,130459],{"class":2040},[28,136175,15649],{"class":34},[28,136177,136178,136180,136182,136184,136186,136188],{"class":30,"line":109},[28,136179,70545],{"class":45},[28,136181,51512],{"class":34},[28,136183,407],{"class":45},[28,136185,51631],{"class":45},[28,136187,130474],{"class":34},[28,136189,130477],{"class":105},[28,136191,136192],{"class":30,"line":125},[28,136193,1642],{"class":34},[188,136195,136197],{"id":136196},"_1342-实例","13.4.2 实例",[1539,136199],{"style":126467,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[18,136202,136203],{"className":126611,"code":131077,"language":126613,"meta":23,"style":23},[25,136204,136205,136211,136221,136225,136231,136241],{"__ignoreMap":23},[28,136206,136207,136209],{"class":30,"line":31},[28,136208,131084],{"class":2040},[28,136210,15649],{"class":34},[28,136212,136213,136215,136217,136219],{"class":30,"line":94},[28,136214,131091],{"class":45},[28,136216,51512],{"class":34},[28,136218,23813],{"class":45},[28,136220,1367],{"class":34},[28,136222,136223],{"class":30,"line":109},[28,136224,1642],{"class":34},[28,136226,136227,136229],{"class":30,"line":125},[28,136228,131106],{"class":2040},[28,136230,15649],{"class":34},[28,136232,136233,136235,136237,136239],{"class":30,"line":131},[28,136234,131091],{"class":45},[28,136236,51512],{"class":34},[28,136238,72597],{"class":45},[28,136240,1367],{"class":34},[28,136242,136243],{"class":30,"line":1291},[28,136244,1642],{"class":34},[159,136246,136248],{"id":136247},"_135-css的初始化","13.5 css的初始化",[14,136250,136251],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136253,136254],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136256,136257],{},"每个网页都必须首先进行 CSS初始化。",[14,136259,136260],{},"这里我们以 京东CSS初始化代码为例。",[14,136262,136263],{},"在网页右键查看网页源代码",[14,136265,136266],{},"找到css的link引入语句",[14,136268,136269],{},"然后ctrl+f 输入body",[14,136271,77301],{},[1539,136273],{"style":126467,"src":136274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136276,77324],{},[1539,136278],{"style":126467,"src":136279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136281,136282],{},"③打开了网页上传压缩的代码",[1539,136284],{"style":126467,"src":136285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136287,136288],{},"④从body前可以查看这个网页的初始化代码",[14,136290,136291],{},[365,136292,136293],{},"Unicode编码字体：",[14,136295,136296],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136298,83282],{},[14,136300,136301],{},"黑体 \\9ED1\\4F53",[14,136303,136304],{},"宋体 \\5B8B\\4F53",[14,136306,136307],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[136,136309,136310],{},"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":23,"searchDepth":94,"depth":94,"links":136312},[136313,136314,136321,136325,136329],{"id":135110,"depth":94,"text":135111},{"id":135232,"depth":94,"text":135233,"children":136315},[136316,136317,136318,136319,136320],{"id":135236,"depth":109,"text":135237},{"id":135389,"depth":109,"text":135390},{"id":135508,"depth":109,"text":135509},{"id":135650,"depth":109,"text":135651},{"id":135708,"depth":109,"text":135709},{"id":135769,"depth":94,"text":135770,"children":136322},[136323,136324],{"id":135792,"depth":109,"text":135793},{"id":136024,"depth":109,"text":136025},{"id":136153,"depth":94,"text":136154,"children":136326},[136327,136328],{"id":136157,"depth":109,"text":136158},{"id":136196,"depth":109,"text":136197},{"id":136247,"depth":94,"text":136248},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135102,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136336,"title":136337,"body":136338,"description":141,"extension":142,"meta":138024,"navigation":144,"path":138025,"seo":138026,"stem":138027,"__hash__":138028},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136339,"toc":138013},[136340,136343,136347,136351,136354,136361,136364,136367,136405,136408,136410,136424,136428,136437,136441,136446,136449,136452,136455,136490,136495,136498,136528,136531,136536,136539,136542,136572,136575,136629,136632,136636,136641,136653,136656,136660,136690,136693,136698,136701,136731,136734,136738,136755,136759,136763,136766,136799,136802,136806,136809,136812,136815,136818,136821,136932,136935,136938,136941,137043,137046,137050,137054,137058,137061,137101,137104,137106,137122,137126,137129,137134,137215,137218,137221,137347,137352,137355,137363,137366,137371,137456,137459,137463,137466,137469,137473,137493,137498,137582,137585,137590,137593,137596,137674,137677,137680,137683,137686,137689,137694,137697,137700,137772,137775,137780,137783,137880,137883,137889,137892,137895,137898,137901,137904,137907,137910,137913,137917,137922,137925,137958,137963,137966,138007,138010],[10,136341,136337],{"id":136342},"_14-html5与css3新特性",[159,136344,136346],{"id":136345},"_141-html5的新特性","14.1 HTML5的新特性",[188,136348,136350],{"id":136349},"_1411-基本标签","14.1.1 基本标签",[14,136352,136353],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136355,136356,136357,136360],{},"这些新特性都有兼容性问题，基本是 ",[365,136358,136359],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136362,136363],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136365,136366],{},"现在使用的是新特性：",[1211,136368,136369,136375,136381,136387,136393,136399],{},[174,136370,136371,136374],{},[25,136372,136373],{},"\u003Cheader>"," 头部标签",[174,136376,136377,136380],{},[25,136378,136379],{},"\u003Cnav>"," 导航标签",[174,136382,136383,136386],{},[25,136384,136385],{},"\u003Carticle>"," 内容标签",[174,136388,136389,136392],{},[25,136390,136391],{},"\u003Csection>"," 定义文档某个区域",[174,136394,136395,136398],{},[25,136396,136397],{},"\u003Caside>"," 侧边栏标签",[174,136400,136401,136404],{},[25,136402,136403],{},"\u003Cfooter>"," 尾部标签",[1539,136406],{"style":126467,"src":136407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136409,250],{},[1211,136411,136412,136415,136418,136421],{},[174,136413,136414],{},"这种语义化标准主要是针对搜索引擎的",[174,136416,136417],{},"这些标签页面中可以经常使用",[174,136419,136420],{},"在IE9中，需要把这些元素转换为块级元素",[174,136422,136423],{},"移动端更喜欢使用这些标签",[188,136425,136427],{"id":136426},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136429,136430,136431,136433,136434,136436],{},"音频 ",[365,136432,28252],{}," 和视频 ",[365,136435,28261],{}," 两个标签",[22075,136438,136440],{"id":136439},"_14121-视频标签-video","14.1.2.1 视频标签- video",[171,136442,136443],{},[174,136444,136445],{},"支持格式：",[1539,136447],{"style":126467,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136450,136451],{},"尽量使用MP4，兼容性好",[14,136453,136454],{},"用MP4就可以",[18,136456,136458],{"className":127358,"code":136457,"language":127360,"meta":23,"style":23},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[25,136459,136460],{"__ignoreMap":23},[28,136461,136462,136464,136466,136468,136470,136473,136475,136478,136481,136484,136486,136488],{"class":30,"line":31},[28,136463,99],{"class":34},[28,136465,28261],{"class":51375},[28,136467,55314],{"class":2040},[28,136469,39],{"class":34},[28,136471,136472],{"class":320},"\"movie.mp4\"",[28,136474,92498],{"class":2040},[28,136476,136477],{"class":2040}," autoplay",[28,136479,136480],{"class":2040}," muted",[28,136482,136483],{"class":2040}," loop",[28,136485,55389],{"class":34},[28,136487,28261],{"class":51375},[28,136489,51382],{"class":34},[171,136491,136492],{"start":94},[174,136493,136494],{},"兼容写法",[14,136496,136497],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[18,136499,136500],{"className":127358,"code":136457,"language":127360,"meta":23,"style":23},[25,136501,136502],{"__ignoreMap":23},[28,136503,136504,136506,136508,136510,136512,136514,136516,136518,136520,136522,136524,136526],{"class":30,"line":31},[28,136505,99],{"class":34},[28,136507,28261],{"class":51375},[28,136509,55314],{"class":2040},[28,136511,39],{"class":34},[28,136513,136472],{"class":320},[28,136515,92498],{"class":2040},[28,136517,136477],{"class":2040},[28,136519,136480],{"class":2040},[28,136521,136483],{"class":2040},[28,136523,55389],{"class":34},[28,136525,28261],{"class":51375},[28,136527,51382],{"class":34},[14,136529,136530],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[171,136532,136533],{"start":109},[174,136534,136535],{},"video常用属性",[1539,136537],{"style":126467,"src":136538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136540,136541],{},"poster属性后面是跟的等待加载图片的地址",[18,136543,136544],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,136545,136546],{"__ignoreMap":23},[28,136547,136548,136550,136552,136554,136556,136558,136560,136562,136564,136566,136568,136570],{"class":30,"line":31},[28,136549,99],{"class":34},[28,136551,1539],{"class":51375},[28,136553,55314],{"class":2040},[28,136555,39],{"class":34},[28,136557,134128],{"class":320},[28,136559,55322],{"class":2040},[28,136561,39],{"class":34},[28,136563,134135],{"class":320},[28,136565,134138],{"class":2040},[28,136567,39],{"class":34},[28,136569,134143],{"class":320},[28,136571,51382],{"class":34},[14,136573,136574],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[18,136576,136578],{"className":126611,"code":136577,"language":126613,"meta":23,"style":23},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[25,136579,136580,136585,136591,136615,136620,136625],{"__ignoreMap":23},[28,136581,136582],{"class":30,"line":31},[28,136583,136584],{"class":105},"\u002F* 2D 位移 *\u002F\n",[28,136586,136587,136589],{"class":30,"line":94},[28,136588,51686],{"class":51375},[28,136590,15649],{"class":34},[28,136592,136593,136596,136598,136601,136603,136605,136607,136609,136611,136613],{"class":30,"line":109},[28,136594,136595],{"class":45},"  transform",[28,136597,51512],{"class":34},[28,136599,136600],{"class":45},"translate",[28,136602,221],{"class":34},[28,136604,525],{"class":45},[28,136606,51567],{"class":38},[28,136608,12512],{"class":34},[28,136610,866],{"class":45},[28,136612,51567],{"class":38},[28,136614,2796],{"class":34},[28,136616,136617],{"class":30,"line":125},[28,136618,136619],{"class":105},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[28,136621,136622],{"class":30,"line":131},[28,136623,136624],{"class":105},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[28,136626,136627],{"class":30,"line":1291},[28,136628,1642],{"class":34},[14,136630,136631],{},"muted:自动静音属性",[22075,136633,136635],{"id":136634},"_14122-音频标签audio","14.1.2.2 音频标签audio",[171,136637,136638],{},[174,136639,136640],{},"基本使用",[14,136642,136643,136644,136649,136650],{},"当前 ",[365,136645,136646],{},[25,136647,136648],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[365,136651,136652],{},"mp3格式",[1539,136654],{"style":126467,"src":136655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[171,136657,136658],{"start":94},[174,136659,136494],{},[18,136661,136662],{"className":127358,"code":136457,"language":127360,"meta":23,"style":23},[25,136663,136664],{"__ignoreMap":23},[28,136665,136666,136668,136670,136672,136674,136676,136678,136680,136682,136684,136686,136688],{"class":30,"line":31},[28,136667,99],{"class":34},[28,136669,28261],{"class":51375},[28,136671,55314],{"class":2040},[28,136673,39],{"class":34},[28,136675,136472],{"class":320},[28,136677,92498],{"class":2040},[28,136679,136477],{"class":2040},[28,136681,136480],{"class":2040},[28,136683,136483],{"class":2040},[28,136685,55389],{"class":34},[28,136687,28261],{"class":51375},[28,136689,51382],{"class":34},[14,136691,136692],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[171,136694,136695],{"start":109},[174,136696,136697],{},"常用属性",[1539,136699],{"style":126467,"src":136700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[18,136702,136703],{"className":127358,"code":136457,"language":127360,"meta":23,"style":23},[25,136704,136705],{"__ignoreMap":23},[28,136706,136707,136709,136711,136713,136715,136717,136719,136721,136723,136725,136727,136729],{"class":30,"line":31},[28,136708,99],{"class":34},[28,136710,28261],{"class":51375},[28,136712,55314],{"class":2040},[28,136714,39],{"class":34},[28,136716,136472],{"class":320},[28,136718,92498],{"class":2040},[28,136720,136477],{"class":2040},[28,136722,136480],{"class":2040},[28,136724,136483],{"class":2040},[28,136726,55389],{"class":34},[28,136728,28261],{"class":51375},[28,136730,51382],{"class":34},[14,136732,136733],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22075,136735,136737],{"id":136736},"_14123-总结","14.1.2.3 总结",[1211,136739,136740,136743,136746,136749,136752],{},[174,136741,136742],{},"音频标签和视频标签使用方式基本一致",[174,136744,136745],{},"浏览器支持情况不同",[174,136747,136748],{},"谷歌浏览器把音频和视频自动播放禁止了",[174,136750,136751],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[174,136753,136754],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[188,136756,136758],{"id":136757},"_1413-表单元素","14.1.3 表单元素",[22075,136760,136762],{"id":136761},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1539,136764],{"style":126467,"src":136765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[18,136767,136769],{"className":127358,"code":136768,"language":127360,"meta":23,"style":23},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[25,136770,136771],{"__ignoreMap":23},[28,136772,136773,136775,136777,136779,136781,136783,136785,136787,136790,136792,136794,136797],{"class":30,"line":31},[28,136774,99],{"class":34},[28,136776,53896],{"class":51375},[28,136778,53899],{"class":2040},[28,136780,39],{"class":34},[28,136782,62774],{"class":320},[28,136784,14997],{"class":2040},[28,136786,39],{"class":34},[28,136788,136789],{"class":320},"\"username\"",[28,136791,61095],{"class":2040},[28,136793,39],{"class":34},[28,136795,136796],{"class":320},"\"请输入用户名\"",[28,136798,51382],{"class":34},[1539,136800],{"style":126467,"src":136801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22075,136803,136805],{"id":136804},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1539,136807],{"style":126467,"src":136808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136810,136811],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136813,136814],{},"快捷操作：",[1539,136816],{"style":126467,"src":136817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136819,136820],{},"例子1：",[18,136822,136824],{"className":127358,"code":136823,"language":127360,"meta":23,"style":23},"\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",[25,136825,136826,136849,136876,136905,136924],{"__ignoreMap":23},[28,136827,136828,136830,136832,136834,136836,136839,136842,136844,136847],{"class":30,"line":31},[28,136829,99],{"class":34},[28,136831,66700],{"class":51375},[28,136833,66703],{"class":2040},[28,136835,39],{"class":34},[28,136837,136838],{"class":320},"\"\u002Fsubmit\"",[28,136840,136841],{"class":2040}," method",[28,136843,39],{"class":34},[28,136845,136846],{"class":320},"\"post\"",[28,136848,51382],{"class":34},[28,136850,136851,136853,136855,136857,136859,136861,136863,136865,136867,136869,136871,136874],{"class":30,"line":94},[28,136852,52219],{"class":34},[28,136854,53896],{"class":51375},[28,136856,53899],{"class":2040},[28,136858,39],{"class":34},[28,136860,62774],{"class":320},[28,136862,14997],{"class":2040},[28,136864,39],{"class":34},[28,136866,136789],{"class":320},[28,136868,61095],{"class":2040},[28,136870,39],{"class":34},[28,136872,136873],{"class":320},"\"用户名\"",[28,136875,51382],{"class":34},[28,136877,136878,136880,136882,136884,136886,136889,136891,136893,136896,136898,136900,136903],{"class":30,"line":109},[28,136879,52219],{"class":34},[28,136881,53896],{"class":51375},[28,136883,53899],{"class":2040},[28,136885,39],{"class":34},[28,136887,136888],{"class":320},"\"password\"",[28,136890,14997],{"class":2040},[28,136892,39],{"class":34},[28,136894,136895],{"class":320},"\"pwd\"",[28,136897,61095],{"class":2040},[28,136899,39],{"class":34},[28,136901,136902],{"class":320},"\"密码\"",[28,136904,51382],{"class":34},[28,136906,136907,136909,136911,136913,136915,136917,136920,136922],{"class":30,"line":125},[28,136908,52219],{"class":34},[28,136910,53962],{"class":51375},[28,136912,53899],{"class":2040},[28,136914,39],{"class":34},[28,136916,66723],{"class":320},[28,136918,136919],{"class":34},">提交\u003C\u002F",[28,136921,53962],{"class":51375},[28,136923,51382],{"class":34},[28,136925,136926,136928,136930],{"class":30,"line":131},[28,136927,51860],{"class":34},[28,136929,66700],{"class":51375},[28,136931,51382],{"class":34},[1539,136933],{"style":126467,"src":136934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136936,136937],{},"value是表单域的内容",[14,136939,136940],{},"例子2：",[18,136942,136943],{"className":127358,"code":136823,"language":127360,"meta":23,"style":23},[25,136944,136945,136965,136991,137017,137035],{"__ignoreMap":23},[28,136946,136947,136949,136951,136953,136955,136957,136959,136961,136963],{"class":30,"line":31},[28,136948,99],{"class":34},[28,136950,66700],{"class":51375},[28,136952,66703],{"class":2040},[28,136954,39],{"class":34},[28,136956,136838],{"class":320},[28,136958,136841],{"class":2040},[28,136960,39],{"class":34},[28,136962,136846],{"class":320},[28,136964,51382],{"class":34},[28,136966,136967,136969,136971,136973,136975,136977,136979,136981,136983,136985,136987,136989],{"class":30,"line":94},[28,136968,52219],{"class":34},[28,136970,53896],{"class":51375},[28,136972,53899],{"class":2040},[28,136974,39],{"class":34},[28,136976,62774],{"class":320},[28,136978,14997],{"class":2040},[28,136980,39],{"class":34},[28,136982,136789],{"class":320},[28,136984,61095],{"class":2040},[28,136986,39],{"class":34},[28,136988,136873],{"class":320},[28,136990,51382],{"class":34},[28,136992,136993,136995,136997,136999,137001,137003,137005,137007,137009,137011,137013,137015],{"class":30,"line":109},[28,136994,52219],{"class":34},[28,136996,53896],{"class":51375},[28,136998,53899],{"class":2040},[28,137000,39],{"class":34},[28,137002,136888],{"class":320},[28,137004,14997],{"class":2040},[28,137006,39],{"class":34},[28,137008,136895],{"class":320},[28,137010,61095],{"class":2040},[28,137012,39],{"class":34},[28,137014,136902],{"class":320},[28,137016,51382],{"class":34},[28,137018,137019,137021,137023,137025,137027,137029,137031,137033],{"class":30,"line":125},[28,137020,52219],{"class":34},[28,137022,53962],{"class":51375},[28,137024,53899],{"class":2040},[28,137026,39],{"class":34},[28,137028,66723],{"class":320},[28,137030,136919],{"class":34},[28,137032,53962],{"class":51375},[28,137034,51382],{"class":34},[28,137036,137037,137039,137041],{"class":30,"line":131},[28,137038,51860],{"class":34},[28,137040,66700],{"class":51375},[28,137042,51382],{"class":34},[1539,137044],{"style":126467,"src":137045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[159,137047,137049],{"id":137048},"_142-css新特性","14.2 CSS新特性",[188,137051,137053],{"id":137052},"_1421-新增选择器","14.2.1 新增选择器",[22075,137055,137057],{"id":137056},"_14211-属性选择器","14.2.1.1 属性选择器",[1539,137059],{"style":126467,"src":137060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[18,137062,137064],{"className":126611,"code":137063,"language":126613,"meta":23,"style":23},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[25,137065,137066,137081,137097],{"__ignoreMap":23},[28,137067,137068,137070,137072,137074,137076,137078],{"class":30,"line":31},[28,137069,53896],{"class":51375},[28,137071,1096],{"class":34},[28,137073,103166],{"class":2040},[28,137075,39],{"class":38},[28,137077,62774],{"class":320},[28,137079,137080],{"class":34},"] {\n",[28,137082,137083,137085,137087,137089,137091,137093,137095],{"class":30,"line":94},[28,137084,70971],{"class":45},[28,137086,51512],{"class":34},[28,137088,46],{"class":45},[28,137090,51567],{"class":38},[28,137092,51596],{"class":45},[28,137094,130191],{"class":45},[28,137096,1367],{"class":34},[28,137098,137099],{"class":30,"line":109},[28,137100,1642],{"class":34},[1539,137102],{"style":126467,"src":137103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137105,250],{},[1211,137107,137108,137111,137114,137117],{},[174,137109,137110],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[174,137112,137113],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[174,137115,137116],{},"属性选择器也可以选择出来自定义的属性",[174,137118,137119,137121],{},[365,137120,9102],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22075,137123,137125],{"id":137124},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1539,137127],{"style":126467,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[171,137130,137131],{},[174,137132,137133],{},"fist-child",[18,137135,137137],{"className":126611,"code":137136,"language":126613,"meta":23,"style":23},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[25,137138,137139,137144,137159,137179,137197],{"__ignoreMap":23},[28,137140,137141],{"class":30,"line":31},[28,137142,137143],{"class":105},"\u002F* 属性选择器 *\u002F\n",[28,137145,137146,137148,137150,137152,137154,137156],{"class":30,"line":94},[28,137147,53896],{"class":51375},[28,137149,1096],{"class":34},[28,137151,103166],{"class":2040},[28,137153,39],{"class":38},[28,137155,62774],{"class":320},[28,137157,137158],{"class":34},"] { }\n",[28,137160,137161,137163,137165,137167,137170,137173,137176],{"class":30,"line":109},[28,137162,53896],{"class":51375},[28,137164,1096],{"class":34},[28,137166,14771],{"class":2040},[28,137168,137169],{"class":38},"^=",[28,137171,137172],{"class":320},"\"icon\"",[28,137174,137175],{"class":34},"] { }  ",[28,137177,137178],{"class":105},"\u002F* 以 icon 开头 *\u002F\n",[28,137180,137181,137183,137185,137187,137190,137192,137194],{"class":30,"line":125},[28,137182,53896],{"class":51375},[28,137184,1096],{"class":34},[28,137186,14771],{"class":2040},[28,137188,137189],{"class":38},"$=",[28,137191,137172],{"class":320},[28,137193,137175],{"class":34},[28,137195,137196],{"class":105},"\u002F* 以 icon 结尾 *\u002F\n",[28,137198,137199,137201,137203,137205,137208,137210,137212],{"class":30,"line":131},[28,137200,53896],{"class":51375},[28,137202,1096],{"class":34},[28,137204,14771],{"class":2040},[28,137206,137207],{"class":38},"*=",[28,137209,137172],{"class":320},[28,137211,137175],{"class":34},[28,137213,137214],{"class":105},"\u002F* 包含 icon *\u002F\n",[14,137216,137217],{},"ul的第一个儿子文本为红色",[14,137219,137220],{},"一定要在冒号前加空格，不然就是选中所有的了",[18,137222,137224],{"className":126611,"code":137223,"language":126613,"meta":23,"style":23},".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",[25,137225,137226,137232,137242,137246,137250,137255,137268,137281,137297,137314,137331],{"__ignoreMap":23},[28,137227,137228,137230],{"class":30,"line":31},[28,137229,126902],{"class":2040},[28,137231,15649],{"class":34},[28,137233,137234,137236,137238,137240],{"class":30,"line":94},[28,137235,70980],{"class":45},[28,137237,51512],{"class":34},[28,137239,57496],{"class":45},[28,137241,1367],{"class":34},[28,137243,137244],{"class":30,"line":109},[28,137245,1642],{"class":34},[28,137247,137248],{"class":30,"line":125},[28,137249,136072],{"class":34},[28,137251,137252],{"class":30,"line":131},[28,137253,137254],{"class":105},"\u002F* 结构伪类选择器 *\u002F\n",[28,137256,137257,137259,137262,137265],{"class":30,"line":1291},[28,137258,174],{"class":51375},[28,137260,137261],{"class":2040},":first-child",[28,137263,137264],{"class":34}," { }           ",[28,137266,137267],{"class":105},"\u002F* 第一个 *\u002F\n",[28,137269,137270,137272,137275,137278],{"class":30,"line":1297},[28,137271,174],{"class":51375},[28,137273,137274],{"class":2040},":last-child",[28,137276,137277],{"class":34}," { }            ",[28,137279,137280],{"class":105},"\u002F* 最后一个 *\u002F\n",[28,137282,137283,137285,137287,137289,137291,137294],{"class":30,"line":1388},[28,137284,174],{"class":51375},[28,137286,129525],{"class":2040},[28,137288,221],{"class":34},[28,137290,52],{"class":45},[28,137292,137293],{"class":34},") { }          ",[28,137295,137296],{"class":105},"\u002F* 第2个 *\u002F\n",[28,137298,137299,137301,137303,137305,137308,137311],{"class":30,"line":1394},[28,137300,174],{"class":51375},[28,137302,129525],{"class":2040},[28,137304,221],{"class":34},[28,137306,137307],{"class":45},"2n",[28,137309,137310],{"class":34},") { }         ",[28,137312,137313],{"class":105},"\u002F* 偶数 *\u002F\n",[28,137315,137316,137318,137320,137322,137325,137328],{"class":30,"line":1406},[28,137317,174],{"class":51375},[28,137319,129525],{"class":2040},[28,137321,221],{"class":34},[28,137323,137324],{"class":45},"2n+1",[28,137326,137327],{"class":34},") { }       ",[28,137329,137330],{"class":105},"\u002F* 奇数 *\u002F\n",[28,137332,137333,137335,137337,137339,137342,137344],{"class":30,"line":1689},[28,137334,174],{"class":51375},[28,137336,129525],{"class":2040},[28,137338,221],{"class":34},[28,137340,137341],{"class":45},"-n+3",[28,137343,137327],{"class":34},[28,137345,137346],{"class":105},"\u002F* 前3个 *\u002F\n",[51686,137348,137351],{"className":137349},[137350],"example","\n  示例内容\n",[14,137353,137354],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1211,137356,137357],{},[174,137358,137359,137362],{},[25,137360,137361],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137364,137365],{},"也就是说它选择的是熊大",[171,137367,137368],{"start":1291},[174,137369,137370],{},"权重",[18,137372,137374],{"className":126611,"code":137373,"language":126613,"meta":23,"style":23},"\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",[25,137375,137376,137380,137390,137400,137414,137428,137442],{"__ignoreMap":23},[28,137377,137378],{"class":30,"line":31},[28,137379,137254],{"class":105},[28,137381,137382,137384,137386,137388],{"class":30,"line":94},[28,137383,174],{"class":51375},[28,137385,137261],{"class":2040},[28,137387,137264],{"class":34},[28,137389,137267],{"class":105},[28,137391,137392,137394,137396,137398],{"class":30,"line":109},[28,137393,174],{"class":51375},[28,137395,137274],{"class":2040},[28,137397,137277],{"class":34},[28,137399,137280],{"class":105},[28,137401,137402,137404,137406,137408,137410,137412],{"class":30,"line":125},[28,137403,174],{"class":51375},[28,137405,129525],{"class":2040},[28,137407,221],{"class":34},[28,137409,52],{"class":45},[28,137411,137293],{"class":34},[28,137413,137296],{"class":105},[28,137415,137416,137418,137420,137422,137424,137426],{"class":30,"line":131},[28,137417,174],{"class":51375},[28,137419,129525],{"class":2040},[28,137421,221],{"class":34},[28,137423,137307],{"class":45},[28,137425,137310],{"class":34},[28,137427,137313],{"class":105},[28,137429,137430,137432,137434,137436,137438,137440],{"class":30,"line":1291},[28,137431,174],{"class":51375},[28,137433,129525],{"class":2040},[28,137435,221],{"class":34},[28,137437,137324],{"class":45},[28,137439,137327],{"class":34},[28,137441,137330],{"class":105},[28,137443,137444,137446,137448,137450,137452,137454],{"class":30,"line":1297},[28,137445,174],{"class":51375},[28,137447,129525],{"class":2040},[28,137449,221],{"class":34},[28,137451,137341],{"class":45},[28,137453,137327],{"class":34},[28,137455,137346],{"class":105},[14,137457,137458],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22075,137460,137462],{"id":137461},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137464,137465],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1539,137467],{"style":126467,"src":137468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[171,137470,137471],{},[174,137472,250],{},[1211,137474,137475,137478,137481,137484,137487,137490],{},[174,137476,137477],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[174,137479,137480],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[174,137482,137483],{},"语法： element::before {}",[174,137485,137486],{},"before 和 after 必须有 content 属性",[174,137488,137489],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[174,137491,137492],{},"伪元素选择器和标签选择器一样，权重为 1",[171,137494,137495],{"start":94},[174,137496,137497],{},"实例",[18,137499,137500],{"className":126611,"code":137373,"language":126613,"meta":23,"style":23},[25,137501,137502,137506,137516,137526,137540,137554,137568],{"__ignoreMap":23},[28,137503,137504],{"class":30,"line":31},[28,137505,137254],{"class":105},[28,137507,137508,137510,137512,137514],{"class":30,"line":94},[28,137509,174],{"class":51375},[28,137511,137261],{"class":2040},[28,137513,137264],{"class":34},[28,137515,137267],{"class":105},[28,137517,137518,137520,137522,137524],{"class":30,"line":109},[28,137519,174],{"class":51375},[28,137521,137274],{"class":2040},[28,137523,137277],{"class":34},[28,137525,137280],{"class":105},[28,137527,137528,137530,137532,137534,137536,137538],{"class":30,"line":125},[28,137529,174],{"class":51375},[28,137531,129525],{"class":2040},[28,137533,221],{"class":34},[28,137535,52],{"class":45},[28,137537,137293],{"class":34},[28,137539,137296],{"class":105},[28,137541,137542,137544,137546,137548,137550,137552],{"class":30,"line":131},[28,137543,174],{"class":51375},[28,137545,129525],{"class":2040},[28,137547,221],{"class":34},[28,137549,137307],{"class":45},[28,137551,137310],{"class":34},[28,137553,137313],{"class":105},[28,137555,137556,137558,137560,137562,137564,137566],{"class":30,"line":1291},[28,137557,174],{"class":51375},[28,137559,129525],{"class":2040},[28,137561,221],{"class":34},[28,137563,137324],{"class":45},[28,137565,137327],{"class":34},[28,137567,137330],{"class":105},[28,137569,137570,137572,137574,137576,137578,137580],{"class":30,"line":1297},[28,137571,174],{"class":51375},[28,137573,129525],{"class":2040},[28,137575,221],{"class":34},[28,137577,137341],{"class":45},[28,137579,137327],{"class":34},[28,137581,137346],{"class":105},[1539,137583],{"style":126467,"src":137584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[171,137586,137587],{"start":109},[174,137588,137589],{},"使用场景1",[1539,137591],{"style":126467,"src":137592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137594,137595],{},"不需要再加盒子来整红色那部分了",[18,137597,137599],{"className":126611,"code":137598,"language":126613,"meta":23,"style":23},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[25,137600,137601,137606,137615,137626,137636,137640,137649,137660,137670],{"__ignoreMap":23},[28,137602,137603],{"class":30,"line":31},[28,137604,137605],{"class":105},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[28,137607,137608,137610,137613],{"class":30,"line":94},[28,137609,51686],{"class":51375},[28,137611,137612],{"class":2040},"::before",[28,137614,15649],{"class":34},[28,137616,137617,137620,137622,137624],{"class":30,"line":109},[28,137618,137619],{"class":45},"  content",[28,137621,51512],{"class":34},[28,137623,7729],{"class":320},[28,137625,1367],{"class":34},[28,137627,137628,137630,137632,137634],{"class":30,"line":125},[28,137629,128227],{"class":45},[28,137631,51512],{"class":34},[28,137633,60944],{"class":45},[28,137635,1367],{"class":34},[28,137637,137638],{"class":30,"line":131},[28,137639,1642],{"class":34},[28,137641,137642,137644,137647],{"class":30,"line":1291},[28,137643,51686],{"class":51375},[28,137645,137646],{"class":2040},"::after",[28,137648,15649],{"class":34},[28,137650,137651,137653,137655,137658],{"class":30,"line":1297},[28,137652,137619],{"class":45},[28,137654,51512],{"class":34},[28,137656,137657],{"class":320},"\"→\"",[28,137659,1367],{"class":34},[28,137661,137662,137664,137666,137668],{"class":30,"line":1388},[28,137663,70980],{"class":45},[28,137665,51512],{"class":34},[28,137667,62145],{"class":45},[28,137669,1367],{"class":34},[28,137671,137672],{"class":30,"line":1394},[28,137673,1642],{"class":34},[1539,137675],{"style":126467,"src":137676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137678,137679],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1539,137681],{"style":126467,"src":137682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137684,137685],{},"但是在引用时需要先转义一下",[14,137687,137688],{},"content='\\e930'",[171,137690,137691],{"start":125},[174,137692,137693],{},"使用场景2",[14,137695,137696],{},"仿土豆效果",[14,137698,137699],{},"通过使用伪元素选择器可以减少body中盒子的数量",[18,137701,137702],{"className":126611,"code":137598,"language":126613,"meta":23,"style":23},[25,137703,137704,137708,137716,137726,137736,137740,137748,137758,137768],{"__ignoreMap":23},[28,137705,137706],{"class":30,"line":31},[28,137707,137605],{"class":105},[28,137709,137710,137712,137714],{"class":30,"line":94},[28,137711,51686],{"class":51375},[28,137713,137612],{"class":2040},[28,137715,15649],{"class":34},[28,137717,137718,137720,137722,137724],{"class":30,"line":109},[28,137719,137619],{"class":45},[28,137721,51512],{"class":34},[28,137723,7729],{"class":320},[28,137725,1367],{"class":34},[28,137727,137728,137730,137732,137734],{"class":30,"line":125},[28,137729,128227],{"class":45},[28,137731,51512],{"class":34},[28,137733,60944],{"class":45},[28,137735,1367],{"class":34},[28,137737,137738],{"class":30,"line":131},[28,137739,1642],{"class":34},[28,137741,137742,137744,137746],{"class":30,"line":1291},[28,137743,51686],{"class":51375},[28,137745,137646],{"class":2040},[28,137747,15649],{"class":34},[28,137749,137750,137752,137754,137756],{"class":30,"line":1297},[28,137751,137619],{"class":45},[28,137753,51512],{"class":34},[28,137755,137657],{"class":320},[28,137757,1367],{"class":34},[28,137759,137760,137762,137764,137766],{"class":30,"line":1388},[28,137761,70980],{"class":45},[28,137763,51512],{"class":34},[28,137765,62145],{"class":45},[28,137767,1367],{"class":34},[28,137769,137770],{"class":30,"line":1394},[28,137771,1642],{"class":34},[1539,137773],{"style":126467,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[171,137776,137777],{"start":131},[174,137778,137779],{},"使用场景3",[14,137781,137782],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[18,137784,137786],{"className":126611,"code":137785,"language":126613,"meta":23,"style":23},".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",[25,137787,137788,137794,137804,137808,137812,137816,137824,137834,137844,137848,137856,137866,137876],{"__ignoreMap":23},[28,137789,137790,137792],{"class":30,"line":31},[28,137791,130459],{"class":2040},[28,137793,15649],{"class":34},[28,137795,137796,137798,137800,137802],{"class":30,"line":94},[28,137797,131091],{"class":45},[28,137799,51512],{"class":34},[28,137801,23813],{"class":45},[28,137803,1367],{"class":34},[28,137805,137806],{"class":30,"line":109},[28,137807,1642],{"class":34},[28,137809,137810],{"class":30,"line":125},[28,137811,136072],{"class":34},[28,137813,137814],{"class":30,"line":131},[28,137815,137605],{"class":105},[28,137817,137818,137820,137822],{"class":30,"line":1291},[28,137819,51686],{"class":51375},[28,137821,137612],{"class":2040},[28,137823,15649],{"class":34},[28,137825,137826,137828,137830,137832],{"class":30,"line":1297},[28,137827,137619],{"class":45},[28,137829,51512],{"class":34},[28,137831,7729],{"class":320},[28,137833,1367],{"class":34},[28,137835,137836,137838,137840,137842],{"class":30,"line":1388},[28,137837,128227],{"class":45},[28,137839,51512],{"class":34},[28,137841,60944],{"class":45},[28,137843,1367],{"class":34},[28,137845,137846],{"class":30,"line":1394},[28,137847,1642],{"class":34},[28,137849,137850,137852,137854],{"class":30,"line":1406},[28,137851,51686],{"class":51375},[28,137853,137646],{"class":2040},[28,137855,15649],{"class":34},[28,137857,137858,137860,137862,137864],{"class":30,"line":1689},[28,137859,137619],{"class":45},[28,137861,51512],{"class":34},[28,137863,137657],{"class":320},[28,137865,1367],{"class":34},[28,137867,137868,137870,137872,137874],{"class":30,"line":1694},[28,137869,70980],{"class":45},[28,137871,51512],{"class":34},[28,137873,62145],{"class":45},[28,137875,1367],{"class":34},[28,137877,137878],{"class":30,"line":1700},[28,137879,1642],{"class":34},[14,137881,137882],{},"div {\nmargin: 0 auto;\n}",[18,137884,137887],{"className":137885,"code":137886,"language":5264},[5262],"\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",[25,137888,137886],{"__ignoreMap":23},[14,137890,137891],{},"如果想让多个元素都发生变化",[14,137893,137894],{},"不能如下操作：",[14,137896,137897],{},"transition: width 2s ease 0.5s;",[14,137899,137900],{},"transition: height 2s ease 0.5s;不对！！！",[14,137902,137903],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137905,137906],{},"使用如下：加逗号隔开",[14,137908,137909],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137911,137912],{},"transition all 2s ease;",[188,137914,137916],{"id":137915},"_1426-过渡练习","14.2.6 过渡练习",[171,137918,137919],{},[174,137920,137921],{},"进度条",[1539,137923],{"style":126467,"src":137924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[18,137926,137928],{"className":126611,"code":137927,"language":126613,"meta":23,"style":23},"div {\n  transition: all 0.3s ease;\n}\n",[25,137929,137930,137936,137954],{"__ignoreMap":23},[28,137931,137932,137934],{"class":30,"line":31},[28,137933,51686],{"class":51375},[28,137935,15649],{"class":34},[28,137937,137938,137941,137943,137945,137948,137950,137952],{"class":30,"line":94},[28,137939,137940],{"class":45},"  transition",[28,137942,51512],{"class":34},[28,137944,28199],{"class":45},[28,137946,137947],{"class":45}," 0.3",[28,137949,905],{"class":38},[28,137951,78755],{"class":45},[28,137953,1367],{"class":34},[28,137955,137956],{"class":30,"line":109},[28,137957,1642],{"class":34},[171,137959,137960],{"start":94},[174,137961,137962],{},"小米logo",[14,137964,137965],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[18,137967,137969],{"className":126611,"code":137968,"language":126613,"meta":23,"style":23},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[25,137970,137971,137976,137982,137998,138003],{"__ignoreMap":23},[28,137972,137973],{"class":30,"line":31},[28,137974,137975],{"class":105},"\u002F* CSS3 过渡 *\u002F\n",[28,137977,137978,137980],{"class":30,"line":94},[28,137979,51686],{"class":51375},[28,137981,15649],{"class":34},[28,137983,137984,137986,137988,137990,137992,137994,137996],{"class":30,"line":109},[28,137985,137940],{"class":45},[28,137987,51512],{"class":34},[28,137989,28199],{"class":45},[28,137991,137947],{"class":45},[28,137993,905],{"class":38},[28,137995,78755],{"class":45},[28,137997,1367],{"class":34},[28,137999,138000],{"class":30,"line":125},[28,138001,138002],{"class":105},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[28,138004,138005],{"class":30,"line":131},[28,138006,1642],{"class":34},[14,138008,138009],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[136,138011,138012],{},"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":23,"searchDepth":94,"depth":94,"links":138014},[138015,138020],{"id":136345,"depth":94,"text":136346,"children":138016},[138017,138018,138019],{"id":136349,"depth":109,"text":136350},{"id":136426,"depth":109,"text":136427},{"id":136757,"depth":109,"text":136758},{"id":137048,"depth":94,"text":137049,"children":138021},[138022,138023],{"id":137052,"depth":109,"text":137053},{"id":137915,"depth":109,"text":137916},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136337,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138030,"title":138031,"body":138032,"description":141,"extension":142,"meta":139776,"navigation":144,"path":139777,"seo":139778,"stem":139779,"__hash__":139780},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138033,"toc":139757},[138034,138037,138041,138044,138050,138056,138060,138062,138065,138068,138071,138074,138077,138080,138083,138087,138091,138094,138097,138100,138104,138107,138110,138115,138118,138121,138124,138128,138131,138140,138143,138146,138150,138153,138156,138161,138168,138182,138190,138197,138202,138205,138208,138211,138218,138222,138228,138234,138237,138240,138245,138251,138253,138261,138266,138269,138275,138277,138282,138287,138290,138292,138297,138300,138305,138310,138344,138348,138352,138355,138359,138362,138448,138451,138488,138491,138527,138531,138536,138549,138603,138605,138633,138635,138663,138669,138683,138685,138729,138731,138775,138778,138785,138796,138798,138825,138827,138853,138860,138876,138878,138972,138974,139068,139075,139078,139083,139089,139163,139166,139168,139204,139206,139242,139245,139252,139271,139274,139277,139279,139304,139306,139330,139333,139336,139366,139370,139373,139436,139438,139504,139506,139570,139573,139605,139607,139633,139635,139661,139664,139695,139697,139723,139725,139751,139754],[10,138035,138031],{"id":138036},"_15-品优购项目上篇-搭建与公共模块",[159,138038,138040],{"id":138039},"_151-项目规划","15.1 项目规划",[1539,138042],{"style":126467,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138045,138046,138049],{},[365,138047,138048],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138051,138052,138055],{},[365,138053,138054],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[159,138057,138059],{"id":138058},"_152-项目介绍","15.2 项目介绍",[14,138061,138048],{},[1539,138063],{"style":126467,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138066,138067],{},"主页：",[1539,138069],{"style":126467,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138072,138073],{},"列表页：",[1539,138075],{"style":126467,"src":138076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138078,138079],{},"注册页：",[1539,138081],{"style":126467,"src":138082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[159,138084,138086],{"id":138085},"_153-项目搭建工作","15.3 项目搭建工作",[188,138088,138090],{"id":138089},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1539,138092],{"style":126467,"src":138093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138095,138096],{},"经常更换的图片要放到upload文件夹中",[14,138098,138099],{},"不经常换的放到images文件夹中",[188,138101,138103],{"id":138102},"_1532-创建文件如下","15.3.2 创建文件如下",[1539,138105],{"style":126467,"src":138106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1539,138108],{"style":126467,"src":138109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138111,138112],{},[365,138113,138114],{},"初始化样式：",[14,138116,138117],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138119,138120],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138122,138123],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[188,138125,138127],{"id":138126},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138129,138130],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138132,138133,138134,138139],{},"这里最典型的应用就是 ",[365,138135,138136],{},[25,138137,138138],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1539,138141],{"style":126467,"src":138142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138144,138145],{},"通过link方法来引入",[188,138147,138149],{"id":138148},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1539,138151],{"style":126467,"src":138152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138154,138155],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[171,138157,138158],{},[174,138159,138160],{},"制作favicon图标",[14,138162,138163,138164,138167],{},"①把品优购图标切成 ",[25,138165,138166],{},"png"," 图片",[14,138169,138170,138171,138173,138174,138177,138178],{},"②把 ",[25,138172,138166],{}," 图片转换为 ",[25,138175,138176],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[35,138179,138180],{"href":138180,"rel":138181},"http:\u002F\u002Fwww.bitbug.net\u002F",[23942],[171,138183,138184,138187],{"start":94},[174,138185,138186],{},"favicon图标放到网站根目录下",[174,138188,138189],{},"HTML页面引入favicon",[14,138191,138192,138193,138196],{},"在html 页面里面的 ",[25,138194,138195],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138198,138199],{},[25,138200,138201],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138203,138204],{},"复制这行代码或者在生成这个的网站进行复制",[1539,138206],{"style":126467,"src":138207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138209,138210],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138212,138213,138214],{},"例如:",[35,138215,138216],{"href":138216,"rel":138217},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23942],[188,138219,138221],{"id":138220},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138223,138224,138227],{},[365,138225,138226],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138229,138230,138233],{},[365,138231,138232],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138235,138236],{},"页面必须有三个标签用来符合 SEO 优化",[1539,138238],{"style":126467,"src":138239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[171,138241,138242],{},[174,138243,138244],{},"title网站标题",[14,138246,138247,138250],{},[365,138248,138249],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138252,68865],{},[1211,138254,138255,138258],{},[174,138256,138257],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[174,138259,138260],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[171,138262,138263],{"start":94},[174,138264,138265],{},"description网站描述",[14,138267,138268],{},"简要说明我们网站主要是做什么的",[14,138270,138271,138274],{},[365,138272,138273],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138276,68865],{},[14,138278,138279],{},[25,138280,138281],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[171,138283,138284],{"start":109},[174,138285,138286],{},"keywords关键词",[14,138288,138289],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138291,68865],{},[14,138293,138294],{},[25,138295,138296],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138298,138299],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138301,138302],{},[365,138303,138304],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[171,138306,138307],{"start":125},[174,138308,138309],{},"代码总结",[18,138311,138312],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,138313,138314,138318,138332,138336],{"__ignoreMap":23},[28,138315,138316],{"class":30,"line":31},[28,138317,130722],{"class":105},[28,138319,138320,138322,138324,138326,138328,138330],{"class":30,"line":94},[28,138321,99],{"class":34},[28,138323,51686],{"class":51375},[28,138325,53561],{"class":2040},[28,138327,39],{"class":34},[28,138329,130735],{"class":320},[28,138331,51382],{"class":34},[28,138333,138334],{"class":30,"line":109},[28,138335,130742],{"class":34},[28,138337,138338,138340,138342],{"class":30,"line":125},[28,138339,51860],{"class":34},[28,138341,51686],{"class":51375},[28,138343,51382],{"class":34},[159,138345,138347],{"id":138346},"_154-项目公共部分制作","15.4 项目公共部分制作",[188,138349,138351],{"id":138350},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1539,138353],{"style":126467,"src":138354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[188,138356,138358],{"id":138357},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138360,138361],{},"布局思路：",[1211,138363,138364,138367,138370,138392,138425],{},[174,138365,138366],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[174,138368,138369],{},"里面包含版心的盒子",[174,138371,138372,138373],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1211,138374,138375,138383,138389],{},[174,138376,138377,138378,21577,138380,138382],{},"1 号盒子 里面包含一个",[25,138379,1211],{},[25,138381,1211],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[174,138384,138385,138386,138388],{},"里面的内容是水平排列，所以需要给",[25,138387,174],{},"设置浮动",[174,138390,138391],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[174,138393,138394,138395],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1211,138396,138397,138411,138416],{},[174,138398,138399,138400,21577,138402,138404,138405,138407,138408,138410],{},"2 号盒子 里面包含一个",[25,138401,1211],{},[25,138403,1211],{},"包裹",[25,138406,174],{},"，中间的",[25,138409,1126],{},"可以用样式去设置，也可以用字符 |",[174,138412,138413,138414,138388],{},"里面内容水平排列，给",[25,138415,174],{},[174,138417,138418,138419,138421,138422,138424],{},"找到里面所有偶数的 ",[25,138420,174],{}," 设置样式（偶数的 ",[25,138423,174],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[174,138426,138427,138428],{},"需要用到字体图标",[1211,138429,138430,138436,138439,138442,138445],{},[174,138431,138432,138433],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[25,138434,138435],{},"arrow-icon",[174,138437,138438],{},"先要引入字体图片的资源",[174,138440,138441],{},"在样式里面利用 font-face 来进行声明",[174,138443,138444],{},"在伪元素的 content属性设置 图标的编码",[174,138446,138447],{},"给伪元素设置font-family属性",[14,138449,138450],{},"结构实例代码：",[18,138452,138454],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},"div::before {\n  content: \"\";\n  display: block;\n}\n",[25,138455,138456,138464,138474,138484],{"__ignoreMap":23},[28,138457,138458,138460,138462],{"class":30,"line":31},[28,138459,51686],{"class":51375},[28,138461,137612],{"class":2040},[28,138463,15649],{"class":34},[28,138465,138466,138468,138470,138472],{"class":30,"line":94},[28,138467,137619],{"class":45},[28,138469,51512],{"class":34},[28,138471,7729],{"class":320},[28,138473,1367],{"class":34},[28,138475,138476,138478,138480,138482],{"class":30,"line":109},[28,138477,128227],{"class":45},[28,138479,51512],{"class":34},[28,138481,60944],{"class":45},[28,138483,1367],{"class":34},[28,138485,138486],{"class":30,"line":125},[28,138487,1642],{"class":34},[14,138489,138490],{},"样式实例代码：",[18,138492,138493],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,138494,138495,138503,138513,138523],{"__ignoreMap":23},[28,138496,138497,138499,138501],{"class":30,"line":31},[28,138498,51686],{"class":51375},[28,138500,137612],{"class":2040},[28,138502,15649],{"class":34},[28,138504,138505,138507,138509,138511],{"class":30,"line":94},[28,138506,137619],{"class":45},[28,138508,51512],{"class":34},[28,138510,7729],{"class":320},[28,138512,1367],{"class":34},[28,138514,138515,138517,138519,138521],{"class":30,"line":109},[28,138516,128227],{"class":45},[28,138518,51512],{"class":34},[28,138520,60944],{"class":45},[28,138522,1367],{"class":34},[28,138524,138525],{"class":30,"line":125},[28,138526,1642],{"class":34},[188,138528,138530],{"id":138529},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1211,138532,138533],{},[174,138534,138535],{},"header 盒子必须要有高度",[14,138537,138538,138539,138541,138542],{},"1 号盒子是 ",[25,138540,131623],{}," 标志定位，在正常开发过程中， ",[365,138543,138544,138545,138548],{},"logo的布局其实是有讲究的，需要进行 ",[25,138546,138547],{},"logoSEO","的优化 （★★★）",[1211,138550,138551,138559,138567,138594],{},[174,138552,138553,138555,138556,138558],{},[25,138554,131623],{}," 里面首先放一个 ",[25,138557,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[174,138560,138561,138563,138564,138566],{},[25,138562,10],{}," 里面再放一个链接，可以返回首页的，把 ",[25,138565,131623],{}," 的背景图片给链接即可",[174,138568,138569,138570],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1211,138571,138572,138587],{},[174,138573,138574,138575,138578,138579,138582,138583,138586],{},"方法1：",[25,138576,138577],{},"text-indent"," 移到盒子外面（",[25,138580,138581],{},"text-indent: -9999px",") ，然后 ",[25,138584,138585],{},"overflow:hidden"," ，淘宝的做法",[174,138588,138589,138590,138593],{},"方法2：直接给 ",[25,138591,138592],{},"font-size: 0;"," 就看不到文字了，京东的做法",[174,138595,138596,138597,138599,138600,138602],{},"最后给链接一个 ",[25,138598,51482],{}," 属性，这样鼠标放到 ",[25,138601,131623],{}," 上就可以看到提示文字了",[14,138604,138450],{},[18,138606,138607],{"className":127358,"code":131844,"language":127360,"meta":23,"style":23},[25,138608,138609],{"__ignoreMap":23},[28,138610,138611,138613,138615,138617,138619,138621,138623,138625,138627,138629,138631],{"class":30,"line":31},[28,138612,99],{"class":34},[28,138614,35],{"class":51375},[28,138616,61132],{"class":2040},[28,138618,39],{"class":34},[28,138620,131859],{"class":320},[28,138622,131862],{"class":2040},[28,138624,39],{"class":34},[28,138626,131867],{"class":320},[28,138628,131870],{"class":34},[28,138630,35],{"class":51375},[28,138632,51382],{"class":34},[14,138634,138490],{},[18,138636,138637],{"className":127358,"code":131844,"language":127360,"meta":23,"style":23},[25,138638,138639],{"__ignoreMap":23},[28,138640,138641,138643,138645,138647,138649,138651,138653,138655,138657,138659,138661],{"class":30,"line":31},[28,138642,99],{"class":34},[28,138644,35],{"class":51375},[28,138646,61132],{"class":2040},[28,138648,39],{"class":34},[28,138650,131859],{"class":320},[28,138652,131862],{"class":2040},[28,138654,39],{"class":34},[28,138656,131867],{"class":320},[28,138658,131870],{"class":34},[28,138660,35],{"class":51375},[28,138662,51382],{"class":34},[14,138664,138665,138666,138668],{},"2 号盒子是 ",[25,138667,131636],{}," 搜索模块定位",[1211,138670,138671,138674,138677,138680],{},[174,138672,138673],{},"search盒子利用定位的方式放在对应的位置",[174,138675,138676],{},"search盒子设置绝对定位，header盒子设置相对定位",[174,138678,138679],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[174,138681,138682],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138684,138450],{},[18,138686,138687],{"className":126611,"code":131931,"language":126613,"meta":23,"style":23},[25,138688,138689,138711,138715,138725],{"__ignoreMap":23},[28,138690,138691,138693,138695,138697,138699,138701,138703,138705,138707,138709],{"class":30,"line":31},[28,138692,51686],{"class":51375},[28,138694,12512],{"class":34},[28,138696,14],{"class":51375},[28,138698,12512],{"class":34},[28,138700,10],{"class":51375},[28,138702,12512],{"class":34},[28,138704,1211],{"class":51375},[28,138706,12512],{"class":34},[28,138708,174],{"class":51375},[28,138710,15649],{"class":34},[28,138712,138713],{"class":30,"line":94},[28,138714,131960],{"class":105},[28,138716,138717,138719,138721,138723],{"class":30,"line":109},[28,138718,128227],{"class":45},[28,138720,51512],{"class":34},[28,138722,60944],{"class":45},[28,138724,1367],{"class":34},[28,138726,138727],{"class":30,"line":125},[28,138728,1642],{"class":34},[14,138730,138490],{},[18,138732,138733],{"className":126611,"code":131931,"language":126613,"meta":23,"style":23},[25,138734,138735,138757,138761,138771],{"__ignoreMap":23},[28,138736,138737,138739,138741,138743,138745,138747,138749,138751,138753,138755],{"class":30,"line":31},[28,138738,51686],{"class":51375},[28,138740,12512],{"class":34},[28,138742,14],{"class":51375},[28,138744,12512],{"class":34},[28,138746,10],{"class":51375},[28,138748,12512],{"class":34},[28,138750,1211],{"class":51375},[28,138752,12512],{"class":34},[28,138754,174],{"class":51375},[28,138756,15649],{"class":34},[28,138758,138759],{"class":30,"line":94},[28,138760,131960],{"class":105},[28,138762,138763,138765,138767,138769],{"class":30,"line":109},[28,138764,128227],{"class":45},[28,138766,51512],{"class":34},[28,138768,60944],{"class":45},[28,138770,1367],{"class":34},[28,138772,138773],{"class":30,"line":125},[28,138774,1642],{"class":34},[14,138776,138777],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138779,138780,138781,138784],{},"3 号盒子是 ",[25,138782,138783],{},"hotwords"," 热词模块定位",[1211,138786,138787,138790,138793],{},[174,138788,138789],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[174,138791,138792],{},"给里面所有的a标签设置 左右10px的外边距",[174,138794,138795],{},"给第一个a标签设置文字变红色（#c81623）",[14,138797,138450],{},[18,138799,138801],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},"div {\n  margin: 0 auto;\n}\n",[25,138802,138803,138809,138821],{"__ignoreMap":23},[28,138804,138805,138807],{"class":30,"line":31},[28,138806,51686],{"class":51375},[28,138808,15649],{"class":34},[28,138810,138811,138813,138815,138817,138819],{"class":30,"line":94},[28,138812,70545],{"class":45},[28,138814,51512],{"class":34},[28,138816,407],{"class":45},[28,138818,51631],{"class":45},[28,138820,1367],{"class":34},[28,138822,138823],{"class":30,"line":109},[28,138824,1642],{"class":34},[14,138826,138490],{},[18,138828,138829],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,138830,138831,138837,138849],{"__ignoreMap":23},[28,138832,138833,138835],{"class":30,"line":31},[28,138834,51686],{"class":51375},[28,138836,15649],{"class":34},[28,138838,138839,138841,138843,138845,138847],{"class":30,"line":94},[28,138840,70545],{"class":45},[28,138842,51512],{"class":34},[28,138844,407],{"class":45},[28,138846,51631],{"class":45},[28,138848,1367],{"class":34},[28,138850,138851],{"class":30,"line":109},[28,138852,1642],{"class":34},[14,138854,138855,138856,138859],{},"4 号盒子是 ",[25,138857,138858],{},"shopcar"," 购物车模块",[1211,138861,138862,138867,138870,138873],{},[174,138863,123394,138864,138866],{},[25,138865,138858],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[174,138868,138869],{},"count 统计部分用绝对定位做",[174,138871,138872],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[174,138874,138875],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138877,138450],{},[18,138879,138880],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,138881,138882,138886,138900,138904,138918,138922,138936,138940,138954,138958],{"__ignoreMap":23},[28,138883,138884],{"class":30,"line":31},[28,138885,132050],{"class":105},[28,138887,138888,138890,138892,138894,138896,138898],{"class":30,"line":94},[28,138889,132055],{"class":2040},[28,138891,79882],{"class":34},[28,138893,128971],{"class":45},[28,138895,51512],{"class":34},[28,138897,132064],{"class":45},[28,138899,129541],{"class":34},[28,138901,138902],{"class":30,"line":109},[28,138903,132071],{"class":105},[28,138905,138906,138908,138910,138912,138914,138916],{"class":30,"line":125},[28,138907,132076],{"class":2040},[28,138909,79882],{"class":34},[28,138911,128971],{"class":45},[28,138913,51512],{"class":34},[28,138915,54839],{"class":45},[28,138917,129541],{"class":34},[28,138919,138920],{"class":30,"line":131},[28,138921,132091],{"class":105},[28,138923,138924,138926,138928,138930,138932,138934],{"class":30,"line":1291},[28,138925,132096],{"class":2040},[28,138927,79882],{"class":34},[28,138929,128971],{"class":45},[28,138931,51512],{"class":34},[28,138933,54906],{"class":45},[28,138935,129541],{"class":34},[28,138937,138938],{"class":30,"line":1297},[28,138939,132111],{"class":105},[28,138941,138942,138944,138946,138948,138950,138952],{"class":30,"line":1388},[28,138943,132116],{"class":2040},[28,138945,79882],{"class":34},[28,138947,128971],{"class":45},[28,138949,51512],{"class":34},[28,138951,86308],{"class":45},[28,138953,129541],{"class":34},[28,138955,138956],{"class":30,"line":1394},[28,138957,132131],{"class":105},[28,138959,138960,138962,138964,138966,138968,138970],{"class":30,"line":1406},[28,138961,132136],{"class":2040},[28,138963,79882],{"class":34},[28,138965,128971],{"class":45},[28,138967,51512],{"class":34},[28,138969,132145],{"class":45},[28,138971,129541],{"class":34},[14,138973,138490],{},[18,138975,138976],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,138977,138978,138982,138996,139000,139014,139018,139032,139036,139050,139054],{"__ignoreMap":23},[28,138979,138980],{"class":30,"line":31},[28,138981,132050],{"class":105},[28,138983,138984,138986,138988,138990,138992,138994],{"class":30,"line":94},[28,138985,132055],{"class":2040},[28,138987,79882],{"class":34},[28,138989,128971],{"class":45},[28,138991,51512],{"class":34},[28,138993,132064],{"class":45},[28,138995,129541],{"class":34},[28,138997,138998],{"class":30,"line":109},[28,138999,132071],{"class":105},[28,139001,139002,139004,139006,139008,139010,139012],{"class":30,"line":125},[28,139003,132076],{"class":2040},[28,139005,79882],{"class":34},[28,139007,128971],{"class":45},[28,139009,51512],{"class":34},[28,139011,54839],{"class":45},[28,139013,129541],{"class":34},[28,139015,139016],{"class":30,"line":131},[28,139017,132091],{"class":105},[28,139019,139020,139022,139024,139026,139028,139030],{"class":30,"line":1291},[28,139021,132096],{"class":2040},[28,139023,79882],{"class":34},[28,139025,128971],{"class":45},[28,139027,51512],{"class":34},[28,139029,54906],{"class":45},[28,139031,129541],{"class":34},[28,139033,139034],{"class":30,"line":1297},[28,139035,132111],{"class":105},[28,139037,139038,139040,139042,139044,139046,139048],{"class":30,"line":1388},[28,139039,132116],{"class":2040},[28,139041,79882],{"class":34},[28,139043,128971],{"class":45},[28,139045,51512],{"class":34},[28,139047,86308],{"class":45},[28,139049,129541],{"class":34},[28,139051,139052],{"class":30,"line":1394},[28,139053,132131],{"class":105},[28,139055,139056,139058,139060,139062,139064,139066],{"class":30,"line":1406},[28,139057,132136],{"class":2040},[28,139059,79882],{"class":34},[28,139061,128971],{"class":45},[28,139063,51512],{"class":34},[28,139065,132145],{"class":45},[28,139067,129541],{"class":34},[188,139069,139071,139072,139074],{"id":139070},"_1544-nav导航模块制作","15.4.4 ",[25,139073,53788],{},"导航模块制作",[1539,139076],{"style":126467,"src":139077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139079,139080,139082],{},[25,139081,53788],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139084,139085,139086],{},"1 号盒子左侧浮动，",[25,139087,139088],{},"dropdown",[1211,139090,139091,139101,139109,139115,139123,139133,139141,139152],{},[174,139092,139093,139094,101077,139097,139100],{},"1号盒子有讲究，根据相关性 里面包含 ",[25,139095,139096],{},".dt",[25,139098,139099],{},".dd"," 两个盒子",[174,139102,139103,139105,139106,139108],{},[25,139104,139096],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[25,139107,139099],{}," 挤到下面去了",[174,139110,139111,139112,139114],{},"给 ",[25,139113,139099],{}," 盒子设置宽度 和 高度，以及背景颜色",[174,139116,139111,139117,139119,139120,120296],{},[25,139118,139099],{}," 盒子里面定义 无序列表 （",[25,139121,139122],{},"ul > li > a",[174,139124,139125,139126,139128,139129,139132],{},"每个 ",[25,139127,174],{}," 都有一个高度（",[25,139130,139131],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[174,139134,139111,139135,139137,139138,120296],{},[25,139136,174],{}," 里面的a设置文字大小（",[25,139139,139140],{},"14px",[174,139142,139111,139143,139145,139146,139148,139149,139151],{},[25,139144,174],{}," 设置 ",[25,139147,127772],{},"，当鼠标移入的时候，让",[25,139150,174],{},"的背景变成白色，让里面的文字变成红色",[174,139153,139154,139156,139157,139159,139160,139162],{},[25,139155,174],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[25,139158,174],{},"的右侧，那么给",[25,139161,174],{},"设置相对定位",[14,139164,139165],{},"一定要注意相关性",[14,139167,138450],{},[18,139169,139170],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,139171,139172,139180,139190,139200],{"__ignoreMap":23},[28,139173,139174,139176,139178],{"class":30,"line":31},[28,139175,51686],{"class":51375},[28,139177,137612],{"class":2040},[28,139179,15649],{"class":34},[28,139181,139182,139184,139186,139188],{"class":30,"line":94},[28,139183,137619],{"class":45},[28,139185,51512],{"class":34},[28,139187,7729],{"class":320},[28,139189,1367],{"class":34},[28,139191,139192,139194,139196,139198],{"class":30,"line":109},[28,139193,128227],{"class":45},[28,139195,51512],{"class":34},[28,139197,60944],{"class":45},[28,139199,1367],{"class":34},[28,139201,139202],{"class":30,"line":125},[28,139203,1642],{"class":34},[14,139205,138490],{},[18,139207,139208],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,139209,139210,139218,139228,139238],{"__ignoreMap":23},[28,139211,139212,139214,139216],{"class":30,"line":31},[28,139213,51686],{"class":51375},[28,139215,137612],{"class":2040},[28,139217,15649],{"class":34},[28,139219,139220,139222,139224,139226],{"class":30,"line":94},[28,139221,137619],{"class":45},[28,139223,51512],{"class":34},[28,139225,7729],{"class":320},[28,139227,1367],{"class":34},[28,139229,139230,139232,139234,139236],{"class":30,"line":109},[28,139231,128227],{"class":45},[28,139233,51512],{"class":34},[28,139235,60944],{"class":45},[28,139237,1367],{"class":34},[28,139239,139240],{"class":30,"line":125},[28,139241,1642],{"class":34},[14,139243,139244],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139246,139247,139248,139251],{},"2 号盒子左侧浮动，",[25,139249,139250],{},"navitems"," 导航栏组",[1211,139253,139254,139259,139268],{},[174,139255,139256,139257],{},"里面结构是 ",[25,139258,139122],{},[174,139260,139261,139262,139264,139265,139267],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[25,139263,35],{},"左右的",[25,139266,30959],{},"把两侧撑开",[174,139269,139270],{},"让文字垂直居中（行高等于高度）",[1539,139272],{"style":126467,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139275,139276],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139278,138450],{},[18,139280,139282],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},".box {\n  float: left;\n}\n",[25,139283,139284,139290,139300],{"__ignoreMap":23},[28,139285,139286,139288],{"class":30,"line":31},[28,139287,130459],{"class":2040},[28,139289,15649],{"class":34},[28,139291,139292,139294,139296,139298],{"class":30,"line":94},[28,139293,131091],{"class":45},[28,139295,51512],{"class":34},[28,139297,23813],{"class":45},[28,139299,1367],{"class":34},[28,139301,139302],{"class":30,"line":109},[28,139303,1642],{"class":34},[14,139305,138490],{},[18,139307,139308],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,139309,139310,139316,139326],{"__ignoreMap":23},[28,139311,139312,139314],{"class":30,"line":31},[28,139313,130459],{"class":2040},[28,139315,15649],{"class":34},[28,139317,139318,139320,139322,139324],{"class":30,"line":94},[28,139319,131091],{"class":45},[28,139321,51512],{"class":34},[28,139323,23813],{"class":45},[28,139325,1367],{"class":34},[28,139327,139328],{"class":30,"line":109},[28,139329,1642],{"class":34},[14,139331,139332],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1539,139334],{"style":126467,"src":139335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[18,139337,139338],{"className":126611,"code":130768,"language":126613,"meta":23,"style":23},[25,139339,139340,139346,139362],{"__ignoreMap":23},[28,139341,139342,139344],{"class":30,"line":31},[28,139343,51686],{"class":51375},[28,139345,15649],{"class":34},[28,139347,139348,139350,139352,139354,139356,139358,139360],{"class":30,"line":94},[28,139349,70971],{"class":45},[28,139351,51512],{"class":34},[28,139353,46],{"class":45},[28,139355,51567],{"class":38},[28,139357,51596],{"class":45},[28,139359,130003],{"class":45},[28,139361,1367],{"class":34},[28,139363,139364],{"class":30,"line":109},[28,139365,1642],{"class":34},[188,139367,139369],{"id":139368},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1539,139371],{"style":126467,"src":139372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1211,139374,139375,139380,139385],{},[174,139376,139377,139379],{},[25,139378,131814],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[174,139381,139382,139384],{},[25,139383,131814],{}," 里面有一个大的版心",[174,139386,139387,139388,139391,139392],{},"版心里面包含 1 号盒子，",[25,139389,139390],{},"mod_service"," 是服务模块，mod 是模块的意思",[1211,139393,139394,139399,139412,139428,139433],{},[174,139395,139111,139396,139398],{},[25,139397,139390],{}," 设置高度（80px）和下边框",[174,139400,139401,139402,139405,139406,139408,139409,139411],{},"在里面定义 ",[25,139403,139404],{},"ul > li"," ,每个",[25,139407,174],{}," 宽度是300px 高度是 50px，给每个",[25,139410,174],{},"设置35px的左内边距",[174,139413,139414,139415,139417,139418,139420,139421,139423,139424,18487,139426,120296],{},"在每个",[25,139416,174],{},"里面，放一个 ",[25,139419,22987],{},"（里面放图标），一个",[25,139422,51686],{},"（里面放",[25,139425,51686],{},[25,139427,14],{},[174,139429,139111,139430,139432],{},[25,139431,22987],{},"设置浮动，让h5与这个div左右排列",[174,139434,139435],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139437,138450],{},[18,139439,139441],{"className":126611,"code":139440,"language":126613,"meta":23,"style":23},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[25,139442,139443,139449,139461,139473,139500],{"__ignoreMap":23},[28,139444,139445,139447],{"class":30,"line":31},[28,139446,134368],{"class":2040},[28,139448,15649],{"class":34},[28,139450,139451,139453,139455,139457,139459],{"class":30,"line":94},[28,139452,70643],{"class":45},[28,139454,51512],{"class":34},[28,139456,102],{"class":45},[28,139458,51567],{"class":38},[28,139460,1367],{"class":34},[28,139462,139463,139465,139467,139469,139471],{"class":30,"line":109},[28,139464,70863],{"class":45},[28,139466,51512],{"class":34},[28,139468,102],{"class":45},[28,139470,51567],{"class":38},[28,139472,1367],{"class":34},[28,139474,139475,139477,139479,139481,139483,139485,139487,139489,139492,139494,139496,139498],{"class":30,"line":125},[28,139476,70686],{"class":45},[28,139478,51512],{"class":34},[28,139480,61801],{"class":45},[28,139482,221],{"class":34},[28,139484,134407],{"class":5293},[28,139486,13791],{"class":34},[28,139488,61811],{"class":45},[28,139490,139491],{"class":45}," -10",[28,139493,51567],{"class":38},[28,139495,134426],{"class":45},[28,139497,51567],{"class":38},[28,139499,1367],{"class":34},[28,139501,139502],{"class":30,"line":131},[28,139503,1642],{"class":34},[14,139505,138490],{},[18,139507,139508],{"className":126611,"code":139440,"language":126613,"meta":23,"style":23},[25,139509,139510,139516,139528,139540,139566],{"__ignoreMap":23},[28,139511,139512,139514],{"class":30,"line":31},[28,139513,134368],{"class":2040},[28,139515,15649],{"class":34},[28,139517,139518,139520,139522,139524,139526],{"class":30,"line":94},[28,139519,70643],{"class":45},[28,139521,51512],{"class":34},[28,139523,102],{"class":45},[28,139525,51567],{"class":38},[28,139527,1367],{"class":34},[28,139529,139530,139532,139534,139536,139538],{"class":30,"line":109},[28,139531,70863],{"class":45},[28,139533,51512],{"class":34},[28,139535,102],{"class":45},[28,139537,51567],{"class":38},[28,139539,1367],{"class":34},[28,139541,139542,139544,139546,139548,139550,139552,139554,139556,139558,139560,139562,139564],{"class":30,"line":125},[28,139543,70686],{"class":45},[28,139545,51512],{"class":34},[28,139547,61801],{"class":45},[28,139549,221],{"class":34},[28,139551,134407],{"class":5293},[28,139553,13791],{"class":34},[28,139555,61811],{"class":45},[28,139557,139491],{"class":45},[28,139559,51567],{"class":38},[28,139561,134426],{"class":45},[28,139563,51567],{"class":38},[28,139565,1367],{"class":34},[28,139567,139568],{"class":30,"line":131},[28,139569,1642],{"class":34},[14,139571,139572],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1211,139574,139575,139578,139584,139590,139602],{},[174,139576,139577],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[174,139579,139580,139581,120296],{},"里面的布局利用 自定义列表来实现（",[25,139582,139583],{},"dl > dt + dd",[174,139585,139111,139586,139589],{},[25,139587,139588],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[174,139591,139111,139592,139595,139596,18487,139598,139601],{},[25,139593,139594],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[25,139597,139594],{},[25,139599,139600],{},"dd","之间有些距离",[174,139603,139604],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139606,138450],{},[18,139608,139609],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,139610,139611,139617,139629],{"__ignoreMap":23},[28,139612,139613,139615],{"class":30,"line":31},[28,139614,51686],{"class":51375},[28,139616,15649],{"class":34},[28,139618,139619,139621,139623,139625,139627],{"class":30,"line":94},[28,139620,70545],{"class":45},[28,139622,51512],{"class":34},[28,139624,407],{"class":45},[28,139626,51631],{"class":45},[28,139628,1367],{"class":34},[28,139630,139631],{"class":30,"line":109},[28,139632,1642],{"class":34},[14,139634,138490],{},[18,139636,139637],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,139638,139639,139645,139657],{"__ignoreMap":23},[28,139640,139641,139643],{"class":30,"line":31},[28,139642,51686],{"class":51375},[28,139644,15649],{"class":34},[28,139646,139647,139649,139651,139653,139655],{"class":30,"line":94},[28,139648,70545],{"class":45},[28,139650,51512],{"class":34},[28,139652,407],{"class":45},[28,139654,51631],{"class":45},[28,139656,1367],{"class":34},[28,139658,139659],{"class":30,"line":109},[28,139660,1642],{"class":34},[14,139662,139663],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1211,139665,139666,139675,139678,139689],{},[174,139667,139668,139669,139671,139672,139674],{},"分为上下两块，上面是 ",[25,139670,131831],{}," 友情链接，下面是 ",[25,139673,131824],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[174,139676,139677],{},"把内容分别复制到相应模块中",[174,139679,139111,139680,139682,139683,139685,139686,139688],{},[25,139681,131831],{}," 设置 15px 的下外边距，给",[25,139684,131831],{}," 里面 的 ",[25,139687,35],{}," 标签设置 左右 3px 的外边距",[174,139690,139691,139692,139694],{},"给",[25,139693,131824],{}," 设置 20px 的行高",[14,139696,138450],{},[18,139698,139699],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,139700,139701,139707,139719],{"__ignoreMap":23},[28,139702,139703,139705],{"class":30,"line":31},[28,139704,51686],{"class":51375},[28,139706,15649],{"class":34},[28,139708,139709,139711,139713,139715,139717],{"class":30,"line":94},[28,139710,70545],{"class":45},[28,139712,51512],{"class":34},[28,139714,407],{"class":45},[28,139716,51631],{"class":45},[28,139718,1367],{"class":34},[28,139720,139721],{"class":30,"line":109},[28,139722,1642],{"class":34},[14,139724,138490],{},[18,139726,139727],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,139728,139729,139735,139747],{"__ignoreMap":23},[28,139730,139731,139733],{"class":30,"line":31},[28,139732,51686],{"class":51375},[28,139734,15649],{"class":34},[28,139736,139737,139739,139741,139743,139745],{"class":30,"line":94},[28,139738,70545],{"class":45},[28,139740,51512],{"class":34},[28,139742,407],{"class":45},[28,139744,51631],{"class":45},[28,139746,1367],{"class":34},[28,139748,139749],{"class":30,"line":109},[28,139750,1642],{"class":34},[14,139752,139753],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[136,139755,139756],{},"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":23,"searchDepth":94,"depth":94,"links":139758},[139759,139760,139761,139768],{"id":138039,"depth":94,"text":138040},{"id":138058,"depth":94,"text":138059},{"id":138085,"depth":94,"text":138086,"children":139762},[139763,139764,139765,139766,139767],{"id":138089,"depth":109,"text":138090},{"id":138102,"depth":109,"text":138103},{"id":138126,"depth":109,"text":138127},{"id":138148,"depth":109,"text":138149},{"id":138220,"depth":109,"text":138221},{"id":138346,"depth":94,"text":138347,"children":139769},[139770,139771,139772,139773,139775],{"id":138350,"depth":109,"text":138351},{"id":138357,"depth":109,"text":138358},{"id":138529,"depth":109,"text":138530},{"id":139070,"depth":109,"text":139774},"15.4.4 nav导航模块制作",{"id":139368,"depth":109,"text":139369},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138031,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139782,"title":139783,"body":139784,"description":141,"extension":142,"meta":142186,"navigation":144,"path":142187,"seo":142188,"stem":142189,"__hash__":142190},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139785,"toc":142163},[139786,139789,139793,139797,139809,139812,139815,139818,139829,139831,139855,139857,139881,139886,139889,139891,139927,139929,139965,139968,139973,139976,139979,139982,140012,140019,140022,140032,140034,140068,140071,140105,140111,140128,140130,140166,140168,140204,140209,140234,140236,140262,140264,140288,140295,140298,140362,140364,140406,140408,140448,140455,140460,140462,140492,140494,140524,140528,140531,140538,140550,140552,140578,140580,140604,140607,140609,140633,140639,140649,140651,140681,140683,140713,140720,140761,140763,140799,140801,140837,140841,140844,140847,140850,140856,140861,140864,140887,140890,140914,140917,140941,140946,140949,140952,140955,140958,140961,141035,141037,141067,141069,141099,141102,141105,141137,141141,141145,141159,141168,141171,141176,141178,141272,141274,141368,141391,141393,141417,141419,141443,141450,141453,141463,141465,141489,141494,141502,141504,141534,141539,141579,141581,141607,141609,141635,141639,141642,141647,141650,141654,141662,141669,141677,141679,141709,141711,141741,141749,141752,141755,141757,141787,141789,141819,141822,141827,141829,141853,141855,141879,141882,141967,141969,141993,141995,142019,142023,142025,142049,142051,142085,142089,142103,142106,142111,142114,142119,142122,142152,142160],[10,139787,139783],{"id":139788},"_16-品优购项目下篇-主体与页面开发",[159,139790,139792],{"id":139791},"_161-项目主体模块制作","16.1 项目主体模块制作",[188,139794,139796],{"id":139795},"_1611-首页制作","16.1.1 首页制作",[14,139798,139799,139801,139802,139804,139805,139808],{},[365,139800,102117],{}," 主体模块是 ",[365,139803,74133],{}," 里面专有的，注意需要新的样式文件 ",[365,139806,139807],{},"index.css，"," 就不要写在common.css中了",[1539,139810],{"style":126467,"src":139811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1539,139813],{"style":126467,"src":139814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139816,139817],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1211,139819,139820,139823,139826],{},[174,139821,139822],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[174,139824,139825],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[174,139827,139828],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139830,138450],{},[18,139832,139833],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,139834,139835,139841,139851],{"__ignoreMap":23},[28,139836,139837,139839],{"class":30,"line":31},[28,139838,130459],{"class":2040},[28,139840,15649],{"class":34},[28,139842,139843,139845,139847,139849],{"class":30,"line":94},[28,139844,131091],{"class":45},[28,139846,51512],{"class":34},[28,139848,23813],{"class":45},[28,139850,1367],{"class":34},[28,139852,139853],{"class":30,"line":109},[28,139854,1642],{"class":34},[14,139856,138490],{},[18,139858,139859],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,139860,139861,139867,139877],{"__ignoreMap":23},[28,139862,139863,139865],{"class":30,"line":31},[28,139864,130459],{"class":2040},[28,139866,15649],{"class":34},[28,139868,139869,139871,139873,139875],{"class":30,"line":94},[28,139870,131091],{"class":45},[28,139872,51512],{"class":34},[28,139874,23813],{"class":45},[28,139876,1367],{"class":34},[28,139878,139879],{"class":30,"line":109},[28,139880,1642],{"class":34},[171,139882,139883],{},[174,139884,139885],{},"左侧focus模块制作",[1539,139887],{"style":126467,"src":139888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139890,138450],{},[18,139892,139893],{"className":126611,"code":127934,"language":126613,"meta":23,"style":23},[25,139894,139895,139903,139913,139923],{"__ignoreMap":23},[28,139896,139897,139899,139901],{"class":30,"line":31},[28,139898,53896],{"class":51375},[28,139900,61975],{"class":2040},[28,139902,15649],{"class":34},[28,139904,139905,139907,139909,139911],{"class":30,"line":94},[28,139906,127949],{"class":45},[28,139908,51512],{"class":34},[28,139910,54964],{"class":45},[28,139912,1367],{"class":34},[28,139914,139915,139917,139919,139921],{"class":30,"line":109},[28,139916,70873],{"class":45},[28,139918,51512],{"class":34},[28,139920,54812],{"class":45},[28,139922,1367],{"class":34},[28,139924,139925],{"class":30,"line":125},[28,139926,1642],{"class":34},[14,139928,138490],{},[18,139930,139931],{"className":126611,"code":127934,"language":126613,"meta":23,"style":23},[25,139932,139933,139941,139951,139961],{"__ignoreMap":23},[28,139934,139935,139937,139939],{"class":30,"line":31},[28,139936,53896],{"class":51375},[28,139938,61975],{"class":2040},[28,139940,15649],{"class":34},[28,139942,139943,139945,139947,139949],{"class":30,"line":94},[28,139944,127949],{"class":45},[28,139946,51512],{"class":34},[28,139948,54964],{"class":45},[28,139950,1367],{"class":34},[28,139952,139953,139955,139957,139959],{"class":30,"line":109},[28,139954,70873],{"class":45},[28,139956,51512],{"class":34},[28,139958,54812],{"class":45},[28,139960,1367],{"class":34},[28,139962,139963],{"class":30,"line":125},[28,139964,1642],{"class":34},[14,139966,139967],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[171,139969,139970],{"start":94},[174,139971,139972],{},"右侧newsflash模块制作",[1539,139974],{"style":126467,"src":139975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139977,139978],{},"右侧的模块 分为上中下三个盒子",[14,139980,139981],{},"结构代码：",[18,139983,139984],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,139985,139986],{"__ignoreMap":23},[28,139987,139988,139990,139992,139994,139996,139998,140000,140002,140004,140006,140008,140010],{"class":30,"line":31},[28,139989,99],{"class":34},[28,139991,1539],{"class":51375},[28,139993,55314],{"class":2040},[28,139995,39],{"class":34},[28,139997,134128],{"class":320},[28,139999,55322],{"class":2040},[28,140001,39],{"class":34},[28,140003,134135],{"class":320},[28,140005,134138],{"class":2040},[28,140007,39],{"class":34},[28,140009,134143],{"class":320},[28,140011,51382],{"class":34},[14,140013,140014,140015,140018],{},"1 号盒子为 ",[25,140016,140017],{},"news"," 新闻模块 高度为 165px",[1539,140020],{"style":126467,"src":140021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140023,140024,140025,140028,140029],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[25,140026,140027],{},"news-hd","，下面是 ",[25,140030,140031],{},"news-bd",[14,140033,139981],{},[18,140035,140036],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,140037,140038,140042,140056,140060],{"__ignoreMap":23},[28,140039,140040],{"class":30,"line":31},[28,140041,130722],{"class":105},[28,140043,140044,140046,140048,140050,140052,140054],{"class":30,"line":94},[28,140045,99],{"class":34},[28,140047,51686],{"class":51375},[28,140049,53561],{"class":2040},[28,140051,39],{"class":34},[28,140053,130735],{"class":320},[28,140055,51382],{"class":34},[28,140057,140058],{"class":30,"line":109},[28,140059,130742],{"class":34},[28,140061,140062,140064,140066],{"class":30,"line":125},[28,140063,51860],{"class":34},[28,140065,51686],{"class":51375},[28,140067,51382],{"class":34},[14,140069,140070],{},"样式代码：",[18,140072,140073],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,140074,140075,140079,140093,140097],{"__ignoreMap":23},[28,140076,140077],{"class":30,"line":31},[28,140078,130722],{"class":105},[28,140080,140081,140083,140085,140087,140089,140091],{"class":30,"line":94},[28,140082,99],{"class":34},[28,140084,51686],{"class":51375},[28,140086,53561],{"class":2040},[28,140088,39],{"class":34},[28,140090,130735],{"class":320},[28,140092,51382],{"class":34},[28,140094,140095],{"class":30,"line":109},[28,140096,130742],{"class":34},[28,140098,140099,140101,140103],{"class":30,"line":125},[28,140100,51860],{"class":34},[28,140102,51686],{"class":51375},[28,140104,51382],{"class":34},[14,140106,140107,140108,140110],{},"上面是",[25,140109,140027],{},"，设置高度是 33px，设置下边框",[1211,140112,140113,140119],{},[174,140114,140115,140116,140118],{},"里面放一个",[25,140117,22987],{}," 标题",[174,140120,140121,140122,140124,140125,140127],{},"放一个a",[25,140123,102752],{},"，内容是 更多，然后让 ",[25,140126,35],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140129,139981],{},[18,140131,140132],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,140133,140134,140142,140152,140162],{"__ignoreMap":23},[28,140135,140136,140138,140140],{"class":30,"line":31},[28,140137,51686],{"class":51375},[28,140139,137612],{"class":2040},[28,140141,15649],{"class":34},[28,140143,140144,140146,140148,140150],{"class":30,"line":94},[28,140145,137619],{"class":45},[28,140147,51512],{"class":34},[28,140149,7729],{"class":320},[28,140151,1367],{"class":34},[28,140153,140154,140156,140158,140160],{"class":30,"line":109},[28,140155,128227],{"class":45},[28,140157,51512],{"class":34},[28,140159,60944],{"class":45},[28,140161,1367],{"class":34},[28,140163,140164],{"class":30,"line":125},[28,140165,1642],{"class":34},[14,140167,140070],{},[18,140169,140170],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,140171,140172,140180,140190,140200],{"__ignoreMap":23},[28,140173,140174,140176,140178],{"class":30,"line":31},[28,140175,51686],{"class":51375},[28,140177,137612],{"class":2040},[28,140179,15649],{"class":34},[28,140181,140182,140184,140186,140188],{"class":30,"line":94},[28,140183,137619],{"class":45},[28,140185,51512],{"class":34},[28,140187,7729],{"class":320},[28,140189,1367],{"class":34},[28,140191,140192,140194,140196,140198],{"class":30,"line":109},[28,140193,128227],{"class":45},[28,140195,51512],{"class":34},[28,140197,60944],{"class":45},[28,140199,1367],{"class":34},[28,140201,140202],{"class":30,"line":125},[28,140203,1642],{"class":34},[14,140205,140206,140207],{},"下面是",[25,140208,140031],{},[1211,140210,140211,140219],{},[174,140212,140213,140214,101077,140216,140218],{},"里面包含 ",[25,140215,1211],{},[25,140217,174],{}," 还有链接",[174,140220,139691,140221,140223,140224,140226,140227,140230,140231],{},[25,140222,174],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[25,140225,131277],{}," 2.设置 ",[25,140228,140229],{},"white-space: nowrap;"," 3. 设置 ",[25,140232,140233],{},"text-overflow: ellipsis;",[14,140235,139981],{},[18,140237,140239],{"className":126611,"code":140238,"language":126613,"meta":23,"style":23},"div {\n  overflow: hidden;\n}\n",[25,140240,140241,140247,140258],{"__ignoreMap":23},[28,140242,140243,140245],{"class":30,"line":31},[28,140244,51686],{"class":51375},[28,140246,15649],{"class":34},[28,140248,140249,140252,140254,140256],{"class":30,"line":94},[28,140250,140251],{"class":45},"  overflow",[28,140253,51512],{"class":34},[28,140255,61789],{"class":45},[28,140257,1367],{"class":34},[28,140259,140260],{"class":30,"line":109},[28,140261,1642],{"class":34},[14,140263,140070],{},[18,140265,140266],{"className":126611,"code":140238,"language":126613,"meta":23,"style":23},[25,140267,140268,140274,140284],{"__ignoreMap":23},[28,140269,140270,140272],{"class":30,"line":31},[28,140271,51686],{"class":51375},[28,140273,15649],{"class":34},[28,140275,140276,140278,140280,140282],{"class":30,"line":94},[28,140277,140251],{"class":45},[28,140279,51512],{"class":34},[28,140281,61789],{"class":45},[28,140283,1367],{"class":34},[28,140285,140286],{"class":30,"line":109},[28,140287,1642],{"class":34},[14,140289,140290,140291,140294],{},"2 号盒子为 ",[25,140292,140293],{},"lifeservice"," 生活服务模块 高度为 209px",[1539,140296],{"style":126467,"src":140297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1211,140299,140300,140303,140313,140337,140348],{},[174,140301,140302],{},"设置边框（左右下边框）",[174,140304,140305,140306,140309,140310,140312],{},"里面的内容 是 ",[25,140307,140308],{},"ul > 12*li","，给",[25,140311,174],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[174,140314,140315,140316],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1211,140317,140318,140323,140332],{},[174,140319,140320,140322],{},[25,140321,140293],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[174,140324,140325,140326,140328,140329,140331],{},"可以让 ",[25,140327,140293],{}," 里面的 ",[25,140330,1211],{}," 宽度为 252，就可以装的下 4 个 小 li",[174,140333,140334,140336],{},[25,140335,140293],{}," 盒子 overflow 隐藏多余的部分就可以了",[174,140338,116526,140339,140341,140342,140344,140345,140347],{},[25,140340,174],{}," 里面放一个 ",[25,140343,654],{},"（里面放图标），下面的文本用 ",[25,140346,14],{}," 标签包裹",[174,140349,139111,140350,140352,140353,140355,140356,139145,140358,140361],{},[25,140351,654],{}," 设置 24px宽和28px的高（注意 ",[25,140354,654],{}," 是行内元素， 转成行内块），给 ",[25,140357,174],{},[25,140359,140360],{},"text-align:center"," 让里面内容居中显示",[14,140363,139981],{},[18,140365,140367],{"className":126611,"code":140366,"language":126613,"meta":23,"style":23},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[25,140368,140369,140387,140392,140402],{"__ignoreMap":23},[28,140370,140371,140373,140375,140377,140379,140381,140383,140385],{"class":30,"line":31},[28,140372,28],{"class":51375},[28,140374,12512],{"class":34},[28,140376,35],{"class":51375},[28,140378,12512],{"class":34},[28,140380,23630],{"class":51375},[28,140382,12512],{"class":34},[28,140384,365],{"class":51375},[28,140386,15649],{"class":34},[28,140388,140389],{"class":30,"line":94},[28,140390,140391],{"class":105},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[28,140393,140394,140396,140398,140400],{"class":30,"line":109},[28,140395,128227],{"class":45},[28,140397,51512],{"class":34},[28,140399,128289],{"class":45},[28,140401,1367],{"class":34},[28,140403,140404],{"class":30,"line":125},[28,140405,1642],{"class":34},[14,140407,140070],{},[18,140409,140410],{"className":126611,"code":140366,"language":126613,"meta":23,"style":23},[25,140411,140412,140430,140434,140444],{"__ignoreMap":23},[28,140413,140414,140416,140418,140420,140422,140424,140426,140428],{"class":30,"line":31},[28,140415,28],{"class":51375},[28,140417,12512],{"class":34},[28,140419,35],{"class":51375},[28,140421,12512],{"class":34},[28,140423,23630],{"class":51375},[28,140425,12512],{"class":34},[28,140427,365],{"class":51375},[28,140429,15649],{"class":34},[28,140431,140432],{"class":30,"line":94},[28,140433,140391],{"class":105},[28,140435,140436,140438,140440,140442],{"class":30,"line":109},[28,140437,128227],{"class":45},[28,140439,51512],{"class":34},[28,140441,128289],{"class":45},[28,140443,1367],{"class":34},[28,140445,140446],{"class":30,"line":125},[28,140447,1642],{"class":34},[14,140449,140450,140451,140454],{},"3 号盒子为 ",[25,140452,140453],{},"bargain"," 特价商品",[1211,140456,140457],{},[174,140458,140459],{},"这个比较简单，直接插入一张图片即可",[14,140461,139981],{},[18,140463,140464],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,140465,140466],{"__ignoreMap":23},[28,140467,140468,140470,140472,140474,140476,140478,140480,140482,140484,140486,140488,140490],{"class":30,"line":31},[28,140469,99],{"class":34},[28,140471,1539],{"class":51375},[28,140473,55314],{"class":2040},[28,140475,39],{"class":34},[28,140477,134128],{"class":320},[28,140479,55322],{"class":2040},[28,140481,39],{"class":34},[28,140483,134135],{"class":320},[28,140485,134138],{"class":2040},[28,140487,39],{"class":34},[28,140489,134143],{"class":320},[28,140491,51382],{"class":34},[14,140493,140070],{},[18,140495,140496],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,140497,140498],{"__ignoreMap":23},[28,140499,140500,140502,140504,140506,140508,140510,140512,140514,140516,140518,140520,140522],{"class":30,"line":31},[28,140501,99],{"class":34},[28,140503,1539],{"class":51375},[28,140505,55314],{"class":2040},[28,140507,39],{"class":34},[28,140509,134128],{"class":320},[28,140511,55322],{"class":2040},[28,140513,39],{"class":34},[28,140515,134135],{"class":320},[28,140517,134138],{"class":2040},[28,140519,39],{"class":34},[28,140521,134143],{"class":320},[28,140523,51382],{"class":34},[188,140525,140527],{"id":140526},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1539,140529],{"style":126467,"src":140530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140532,140533,140534,140537],{},"大盒子 ",[25,140535,140536],{},"recom"," 推荐模块 recommend",[1211,140539,140540],{},[174,140541,140542,140543,140545,140546,140549],{},"给这个 ",[25,140544,140536],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[25,140547,140548],{},"#ebebeb","），设置距离上边 12px",[14,140551,139981],{},[18,140553,140555],{"className":126611,"code":140554,"language":126613,"meta":23,"style":23},"div {\n  background-color: #f0f0f0;\n}\n",[25,140556,140557,140563,140574],{"__ignoreMap":23},[28,140558,140559,140561],{"class":30,"line":31},[28,140560,51686],{"class":51375},[28,140562,15649],{"class":34},[28,140564,140565,140567,140569,140572],{"class":30,"line":94},[28,140566,70953],{"class":45},[28,140568,51512],{"class":34},[28,140570,140571],{"class":45},"#f0f0f0",[28,140573,1367],{"class":34},[28,140575,140576],{"class":30,"line":109},[28,140577,1642],{"class":34},[14,140579,140070],{},[18,140581,140582],{"className":126611,"code":140554,"language":126613,"meta":23,"style":23},[25,140583,140584,140590,140600],{"__ignoreMap":23},[28,140585,140586,140588],{"class":30,"line":31},[28,140587,51686],{"class":51375},[28,140589,15649],{"class":34},[28,140591,140592,140594,140596,140598],{"class":30,"line":94},[28,140593,70953],{"class":45},[28,140595,51512],{"class":34},[28,140597,140571],{"class":45},[28,140599,1367],{"class":34},[28,140601,140602],{"class":30,"line":109},[28,140603,1642],{"class":34},[14,140605,140606],{},"里面包含 2 个盒子， 浮动即可",[14,140608,139981],{},[18,140610,140611],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,140612,140613,140619,140629],{"__ignoreMap":23},[28,140614,140615,140617],{"class":30,"line":31},[28,140616,130459],{"class":2040},[28,140618,15649],{"class":34},[28,140620,140621,140623,140625,140627],{"class":30,"line":94},[28,140622,131091],{"class":45},[28,140624,51512],{"class":34},[28,140626,23813],{"class":45},[28,140628,1367],{"class":34},[28,140630,140631],{"class":30,"line":109},[28,140632,1642],{"class":34},[14,140634,140635,140636],{},"1 号盒子 ",[25,140637,140638],{},"recom_hd",[1211,140640,140641,140644],{},[174,140642,140643],{},"设置宽度205px，高度163px",[174,140645,140115,140646,140648],{},[25,140647,1539],{},"标签，插入图片即可",[14,140650,139981],{},[18,140652,140653],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,140654,140655],{"__ignoreMap":23},[28,140656,140657,140659,140661,140663,140665,140667,140669,140671,140673,140675,140677,140679],{"class":30,"line":31},[28,140658,99],{"class":34},[28,140660,1539],{"class":51375},[28,140662,55314],{"class":2040},[28,140664,39],{"class":34},[28,140666,134128],{"class":320},[28,140668,55322],{"class":2040},[28,140670,39],{"class":34},[28,140672,134135],{"class":320},[28,140674,134138],{"class":2040},[28,140676,39],{"class":34},[28,140678,134143],{"class":320},[28,140680,51382],{"class":34},[14,140682,140070],{},[18,140684,140685],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,140686,140687],{"__ignoreMap":23},[28,140688,140689,140691,140693,140695,140697,140699,140701,140703,140705,140707,140709,140711],{"class":30,"line":31},[28,140690,99],{"class":34},[28,140692,1539],{"class":51375},[28,140694,55314],{"class":2040},[28,140696,39],{"class":34},[28,140698,134128],{"class":320},[28,140700,55322],{"class":2040},[28,140702,39],{"class":34},[28,140704,134135],{"class":320},[28,140706,134138],{"class":2040},[28,140708,39],{"class":34},[28,140710,134143],{"class":320},[28,140712,51382],{"class":34},[14,140714,140715,140716,140719],{},"2 号盒子 ",[25,140717,140718],{},"recom_bd"," ，注意里面的小竖线",[1211,140721,140722,140733,140736,140741,140746],{},[174,140723,140724,140725,140727,140728,140730,140731],{},"右侧结构里面放 ",[25,140726,1211],{}," 包含 4个 ",[25,140729,174],{},"，每个li里面包含一个",[25,140732,1539],{},[174,140734,140735],{},"直接利用切片工具把里面的内容当成一张图片",[174,140737,139111,140738,140740],{},[25,140739,174],{}," 设置浮动",[174,140742,139111,140743,140745],{},[25,140744,1539],{}," 设置宽高，宽度 248px，高度 163px",[174,140747,140748,140749,140309,140752,140754,140755,140757,140758],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[25,140750,140751],{},"top 10px",[25,140753,174],{},"设置相对定位（注意，最后一个",[25,140756,174],{},"不用设置伪元素），可以利用 ",[25,140759,140760],{},"nth-child(-n+3){...}",[14,140762,139981],{},[18,140764,140765],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,140766,140767,140775,140785,140795],{"__ignoreMap":23},[28,140768,140769,140771,140773],{"class":30,"line":31},[28,140770,51686],{"class":51375},[28,140772,137612],{"class":2040},[28,140774,15649],{"class":34},[28,140776,140777,140779,140781,140783],{"class":30,"line":94},[28,140778,137619],{"class":45},[28,140780,51512],{"class":34},[28,140782,7729],{"class":320},[28,140784,1367],{"class":34},[28,140786,140787,140789,140791,140793],{"class":30,"line":109},[28,140788,128227],{"class":45},[28,140790,51512],{"class":34},[28,140792,60944],{"class":45},[28,140794,1367],{"class":34},[28,140796,140797],{"class":30,"line":125},[28,140798,1642],{"class":34},[14,140800,140070],{},[18,140802,140803],{"className":126611,"code":138453,"language":126613,"meta":23,"style":23},[25,140804,140805,140813,140823,140833],{"__ignoreMap":23},[28,140806,140807,140809,140811],{"class":30,"line":31},[28,140808,51686],{"class":51375},[28,140810,137612],{"class":2040},[28,140812,15649],{"class":34},[28,140814,140815,140817,140819,140821],{"class":30,"line":94},[28,140816,137619],{"class":45},[28,140818,51512],{"class":34},[28,140820,7729],{"class":320},[28,140822,1367],{"class":34},[28,140824,140825,140827,140829,140831],{"class":30,"line":109},[28,140826,128227],{"class":45},[28,140828,51512],{"class":34},[28,140830,60944],{"class":45},[28,140832,1367],{"class":34},[28,140834,140835],{"class":30,"line":125},[28,140836,1642],{"class":34},[188,140838,140840],{"id":140839},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1539,140842],{"style":126467,"src":140843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140845,140846],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140848,140849],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140851,140852,140855],{},[25,140853,140854],{},"box_hd"," 制作",[14,140857,140635,140858,140860],{},[25,140859,140854],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1539,140862],{"style":126467,"src":140863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1211,140865,140866,140871,140876,140879],{},[174,140867,140868,140870],{},[25,140869,140854],{}," 给 30px 的高度，2个像素的下边框",[174,140872,140873,140874],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[25,140875,139122],{},[174,140877,140878],{},"左侧盒左浮动，右侧盒子右浮动",[174,140880,140881,140883,140884,140886],{},[25,140882,35],{},"标签之间的距离用左右的",[25,140885,30959],{},"撑开即可",[14,140888,140889],{},"结构代码",[18,140891,140892],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,140893,140894,140900,140910],{"__ignoreMap":23},[28,140895,140896,140898],{"class":30,"line":31},[28,140897,130459],{"class":2040},[28,140899,15649],{"class":34},[28,140901,140902,140904,140906,140908],{"class":30,"line":94},[28,140903,131091],{"class":45},[28,140905,51512],{"class":34},[28,140907,23813],{"class":45},[28,140909,1367],{"class":34},[28,140911,140912],{"class":30,"line":109},[28,140913,1642],{"class":34},[14,140915,140916],{},"样式代码",[18,140918,140919],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,140920,140921,140927,140937],{"__ignoreMap":23},[28,140922,140923,140925],{"class":30,"line":31},[28,140924,130459],{"class":2040},[28,140926,15649],{"class":34},[28,140928,140929,140931,140933,140935],{"class":30,"line":94},[28,140930,131091],{"class":45},[28,140932,51512],{"class":34},[28,140934,23813],{"class":45},[28,140936,1367],{"class":34},[28,140938,140939],{"class":30,"line":109},[28,140940,1642],{"class":34},[14,140942,140943,140855],{},[25,140944,140945],{},"box_bd",[14,140947,140948],{},"2 号盒子 box_bd，不要给高度",[1539,140950],{"style":126467,"src":140951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140953,140954],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140956,140957],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140959,140960],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1211,140962,140963,140975,140991],{},[174,140964,140965,140967,140968,140971,140972,140974],{},[25,140966,140945],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[25,140969,140970],{},"tab_content","，在",[25,140973,140970],{}," 里面包裹tab选项卡对应的内容",[174,140976,140977,140978,140981,140982,140984,140985,140987,140988,140990],{},"内容被一个大盒子包裹（",[25,140979,140980],{},"tab_list_item","），里面是 ",[25,140983,1211],{}," 包裹 5个 ",[25,140986,174],{},"，每个",[25,140989,174],{},"设置对应的宽度，然后设置浮动",[174,140992,140993,140994,140996,140997,140999,141000],{},"而这5个",[25,140995,174],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[25,140998,174],{},"设置",[1211,141001,141002,141020,141023],{},[174,141003,141004,141005,141007,141008,141010,141011,141013,141014,141016,141017,141019],{},"第一个小 ",[25,141006,174],{}," 分为上下结构，上面是 ",[25,141009,1211],{}," 包裹 ",[25,141012,174],{}," ，",[25,141015,174],{},"里面包裹 ",[25,141018,35],{},"，下面插入一张图片",[174,141021,141022],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[174,141024,141025,141026,141028,141029,141031,141032,141034],{},"后面的小 ",[25,141027,174],{}," 里面先放一个",[25,141030,35],{},"标签，然后在",[25,141033,35],{},"标签里面插入图片即可",[14,141036,140889],{},[18,141038,141039],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,141040,141041],{"__ignoreMap":23},[28,141042,141043,141045,141047,141049,141051,141053,141055,141057,141059,141061,141063,141065],{"class":30,"line":31},[28,141044,99],{"class":34},[28,141046,1539],{"class":51375},[28,141048,55314],{"class":2040},[28,141050,39],{"class":34},[28,141052,134128],{"class":320},[28,141054,55322],{"class":2040},[28,141056,39],{"class":34},[28,141058,134135],{"class":320},[28,141060,134138],{"class":2040},[28,141062,39],{"class":34},[28,141064,134143],{"class":320},[28,141066,51382],{"class":34},[14,141068,140916],{},[18,141070,141071],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,141072,141073],{"__ignoreMap":23},[28,141074,141075,141077,141079,141081,141083,141085,141087,141089,141091,141093,141095,141097],{"class":30,"line":31},[28,141076,99],{"class":34},[28,141078,1539],{"class":51375},[28,141080,55314],{"class":2040},[28,141082,39],{"class":34},[28,141084,134128],{"class":320},[28,141086,55322],{"class":2040},[28,141088,39],{"class":34},[28,141090,134135],{"class":320},[28,141092,134138],{"class":2040},[28,141094,39],{"class":34},[28,141096,134143],{"class":320},[28,141098,51382],{"class":34},[14,141100,141101],{},"tab栏切换需求！！！！！！介绍：",[1539,141103],{"style":126467,"src":141104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1211,141106,141107,141115,141121,141124],{},[174,141108,141109,141112,141113],{},[25,141110,141111],{},"tab","栏的布局是 ",[25,141114,139122],{},[174,141116,141117,141118,141120],{},"有多少个",[25,141119,141111],{},"选项卡，那么对应就有多少个内容",[174,141122,141123],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[174,141125,141126,141127,141130,141131,141133,141134,141136],{},"等后面我们学习了",[25,141128,141129],{},"js","之后，我们就会配合",[25,141132,141129],{},"来实现，",[25,141135,141111],{},"栏的切换",[159,141138,141140],{"id":141139},"_162-列表制作","16.2 列表制作",[188,141142,141144],{"id":141143},"_1621-准备工作","16.2.1 准备工作",[1211,141146,141147,141150,141153,141156],{},[174,141148,141149],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[174,141151,141152],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[174,141154,141155],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[174,141157,141158],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[188,141160,141162,141163,101077,141165,141167],{"id":141161},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[25,141164,131616],{},[25,141166,53788],{}," 修改",[1539,141169],{"style":126467,"src":141170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1211,141172,141173],{},[174,141174,141175],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141177,139981],{},[18,141179,141180],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,141181,141182,141186,141200,141204,141218,141222,141236,141240,141254,141258],{"__ignoreMap":23},[28,141183,141184],{"class":30,"line":31},[28,141185,132050],{"class":105},[28,141187,141188,141190,141192,141194,141196,141198],{"class":30,"line":94},[28,141189,132055],{"class":2040},[28,141191,79882],{"class":34},[28,141193,128971],{"class":45},[28,141195,51512],{"class":34},[28,141197,132064],{"class":45},[28,141199,129541],{"class":34},[28,141201,141202],{"class":30,"line":109},[28,141203,132071],{"class":105},[28,141205,141206,141208,141210,141212,141214,141216],{"class":30,"line":125},[28,141207,132076],{"class":2040},[28,141209,79882],{"class":34},[28,141211,128971],{"class":45},[28,141213,51512],{"class":34},[28,141215,54839],{"class":45},[28,141217,129541],{"class":34},[28,141219,141220],{"class":30,"line":131},[28,141221,132091],{"class":105},[28,141223,141224,141226,141228,141230,141232,141234],{"class":30,"line":1291},[28,141225,132096],{"class":2040},[28,141227,79882],{"class":34},[28,141229,128971],{"class":45},[28,141231,51512],{"class":34},[28,141233,54906],{"class":45},[28,141235,129541],{"class":34},[28,141237,141238],{"class":30,"line":1297},[28,141239,132111],{"class":105},[28,141241,141242,141244,141246,141248,141250,141252],{"class":30,"line":1388},[28,141243,132116],{"class":2040},[28,141245,79882],{"class":34},[28,141247,128971],{"class":45},[28,141249,51512],{"class":34},[28,141251,86308],{"class":45},[28,141253,129541],{"class":34},[28,141255,141256],{"class":30,"line":1394},[28,141257,132131],{"class":105},[28,141259,141260,141262,141264,141266,141268,141270],{"class":30,"line":1406},[28,141261,132136],{"class":2040},[28,141263,79882],{"class":34},[28,141265,128971],{"class":45},[28,141267,51512],{"class":34},[28,141269,132145],{"class":45},[28,141271,129541],{"class":34},[14,141273,140070],{},[18,141275,141276],{"className":126611,"code":132043,"language":126613,"meta":23,"style":23},[25,141277,141278,141282,141296,141300,141314,141318,141332,141336,141350,141354],{"__ignoreMap":23},[28,141279,141280],{"class":30,"line":31},[28,141281,132050],{"class":105},[28,141283,141284,141286,141288,141290,141292,141294],{"class":30,"line":94},[28,141285,132055],{"class":2040},[28,141287,79882],{"class":34},[28,141289,128971],{"class":45},[28,141291,51512],{"class":34},[28,141293,132064],{"class":45},[28,141295,129541],{"class":34},[28,141297,141298],{"class":30,"line":109},[28,141299,132071],{"class":105},[28,141301,141302,141304,141306,141308,141310,141312],{"class":30,"line":125},[28,141303,132076],{"class":2040},[28,141305,79882],{"class":34},[28,141307,128971],{"class":45},[28,141309,51512],{"class":34},[28,141311,54839],{"class":45},[28,141313,129541],{"class":34},[28,141315,141316],{"class":30,"line":131},[28,141317,132091],{"class":105},[28,141319,141320,141322,141324,141326,141328,141330],{"class":30,"line":1291},[28,141321,132096],{"class":2040},[28,141323,79882],{"class":34},[28,141325,128971],{"class":45},[28,141327,51512],{"class":34},[28,141329,54906],{"class":45},[28,141331,129541],{"class":34},[28,141333,141334],{"class":30,"line":1297},[28,141335,132111],{"class":105},[28,141337,141338,141340,141342,141344,141346,141348],{"class":30,"line":1388},[28,141339,132116],{"class":2040},[28,141341,79882],{"class":34},[28,141343,128971],{"class":45},[28,141345,51512],{"class":34},[28,141347,86308],{"class":45},[28,141349,129541],{"class":34},[28,141351,141352],{"class":30,"line":1394},[28,141353,132131],{"class":105},[28,141355,141356,141358,141360,141362,141364,141366],{"class":30,"line":1406},[28,141357,132136],{"class":2040},[28,141359,79882],{"class":34},[28,141361,128971],{"class":45},[28,141363,51512],{"class":34},[28,141365,132145],{"class":45},[28,141367,129541],{"class":34},[1211,141369,141370,141381],{},[174,141371,141372,141373,141376,141377,101077,141379],{},"1 号盒子左侧浮动 ",[25,141374,141375],{},"sk_list"," 里面包含 ",[25,141378,1211],{},[25,141380,174],{},[174,141382,141383,141384,141376,141387,101077,141389],{},"2 号盒子左侧浮动 ",[25,141385,141386],{},"sk_con",[25,141388,1211],{},[25,141390,174],{},[14,141392,139981],{},[18,141394,141395],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,141396,141397,141403,141413],{"__ignoreMap":23},[28,141398,141399,141401],{"class":30,"line":31},[28,141400,130459],{"class":2040},[28,141402,15649],{"class":34},[28,141404,141405,141407,141409,141411],{"class":30,"line":94},[28,141406,131091],{"class":45},[28,141408,51512],{"class":34},[28,141410,23813],{"class":45},[28,141412,1367],{"class":34},[28,141414,141415],{"class":30,"line":109},[28,141416,1642],{"class":34},[14,141418,140070],{},[18,141420,141421],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,141422,141423,141429,141439],{"__ignoreMap":23},[28,141424,141425,141427],{"class":30,"line":31},[28,141426,130459],{"class":2040},[28,141428,15649],{"class":34},[28,141430,141431,141433,141435,141437],{"class":30,"line":94},[28,141432,131091],{"class":45},[28,141434,51512],{"class":34},[28,141436,23813],{"class":45},[28,141438,1367],{"class":34},[28,141440,141441],{"class":30,"line":109},[28,141442,1642],{"class":34},[188,141444,141446,141447],{"id":141445},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[25,141448,141449],{},"sk_container",[1539,141451],{"style":126467,"src":141452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1211,141454,141455,141460],{},[174,141456,140635,141457,141459],{},[25,141458,141449],{}," 给宽度 1200，不要给高度",[174,141461,141462],{},"一定不要忘记清除浮动",[14,141464,139981],{},[18,141466,141467],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,141468,141469,141475,141485],{"__ignoreMap":23},[28,141470,141471,141473],{"class":30,"line":31},[28,141472,130459],{"class":2040},[28,141474,15649],{"class":34},[28,141476,141477,141479,141481,141483],{"class":30,"line":94},[28,141478,131091],{"class":45},[28,141480,51512],{"class":34},[28,141482,23813],{"class":45},[28,141484,1367],{"class":34},[28,141486,141487],{"class":30,"line":109},[28,141488,1642],{"class":34},[171,141490,141491],{},[174,141492,141493],{},"sk_hd制作",[1211,141495,141496],{},[174,141497,140715,141498,141501],{},[25,141499,141500],{},"sk_hd"," ，插入图片即可",[14,141503,139981],{},[18,141505,141506],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,141507,141508],{"__ignoreMap":23},[28,141509,141510,141512,141514,141516,141518,141520,141522,141524,141526,141528,141530,141532],{"class":30,"line":31},[28,141511,99],{"class":34},[28,141513,1539],{"class":51375},[28,141515,55314],{"class":2040},[28,141517,39],{"class":34},[28,141519,134128],{"class":320},[28,141521,55322],{"class":2040},[28,141523,39],{"class":34},[28,141525,134135],{"class":320},[28,141527,134138],{"class":2040},[28,141529,39],{"class":34},[28,141531,134143],{"class":320},[28,141533,51382],{"class":34},[171,141535,141536],{"start":94},[174,141537,141538],{},"sk_bd制作",[1211,141540,141541],{},[174,141542,141543,141544,141547,141548,101077,141550,141552],{},"3 号盒子 ",[25,141545,141546],{},"sk_bd"," ，里面包含很多的 ",[25,141549,1211],{},[25,141551,174],{},[1211,141553,141554,141563],{},[174,141555,141556,141557,141559,141560,141562],{},"当鼠标移入到 ",[25,141558,174],{}," 上面的时候显示红色的边框，在这里先给 ",[25,141561,174],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[174,141564,141565,141566,141568,141569,141571,141572,141575,141576,141578],{},"由于给每个 ",[25,141567,174],{}," 都设置了外边距，导致一行的最后一个 ",[25,141570,174],{}," 掉了下来，在这里我们利用 ",[25,141573,141574],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[25,141577,174],{},"，去掉外边距就好了",[14,141580,139981],{},[18,141582,141583],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,141584,141585,141591,141603],{"__ignoreMap":23},[28,141586,141587,141589],{"class":30,"line":31},[28,141588,51686],{"class":51375},[28,141590,15649],{"class":34},[28,141592,141593,141595,141597,141599,141601],{"class":30,"line":94},[28,141594,70545],{"class":45},[28,141596,51512],{"class":34},[28,141598,407],{"class":45},[28,141600,51631],{"class":45},[28,141602,1367],{"class":34},[28,141604,141605],{"class":30,"line":109},[28,141606,1642],{"class":34},[14,141608,140070],{},[18,141610,141611],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,141612,141613,141619,141631],{"__ignoreMap":23},[28,141614,141615,141617],{"class":30,"line":31},[28,141616,51686],{"class":51375},[28,141618,15649],{"class":34},[28,141620,141621,141623,141625,141627,141629],{"class":30,"line":94},[28,141622,70545],{"class":45},[28,141624,51512],{"class":34},[28,141626,407],{"class":45},[28,141628,51631],{"class":45},[28,141630,1367],{"class":34},[28,141632,141633],{"class":30,"line":109},[28,141634,1642],{"class":34},[159,141636,141638],{"id":141637},"_163-注册页面制作","16.3 注册页面制作",[1539,141640],{"style":126467,"src":141641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141643,141644,141646],{},[365,141645,9102],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1539,141648],{"style":126467,"src":141649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[188,141651,141653],{"id":141652},"_1631-准备工作","16.3.1 准备工作",[1211,141655,141656,141659],{},[174,141657,141658],{},"创建register.html，引入 base.css，引入favicon图标",[174,141660,141661],{},"创建register.css ，在html页面进行引入",[188,141663,141665,141666,141668],{"id":141664},"_1632-header-头部实现","16.3.2 ",[25,141667,131616],{}," 头部实现",[1211,141670,141671,141674],{},[174,141672,141673],{},"整个内容用 版心 进行包裹",[174,141675,141676],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141678,139981],{},[18,141680,141681],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,141682,141683],{"__ignoreMap":23},[28,141684,141685,141687,141689,141691,141693,141695,141697,141699,141701,141703,141705,141707],{"class":30,"line":31},[28,141686,99],{"class":34},[28,141688,1539],{"class":51375},[28,141690,55314],{"class":2040},[28,141692,39],{"class":34},[28,141694,134128],{"class":320},[28,141696,55322],{"class":2040},[28,141698,39],{"class":34},[28,141700,134135],{"class":320},[28,141702,134138],{"class":2040},[28,141704,39],{"class":34},[28,141706,134143],{"class":320},[28,141708,51382],{"class":34},[14,141710,140070],{},[18,141712,141713],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,141714,141715],{"__ignoreMap":23},[28,141716,141717,141719,141721,141723,141725,141727,141729,141731,141733,141735,141737,141739],{"class":30,"line":31},[28,141718,99],{"class":34},[28,141720,1539],{"class":51375},[28,141722,55314],{"class":2040},[28,141724,39],{"class":34},[28,141726,134128],{"class":320},[28,141728,55322],{"class":2040},[28,141730,39],{"class":34},[28,141732,134135],{"class":320},[28,141734,134138],{"class":2040},[28,141736,39],{"class":34},[28,141738,134143],{"class":320},[28,141740,51382],{"class":34},[188,141742,141744,141745,141748],{"id":141743},"_1633-registerarea-主体模块实现","16.3.3 ",[25,141746,141747],{},"registerarea"," 主体模块实现",[1539,141750],{"style":126467,"src":141751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141753,141754],{},"整个大盒子 高度为 522px，设置4个边框",[14,141756,139981],{},[18,141758,141759],{"className":126611,"code":130768,"language":126613,"meta":23,"style":23},[25,141760,141761,141767,141783],{"__ignoreMap":23},[28,141762,141763,141765],{"class":30,"line":31},[28,141764,51686],{"class":51375},[28,141766,15649],{"class":34},[28,141768,141769,141771,141773,141775,141777,141779,141781],{"class":30,"line":94},[28,141770,70971],{"class":45},[28,141772,51512],{"class":34},[28,141774,46],{"class":45},[28,141776,51567],{"class":38},[28,141778,51596],{"class":45},[28,141780,130003],{"class":45},[28,141782,1367],{"class":34},[28,141784,141785],{"class":30,"line":109},[28,141786,1642],{"class":34},[14,141788,140070],{},[18,141790,141791],{"className":126611,"code":130768,"language":126613,"meta":23,"style":23},[25,141792,141793,141799,141815],{"__ignoreMap":23},[28,141794,141795,141797],{"class":30,"line":31},[28,141796,51686],{"class":51375},[28,141798,15649],{"class":34},[28,141800,141801,141803,141805,141807,141809,141811,141813],{"class":30,"line":94},[28,141802,70971],{"class":45},[28,141804,51512],{"class":34},[28,141806,46],{"class":45},[28,141808,51567],{"class":38},[28,141810,51596],{"class":45},[28,141812,130003],{"class":45},[28,141814,1367],{"class":34},[28,141816,141817],{"class":30,"line":109},[28,141818,1642],{"class":34},[14,141820,141821],{},"1号盒子 是一个 h3 标签，放标题",[1211,141823,141824],{},[174,141825,141826],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141828,139981],{},[18,141830,141831],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,141832,141833,141839,141849],{"__ignoreMap":23},[28,141834,141835,141837],{"class":30,"line":31},[28,141836,130459],{"class":2040},[28,141838,15649],{"class":34},[28,141840,141841,141843,141845,141847],{"class":30,"line":94},[28,141842,131091],{"class":45},[28,141844,51512],{"class":34},[28,141846,23813],{"class":45},[28,141848,1367],{"class":34},[28,141850,141851],{"class":30,"line":109},[28,141852,1642],{"class":34},[14,141854,140070],{},[18,141856,141857],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,141858,141859,141865,141875],{"__ignoreMap":23},[28,141860,141861,141863],{"class":30,"line":31},[28,141862,130459],{"class":2040},[28,141864,15649],{"class":34},[28,141866,141867,141869,141871,141873],{"class":30,"line":94},[28,141868,131091],{"class":45},[28,141870,51512],{"class":34},[28,141872,23813],{"class":45},[28,141874,1367],{"class":34},[28,141876,141877],{"class":30,"line":109},[28,141878,1642],{"class":34},[14,141880,141881],{},"2号盒子 里面放注册的内容",[1211,141883,141884,141887,141896,141910,141923,141926,141929,141947,141961],{},[174,141885,141886],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[174,141888,141889,141890,141892,141893,141895],{},"里面的内容利用 ",[25,141891,1211],{}," 包含 ",[25,141894,174],{}," 来实现的（不需要用表格）",[174,141897,139125,141898,141900,141901,141903,141904,141906,141907,141909],{},[25,141899,174],{}," 里面，左侧放 ",[25,141902,33684],{}," 标签， 中间放",[25,141905,53896],{}," 标签， 右侧放 ",[25,141908,28],{}," 提示信息",[174,141911,141912,141913,141915,141916,141918,141919,141922],{},"左侧 ",[25,141914,33684],{},"里面的文字都是右对齐，我们可以给",[25,141917,33684],{},"设置一个宽度（88px），然后利用",[25,141920,141921],{},"text-align"," 来设置右对齐",[174,141924,141925],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[174,141927,141928],{},"右侧 span修饰一下文字颜色",[174,141930,141931,141932],{},"提示信息的样式优化",[1211,141933,141934,141937,141940],{},[174,141935,141936],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[174,141938,141939],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[174,141941,141942,141943,141946],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[25,141944,141945],{},"vertical-algin"," 来设置 图片与文字对齐方式",[174,141948,141949,141950],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1211,141951,141952,141958],{},[174,141953,141954,141955,141957],{},"设置 ",[25,141956,23630],{}," 的 左右 12px 的内边距，设置一下文字颜色",[174,141959,141960],{},"分别设置 背景颜色",[174,141962,141963,141964,141966],{},"同意协议 和 完成注册 都是用 ",[25,141965,174],{}," 进行包裹",[14,141968,139981],{},[18,141970,141971],{"className":126611,"code":140554,"language":126613,"meta":23,"style":23},[25,141972,141973,141979,141989],{"__ignoreMap":23},[28,141974,141975,141977],{"class":30,"line":31},[28,141976,51686],{"class":51375},[28,141978,15649],{"class":34},[28,141980,141981,141983,141985,141987],{"class":30,"line":94},[28,141982,70953],{"class":45},[28,141984,51512],{"class":34},[28,141986,140571],{"class":45},[28,141988,1367],{"class":34},[28,141990,141991],{"class":30,"line":109},[28,141992,1642],{"class":34},[14,141994,140070],{},[18,141996,141997],{"className":126611,"code":140554,"language":126613,"meta":23,"style":23},[25,141998,141999,142005,142015],{"__ignoreMap":23},[28,142000,142001,142003],{"class":30,"line":31},[28,142002,51686],{"class":51375},[28,142004,15649],{"class":34},[28,142006,142007,142009,142011,142013],{"class":30,"line":94},[28,142008,70953],{"class":45},[28,142010,51512],{"class":34},[28,142012,140571],{"class":45},[28,142014,1367],{"class":34},[28,142016,142017],{"class":30,"line":109},[28,142018,1642],{"class":34},[188,142020,142022],{"id":142021},"_1634-底部实现","16.3.4 底部实现",[14,142024,139981],{},[18,142026,142027],{"className":126611,"code":140554,"language":126613,"meta":23,"style":23},[25,142028,142029,142035,142045],{"__ignoreMap":23},[28,142030,142031,142033],{"class":30,"line":31},[28,142032,51686],{"class":51375},[28,142034,15649],{"class":34},[28,142036,142037,142039,142041,142043],{"class":30,"line":94},[28,142038,70953],{"class":45},[28,142040,51512],{"class":34},[28,142042,140571],{"class":45},[28,142044,1367],{"class":34},[28,142046,142047],{"class":30,"line":109},[28,142048,1642],{"class":34},[14,142050,140070],{},[18,142052,142053],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,142054,142055,142059,142073,142077],{"__ignoreMap":23},[28,142056,142057],{"class":30,"line":31},[28,142058,130722],{"class":105},[28,142060,142061,142063,142065,142067,142069,142071],{"class":30,"line":94},[28,142062,99],{"class":34},[28,142064,51686],{"class":51375},[28,142066,53561],{"class":2040},[28,142068,39],{"class":34},[28,142070,130735],{"class":320},[28,142072,51382],{"class":34},[28,142074,142075],{"class":30,"line":109},[28,142076,130742],{"class":34},[28,142078,142079,142081,142083],{"class":30,"line":125},[28,142080,51860],{"class":34},[28,142082,51686],{"class":51375},[28,142084,51382],{"class":34},[159,142086,142088],{"id":142087},"_164-项目总结","16.4 项目总结",[171,142090,142091,142094,142097,142100],{},[174,142092,142093],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[174,142095,142096],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[174,142098,142099],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[174,142101,142102],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1539,142104],{"style":126467,"src":142105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[171,142107,142108],{"start":131},[174,142109,142110],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1539,142112],{"style":126467,"src":142113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[171,142115,142116],{"start":1291},[174,142117,142118],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1539,142120],{"style":126467,"src":142121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[18,142123,142124],{"className":127358,"code":136768,"language":127360,"meta":23,"style":23},[25,142125,142126],{"__ignoreMap":23},[28,142127,142128,142130,142132,142134,142136,142138,142140,142142,142144,142146,142148,142150],{"class":30,"line":31},[28,142129,99],{"class":34},[28,142131,53896],{"class":51375},[28,142133,53899],{"class":2040},[28,142135,39],{"class":34},[28,142137,62774],{"class":320},[28,142139,14997],{"class":2040},[28,142141,39],{"class":34},[28,142143,136789],{"class":320},[28,142145,61095],{"class":2040},[28,142147,39],{"class":34},[28,142149,136796],{"class":320},[28,142151,51382],{"class":34},[171,142153,142154,142157],{"start":1297},[174,142155,142156],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[174,142158,142159],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[136,142161,142162],{},"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":23,"searchDepth":94,"depth":94,"links":142164},[142165,142170,142177,142185],{"id":139791,"depth":94,"text":139792,"children":142166},[142167,142168,142169],{"id":139795,"depth":109,"text":139796},{"id":140526,"depth":109,"text":140527},{"id":140839,"depth":109,"text":140840},{"id":141139,"depth":94,"text":141140,"children":142171},[142172,142173,142175],{"id":141143,"depth":109,"text":141144},{"id":141161,"depth":109,"text":142174},"16.2.2 列表页 header 和 nav 修改",{"id":141445,"depth":109,"text":142176},"16.2.3 列表页主体 sk_container",{"id":141637,"depth":94,"text":141638,"children":142178},[142179,142180,142182,142184],{"id":141652,"depth":109,"text":141653},{"id":141664,"depth":109,"text":142181},"16.3.2 header 头部实现",{"id":141743,"depth":109,"text":142183},"16.3.3 registerarea 主体模块实现",{"id":142021,"depth":109,"text":142022},{"id":142087,"depth":94,"text":142088},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139783,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142192,"title":142193,"body":142194,"description":141,"extension":142,"meta":142302,"navigation":144,"path":142303,"seo":142304,"stem":142305,"__hash__":142306},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142195,"toc":142297},[142196,142199,142203,142206,142209,142218,142227,142231,142236,142243,142261,142264,142267,142270,142273,142276,142279,142282,142285,142288,142291,142294],[10,142197,142193],{"id":142198},"_17-web服务器与网站发布",[159,142200,142202],{"id":142201},"_171-web服务器","17.1 Web服务器",[14,142204,142205],{},"把自己网站上传到服务器上，可以让其他人访问",[1539,142207],{"style":126467,"src":142208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142210,142211,142214,142215],{},[365,142212,142213],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[365,142216,142217],{},"Web 服务器等",[14,142219,142220,142221,101077,142224,25818],{},"根据服务器在网络中所在的位置不同，又可分为 ",[365,142222,142223],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[365,142225,142226],{},"远程服务器",[188,142228,142230],{"id":142229},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142232,142233],{},[365,142234,142235],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142237,142238,142239],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[35,142240,142241],{"href":142241,"rel":142242},"http:\u002F\u002Ffree.3v.do\u002F",[23942],[1211,142244,142245,142248,142251,142258],{},[174,142246,142247],{},"去免费空间网站注册账号。",[174,142249,142250],{},"记录下主机名、用户名、密码、域名。",[174,142252,142253,142254,142257],{},"利用 ",[25,142255,142256],{},"utftp"," 软件 上传网站到远程服务器",[174,142259,142260],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142262,142263],{},"使用软件上传，对上传软件文件进行解压",[1539,142265],{"style":126467,"src":142266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1539,142268],{"style":126467,"src":142269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142271,142272],{},"输入刚刚申请的服务器账号信息：",[1539,142274],{"style":126467,"src":142275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1539,142277],{"style":126467,"src":142278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1539,142280],{"style":126467,"src":142281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1539,142283],{"style":126467,"src":142284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142286,142287],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1539,142289],{"style":126467,"src":142290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142292,142293],{},"浏览器输入域名即可访问",[14,142295,142296],{},"首页一定必须是index",{"title":23,"searchDepth":94,"depth":94,"links":142298},[142299],{"id":142201,"depth":94,"text":142202,"children":142300},[142301],{"id":142229,"depth":109,"text":142230},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142193,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142308,"title":142309,"body":142310,"description":141,"extension":142,"meta":143237,"navigation":144,"path":143238,"seo":143239,"stem":143240,"__hash__":143241},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142311,"toc":143220},[142312,142315,142319,142322,142325,142336,142339,142343,142347,142352,142355,142358,142361,142364,142368,142394,142398,142402,142405,142408,142412,142445,142449,142452,142455,142519,142523,142527,142530,142533,142536,142540,142585,142589,142592,142622,142626,142630,142633,142636,142640,142643,142712,142715,142823,142825,142831,142835,142838,142841,142937,142940,142944,142968,142972,142975,142979,142982,142986,142989,142992,142995,142998,143002,143005,143008,143012,143016,143019,143022,143025,143028,143032,143035,143039,143042,143045,143090,143094,143098,143101,143104,143107,143139,143143,143146,143180,143184,143187,143217],[10,142313,142309],{"id":142314},"_18-2d动画与3d转换",[159,142316,142318],{"id":142317},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142320,142321],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142323,142324],{},"转换（transform）你可以简单理解为变形",[1211,142326,142327,142330,142333],{},[174,142328,142329],{},"移动：translate",[174,142331,142332],{},"旋转：rotate",[174,142334,142335],{},"缩放：scale",[1539,142337],{"style":126467,"src":142338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[188,142340,142342],{"id":142341},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22075,142344,142346],{"id":142345},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142348,142349,142350],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[365,142351,133270],{},[1539,142353],{"style":126467,"src":142354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142356,142357],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142359,142360],{},"对于行内元素无效",[14,142362,142363],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22075,142365,142367],{"id":142366},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[18,142369,142370],{"className":126611,"code":138800,"language":126613,"meta":23,"style":23},[25,142371,142372,142378,142390],{"__ignoreMap":23},[28,142373,142374,142376],{"class":30,"line":31},[28,142375,51686],{"class":51375},[28,142377,15649],{"class":34},[28,142379,142380,142382,142384,142386,142388],{"class":30,"line":94},[28,142381,70545],{"class":45},[28,142383,51512],{"class":34},[28,142385,407],{"class":45},[28,142387,51631],{"class":45},[28,142389,1367],{"class":34},[28,142391,142392],{"class":30,"line":109},[28,142393,1642],{"class":34},[188,142395,142397],{"id":142396},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22075,142399,142401],{"id":142400},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142403,142404],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1539,142406],{"style":126467,"src":142407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22075,142409,142411],{"id":142410},"_18122-旋转效果","18.1.2.2 旋转效果",[18,142413,142415],{"className":126611,"code":142414,"language":126613,"meta":23,"style":23},"div {\n  transform: rotate(45deg);\n}\n",[25,142416,142417,142423,142441],{"__ignoreMap":23},[28,142418,142419,142421],{"class":30,"line":31},[28,142420,51686],{"class":51375},[28,142422,15649],{"class":34},[28,142424,142425,142427,142429,142432,142434,142436,142439],{"class":30,"line":94},[28,142426,136595],{"class":45},[28,142428,51512],{"class":34},[28,142430,142431],{"class":45},"rotate",[28,142433,221],{"class":34},[28,142435,739],{"class":45},[28,142437,142438],{"class":38},"deg",[28,142440,2796],{"class":34},[28,142442,142443],{"class":30,"line":109},[28,142444,1642],{"class":34},[22075,142446,142448],{"id":142447},"_18123-三角做法","18.1.2.3 三角做法",[14,142450,142451],{},"该下标当经过最外层大盒子时会实现向上反转",[1539,142453],{"style":126467,"src":142454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[18,142456,142457],{"className":126611,"code":135131,"language":126613,"meta":23,"style":23},[25,142458,142459,142463,142469,142479,142489,142505,142515],{"__ignoreMap":23},[28,142460,142461],{"class":30,"line":31},[28,142462,135138],{"class":105},[28,142464,142465,142467],{"class":30,"line":94},[28,142466,135143],{"class":2040},[28,142468,15649],{"class":34},[28,142470,142471,142473,142475,142477],{"class":30,"line":109},[28,142472,70643],{"class":45},[28,142474,51512],{"class":34},[28,142476,407],{"class":45},[28,142478,1367],{"class":34},[28,142480,142481,142483,142485,142487],{"class":30,"line":125},[28,142482,70863],{"class":45},[28,142484,51512],{"class":34},[28,142486,407],{"class":45},[28,142488,1367],{"class":34},[28,142490,142491,142493,142495,142497,142499,142501,142503],{"class":30,"line":131},[28,142492,70971],{"class":45},[28,142494,51512],{"class":34},[28,142496,659],{"class":45},[28,142498,51567],{"class":38},[28,142500,51596],{"class":45},[28,142502,64066],{"class":45},[28,142504,1367],{"class":34},[28,142506,142507,142509,142511,142513],{"class":30,"line":1291},[28,142508,135186],{"class":45},[28,142510,51512],{"class":34},[28,142512,62444],{"class":45},[28,142514,1367],{"class":34},[28,142516,142517],{"class":30,"line":1297},[28,142518,1642],{"class":34},[188,142520,142522],{"id":142521},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22075,142524,142526],{"id":142525},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142528,142529],{},"设置中心点",[1539,142531],{"style":126467,"src":142532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142534,142535],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22075,142537,142539],{"id":142538},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[18,142541,142543],{"className":126611,"code":142542,"language":126613,"meta":23,"style":23},"\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",[25,142544,142545,142550,142556,142571,142576,142581],{"__ignoreMap":23},[28,142546,142547],{"class":30,"line":31},[28,142548,142549],{"class":105},"\u002F* 转换中心点 *\u002F\n",[28,142551,142552,142554],{"class":30,"line":94},[28,142553,51686],{"class":51375},[28,142555,15649],{"class":34},[28,142557,142558,142561,142563,142565,142567,142569],{"class":30,"line":109},[28,142559,142560],{"class":45},"  transform-origin",[28,142562,51512],{"class":34},[28,142564,51667],{"class":45},[28,142566,17221],{"class":45},[28,142568,130474],{"class":34},[28,142570,135284],{"class":105},[28,142572,142573],{"class":30,"line":125},[28,142574,142575],{"class":105},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[28,142577,142578],{"class":30,"line":131},[28,142579,142580],{"class":105},"  \u002F* transform-origin: left top; *\u002F\n",[28,142582,142583],{"class":30,"line":1291},[28,142584,1642],{"class":34},[22075,142586,142588],{"id":142587},"_18133-旋转案例","18.1.3.3 旋转案例",[1539,142590],{"style":126467,"src":142591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[18,142593,142594],{"className":126611,"code":142414,"language":126613,"meta":23,"style":23},[25,142595,142596,142602,142618],{"__ignoreMap":23},[28,142597,142598,142600],{"class":30,"line":31},[28,142599,51686],{"class":51375},[28,142601,15649],{"class":34},[28,142603,142604,142606,142608,142610,142612,142614,142616],{"class":30,"line":94},[28,142605,136595],{"class":45},[28,142607,51512],{"class":34},[28,142609,142431],{"class":45},[28,142611,221],{"class":34},[28,142613,739],{"class":45},[28,142615,142438],{"class":38},[28,142617,2796],{"class":34},[28,142619,142620],{"class":30,"line":109},[28,142621,1642],{"class":34},[188,142623,142625],{"id":142624},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22075,142627,142629],{"id":142628},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142631,142632],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1539,142634],{"style":126467,"src":142635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22075,142637,142639],{"id":142638},"_18142-分页按钮","18.1.4.2 分页按钮",[1539,142641],{"style":126467,"src":142642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[18,142644,142646],{"className":126611,"code":142645,"language":126613,"meta":23,"style":23},"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",[25,142647,142648,142654,142670,142674,142678,142683,142689,142703,142708],{"__ignoreMap":23},[28,142649,142650,142652],{"class":30,"line":31},[28,142651,51686],{"class":51375},[28,142653,15649],{"class":34},[28,142655,142656,142658,142660,142663,142665,142668],{"class":30,"line":94},[28,142657,136595],{"class":45},[28,142659,51512],{"class":34},[28,142661,142662],{"class":45},"scale",[28,142664,221],{"class":34},[28,142666,142667],{"class":45},"1.2",[28,142669,2796],{"class":34},[28,142671,142672],{"class":30,"line":109},[28,142673,1642],{"class":34},[28,142675,142676],{"class":30,"line":125},[28,142677,136072],{"class":34},[28,142679,142680],{"class":30,"line":131},[28,142681,142682],{"class":105},"\u002F* 2D 缩放 *\u002F\n",[28,142684,142685,142687],{"class":30,"line":1291},[28,142686,51686],{"class":51375},[28,142688,15649],{"class":34},[28,142690,142691,142693,142695,142697,142699,142701],{"class":30,"line":1297},[28,142692,136595],{"class":45},[28,142694,51512],{"class":34},[28,142696,142662],{"class":45},[28,142698,221],{"class":34},[28,142700,142667],{"class":45},[28,142702,2796],{"class":34},[28,142704,142705],{"class":30,"line":1388},[28,142706,142707],{"class":105},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[28,142709,142710],{"class":30,"line":1394},[28,142711,1642],{"class":34},[14,142713,142714],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[18,142716,142718],{"className":126611,"code":142717,"language":126613,"meta":23,"style":23},"\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",[25,142719,142720,142725,142735,142756,142777,142781,142786,142792,142819],{"__ignoreMap":23},[28,142721,142722],{"class":30,"line":31},[28,142723,142724],{"class":105},"\u002F* 定义动画 *\u002F\n",[28,142726,142727,142730,142733],{"class":30,"line":94},[28,142728,142729],{"class":38},"@keyframes",[28,142731,142732],{"class":5293}," move",[28,142734,15649],{"class":34},[28,142736,142737,142740,142742,142744,142746,142749,142751,142753],{"class":30,"line":109},[28,142738,142739],{"class":2040},"  0%",[28,142741,79882],{"class":34},[28,142743,48209],{"class":45},[28,142745,51512],{"class":34},[28,142747,142748],{"class":45},"translateX",[28,142750,221],{"class":34},[28,142752,407],{"class":45},[28,142754,142755],{"class":34},"); }\n",[28,142757,142758,142761,142763,142765,142767,142769,142771,142773,142775],{"class":30,"line":125},[28,142759,142760],{"class":2040},"  100%",[28,142762,79882],{"class":34},[28,142764,48209],{"class":45},[28,142766,51512],{"class":34},[28,142768,142748],{"class":45},[28,142770,221],{"class":34},[28,142772,525],{"class":45},[28,142774,51567],{"class":38},[28,142776,142755],{"class":34},[28,142778,142779],{"class":30,"line":131},[28,142780,1642],{"class":34},[28,142782,142783],{"class":30,"line":1291},[28,142784,142785],{"class":105},"\u002F* 调用动画 *\u002F\n",[28,142787,142788,142790],{"class":30,"line":1297},[28,142789,51686],{"class":51375},[28,142791,15649],{"class":34},[28,142793,142794,142797,142799,142801,142803,142805,142807,142809,142811,142814,142817],{"class":30,"line":1388},[28,142795,142796],{"class":45},"  animation",[28,142798,51512],{"class":34},[28,142800,135297],{"class":45},[28,142802,25196],{"class":45},[28,142804,905],{"class":38},[28,142806,78755],{"class":45},[28,142808,4170],{"class":45},[28,142810,905],{"class":38},[28,142812,142813],{"class":45}," infinite",[28,142815,142816],{"class":45}," alternate",[28,142818,1367],{"class":34},[28,142820,142821],{"class":30,"line":1394},[28,142822,1642],{"class":34},[14,142824,142714],{},[18,142826,142829],{"className":142827,"code":142828,"language":5264},[5262],"\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",[25,142830,142828],{"__ignoreMap":23},[22075,142832,142834],{"id":142833},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142836,142837],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1539,142839],{"style":126467,"src":142840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[18,142842,142843],{"className":126611,"code":142717,"language":126613,"meta":23,"style":23},[25,142844,142845,142849,142857,142875,142895,142899,142903,142909,142933],{"__ignoreMap":23},[28,142846,142847],{"class":30,"line":31},[28,142848,142724],{"class":105},[28,142850,142851,142853,142855],{"class":30,"line":94},[28,142852,142729],{"class":38},[28,142854,142732],{"class":5293},[28,142856,15649],{"class":34},[28,142858,142859,142861,142863,142865,142867,142869,142871,142873],{"class":30,"line":109},[28,142860,142739],{"class":2040},[28,142862,79882],{"class":34},[28,142864,48209],{"class":45},[28,142866,51512],{"class":34},[28,142868,142748],{"class":45},[28,142870,221],{"class":34},[28,142872,407],{"class":45},[28,142874,142755],{"class":34},[28,142876,142877,142879,142881,142883,142885,142887,142889,142891,142893],{"class":30,"line":125},[28,142878,142760],{"class":2040},[28,142880,79882],{"class":34},[28,142882,48209],{"class":45},[28,142884,51512],{"class":34},[28,142886,142748],{"class":45},[28,142888,221],{"class":34},[28,142890,525],{"class":45},[28,142892,51567],{"class":38},[28,142894,142755],{"class":34},[28,142896,142897],{"class":30,"line":131},[28,142898,1642],{"class":34},[28,142900,142901],{"class":30,"line":1291},[28,142902,142785],{"class":105},[28,142904,142905,142907],{"class":30,"line":1297},[28,142906,51686],{"class":51375},[28,142908,15649],{"class":34},[28,142910,142911,142913,142915,142917,142919,142921,142923,142925,142927,142929,142931],{"class":30,"line":1388},[28,142912,142796],{"class":45},[28,142914,51512],{"class":34},[28,142916,135297],{"class":45},[28,142918,25196],{"class":45},[28,142920,905],{"class":38},[28,142922,78755],{"class":45},[28,142924,4170],{"class":45},[28,142926,905],{"class":38},[28,142928,142813],{"class":45},[28,142930,142816],{"class":45},[28,142932,1367],{"class":34},[28,142934,142935],{"class":30,"line":1394},[28,142936,1642],{"class":34},[14,142938,142939],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[188,142941,142943],{"id":142942},"_1823-知识点回顾","18.2.3 知识点回顾",[18,142945,142946],{"className":126611,"code":128780,"language":126613,"meta":23,"style":23},[25,142947,142948,142954,142964],{"__ignoreMap":23},[28,142949,142950,142952],{"class":30,"line":31},[28,142951,51686],{"class":51375},[28,142953,15649],{"class":34},[28,142955,142956,142958,142960,142962],{"class":30,"line":94},[28,142957,128793],{"class":45},[28,142959,51512],{"class":34},[28,142961,61811],{"class":45},[28,142963,1367],{"class":34},[28,142965,142966],{"class":30,"line":109},[28,142967,1642],{"class":34},[159,142969,142971],{"id":142970},"_183-3d-转换","18.3 3D 转换",[14,142973,142974],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[188,142976,142978],{"id":142977},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1539,142980],{"style":126467,"src":142981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[188,142983,142985],{"id":142984},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1539,142987],{"style":126467,"src":142988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142990,142991],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142993,142994],{},"translate3d的效果需要搭配透视perspective来使用",[1539,142996],{"style":126467,"src":142997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[188,142999,143001],{"id":143000},"_1833-透视-perspective","18.3.3 透视 perspective",[1539,143003],{"style":126467,"src":143004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143006,143007],{},"透视写在父盒子上，单位为像素",[188,143009,143011],{"id":143010},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22075,143013,143015],{"id":143014},"_18341-分开解释","18.3.4.1 分开解释",[1539,143017],{"style":126467,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1539,143020],{"style":126467,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1539,143023],{"style":126467,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143026,143027],{},"总结来说就是左手原则",[22075,143029,143031],{"id":143030},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1539,143033],{"style":126467,"src":143034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[188,143036,143038],{"id":143037},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1539,143040],{"style":126467,"src":143041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1539,143043],{"style":126467,"src":143044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[18,143046,143048],{"className":126611,"code":143047,"language":126613,"meta":23,"style":23},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[25,143049,143050,143056,143069,143086],{"__ignoreMap":23},[28,143051,143052,143054],{"class":30,"line":31},[28,143053,51686],{"class":51375},[28,143055,15649],{"class":34},[28,143057,143058,143061,143063,143065,143067],{"class":30,"line":94},[28,143059,143060],{"class":45},"  perspective",[28,143062,51512],{"class":34},[28,143064,65149],{"class":45},[28,143066,51567],{"class":38},[28,143068,1367],{"class":34},[28,143070,143071,143073,143075,143078,143080,143082,143084],{"class":30,"line":109},[28,143072,136595],{"class":45},[28,143074,51512],{"class":34},[28,143076,143077],{"class":45},"rotateX",[28,143079,221],{"class":34},[28,143081,739],{"class":45},[28,143083,142438],{"class":38},[28,143085,2796],{"class":34},[28,143087,143088],{"class":30,"line":125},[28,143089,1642],{"class":34},[188,143091,143093],{"id":143092},"_1836-案例","18.3.6 案例",[22075,143095,143097],{"id":143096},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1539,143099],{"style":126467,"src":143100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1539,143102],{"style":126467,"src":143103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1539,143105],{"style":126467,"src":143106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[18,143108,143110],{"className":126611,"code":143109,"language":126613,"meta":23,"style":23},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[25,143111,143112,143117,143123,143135],{"__ignoreMap":23},[28,143113,143114],{"class":30,"line":31},[28,143115,143116],{"class":105},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[28,143118,143119,143121],{"class":30,"line":94},[28,143120,133608],{"class":2040},[28,143122,15649],{"class":34},[28,143124,143125,143127,143129,143131,143133],{"class":30,"line":109},[28,143126,143060],{"class":45},[28,143128,51512],{"class":34},[28,143130,65149],{"class":45},[28,143132,51567],{"class":38},[28,143134,1367],{"class":34},[28,143136,143137],{"class":30,"line":125},[28,143138,1642],{"class":34},[22075,143140,143142],{"id":143141},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1539,143144],{"style":126467,"src":143145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[18,143147,143148],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,143149,143150,143154,143168,143172],{"__ignoreMap":23},[28,143151,143152],{"class":30,"line":31},[28,143153,130722],{"class":105},[28,143155,143156,143158,143160,143162,143164,143166],{"class":30,"line":94},[28,143157,99],{"class":34},[28,143159,51686],{"class":51375},[28,143161,53561],{"class":2040},[28,143163,39],{"class":34},[28,143165,130735],{"class":320},[28,143167,51382],{"class":34},[28,143169,143170],{"class":30,"line":109},[28,143171,130742],{"class":34},[28,143173,143174,143176,143178],{"class":30,"line":125},[28,143175,51860],{"class":34},[28,143177,51686],{"class":51375},[28,143179,51382],{"class":34},[22075,143181,143183],{"id":143182},"_18363-旋转木马","18.3.6.3 旋转木马",[1539,143185],{"style":126467,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[18,143188,143189],{"className":126611,"code":142414,"language":126613,"meta":23,"style":23},[25,143190,143191,143197,143213],{"__ignoreMap":23},[28,143192,143193,143195],{"class":30,"line":31},[28,143194,51686],{"class":51375},[28,143196,15649],{"class":34},[28,143198,143199,143201,143203,143205,143207,143209,143211],{"class":30,"line":94},[28,143200,136595],{"class":45},[28,143202,51512],{"class":34},[28,143204,142431],{"class":45},[28,143206,221],{"class":34},[28,143208,739],{"class":45},[28,143210,142438],{"class":38},[28,143212,2796],{"class":34},[28,143214,143215],{"class":30,"line":109},[28,143216,1642],{"class":34},[136,143218,143219],{},"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":23,"searchDepth":94,"depth":94,"links":143221},[143222,143229],{"id":142317,"depth":94,"text":142318,"children":143223},[143224,143225,143226,143227,143228],{"id":142341,"depth":109,"text":142342},{"id":142396,"depth":109,"text":142397},{"id":142521,"depth":109,"text":142522},{"id":142624,"depth":109,"text":142625},{"id":142942,"depth":109,"text":142943},{"id":142970,"depth":94,"text":142971,"children":143230},[143231,143232,143233,143234,143235,143236],{"id":142977,"depth":109,"text":142978},{"id":142984,"depth":109,"text":142985},{"id":143000,"depth":109,"text":143001},{"id":143010,"depth":109,"text":143011},{"id":143037,"depth":109,"text":143038},{"id":143092,"depth":109,"text":143093},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142309,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143243,"title":143244,"body":143245,"description":141,"extension":142,"meta":143448,"navigation":144,"path":143449,"seo":143450,"stem":143451,"__hash__":143452},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143246,"toc":143437},[143247,143250,143254,143257,143260,143264,143267,143270,143273,143277,143280,143284,143287,143291,143294,143298,143312,143316,143341,143344,143347,143364,143368,143372,143375,143378,143382,143385,143388,143406,143410,143413,143427,143431,143434],[10,143248,143244],{"id":143249},"_19-移动端基础-前缀现状与视口",[159,143251,143253],{"id":143252},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1539,143255],{"style":126467,"src":143256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143258,143259],{},"意思就是加个前缀，增加兼容性",[159,143261,143263],{"id":143262},"_192-移动端现状认识","19.2 移动端现状认识",[1539,143265],{"style":126467,"src":143266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143268,143269],{},"调试方法：",[1539,143271],{"style":126467,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[159,143274,143276],{"id":143275},"_193-视口","19.3 视口",[14,143278,143279],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[188,143281,143283],{"id":143282},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1539,143285],{"style":126467,"src":143286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[188,143288,143290],{"id":143289},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1539,143292],{"style":126467,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[188,143295,143297],{"id":143296},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1211,143299,143300,143303,143306,143309],{},[174,143301,143302],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[174,143304,143305],{},"理想视口，对设备来讲，是最理想的视口尺寸",[174,143307,143308],{},"需要手动添写meta视口标签通知浏览器操作",[174,143310,143311],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[188,143313,143315],{"id":143314},"_1934-meta视口标签","19.3.4 meta视口标签",[18,143317,143319],{"className":127358,"code":143318,"language":127360,"meta":23,"style":23},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[25,143320,143321],{"__ignoreMap":23},[28,143322,143323,143325,143327,143329,143331,143333,143335,143337,143339],{"class":30,"line":31},[28,143324,99],{"class":34},[28,143326,51419],{"class":51375},[28,143328,14997],{"class":2040},[28,143330,39],{"class":34},[28,143332,51466],{"class":320},[28,143334,51446],{"class":2040},[28,143336,39],{"class":34},[28,143338,51473],{"class":320},[28,143340,51382],{"class":34},[1539,143342],{"style":126467,"src":143343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143345,143346],{},"标准视口设置：",[171,143348,143349,143352,143355,143358,143361],{},[174,143350,143351],{},"视口宽度和设备保持一致",[174,143353,143354],{},"视口的默认缩放比例1.0",[174,143356,143357],{},"不允许用户自行缩放",[174,143359,143360],{},"最大允许的缩放比例1.0",[174,143362,143363],{},"最小允许的缩放比例1.0",[188,143365,143367],{"id":143366},"_1935-二倍图","19.3.5 二倍图",[22075,143369,143371],{"id":143370},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1539,143373],{"style":126467,"src":143374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1539,143376],{"style":126467,"src":143377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22075,143379,143381],{"id":143380},"_19352-多倍图","19.3.5.2 多倍图",[1539,143383],{"style":126467,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143386,143387],{},"二倍图法，代码如下：",[18,143389,143391],{"className":126611,"code":143390,"language":126613,"meta":23,"style":23},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[25,143392,143393,143398],{"__ignoreMap":23},[28,143394,143395],{"class":30,"line":31},[28,143396,143397],{"class":105},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[28,143399,143400,143403],{"class":30,"line":94},[28,143401,143402],{"class":51375},"background-size",[28,143404,143405],{"class":34},": 50% 50%;\n",[22075,143407,143409],{"id":143408},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1539,143411],{"style":126467,"src":143412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[171,143414,143415,143418,143421,143424],{},[174,143416,143417],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[174,143419,143420],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[174,143422,143423],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[174,143425,143426],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22075,143428,143430],{"id":143429},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1539,143432],{"style":126467,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[136,143435,143436],{},"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":23,"searchDepth":94,"depth":94,"links":143438},[143439,143440,143441],{"id":143252,"depth":94,"text":143253},{"id":143262,"depth":94,"text":143263},{"id":143275,"depth":94,"text":143276,"children":143442},[143443,143444,143445,143446,143447],{"id":143282,"depth":109,"text":143283},{"id":143289,"depth":109,"text":143290},{"id":143296,"depth":109,"text":143297},{"id":143314,"depth":109,"text":143315},{"id":143366,"depth":109,"text":143367},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143244,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143454,"title":143455,"body":143456,"description":141,"extension":142,"meta":144333,"navigation":144,"path":144334,"seo":144335,"stem":144336,"__hash__":144337},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143457,"toc":144317},[143458,143461,143465,143472,143475,143482,143485,143490,143493,143497,143501,143508,143511,143514,143518,143521,143524,143527,143530,143533,143537,143540,143544,143546,143549,143552,143555,143558,143560,143563,143565,143595,143597,143627,143631,143634,143638,143641,143658,143661,143664,143740,143742,143745,143748,143751,143754,143756,143759,143762,143766,143788,143791,143794,143798,143801,143807,143810,143814,143817,143820,143824,143827,143830,143833,143837,143840,143843,143846,143849,143853,143856,143860,143867,143870,143873,143876,143879,143889,143892,143895,143902,143905,143909,143912,143915,143919,143922,143925,143928,143973,143976,143979,143982,143984,144113,144115,144153,144156,144159,144161,144279,144281,144315],[10,143459,143455],{"id":143460},"_20-移动端布局实战上篇",[159,143462,143464],{"id":143463},"_201-移动端主流方案","20.1 移动端主流方案",[171,143466,143467],{},[174,143468,143469],{},[365,143470,143471],{},"单独移动端页面（主流）",[1539,143473],{"style":126467,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[171,143476,143477],{"start":94},[174,143478,143479],{},[365,143480,143481],{},"响应式兼容PC移动端",[1539,143483],{"style":126467,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[171,143486,143487],{"start":109},[174,143488,143489],{},"两种页面选型布局方式",[1539,143491],{"style":126467,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[159,143494,143496],{"id":143495},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[188,143498,143500],{"id":143499},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143502,143503,143504],{},"官网地址： ",[35,143505,143506],{"href":143506,"rel":143507},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23942],[1539,143509],{"style":126467,"src":143510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1539,143512],{"style":126467,"src":143513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[188,143515,143517],{"id":143516},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1539,143519],{"style":126467,"src":143520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1539,143522],{"style":126467,"src":143523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143525,143526],{},"去除高亮：",[14,143528,143529],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143531,143532],{},"-webkit- tap-highlight-color: transparent;",[159,143534,143536],{"id":143535},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1539,143538],{"style":126467,"src":143539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[159,143541,143543],{"id":143542},"_204-流式布局案例","20.4 流式布局案例",[14,143545,250],{},[14,143547,143548],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143550,143551],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143553,143554],{},"图片格式：",[1539,143556],{"style":126467,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143559,135654],{},[1539,143561],{"style":126467,"src":143562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143564,139981],{},[18,143566,143567],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,143568,143569],{"__ignoreMap":23},[28,143570,143571,143573,143575,143577,143579,143581,143583,143585,143587,143589,143591,143593],{"class":30,"line":31},[28,143572,99],{"class":34},[28,143574,1539],{"class":51375},[28,143576,55314],{"class":2040},[28,143578,39],{"class":34},[28,143580,134128],{"class":320},[28,143582,55322],{"class":2040},[28,143584,39],{"class":34},[28,143586,134135],{"class":320},[28,143588,134138],{"class":2040},[28,143590,39],{"class":34},[28,143592,134143],{"class":320},[28,143594,51382],{"class":34},[14,143596,140070],{},[18,143598,143599],{"className":127358,"code":134113,"language":127360,"meta":23,"style":23},[25,143600,143601],{"__ignoreMap":23},[28,143602,143603,143605,143607,143609,143611,143613,143615,143617,143619,143621,143623,143625],{"class":30,"line":31},[28,143604,99],{"class":34},[28,143606,1539],{"class":51375},[28,143608,55314],{"class":2040},[28,143610,39],{"class":34},[28,143612,134128],{"class":320},[28,143614,55322],{"class":2040},[28,143616,39],{"class":34},[28,143618,134135],{"class":320},[28,143620,134138],{"class":2040},[28,143622,39],{"class":34},[28,143624,134143],{"class":320},[28,143626,51382],{"class":34},[159,143628,143630],{"id":143629},"_205-flex布局","20.5 flex布局",[1539,143632],{"style":126467,"src":143633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[188,143635,143637],{"id":143636},"_2051-布局原理","20.5.1 布局原理",[14,143639,143640],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1211,143642,143643,143646,143649,143652,143655],{},[174,143644,143645],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[174,143647,143648],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[174,143650,143651],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[174,143653,143654],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[174,143656,143657],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143659,143660],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143662,143663],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[18,143665,143667],{"className":126611,"code":143666,"language":126613,"meta":23,"style":23},"\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",[25,143668,143669,143674,143681,143691,143703,143714,143725,143736],{"__ignoreMap":23},[28,143670,143671],{"class":30,"line":31},[28,143672,143673],{"class":105},"\u002F* Flex 弹性布局 *\u002F\n",[28,143675,143676,143679],{"class":30,"line":94},[28,143677,143678],{"class":2040},".container",[28,143680,15649],{"class":34},[28,143682,143683,143685,143687,143689],{"class":30,"line":109},[28,143684,128227],{"class":45},[28,143686,51512],{"class":34},[28,143688,51552],{"class":45},[28,143690,1367],{"class":34},[28,143692,143693,143696,143698,143701],{"class":30,"line":125},[28,143694,143695],{"class":45},"  flex-direction",[28,143697,51512],{"class":34},[28,143699,143700],{"class":45},"row",[28,143702,1367],{"class":34},[28,143704,143705,143708,143710,143712],{"class":30,"line":131},[28,143706,143707],{"class":45},"  justify-content",[28,143709,51512],{"class":34},[28,143711,51743],{"class":45},[28,143713,1367],{"class":34},[28,143715,143716,143719,143721,143723],{"class":30,"line":1291},[28,143717,143718],{"class":45},"  align-items",[28,143720,51512],{"class":34},[28,143722,51667],{"class":45},[28,143724,1367],{"class":34},[28,143726,143727,143730,143732,143734],{"class":30,"line":1297},[28,143728,143729],{"class":45},"  flex-wrap",[28,143731,51512],{"class":34},[28,143733,78685],{"class":45},[28,143735,1367],{"class":34},[28,143737,143738],{"class":30,"line":1388},[28,143739,1642],{"class":34},[14,143741,70528],{},[14,143743,143744],{},".form-item .male-label {",[14,143746,143747],{},"   margin-right: 20px;",[14,143749,143750],{},"   display: inline-flex;",[14,143752,143753],{},"   align-items: center;",[14,143755,1150],{},[1539,143757],{"style":126467,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1539,143760],{"style":126467,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[188,143763,143765],{"id":143764},"_2052-常见父项属性","20.5.2 常见父项属性",[171,143767,143768,143771,143774,143777,143780,143783,143786],{},[174,143769,143770],{},"flex-direction：设置主轴的方向",[174,143772,143773],{},"justify-content：设置主轴上的子元素排列方式",[174,143775,143776],{},"flex-wrap：设置子元素是否换行",[174,143778,143779],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[174,143781,143782],{},"align-items：设置侧轴上的子元素排列方式（单行）",[174,143784,143785],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[174,143787,143770],{},[1539,143789],{"style":126467,"src":143790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1539,143792],{"style":126467,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[171,143795,143796],{"start":94},[174,143797,143773],{},[1539,143799],{"style":126467,"src":143800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143802,143803,143806],{},[25,143804,143805],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143808,143809],{},"跟着主轴走",[171,143811,143812],{"start":109},[174,143813,143776],{},[1539,143815],{"style":126467,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143818,143819],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[171,143821,143822],{"start":125},[174,143823,143779],{},[1539,143825],{"style":126467,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143828,143829],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143831,143832],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[171,143834,143835],{"start":131},[174,143836,143782],{},[1539,143838],{"style":126467,"src":143839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143841,143842],{},"align-items与align-content之间的区别：",[14,143844,143845],{},"单找items，多找content",[1539,143847],{"style":126467,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[171,143850,143851],{"start":1291},[174,143852,143785],{},[1539,143854],{"style":126467,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[188,143857,143859],{"id":143858},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[171,143861,143862],{},[174,143863,143864],{},[365,143865,143866],{},"flex 属性",[14,143868,143869],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1539,143871],{"style":126467,"src":143872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143874,143875],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143877,143878],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[171,143880,143881],{"start":94},[174,143882,143883,13872,143886],{},[365,143884,143885],{},"align-self",[365,143887,143888],{},"控制子项自己在侧轴上的排列方式",[1539,143890],{"style":126467,"src":143891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143893,143894],{},"单个子盒子在父盒子侧轴上的排列方式",[171,143896,143897],{"start":109},[174,143898,143899,143901],{},[365,143900,95356],{}," 属性定义项目的排列顺序",[1539,143903],{"style":126467,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[188,143906,143908],{"id":143907},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1539,143910],{"style":126467,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143913,143914],{},"必须要添加浏览器的私有前缀",[188,143916,143918],{"id":143917},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143920,143921],{},"学到最重要的知识：",[14,143923,143924],{},"flex处理这样的布局思路",[1539,143926],{"style":126467,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[18,143929,143931],{"className":126611,"code":143930,"language":126613,"meta":23,"style":23},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[25,143932,143933,143939,143949,143959,143969],{"__ignoreMap":23},[28,143934,143935,143937],{"class":30,"line":31},[28,143936,143678],{"class":2040},[28,143938,15649],{"class":34},[28,143940,143941,143943,143945,143947],{"class":30,"line":94},[28,143942,128227],{"class":45},[28,143944,51512],{"class":34},[28,143946,51552],{"class":45},[28,143948,1367],{"class":34},[28,143950,143951,143953,143955,143957],{"class":30,"line":109},[28,143952,143707],{"class":45},[28,143954,51512],{"class":34},[28,143956,51667],{"class":45},[28,143958,1367],{"class":34},[28,143960,143961,143963,143965,143967],{"class":30,"line":125},[28,143962,143718],{"class":45},[28,143964,51512],{"class":34},[28,143966,51667],{"class":45},[28,143968,1367],{"class":34},[28,143970,143971],{"class":30,"line":131},[28,143972,1642],{"class":34},[14,143974,143975],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143977,143978],{},"使用属性选择器",[1539,143980],{"style":126467,"src":143981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143983,68964],{},[18,143985,143987],{"className":127358,"code":143986,"language":127360,"meta":23,"style":23},"\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",[25,143988,143989,143994,144008,144013,144033,144038,144057,144062,144081,144086,144105],{"__ignoreMap":23},[28,143990,143991],{"class":30,"line":31},[28,143992,143993],{"class":105},"\u003C!-- 携程网移动端案例结构 -->\n",[28,143995,143996,143998,144000,144002,144004,144006],{"class":30,"line":94},[28,143997,99],{"class":34},[28,143999,51686],{"class":51375},[28,144001,53561],{"class":2040},[28,144003,39],{"class":34},[28,144005,92398],{"class":320},[28,144007,51382],{"class":34},[28,144009,144010],{"class":30,"line":109},[28,144011,144012],{"class":105},"  \u003C!-- 搜索栏 -->\n",[28,144014,144015,144017,144019,144021,144023,144026,144029,144031],{"class":30,"line":125},[28,144016,52219],{"class":34},[28,144018,51686],{"class":51375},[28,144020,53561],{"class":2040},[28,144022,39],{"class":34},[28,144024,144025],{"class":320},"\"search-index\"",[28,144027,144028],{"class":34},">...\u003C\u002F",[28,144030,51686],{"class":51375},[28,144032,51382],{"class":34},[28,144034,144035],{"class":30,"line":131},[28,144036,144037],{"class":105},"  \u003C!-- 焦点图 -->\n",[28,144039,144040,144042,144044,144046,144048,144051,144053,144055],{"class":30,"line":1291},[28,144041,52219],{"class":34},[28,144043,51686],{"class":51375},[28,144045,53561],{"class":2040},[28,144047,39],{"class":34},[28,144049,144050],{"class":320},"\"focus\"",[28,144052,144028],{"class":34},[28,144054,51686],{"class":51375},[28,144056,51382],{"class":34},[28,144058,144059],{"class":30,"line":1297},[28,144060,144061],{"class":105},"  \u003C!-- 主导航 -->\n",[28,144063,144064,144066,144068,144070,144072,144075,144077,144079],{"class":30,"line":1388},[28,144065,52219],{"class":34},[28,144067,51686],{"class":51375},[28,144069,53561],{"class":2040},[28,144071,39],{"class":34},[28,144073,144074],{"class":320},"\"local-nav\"",[28,144076,144028],{"class":34},[28,144078,51686],{"class":51375},[28,144080,51382],{"class":34},[28,144082,144083],{"class":30,"line":1394},[28,144084,144085],{"class":105},"  \u003C!-- 子导航 -->\n",[28,144087,144088,144090,144092,144094,144096,144099,144101,144103],{"class":30,"line":1406},[28,144089,52219],{"class":34},[28,144091,51686],{"class":51375},[28,144093,53561],{"class":2040},[28,144095,39],{"class":34},[28,144097,144098],{"class":320},"\"nav-common\"",[28,144100,144028],{"class":34},[28,144102,51686],{"class":51375},[28,144104,51382],{"class":34},[28,144106,144107,144109,144111],{"class":30,"line":1689},[28,144108,51860],{"class":34},[28,144110,51686],{"class":51375},[28,144112,51382],{"class":34},[14,144114,70528],{},[18,144116,144117],{"className":126611,"code":137063,"language":126613,"meta":23,"style":23},[25,144118,144119,144133,144149],{"__ignoreMap":23},[28,144120,144121,144123,144125,144127,144129,144131],{"class":30,"line":31},[28,144122,53896],{"class":51375},[28,144124,1096],{"class":34},[28,144126,103166],{"class":2040},[28,144128,39],{"class":38},[28,144130,62774],{"class":320},[28,144132,137080],{"class":34},[28,144134,144135,144137,144139,144141,144143,144145,144147],{"class":30,"line":94},[28,144136,70971],{"class":45},[28,144138,51512],{"class":34},[28,144140,46],{"class":45},[28,144142,51567],{"class":38},[28,144144,51596],{"class":45},[28,144146,130191],{"class":45},[28,144148,1367],{"class":34},[28,144150,144151],{"class":30,"line":109},[28,144152,1642],{"class":34},[14,144154,144155],{},"总代码和效果展示：",[1539,144157],{"style":126467,"src":144158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144160,68964],{},[18,144162,144163],{"className":127358,"code":143986,"language":127360,"meta":23,"style":23},[25,144164,144165,144169,144183,144187,144205,144209,144227,144231,144249,144253,144271],{"__ignoreMap":23},[28,144166,144167],{"class":30,"line":31},[28,144168,143993],{"class":105},[28,144170,144171,144173,144175,144177,144179,144181],{"class":30,"line":94},[28,144172,99],{"class":34},[28,144174,51686],{"class":51375},[28,144176,53561],{"class":2040},[28,144178,39],{"class":34},[28,144180,92398],{"class":320},[28,144182,51382],{"class":34},[28,144184,144185],{"class":30,"line":109},[28,144186,144012],{"class":105},[28,144188,144189,144191,144193,144195,144197,144199,144201,144203],{"class":30,"line":125},[28,144190,52219],{"class":34},[28,144192,51686],{"class":51375},[28,144194,53561],{"class":2040},[28,144196,39],{"class":34},[28,144198,144025],{"class":320},[28,144200,144028],{"class":34},[28,144202,51686],{"class":51375},[28,144204,51382],{"class":34},[28,144206,144207],{"class":30,"line":131},[28,144208,144037],{"class":105},[28,144210,144211,144213,144215,144217,144219,144221,144223,144225],{"class":30,"line":1291},[28,144212,52219],{"class":34},[28,144214,51686],{"class":51375},[28,144216,53561],{"class":2040},[28,144218,39],{"class":34},[28,144220,144050],{"class":320},[28,144222,144028],{"class":34},[28,144224,51686],{"class":51375},[28,144226,51382],{"class":34},[28,144228,144229],{"class":30,"line":1297},[28,144230,144061],{"class":105},[28,144232,144233,144235,144237,144239,144241,144243,144245,144247],{"class":30,"line":1388},[28,144234,52219],{"class":34},[28,144236,51686],{"class":51375},[28,144238,53561],{"class":2040},[28,144240,39],{"class":34},[28,144242,144074],{"class":320},[28,144244,144028],{"class":34},[28,144246,51686],{"class":51375},[28,144248,51382],{"class":34},[28,144250,144251],{"class":30,"line":1394},[28,144252,144085],{"class":105},[28,144254,144255,144257,144259,144261,144263,144265,144267,144269],{"class":30,"line":1406},[28,144256,52219],{"class":34},[28,144258,51686],{"class":51375},[28,144260,53561],{"class":2040},[28,144262,39],{"class":34},[28,144264,144098],{"class":320},[28,144266,144028],{"class":34},[28,144268,51686],{"class":51375},[28,144270,51382],{"class":34},[28,144272,144273,144275,144277],{"class":30,"line":1689},[28,144274,51860],{"class":34},[28,144276,51686],{"class":51375},[28,144278,51382],{"class":34},[14,144280,70528],{},[18,144282,144283],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,144284,144285,144289,144303,144307],{"__ignoreMap":23},[28,144286,144287],{"class":30,"line":31},[28,144288,130722],{"class":105},[28,144290,144291,144293,144295,144297,144299,144301],{"class":30,"line":94},[28,144292,99],{"class":34},[28,144294,51686],{"class":51375},[28,144296,53561],{"class":2040},[28,144298,39],{"class":34},[28,144300,130735],{"class":320},[28,144302,51382],{"class":34},[28,144304,144305],{"class":30,"line":109},[28,144306,130742],{"class":34},[28,144308,144309,144311,144313],{"class":30,"line":125},[28,144310,51860],{"class":34},[28,144312,51686],{"class":51375},[28,144314,51382],{"class":34},[136,144316,138012],{},{"title":23,"searchDepth":94,"depth":94,"links":144318},[144319,144320,144324,144325,144326],{"id":143463,"depth":94,"text":143464},{"id":143495,"depth":94,"text":143496,"children":144321},[144322,144323],{"id":143499,"depth":109,"text":143500},{"id":143516,"depth":109,"text":143517},{"id":143535,"depth":94,"text":143536},{"id":143542,"depth":94,"text":143543},{"id":143629,"depth":94,"text":143630,"children":144327},[144328,144329,144330,144331,144332],{"id":143636,"depth":109,"text":143637},{"id":143764,"depth":109,"text":143765},{"id":143858,"depth":109,"text":143859},{"id":143907,"depth":109,"text":143908},{"id":143917,"depth":109,"text":143918},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143455,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144339,"title":144340,"body":144341,"description":141,"extension":142,"meta":145568,"navigation":144,"path":145569,"seo":145570,"stem":145571,"__hash__":145572},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144342,"toc":145546},[144343,144346,144350,144354,144357,144360,144364,144369,144372,144375,144378,144381,144384,144441,144444,144449,144452,144455,144459,144470,144474,144477,144480,144487,144492,144496,144499,144505,144508,144512,144515,144522,144525,144528,144535,144538,144545,144548,144551,144558,144561,144564,144566,144583,144587,144590,144593,144596,144600,144603,144606,144609,144612,144615,144618,144620,144623,144626,144688,144691,144801,144808,144814,144817,144820,144824,144827,144831,144836,144839,144846,144849,144855,144860,144863,144866,144869,144872,144875,144878,144881,144884,144940,144942,144968,144972,144975,144978,144981,144989,144992,144995,144999,145055,145058,145062,145068,145079,145082,145087,145090,145093,145099,145102,145105,145108,145111,145114,145117,145120,145123,145148,145154,145157,145160,145163,145166,145169,145172,145177,145180,145183,145186,145194,145197,145204,145207,145210,145212,145236,145238,145241,145244,145247,145250,145253,145256,145259,145293,145296,145299,145333,145340,145343,145346,145349,145352,145355,145358,145365,145368,145371,145374,145377,145384,145387,145390,145397,145400,145403,145407,145410,145413,145416,145419,145422,145425,145428,145431,145433,145457,145459,145483,145487,145498,145501,145504,145507,145510,145513,145516,145519,145522,145525,145528,145531,145534,145537,145540,145543],[10,144344,144340],{"id":144345},"_21-移动端布局实战下篇",[159,144347,144349],{"id":144348},"_211-rem适配布局","21.1 rem适配布局",[188,144351,144353],{"id":144352},"_2111-rem单位","21.1.1 rem单位",[1539,144355],{"style":126467,"src":144356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144358,144359],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[188,144361,144363],{"id":144362},"_2112-媒体查询","21.1.2 媒体查询",[171,144365,144366],{},[174,144367,144368],{},"参数介绍",[1539,144370],{"style":126467,"src":144371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1539,144373],{"style":126467,"src":144374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1539,144376],{"style":126467,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1539,144379],{"style":126467,"src":144380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1539,144382],{"style":126467,"src":144383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[18,144385,144387],{"className":126611,"code":144386,"language":126613,"meta":23,"style":23},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[25,144388,144389,144394,144413,144420,144433,144437],{"__ignoreMap":23},[28,144390,144391],{"class":30,"line":31},[28,144392,144393],{"class":105},"\u002F* 媒体查询 *\u002F\n",[28,144395,144396,144399,144401,144404,144406,144409,144411],{"class":30,"line":94},[28,144397,144398],{"class":38},"@media",[28,144400,1735],{"class":34},[28,144402,144403],{"class":45},"max-width",[28,144405,51512],{"class":34},[28,144407,144408],{"class":45},"768",[28,144410,51567],{"class":38},[28,144412,12519],{"class":34},[28,144414,144415,144418],{"class":30,"line":109},[28,144416,144417],{"class":2040},"  .container",[28,144419,15649],{"class":34},[28,144421,144422,144425,144427,144429,144431],{"class":30,"line":125},[28,144423,144424],{"class":45},"    width",[28,144426,51512],{"class":34},[28,144428,525],{"class":45},[28,144430,542],{"class":38},[28,144432,1367],{"class":34},[28,144434,144435],{"class":30,"line":131},[28,144436,127407],{"class":34},[28,144438,144439],{"class":30,"line":1291},[28,144440,1642],{"class":34},[14,144442,144443],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[171,144445,144446],{"start":94},[174,144447,144448],{},"引入资源",[1539,144450],{"style":126467,"src":144451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144453,144454],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[188,144456,144458],{"id":144457},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1211,144460,144461,144464,144467],{},[174,144462,144463],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[174,144465,144466],{},"媒体查询可以根据不同设备宽度来修改样式",[174,144468,144469],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[159,144471,144473],{"id":144472},"_212-less基础","21.2 Less基础",[14,144475,144476],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144478,144479],{},"Less可以解决该问题，它是css的扩展语言",[14,144481,144482,144483],{},"Less中文网址： ",[35,144484,144485],{"href":144485,"rel":144486},"http:\u002F\u002Flesscss.cn\u002F",[23942],[14,144488,144489],{},[365,144490,144491],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[188,144493,144495],{"id":144494},"_2121-less安装","21.2.1 less安装",[14,144497,144498],{},"如果使用vscode，则无需进行下方安装步骤",[14,144500,144501],{},[35,144502,144503],{"href":144503,"rel":144504},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23942],[1539,144506],{"style":126467,"src":144507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[188,144509,144511],{"id":144510},"_2122-less使用","21.2.2 less使用",[14,144513,144514],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[171,144516,144517],{},[174,144518,144519],{},[365,144520,144521],{},"Less 变量",[1539,144523],{"style":126467,"src":144524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1539,144526],{"style":126467,"src":144527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[171,144529,144530],{"start":94},[174,144531,144532],{},[365,144533,144534],{},"Less 编译",[1539,144536],{"style":126467,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[171,144539,144540],{"start":109},[174,144541,144542],{},[365,144543,144544],{},"Less 嵌套",[1539,144546],{"style":126467,"src":144547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1539,144549],{"style":126467,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[171,144552,144553],{"start":125},[174,144554,144555],{},[365,144556,144557],{},"Less 运算",[1539,144559],{"style":126467,"src":144560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144562,144563],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144565,250],{},[1211,144567,144568,144571,144574,144577,144580],{},[174,144569,144570],{},"乘号（*）和除号（\u002F）的写法",[174,144572,144573],{},"运算符中间左右有个空格隔开 1px + 5",[174,144575,144576],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[174,144578,144579],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[174,144581,144582],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[159,144584,144586],{"id":144585},"_213-rem-适配方案","21.3 rem 适配方案",[14,144588,144589],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144591,144592],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1539,144594],{"style":126467,"src":144595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[188,144597,144599],{"id":144598},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144601,144602],{},"rem + 媒体查询 + less 技术",[1539,144604],{"style":126467,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144607,144608],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144610,144611],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1539,144613],{"style":126467,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144616,144617],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144619,14710],{},[1539,144621],{"style":126467,"src":144622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144624,144625],{},"index.html:",[18,144627,144629],{"className":126611,"code":144628,"language":126613,"meta":23,"style":23},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[25,144630,144631,144636,144642,144658,144662,144668,144684],{"__ignoreMap":23},[28,144632,144633],{"class":30,"line":31},[28,144634,144635],{"class":105},"\u002F* rem 适配方案 *\u002F\n",[28,144637,144638,144640],{"class":30,"line":94},[28,144639,50710],{"class":51375},[28,144641,15649],{"class":34},[28,144643,144644,144646,144648,144651,144653,144655],{"class":30,"line":109},[28,144645,70701],{"class":45},[28,144647,51512],{"class":34},[28,144649,144650],{"class":45},"62.5",[28,144652,542],{"class":38},[28,144654,130474],{"class":34},[28,144656,144657],{"class":105},"\u002F* 1rem = 10px *\u002F\n",[28,144659,144660],{"class":30,"line":125},[28,144661,1642],{"class":34},[28,144663,144664,144666],{"class":30,"line":131},[28,144665,130459],{"class":2040},[28,144667,15649],{"class":34},[28,144669,144670,144672,144674,144676,144679,144681],{"class":30,"line":1291},[28,144671,70643],{"class":45},[28,144673,51512],{"class":34},[28,144675,659],{"class":45},[28,144677,144678],{"class":38},"rem",[28,144680,130474],{"class":34},[28,144682,144683],{"class":105},"\u002F* 100px *\u002F\n",[28,144685,144686],{"class":30,"line":1297},[28,144687,1642],{"class":34},[14,144689,144690],{},"common.less",[18,144692,144694],{"className":126611,"code":144693,"language":126613,"meta":23,"style":23},"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",[25,144695,144696,144702,144717,144721,144727,144741,144745,144749,144753,144759,144773,144777,144783,144797],{"__ignoreMap":23},[28,144697,144698,144700],{"class":30,"line":31},[28,144699,50710],{"class":51375},[28,144701,15649],{"class":34},[28,144703,144704,144706,144708,144710,144712,144714],{"class":30,"line":94},[28,144705,70701],{"class":45},[28,144707,51512],{"class":34},[28,144709,144650],{"class":45},[28,144711,542],{"class":38},[28,144713,26145],{"class":34},[28,144715,144716],{"class":105},"\u002F* 10px *\u002F\n",[28,144718,144719],{"class":30,"line":109},[28,144720,1642],{"class":34},[28,144722,144723,144725],{"class":30,"line":125},[28,144724,51686],{"class":51375},[28,144726,15649],{"class":34},[28,144728,144729,144731,144733,144735,144737,144739],{"class":30,"line":131},[28,144730,70643],{"class":45},[28,144732,51512],{"class":34},[28,144734,659],{"class":45},[28,144736,144678],{"class":38},[28,144738,26145],{"class":34},[28,144740,144683],{"class":105},[28,144742,144743],{"class":30,"line":1291},[28,144744,1642],{"class":34},[28,144746,144747],{"class":30,"line":1297},[28,144748,136072],{"class":34},[28,144750,144751],{"class":30,"line":1388},[28,144752,144635],{"class":105},[28,144754,144755,144757],{"class":30,"line":1394},[28,144756,50710],{"class":51375},[28,144758,15649],{"class":34},[28,144760,144761,144763,144765,144767,144769,144771],{"class":30,"line":1406},[28,144762,70701],{"class":45},[28,144764,51512],{"class":34},[28,144766,144650],{"class":45},[28,144768,542],{"class":38},[28,144770,130474],{"class":34},[28,144772,144657],{"class":105},[28,144774,144775],{"class":30,"line":1689},[28,144776,1642],{"class":34},[28,144778,144779,144781],{"class":30,"line":1694},[28,144780,130459],{"class":2040},[28,144782,15649],{"class":34},[28,144784,144785,144787,144789,144791,144793,144795],{"class":30,"line":1700},[28,144786,70643],{"class":45},[28,144788,51512],{"class":34},[28,144790,659],{"class":45},[28,144792,144678],{"class":38},[28,144794,130474],{"class":34},[28,144796,144683],{"class":105},[28,144798,144799],{"class":30,"line":1705},[28,144800,1642],{"class":34},[14,144802,144803,144804,144807],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23630,144805,144806],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[18,144809,144812],{"className":144810,"code":144811,"language":5264},[5262],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[25,144813,144811],{"__ignoreMap":23},[14,144815,144816],{},"less保存时会自动变成.css文件",[14,144818,144819],{},"好好搞懂上述代码写法",[188,144821,144823],{"id":144822},"_2132-样式导入样式","21.3.2 样式导入样式",[1539,144825],{"style":126467,"src":144826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[188,144828,144830],{"id":144829},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[171,144832,144833],{},[174,144834,144835],{},"准备工作",[1539,144837],{"style":126467,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144840,144841,144842],{},"github地址：",[35,144843,144844],{"href":144844,"rel":144845},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23942],[14,144847,144848],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144850,144851,144852],{},"js文件引入到index.html中使用的是",[25,144853,144854],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[171,144856,144857],{"start":94},[174,144858,144859],{},"vscode插件",[1539,144861],{"style":126467,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144864,144865],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144867,144868],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1539,144870],{"style":126467,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144873,144874],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1539,144876],{"style":126467,"src":144877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144879,144880],{},"修改成75就可以，alt+z为快捷键",[14,144882,144883],{},"index.css：",[18,144885,144886],{"className":126611,"code":144628,"language":126613,"meta":23,"style":23},[25,144887,144888,144892,144898,144912,144916,144922,144936],{"__ignoreMap":23},[28,144889,144890],{"class":30,"line":31},[28,144891,144635],{"class":105},[28,144893,144894,144896],{"class":30,"line":94},[28,144895,50710],{"class":51375},[28,144897,15649],{"class":34},[28,144899,144900,144902,144904,144906,144908,144910],{"class":30,"line":109},[28,144901,70701],{"class":45},[28,144903,51512],{"class":34},[28,144905,144650],{"class":45},[28,144907,542],{"class":38},[28,144909,130474],{"class":34},[28,144911,144657],{"class":105},[28,144913,144914],{"class":30,"line":125},[28,144915,1642],{"class":34},[28,144917,144918,144920],{"class":30,"line":131},[28,144919,130459],{"class":2040},[28,144921,15649],{"class":34},[28,144923,144924,144926,144928,144930,144932,144934],{"class":30,"line":1291},[28,144925,70643],{"class":45},[28,144927,51512],{"class":34},[28,144929,659],{"class":45},[28,144931,144678],{"class":38},[28,144933,130474],{"class":34},[28,144935,144683],{"class":105},[28,144937,144938],{"class":30,"line":1297},[28,144939,1642],{"class":34},[14,144941,144625],{},[18,144943,144944],{"className":126611,"code":127015,"language":126613,"meta":23,"style":23},[25,144945,144946,144952,144964],{"__ignoreMap":23},[28,144947,144948,144950],{"class":30,"line":31},[28,144949,51875],{"class":51375},[28,144951,15649],{"class":34},[28,144953,144954,144956,144958,144960,144962],{"class":30,"line":94},[28,144955,70701],{"class":45},[28,144957,51512],{"class":34},[28,144959,811],{"class":45},[28,144961,51567],{"class":38},[28,144963,1367],{"class":34},[28,144965,144966],{"class":30,"line":109},[28,144967,1642],{"class":34},[159,144969,144971],{"id":144970},"_214-响应式开发","21.4 响应式开发",[14,144973,144974],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1539,144976],{"style":126467,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144979,144980],{},"做法：",[1211,144982,144983,144986],{},[174,144984,144985],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[174,144987,144988],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1539,144990],{"style":126467,"src":144991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144993,144994],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[188,144996,144998],{"id":144997},"_2141-简单代码示范","21.4.1 简单代码示范",[18,145000,145001],{"className":126611,"code":144628,"language":126613,"meta":23,"style":23},[25,145002,145003,145007,145013,145027,145031,145037,145051],{"__ignoreMap":23},[28,145004,145005],{"class":30,"line":31},[28,145006,144635],{"class":105},[28,145008,145009,145011],{"class":30,"line":94},[28,145010,50710],{"class":51375},[28,145012,15649],{"class":34},[28,145014,145015,145017,145019,145021,145023,145025],{"class":30,"line":109},[28,145016,70701],{"class":45},[28,145018,51512],{"class":34},[28,145020,144650],{"class":45},[28,145022,542],{"class":38},[28,145024,130474],{"class":34},[28,145026,144657],{"class":105},[28,145028,145029],{"class":30,"line":125},[28,145030,1642],{"class":34},[28,145032,145033,145035],{"class":30,"line":131},[28,145034,130459],{"class":2040},[28,145036,15649],{"class":34},[28,145038,145039,145041,145043,145045,145047,145049],{"class":30,"line":1291},[28,145040,70643],{"class":45},[28,145042,51512],{"class":34},[28,145044,659],{"class":45},[28,145046,144678],{"class":38},[28,145048,130474],{"class":34},[28,145050,144683],{"class":105},[28,145052,145053],{"class":30,"line":1297},[28,145054,1642],{"class":34},[14,145056,145057],{},"父盒子一般命名为container",[188,145059,145061],{"id":145060},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145063,145064,145065],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[365,145066,145067],{},"使得 Web 开发更加快捷",[1211,145069,145070],{},[174,145071,145072,145073],{},"官网：",[365,145074,145075],{},[35,145076,145077],{"href":145077,"rel":145078},"http:\u002F\u002Fgetbootstrap.com\u002F",[23942],[14,145080,145081],{},"可以直接去官网拿现成的东西",[171,145083,145084],{},[174,145085,145086],{},"Bootstrap的使用",[14,145088,145089],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145091,145092],{},"Bootstrap 使用四步曲：",[14,145094,145095,145098],{},[365,145096,145097],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1539,145100],{"style":126467,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145103,145104],{},"打开Bootstrap官网，然后下载",[1539,145106],{"style":126467,"src":145107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1539,145109],{"style":126467,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145112,145113],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145115,145116],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145118,145119],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1539,145121],{"style":126467,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[18,145124,145126],{"className":126611,"code":145125,"language":126613,"meta":23,"style":23},".center {\n  color: red;\n}\n",[25,145127,145128,145134,145144],{"__ignoreMap":23},[28,145129,145130,145132],{"class":30,"line":31},[28,145131,126902],{"class":2040},[28,145133,15649],{"class":34},[28,145135,145136,145138,145140,145142],{"class":30,"line":94},[28,145137,70980],{"class":45},[28,145139,51512],{"class":34},[28,145141,57496],{"class":45},[28,145143,1367],{"class":34},[28,145145,145146],{"class":30,"line":109},[28,145147,1642],{"class":34},[14,145149,145150,145153],{},[25,145151,145152],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1539,145155],{"style":126467,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1539,145158],{"style":126467,"src":145159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1539,145161],{"style":126467,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145164,145165],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1539,145167],{"style":126467,"src":145168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145170,145171],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[171,145173,145174],{"start":94},[174,145175,145176],{},"布局容器",[1539,145178],{"style":126467,"src":145179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145181,145182],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145184,145185],{},"container-fluid用于移动式布局比较方便",[171,145187,145188],{"start":109},[174,145189,145190,145191],{},"bootstrap ",[365,145192,145193],{},"栅格系统原理",[1539,145195],{"style":126467,"src":145196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[171,145198,145199],{"start":125},[174,145200,145201],{},[365,145202,145203],{},"栅格选项参数",[1539,145205],{"style":126467,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145208,145209],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145211,14710],{},[18,145213,145214],{"className":126611,"code":145125,"language":126613,"meta":23,"style":23},[25,145215,145216,145222,145232],{"__ignoreMap":23},[28,145217,145218,145220],{"class":30,"line":31},[28,145219,126902],{"class":2040},[28,145221,15649],{"class":34},[28,145223,145224,145226,145228,145230],{"class":30,"line":94},[28,145225,70980],{"class":45},[28,145227,51512],{"class":34},[28,145229,57496],{"class":45},[28,145231,1367],{"class":34},[28,145233,145234],{"class":30,"line":109},[28,145235,1642],{"class":34},[14,145237,135654],{},[1539,145239],{"style":126467,"src":145240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145242,145243],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145245,145246],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145248,145249],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145251,145252],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145254,145255],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145257,145258],{},"汇总展示说明：",[18,145260,145261],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,145262,145263,145267,145281,145285],{"__ignoreMap":23},[28,145264,145265],{"class":30,"line":31},[28,145266,130722],{"class":105},[28,145268,145269,145271,145273,145275,145277,145279],{"class":30,"line":94},[28,145270,99],{"class":34},[28,145272,51686],{"class":51375},[28,145274,53561],{"class":2040},[28,145276,39],{"class":34},[28,145278,130735],{"class":320},[28,145280,51382],{"class":34},[28,145282,145283],{"class":30,"line":109},[28,145284,130742],{"class":34},[28,145286,145287,145289,145291],{"class":30,"line":125},[28,145288,51860],{"class":34},[28,145290,51686],{"class":51375},[28,145292,51382],{"class":34},[1539,145294],{"style":126467,"src":145295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145297,145298],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[18,145300,145301],{"className":127358,"code":130715,"language":127360,"meta":23,"style":23},[25,145302,145303,145307,145321,145325],{"__ignoreMap":23},[28,145304,145305],{"class":30,"line":31},[28,145306,130722],{"class":105},[28,145308,145309,145311,145313,145315,145317,145319],{"class":30,"line":94},[28,145310,99],{"class":34},[28,145312,51686],{"class":51375},[28,145314,53561],{"class":2040},[28,145316,39],{"class":34},[28,145318,130735],{"class":320},[28,145320,51382],{"class":34},[28,145322,145323],{"class":30,"line":109},[28,145324,130742],{"class":34},[28,145326,145327,145329,145331],{"class":30,"line":125},[28,145328,51860],{"class":34},[28,145330,51686],{"class":51375},[28,145332,51382],{"class":34},[171,145334,145335],{"start":131},[174,145336,145337],{},[365,145338,145339],{},"列嵌套",[1539,145341],{"style":126467,"src":145342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145344,145345],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145347,145348],{},"没加row内部这样：",[1539,145350],{"style":126467,"src":145351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145353,145354],{},"加上row之后内部为：",[1539,145356],{"style":126467,"src":145357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[171,145359,145360],{"start":1291},[174,145361,145362],{},[365,145363,145364],{},"列偏移",[1539,145366],{"style":126467,"src":145367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145369,145370],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145372,145373],{},"要加偏移量，即偏移份数",[14,145375,145376],{},"偏移的份数=12-两个盒子的份数",[171,145378,145379],{"start":1297},[174,145380,145381],{},[365,145382,145383],{},"列排序",[1539,145385],{"style":126467,"src":145386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145388,145389],{},"pull拉左；push推右",[171,145391,145392],{"start":1388},[174,145393,145394],{},[365,145395,145396],{},"响应式工具",[1539,145398],{"style":126467,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145401,145402],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[188,145404,145406],{"id":145405},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145408,145409],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145411,145412],{},"ul {",[14,145414,145415],{},"list-style: none;",[14,145417,145418],{},"margin:0;",[14,145420,145421],{},"padding:0; }",[1539,145423],{"style":126467,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1539,145426],{"style":126467,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145429,145430],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145432,68964],{},[18,145434,145435],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,145436,145437,145443,145453],{"__ignoreMap":23},[28,145438,145439,145441],{"class":30,"line":31},[28,145440,130459],{"class":2040},[28,145442,15649],{"class":34},[28,145444,145445,145447,145449,145451],{"class":30,"line":94},[28,145446,131091],{"class":45},[28,145448,51512],{"class":34},[28,145450,23813],{"class":45},[28,145452,1367],{"class":34},[28,145454,145455],{"class":30,"line":109},[28,145456,1642],{"class":34},[14,145458,70528],{},[18,145460,145461],{"className":126611,"code":139281,"language":126613,"meta":23,"style":23},[25,145462,145463,145469,145479],{"__ignoreMap":23},[28,145464,145465,145467],{"class":30,"line":31},[28,145466,130459],{"class":2040},[28,145468,15649],{"class":34},[28,145470,145471,145473,145475,145477],{"class":30,"line":94},[28,145472,131091],{"class":45},[28,145474,51512],{"class":34},[28,145476,23813],{"class":45},[28,145478,1367],{"class":34},[28,145480,145481],{"class":30,"line":109},[28,145482,1642],{"class":34},[159,145484,145486],{"id":145485},"_215-swiper-插件使用","21.5 swiper 插件使用",[1211,145488,145489,145492,145495],{},[174,145490,145491],{},"下载需要的css和js文件html页面中 引入相关文件",[174,145493,145494],{},"官网找到类似案例，复制html结构，css样式 js 语法",[174,145496,145497],{},"根据需求定制修改模块",[1539,145499],{"style":126467,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145502,145503],{},"解压后将这两部分放到项目中",[1539,145505],{"style":126467,"src":145506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145508,145509],{},"这个插件可以帮助我们实现轮播图效果",[14,145511,145512],{},"用法：",[1539,145514],{"style":126467,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145517,145518],{},"找到自己喜欢的",[1539,145520],{"style":126467,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145523,145524],{},"右键，查看网页源代码",[1539,145526],{"style":126467,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145529,145530],{},"复制人家的结构内容",[14,145532,145533],{},"然后去看API文档：",[1539,145535],{"style":126467,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145538,145539],{},"可以看看如何修改样式",[14,145541,145542],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[136,145544,145545],{},"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":23,"searchDepth":94,"depth":94,"links":145547},[145548,145553,145557,145562,145567],{"id":144348,"depth":94,"text":144349,"children":145549},[145550,145551,145552],{"id":144352,"depth":109,"text":144353},{"id":144362,"depth":109,"text":144363},{"id":144457,"depth":109,"text":144458},{"id":144472,"depth":94,"text":144473,"children":145554},[145555,145556],{"id":144494,"depth":109,"text":144495},{"id":144510,"depth":109,"text":144511},{"id":144585,"depth":94,"text":144586,"children":145558},[145559,145560,145561],{"id":144598,"depth":109,"text":144599},{"id":144822,"depth":109,"text":144823},{"id":144829,"depth":109,"text":144830},{"id":144970,"depth":94,"text":144971,"children":145563},[145564,145565,145566],{"id":144997,"depth":109,"text":144998},{"id":145060,"depth":109,"text":145061},{"id":145405,"depth":109,"text":145406},{"id":145485,"depth":94,"text":145486},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144340,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145574,"title":145575,"body":145576,"description":141,"extension":142,"meta":145796,"navigation":144,"path":145797,"seo":145798,"stem":145799,"__hash__":145800},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145577,"toc":145792},[145578,145581,145585,145588,145603,145608,145611,145616,145651,145656,145668,145673,145686,145691,145708,145713,145733,145738,145756,145759,145762,145765,145768,145772,145775,145778,145781,145784,145787,145790],[10,145579,145575],{"id":145580},"_22-代码提交与新型相对单位",[159,145582,145584],{"id":145583},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145586,145587],{},"法1：",[171,145589,145590,145597,145600],{},[174,145591,145592,145593],{},"登录网站注册：",[35,145594,145595],{"href":145595,"rel":145596},"https:\u002F\u002Fgitee.com\u002F",[23942],[174,145598,145599],{},"码云创建新的仓库",[174,145601,145602],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1211,145604,145605],{},[174,145606,145607],{},"在网站根目录右键-- Git Bash Here",[1539,145609],{"style":126467,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1211,145612,145613],{},[174,145614,145615],{},"如果是第一次利用git提交，请配置好全局选项",[18,145617,145619],{"className":117355,"code":145618,"language":117357,"meta":23,"style":23},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[25,145620,145621,145637],{"__ignoreMap":23},[28,145622,145623,145626,145628,145631,145634],{"class":30,"line":31},[28,145624,145625],{"class":2040},"git",[28,145627,119778],{"class":320},[28,145629,145630],{"class":45}," --global",[28,145632,145633],{"class":320}," user.name",[28,145635,145636],{"class":320}," \"你的名字\"\n",[28,145638,145639,145641,145643,145645,145648],{"class":30,"line":94},[28,145640,145625],{"class":2040},[28,145642,119778],{"class":320},[28,145644,145630],{"class":45},[28,145646,145647],{"class":320}," user.email",[28,145649,145650],{"class":320}," \"你的邮箱\"\n",[1211,145652,145653],{},[174,145654,145655],{},"初始化仓库",[18,145657,145659],{"className":117355,"code":145658,"language":117357,"meta":23,"style":23},"git init\n",[25,145660,145661],{"__ignoreMap":23},[28,145662,145663,145665],{"class":30,"line":31},[28,145664,145625],{"class":2040},[28,145666,145667],{"class":320}," init\n",[1211,145669,145670],{},[174,145671,145672],{},"把本地文件放到暂存区",[18,145674,145676],{"className":117355,"code":145675,"language":117357,"meta":23,"style":23},"git add .\n",[25,145677,145678],{"__ignoreMap":23},[28,145679,145680,145682,145684],{"class":30,"line":31},[28,145681,145625],{"class":2040},[28,145683,5286],{"class":320},[28,145685,28819],{"class":320},[1211,145687,145688],{},[174,145689,145690],{},"把本地文件放到本地仓库里面",[18,145692,145694],{"className":117355,"code":145693,"language":117357,"meta":23,"style":23},"git commit -m \"first commit\"\n",[25,145695,145696],{"__ignoreMap":23},[28,145697,145698,145700,145703,145705],{"class":30,"line":31},[28,145699,145625],{"class":2040},[28,145701,145702],{"class":320}," commit",[28,145704,100941],{"class":45},[28,145706,145707],{"class":320}," \"first commit\"\n",[1211,145709,145710],{},[174,145711,145712],{},"链接远程仓库",[18,145714,145716],{"className":117355,"code":145715,"language":117357,"meta":23,"style":23},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[25,145717,145718],{"__ignoreMap":23},[28,145719,145720,145722,145725,145727,145730],{"class":30,"line":31},[28,145721,145625],{"class":2040},[28,145723,145724],{"class":320}," remote",[28,145726,5286],{"class":320},[28,145728,145729],{"class":320}," origin",[28,145731,145732],{"class":320}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1211,145734,145735],{},[174,145736,145737],{},"把本地仓库的文件推送到远程仓库 push",[18,145739,145741],{"className":117355,"code":145740,"language":117357,"meta":23,"style":23},"git push -u origin master\n",[25,145742,145743],{"__ignoreMap":23},[28,145744,145745,145747,145749,145751,145753],{"class":30,"line":31},[28,145746,145625],{"class":2040},[28,145748,29094],{"class":320},[28,145750,28368],{"class":45},[28,145752,145729],{"class":320},[28,145754,145755],{"class":320}," master\n",[1539,145757],{"style":126467,"src":145758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145760,145761],{},"上方方法暂未实现，后边学完git后在整",[14,145763,145764],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1539,145766],{"style":126467,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[159,145769,145771],{"id":145770},"_222-新型相对单位","22.2 新型相对单位",[1539,145773],{"style":126467,"src":145774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1539,145776],{"style":126467,"src":145777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145779,145780],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145782,145783],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1539,145785],{"style":126467,"src":145786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145788,145789],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[136,145791,24035],{},{"title":23,"searchDepth":94,"depth":94,"links":145793},[145794,145795],{"id":145583,"depth":94,"text":145584},{"id":145770,"depth":94,"text":145771},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145575,"description":141},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145802,"title":145803,"body":145804,"description":145808,"extension":142,"meta":145809,"navigation":144,"path":145810,"seo":145811,"stem":145812,"__hash__":145813},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145805,"toc":145806},[],{"title":23,"searchDepth":94,"depth":94,"links":145807},[],"自己正经开始学编程的第一门语言！",{"category":92914},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145803,"description":145808},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145815,"title":145816,"body":145817,"description":141,"extension":142,"meta":146964,"navigation":144,"path":146965,"seo":146966,"stem":146967,"__hash__":146968},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145818,"toc":146940},[145819,145822,145826,145829,145832,145857,145860,145866,145870,145873,145900,145903,145943,145946,145958,145961,145967,145971,145975,146002,146019,146026,146030,146033,146059,146062,146066,146069,146109,146112,146129,146135,146139,146144,146188,146191,146209,146212,146280,146284,146291,146294,146309,146312,146321,146324,146335,146338,146347,146350,146367,146370,146385,146389,146393,146396,146398,146418,146422,146425,146428,146439,146442,146448,146452,146458,146485,146488,146500,146503,146514,146517,146523,146527,146533,146583,146586,146628,146631,146664,146667,146701,146705,146708,146728,146731,146767,146770,146783,146787,146791,146797,146800,146813,146817,146820,146826,146829,146833,146836,146839,146888,146892,146908,146914,146921,146927,146937],[10,145820,145816],{"id":145821},"_1-python环境与第一个程序",[159,145823,145825],{"id":145824},"_11-什么是python","1.1 什么是Python",[14,145827,145828],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145830,145831],{},"理解 Python 时抓住三个关键词：",[171,145833,145834,145837,145840],{},[174,145835,145836],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[174,145838,145839],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[174,145841,145842,145843,428,145846,428,145849,428,145852,428,145854,28463],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[25,145844,145845],{},"os",[25,145847,145848],{},"sys",[25,145850,145851],{},"json",[25,145853,57935],{},[25,145855,145856],{},"datetime",[14,145858,145859],{},"Python 程序的运行链路：",[18,145861,145864],{"className":145862,"code":145863,"language":5264,"meta":23},[5262],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[25,145865,145863],{"__ignoreMap":23},[159,145867,145869],{"id":145868},"_12-python解释器","1.2 Python解释器",[14,145871,145872],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[18,145874,145876],{"className":23899,"code":145875,"language":23901,"meta":23,"style":23},"python --version\npython3 --version\npython\npython3\n",[25,145877,145878,145884,145890,145895],{"__ignoreMap":23},[28,145879,145880,145882],{"class":30,"line":31},[28,145881,22],{"class":2040},[28,145883,26371],{"class":45},[28,145885,145886,145888],{"class":30,"line":94},[28,145887,100938],{"class":2040},[28,145889,26371],{"class":45},[28,145891,145892],{"class":30,"line":109},[28,145893,145894],{"class":2040},"python\n",[28,145896,145897],{"class":30,"line":125},[28,145898,145899],{"class":2040},"python3\n",[14,145901,145902],{},"进入交互模式后，可以直接输入表达式：",[18,145904,145906],{"className":20,"code":145905,"language":22,"meta":23,"style":23},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[25,145907,145908,145919,145924,145938],{"__ignoreMap":23},[28,145909,145910,145913,145915,145917],{"class":30,"line":31},[28,145911,145912],{"class":38},">>>",[28,145914,25196],{"class":45},[28,145916,45642],{"class":38},[28,145918,47799],{"class":45},[28,145920,145921],{"class":30,"line":94},[28,145922,145923],{"class":45},"3\n",[28,145925,145926,145928,145931,145933,145936],{"class":30,"line":109},[28,145927,145912],{"class":38},[28,145929,145930],{"class":45}," print",[28,145932,221],{"class":34},[28,145934,145935],{"class":320},"\"hello python\"",[28,145937,227],{"class":34},[28,145939,145940],{"class":30,"line":125},[28,145941,145942],{"class":34},"hello python\n",[14,145944,145945],{},"退出交互模式：",[18,145947,145949],{"className":20,"code":145948,"language":22,"meta":23,"style":23},"exit()\n",[25,145950,145951],{"__ignoreMap":23},[28,145952,145953,145956],{"class":30,"line":31},[28,145954,145955],{"class":45},"exit",[28,145957,2053],{"class":34},[14,145959,145960],{},"或使用快捷键：",[18,145962,145965],{"className":145963,"code":145964,"language":5264,"meta":23},[5262],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[25,145966,145964],{"__ignoreMap":23},[159,145968,145970],{"id":145969},"_13-安装python","1.3 安装Python",[188,145972,145974],{"id":145973},"_131-windows安装","1.3.1 Windows安装",[171,145976,145977,145984,145987,145993,145999],{},[174,145978,145979,145980],{},"打开 Python 官网：",[35,145981,145982],{"href":145982,"rel":145983},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23942],[174,145985,145986],{},"下载 Windows Installer。",[174,145988,145989,145990,28463],{},"安装时勾选 ",[25,145991,145992],{},"Add Python to PATH",[174,145994,145995,145996,28463],{},"点击 ",[25,145997,145998],{},"Install Now",[174,146000,146001],{},"安装完成后打开命令提示符验证：",[18,146003,146005],{"className":23899,"code":146004,"language":23901,"meta":23,"style":23},"python --version\npip --version\n",[25,146006,146007,146013],{"__ignoreMap":23},[28,146008,146009,146011],{"class":30,"line":31},[28,146010,22],{"class":2040},[28,146012,26371],{"class":45},[28,146014,146015,146017],{"class":30,"line":94},[28,146016,23908],{"class":2040},[28,146018,26371],{"class":45},[14,146020,146021,146022,146025],{},"如果提示 ",[25,146023,146024],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[188,146027,146029],{"id":146028},"_132-macos安装","1.3.2 macOS安装",[14,146031,146032],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[18,146034,146036],{"className":23899,"code":146035,"language":23901,"meta":23,"style":23},"brew install python\npython3 --version\npip3 --version\n",[25,146037,146038,146047,146053],{"__ignoreMap":23},[28,146039,146040,146043,146045],{"class":30,"line":31},[28,146041,146042],{"class":2040},"brew",[28,146044,23911],{"class":320},[28,146046,124377],{"class":320},[28,146048,146049,146051],{"class":30,"line":94},[28,146050,100938],{"class":2040},[28,146052,26371],{"class":45},[28,146054,146055,146057],{"class":30,"line":109},[28,146056,119759],{"class":2040},[28,146058,26371],{"class":45},[14,146060,146061],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[188,146063,146065],{"id":146064},"_133-linux安装","1.3.3 Linux安装",[14,146067,146068],{},"Ubuntu\u002FDebian：",[18,146070,146072],{"className":23899,"code":146071,"language":23901,"meta":23,"style":23},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[25,146073,146074,146082,146097,146103],{"__ignoreMap":23},[28,146075,146076,146078,146080],{"class":30,"line":31},[28,146077,24654],{"class":2040},[28,146079,117376],{"class":320},[28,146081,26320],{"class":320},[28,146083,146084,146086,146088,146090,146092,146094],{"class":30,"line":94},[28,146085,24654],{"class":2040},[28,146087,117376],{"class":320},[28,146089,23911],{"class":320},[28,146091,104462],{"class":320},[28,146093,100857],{"class":320},[28,146095,146096],{"class":320}," python3-venv\n",[28,146098,146099,146101],{"class":30,"line":109},[28,146100,100938],{"class":2040},[28,146102,26371],{"class":45},[28,146104,146105,146107],{"class":30,"line":125},[28,146106,119759],{"class":2040},[28,146108,26371],{"class":45},[14,146110,146111],{},"Fedora：",[18,146113,146115],{"className":23899,"code":146114,"language":23901,"meta":23,"style":23},"sudo dnf install python3 python3-pip\n",[25,146116,146117],{"__ignoreMap":23},[28,146118,146119,146121,146123,146125,146127],{"class":30,"line":31},[28,146120,24654],{"class":2040},[28,146122,26393],{"class":320},[28,146124,23911],{"class":320},[28,146126,104462],{"class":320},[28,146128,119824],{"class":320},[14,146130,146131,146132,146134],{},"Linux 上通常使用 ",[25,146133,100938],{}," 命令，避免和系统旧版本 Python 冲突。",[159,146136,146138],{"id":146137},"_14-pip包管理器","1.4 pip包管理器",[14,146140,146141,146143],{},[25,146142,23908],{}," 用来安装第三方库。",[18,146145,146147],{"className":23899,"code":146146,"language":23901,"meta":23,"style":23},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[25,146148,146149,146158,146167,146175,146181],{"__ignoreMap":23},[28,146150,146151,146153,146155],{"class":30,"line":31},[28,146152,23908],{"class":2040},[28,146154,23911],{"class":320},[28,146156,146157],{"class":320}," requests\n",[28,146159,146160,146162,146165],{"class":30,"line":94},[28,146161,23908],{"class":2040},[28,146163,146164],{"class":320}," uninstall",[28,146166,146157],{"class":320},[28,146168,146169,146171,146173],{"class":30,"line":109},[28,146170,23908],{"class":2040},[28,146172,117633],{"class":320},[28,146174,146157],{"class":320},[28,146176,146177,146179],{"class":30,"line":125},[28,146178,23908],{"class":2040},[28,146180,119014],{"class":320},[28,146182,146183,146185],{"class":30,"line":131},[28,146184,23908],{"class":2040},[28,146186,146187],{"class":320}," freeze\n",[14,146189,146190],{},"国内网络较慢时可以临时使用镜像：",[18,146192,146194],{"className":23899,"code":146193,"language":23901,"meta":23,"style":23},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,146195,146196],{"__ignoreMap":23},[28,146197,146198,146200,146202,146205,146207],{"class":30,"line":31},[28,146199,23908],{"class":2040},[28,146201,23911],{"class":320},[28,146203,146204],{"class":320}," requests",[28,146206,26508],{"class":45},[28,146208,119787],{"class":320},[14,146210,146211],{},"常见第三方库：",[353,146213,146214,146223],{},[356,146215,146216],{},[359,146217,146218,146221],{},[362,146219,146220],{},"库",[362,146222,102755],{},[400,146224,146225,146233,146240,146248,146256,146264,146272],{},[359,146226,146227,146230],{},[405,146228,146229],{},"requests",[405,146231,146232],{},"网络请求",[359,146234,146235,146237],{},[405,146236,100685],{},[405,146238,146239],{},"数值计算",[359,146241,146242,146245],{},[405,146243,146244],{},"pandas",[405,146246,146247],{},"表格数据处理",[359,146249,146250,146253],{},[405,146251,146252],{},"matplotlib",[405,146254,146255],{},"绘图",[359,146257,146258,146261],{},[405,146259,146260],{},"pyecharts",[405,146262,146263],{},"ECharts 图表",[359,146265,146266,146269],{},[405,146267,146268],{},"flask",[405,146270,146271],{},"Web 后端",[359,146273,146274,146277],{},[405,146275,146276],{},"pytest",[405,146278,146279],{},"自动化测试",[159,146281,146283],{"id":146282},"_15-虚拟环境","1.5 虚拟环境",[14,146285,146286,146287,146290],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[25,146288,146289],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146292,146293],{},"创建虚拟环境：",[18,146295,146297],{"className":23899,"code":146296,"language":23901,"meta":23,"style":23},"python -m venv .venv\n",[25,146298,146299],{"__ignoreMap":23},[28,146300,146301,146303,146305,146307],{"class":30,"line":31},[28,146302,22],{"class":2040},[28,146304,100941],{"class":45},[28,146306,100944],{"class":320},[28,146308,100947],{"class":320},[14,146310,146311],{},"Windows 激活：",[18,146313,146315],{"className":23899,"code":146314,"language":23901,"meta":23,"style":23},".venv\\Scripts\\activate\n",[25,146316,146317],{"__ignoreMap":23},[28,146318,146319],{"class":30,"line":31},[28,146320,146314],{"class":2040},[14,146322,146323],{},"macOS\u002FLinux 激活：",[18,146325,146327],{"className":23899,"code":146326,"language":23901,"meta":23,"style":23},"source .venv\u002Fbin\u002Factivate\n",[25,146328,146329],{"__ignoreMap":23},[28,146330,146331,146333],{"class":30,"line":31},[28,146332,100952],{"class":45},[28,146334,100955],{"class":320},[14,146336,146337],{},"退出虚拟环境：",[18,146339,146341],{"className":23899,"code":146340,"language":23901,"meta":23,"style":23},"deactivate\n",[25,146342,146343],{"__ignoreMap":23},[28,146344,146345],{"class":30,"line":31},[28,146346,146340],{"class":2040},[14,146348,146349],{},"保存依赖：",[18,146351,146353],{"className":23899,"code":146352,"language":23901,"meta":23,"style":23},"pip freeze > requirements.txt\n",[25,146354,146355],{"__ignoreMap":23},[28,146356,146357,146359,146362,146364],{"class":30,"line":31},[28,146358,23908],{"class":2040},[28,146360,146361],{"class":320}," freeze",[28,146363,26300],{"class":38},[28,146365,146366],{"class":320}," requirements.txt\n",[14,146368,146369],{},"安装依赖：",[18,146371,146373],{"className":23899,"code":146372,"language":23901,"meta":23,"style":23},"pip install -r requirements.txt\n",[25,146374,146375],{"__ignoreMap":23},[28,146376,146377,146379,146381,146383],{"class":30,"line":31},[28,146378,23908],{"class":2040},[28,146380,23911],{"class":320},[28,146382,119698],{"class":45},[28,146384,146366],{"class":320},[159,146386,146388],{"id":146387},"_16-开发工具","1.6 开发工具",[188,146390,146392],{"id":146391},"_161-pycharm","1.6.1 PyCharm",[14,146394,146395],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146397,122121],{},[171,146399,146400,146403,146406,146412,146415],{},[174,146401,146402],{},"New Project：创建项目。",[174,146404,146405],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[174,146407,146408,146409,126042],{},"New Python File：创建 ",[25,146410,146411],{},".py",[174,146413,146414],{},"Run：运行当前文件。",[174,146416,146417],{},"Debug：断点调试。",[188,146419,146421],{"id":146420},"_162-vs-code","1.6.2 VS Code",[14,146423,146424],{},"VS Code 轻量，适合后续多语言开发。",[14,146426,146427],{},"建议安装插件：",[171,146429,146430,146433,146436],{},[174,146431,146432],{},"Python。",[174,146434,146435],{},"Pylance。",[174,146437,146438],{},"Jupyter。",[14,146440,146441],{},"选择解释器：",[18,146443,146446],{"className":146444,"code":146445,"language":5264,"meta":23},[5262],"Ctrl + Shift + P -> Python: Select Interpreter\n",[25,146447,146445],{"__ignoreMap":23},[159,146449,146451],{"id":146450},"_17-第一个python程序","1.7 第一个Python程序",[14,146453,146454,146455,24696],{},"创建文件 ",[25,146456,146457],{},"hello.py",[18,146459,146461],{"className":20,"code":146460,"language":22,"meta":23,"style":23},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[25,146462,146463,146474],{"__ignoreMap":23},[28,146464,146465,146467,146469,146472],{"class":30,"line":31},[28,146466,30491],{"class":45},[28,146468,221],{"class":34},[28,146470,146471],{"class":320},"\"Hello World\"",[28,146473,227],{"class":34},[28,146475,146476,146478,146480,146483],{"class":30,"line":94},[28,146477,30491],{"class":45},[28,146479,221],{"class":34},[28,146481,146482],{"class":320},"\"你好，Python\"",[28,146484,227],{"class":34},[14,146486,146487],{},"在终端运行：",[18,146489,146491],{"className":23899,"code":146490,"language":23901,"meta":23,"style":23},"python hello.py\n",[25,146492,146493],{"__ignoreMap":23},[28,146494,146495,146497],{"class":30,"line":31},[28,146496,22],{"class":2040},[28,146498,146499],{"class":320}," hello.py\n",[14,146501,146502],{},"或：",[18,146504,146506],{"className":23899,"code":146505,"language":23901,"meta":23,"style":23},"python3 hello.py\n",[25,146507,146508],{"__ignoreMap":23},[28,146509,146510,146512],{"class":30,"line":31},[28,146511,100938],{"class":2040},[28,146513,146499],{"class":320},[14,146515,146516],{},"输出：",[18,146518,146521],{"className":146519,"code":146520,"language":5264,"meta":23},[5262],"Hello World\n你好，Python\n",[25,146522,146520],{"__ignoreMap":23},[159,146524,146526],{"id":146525},"_18-print函数","1.8 print函数",[14,146528,146529,146532],{},[25,146530,146531],{},"print()"," 用来输出内容。",[18,146534,146536],{"className":20,"code":146535,"language":22,"meta":23,"style":23},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[25,146537,146538,146548,146558,146568],{"__ignoreMap":23},[28,146539,146540,146542,146544,146546],{"class":30,"line":31},[28,146541,30491],{"class":45},[28,146543,221],{"class":34},[28,146545,5921],{"class":320},[28,146547,227],{"class":34},[28,146549,146550,146552,146554,146556],{"class":30,"line":94},[28,146551,30491],{"class":45},[28,146553,221],{"class":34},[28,146555,525],{"class":45},[28,146557,227],{"class":34},[28,146559,146560,146562,146564,146566],{"class":30,"line":109},[28,146561,30491],{"class":45},[28,146563,221],{"class":34},[28,146565,268],{"class":45},[28,146567,227],{"class":34},[28,146569,146570,146572,146574,146577,146579,146581],{"class":30,"line":125},[28,146571,30491],{"class":45},[28,146573,221],{"class":34},[28,146575,146576],{"class":320},"\"年龄:\"",[28,146578,12512],{"class":34},[28,146580,860],{"class":45},[28,146582,227],{"class":34},[14,146584,146585],{},"多个内容用逗号隔开，默认中间加空格：",[18,146587,146589],{"className":20,"code":146588,"language":22,"meta":23,"style":23},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[25,146590,146591,146601,146611],{"__ignoreMap":23},[28,146592,146593,146596,146598],{"class":30,"line":31},[28,146594,146595],{"class":34},"name ",[28,146597,39],{"class":38},[28,146599,146600],{"class":320}," \"张三\"\n",[28,146602,146603,146606,146608],{"class":30,"line":94},[28,146604,146605],{"class":34},"age ",[28,146607,39],{"class":38},[28,146609,146610],{"class":45}," 18\n",[28,146612,146613,146615,146617,146620,146623,146625],{"class":30,"line":109},[28,146614,30491],{"class":45},[28,146616,221],{"class":34},[28,146618,146619],{"class":320},"\"姓名:\"",[28,146621,146622],{"class":34},", name, ",[28,146624,146576],{"class":320},[28,146626,146627],{"class":34},", age)\n",[14,146629,146630],{},"修改分隔符：",[18,146632,146634],{"className":20,"code":146633,"language":22,"meta":23,"style":23},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[25,146635,146636],{"__ignoreMap":23},[28,146637,146638,146640,146642,146645,146647,146649,146651,146653,146655,146658,146660,146662],{"class":30,"line":31},[28,146639,30491],{"class":45},[28,146641,221],{"class":34},[28,146643,146644],{"class":320},"\"2024\"",[28,146646,12512],{"class":34},[28,146648,54391],{"class":320},[28,146650,12512],{"class":34},[28,146652,54391],{"class":320},[28,146654,12512],{"class":34},[28,146656,146657],{"class":5293},"sep",[28,146659,39],{"class":38},[28,146661,32559],{"class":320},[28,146663,227],{"class":34},[14,146665,146666],{},"修改结尾符：",[18,146668,146670],{"className":20,"code":146669,"language":22,"meta":23,"style":23},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[25,146671,146672,146690],{"__ignoreMap":23},[28,146673,146674,146676,146678,146680,146682,146684,146686,146688],{"class":30,"line":31},[28,146675,30491],{"class":45},[28,146677,221],{"class":34},[28,146679,5921],{"class":320},[28,146681,12512],{"class":34},[28,146683,45877],{"class":5293},[28,146685,39],{"class":38},[28,146687,4436],{"class":320},[28,146689,227],{"class":34},[28,146691,146692,146694,146696,146699],{"class":30,"line":94},[28,146693,30491],{"class":45},[28,146695,221],{"class":34},[28,146697,146698],{"class":320},"\"python\"",[28,146700,227],{"class":34},[159,146702,146704],{"id":146703},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146706,146707],{},"交互运行适合临时验证：",[18,146709,146711],{"className":20,"code":146710,"language":22,"meta":23,"style":23},">>> 10 * 3\n30\n",[25,146712,146713,146723],{"__ignoreMap":23},[28,146714,146715,146717,146719,146721],{"class":30,"line":31},[28,146716,145912],{"class":38},[28,146718,2115],{"class":45},[28,146720,6595],{"class":38},[28,146722,120095],{"class":45},[28,146724,146725],{"class":30,"line":94},[28,146726,146727],{"class":45},"30\n",[14,146729,146730],{},"脚本运行适合保存程序：",[18,146732,146734],{"className":20,"code":146733,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(price * count)\n",[25,146735,146736,146746,146755],{"__ignoreMap":23},[28,146737,146738,146741,146743],{"class":30,"line":31},[28,146739,146740],{"class":34},"price ",[28,146742,39],{"class":38},[28,146744,146745],{"class":45}," 8\n",[28,146747,146748,146751,146753],{"class":30,"line":94},[28,146749,146750],{"class":34},"count ",[28,146752,39],{"class":38},[28,146754,54502],{"class":45},[28,146756,146757,146759,146762,146764],{"class":30,"line":109},[28,146758,30491],{"class":45},[28,146760,146761],{"class":34},"(price ",[28,146763,668],{"class":38},[28,146765,146766],{"class":34}," count)\n",[14,146768,146769],{},"实际学习中推荐：",[171,146771,146772,146775,146780],{},[174,146773,146774],{},"临时试一个语法，用交互模式。",[174,146776,146777,146778,126042],{},"写完整练习，用 ",[25,146779,146411],{},[174,146781,146782],{},"写项目，用独立目录和虚拟环境。",[159,146784,146786],{"id":146785},"_110-常见错误","1.10 常见错误",[188,146788,146790],{"id":146789},"_1101-命令找不到","1.10.1 命令找不到",[18,146792,146795],{"className":146793,"code":146794,"language":5264,"meta":23},[5262],"python: command not found\n",[25,146796,146794],{"__ignoreMap":23},[14,146798,146799],{},"原因：",[171,146801,146802,146805,146808],{},[174,146803,146804],{},"没安装 Python。",[174,146806,146807],{},"PATH 没配置。",[174,146809,146810,146811,28463],{},"Linux\u002FmacOS 应该使用 ",[25,146812,100938],{},[188,146814,146816],{"id":146815},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146818,146819],{},"不要把文件命名为：",[18,146821,146824],{"className":146822,"code":146823,"language":5264,"meta":23},[5262],"random.py\njson.py\ntime.py\nrequests.py\n",[25,146825,146823],{"__ignoreMap":23},[14,146827,146828],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[188,146830,146832],{"id":146831},"_1103-中文乱码","1.10.3 中文乱码",[14,146834,146835],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146837,146838],{},"如果读写文件出现乱码，要明确指定编码：",[18,146840,146842],{"className":20,"code":146841,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[25,146843,146844,146878],{"__ignoreMap":23},[28,146845,146846,146848,146851,146853,146856,146858,146861,146863,146866,146868,146871,146873,146875],{"class":30,"line":31},[28,146847,107892],{"class":38},[28,146849,146850],{"class":45}," open",[28,146852,221],{"class":34},[28,146854,146855],{"class":320},"\"data.txt\"",[28,146857,12512],{"class":34},[28,146859,146860],{"class":320},"\"r\"",[28,146862,12512],{"class":34},[28,146864,146865],{"class":5293},"encoding",[28,146867,39],{"class":38},[28,146869,146870],{"class":320},"\"utf-8\"",[28,146872,13791],{"class":34},[28,146874,31459],{"class":38},[28,146876,146877],{"class":34}," f:\n",[28,146879,146880,146883,146885],{"class":30,"line":94},[28,146881,146882],{"class":34},"    content ",[28,146884,39],{"class":38},[28,146886,146887],{"class":34}," f.read()\n",[159,146889,146891],{"id":146890},"_111-本章练习","1.11 本章练习",[171,146893,146894,146897,146903],{},[174,146895,146896],{},"安装 Python，并在终端输出版本号。",[174,146898,146899,146900,146902],{},"新建 ",[25,146901,146457],{},"，输出自己的姓名、年龄、学习目标。",[174,146904,104425,146905,146907],{},[25,146906,146531],{}," 输出下面格式：",[18,146909,146912],{"className":146910,"code":146911,"language":5264,"meta":23},[5262],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[25,146913,146911],{"__ignoreMap":23},[171,146915,146916],{"start":125},[174,146917,104425,146918,146920],{},[25,146919,146657],{}," 输出日期：",[18,146922,146925],{"className":146923,"code":146924,"language":5264,"meta":23},[5262],"2024-10-10\n",[25,146926,146924],{"__ignoreMap":23},[171,146928,146929],{"start":131},[174,146930,104425,146931,146933,146934,146936],{},[25,146932,45877],{}," 让两次 ",[25,146935,146531],{}," 输出在同一行。",[136,146938,146939],{},"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":23,"searchDepth":94,"depth":94,"links":146941},[146942,146943,146944,146949,146950,146951,146955,146956,146957,146958,146963],{"id":145824,"depth":94,"text":145825},{"id":145868,"depth":94,"text":145869},{"id":145969,"depth":94,"text":145970,"children":146945},[146946,146947,146948],{"id":145973,"depth":109,"text":145974},{"id":146028,"depth":109,"text":146029},{"id":146064,"depth":109,"text":146065},{"id":146137,"depth":94,"text":146138},{"id":146282,"depth":94,"text":146283},{"id":146387,"depth":94,"text":146388,"children":146952},[146953,146954],{"id":146391,"depth":109,"text":146392},{"id":146420,"depth":109,"text":146421},{"id":146450,"depth":94,"text":146451},{"id":146525,"depth":94,"text":146526},{"id":146703,"depth":94,"text":146704},{"id":146785,"depth":94,"text":146786,"children":146959},[146960,146961,146962],{"id":146789,"depth":109,"text":146790},{"id":146815,"depth":109,"text":146816},{"id":146831,"depth":109,"text":146832},{"id":146890,"depth":94,"text":146891},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145816,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146970,"title":146971,"body":146972,"description":141,"extension":142,"meta":149376,"navigation":144,"path":149377,"seo":149378,"stem":149379,"__hash__":149380},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146973,"toc":149361},[146974,146977,146981,146984,146987,147004,147007,147049,147052,147056,147059,147062,147099,147102,147136,147139,147231,147235,147249,147252,147279,147282,147286,147389,147396,147399,147416,147420,147427,147616,147619,147692,147696,147699,147783,147786,147818,147822,148026,148029,148033,148039,148141,148144,148400,148404,148407,148410,148424,148426,148612,148616,148978,148984,148988,148991,149115,149118,149297,149300,149304,149337,149341,149358],[10,146975,146971],{"id":146976},"_10-json与pyecharts折线图",[159,146978,146980],{"id":146979},"_101-数据可视化","10.1 数据可视化",[14,146982,146983],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146985,146986],{},"常见图表：",[171,146988,146989,146992,146995,146998,147001],{},[174,146990,146991],{},"折线图：看趋势。",[174,146993,146994],{},"柱状图：看分类对比。",[174,146996,146997],{},"饼图：看占比。",[174,146999,147000],{},"地图：看地域分布。",[174,147002,147003],{},"散点图：看两个变量之间的关系。",[14,147005,147006],{},"Python 可视化常用库：",[353,147008,147009,147017],{},[356,147010,147011],{},[359,147012,147013,147015],{},[362,147014,146220],{},[362,147016,23817],{},[400,147018,147019,147026,147034,147041],{},[359,147020,147021,147023],{},[405,147022,146252],{},[405,147024,147025],{},"基础、经典、可定制",[359,147027,147028,147031],{},[405,147029,147030],{},"seaborn",[405,147032,147033],{},"统计图表更美观",[359,147035,147036,147038],{},[405,147037,146260],{},[405,147039,147040],{},"生成交互式网页图表",[359,147042,147043,147046],{},[405,147044,147045],{},"plotly",[405,147047,147048],{},"交互图表能力强",[14,147050,147051],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[159,147053,147055],{"id":147054},"_102-json回顾","10.2 JSON回顾",[14,147057,147058],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147060,147061],{},"Python 字典：",[18,147063,147065],{"className":20,"code":147064,"language":22,"meta":23,"style":23},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[25,147066,147067,147075,147086,147095],{"__ignoreMap":23},[28,147068,147069,147071,147073],{"class":30,"line":31},[28,147070,101717],{"class":34},[28,147072,39],{"class":38},[28,147074,15649],{"class":34},[28,147076,147077,147080,147082,147084],{"class":30,"line":94},[28,147078,147079],{"class":320},"    \"name\"",[28,147081,51512],{"class":34},[28,147083,69344],{"class":320},[28,147085,31542],{"class":34},[28,147087,147088,147091,147093],{"class":30,"line":109},[28,147089,147090],{"class":320},"    \"value\"",[28,147092,51512],{"class":34},[28,147094,97517],{"class":45},[28,147096,147097],{"class":30,"line":125},[28,147098,1642],{"class":34},[14,147100,147101],{},"JSON 字符串：",[18,147103,147106],{"className":147104,"code":147105,"language":145851,"meta":23,"style":23},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[25,147107,147108,147112,147123,147132],{"__ignoreMap":23},[28,147109,147110],{"class":30,"line":31},[28,147111,1623],{"class":34},[28,147113,147114,147117,147119,147121],{"class":30,"line":94},[28,147115,147116],{"class":45},"  \"name\"",[28,147118,51512],{"class":34},[28,147120,69344],{"class":320},[28,147122,31542],{"class":34},[28,147124,147125,147128,147130],{"class":30,"line":109},[28,147126,147127],{"class":45},"  \"value\"",[28,147129,51512],{"class":34},[28,147131,97517],{"class":45},[28,147133,147134],{"class":30,"line":125},[28,147135,1642],{"class":34},[14,147137,147138],{},"Python 与 JSON 的转换：",[18,147140,147142],{"className":20,"code":147141,"language":22,"meta":23,"style":23},"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",[25,147143,147144,147151,147155,147180,147184,147203,147210,147214,147224],{"__ignoreMap":23},[28,147145,147146,147148],{"class":30,"line":31},[28,147147,30468],{"class":38},[28,147149,147150],{"class":34}," json\n",[28,147152,147153],{"class":30,"line":94},[28,147154,2477],{"emptyLinePlaceholder":144},[28,147156,147157,147159,147161,147163,147165,147167,147169,147171,147174,147176,147178],{"class":30,"line":109},[28,147158,101717],{"class":34},[28,147160,39],{"class":38},[28,147162,4525],{"class":34},[28,147164,62754],{"class":320},[28,147166,51512],{"class":34},[28,147168,69344],{"class":320},[28,147170,12512],{"class":34},[28,147172,147173],{"class":320},"\"value\"",[28,147175,51512],{"class":34},[28,147177,525],{"class":45},[28,147179,1642],{"class":34},[28,147181,147182],{"class":30,"line":125},[28,147183,2477],{"emptyLinePlaceholder":144},[28,147185,147186,147189,147191,147194,147197,147199,147201],{"class":30,"line":131},[28,147187,147188],{"class":34},"json_text ",[28,147190,39],{"class":38},[28,147192,147193],{"class":34}," json.dumps(data, ",[28,147195,147196],{"class":5293},"ensure_ascii",[28,147198,39],{"class":38},[28,147200,34063],{"class":45},[28,147202,227],{"class":34},[28,147204,147205,147207],{"class":30,"line":1291},[28,147206,30491],{"class":45},[28,147208,147209],{"class":34},"(json_text)\n",[28,147211,147212],{"class":30,"line":1297},[28,147213,2477],{"emptyLinePlaceholder":144},[28,147215,147216,147219,147221],{"class":30,"line":1388},[28,147217,147218],{"class":34},"new_data ",[28,147220,39],{"class":38},[28,147222,147223],{"class":34}," json.loads(json_text)\n",[28,147225,147226,147228],{"class":30,"line":1394},[28,147227,30491],{"class":45},[28,147229,147230],{"class":34},"(new_data)\n",[159,147232,147234],{"id":147233},"_103-安装pyecharts","10.3 安装pyecharts",[18,147236,147238],{"className":23899,"code":147237,"language":23901,"meta":23,"style":23},"pip install pyecharts\n",[25,147239,147240],{"__ignoreMap":23},[28,147241,147242,147244,147246],{"class":30,"line":31},[28,147243,23908],{"class":2040},[28,147245,23911],{"class":320},[28,147247,147248],{"class":320}," pyecharts\n",[14,147250,147251],{},"验证：",[18,147253,147255],{"className":20,"code":147254,"language":22,"meta":23,"style":23},"import pyecharts\n\nprint(pyecharts.__version__)\n",[25,147256,147257,147263,147267],{"__ignoreMap":23},[28,147258,147259,147261],{"class":30,"line":31},[28,147260,30468],{"class":38},[28,147262,147248],{"class":34},[28,147264,147265],{"class":30,"line":94},[28,147266,2477],{"emptyLinePlaceholder":144},[28,147268,147269,147271,147274,147277],{"class":30,"line":109},[28,147270,30491],{"class":45},[28,147272,147273],{"class":34},"(pyecharts.",[28,147275,147276],{"class":45},"__version__",[28,147278,227],{"class":34},[14,147280,147281],{},"如果使用虚拟环境，要先激活环境再安装。",[159,147283,147285],{"id":147284},"_104-第一个折线图","10.4 第一个折线图",[18,147287,147289],{"className":20,"code":147288,"language":22,"meta":23,"style":23},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[25,147290,147291,147303,147307,147317,147347,147379],{"__ignoreMap":23},[28,147292,147293,147295,147298,147300],{"class":30,"line":31},[28,147294,30813],{"class":38},[28,147296,147297],{"class":34}," pyecharts.charts ",[28,147299,30468],{"class":38},[28,147301,147302],{"class":34}," Line\n",[28,147304,147305],{"class":30,"line":94},[28,147306,2477],{"emptyLinePlaceholder":144},[28,147308,147309,147312,147314],{"class":30,"line":109},[28,147310,147311],{"class":34},"line ",[28,147313,39],{"class":38},[28,147315,147316],{"class":34}," Line()\n",[28,147318,147319,147322,147325,147327,147330,147332,147335,147337,147340,147342,147345],{"class":30,"line":125},[28,147320,147321],{"class":34},"line.add_xaxis([",[28,147323,147324],{"class":320},"\"周一\"",[28,147326,12512],{"class":34},[28,147328,147329],{"class":320},"\"周二\"",[28,147331,12512],{"class":34},[28,147333,147334],{"class":320},"\"周三\"",[28,147336,12512],{"class":34},[28,147338,147339],{"class":320},"\"周四\"",[28,147341,12512],{"class":34},[28,147343,147344],{"class":320},"\"周五\"",[28,147346,4734],{"class":34},[28,147348,147349,147352,147355,147357,147359,147361,147363,147365,147367,147369,147372,147374,147377],{"class":30,"line":131},[28,147350,147351],{"class":34},"line.add_yaxis(",[28,147353,147354],{"class":320},"\"销售额\"",[28,147356,77593],{"class":34},[28,147358,525],{"class":45},[28,147360,12512],{"class":34},[28,147362,1023],{"class":45},[28,147364,12512],{"class":34},[28,147366,1068],{"class":45},[28,147368,12512],{"class":34},[28,147370,147371],{"class":45},"150",[28,147373,12512],{"class":34},[28,147375,147376],{"class":45},"180",[28,147378,4734],{"class":34},[28,147380,147381,147384,147387],{"class":30,"line":1291},[28,147382,147383],{"class":34},"line.render(",[28,147385,147386],{"class":320},"\"line.html\"",[28,147388,227],{"class":34},[14,147390,147391,147392,147395],{},"运行后会生成 ",[25,147393,147394],{},"line.html","，用浏览器打开即可看到图表。",[14,147397,147398],{},"核心步骤：",[171,147400,147401,147404,147407,147410,147413],{},[174,147402,147403],{},"导入图表类。",[174,147405,147406],{},"创建图表对象。",[174,147408,147409],{},"添加 x 轴数据。",[174,147411,147412],{},"添加 y 轴数据。",[174,147414,147415],{},"渲染为 HTML。",[159,147417,147419],{"id":147418},"_105-全局配置","10.5 全局配置",[14,147421,147422,147423,147426],{},"常用配置在 ",[25,147424,147425],{},"pyecharts.options"," 中。",[18,147428,147430],{"className":20,"code":147429,"language":22,"meta":23,"style":23},"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",[25,147431,147432,147449,147459,147463,147471,147495,147523,147528,147547,147566,147584,147604,147608],{"__ignoreMap":23},[28,147433,147434,147436,147439,147441,147444,147446],{"class":30,"line":31},[28,147435,30813],{"class":38},[28,147437,147438],{"class":34}," pyecharts ",[28,147440,30468],{"class":38},[28,147442,147443],{"class":34}," options ",[28,147445,31459],{"class":38},[28,147447,147448],{"class":34}," opts\n",[28,147450,147451,147453,147455,147457],{"class":30,"line":94},[28,147452,30813],{"class":38},[28,147454,147297],{"class":34},[28,147456,30468],{"class":38},[28,147458,147302],{"class":34},[28,147460,147461],{"class":30,"line":109},[28,147462,2477],{"emptyLinePlaceholder":144},[28,147464,147465,147467,147469],{"class":30,"line":125},[28,147466,147311],{"class":34},[28,147468,39],{"class":38},[28,147470,147316],{"class":34},[28,147472,147473,147475,147477,147479,147481,147483,147485,147487,147489,147491,147493],{"class":30,"line":131},[28,147474,147321],{"class":34},[28,147476,147324],{"class":320},[28,147478,12512],{"class":34},[28,147480,147329],{"class":320},[28,147482,12512],{"class":34},[28,147484,147334],{"class":320},[28,147486,12512],{"class":34},[28,147488,147339],{"class":320},[28,147490,12512],{"class":34},[28,147492,147344],{"class":320},[28,147494,4734],{"class":34},[28,147496,147497,147499,147501,147503,147505,147507,147509,147511,147513,147515,147517,147519,147521],{"class":30,"line":1291},[28,147498,147351],{"class":34},[28,147500,147354],{"class":320},[28,147502,77593],{"class":34},[28,147504,525],{"class":45},[28,147506,12512],{"class":34},[28,147508,1023],{"class":45},[28,147510,12512],{"class":34},[28,147512,1068],{"class":45},[28,147514,12512],{"class":34},[28,147516,147371],{"class":45},[28,147518,12512],{"class":34},[28,147520,147376],{"class":45},[28,147522,4734],{"class":34},[28,147524,147525],{"class":30,"line":1297},[28,147526,147527],{"class":34},"line.set_global_opts(\n",[28,147529,147530,147533,147535,147538,147540,147542,147545],{"class":30,"line":1388},[28,147531,147532],{"class":5293},"    title_opts",[28,147534,39],{"class":38},[28,147536,147537],{"class":34},"opts.TitleOpts(",[28,147539,51482],{"class":5293},[28,147541,39],{"class":38},[28,147543,147544],{"class":320},"\"一周销售额\"",[28,147546,38123],{"class":34},[28,147548,147549,147552,147554,147557,147559,147561,147564],{"class":30,"line":1394},[28,147550,147551],{"class":5293},"    xaxis_opts",[28,147553,39],{"class":38},[28,147555,147556],{"class":34},"opts.AxisOpts(",[28,147558,79885],{"class":5293},[28,147560,39],{"class":38},[28,147562,147563],{"class":320},"\"日期\"",[28,147565,38123],{"class":34},[28,147567,147568,147571,147573,147575,147577,147579,147582],{"class":30,"line":1406},[28,147569,147570],{"class":5293},"    yaxis_opts",[28,147572,39],{"class":38},[28,147574,147556],{"class":34},[28,147576,79885],{"class":5293},[28,147578,39],{"class":38},[28,147580,147581],{"class":320},"\"金额\"",[28,147583,38123],{"class":34},[28,147585,147586,147589,147591,147594,147597,147599,147602],{"class":30,"line":1689},[28,147587,147588],{"class":5293},"    tooltip_opts",[28,147590,39],{"class":38},[28,147592,147593],{"class":34},"opts.TooltipOpts(",[28,147595,147596],{"class":5293},"trigger",[28,147598,39],{"class":38},[28,147600,147601],{"class":320},"\"axis\"",[28,147603,38123],{"class":34},[28,147605,147606],{"class":30,"line":1694},[28,147607,227],{"class":34},[28,147609,147610,147612,147614],{"class":30,"line":1700},[28,147611,147383],{"class":34},[28,147613,147386],{"class":320},[28,147615,227],{"class":34},[14,147617,147618],{},"常见全局配置：",[353,147620,147621,147630],{},[356,147622,147623],{},[359,147624,147625,147628],{},[362,147626,147627],{},"配置",[362,147629,102755],{},[400,147631,147632,147642,147652,147662,147672,147682],{},[359,147633,147634,147639],{},[405,147635,147636],{},[25,147637,147638],{},"TitleOpts",[405,147640,147641],{},"标题",[359,147643,147644,147649],{},[405,147645,147646],{},[25,147647,147648],{},"LegendOpts",[405,147650,147651],{},"图例",[359,147653,147654,147659],{},[405,147655,147656],{},[25,147657,147658],{},"TooltipOpts",[405,147660,147661],{},"提示框",[359,147663,147664,147669],{},[405,147665,147666],{},[25,147667,147668],{},"AxisOpts",[405,147670,147671],{},"坐标轴",[359,147673,147674,147679],{},[405,147675,147676],{},[25,147677,147678],{},"VisualMapOpts",[405,147680,147681],{},"视觉映射",[359,147683,147684,147689],{},[405,147685,147686],{},[25,147687,147688],{},"DataZoomOpts",[405,147690,147691],{},"区域缩放",[159,147693,147695],{"id":147694},"_106-系列配置","10.6 系列配置",[14,147697,147698],{},"系列配置作用于某一组数据。",[18,147700,147702],{"className":20,"code":147701,"language":22,"meta":23,"style":23},"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",[25,147703,147704,147709,147720,147749,147760,147779],{"__ignoreMap":23},[28,147705,147706],{"class":30,"line":31},[28,147707,147708],{"class":34},"line.add_yaxis(\n",[28,147710,147711,147714,147716,147718],{"class":30,"line":94},[28,147712,147713],{"class":5293},"    series_name",[28,147715,39],{"class":38},[28,147717,147354],{"class":320},[28,147719,31542],{"class":34},[28,147721,147722,147725,147727,147729,147731,147733,147735,147737,147739,147741,147743,147745,147747],{"class":30,"line":109},[28,147723,147724],{"class":5293},"    y_axis",[28,147726,39],{"class":38},[28,147728,1096],{"class":34},[28,147730,525],{"class":45},[28,147732,12512],{"class":34},[28,147734,1023],{"class":45},[28,147736,12512],{"class":34},[28,147738,1068],{"class":45},[28,147740,12512],{"class":34},[28,147742,147371],{"class":45},[28,147744,12512],{"class":34},[28,147746,147376],{"class":45},[28,147748,87911],{"class":34},[28,147750,147751,147754,147756,147758],{"class":30,"line":125},[28,147752,147753],{"class":5293},"    is_smooth",[28,147755,39],{"class":38},[28,147757,31552],{"class":45},[28,147759,31542],{"class":34},[28,147761,147762,147765,147767,147770,147773,147775,147777],{"class":30,"line":131},[28,147763,147764],{"class":5293},"    label_opts",[28,147766,39],{"class":38},[28,147768,147769],{"class":34},"opts.LabelOpts(",[28,147771,147772],{"class":5293},"is_show",[28,147774,39],{"class":38},[28,147776,31552],{"class":45},[28,147778,38123],{"class":34},[28,147780,147781],{"class":30,"line":1291},[28,147782,227],{"class":34},[14,147784,147785],{},"常用参数：",[171,147787,147788,147794,147800,147806,147812],{},[174,147789,147790,147793],{},[25,147791,147792],{},"series_name","：系列名称。",[174,147795,147796,147799],{},[25,147797,147798],{},"y_axis","：y 轴数据。",[174,147801,147802,147805],{},[25,147803,147804],{},"is_smooth","：是否平滑曲线。",[174,147807,147808,147811],{},[25,147809,147810],{},"label_opts","：标签配置。",[174,147813,147814,147817],{},[25,147815,147816],{},"symbol_size","：标记点大小。",[159,147819,147821],{"id":147820},"_107-多条折线","10.7 多条折线",[18,147823,147825],{"className":20,"code":147824,"language":22,"meta":23,"style":23},"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",[25,147826,147827,147841,147851,147855,147884,147888,147896,147901,147939,147976,147980,147997,148013,148017],{"__ignoreMap":23},[28,147828,147829,147831,147833,147835,147837,147839],{"class":30,"line":31},[28,147830,30813],{"class":38},[28,147832,147438],{"class":34},[28,147834,30468],{"class":38},[28,147836,147443],{"class":34},[28,147838,31459],{"class":38},[28,147840,147448],{"class":34},[28,147842,147843,147845,147847,147849],{"class":30,"line":94},[28,147844,30813],{"class":38},[28,147846,147297],{"class":34},[28,147848,30468],{"class":38},[28,147850,147302],{"class":34},[28,147852,147853],{"class":30,"line":109},[28,147854,2477],{"emptyLinePlaceholder":144},[28,147856,147857,147860,147862,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882],{"class":30,"line":125},[28,147858,147859],{"class":34},"dates ",[28,147861,39],{"class":38},[28,147863,52301],{"class":34},[28,147865,147324],{"class":320},[28,147867,12512],{"class":34},[28,147869,147329],{"class":320},[28,147871,12512],{"class":34},[28,147873,147334],{"class":320},[28,147875,12512],{"class":34},[28,147877,147339],{"class":320},[28,147879,12512],{"class":34},[28,147881,147344],{"class":320},[28,147883,33322],{"class":34},[28,147885,147886],{"class":30,"line":131},[28,147887,2477],{"emptyLinePlaceholder":144},[28,147889,147890,147892,147894],{"class":30,"line":1291},[28,147891,147311],{"class":34},[28,147893,39],{"class":38},[28,147895,147316],{"class":34},[28,147897,147898],{"class":30,"line":1297},[28,147899,147900],{"class":34},"line.add_xaxis(dates)\n",[28,147902,147903,147905,147908,147910,147912,147914,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935,147937],{"class":30,"line":1388},[28,147904,147351],{"class":34},[28,147906,147907],{"class":320},"\"线上销售\"",[28,147909,77593],{"class":34},[28,147911,525],{"class":45},[28,147913,12512],{"class":34},[28,147915,147916],{"class":45},"130",[28,147918,12512],{"class":34},[28,147920,1023],{"class":45},[28,147922,12512],{"class":34},[28,147924,21125],{"class":45},[28,147926,12512],{"class":34},[28,147928,1799],{"class":45},[28,147930,112261],{"class":34},[28,147932,147804],{"class":5293},[28,147934,39],{"class":38},[28,147936,31552],{"class":45},[28,147938,227],{"class":34},[28,147940,147941,147943,147946,147948,147950,147952,147954,147956,147958,147960,147962,147964,147966,147968,147970,147972,147974],{"class":30,"line":1394},[28,147942,147351],{"class":34},[28,147944,147945],{"class":320},"\"线下销售\"",[28,147947,77593],{"class":34},[28,147949,822],{"class":45},[28,147951,12512],{"class":34},[28,147953,1068],{"class":45},[28,147955,12512],{"class":34},[28,147957,525],{"class":45},[28,147959,12512],{"class":34},[28,147961,1023],{"class":45},[28,147963,12512],{"class":34},[28,147965,147371],{"class":45},[28,147967,112261],{"class":34},[28,147969,147804],{"class":5293},[28,147971,39],{"class":38},[28,147973,31552],{"class":45},[28,147975,227],{"class":34},[28,147977,147978],{"class":30,"line":1406},[28,147979,147527],{"class":34},[28,147981,147982,147984,147986,147988,147990,147992,147995],{"class":30,"line":1689},[28,147983,147532],{"class":5293},[28,147985,39],{"class":38},[28,147987,147537],{"class":34},[28,147989,51482],{"class":5293},[28,147991,39],{"class":38},[28,147993,147994],{"class":320},"\"线上线下销售趋势\"",[28,147996,38123],{"class":34},[28,147998,147999,148001,148003,148005,148007,148009,148011],{"class":30,"line":1694},[28,148000,147588],{"class":5293},[28,148002,39],{"class":38},[28,148004,147593],{"class":34},[28,148006,147596],{"class":5293},[28,148008,39],{"class":38},[28,148010,147601],{"class":320},[28,148012,38123],{"class":34},[28,148014,148015],{"class":30,"line":1700},[28,148016,227],{"class":34},[28,148018,148019,148021,148024],{"class":30,"line":1705},[28,148020,147383],{"class":34},[28,148022,148023],{"class":320},"\"sales.html\"",[28,148025,227],{"class":34},[14,148027,148028],{},"多条折线适合比较不同指标或不同地区。",[159,148030,148032],{"id":148031},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148034,148035,148036,24696],{},"假设 ",[25,148037,148038],{},"sales.json",[18,148040,148042],{"className":147104,"code":148041,"language":145851,"meta":23,"style":23},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[25,148043,148044,148049,148081,148109,148137],{"__ignoreMap":23},[28,148045,148046],{"class":30,"line":31},[28,148047,148048],{"class":34},"[\n",[28,148050,148051,148054,148057,148059,148061,148063,148066,148068,148070,148072,148075,148077,148079],{"class":30,"line":94},[28,148052,148053],{"class":34},"  {",[28,148055,148056],{"class":45},"\"date\"",[28,148058,51512],{"class":34},[28,148060,147324],{"class":320},[28,148062,12512],{"class":34},[28,148064,148065],{"class":45},"\"online\"",[28,148067,51512],{"class":34},[28,148069,525],{"class":45},[28,148071,12512],{"class":34},[28,148073,148074],{"class":45},"\"offline\"",[28,148076,51512],{"class":34},[28,148078,822],{"class":45},[28,148080,5007],{"class":34},[28,148082,148083,148085,148087,148089,148091,148093,148095,148097,148099,148101,148103,148105,148107],{"class":30,"line":109},[28,148084,148053],{"class":34},[28,148086,148056],{"class":45},[28,148088,51512],{"class":34},[28,148090,147329],{"class":320},[28,148092,12512],{"class":34},[28,148094,148065],{"class":45},[28,148096,51512],{"class":34},[28,148098,147916],{"class":45},[28,148100,12512],{"class":34},[28,148102,148074],{"class":45},[28,148104,51512],{"class":34},[28,148106,1068],{"class":45},[28,148108,5007],{"class":34},[28,148110,148111,148113,148115,148117,148119,148121,148123,148125,148127,148129,148131,148133,148135],{"class":30,"line":125},[28,148112,148053],{"class":34},[28,148114,148056],{"class":45},[28,148116,51512],{"class":34},[28,148118,147334],{"class":320},[28,148120,12512],{"class":34},[28,148122,148065],{"class":45},[28,148124,51512],{"class":34},[28,148126,1023],{"class":45},[28,148128,12512],{"class":34},[28,148130,148074],{"class":45},[28,148132,51512],{"class":34},[28,148134,525],{"class":45},[28,148136,1642],{"class":34},[28,148138,148139],{"class":30,"line":131},[28,148140,33322],{"class":34},[14,148142,148143],{},"读取并绘图：",[18,148145,148147],{"className":20,"code":148146,"language":22,"meta":23,"style":23},"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",[25,148148,148149,148155,148169,148179,148183,148215,148228,148232,148240,148249,148258,148262,148274,148283,148292,148301,148305,148313,148317,148334,148351,148355,148372,148388,148392],{"__ignoreMap":23},[28,148150,148151,148153],{"class":30,"line":31},[28,148152,30468],{"class":38},[28,148154,147150],{"class":34},[28,148156,148157,148159,148161,148163,148165,148167],{"class":30,"line":94},[28,148158,30813],{"class":38},[28,148160,147438],{"class":34},[28,148162,30468],{"class":38},[28,148164,147443],{"class":34},[28,148166,31459],{"class":38},[28,148168,147448],{"class":34},[28,148170,148171,148173,148175,148177],{"class":30,"line":109},[28,148172,30813],{"class":38},[28,148174,147297],{"class":34},[28,148176,30468],{"class":38},[28,148178,147302],{"class":34},[28,148180,148181],{"class":30,"line":125},[28,148182,2477],{"emptyLinePlaceholder":144},[28,148184,148185,148187,148189,148191,148194,148196,148198,148200,148202,148204,148206,148208,148210,148213],{"class":30,"line":131},[28,148186,107892],{"class":38},[28,148188,146850],{"class":45},[28,148190,221],{"class":34},[28,148192,148193],{"class":320},"\"sales.json\"",[28,148195,12512],{"class":34},[28,148197,146860],{"class":320},[28,148199,12512],{"class":34},[28,148201,146865],{"class":5293},[28,148203,39],{"class":38},[28,148205,146870],{"class":320},[28,148207,13791],{"class":34},[28,148209,31459],{"class":38},[28,148211,148212],{"class":5293}," file",[28,148214,3816],{"class":34},[28,148216,148217,148219,148221,148224,148226],{"class":30,"line":1291},[28,148218,101480],{"class":34},[28,148220,39],{"class":38},[28,148222,148223],{"class":34}," json.load(",[28,148225,45430],{"class":5293},[28,148227,227],{"class":34},[28,148229,148230],{"class":30,"line":1297},[28,148231,2477],{"emptyLinePlaceholder":144},[28,148233,148234,148236,148238],{"class":30,"line":1388},[28,148235,147859],{"class":34},[28,148237,39],{"class":38},[28,148239,51913],{"class":34},[28,148241,148242,148245,148247],{"class":30,"line":1394},[28,148243,148244],{"class":34},"online_sales ",[28,148246,39],{"class":38},[28,148248,51913],{"class":34},[28,148250,148251,148254,148256],{"class":30,"line":1406},[28,148252,148253],{"class":34},"offline_sales ",[28,148255,39],{"class":38},[28,148257,51913],{"class":34},[28,148259,148260],{"class":30,"line":1689},[28,148261,2477],{"emptyLinePlaceholder":144},[28,148263,148264,148266,148269,148271],{"class":30,"line":1694},[28,148265,3102],{"class":38},[28,148267,148268],{"class":34}," item ",[28,148270,26121],{"class":38},[28,148272,148273],{"class":34}," data:\n",[28,148275,148276,148279,148281],{"class":30,"line":1700},[28,148277,148278],{"class":34},"    dates.append(item[",[28,148280,148056],{"class":320},[28,148282,4734],{"class":34},[28,148284,148285,148288,148290],{"class":30,"line":1705},[28,148286,148287],{"class":34},"    online_sales.append(item[",[28,148289,148065],{"class":320},[28,148291,4734],{"class":34},[28,148293,148294,148297,148299],{"class":30,"line":1719},[28,148295,148296],{"class":34},"    offline_sales.append(item[",[28,148298,148074],{"class":320},[28,148300,4734],{"class":34},[28,148302,148303],{"class":30,"line":1724},[28,148304,2477],{"emptyLinePlaceholder":144},[28,148306,148307,148309,148311],{"class":30,"line":1730},[28,148308,147311],{"class":34},[28,148310,39],{"class":38},[28,148312,147316],{"class":34},[28,148314,148315],{"class":30,"line":1751},[28,148316,147900],{"class":34},[28,148318,148319,148321,148323,148326,148328,148330,148332],{"class":30,"line":1756},[28,148320,147351],{"class":34},[28,148322,147907],{"class":320},[28,148324,148325],{"class":34},", online_sales, ",[28,148327,147804],{"class":5293},[28,148329,39],{"class":38},[28,148331,31552],{"class":45},[28,148333,227],{"class":34},[28,148335,148336,148338,148340,148343,148345,148347,148349],{"class":30,"line":1770},[28,148337,147351],{"class":34},[28,148339,147945],{"class":320},[28,148341,148342],{"class":34},", offline_sales, ",[28,148344,147804],{"class":5293},[28,148346,39],{"class":38},[28,148348,31552],{"class":45},[28,148350,227],{"class":34},[28,148352,148353],{"class":30,"line":1775},[28,148354,147527],{"class":34},[28,148356,148357,148359,148361,148363,148365,148367,148370],{"class":30,"line":1804},[28,148358,147532],{"class":5293},[28,148360,39],{"class":38},[28,148362,147537],{"class":34},[28,148364,51482],{"class":5293},[28,148366,39],{"class":38},[28,148368,148369],{"class":320},"\"销售趋势\"",[28,148371,38123],{"class":34},[28,148373,148374,148376,148378,148380,148382,148384,148386],{"class":30,"line":1809},[28,148375,147588],{"class":5293},[28,148377,39],{"class":38},[28,148379,147593],{"class":34},[28,148381,147596],{"class":5293},[28,148383,39],{"class":38},[28,148385,147601],{"class":320},[28,148387,38123],{"class":34},[28,148389,148390],{"class":30,"line":1826},[28,148391,227],{"class":34},[28,148393,148394,148396,148398],{"class":30,"line":1831},[28,148395,147383],{"class":34},[28,148397,148023],{"class":320},[28,148399,227],{"class":34},[159,148401,148403],{"id":148402},"_109-数据清洗","10.9 数据清洗",[14,148405,148406],{},"真实数据经常不整齐，需要清洗。",[14,148408,148409],{},"常见问题：",[171,148411,148412,148415,148418,148421],{},[174,148413,148414],{},"数字是字符串。",[174,148416,148417],{},"字段缺失。",[174,148419,148420],{},"空值。",[174,148422,148423],{},"日期格式不统一。",[14,148425,15212],{},[18,148427,148429],{"className":20,"code":148428,"language":22,"meta":23,"style":23},"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",[25,148430,148431,148440,148463,148483,148504,148508,148512,148520,148529,148533,148544,148558,148567,148572,148576,148584,148594,148598,148605],{"__ignoreMap":23},[28,148432,148433,148436,148438],{"class":30,"line":31},[28,148434,148435],{"class":34},"raw_data ",[28,148437,39],{"class":38},[28,148439,55522],{"class":34},[28,148441,148442,148445,148447,148449,148451,148453,148456,148458,148461],{"class":30,"line":94},[28,148443,148444],{"class":34},"    {",[28,148446,148056],{"class":320},[28,148448,51512],{"class":34},[28,148450,147324],{"class":320},[28,148452,12512],{"class":34},[28,148454,148455],{"class":320},"\"sales\"",[28,148457,51512],{"class":34},[28,148459,148460],{"class":320},"\"100\"",[28,148462,5007],{"class":34},[28,148464,148465,148467,148469,148471,148473,148475,148477,148479,148481],{"class":30,"line":109},[28,148466,148444],{"class":34},[28,148468,148056],{"class":320},[28,148470,51512],{"class":34},[28,148472,147329],{"class":320},[28,148474,12512],{"class":34},[28,148476,148455],{"class":320},[28,148478,51512],{"class":34},[28,148480,7729],{"class":320},[28,148482,5007],{"class":34},[28,148484,148485,148487,148489,148491,148493,148495,148497,148499,148502],{"class":30,"line":125},[28,148486,148444],{"class":34},[28,148488,148056],{"class":320},[28,148490,51512],{"class":34},[28,148492,147334],{"class":320},[28,148494,12512],{"class":34},[28,148496,148455],{"class":320},[28,148498,51512],{"class":34},[28,148500,148501],{"class":320},"\"120\"",[28,148503,5007],{"class":34},[28,148505,148506],{"class":30,"line":131},[28,148507,33322],{"class":34},[28,148509,148510],{"class":30,"line":1291},[28,148511,2477],{"emptyLinePlaceholder":144},[28,148513,148514,148516,148518],{"class":30,"line":1297},[28,148515,147859],{"class":34},[28,148517,39],{"class":38},[28,148519,51913],{"class":34},[28,148521,148522,148525,148527],{"class":30,"line":1388},[28,148523,148524],{"class":34},"sales ",[28,148526,39],{"class":38},[28,148528,51913],{"class":34},[28,148530,148531],{"class":30,"line":1394},[28,148532,2477],{"emptyLinePlaceholder":144},[28,148534,148535,148537,148539,148541],{"class":30,"line":1406},[28,148536,3102],{"class":38},[28,148538,148268],{"class":34},[28,148540,26121],{"class":38},[28,148542,148543],{"class":34}," raw_data:\n",[28,148545,148546,148549,148551,148554,148556],{"class":30,"line":1689},[28,148547,148548],{"class":34},"    value ",[28,148550,39],{"class":38},[28,148552,148553],{"class":34}," item.get(",[28,148555,148455],{"class":320},[28,148557,227],{"class":34},[28,148559,148560,148562,148564],{"class":30,"line":1694},[28,148561,3178],{"class":38},[28,148563,39006],{"class":38},[28,148565,148566],{"class":34}," value:\n",[28,148568,148569],{"class":30,"line":1700},[28,148570,148571],{"class":38},"        continue\n",[28,148573,148574],{"class":30,"line":1705},[28,148575,2477],{"emptyLinePlaceholder":144},[28,148577,148578,148580,148582],{"class":30,"line":1719},[28,148579,148278],{"class":34},[28,148581,148056],{"class":320},[28,148583,4734],{"class":34},[28,148585,148586,148589,148591],{"class":30,"line":1724},[28,148587,148588],{"class":34},"    sales.append(",[28,148590,224],{"class":45},[28,148592,148593],{"class":34},"(value))\n",[28,148595,148596],{"class":30,"line":1730},[28,148597,2477],{"emptyLinePlaceholder":144},[28,148599,148600,148602],{"class":30,"line":1751},[28,148601,30491],{"class":45},[28,148603,148604],{"class":34},"(dates)\n",[28,148606,148607,148609],{"class":30,"line":1756},[28,148608,30491],{"class":45},[28,148610,148611],{"class":34},"(sales)\n",[159,148613,148615],{"id":148614},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[18,148617,148619],{"className":20,"code":148618,"language":22,"meta":23,"style":23},"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",[25,148620,148621,148635,148645,148649,148657,148678,148700,148722,148744,148766,148770,148774,148796,148817,148821,148829,148833,148837,148847,148856,148866,148882,148886,148890,148907,148923,148939,148955,148965,148969],{"__ignoreMap":23},[28,148622,148623,148625,148627,148629,148631,148633],{"class":30,"line":31},[28,148624,30813],{"class":38},[28,148626,147438],{"class":34},[28,148628,30468],{"class":38},[28,148630,147443],{"class":34},[28,148632,31459],{"class":38},[28,148634,147448],{"class":34},[28,148636,148637,148639,148641,148643],{"class":30,"line":94},[28,148638,30813],{"class":38},[28,148640,147297],{"class":34},[28,148642,30468],{"class":38},[28,148644,147302],{"class":34},[28,148646,148647],{"class":30,"line":109},[28,148648,2477],{"emptyLinePlaceholder":144},[28,148650,148651,148653,148655],{"class":30,"line":125},[28,148652,148524],{"class":34},[28,148654,39],{"class":38},[28,148656,55522],{"class":34},[28,148658,148659,148661,148663,148665,148668,148670,148672,148674,148676],{"class":30,"line":131},[28,148660,148444],{"class":34},[28,148662,148056],{"class":320},[28,148664,51512],{"class":34},[28,148666,148667],{"class":320},"\"2024-10-01\"",[28,148669,12512],{"class":34},[28,148671,84159],{"class":320},[28,148673,51512],{"class":34},[28,148675,92098],{"class":45},[28,148677,5007],{"class":34},[28,148679,148680,148682,148684,148686,148689,148691,148693,148695,148698],{"class":30,"line":1291},[28,148681,148444],{"class":34},[28,148683,148056],{"class":320},[28,148685,51512],{"class":34},[28,148687,148688],{"class":320},"\"2024-10-02\"",[28,148690,12512],{"class":34},[28,148692,84159],{"class":320},[28,148694,51512],{"class":34},[28,148696,148697],{"class":45},"1800",[28,148699,5007],{"class":34},[28,148701,148702,148704,148706,148708,148711,148713,148715,148717,148720],{"class":30,"line":1297},[28,148703,148444],{"class":34},[28,148705,148056],{"class":320},[28,148707,51512],{"class":34},[28,148709,148710],{"class":320},"\"2024-10-03\"",[28,148712,12512],{"class":34},[28,148714,84159],{"class":320},[28,148716,51512],{"class":34},[28,148718,148719],{"class":45},"1500",[28,148721,5007],{"class":34},[28,148723,148724,148726,148728,148730,148733,148735,148737,148739,148742],{"class":30,"line":1388},[28,148725,148444],{"class":34},[28,148727,148056],{"class":320},[28,148729,51512],{"class":34},[28,148731,148732],{"class":320},"\"2024-10-04\"",[28,148734,12512],{"class":34},[28,148736,84159],{"class":320},[28,148738,51512],{"class":34},[28,148740,148741],{"class":45},"2100",[28,148743,5007],{"class":34},[28,148745,148746,148748,148750,148752,148755,148757,148759,148761,148764],{"class":30,"line":1394},[28,148747,148444],{"class":34},[28,148749,148056],{"class":320},[28,148751,51512],{"class":34},[28,148753,148754],{"class":320},"\"2024-10-05\"",[28,148756,12512],{"class":34},[28,148758,84159],{"class":320},[28,148760,51512],{"class":34},[28,148762,148763],{"class":45},"2600",[28,148765,5007],{"class":34},[28,148767,148768],{"class":30,"line":1406},[28,148769,33322],{"class":34},[28,148771,148772],{"class":30,"line":1689},[28,148773,2477],{"emptyLinePlaceholder":144},[28,148775,148776,148778,148780,148783,148785,148787,148789,148791,148793],{"class":30,"line":1694},[28,148777,147859],{"class":34},[28,148779,39],{"class":38},[28,148781,148782],{"class":34}," [item[",[28,148784,148056],{"class":320},[28,148786,4520],{"class":34},[28,148788,3102],{"class":38},[28,148790,148268],{"class":34},[28,148792,26121],{"class":38},[28,148794,148795],{"class":34}," sales]\n",[28,148797,148798,148801,148803,148805,148807,148809,148811,148813,148815],{"class":30,"line":1700},[28,148799,148800],{"class":34},"amounts ",[28,148802,39],{"class":38},[28,148804,148782],{"class":34},[28,148806,84159],{"class":320},[28,148808,4520],{"class":34},[28,148810,3102],{"class":38},[28,148812,148268],{"class":34},[28,148814,26121],{"class":38},[28,148816,148795],{"class":34},[28,148818,148819],{"class":30,"line":1705},[28,148820,2477],{"emptyLinePlaceholder":144},[28,148822,148823,148825,148827],{"class":30,"line":1719},[28,148824,147311],{"class":34},[28,148826,39],{"class":38},[28,148828,147316],{"class":34},[28,148830,148831],{"class":30,"line":1724},[28,148832,147900],{"class":34},[28,148834,148835],{"class":30,"line":1730},[28,148836,147708],{"class":34},[28,148838,148839,148841,148843,148845],{"class":30,"line":1751},[28,148840,147713],{"class":5293},[28,148842,39],{"class":38},[28,148844,147354],{"class":320},[28,148846,31542],{"class":34},[28,148848,148849,148851,148853],{"class":30,"line":1756},[28,148850,147724],{"class":5293},[28,148852,39],{"class":38},[28,148854,148855],{"class":34},"amounts,\n",[28,148857,148858,148860,148862,148864],{"class":30,"line":1770},[28,148859,147753],{"class":5293},[28,148861,39],{"class":38},[28,148863,31552],{"class":45},[28,148865,31542],{"class":34},[28,148867,148868,148870,148872,148874,148876,148878,148880],{"class":30,"line":1775},[28,148869,147764],{"class":5293},[28,148871,39],{"class":38},[28,148873,147769],{"class":34},[28,148875,147772],{"class":5293},[28,148877,39],{"class":38},[28,148879,31552],{"class":45},[28,148881,38123],{"class":34},[28,148883,148884],{"class":30,"line":1804},[28,148885,227],{"class":34},[28,148887,148888],{"class":30,"line":1809},[28,148889,147527],{"class":34},[28,148891,148892,148894,148896,148898,148900,148902,148905],{"class":30,"line":1826},[28,148893,147532],{"class":5293},[28,148895,39],{"class":38},[28,148897,147537],{"class":34},[28,148899,51482],{"class":5293},[28,148901,39],{"class":38},[28,148903,148904],{"class":320},"\"每日销售额\"",[28,148906,38123],{"class":34},[28,148908,148909,148911,148913,148915,148917,148919,148921],{"class":30,"line":1831},[28,148910,147551],{"class":5293},[28,148912,39],{"class":38},[28,148914,147556],{"class":34},[28,148916,79885],{"class":5293},[28,148918,39],{"class":38},[28,148920,147563],{"class":320},[28,148922,38123],{"class":34},[28,148924,148925,148927,148929,148931,148933,148935,148937],{"class":30,"line":1836},[28,148926,147570],{"class":5293},[28,148928,39],{"class":38},[28,148930,147556],{"class":34},[28,148932,79885],{"class":5293},[28,148934,39],{"class":38},[28,148936,147581],{"class":320},[28,148938,38123],{"class":34},[28,148940,148941,148943,148945,148947,148949,148951,148953],{"class":30,"line":1841},[28,148942,147588],{"class":5293},[28,148944,39],{"class":38},[28,148946,147593],{"class":34},[28,148948,147596],{"class":5293},[28,148950,39],{"class":38},[28,148952,147601],{"class":320},[28,148954,38123],{"class":34},[28,148956,148957,148960,148962],{"class":30,"line":1855},[28,148958,148959],{"class":5293},"    datazoom_opts",[28,148961,39],{"class":38},[28,148963,148964],{"class":34},"[opts.DataZoomOpts()],\n",[28,148966,148967],{"class":30,"line":1860},[28,148968,227],{"class":34},[28,148970,148971,148973,148976],{"class":30,"line":2654},[28,148972,147383],{"class":34},[28,148974,148975],{"class":320},"\"daily_sales.html\"",[28,148977,227],{"class":34},[14,148979,148980,148983],{},[25,148981,148982],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[159,148985,148987],{"id":148986},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148989,148990],{},"如果数据结构如下：",[18,148992,148994],{"className":20,"code":148993,"language":22,"meta":23,"style":23},"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",[25,148995,148996,149004,149012,149034,149055,149060,149067,149087,149107,149111],{"__ignoreMap":23},[28,148997,148998,149000,149002],{"class":30,"line":31},[28,148999,101717],{"class":34},[28,149001,39],{"class":38},[28,149003,15649],{"class":34},[28,149005,149006,149009],{"class":30,"line":94},[28,149007,149008],{"class":320},"    \"北京\"",[28,149010,149011],{"class":34},": [\n",[28,149013,149014,149016,149018,149020,149023,149025,149028,149030,149032],{"class":30,"line":109},[28,149015,4994],{"class":34},[28,149017,148056],{"class":320},[28,149019,51512],{"class":34},[28,149021,149022],{"class":320},"\"2024-01-01\"",[28,149024,12512],{"class":34},[28,149026,149027],{"class":320},"\"confirm\"",[28,149029,51512],{"class":34},[28,149031,659],{"class":45},[28,149033,5007],{"class":34},[28,149035,149036,149038,149040,149042,149045,149047,149049,149051,149053],{"class":30,"line":125},[28,149037,4994],{"class":34},[28,149039,148056],{"class":320},[28,149041,51512],{"class":34},[28,149043,149044],{"class":320},"\"2024-01-02\"",[28,149046,12512],{"class":34},[28,149048,149027],{"class":320},[28,149050,51512],{"class":34},[28,149052,68],{"class":45},[28,149054,5007],{"class":34},[28,149056,149057],{"class":30,"line":131},[28,149058,149059],{"class":34},"    ],\n",[28,149061,149062,149065],{"class":30,"line":1291},[28,149063,149064],{"class":320},"    \"上海\"",[28,149066,149011],{"class":34},[28,149068,149069,149071,149073,149075,149077,149079,149081,149083,149085],{"class":30,"line":1297},[28,149070,4994],{"class":34},[28,149072,148056],{"class":320},[28,149074,51512],{"class":34},[28,149076,149022],{"class":320},[28,149078,12512],{"class":34},[28,149080,149027],{"class":320},[28,149082,51512],{"class":34},[28,149084,608],{"class":45},[28,149086,5007],{"class":34},[28,149088,149089,149091,149093,149095,149097,149099,149101,149103,149105],{"class":30,"line":1388},[28,149090,4994],{"class":34},[28,149092,148056],{"class":320},[28,149094,51512],{"class":34},[28,149096,149044],{"class":320},[28,149098,12512],{"class":34},[28,149100,149027],{"class":320},[28,149102,51512],{"class":34},[28,149104,73],{"class":45},[28,149106,5007],{"class":34},[28,149108,149109],{"class":30,"line":1394},[28,149110,149059],{"class":34},[28,149112,149113],{"class":30,"line":1406},[28,149114,1642],{"class":34},[14,149116,149117],{},"绘制多地区趋势：",[18,149119,149121],{"className":20,"code":149120,"language":22,"meta":23,"style":23},"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",[25,149122,149123,149137,149147,149151,149176,149180,149188,149192,149196,149208,149230,149243,149247,149251,149268,149284,149288],{"__ignoreMap":23},[28,149124,149125,149127,149129,149131,149133,149135],{"class":30,"line":31},[28,149126,30813],{"class":38},[28,149128,147438],{"class":34},[28,149130,30468],{"class":38},[28,149132,147443],{"class":34},[28,149134,31459],{"class":38},[28,149136,147448],{"class":34},[28,149138,149139,149141,149143,149145],{"class":30,"line":94},[28,149140,30813],{"class":38},[28,149142,147297],{"class":34},[28,149144,30468],{"class":38},[28,149146,147302],{"class":34},[28,149148,149149],{"class":30,"line":109},[28,149150,2477],{"emptyLinePlaceholder":144},[28,149152,149153,149155,149157,149159,149161,149163,149165,149167,149169,149172,149174],{"class":30,"line":125},[28,149154,147859],{"class":34},[28,149156,39],{"class":38},[28,149158,148782],{"class":34},[28,149160,148056],{"class":320},[28,149162,4520],{"class":34},[28,149164,3102],{"class":38},[28,149166,148268],{"class":34},[28,149168,26121],{"class":38},[28,149170,149171],{"class":34}," data[",[28,149173,69344],{"class":320},[28,149175,77602],{"class":34},[28,149177,149178],{"class":30,"line":131},[28,149179,2477],{"emptyLinePlaceholder":144},[28,149181,149182,149184,149186],{"class":30,"line":1291},[28,149183,147311],{"class":34},[28,149185,39],{"class":38},[28,149187,147316],{"class":34},[28,149189,149190],{"class":30,"line":1297},[28,149191,147900],{"class":34},[28,149193,149194],{"class":30,"line":1388},[28,149195,2477],{"emptyLinePlaceholder":144},[28,149197,149198,149200,149203,149205],{"class":30,"line":1394},[28,149199,3102],{"class":38},[28,149201,149202],{"class":34}," city, records ",[28,149204,26121],{"class":38},[28,149206,149207],{"class":34}," data.items():\n",[28,149209,149210,149213,149215,149217,149219,149221,149223,149225,149227],{"class":30,"line":1406},[28,149211,149212],{"class":34},"    values ",[28,149214,39],{"class":38},[28,149216,148782],{"class":34},[28,149218,149027],{"class":320},[28,149220,4520],{"class":34},[28,149222,3102],{"class":38},[28,149224,148268],{"class":34},[28,149226,26121],{"class":38},[28,149228,149229],{"class":34}," records]\n",[28,149231,149232,149235,149237,149239,149241],{"class":30,"line":1689},[28,149233,149234],{"class":34},"    line.add_yaxis(city, values, ",[28,149236,147804],{"class":5293},[28,149238,39],{"class":38},[28,149240,31552],{"class":45},[28,149242,227],{"class":34},[28,149244,149245],{"class":30,"line":1694},[28,149246,2477],{"emptyLinePlaceholder":144},[28,149248,149249],{"class":30,"line":1700},[28,149250,147527],{"class":34},[28,149252,149253,149255,149257,149259,149261,149263,149266],{"class":30,"line":1705},[28,149254,147532],{"class":5293},[28,149256,39],{"class":38},[28,149258,147537],{"class":34},[28,149260,51482],{"class":5293},[28,149262,39],{"class":38},[28,149264,149265],{"class":320},"\"多地区趋势图\"",[28,149267,38123],{"class":34},[28,149269,149270,149272,149274,149276,149278,149280,149282],{"class":30,"line":1719},[28,149271,147588],{"class":5293},[28,149273,39],{"class":38},[28,149275,147593],{"class":34},[28,149277,147596],{"class":5293},[28,149279,39],{"class":38},[28,149281,147601],{"class":320},[28,149283,38123],{"class":34},[28,149285,149286],{"class":30,"line":1724},[28,149287,227],{"class":34},[28,149289,149290,149292,149295],{"class":30,"line":1730},[28,149291,147383],{"class":34},[28,149293,149294],{"class":320},"\"trend.html\"",[28,149296,227],{"class":34},[14,149298,149299],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[159,149301,149303],{"id":149302},"_1012-易错点","10.12 易错点",[171,149305,149306,149312,149318,149328,149334],{},[174,149307,149308,149311],{},[25,149309,149310],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[174,149313,149314,149317],{},[25,149315,149316],{},"render()"," 生成的是 HTML，不是图片。",[174,149319,149320,149321,149324,149325,28463],{},"JSON 字符串用 ",[25,149322,149323],{},"json.loads()","，JSON 文件用 ",[25,149326,149327],{},"json.load()",[174,149329,149330,149331,28463],{},"中文 JSON 保存时加 ",[25,149332,149333],{},"ensure_ascii=False",[174,149335,149336],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[159,149338,149340],{"id":149339},"_1013-本章练习","10.13 本章练习",[171,149342,149343,149346,149349,149352,149355],{},[174,149344,149345],{},"安装 pyecharts 并生成第一个折线图。",[174,149347,149348],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[174,149350,149351],{},"绘制两条折线，对比线上和线下销售额。",[174,149353,149354],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[174,149356,149357],{},"对含有空值的销售数据进行清洗后再绘图。",[136,149359,149360],{},"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":23,"searchDepth":94,"depth":94,"links":149362},[149363,149364,149365,149366,149367,149368,149369,149370,149371,149372,149373,149374,149375],{"id":146979,"depth":94,"text":146980},{"id":147054,"depth":94,"text":147055},{"id":147233,"depth":94,"text":147234},{"id":147284,"depth":94,"text":147285},{"id":147418,"depth":94,"text":147419},{"id":147694,"depth":94,"text":147695},{"id":147820,"depth":94,"text":147821},{"id":148031,"depth":94,"text":148032},{"id":148402,"depth":94,"text":148403},{"id":148614,"depth":94,"text":148615},{"id":148986,"depth":94,"text":148987},{"id":149302,"depth":94,"text":149303},{"id":149339,"depth":94,"text":149340},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146971,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149382,"title":149383,"body":149384,"description":141,"extension":142,"meta":151744,"navigation":144,"path":151745,"seo":151746,"stem":151747,"__hash__":151748},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149385,"toc":151721},[149386,149389,149393,149396,149399,149475,149478,149569,149572,149576,149579,149623,149636,149640,149643,149710,149713,149717,149720,149804,149812,149816,149821,149962,149965,149976,149982,149988,150102,150106,150109,150112,150365,150368,150372,150375,150479,150482,150486,150637,150641,150648,150761,150765,150768,150874,150877,150881,150884,150915,150918,151023,151026,151030,151034,151044,151112,151116,151123,151187,151190,151194,151200,151296,151305,151309,151633,151642,151646,151674,151678,151718],[10,149387,149383],{"id":149388},"_11-面向对象基础",[159,149390,149392],{"id":149391},"_111-什么是面向对象","11.1 什么是面向对象",[14,149394,149395],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149397,149398],{},"面向过程：",[18,149400,149402],{"className":20,"code":149401,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[25,149403,149404,149413,149421,149425,149435,149466,149470],{"__ignoreMap":23},[28,149405,149406,149408,149410],{"class":30,"line":31},[28,149407,146595],{"class":34},[28,149409,39],{"class":38},[28,149411,149412],{"class":320}," \"小明\"\n",[28,149414,149415,149417,149419],{"class":30,"line":94},[28,149416,146605],{"class":34},[28,149418,39],{"class":38},[28,149420,146610],{"class":45},[28,149422,149423],{"class":30,"line":109},[28,149424,2477],{"emptyLinePlaceholder":144},[28,149426,149427,149429,149432],{"class":30,"line":125},[28,149428,32023],{"class":38},[28,149430,149431],{"class":2040}," introduce",[28,149433,149434],{"class":34},"(name, age):\n",[28,149436,149437,149439,149441,149443,149446,149448,149450,149452,149455,149457,149459,149461,149464],{"class":30,"line":131},[28,149438,31375],{"class":45},[28,149440,221],{"class":34},[28,149442,271],{"class":38},[28,149444,149445],{"class":320},"\"我叫",[28,149447,1102],{"class":45},[28,149449,79885],{"class":34},[28,149451,1150],{"class":45},[28,149453,149454],{"class":320},"，今年",[28,149456,1102],{"class":45},[28,149458,70296],{"class":34},[28,149460,1150],{"class":45},[28,149462,149463],{"class":320},"岁\"",[28,149465,227],{"class":34},[28,149467,149468],{"class":30,"line":1291},[28,149469,2477],{"emptyLinePlaceholder":144},[28,149471,149472],{"class":30,"line":1297},[28,149473,149474],{"class":34},"introduce(name, age)\n",[14,149476,149477],{},"面向对象：",[18,149479,149481],{"className":20,"code":149480,"language":22,"meta":23,"style":23},"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",[25,149482,149483,149491,149499,149528,149532,149536,149546,149555,149564],{"__ignoreMap":23},[28,149484,149485,149487,149489],{"class":30,"line":31},[28,149486,14771],{"class":38},[28,149488,7975],{"class":2040},[28,149490,3816],{"class":34},[28,149492,149493,149495,149497],{"class":30,"line":94},[28,149494,30877],{"class":38},[28,149496,149431],{"class":2040},[28,149498,30883],{"class":34},[28,149500,149501,149503,149505,149507,149509,149512,149514,149516,149518,149520,149522,149524,149526],{"class":30,"line":109},[28,149502,32527],{"class":45},[28,149504,221],{"class":34},[28,149506,271],{"class":38},[28,149508,149445],{"class":320},[28,149510,149511],{"class":45},"{self",[28,149513,80376],{"class":34},[28,149515,1150],{"class":45},[28,149517,149454],{"class":320},[28,149519,149511],{"class":45},[28,149521,80388],{"class":34},[28,149523,1150],{"class":45},[28,149525,149463],{"class":320},[28,149527,227],{"class":34},[28,149529,149530],{"class":30,"line":125},[28,149531,2477],{"emptyLinePlaceholder":144},[28,149533,149534],{"class":30,"line":131},[28,149535,2477],{"emptyLinePlaceholder":144},[28,149537,149538,149541,149543],{"class":30,"line":1291},[28,149539,149540],{"class":34},"student ",[28,149542,39],{"class":38},[28,149544,149545],{"class":34}," Student()\n",[28,149547,149548,149551,149553],{"class":30,"line":1297},[28,149549,149550],{"class":34},"student.name ",[28,149552,39],{"class":38},[28,149554,149412],{"class":320},[28,149556,149557,149560,149562],{"class":30,"line":1388},[28,149558,149559],{"class":34},"student.age ",[28,149561,39],{"class":38},[28,149563,146610],{"class":45},[28,149565,149566],{"class":30,"line":1394},[28,149567,149568],{"class":34},"student.introduce()\n",[14,149570,149571],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[159,149573,149575],{"id":149574},"_112-类和对象","11.2 类和对象",[14,149577,149578],{},"类是模板，对象是根据模板创建出来的具体实例。",[18,149580,149582],{"className":20,"code":149581,"language":22,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[25,149583,149584,149592,149597,149601,149605,149614],{"__ignoreMap":23},[28,149585,149586,149588,149590],{"class":30,"line":31},[28,149587,14771],{"class":38},[28,149589,7975],{"class":2040},[28,149591,3816],{"class":34},[28,149593,149594],{"class":30,"line":94},[28,149595,149596],{"class":38},"    pass\n",[28,149598,149599],{"class":30,"line":109},[28,149600,2477],{"emptyLinePlaceholder":144},[28,149602,149603],{"class":30,"line":125},[28,149604,2477],{"emptyLinePlaceholder":144},[28,149606,149607,149610,149612],{"class":30,"line":131},[28,149608,149609],{"class":34},"student1 ",[28,149611,39],{"class":38},[28,149613,149545],{"class":34},[28,149615,149616,149619,149621],{"class":30,"line":1291},[28,149617,149618],{"class":34},"student2 ",[28,149620,39],{"class":38},[28,149622,149545],{"class":34},[14,149624,149625,149628,149629,101077,149632,149635],{},[25,149626,149627],{},"Student"," 是类，",[25,149630,149631],{},"student1",[25,149633,149634],{},"student2"," 是对象。",[159,149637,149639],{"id":149638},"_113-属性","11.3 属性",[14,149641,149642],{},"属性是对象保存的数据。",[18,149644,149646],{"className":20,"code":149645,"language":22,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[25,149647,149648,149656,149660,149664,149668,149676,149684,149692,149696,149703],{"__ignoreMap":23},[28,149649,149650,149652,149654],{"class":30,"line":31},[28,149651,14771],{"class":38},[28,149653,7975],{"class":2040},[28,149655,3816],{"class":34},[28,149657,149658],{"class":30,"line":94},[28,149659,149596],{"class":38},[28,149661,149662],{"class":30,"line":109},[28,149663,2477],{"emptyLinePlaceholder":144},[28,149665,149666],{"class":30,"line":125},[28,149667,2477],{"emptyLinePlaceholder":144},[28,149669,149670,149672,149674],{"class":30,"line":131},[28,149671,149540],{"class":34},[28,149673,39],{"class":38},[28,149675,149545],{"class":34},[28,149677,149678,149680,149682],{"class":30,"line":1291},[28,149679,149550],{"class":34},[28,149681,39],{"class":38},[28,149683,149412],{"class":320},[28,149685,149686,149688,149690],{"class":30,"line":1297},[28,149687,149559],{"class":34},[28,149689,39],{"class":38},[28,149691,146610],{"class":45},[28,149693,149694],{"class":30,"line":1388},[28,149695,2477],{"emptyLinePlaceholder":144},[28,149697,149698,149700],{"class":30,"line":1394},[28,149699,30491],{"class":45},[28,149701,149702],{"class":34},"(student.name)\n",[28,149704,149705,149707],{"class":30,"line":1406},[28,149706,30491],{"class":45},[28,149708,149709],{"class":34},"(student.age)\n",[14,149711,149712],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[159,149714,149716],{"id":149715},"_114-方法","11.4 方法",[14,149718,149719],{},"类中的函数叫方法。",[18,149721,149722],{"className":20,"code":149480,"language":22,"meta":23,"style":23},[25,149723,149724,149732,149740,149768,149772,149776,149784,149792,149800],{"__ignoreMap":23},[28,149725,149726,149728,149730],{"class":30,"line":31},[28,149727,14771],{"class":38},[28,149729,7975],{"class":2040},[28,149731,3816],{"class":34},[28,149733,149734,149736,149738],{"class":30,"line":94},[28,149735,30877],{"class":38},[28,149737,149431],{"class":2040},[28,149739,30883],{"class":34},[28,149741,149742,149744,149746,149748,149750,149752,149754,149756,149758,149760,149762,149764,149766],{"class":30,"line":109},[28,149743,32527],{"class":45},[28,149745,221],{"class":34},[28,149747,271],{"class":38},[28,149749,149445],{"class":320},[28,149751,149511],{"class":45},[28,149753,80376],{"class":34},[28,149755,1150],{"class":45},[28,149757,149454],{"class":320},[28,149759,149511],{"class":45},[28,149761,80388],{"class":34},[28,149763,1150],{"class":45},[28,149765,149463],{"class":320},[28,149767,227],{"class":34},[28,149769,149770],{"class":30,"line":125},[28,149771,2477],{"emptyLinePlaceholder":144},[28,149773,149774],{"class":30,"line":131},[28,149775,2477],{"emptyLinePlaceholder":144},[28,149777,149778,149780,149782],{"class":30,"line":1291},[28,149779,149540],{"class":34},[28,149781,39],{"class":38},[28,149783,149545],{"class":34},[28,149785,149786,149788,149790],{"class":30,"line":1297},[28,149787,149550],{"class":34},[28,149789,39],{"class":38},[28,149791,149412],{"class":320},[28,149793,149794,149796,149798],{"class":30,"line":1388},[28,149795,149559],{"class":34},[28,149797,39],{"class":38},[28,149799,146610],{"class":45},[28,149801,149802],{"class":30,"line":1394},[28,149803,149568],{"class":34},[14,149805,149806,149808,149809,149811],{},[25,149807,30899],{}," 表示当前对象。调用方法时不需要手动传入 ",[25,149810,30899],{},"，Python 会自动传。",[159,149813,149815],{"id":149814},"_115-构造方法__init__","11.5 构造方法__init__",[14,149817,149818,149820],{},[25,149819,30905],{}," 在对象创建时自动执行，用于初始化属性。",[18,149822,149824],{"className":20,"code":149823,"language":22,"meta":23,"style":23},"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",[25,149825,149826,149834,149843,149855,149867,149878,149882,149890,149928,149932,149936,149958],{"__ignoreMap":23},[28,149827,149828,149830,149832],{"class":30,"line":31},[28,149829,14771],{"class":38},[28,149831,7975],{"class":2040},[28,149833,3816],{"class":34},[28,149835,149836,149838,149840],{"class":30,"line":94},[28,149837,30877],{"class":38},[28,149839,30880],{"class":45},[28,149841,149842],{"class":34},"(self, name, age, score):\n",[28,149844,149845,149847,149850,149852],{"class":30,"line":109},[28,149846,30921],{"class":45},[28,149848,149849],{"class":34},".name ",[28,149851,39],{"class":38},[28,149853,149854],{"class":34}," name\n",[28,149856,149857,149859,149862,149864],{"class":30,"line":125},[28,149858,30921],{"class":45},[28,149860,149861],{"class":34},".age ",[28,149863,39],{"class":38},[28,149865,149866],{"class":34}," age\n",[28,149868,149869,149871,149874,149876],{"class":30,"line":131},[28,149870,30921],{"class":45},[28,149872,149873],{"class":34},".score ",[28,149875,39],{"class":38},[28,149877,1656],{"class":34},[28,149879,149880],{"class":30,"line":1291},[28,149881,2477],{"emptyLinePlaceholder":144},[28,149883,149884,149886,149888],{"class":30,"line":1297},[28,149885,30877],{"class":38},[28,149887,149431],{"class":2040},[28,149889,30883],{"class":34},[28,149891,149892,149894,149896,149898,149900,149902,149904,149906,149908,149910,149912,149914,149917,149919,149922,149924,149926],{"class":30,"line":1388},[28,149893,32527],{"class":45},[28,149895,221],{"class":34},[28,149897,271],{"class":38},[28,149899,149445],{"class":320},[28,149901,149511],{"class":45},[28,149903,80376],{"class":34},[28,149905,1150],{"class":45},[28,149907,149454],{"class":320},[28,149909,149511],{"class":45},[28,149911,80388],{"class":34},[28,149913,1150],{"class":45},[28,149915,149916],{"class":320},"岁，成绩",[28,149918,149511],{"class":45},[28,149920,149921],{"class":34},".score",[28,149923,1150],{"class":45},[28,149925,465],{"class":320},[28,149927,227],{"class":34},[28,149929,149930],{"class":30,"line":1394},[28,149931,2477],{"emptyLinePlaceholder":144},[28,149933,149934],{"class":30,"line":1406},[28,149935,2477],{"emptyLinePlaceholder":144},[28,149937,149938,149940,149942,149945,149948,149950,149952,149954,149956],{"class":30,"line":1689},[28,149939,149540],{"class":34},[28,149941,39],{"class":38},[28,149943,149944],{"class":34}," Student(",[28,149946,149947],{"class":320},"\"小明\"",[28,149949,12512],{"class":34},[28,149951,860],{"class":45},[28,149953,12512],{"class":34},[28,149955,1193],{"class":45},[28,149957,227],{"class":34},[28,149959,149960],{"class":30,"line":1694},[28,149961,149568],{"class":34},[14,149963,149964],{},"构造方法的好处：",[171,149966,149967,149970,149973],{},[174,149968,149969],{},"创建对象时必须提供必要数据。",[174,149971,149972],{},"属性初始化集中，不容易漏。",[174,149974,149975],{},"对象状态更完整。",[159,149977,149979,149980],{"id":149978},"_116-str","11.6 ",[365,149981,1376],{},[14,149983,149984,149985,28463],{},"直接打印对象时，默认输出不直观。可以定义 ",[25,149986,149987],{},"__str__",[18,149989,149991],{"className":20,"code":149990,"language":22,"meta":23,"style":23},"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",[25,149992,149993,150001,150010,150020,150030,150034,150043,150071,150075,150079,150095],{"__ignoreMap":23},[28,149994,149995,149997,149999],{"class":30,"line":31},[28,149996,14771],{"class":38},[28,149998,7975],{"class":2040},[28,150000,3816],{"class":34},[28,150002,150003,150005,150007],{"class":30,"line":94},[28,150004,30877],{"class":38},[28,150006,30880],{"class":45},[28,150008,150009],{"class":34},"(self, name, age):\n",[28,150011,150012,150014,150016,150018],{"class":30,"line":109},[28,150013,30921],{"class":45},[28,150015,149849],{"class":34},[28,150017,39],{"class":38},[28,150019,149854],{"class":34},[28,150021,150022,150024,150026,150028],{"class":30,"line":125},[28,150023,30921],{"class":45},[28,150025,149861],{"class":34},[28,150027,39],{"class":38},[28,150029,149866],{"class":34},[28,150031,150032],{"class":30,"line":131},[28,150033,2477],{"emptyLinePlaceholder":144},[28,150035,150036,150038,150041],{"class":30,"line":1291},[28,150037,30877],{"class":38},[28,150039,150040],{"class":45}," __str__",[28,150042,30883],{"class":34},[28,150044,150045,150047,150050,150053,150055,150057,150059,150062,150064,150066,150068],{"class":30,"line":1297},[28,150046,14829],{"class":38},[28,150048,150049],{"class":38}," f",[28,150051,150052],{"class":320},"\"Student(name=",[28,150054,149511],{"class":45},[28,150056,80376],{"class":34},[28,150058,1150],{"class":45},[28,150060,150061],{"class":320},", age=",[28,150063,149511],{"class":45},[28,150065,80388],{"class":34},[28,150067,1150],{"class":45},[28,150069,150070],{"class":320},")\"\n",[28,150072,150073],{"class":30,"line":1388},[28,150074,2477],{"emptyLinePlaceholder":144},[28,150076,150077],{"class":30,"line":1394},[28,150078,2477],{"emptyLinePlaceholder":144},[28,150080,150081,150083,150085,150087,150089,150091,150093],{"class":30,"line":1406},[28,150082,149540],{"class":34},[28,150084,39],{"class":38},[28,150086,149944],{"class":34},[28,150088,149947],{"class":320},[28,150090,12512],{"class":34},[28,150092,860],{"class":45},[28,150094,227],{"class":34},[28,150096,150097,150099],{"class":30,"line":1689},[28,150098,30491],{"class":45},[28,150100,150101],{"class":34},"(student)\n",[159,150103,150105],{"id":150104},"_117-封装","11.7 封装",[14,150107,150108],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150110,150111],{},"Python 中以双下划线开头的属性通常视为私有属性。",[18,150113,150115],{"className":20,"code":150114,"language":22,"meta":23,"style":23},"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",[25,150116,150117,150126,150135,150147,150159,150163,150172,150181,150185,150195,150208,150219,150224,150235,150239,150248,150260,150271,150275,150288,150299,150303,150314,150318,150322,150340,150349,150358],{"__ignoreMap":23},[28,150118,150119,150121,150124],{"class":30,"line":31},[28,150120,14771],{"class":38},[28,150122,150123],{"class":2040}," Account",[28,150125,3816],{"class":34},[28,150127,150128,150130,150132],{"class":30,"line":94},[28,150129,30877],{"class":38},[28,150131,30880],{"class":45},[28,150133,150134],{"class":34},"(self, owner, balance):\n",[28,150136,150137,150139,150142,150144],{"class":30,"line":109},[28,150138,30921],{"class":45},[28,150140,150141],{"class":34},".owner ",[28,150143,39],{"class":38},[28,150145,150146],{"class":34}," owner\n",[28,150148,150149,150151,150154,150156],{"class":30,"line":125},[28,150150,30921],{"class":45},[28,150152,150153],{"class":34},".__balance ",[28,150155,39],{"class":38},[28,150157,150158],{"class":34}," balance\n",[28,150160,150161],{"class":30,"line":131},[28,150162,2477],{"emptyLinePlaceholder":144},[28,150164,150165,150167,150170],{"class":30,"line":1291},[28,150166,30877],{"class":38},[28,150168,150169],{"class":2040}," get_balance",[28,150171,30883],{"class":34},[28,150173,150174,150176,150178],{"class":30,"line":1297},[28,150175,14829],{"class":38},[28,150177,38949],{"class":45},[28,150179,150180],{"class":34},".__balance\n",[28,150182,150183],{"class":30,"line":1388},[28,150184,2477],{"emptyLinePlaceholder":144},[28,150186,150187,150189,150192],{"class":30,"line":1394},[28,150188,30877],{"class":38},[28,150190,150191],{"class":2040}," deposit",[28,150193,150194],{"class":34},"(self, money):\n",[28,150196,150197,150199,150202,150204,150206],{"class":30,"line":1406},[28,150198,2574],{"class":38},[28,150200,150201],{"class":34}," money ",[28,150203,1665],{"class":38},[28,150205,4170],{"class":45},[28,150207,3816],{"class":34},[28,150209,150210,150212,150214,150217],{"class":30,"line":1689},[28,150211,34726],{"class":45},[28,150213,221],{"class":34},[28,150215,150216],{"class":320},"\"存款金额必须大于0\"",[28,150218,227],{"class":34},[28,150220,150221],{"class":30,"line":1694},[28,150222,150223],{"class":38},"            return\n",[28,150225,150226,150228,150230,150232],{"class":30,"line":1700},[28,150227,30921],{"class":45},[28,150229,150153],{"class":34},[28,150231,9554],{"class":38},[28,150233,150234],{"class":34}," money\n",[28,150236,150237],{"class":30,"line":1705},[28,150238,2477],{"emptyLinePlaceholder":144},[28,150240,150241,150243,150246],{"class":30,"line":1719},[28,150242,30877],{"class":38},[28,150244,150245],{"class":2040}," withdraw",[28,150247,150194],{"class":34},[28,150249,150250,150252,150254,150256,150258],{"class":30,"line":1724},[28,150251,2574],{"class":38},[28,150253,150201],{"class":34},[28,150255,1665],{"class":38},[28,150257,4170],{"class":45},[28,150259,3816],{"class":34},[28,150261,150262,150264,150266,150269],{"class":30,"line":1730},[28,150263,34726],{"class":45},[28,150265,221],{"class":34},[28,150267,150268],{"class":320},"\"取款金额必须大于0\"",[28,150270,227],{"class":34},[28,150272,150273],{"class":30,"line":1751},[28,150274,150223],{"class":38},[28,150276,150277,150279,150281,150283,150285],{"class":30,"line":1756},[28,150278,2574],{"class":38},[28,150280,150201],{"class":34},[28,150282,1164],{"class":38},[28,150284,38949],{"class":45},[28,150286,150287],{"class":34},".__balance:\n",[28,150289,150290,150292,150294,150297],{"class":30,"line":1770},[28,150291,34726],{"class":45},[28,150293,221],{"class":34},[28,150295,150296],{"class":320},"\"余额不足\"",[28,150298,227],{"class":34},[28,150300,150301],{"class":30,"line":1775},[28,150302,150223],{"class":38},[28,150304,150305,150307,150309,150312],{"class":30,"line":1804},[28,150306,30921],{"class":45},[28,150308,150153],{"class":34},[28,150310,150311],{"class":38},"-=",[28,150313,150234],{"class":34},[28,150315,150316],{"class":30,"line":1809},[28,150317,2477],{"emptyLinePlaceholder":144},[28,150319,150320],{"class":30,"line":1826},[28,150321,2477],{"emptyLinePlaceholder":144},[28,150323,150324,150327,150329,150332,150334,150336,150338],{"class":30,"line":1831},[28,150325,150326],{"class":34},"account ",[28,150328,39],{"class":38},[28,150330,150331],{"class":34}," Account(",[28,150333,149947],{"class":320},[28,150335,12512],{"class":34},[28,150337,6487],{"class":45},[28,150339,227],{"class":34},[28,150341,150342,150345,150347],{"class":30,"line":1836},[28,150343,150344],{"class":34},"account.deposit(",[28,150346,1799],{"class":45},[28,150348,227],{"class":34},[28,150350,150351,150354,150356],{"class":30,"line":1841},[28,150352,150353],{"class":34},"account.withdraw(",[28,150355,525],{"class":45},[28,150357,227],{"class":34},[28,150359,150360,150362],{"class":30,"line":1855},[28,150361,30491],{"class":45},[28,150363,150364],{"class":34},"(account.get_balance())\n",[14,150366,150367],{},"封装的意义是避免外部随意修改内部状态。",[159,150369,150371],{"id":150370},"_118-继承","11.8 继承",[14,150373,150374],{},"继承可以让子类复用父类的属性和方法。",[18,150376,150378],{"className":20,"code":150377,"language":22,"meta":23,"style":23},"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",[25,150379,150380,150389,150398,150409,150413,150417,150431,150440,150451,150455,150459,150469,150474],{"__ignoreMap":23},[28,150381,150382,150384,150387],{"class":30,"line":31},[28,150383,14771],{"class":38},[28,150385,150386],{"class":2040}," Animal",[28,150388,3816],{"class":34},[28,150390,150391,150393,150396],{"class":30,"line":94},[28,150392,30877],{"class":38},[28,150394,150395],{"class":2040}," eat",[28,150397,30883],{"class":34},[28,150399,150400,150402,150404,150407],{"class":30,"line":109},[28,150401,32527],{"class":45},[28,150403,221],{"class":34},[28,150405,150406],{"class":320},"\"吃东西\"",[28,150408,227],{"class":34},[28,150410,150411],{"class":30,"line":125},[28,150412,2477],{"emptyLinePlaceholder":144},[28,150414,150415],{"class":30,"line":131},[28,150416,2477],{"emptyLinePlaceholder":144},[28,150418,150419,150421,150424,150426,150429],{"class":30,"line":1291},[28,150420,14771],{"class":38},[28,150422,150423],{"class":2040}," Dog",[28,150425,221],{"class":34},[28,150427,150428],{"class":2040},"Animal",[28,150430,30862],{"class":34},[28,150432,150433,150435,150438],{"class":30,"line":1297},[28,150434,30877],{"class":38},[28,150436,150437],{"class":2040}," bark",[28,150439,30883],{"class":34},[28,150441,150442,150444,150446,150449],{"class":30,"line":1388},[28,150443,32527],{"class":45},[28,150445,221],{"class":34},[28,150447,150448],{"class":320},"\"汪汪\"",[28,150450,227],{"class":34},[28,150452,150453],{"class":30,"line":1394},[28,150454,2477],{"emptyLinePlaceholder":144},[28,150456,150457],{"class":30,"line":1406},[28,150458,2477],{"emptyLinePlaceholder":144},[28,150460,150461,150464,150466],{"class":30,"line":1689},[28,150462,150463],{"class":34},"dog ",[28,150465,39],{"class":38},[28,150467,150468],{"class":34}," Dog()\n",[28,150470,150471],{"class":30,"line":1694},[28,150472,150473],{"class":34},"dog.eat()\n",[28,150475,150476],{"class":30,"line":1700},[28,150477,150478],{"class":34},"dog.bark()\n",[14,150480,150481],{},"子类可以扩展新方法，也可以重写父类方法。",[159,150483,150485],{"id":150484},"_119-方法重写","11.9 方法重写",[18,150487,150489],{"className":20,"code":150488,"language":22,"meta":23,"style":23},"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",[25,150490,150491,150499,150508,150519,150523,150527,150539,150547,150557,150561,150565,150578,150586,150597,150601,150605,150613,150623,150627,150632],{"__ignoreMap":23},[28,150492,150493,150495,150497],{"class":30,"line":31},[28,150494,14771],{"class":38},[28,150496,150386],{"class":2040},[28,150498,3816],{"class":34},[28,150500,150501,150503,150506],{"class":30,"line":94},[28,150502,30877],{"class":38},[28,150504,150505],{"class":2040}," speak",[28,150507,30883],{"class":34},[28,150509,150510,150512,150514,150517],{"class":30,"line":109},[28,150511,32527],{"class":45},[28,150513,221],{"class":34},[28,150515,150516],{"class":320},"\"动物叫\"",[28,150518,227],{"class":34},[28,150520,150521],{"class":30,"line":125},[28,150522,2477],{"emptyLinePlaceholder":144},[28,150524,150525],{"class":30,"line":131},[28,150526,2477],{"emptyLinePlaceholder":144},[28,150528,150529,150531,150533,150535,150537],{"class":30,"line":1291},[28,150530,14771],{"class":38},[28,150532,150423],{"class":2040},[28,150534,221],{"class":34},[28,150536,150428],{"class":2040},[28,150538,30862],{"class":34},[28,150540,150541,150543,150545],{"class":30,"line":1297},[28,150542,30877],{"class":38},[28,150544,150505],{"class":2040},[28,150546,30883],{"class":34},[28,150548,150549,150551,150553,150555],{"class":30,"line":1388},[28,150550,32527],{"class":45},[28,150552,221],{"class":34},[28,150554,150448],{"class":320},[28,150556,227],{"class":34},[28,150558,150559],{"class":30,"line":1394},[28,150560,2477],{"emptyLinePlaceholder":144},[28,150562,150563],{"class":30,"line":1406},[28,150564,2477],{"emptyLinePlaceholder":144},[28,150566,150567,150569,150572,150574,150576],{"class":30,"line":1689},[28,150568,14771],{"class":38},[28,150570,150571],{"class":2040}," Cat",[28,150573,221],{"class":34},[28,150575,150428],{"class":2040},[28,150577,30862],{"class":34},[28,150579,150580,150582,150584],{"class":30,"line":1694},[28,150581,30877],{"class":38},[28,150583,150505],{"class":2040},[28,150585,30883],{"class":34},[28,150587,150588,150590,150592,150595],{"class":30,"line":1700},[28,150589,32527],{"class":45},[28,150591,221],{"class":34},[28,150593,150594],{"class":320},"\"喵喵\"",[28,150596,227],{"class":34},[28,150598,150599],{"class":30,"line":1705},[28,150600,2477],{"emptyLinePlaceholder":144},[28,150602,150603],{"class":30,"line":1719},[28,150604,2477],{"emptyLinePlaceholder":144},[28,150606,150607,150609,150611],{"class":30,"line":1724},[28,150608,150463],{"class":34},[28,150610,39],{"class":38},[28,150612,150468],{"class":34},[28,150614,150615,150618,150620],{"class":30,"line":1730},[28,150616,150617],{"class":34},"cat ",[28,150619,39],{"class":38},[28,150621,150622],{"class":34}," Cat()\n",[28,150624,150625],{"class":30,"line":1751},[28,150626,2477],{"emptyLinePlaceholder":144},[28,150628,150629],{"class":30,"line":1756},[28,150630,150631],{"class":34},"dog.speak()\n",[28,150633,150634],{"class":30,"line":1770},[28,150635,150636],{"class":34},"cat.speak()\n",[159,150638,150640],{"id":150639},"_1110-super","11.10 super",[14,150642,150643,150644,150647],{},"子类可以通过 ",[25,150645,150646],{},"super()"," 调用父类方法。",[18,150649,150651],{"className":20,"code":150650,"language":22,"meta":23,"style":23},"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",[25,150652,150653,150661,150670,150680,150684,150688,150700,150709,150720,150730,150734,150738,150754],{"__ignoreMap":23},[28,150654,150655,150657,150659],{"class":30,"line":31},[28,150656,14771],{"class":38},[28,150658,15646],{"class":2040},[28,150660,3816],{"class":34},[28,150662,150663,150665,150667],{"class":30,"line":94},[28,150664,30877],{"class":38},[28,150666,30880],{"class":45},[28,150668,150669],{"class":34},"(self, name):\n",[28,150671,150672,150674,150676,150678],{"class":30,"line":109},[28,150673,30921],{"class":45},[28,150675,149849],{"class":34},[28,150677,39],{"class":38},[28,150679,149854],{"class":34},[28,150681,150682],{"class":30,"line":125},[28,150683,2477],{"emptyLinePlaceholder":144},[28,150685,150686],{"class":30,"line":131},[28,150687,2477],{"emptyLinePlaceholder":144},[28,150689,150690,150692,150694,150696,150698],{"class":30,"line":1291},[28,150691,14771],{"class":38},[28,150693,7975],{"class":2040},[28,150695,221],{"class":34},[28,150697,19123],{"class":2040},[28,150699,30862],{"class":34},[28,150701,150702,150704,150706],{"class":30,"line":1297},[28,150703,30877],{"class":38},[28,150705,30880],{"class":45},[28,150707,150708],{"class":34},"(self, name, score):\n",[28,150710,150711,150713,150715,150717],{"class":30,"line":1388},[28,150712,30893],{"class":45},[28,150714,17338],{"class":34},[28,150716,30905],{"class":45},[28,150718,150719],{"class":34},"(name)\n",[28,150721,150722,150724,150726,150728],{"class":30,"line":1394},[28,150723,30921],{"class":45},[28,150725,149873],{"class":34},[28,150727,39],{"class":38},[28,150729,1656],{"class":34},[28,150731,150732],{"class":30,"line":1406},[28,150733,2477],{"emptyLinePlaceholder":144},[28,150735,150736],{"class":30,"line":1689},[28,150737,2477],{"emptyLinePlaceholder":144},[28,150739,150740,150742,150744,150746,150748,150750,150752],{"class":30,"line":1694},[28,150741,149540],{"class":34},[28,150743,39],{"class":38},[28,150745,149944],{"class":34},[28,150747,149947],{"class":320},[28,150749,12512],{"class":34},[28,150751,1193],{"class":45},[28,150753,227],{"class":34},[28,150755,150756,150758],{"class":30,"line":1700},[28,150757,30491],{"class":45},[28,150759,150760],{"class":34},"(student.name, student.score)\n",[159,150762,150764],{"id":150763},"_1111-多态","11.11 多态",[14,150766,150767],{},"多态指不同对象响应同一个方法，表现出不同结果。",[18,150769,150771],{"className":20,"code":150770,"language":22,"meta":23,"style":23},"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",[25,150772,150773,150781,150789,150799,150803,150807,150815,150823,150833,150837,150841,150851,150856,150860,150864,150869],{"__ignoreMap":23},[28,150774,150775,150777,150779],{"class":30,"line":31},[28,150776,14771],{"class":38},[28,150778,150423],{"class":2040},[28,150780,3816],{"class":34},[28,150782,150783,150785,150787],{"class":30,"line":94},[28,150784,30877],{"class":38},[28,150786,150505],{"class":2040},[28,150788,30883],{"class":34},[28,150790,150791,150793,150795,150797],{"class":30,"line":109},[28,150792,32527],{"class":45},[28,150794,221],{"class":34},[28,150796,150448],{"class":320},[28,150798,227],{"class":34},[28,150800,150801],{"class":30,"line":125},[28,150802,2477],{"emptyLinePlaceholder":144},[28,150804,150805],{"class":30,"line":131},[28,150806,2477],{"emptyLinePlaceholder":144},[28,150808,150809,150811,150813],{"class":30,"line":1291},[28,150810,14771],{"class":38},[28,150812,150571],{"class":2040},[28,150814,3816],{"class":34},[28,150816,150817,150819,150821],{"class":30,"line":1297},[28,150818,30877],{"class":38},[28,150820,150505],{"class":2040},[28,150822,30883],{"class":34},[28,150824,150825,150827,150829,150831],{"class":30,"line":1388},[28,150826,32527],{"class":45},[28,150828,221],{"class":34},[28,150830,150594],{"class":320},[28,150832,227],{"class":34},[28,150834,150835],{"class":30,"line":1394},[28,150836,2477],{"emptyLinePlaceholder":144},[28,150838,150839],{"class":30,"line":1406},[28,150840,2477],{"emptyLinePlaceholder":144},[28,150842,150843,150845,150848],{"class":30,"line":1689},[28,150844,32023],{"class":38},[28,150846,150847],{"class":2040}," make_sound",[28,150849,150850],{"class":34},"(animal):\n",[28,150852,150853],{"class":30,"line":1694},[28,150854,150855],{"class":34},"    animal.speak()\n",[28,150857,150858],{"class":30,"line":1700},[28,150859,2477],{"emptyLinePlaceholder":144},[28,150861,150862],{"class":30,"line":1705},[28,150863,2477],{"emptyLinePlaceholder":144},[28,150865,150866],{"class":30,"line":1719},[28,150867,150868],{"class":34},"make_sound(Dog())\n",[28,150870,150871],{"class":30,"line":1724},[28,150872,150873],{"class":34},"make_sound(Cat())\n",[14,150875,150876],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[159,150878,150880],{"id":150879},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150882,150883],{},"实例属性属于对象：",[18,150885,150887],{"className":20,"code":150886,"language":22,"meta":23,"style":23},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[25,150888,150889,150897,150905],{"__ignoreMap":23},[28,150890,150891,150893,150895],{"class":30,"line":31},[28,150892,14771],{"class":38},[28,150894,7975],{"class":2040},[28,150896,3816],{"class":34},[28,150898,150899,150901,150903],{"class":30,"line":94},[28,150900,30877],{"class":38},[28,150902,30880],{"class":45},[28,150904,150669],{"class":34},[28,150906,150907,150909,150911,150913],{"class":30,"line":109},[28,150908,30921],{"class":45},[28,150910,149849],{"class":34},[28,150912,39],{"class":38},[28,150914,149854],{"class":34},[14,150916,150917],{},"类属性属于类，所有对象共享：",[18,150919,150921],{"className":20,"code":150920,"language":22,"meta":23,"style":23},"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",[25,150922,150923,150931,150941,150945,150953,150963,150967,150971,150984,150998,151002,151009,151016],{"__ignoreMap":23},[28,150924,150925,150927,150929],{"class":30,"line":31},[28,150926,14771],{"class":38},[28,150928,7975],{"class":2040},[28,150930,3816],{"class":34},[28,150932,150933,150936,150938],{"class":30,"line":94},[28,150934,150935],{"class":34},"    school ",[28,150937,39],{"class":38},[28,150939,150940],{"class":320}," \"黑马学校\"\n",[28,150942,150943],{"class":30,"line":109},[28,150944,2477],{"emptyLinePlaceholder":144},[28,150946,150947,150949,150951],{"class":30,"line":125},[28,150948,30877],{"class":38},[28,150950,30880],{"class":45},[28,150952,150669],{"class":34},[28,150954,150955,150957,150959,150961],{"class":30,"line":131},[28,150956,30921],{"class":45},[28,150958,149849],{"class":34},[28,150960,39],{"class":38},[28,150962,149854],{"class":34},[28,150964,150965],{"class":30,"line":1291},[28,150966,2477],{"emptyLinePlaceholder":144},[28,150968,150969],{"class":30,"line":1297},[28,150970,2477],{"emptyLinePlaceholder":144},[28,150972,150973,150976,150978,150980,150982],{"class":30,"line":1388},[28,150974,150975],{"class":34},"s1 ",[28,150977,39],{"class":38},[28,150979,149944],{"class":34},[28,150981,149947],{"class":320},[28,150983,227],{"class":34},[28,150985,150986,150989,150991,150993,150996],{"class":30,"line":1394},[28,150987,150988],{"class":34},"s2 ",[28,150990,39],{"class":38},[28,150992,149944],{"class":34},[28,150994,150995],{"class":320},"\"小红\"",[28,150997,227],{"class":34},[28,150999,151000],{"class":30,"line":1406},[28,151001,2477],{"emptyLinePlaceholder":144},[28,151003,151004,151006],{"class":30,"line":1689},[28,151005,30491],{"class":45},[28,151007,151008],{"class":34},"(s1.school)\n",[28,151010,151011,151013],{"class":30,"line":1694},[28,151012,30491],{"class":45},[28,151014,151015],{"class":34},"(s2.school)\n",[28,151017,151018,151020],{"class":30,"line":1700},[28,151019,30491],{"class":45},[28,151021,151022],{"class":34},"(Student.school)\n",[14,151024,151025],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[159,151027,151029],{"id":151028},"_1113-类方法和静态方法","11.13 类方法和静态方法",[188,151031,151033],{"id":151032},"_11131-类方法","11.13.1 类方法",[14,151035,151036,151037,151040,151041,28463],{},"类方法使用 ",[25,151038,151039],{},"@classmethod","，第一个参数通常是 ",[25,151042,151043],{},"cls",[18,151045,151047],{"className":20,"code":151046,"language":22,"meta":23,"style":23},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[25,151048,151049,151057,151065,151069,151077,151087,151097,151101,151105],{"__ignoreMap":23},[28,151050,151051,151053,151055],{"class":30,"line":31},[28,151052,14771],{"class":38},[28,151054,7975],{"class":2040},[28,151056,3816],{"class":34},[28,151058,151059,151061,151063],{"class":30,"line":94},[28,151060,150935],{"class":34},[28,151062,39],{"class":38},[28,151064,150940],{"class":320},[28,151066,151067],{"class":30,"line":109},[28,151068,2477],{"emptyLinePlaceholder":144},[28,151070,151071,151074],{"class":30,"line":125},[28,151072,151073],{"class":2040},"    @",[28,151075,151076],{"class":45},"classmethod\n",[28,151078,151079,151081,151084],{"class":30,"line":131},[28,151080,30877],{"class":38},[28,151082,151083],{"class":2040}," get_school",[28,151085,151086],{"class":34},"(cls):\n",[28,151088,151089,151091,151094],{"class":30,"line":1291},[28,151090,14829],{"class":38},[28,151092,151093],{"class":45}," cls",[28,151095,151096],{"class":34},".school\n",[28,151098,151099],{"class":30,"line":1297},[28,151100,2477],{"emptyLinePlaceholder":144},[28,151102,151103],{"class":30,"line":1388},[28,151104,2477],{"emptyLinePlaceholder":144},[28,151106,151107,151109],{"class":30,"line":1394},[28,151108,30491],{"class":45},[28,151110,151111],{"class":34},"(Student.get_school())\n",[188,151113,151115],{"id":151114},"_11132-静态方法","11.13.2 静态方法",[14,151117,151118,151119,151122],{},"静态方法使用 ",[25,151120,151121],{},"@staticmethod","，不需要访问实例和类。",[18,151124,151126],{"className":20,"code":151125,"language":22,"meta":23,"style":23},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[25,151127,151128,151137,151144,151153,151164,151168,151172],{"__ignoreMap":23},[28,151129,151130,151132,151135],{"class":30,"line":31},[28,151131,14771],{"class":38},[28,151133,151134],{"class":2040}," MathUtils",[28,151136,3816],{"class":34},[28,151138,151139,151141],{"class":30,"line":94},[28,151140,151073],{"class":2040},[28,151142,151143],{"class":45},"staticmethod\n",[28,151145,151146,151148,151150],{"class":30,"line":109},[28,151147,30877],{"class":38},[28,151149,5286],{"class":2040},[28,151151,151152],{"class":34},"(a, b):\n",[28,151154,151155,151157,151159,151161],{"class":30,"line":125},[28,151156,14829],{"class":38},[28,151158,10946],{"class":34},[28,151160,693],{"class":38},[28,151162,151163],{"class":34}," b\n",[28,151165,151166],{"class":30,"line":131},[28,151167,2477],{"emptyLinePlaceholder":144},[28,151169,151170],{"class":30,"line":1291},[28,151171,2477],{"emptyLinePlaceholder":144},[28,151173,151174,151176,151179,151181,151183,151185],{"class":30,"line":1297},[28,151175,30491],{"class":45},[28,151177,151178],{"class":34},"(MathUtils.add(",[28,151180,46],{"class":45},[28,151182,12512],{"class":34},[28,151184,52],{"class":45},[28,151186,30573],{"class":34},[14,151188,151189],{},"静态方法本质上是放在类命名空间里的普通函数。",[159,151191,151193],{"id":151192},"_1114-dataclass","11.14 dataclass",[14,151195,151196,151199],{},[25,151197,151198],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[18,151201,151203],{"className":20,"code":151202,"language":22,"meta":23,"style":23},"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",[25,151204,151205,151217,151221,151225,151230,151238,151246,151254,151262,151266,151270,151290],{"__ignoreMap":23},[28,151206,151207,151209,151212,151214],{"class":30,"line":31},[28,151208,30813],{"class":38},[28,151210,151211],{"class":34}," dataclasses ",[28,151213,30468],{"class":38},[28,151215,151216],{"class":34}," dataclass\n",[28,151218,151219],{"class":30,"line":94},[28,151220,2477],{"emptyLinePlaceholder":144},[28,151222,151223],{"class":30,"line":109},[28,151224,2477],{"emptyLinePlaceholder":144},[28,151226,151227],{"class":30,"line":125},[28,151228,151229],{"class":2040},"@dataclass\n",[28,151231,151232,151234,151236],{"class":30,"line":131},[28,151233,14771],{"class":38},[28,151235,7975],{"class":2040},[28,151237,3816],{"class":34},[28,151239,151240,151243],{"class":30,"line":1291},[28,151241,151242],{"class":34},"    name: ",[28,151244,151245],{"class":45},"str\n",[28,151247,151248,151251],{"class":30,"line":1297},[28,151249,151250],{"class":34},"    age: ",[28,151252,151253],{"class":45},"int\n",[28,151255,151256,151259],{"class":30,"line":1388},[28,151257,151258],{"class":34},"    score: ",[28,151260,151261],{"class":45},"float\n",[28,151263,151264],{"class":30,"line":1394},[28,151265,2477],{"emptyLinePlaceholder":144},[28,151267,151268],{"class":30,"line":1406},[28,151269,2477],{"emptyLinePlaceholder":144},[28,151271,151272,151274,151276,151278,151280,151282,151284,151286,151288],{"class":30,"line":1689},[28,151273,149540],{"class":34},[28,151275,39],{"class":38},[28,151277,149944],{"class":34},[28,151279,149947],{"class":320},[28,151281,12512],{"class":34},[28,151283,860],{"class":45},[28,151285,12512],{"class":34},[28,151287,1193],{"class":45},[28,151289,227],{"class":34},[28,151291,151292,151294],{"class":30,"line":1694},[28,151293,30491],{"class":45},[28,151295,150101],{"class":34},[14,151297,151298,151299,428,151301,151304],{},"它会自动生成 ",[25,151300,30905],{},[25,151302,151303],{},"__repr__"," 等方法。适合数据模型类。",[159,151306,151308],{"id":151307},"_1115-小案例学生类","11.15 小案例：学生类",[18,151310,151312],{"className":20,"code":151311,"language":22,"meta":23,"style":23},"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",[25,151313,151314,151322,151331,151343,151353,151363,151373,151377,151386,151399,151403,151412,151418,151430,151442,151454,151466,151470,151474,151480,151490,151499,151509,151517,151525,151534,151538,151542,151550,151586,151590,151594,151619,151626],{"__ignoreMap":23},[28,151315,151316,151318,151320],{"class":30,"line":31},[28,151317,14771],{"class":38},[28,151319,7975],{"class":2040},[28,151321,3816],{"class":34},[28,151323,151324,151326,151328],{"class":30,"line":94},[28,151325,30877],{"class":38},[28,151327,30880],{"class":45},[28,151329,151330],{"class":34},"(self, student_id, name, age, score):\n",[28,151332,151333,151335,151338,151340],{"class":30,"line":109},[28,151334,30921],{"class":45},[28,151336,151337],{"class":34},".student_id ",[28,151339,39],{"class":38},[28,151341,151342],{"class":34}," student_id\n",[28,151344,151345,151347,151349,151351],{"class":30,"line":125},[28,151346,30921],{"class":45},[28,151348,149849],{"class":34},[28,151350,39],{"class":38},[28,151352,149854],{"class":34},[28,151354,151355,151357,151359,151361],{"class":30,"line":131},[28,151356,30921],{"class":45},[28,151358,149861],{"class":34},[28,151360,39],{"class":38},[28,151362,149866],{"class":34},[28,151364,151365,151367,151369,151371],{"class":30,"line":1291},[28,151366,30921],{"class":45},[28,151368,149873],{"class":34},[28,151370,39],{"class":38},[28,151372,1656],{"class":34},[28,151374,151375],{"class":30,"line":1297},[28,151376,2477],{"emptyLinePlaceholder":144},[28,151378,151379,151381,151384],{"class":30,"line":1388},[28,151380,30877],{"class":38},[28,151382,151383],{"class":2040}," is_passed",[28,151385,30883],{"class":34},[28,151387,151388,151390,151392,151394,151396],{"class":30,"line":1394},[28,151389,14829],{"class":38},[28,151391,38949],{"class":45},[28,151393,149873],{"class":34},[28,151395,1787],{"class":38},[28,151397,151398],{"class":45}," 60\n",[28,151400,151401],{"class":30,"line":1406},[28,151402,2477],{"emptyLinePlaceholder":144},[28,151404,151405,151407,151410],{"class":30,"line":1689},[28,151406,30877],{"class":38},[28,151408,151409],{"class":2040}," to_dict",[28,151411,30883],{"class":34},[28,151413,151414,151416],{"class":30,"line":1694},[28,151415,14829],{"class":38},[28,151417,15649],{"class":34},[28,151419,151420,151423,151425,151427],{"class":30,"line":1700},[28,151421,151422],{"class":320},"            \"student_id\"",[28,151424,51512],{"class":34},[28,151426,30899],{"class":45},[28,151428,151429],{"class":34},".student_id,\n",[28,151431,151432,151435,151437,151439],{"class":30,"line":1705},[28,151433,151434],{"class":320},"            \"name\"",[28,151436,51512],{"class":34},[28,151438,30899],{"class":45},[28,151440,151441],{"class":34},".name,\n",[28,151443,151444,151447,151449,151451],{"class":30,"line":1719},[28,151445,151446],{"class":320},"            \"age\"",[28,151448,51512],{"class":34},[28,151450,30899],{"class":45},[28,151452,151453],{"class":34},".age,\n",[28,151455,151456,151459,151461,151463],{"class":30,"line":1724},[28,151457,151458],{"class":320},"            \"score\"",[28,151460,51512],{"class":34},[28,151462,30899],{"class":45},[28,151464,151465],{"class":34},".score,\n",[28,151467,151468],{"class":30,"line":1730},[28,151469,2606],{"class":34},[28,151471,151472],{"class":30,"line":1751},[28,151473,2477],{"emptyLinePlaceholder":144},[28,151475,151476,151478],{"class":30,"line":1756},[28,151477,151073],{"class":2040},[28,151479,151076],{"class":45},[28,151481,151482,151484,151487],{"class":30,"line":1770},[28,151483,30877],{"class":38},[28,151485,151486],{"class":2040}," from_dict",[28,151488,151489],{"class":34},"(cls, data):\n",[28,151491,151492,151494,151496],{"class":30,"line":1775},[28,151493,14829],{"class":38},[28,151495,151093],{"class":45},[28,151497,151498],{"class":34},"(\n",[28,151500,151501,151504,151507],{"class":30,"line":1804},[28,151502,151503],{"class":34},"            data[",[28,151505,151506],{"class":320},"\"student_id\"",[28,151508,87911],{"class":34},[28,151510,151511,151513,151515],{"class":30,"line":1809},[28,151512,151503],{"class":34},[28,151514,62754],{"class":320},[28,151516,87911],{"class":34},[28,151518,151519,151521,151523],{"class":30,"line":1826},[28,151520,151503],{"class":34},[28,151522,69199],{"class":320},[28,151524,87911],{"class":34},[28,151526,151527,151529,151532],{"class":30,"line":1831},[28,151528,151503],{"class":34},[28,151530,151531],{"class":320},"\"score\"",[28,151533,87911],{"class":34},[28,151535,151536],{"class":30,"line":1836},[28,151537,38202],{"class":34},[28,151539,151540],{"class":30,"line":1841},[28,151541,2477],{"emptyLinePlaceholder":144},[28,151543,151544,151546,151548],{"class":30,"line":1855},[28,151545,30877],{"class":38},[28,151547,150040],{"class":45},[28,151549,30883],{"class":34},[28,151551,151552,151554,151556,151558,151560,151563,151565,151568,151570,151572,151574,151576,151578,151580,151582,151584],{"class":30,"line":1860},[28,151553,14829],{"class":38},[28,151555,150049],{"class":38},[28,151557,465],{"class":320},[28,151559,149511],{"class":45},[28,151561,151562],{"class":34},".student_id",[28,151564,1150],{"class":45},[28,151566,151567],{"class":45}," {self",[28,151569,80376],{"class":34},[28,151571,1150],{"class":45},[28,151573,151567],{"class":45},[28,151575,80388],{"class":34},[28,151577,1150],{"class":45},[28,151579,151567],{"class":45},[28,151581,149921],{"class":34},[28,151583,1150],{"class":45},[28,151585,25211],{"class":320},[28,151587,151588],{"class":30,"line":2654},[28,151589,2477],{"emptyLinePlaceholder":144},[28,151591,151592],{"class":30,"line":2668},[28,151593,2477],{"emptyLinePlaceholder":144},[28,151595,151596,151598,151600,151602,151605,151607,151609,151611,151613,151615,151617],{"class":30,"line":2676},[28,151597,149540],{"class":34},[28,151599,39],{"class":38},[28,151601,149944],{"class":34},[28,151603,151604],{"class":320},"\"001\"",[28,151606,12512],{"class":34},[28,151608,149947],{"class":320},[28,151610,12512],{"class":34},[28,151612,860],{"class":45},[28,151614,12512],{"class":34},[28,151616,1193],{"class":45},[28,151618,227],{"class":34},[28,151620,151621,151623],{"class":30,"line":2681},[28,151622,30491],{"class":45},[28,151624,151625],{"class":34},"(student.is_passed())\n",[28,151627,151628,151630],{"class":30,"line":2687},[28,151629,30491],{"class":45},[28,151631,151632],{"class":34},"(student.to_dict())\n",[14,151634,151635,101077,151638,151641],{},[25,151636,151637],{},"to_dict()",[25,151639,151640],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[159,151643,151645],{"id":151644},"_1116-易错点","11.16 易错点",[171,151647,151648,151654,151660,151665,151668,151671],{},[174,151649,151650,151651,28463],{},"类名推荐使用大驼峰，如 ",[25,151652,151653],{},"StudentManager",[174,151655,151656,151657,151659],{},"方法第一个参数必须写 ",[25,151658,30899],{},"，调用时不用传。",[174,151661,151662,151664],{},[25,151663,30905],{}," 不是普通方法，它在创建对象时自动执行。",[174,151666,151667],{},"私有属性不是绝对安全，只是约定和名称改写。",[174,151669,151670],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[174,151672,151673],{},"类中方法太多时，说明职责可能过重。",[159,151675,151677],{"id":151676},"_1117-本章练习","11.17 本章练习",[171,151679,151680,151686,151692,151697,151710],{},[174,151681,151682,151683,151685],{},"定义 ",[25,151684,149627],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[174,151687,151682,151688,151691],{},[25,151689,151690],{},"Account"," 类，实现存款、取款、查询余额。",[174,151693,151682,151694,151696],{},[25,151695,17303],{}," 类，计算圆的周长和面积。",[174,151698,151682,151699,428,151702,151705,151706,151709],{},[25,151700,151701],{},"Dog",[25,151703,151704],{},"Cat"," 类，并用同一个函数调用它们的 ",[25,151707,151708],{},"speak()"," 方法。",[174,151711,104425,151712,151714,151715,28463],{},[25,151713,151198],{}," 定义一个商品类 ",[25,151716,151717],{},"Product",[136,151719,151720],{},"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":23,"searchDepth":94,"depth":94,"links":151722},[151723,151724,151725,151726,151727,151728,151730,151731,151732,151733,151734,151735,151736,151740,151741,151742,151743],{"id":149391,"depth":94,"text":149392},{"id":149574,"depth":94,"text":149575},{"id":149638,"depth":94,"text":149639},{"id":149715,"depth":94,"text":149716},{"id":149814,"depth":94,"text":149815},{"id":149978,"depth":94,"text":151729},"11.6 str",{"id":150104,"depth":94,"text":150105},{"id":150370,"depth":94,"text":150371},{"id":150484,"depth":94,"text":150485},{"id":150639,"depth":94,"text":150640},{"id":150763,"depth":94,"text":150764},{"id":150879,"depth":94,"text":150880},{"id":151028,"depth":94,"text":151029,"children":151737},[151738,151739],{"id":151032,"depth":109,"text":151033},{"id":151114,"depth":109,"text":151115},{"id":151192,"depth":94,"text":151193},{"id":151307,"depth":94,"text":151308},{"id":151644,"depth":94,"text":151645},{"id":151676,"depth":94,"text":151677},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149383,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151750,"title":151751,"body":151752,"description":141,"extension":142,"meta":155065,"navigation":144,"path":155066,"seo":155067,"stem":155068,"__hash__":155069},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151753,"toc":155041},[151754,151757,151761,151764,151767,151796,151799,151807,151811,151815,151818,151841,151844,151850,151854,153300,153303,153324,153328,153331,153343,153346,153530,153533,153659,153662,153666,153670,153806,153810,153896,153900,153982,153986,154023,154027,154216,154220,154223,154453,154457,154460,154641,154644,154648,154651,154657,154660,154686,154690,154693,154707,154710,154735,154738,154752,154755,154772,154775,154792,154795,154812,154816,154842,154846,154869,154873,154876,154878,154884,154886,154907,154910,154916,154922,154926,154929,155005,155008,155012,155038],[10,151755,151751],{"id":151756},"_12-综合案例与复习路线",[159,151758,151760],{"id":151759},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151762,151763],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151765,151766],{},"一个合格的入门综合项目最好覆盖：",[171,151768,151769,151772,151775,151778,151781,151784,151787,151790,151793],{},[174,151770,151771],{},"输入输出。",[174,151773,151774],{},"判断和循环。",[174,151776,151777],{},"函数拆分。",[174,151779,151780],{},"列表、字典等容器。",[174,151782,151783],{},"文件持久化。",[174,151785,151786],{},"异常处理。",[174,151788,151789],{},"模块拆分。",[174,151791,151792],{},"可选：面向对象。",[174,151794,151795],{},"可选：数据可视化。",[14,151797,151798],{},"本章整理两个方向：",[171,151800,151801,151804],{},[174,151802,151803],{},"学生管理系统。",[174,151805,151806],{},"销售数据统计和可视化。",[159,151808,151810],{"id":151809},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[188,151812,151814],{"id":151813},"_1221-需求","12.2.1 需求",[14,151816,151817],{},"实现一个命令行学生管理系统：",[171,151819,151820,151823,151826,151829,151832,151835,151838],{},[174,151821,151822],{},"添加学生。",[174,151824,151825],{},"删除学生。",[174,151827,151828],{},"修改学生。",[174,151830,151831],{},"查询学生。",[174,151833,151834],{},"显示所有学生。",[174,151836,151837],{},"保存到 JSON 文件。",[174,151839,151840],{},"程序启动时自动读取 JSON 文件。",[14,151842,151843],{},"学生字段：",[18,151845,151848],{"className":151846,"code":151847,"language":5264,"meta":23},[5262],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[25,151849,151847],{"__ignoreMap":23},[159,151851,151853],{"id":151852},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[18,151855,151857],{"className":20,"code":151856,"language":22,"meta":23,"style":23},"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",[25,151858,151859,151865,151875,151879,151893,151897,151901,151910,151922,151928,151932,151938,151969,151979,151986,151997,152003,152007,152011,152021,152052,152078,152082,152086,152095,152106,152117,152128,152139,152150,152161,152172,152176,152180,152190,152202,152218,152225,152232,152236,152240,152250,152258,152265,152278,152288,152299,152303,152307,152316,152324,152330,152342,152350,152361,152365,152369,152378,152394,152398,152405,152416,152421,152425,152441,152456,152471,152475,152480,152488,152496,152504,152512,152516,152521,152532,152536,152540,152549,152564,152574,152578,152590,152601,152605,152609,152614,152618,152629,152633,152637,152646,152661,152669,152673,152685,152695,152699,152703,152718,152731,152744,152748,152761,152773,152785,152789,152793,152804,152808,152812,152821,152836,152844,152848,152860,152870,152874,152878,152883,152887,152891,152901,152907,152929,152948,152967,152986,152991,152995,152999,153008,153016,153027,153031,153035,153061,153071,153076,153080,153084,153092,153102,153106,153114,153119,153135,153139,153153,153158,153172,153177,153190,153195,153208,153213,153226,153231,153244,153255,153259,153265,153276,153280,153284,153296],{"__ignoreMap":23},[28,151860,151861,151863],{"class":30,"line":31},[28,151862,30468],{"class":38},[28,151864,147150],{"class":34},[28,151866,151867,151869,151871,151873],{"class":30,"line":94},[28,151868,30813],{"class":38},[28,151870,108370],{"class":34},[28,151872,30468],{"class":38},[28,151874,108375],{"class":34},[28,151876,151877],{"class":30,"line":109},[28,151878,2477],{"emptyLinePlaceholder":144},[28,151880,151881,151884,151886,151888,151891],{"class":30,"line":125},[28,151882,151883],{"class":45},"DATA_FILE",[28,151885,13641],{"class":38},[28,151887,108604],{"class":34},[28,151889,151890],{"class":320},"\"students.json\"",[28,151892,227],{"class":34},[28,151894,151895],{"class":30,"line":131},[28,151896,2477],{"emptyLinePlaceholder":144},[28,151898,151899],{"class":30,"line":1291},[28,151900,2477],{"emptyLinePlaceholder":144},[28,151902,151903,151905,151908],{"class":30,"line":1297},[28,151904,32023],{"class":38},[28,151906,151907],{"class":2040}," load_students",[28,151909,32029],{"class":34},[28,151911,151912,151914,151916,151919],{"class":30,"line":1388},[28,151913,3178],{"class":38},[28,151915,39006],{"class":38},[28,151917,151918],{"class":45}," DATA_FILE",[28,151920,151921],{"class":34},".exists():\n",[28,151923,151924,151926],{"class":30,"line":1394},[28,151925,14829],{"class":38},[28,151927,51913],{"class":34},[28,151929,151930],{"class":30,"line":1406},[28,151931,2477],{"emptyLinePlaceholder":144},[28,151933,151934,151936],{"class":30,"line":1689},[28,151935,125843],{"class":38},[28,151937,3816],{"class":34},[28,151939,151940,151943,151945,151947,151949,151951,151953,151955,151957,151959,151961,151963,151965,151967],{"class":30,"line":1694},[28,151941,151942],{"class":38},"        with",[28,151944,146850],{"class":45},[28,151946,221],{"class":34},[28,151948,151883],{"class":45},[28,151950,12512],{"class":34},[28,151952,146860],{"class":320},[28,151954,12512],{"class":34},[28,151956,146865],{"class":5293},[28,151958,39],{"class":38},[28,151960,146870],{"class":320},[28,151962,13791],{"class":34},[28,151964,31459],{"class":38},[28,151966,148212],{"class":5293},[28,151968,3816],{"class":34},[28,151970,151971,151973,151975,151977],{"class":30,"line":1700},[28,151972,15809],{"class":38},[28,151974,148223],{"class":34},[28,151976,45430],{"class":5293},[28,151978,227],{"class":34},[28,151980,151981,151983],{"class":30,"line":1705},[28,151982,125871],{"class":38},[28,151984,151985],{"class":34}," json.JSONDecodeError:\n",[28,151987,151988,151990,151992,151995],{"class":30,"line":1719},[28,151989,32527],{"class":45},[28,151991,221],{"class":34},[28,151993,151994],{"class":320},"\"数据文件格式错误，已使用空数据启动\"",[28,151996,227],{"class":34},[28,151998,151999,152001],{"class":30,"line":1724},[28,152000,14829],{"class":38},[28,152002,51913],{"class":34},[28,152004,152005],{"class":30,"line":1730},[28,152006,2477],{"emptyLinePlaceholder":144},[28,152008,152009],{"class":30,"line":1751},[28,152010,2477],{"emptyLinePlaceholder":144},[28,152012,152013,152015,152018],{"class":30,"line":1756},[28,152014,32023],{"class":38},[28,152016,152017],{"class":2040}," save_students",[28,152019,152020],{"class":34},"(students):\n",[28,152022,152023,152025,152027,152029,152031,152033,152036,152038,152040,152042,152044,152046,152048,152050],{"class":30,"line":1770},[28,152024,34254],{"class":38},[28,152026,146850],{"class":45},[28,152028,221],{"class":34},[28,152030,151883],{"class":45},[28,152032,12512],{"class":34},[28,152034,152035],{"class":320},"\"w\"",[28,152037,12512],{"class":34},[28,152039,146865],{"class":5293},[28,152041,39],{"class":38},[28,152043,146870],{"class":320},[28,152045,13791],{"class":34},[28,152047,31459],{"class":38},[28,152049,148212],{"class":5293},[28,152051,3816],{"class":34},[28,152053,152054,152057,152059,152061,152063,152065,152067,152069,152072,152074,152076],{"class":30,"line":1775},[28,152055,152056],{"class":34},"        json.dump(students, ",[28,152058,45430],{"class":5293},[28,152060,12512],{"class":34},[28,152062,147196],{"class":5293},[28,152064,39],{"class":38},[28,152066,34063],{"class":45},[28,152068,12512],{"class":34},[28,152070,152071],{"class":5293},"indent",[28,152073,39],{"class":38},[28,152075,52],{"class":45},[28,152077,227],{"class":34},[28,152079,152080],{"class":30,"line":1804},[28,152081,2477],{"emptyLinePlaceholder":144},[28,152083,152084],{"class":30,"line":1809},[28,152085,2477],{"emptyLinePlaceholder":144},[28,152087,152088,152090,152093],{"class":30,"line":1826},[28,152089,32023],{"class":38},[28,152091,152092],{"class":2040}," show_menu",[28,152094,32029],{"class":34},[28,152096,152097,152099,152101,152104],{"class":30,"line":1831},[28,152098,31375],{"class":45},[28,152100,221],{"class":34},[28,152102,152103],{"class":320},"\"====== 学生管理系统 ======\"",[28,152105,227],{"class":34},[28,152107,152108,152110,152112,152115],{"class":30,"line":1836},[28,152109,31375],{"class":45},[28,152111,221],{"class":34},[28,152113,152114],{"class":320},"\"1. 添加学生\"",[28,152116,227],{"class":34},[28,152118,152119,152121,152123,152126],{"class":30,"line":1841},[28,152120,31375],{"class":45},[28,152122,221],{"class":34},[28,152124,152125],{"class":320},"\"2. 删除学生\"",[28,152127,227],{"class":34},[28,152129,152130,152132,152134,152137],{"class":30,"line":1855},[28,152131,31375],{"class":45},[28,152133,221],{"class":34},[28,152135,152136],{"class":320},"\"3. 修改学生\"",[28,152138,227],{"class":34},[28,152140,152141,152143,152145,152148],{"class":30,"line":1860},[28,152142,31375],{"class":45},[28,152144,221],{"class":34},[28,152146,152147],{"class":320},"\"4. 查询学生\"",[28,152149,227],{"class":34},[28,152151,152152,152154,152156,152159],{"class":30,"line":2654},[28,152153,31375],{"class":45},[28,152155,221],{"class":34},[28,152157,152158],{"class":320},"\"5. 显示所有学生\"",[28,152160,227],{"class":34},[28,152162,152163,152165,152167,152170],{"class":30,"line":2668},[28,152164,31375],{"class":45},[28,152166,221],{"class":34},[28,152168,152169],{"class":320},"\"0. 退出系统\"",[28,152171,227],{"class":34},[28,152173,152174],{"class":30,"line":2676},[28,152175,2477],{"emptyLinePlaceholder":144},[28,152177,152178],{"class":30,"line":2681},[28,152179,2477],{"emptyLinePlaceholder":144},[28,152181,152182,152184,152187],{"class":30,"line":2687},[28,152183,32023],{"class":38},[28,152185,152186],{"class":2040}," find_student",[28,152188,152189],{"class":34},"(students, student_id):\n",[28,152191,152192,152194,152197,152199],{"class":30,"line":2693},[28,152193,3278],{"class":38},[28,152195,152196],{"class":34}," student ",[28,152198,26121],{"class":38},[28,152200,152201],{"class":34}," students:\n",[28,152203,152204,152206,152209,152211,152213,152215],{"class":30,"line":2698},[28,152205,2574],{"class":38},[28,152207,152208],{"class":34}," student[",[28,152210,151506],{"class":320},[28,152212,4520],{"class":34},[28,152214,3026],{"class":38},[28,152216,152217],{"class":34}," student_id:\n",[28,152219,152220,152222],{"class":30,"line":8025},[28,152221,15809],{"class":38},[28,152223,152224],{"class":34}," student\n",[28,152226,152227,152229],{"class":30,"line":8049},[28,152228,4167],{"class":38},[28,152230,152231],{"class":45}," None\n",[28,152233,152234],{"class":30,"line":8054},[28,152235,2477],{"emptyLinePlaceholder":144},[28,152237,152238],{"class":30,"line":8060},[28,152239,2477],{"emptyLinePlaceholder":144},[28,152241,152242,152244,152247],{"class":30,"line":8087},[28,152243,32023],{"class":38},[28,152245,152246],{"class":2040}," input_int",[28,152248,152249],{"class":34},"(prompt):\n",[28,152251,152252,152254,152256],{"class":30,"line":8092},[28,152253,2328],{"class":38},[28,152255,95351],{"class":45},[28,152257,3816],{"class":34},[28,152259,152260,152263],{"class":30,"line":8098},[28,152261,152262],{"class":38},"        try",[28,152264,3816],{"class":34},[28,152266,152267,152269,152271,152273,152275],{"class":30,"line":8110},[28,152268,15809],{"class":38},[28,152270,2459],{"class":45},[28,152272,221],{"class":34},[28,152274,53896],{"class":45},[28,152276,152277],{"class":34},"(prompt))\n",[28,152279,152280,152283,152286],{"class":30,"line":8122},[28,152281,152282],{"class":38},"        except",[28,152284,152285],{"class":45}," ValueError",[28,152287,3816],{"class":34},[28,152289,152290,152292,152294,152297],{"class":30,"line":8134},[28,152291,34726],{"class":45},[28,152293,221],{"class":34},[28,152295,152296],{"class":320},"\"请输入整数\"",[28,152298,227],{"class":34},[28,152300,152301],{"class":30,"line":9793},[28,152302,2477],{"emptyLinePlaceholder":144},[28,152304,152305],{"class":30,"line":9818},[28,152306,2477],{"emptyLinePlaceholder":144},[28,152308,152309,152311,152314],{"class":30,"line":9841},[28,152310,32023],{"class":38},[28,152312,152313],{"class":2040}," input_float",[28,152315,152249],{"class":34},[28,152317,152318,152320,152322],{"class":30,"line":9865},[28,152319,2328],{"class":38},[28,152321,95351],{"class":45},[28,152323,3816],{"class":34},[28,152325,152326,152328],{"class":30,"line":9870},[28,152327,152262],{"class":38},[28,152329,3816],{"class":34},[28,152331,152332,152334,152336,152338,152340],{"class":30,"line":9875},[28,152333,15809],{"class":38},[28,152335,109856],{"class":45},[28,152337,221],{"class":34},[28,152339,53896],{"class":45},[28,152341,152277],{"class":34},[28,152343,152344,152346,152348],{"class":30,"line":9880},[28,152345,152282],{"class":38},[28,152347,152285],{"class":45},[28,152349,3816],{"class":34},[28,152351,152352,152354,152356,152359],{"class":30,"line":9889},[28,152353,34726],{"class":45},[28,152355,221],{"class":34},[28,152357,152358],{"class":320},"\"请输入数字\"",[28,152360,227],{"class":34},[28,152362,152363],{"class":30,"line":9894},[28,152364,2477],{"emptyLinePlaceholder":144},[28,152366,152367],{"class":30,"line":9900},[28,152368,2477],{"emptyLinePlaceholder":144},[28,152370,152371,152373,152376],{"class":30,"line":9921},[28,152372,32023],{"class":38},[28,152374,152375],{"class":2040}," add_student",[28,152377,152020],{"class":34},[28,152379,152380,152383,152385,152387,152389,152392],{"class":30,"line":9927},[28,152381,152382],{"class":34},"    student_id ",[28,152384,39],{"class":38},[28,152386,60680],{"class":45},[28,152388,221],{"class":34},[28,152390,152391],{"class":320},"\"请输入学号:\"",[28,152393,227],{"class":34},[28,152395,152396],{"class":30,"line":9941},[28,152397,2477],{"emptyLinePlaceholder":144},[28,152399,152400,152402],{"class":30,"line":9947},[28,152401,3178],{"class":38},[28,152403,152404],{"class":34}," find_student(students, student_id):\n",[28,152406,152407,152409,152411,152414],{"class":30,"line":9974},[28,152408,32527],{"class":45},[28,152410,221],{"class":34},[28,152412,152413],{"class":320},"\"学号已存在\"",[28,152415,227],{"class":34},[28,152417,152418],{"class":30,"line":9983},[28,152419,152420],{"class":38},"        return\n",[28,152422,152423],{"class":30,"line":9989},[28,152424,2477],{"emptyLinePlaceholder":144},[28,152426,152427,152430,152432,152434,152436,152439],{"class":30,"line":9997},[28,152428,152429],{"class":34},"    name ",[28,152431,39],{"class":38},[28,152433,60680],{"class":45},[28,152435,221],{"class":34},[28,152437,152438],{"class":320},"\"请输入姓名:\"",[28,152440,227],{"class":34},[28,152442,152443,152446,152448,152451,152454],{"class":30,"line":10002},[28,152444,152445],{"class":34},"    age ",[28,152447,39],{"class":38},[28,152449,152450],{"class":34}," input_int(",[28,152452,152453],{"class":320},"\"请输入年龄:\"",[28,152455,227],{"class":34},[28,152457,152458,152461,152463,152466,152469],{"class":30,"line":16681},[28,152459,152460],{"class":34},"    score ",[28,152462,39],{"class":38},[28,152464,152465],{"class":34}," input_float(",[28,152467,152468],{"class":320},"\"请输入成绩:\"",[28,152470,227],{"class":34},[28,152472,152473],{"class":30,"line":16687},[28,152474,2477],{"emptyLinePlaceholder":144},[28,152476,152477],{"class":30,"line":16710},[28,152478,152479],{"class":34},"    students.append({\n",[28,152481,152482,152485],{"class":30,"line":16716},[28,152483,152484],{"class":320},"        \"student_id\"",[28,152486,152487],{"class":34},": student_id,\n",[28,152489,152490,152493],{"class":30,"line":16739},[28,152491,152492],{"class":320},"        \"name\"",[28,152494,152495],{"class":34},": name,\n",[28,152497,152498,152501],{"class":30,"line":16753},[28,152499,152500],{"class":320},"        \"age\"",[28,152502,152503],{"class":34},": age,\n",[28,152505,152506,152509],{"class":30,"line":16773},[28,152507,152508],{"class":320},"        \"score\"",[28,152510,152511],{"class":34},": score,\n",[28,152513,152514],{"class":30,"line":16779},[28,152515,33537],{"class":34},[28,152517,152518],{"class":30,"line":16790},[28,152519,152520],{"class":34},"    save_students(students)\n",[28,152522,152523,152525,152527,152530],{"class":30,"line":16813},[28,152524,31375],{"class":45},[28,152526,221],{"class":34},[28,152528,152529],{"class":320},"\"添加成功\"",[28,152531,227],{"class":34},[28,152533,152534],{"class":30,"line":16835},[28,152535,2477],{"emptyLinePlaceholder":144},[28,152537,152538],{"class":30,"line":16840},[28,152539,2477],{"emptyLinePlaceholder":144},[28,152541,152542,152544,152547],{"class":30,"line":16846},[28,152543,32023],{"class":38},[28,152545,152546],{"class":2040}," delete_student",[28,152548,152020],{"class":34},[28,152550,152551,152553,152555,152557,152559,152562],{"class":30,"line":16860},[28,152552,152382],{"class":34},[28,152554,39],{"class":38},[28,152556,60680],{"class":45},[28,152558,221],{"class":34},[28,152560,152561],{"class":320},"\"请输入要删除的学号:\"",[28,152563,227],{"class":34},[28,152565,152566,152569,152571],{"class":30,"line":16873},[28,152567,152568],{"class":34},"    student ",[28,152570,39],{"class":38},[28,152572,152573],{"class":34}," find_student(students, student_id)\n",[28,152575,152576],{"class":30,"line":16878},[28,152577,2477],{"emptyLinePlaceholder":144},[28,152579,152580,152582,152584,152586,152588],{"class":30,"line":16892},[28,152581,3178],{"class":38},[28,152583,152196],{"class":34},[28,152585,39003],{"class":38},[28,152587,39009],{"class":45},[28,152589,3816],{"class":34},[28,152591,152592,152594,152596,152599],{"class":30,"line":16897},[28,152593,32527],{"class":45},[28,152595,221],{"class":34},[28,152597,152598],{"class":320},"\"学生不存在\"",[28,152600,227],{"class":34},[28,152602,152603],{"class":30,"line":16903},[28,152604,152420],{"class":38},[28,152606,152607],{"class":30,"line":16908},[28,152608,2477],{"emptyLinePlaceholder":144},[28,152610,152611],{"class":30,"line":16922},[28,152612,152613],{"class":34},"    students.remove(student)\n",[28,152615,152616],{"class":30,"line":16927},[28,152617,152520],{"class":34},[28,152619,152620,152622,152624,152627],{"class":30,"line":16932},[28,152621,31375],{"class":45},[28,152623,221],{"class":34},[28,152625,152626],{"class":320},"\"删除成功\"",[28,152628,227],{"class":34},[28,152630,152631],{"class":30,"line":16946},[28,152632,2477],{"emptyLinePlaceholder":144},[28,152634,152635],{"class":30,"line":16958},[28,152636,2477],{"emptyLinePlaceholder":144},[28,152638,152639,152641,152644],{"class":30,"line":16963},[28,152640,32023],{"class":38},[28,152642,152643],{"class":2040}," update_student",[28,152645,152020],{"class":34},[28,152647,152648,152650,152652,152654,152656,152659],{"class":30,"line":16976},[28,152649,152382],{"class":34},[28,152651,39],{"class":38},[28,152653,60680],{"class":45},[28,152655,221],{"class":34},[28,152657,152658],{"class":320},"\"请输入要修改的学号:\"",[28,152660,227],{"class":34},[28,152662,152663,152665,152667],{"class":30,"line":16981},[28,152664,152568],{"class":34},[28,152666,39],{"class":38},[28,152668,152573],{"class":34},[28,152670,152671],{"class":30,"line":16986},[28,152672,2477],{"emptyLinePlaceholder":144},[28,152674,152675,152677,152679,152681,152683],{"class":30,"line":16991},[28,152676,3178],{"class":38},[28,152678,152196],{"class":34},[28,152680,39003],{"class":38},[28,152682,39009],{"class":45},[28,152684,3816],{"class":34},[28,152686,152687,152689,152691,152693],{"class":30,"line":17004},[28,152688,32527],{"class":45},[28,152690,221],{"class":34},[28,152692,152598],{"class":320},[28,152694,227],{"class":34},[28,152696,152697],{"class":30,"line":17009},[28,152698,152420],{"class":38},[28,152700,152701],{"class":30,"line":32709},[28,152702,2477],{"emptyLinePlaceholder":144},[28,152704,152705,152707,152709,152711,152713,152716],{"class":30,"line":32715},[28,152706,152429],{"class":34},[28,152708,39],{"class":38},[28,152710,60680],{"class":45},[28,152712,221],{"class":34},[28,152714,152715],{"class":320},"\"请输入新姓名:\"",[28,152717,227],{"class":34},[28,152719,152720,152722,152724,152726,152729],{"class":30,"line":32721},[28,152721,152445],{"class":34},[28,152723,39],{"class":38},[28,152725,152450],{"class":34},[28,152727,152728],{"class":320},"\"请输入新年龄:\"",[28,152730,227],{"class":34},[28,152732,152733,152735,152737,152739,152742],{"class":30,"line":32727},[28,152734,152460],{"class":34},[28,152736,39],{"class":38},[28,152738,152465],{"class":34},[28,152740,152741],{"class":320},"\"请输入新成绩:\"",[28,152743,227],{"class":34},[28,152745,152746],{"class":30,"line":32733},[28,152747,2477],{"emptyLinePlaceholder":144},[28,152749,152750,152753,152755,152757,152759],{"class":30,"line":32744},[28,152751,152752],{"class":34},"    student[",[28,152754,62754],{"class":320},[28,152756,4520],{"class":34},[28,152758,39],{"class":38},[28,152760,149854],{"class":34},[28,152762,152763,152765,152767,152769,152771],{"class":30,"line":32750},[28,152764,152752],{"class":34},[28,152766,69199],{"class":320},[28,152768,4520],{"class":34},[28,152770,39],{"class":38},[28,152772,149866],{"class":34},[28,152774,152775,152777,152779,152781,152783],{"class":30,"line":32770},[28,152776,152752],{"class":34},[28,152778,151531],{"class":320},[28,152780,4520],{"class":34},[28,152782,39],{"class":38},[28,152784,1656],{"class":34},[28,152786,152787],{"class":30,"line":32776},[28,152788,2477],{"emptyLinePlaceholder":144},[28,152790,152791],{"class":30,"line":32787},[28,152792,152520],{"class":34},[28,152794,152795,152797,152799,152802],{"class":30,"line":32793},[28,152796,31375],{"class":45},[28,152798,221],{"class":34},[28,152800,152801],{"class":320},"\"修改成功\"",[28,152803,227],{"class":34},[28,152805,152806],{"class":30,"line":32799},[28,152807,2477],{"emptyLinePlaceholder":144},[28,152809,152810],{"class":30,"line":32805},[28,152811,2477],{"emptyLinePlaceholder":144},[28,152813,152814,152816,152819],{"class":30,"line":32811},[28,152815,32023],{"class":38},[28,152817,152818],{"class":2040}," query_student",[28,152820,152020],{"class":34},[28,152822,152823,152825,152827,152829,152831,152834],{"class":30,"line":32817},[28,152824,152382],{"class":34},[28,152826,39],{"class":38},[28,152828,60680],{"class":45},[28,152830,221],{"class":34},[28,152832,152833],{"class":320},"\"请输入要查询的学号:\"",[28,152835,227],{"class":34},[28,152837,152838,152840,152842],{"class":30,"line":32823},[28,152839,152568],{"class":34},[28,152841,39],{"class":38},[28,152843,152573],{"class":34},[28,152845,152846],{"class":30,"line":32829},[28,152847,2477],{"emptyLinePlaceholder":144},[28,152849,152850,152852,152854,152856,152858],{"class":30,"line":32849},[28,152851,3178],{"class":38},[28,152853,152196],{"class":34},[28,152855,39003],{"class":38},[28,152857,39009],{"class":45},[28,152859,3816],{"class":34},[28,152861,152862,152864,152866,152868],{"class":30,"line":32855},[28,152863,32527],{"class":45},[28,152865,221],{"class":34},[28,152867,152598],{"class":320},[28,152869,227],{"class":34},[28,152871,152872],{"class":30,"line":32871},[28,152873,152420],{"class":38},[28,152875,152876],{"class":30,"line":32877},[28,152877,2477],{"emptyLinePlaceholder":144},[28,152879,152880],{"class":30,"line":32891},[28,152881,152882],{"class":34},"    print_student(student)\n",[28,152884,152885],{"class":30,"line":32897},[28,152886,2477],{"emptyLinePlaceholder":144},[28,152888,152889],{"class":30,"line":32912},[28,152890,2477],{"emptyLinePlaceholder":144},[28,152892,152893,152895,152898],{"class":30,"line":32918},[28,152894,32023],{"class":38},[28,152896,152897],{"class":2040}," print_student",[28,152899,152900],{"class":34},"(student):\n",[28,152902,152903,152905],{"class":30,"line":32927},[28,152904,31375],{"class":45},[28,152906,151498],{"class":34},[28,152908,152909,152912,152914,152916,152919,152922,152924,152927],{"class":30,"line":32933},[28,152910,152911],{"class":38},"        f",[28,152913,465],{"class":320},[28,152915,1102],{"class":45},[28,152917,152918],{"class":34},"student[",[28,152920,152921],{"class":320},"'student_id'",[28,152923,119],{"class":34},[28,152925,152926],{"class":45},"}\\t",[28,152928,25211],{"class":320},[28,152930,152931,152933,152935,152937,152939,152942,152944,152946],{"class":30,"line":32942},[28,152932,152911],{"class":38},[28,152934,465],{"class":320},[28,152936,1102],{"class":45},[28,152938,152918],{"class":34},[28,152940,152941],{"class":320},"'name'",[28,152943,119],{"class":34},[28,152945,152926],{"class":45},[28,152947,25211],{"class":320},[28,152949,152950,152952,152954,152956,152958,152961,152963,152965],{"class":30,"line":32948},[28,152951,152911],{"class":38},[28,152953,465],{"class":320},[28,152955,1102],{"class":45},[28,152957,152918],{"class":34},[28,152959,152960],{"class":320},"'age'",[28,152962,119],{"class":34},[28,152964,152926],{"class":45},[28,152966,25211],{"class":320},[28,152968,152969,152971,152973,152975,152977,152980,152982,152984],{"class":30,"line":32954},[28,152970,152911],{"class":38},[28,152972,465],{"class":320},[28,152974,1102],{"class":45},[28,152976,152918],{"class":34},[28,152978,152979],{"class":320},"'score'",[28,152981,119],{"class":34},[28,152983,1150],{"class":45},[28,152985,25211],{"class":320},[28,152987,152988],{"class":30,"line":32963},[28,152989,152990],{"class":34},"    )\n",[28,152992,152993],{"class":30,"line":32969},[28,152994,2477],{"emptyLinePlaceholder":144},[28,152996,152997],{"class":30,"line":32980},[28,152998,2477],{"emptyLinePlaceholder":144},[28,153000,153001,153003,153006],{"class":30,"line":32986},[28,153002,32023],{"class":38},[28,153004,153005],{"class":2040}," show_all_students",[28,153007,152020],{"class":34},[28,153009,153010,153012,153014],{"class":30,"line":33005},[28,153011,3178],{"class":38},[28,153013,39006],{"class":38},[28,153015,152201],{"class":34},[28,153017,153018,153020,153022,153025],{"class":30,"line":33011},[28,153019,32527],{"class":45},[28,153021,221],{"class":34},[28,153023,153024],{"class":320},"\"暂无学生\"",[28,153026,227],{"class":34},[28,153028,153029],{"class":30,"line":33022},[28,153030,152420],{"class":38},[28,153032,153033],{"class":30,"line":33028},[28,153034,2477],{"emptyLinePlaceholder":144},[28,153036,153037,153039,153041,153044,153046,153049,153051,153054,153056,153059],{"class":30,"line":33048},[28,153038,31375],{"class":45},[28,153040,221],{"class":34},[28,153042,153043],{"class":320},"\"学号",[28,153045,1307],{"class":45},[28,153047,153048],{"class":320},"姓名",[28,153050,1307],{"class":45},[28,153052,153053],{"class":320},"年龄",[28,153055,1307],{"class":45},[28,153057,153058],{"class":320},"成绩\"",[28,153060,227],{"class":34},[28,153062,153063,153065,153067,153069],{"class":30,"line":33064},[28,153064,3278],{"class":38},[28,153066,152196],{"class":34},[28,153068,26121],{"class":38},[28,153070,152201],{"class":34},[28,153072,153073],{"class":30,"line":33070},[28,153074,153075],{"class":34},"        print_student(student)\n",[28,153077,153078],{"class":30,"line":33084},[28,153079,2477],{"emptyLinePlaceholder":144},[28,153081,153082],{"class":30,"line":33090},[28,153083,2477],{"emptyLinePlaceholder":144},[28,153085,153086,153088,153090],{"class":30,"line":33096},[28,153087,32023],{"class":38},[28,153089,2050],{"class":2040},[28,153091,32029],{"class":34},[28,153093,153094,153097,153099],{"class":30,"line":33107},[28,153095,153096],{"class":34},"    students ",[28,153098,39],{"class":38},[28,153100,153101],{"class":34}," load_students()\n",[28,153103,153104],{"class":30,"line":33113},[28,153105,2477],{"emptyLinePlaceholder":144},[28,153107,153108,153110,153112],{"class":30,"line":33119},[28,153109,2328],{"class":38},[28,153111,95351],{"class":45},[28,153113,3816],{"class":34},[28,153115,153116],{"class":30,"line":33129},[28,153117,153118],{"class":34},"        show_menu()\n",[28,153120,153121,153124,153126,153128,153130,153133],{"class":30,"line":33135},[28,153122,153123],{"class":34},"        choice ",[28,153125,39],{"class":38},[28,153127,60680],{"class":45},[28,153129,221],{"class":34},[28,153131,153132],{"class":320},"\"请输入操作:\"",[28,153134,227],{"class":34},[28,153136,153137],{"class":30,"line":33146},[28,153138,2477],{"emptyLinePlaceholder":144},[28,153140,153141,153143,153146,153148,153151],{"class":30,"line":33152},[28,153142,2574],{"class":38},[28,153144,153145],{"class":34}," choice ",[28,153147,3026],{"class":38},[28,153149,153150],{"class":320}," \"1\"",[28,153152,3816],{"class":34},[28,153154,153155],{"class":30,"line":33162},[28,153156,153157],{"class":34},"            add_student(students)\n",[28,153159,153160,153163,153165,153167,153170],{"class":30,"line":33167},[28,153161,153162],{"class":38},"        elif",[28,153164,153145],{"class":34},[28,153166,3026],{"class":38},[28,153168,153169],{"class":320}," \"2\"",[28,153171,3816],{"class":34},[28,153173,153174],{"class":30,"line":33173},[28,153175,153176],{"class":34},"            delete_student(students)\n",[28,153178,153179,153181,153183,153185,153188],{"class":30,"line":33222},[28,153180,153162],{"class":38},[28,153182,153145],{"class":34},[28,153184,3026],{"class":38},[28,153186,153187],{"class":320}," \"3\"",[28,153189,3816],{"class":34},[28,153191,153192],{"class":30,"line":33269},[28,153193,153194],{"class":34},"            update_student(students)\n",[28,153196,153197,153199,153201,153203,153206],{"class":30,"line":33274},[28,153198,153162],{"class":38},[28,153200,153145],{"class":34},[28,153202,3026],{"class":38},[28,153204,153205],{"class":320}," \"4\"",[28,153207,3816],{"class":34},[28,153209,153210],{"class":30,"line":33280},[28,153211,153212],{"class":34},"            query_student(students)\n",[28,153214,153215,153217,153219,153221,153224],{"class":30,"line":33299},[28,153216,153162],{"class":38},[28,153218,153145],{"class":34},[28,153220,3026],{"class":38},[28,153222,153223],{"class":320}," \"5\"",[28,153225,3816],{"class":34},[28,153227,153228],{"class":30,"line":33305},[28,153229,153230],{"class":34},"            show_all_students(students)\n",[28,153232,153233,153235,153237,153239,153242],{"class":30,"line":33325},[28,153234,153162],{"class":38},[28,153236,153145],{"class":34},[28,153238,3026],{"class":38},[28,153240,153241],{"class":320}," \"0\"",[28,153243,3816],{"class":34},[28,153245,153246,153248,153250,153253],{"class":30,"line":33331},[28,153247,34726],{"class":45},[28,153249,221],{"class":34},[28,153251,153252],{"class":320},"\"退出系统\"",[28,153254,227],{"class":34},[28,153256,153257],{"class":30,"line":33337},[28,153258,115157],{"class":38},[28,153260,153261,153263],{"class":30,"line":33347},[28,153262,2611],{"class":38},[28,153264,3816],{"class":34},[28,153266,153267,153269,153271,153274],{"class":30,"line":33352},[28,153268,34726],{"class":45},[28,153270,221],{"class":34},[28,153272,153273],{"class":320},"\"输入错误\"",[28,153275,227],{"class":34},[28,153277,153278],{"class":30,"line":33358},[28,153279,2477],{"emptyLinePlaceholder":144},[28,153281,153282],{"class":30,"line":33374},[28,153283,2477],{"emptyLinePlaceholder":144},[28,153285,153286,153288,153290,153292,153294],{"class":30,"line":33419},[28,153287,1608],{"class":38},[28,153289,31296],{"class":45},[28,153291,101618],{"class":38},[28,153293,101621],{"class":320},[28,153295,3816],{"class":34},[28,153297,153298],{"class":30,"line":33425},[28,153299,101628],{"class":34},[14,153301,153302],{},"这个项目串联了：",[171,153304,153305,153308,153311,153314,153317,153319],{},[174,153306,153307],{},"菜单循环。",[174,153309,153310],{},"函数封装。",[174,153312,153313],{},"列表字典。",[174,153315,153316],{},"JSON 读写。",[174,153318,151786],{},[174,153320,153321,28463],{},[25,153322,153323],{},"if __name__ == \"__main__\"",[159,153325,153327],{"id":153326},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153329,153330],{},"可以进一步拆成两个类：",[171,153332,153333,153338],{},[174,153334,153335,153337],{},[25,153336,149627],{},"：表示单个学生。",[174,153339,153340,153342],{},[25,153341,151653],{},"：负责学生增删改查和文件保存。",[14,153344,153345],{},"示意代码：",[18,153347,153349],{"className":20,"code":153348,"language":22,"meta":23,"style":23},"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",[25,153350,153351,153361,153365,153369,153373,153381,153388,153394,153400,153406,153410,153418,153424,153434,153444,153454,153464,153468,153472,153478,153486,153494,153502,153510,153518,153526],{"__ignoreMap":23},[28,153352,153353,153355,153357,153359],{"class":30,"line":31},[28,153354,30813],{"class":38},[28,153356,151211],{"class":34},[28,153358,30468],{"class":38},[28,153360,151216],{"class":34},[28,153362,153363],{"class":30,"line":94},[28,153364,2477],{"emptyLinePlaceholder":144},[28,153366,153367],{"class":30,"line":109},[28,153368,2477],{"emptyLinePlaceholder":144},[28,153370,153371],{"class":30,"line":125},[28,153372,151229],{"class":2040},[28,153374,153375,153377,153379],{"class":30,"line":131},[28,153376,14771],{"class":38},[28,153378,7975],{"class":2040},[28,153380,3816],{"class":34},[28,153382,153383,153386],{"class":30,"line":1291},[28,153384,153385],{"class":34},"    student_id: ",[28,153387,151245],{"class":45},[28,153389,153390,153392],{"class":30,"line":1297},[28,153391,151242],{"class":34},[28,153393,151245],{"class":45},[28,153395,153396,153398],{"class":30,"line":1388},[28,153397,151250],{"class":34},[28,153399,151253],{"class":45},[28,153401,153402,153404],{"class":30,"line":1394},[28,153403,151258],{"class":34},[28,153405,151261],{"class":45},[28,153407,153408],{"class":30,"line":1406},[28,153409,2477],{"emptyLinePlaceholder":144},[28,153411,153412,153414,153416],{"class":30,"line":1689},[28,153413,30877],{"class":38},[28,153415,151409],{"class":2040},[28,153417,30883],{"class":34},[28,153419,153420,153422],{"class":30,"line":1694},[28,153421,14829],{"class":38},[28,153423,15649],{"class":34},[28,153425,153426,153428,153430,153432],{"class":30,"line":1700},[28,153427,151422],{"class":320},[28,153429,51512],{"class":34},[28,153431,30899],{"class":45},[28,153433,151429],{"class":34},[28,153435,153436,153438,153440,153442],{"class":30,"line":1705},[28,153437,151434],{"class":320},[28,153439,51512],{"class":34},[28,153441,30899],{"class":45},[28,153443,151441],{"class":34},[28,153445,153446,153448,153450,153452],{"class":30,"line":1719},[28,153447,151446],{"class":320},[28,153449,51512],{"class":34},[28,153451,30899],{"class":45},[28,153453,151453],{"class":34},[28,153455,153456,153458,153460,153462],{"class":30,"line":1724},[28,153457,151458],{"class":320},[28,153459,51512],{"class":34},[28,153461,30899],{"class":45},[28,153463,151465],{"class":34},[28,153465,153466],{"class":30,"line":1730},[28,153467,2606],{"class":34},[28,153469,153470],{"class":30,"line":1751},[28,153471,2477],{"emptyLinePlaceholder":144},[28,153473,153474,153476],{"class":30,"line":1756},[28,153475,151073],{"class":2040},[28,153477,151076],{"class":45},[28,153479,153480,153482,153484],{"class":30,"line":1770},[28,153481,30877],{"class":38},[28,153483,151486],{"class":2040},[28,153485,151489],{"class":34},[28,153487,153488,153490,153492],{"class":30,"line":1775},[28,153489,14829],{"class":38},[28,153491,151093],{"class":45},[28,153493,151498],{"class":34},[28,153495,153496,153498,153500],{"class":30,"line":1804},[28,153497,151503],{"class":34},[28,153499,151506],{"class":320},[28,153501,87911],{"class":34},[28,153503,153504,153506,153508],{"class":30,"line":1809},[28,153505,151503],{"class":34},[28,153507,62754],{"class":320},[28,153509,87911],{"class":34},[28,153511,153512,153514,153516],{"class":30,"line":1826},[28,153513,151503],{"class":34},[28,153515,69199],{"class":320},[28,153517,87911],{"class":34},[28,153519,153520,153522,153524],{"class":30,"line":1831},[28,153521,151503],{"class":34},[28,153523,151531],{"class":320},[28,153525,87911],{"class":34},[28,153527,153528],{"class":30,"line":1836},[28,153529,38202],{"class":34},[14,153531,153532],{},"管理器示意：",[18,153534,153536],{"className":20,"code":153535,"language":22,"meta":23,"style":23},"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",[25,153537,153538,153547,153555,153566,153570,153580,153593,153604,153611,153617,153621,153630,153639,153645,153652],{"__ignoreMap":23},[28,153539,153540,153542,153545],{"class":30,"line":31},[28,153541,14771],{"class":38},[28,153543,153544],{"class":2040}," StudentManager",[28,153546,3816],{"class":34},[28,153548,153549,153551,153553],{"class":30,"line":94},[28,153550,30877],{"class":38},[28,153552,30880],{"class":45},[28,153554,30883],{"class":34},[28,153556,153557,153559,153562,153564],{"class":30,"line":109},[28,153558,30921],{"class":45},[28,153560,153561],{"class":34},".students ",[28,153563,39],{"class":38},[28,153565,51913],{"class":34},[28,153567,153568],{"class":30,"line":125},[28,153569,2477],{"emptyLinePlaceholder":144},[28,153571,153572,153574,153577],{"class":30,"line":131},[28,153573,30877],{"class":38},[28,153575,153576],{"class":2040}," find_by_id",[28,153578,153579],{"class":34},"(self, student_id):\n",[28,153581,153582,153584,153586,153588,153590],{"class":30,"line":1291},[28,153583,3480],{"class":38},[28,153585,152196],{"class":34},[28,153587,26121],{"class":38},[28,153589,38949],{"class":45},[28,153591,153592],{"class":34},".students:\n",[28,153594,153595,153597,153600,153602],{"class":30,"line":1297},[28,153596,4719],{"class":38},[28,153598,153599],{"class":34}," student.student_id ",[28,153601,3026],{"class":38},[28,153603,152217],{"class":34},[28,153605,153606,153609],{"class":30,"line":1388},[28,153607,153608],{"class":38},"                return",[28,153610,152224],{"class":34},[28,153612,153613,153615],{"class":30,"line":1394},[28,153614,14829],{"class":38},[28,153616,152231],{"class":45},[28,153618,153619],{"class":30,"line":1406},[28,153620,2477],{"emptyLinePlaceholder":144},[28,153622,153623,153625,153627],{"class":30,"line":1689},[28,153624,30877],{"class":38},[28,153626,5286],{"class":2040},[28,153628,153629],{"class":34},"(self, student):\n",[28,153631,153632,153634,153636],{"class":30,"line":1694},[28,153633,2574],{"class":38},[28,153635,38949],{"class":45},[28,153637,153638],{"class":34},".find_by_id(student.student_id):\n",[28,153640,153641,153643],{"class":30,"line":1700},[28,153642,15809],{"class":38},[28,153644,125866],{"class":45},[28,153646,153647,153649],{"class":30,"line":1705},[28,153648,30921],{"class":45},[28,153650,153651],{"class":34},".students.append(student)\n",[28,153653,153654,153656],{"class":30,"line":1719},[28,153655,14829],{"class":38},[28,153657,153658],{"class":45}," True\n",[14,153660,153661],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[159,153663,153665],{"id":153664},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[188,153667,153669],{"id":153668},"_1251-数据结构","12.5.1 数据结构",[18,153671,153673],{"className":20,"code":153672,"language":22,"meta":23,"style":23},"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",[25,153674,153675,153683,153714,153744,153773,153802],{"__ignoreMap":23},[28,153676,153677,153679,153681],{"class":30,"line":31},[28,153678,148524],{"class":34},[28,153680,39],{"class":38},[28,153682,55522],{"class":34},[28,153684,153685,153687,153689,153691,153693,153695,153698,153700,153703,153705,153707,153709,153712],{"class":30,"line":94},[28,153686,148444],{"class":34},[28,153688,148056],{"class":320},[28,153690,51512],{"class":34},[28,153692,148667],{"class":320},[28,153694,12512],{"class":34},[28,153696,153697],{"class":320},"\"category\"",[28,153699,51512],{"class":34},[28,153701,153702],{"class":320},"\"手机\"",[28,153704,12512],{"class":34},[28,153706,84159],{"class":320},[28,153708,51512],{"class":34},[28,153710,153711],{"class":45},"12000",[28,153713,5007],{"class":34},[28,153715,153716,153718,153720,153722,153724,153726,153728,153730,153733,153735,153737,153739,153742],{"class":30,"line":109},[28,153717,148444],{"class":34},[28,153719,148056],{"class":320},[28,153721,51512],{"class":34},[28,153723,148667],{"class":320},[28,153725,12512],{"class":34},[28,153727,153697],{"class":320},[28,153729,51512],{"class":34},[28,153731,153732],{"class":320},"\"电脑\"",[28,153734,12512],{"class":34},[28,153736,84159],{"class":320},[28,153738,51512],{"class":34},[28,153740,153741],{"class":45},"18000",[28,153743,5007],{"class":34},[28,153745,153746,153748,153750,153752,153754,153756,153758,153760,153762,153764,153766,153768,153771],{"class":30,"line":125},[28,153747,148444],{"class":34},[28,153749,148056],{"class":320},[28,153751,51512],{"class":34},[28,153753,148688],{"class":320},[28,153755,12512],{"class":34},[28,153757,153697],{"class":320},[28,153759,51512],{"class":34},[28,153761,153702],{"class":320},[28,153763,12512],{"class":34},[28,153765,84159],{"class":320},[28,153767,51512],{"class":34},[28,153769,153770],{"class":45},"15000",[28,153772,5007],{"class":34},[28,153774,153775,153777,153779,153781,153783,153785,153787,153789,153791,153793,153795,153797,153800],{"class":30,"line":131},[28,153776,148444],{"class":34},[28,153778,148056],{"class":320},[28,153780,51512],{"class":34},[28,153782,148688],{"class":320},[28,153784,12512],{"class":34},[28,153786,153697],{"class":320},[28,153788,51512],{"class":34},[28,153790,153732],{"class":320},[28,153792,12512],{"class":34},[28,153794,84159],{"class":320},[28,153796,51512],{"class":34},[28,153798,153799],{"class":45},"16000",[28,153801,5007],{"class":34},[28,153803,153804],{"class":30,"line":1291},[28,153805,33322],{"class":34},[188,153807,153809],{"id":153808},"_1252-按日期统计","12.5.2 按日期统计",[18,153811,153813],{"className":20,"code":153812,"language":22,"meta":23,"style":23},"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",[25,153814,153815,153824,153828,153839,153853,153866,153885,153889],{"__ignoreMap":23},[28,153816,153817,153820,153822],{"class":30,"line":31},[28,153818,153819],{"class":34},"daily_total ",[28,153821,39],{"class":38},[28,153823,87943],{"class":34},[28,153825,153826],{"class":30,"line":94},[28,153827,2477],{"emptyLinePlaceholder":144},[28,153829,153830,153832,153834,153836],{"class":30,"line":109},[28,153831,3102],{"class":38},[28,153833,148268],{"class":34},[28,153835,26121],{"class":38},[28,153837,153838],{"class":34}," sales:\n",[28,153840,153841,153844,153846,153849,153851],{"class":30,"line":125},[28,153842,153843],{"class":34},"    date ",[28,153845,39],{"class":38},[28,153847,153848],{"class":34}," item[",[28,153850,148056],{"class":320},[28,153852,33322],{"class":34},[28,153854,153855,153858,153860,153862,153864],{"class":30,"line":131},[28,153856,153857],{"class":34},"    amount ",[28,153859,39],{"class":38},[28,153861,153848],{"class":34},[28,153863,84159],{"class":320},[28,153865,33322],{"class":34},[28,153867,153868,153871,153873,153876,153878,153880,153882],{"class":30,"line":1291},[28,153869,153870],{"class":34},"    daily_total[date] ",[28,153872,39],{"class":38},[28,153874,153875],{"class":34}," daily_total.get(date, ",[28,153877,407],{"class":45},[28,153879,13791],{"class":34},[28,153881,693],{"class":38},[28,153883,153884],{"class":34}," amount\n",[28,153886,153887],{"class":30,"line":1297},[28,153888,2477],{"emptyLinePlaceholder":144},[28,153890,153891,153893],{"class":30,"line":1388},[28,153892,30491],{"class":45},[28,153894,153895],{"class":34},"(daily_total)\n",[188,153897,153899],{"id":153898},"_1253-按类别统计","12.5.3 按类别统计",[18,153901,153903],{"className":20,"code":153902,"language":22,"meta":23,"style":23},"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",[25,153904,153905,153914,153918,153928,153941,153953,153971,153975],{"__ignoreMap":23},[28,153906,153907,153910,153912],{"class":30,"line":31},[28,153908,153909],{"class":34},"category_total ",[28,153911,39],{"class":38},[28,153913,87943],{"class":34},[28,153915,153916],{"class":30,"line":94},[28,153917,2477],{"emptyLinePlaceholder":144},[28,153919,153920,153922,153924,153926],{"class":30,"line":109},[28,153921,3102],{"class":38},[28,153923,148268],{"class":34},[28,153925,26121],{"class":38},[28,153927,153838],{"class":34},[28,153929,153930,153933,153935,153937,153939],{"class":30,"line":125},[28,153931,153932],{"class":34},"    category ",[28,153934,39],{"class":38},[28,153936,153848],{"class":34},[28,153938,153697],{"class":320},[28,153940,33322],{"class":34},[28,153942,153943,153945,153947,153949,153951],{"class":30,"line":131},[28,153944,153857],{"class":34},[28,153946,39],{"class":38},[28,153948,153848],{"class":34},[28,153950,84159],{"class":320},[28,153952,33322],{"class":34},[28,153954,153955,153958,153960,153963,153965,153967,153969],{"class":30,"line":1291},[28,153956,153957],{"class":34},"    category_total[category] ",[28,153959,39],{"class":38},[28,153961,153962],{"class":34}," category_total.get(category, ",[28,153964,407],{"class":45},[28,153966,13791],{"class":34},[28,153968,693],{"class":38},[28,153970,153884],{"class":34},[28,153972,153973],{"class":30,"line":1297},[28,153974,2477],{"emptyLinePlaceholder":144},[28,153976,153977,153979],{"class":30,"line":1388},[28,153978,30491],{"class":45},[28,153980,153981],{"class":34},"(category_total)\n",[188,153983,153985],{"id":153984},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[18,153987,153989],{"className":20,"code":153988,"language":22,"meta":23,"style":23},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[25,153990,153991,154016],{"__ignoreMap":23},[28,153992,153993,153996,153998,154000,154003,154006,154009,154012,154014],{"class":30,"line":31},[28,153994,153995],{"class":34},"top_date, top_amount ",[28,153997,39],{"class":38},[28,153999,6028],{"class":45},[28,154001,154002],{"class":34},"(daily_total.items(), ",[28,154004,154005],{"class":5293},"key",[28,154007,154008],{"class":38},"=lambda",[28,154010,154011],{"class":34}," item: item[",[28,154013,46],{"class":45},[28,154015,4734],{"class":34},[28,154017,154018,154020],{"class":30,"line":94},[28,154019,30491],{"class":45},[28,154021,154022],{"class":34},"(top_date, top_amount)\n",[159,154024,154026],{"id":154025},"_126-绘制柱状图","12.6 绘制柱状图",[18,154028,154030],{"className":20,"code":154029,"language":22,"meta":23,"style":23},"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",[25,154031,154032,154046,154057,154061,154069,154081,154093,154104,154108,154112,154122,154133,154147,154152,154169,154186,154202,154206],{"__ignoreMap":23},[28,154033,154034,154036,154038,154040,154042,154044],{"class":30,"line":31},[28,154035,30813],{"class":38},[28,154037,147438],{"class":34},[28,154039,30468],{"class":38},[28,154041,147443],{"class":34},[28,154043,31459],{"class":38},[28,154045,147448],{"class":34},[28,154047,154048,154050,154052,154054],{"class":30,"line":94},[28,154049,30813],{"class":38},[28,154051,147297],{"class":34},[28,154053,30468],{"class":38},[28,154055,154056],{"class":34}," Bar\n",[28,154058,154059],{"class":30,"line":109},[28,154060,2477],{"emptyLinePlaceholder":144},[28,154062,154063,154065,154067],{"class":30,"line":125},[28,154064,153909],{"class":34},[28,154066,39],{"class":38},[28,154068,15649],{"class":34},[28,154070,154071,154074,154076,154079],{"class":30,"line":131},[28,154072,154073],{"class":320},"    \"手机\"",[28,154075,51512],{"class":34},[28,154077,154078],{"class":45},"27000",[28,154080,31542],{"class":34},[28,154082,154083,154086,154088,154091],{"class":30,"line":1291},[28,154084,154085],{"class":320},"    \"电脑\"",[28,154087,51512],{"class":34},[28,154089,154090],{"class":45},"34000",[28,154092,31542],{"class":34},[28,154094,154095,154098,154100,154102],{"class":30,"line":1297},[28,154096,154097],{"class":320},"    \"耳机\"",[28,154099,51512],{"class":34},[28,154101,124458],{"class":45},[28,154103,31542],{"class":34},[28,154105,154106],{"class":30,"line":1388},[28,154107,1642],{"class":34},[28,154109,154110],{"class":30,"line":1394},[28,154111,2477],{"emptyLinePlaceholder":144},[28,154113,154114,154117,154119],{"class":30,"line":1406},[28,154115,154116],{"class":34},"bar ",[28,154118,39],{"class":38},[28,154120,154121],{"class":34}," Bar()\n",[28,154123,154124,154127,154130],{"class":30,"line":1689},[28,154125,154126],{"class":34},"bar.add_xaxis(",[28,154128,154129],{"class":45},"list",[28,154131,154132],{"class":34},"(category_total.keys()))\n",[28,154134,154135,154138,154140,154142,154144],{"class":30,"line":1694},[28,154136,154137],{"class":34},"bar.add_yaxis(",[28,154139,147354],{"class":320},[28,154141,12512],{"class":34},[28,154143,154129],{"class":45},[28,154145,154146],{"class":34},"(category_total.values()))\n",[28,154148,154149],{"class":30,"line":1700},[28,154150,154151],{"class":34},"bar.set_global_opts(\n",[28,154153,154154,154156,154158,154160,154162,154164,154167],{"class":30,"line":1705},[28,154155,147532],{"class":5293},[28,154157,39],{"class":38},[28,154159,147537],{"class":34},[28,154161,51482],{"class":5293},[28,154163,39],{"class":38},[28,154165,154166],{"class":320},"\"品类销售额\"",[28,154168,38123],{"class":34},[28,154170,154171,154173,154175,154177,154179,154181,154184],{"class":30,"line":1719},[28,154172,147551],{"class":5293},[28,154174,39],{"class":38},[28,154176,147556],{"class":34},[28,154178,79885],{"class":5293},[28,154180,39],{"class":38},[28,154182,154183],{"class":320},"\"品类\"",[28,154185,38123],{"class":34},[28,154187,154188,154190,154192,154194,154196,154198,154200],{"class":30,"line":1724},[28,154189,147570],{"class":5293},[28,154191,39],{"class":38},[28,154193,147556],{"class":34},[28,154195,79885],{"class":5293},[28,154197,39],{"class":38},[28,154199,147354],{"class":320},[28,154201,38123],{"class":34},[28,154203,154204],{"class":30,"line":1730},[28,154205,227],{"class":34},[28,154207,154208,154211,154214],{"class":30,"line":1751},[28,154209,154210],{"class":34},"bar.render(",[28,154212,154213],{"class":320},"\"category_sales.html\"",[28,154215,227],{"class":34},[159,154217,154219],{"id":154218},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154221,154222],{},"时间线适合展示不同日期、月份、年份的数据变化。",[18,154224,154226],{"className":20,"code":154225,"language":22,"meta":23,"style":23},"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",[25,154227,154228,154242,154253,154257,154265,154289,154312,154337,154341,154345,154355,154359,154370,154379,154389,154403,154434,154439,154443],{"__ignoreMap":23},[28,154229,154230,154232,154234,154236,154238,154240],{"class":30,"line":31},[28,154231,30813],{"class":38},[28,154233,147438],{"class":34},[28,154235,30468],{"class":38},[28,154237,147443],{"class":34},[28,154239,31459],{"class":38},[28,154241,147448],{"class":34},[28,154243,154244,154246,154248,154250],{"class":30,"line":94},[28,154245,30813],{"class":38},[28,154247,147297],{"class":34},[28,154249,30468],{"class":38},[28,154251,154252],{"class":34}," Bar, Timeline\n",[28,154254,154255],{"class":30,"line":109},[28,154256,2477],{"emptyLinePlaceholder":144},[28,154258,154259,154261,154263],{"class":30,"line":125},[28,154260,101717],{"class":34},[28,154262,39],{"class":38},[28,154264,15649],{"class":34},[28,154266,154267,154270,154273,154275,154277,154279,154281,154283,154285,154287],{"class":30,"line":131},[28,154268,154269],{"class":320},"    \"2024-10-01\"",[28,154271,154272],{"class":34},": {",[28,154274,153702],{"class":320},[28,154276,51512],{"class":34},[28,154278,153711],{"class":45},[28,154280,12512],{"class":34},[28,154282,153732],{"class":320},[28,154284,51512],{"class":34},[28,154286,153741],{"class":45},[28,154288,5007],{"class":34},[28,154290,154291,154294,154296,154298,154300,154302,154304,154306,154308,154310],{"class":30,"line":1291},[28,154292,154293],{"class":320},"    \"2024-10-02\"",[28,154295,154272],{"class":34},[28,154297,153702],{"class":320},[28,154299,51512],{"class":34},[28,154301,153770],{"class":45},[28,154303,12512],{"class":34},[28,154305,153732],{"class":320},[28,154307,51512],{"class":34},[28,154309,153799],{"class":45},[28,154311,5007],{"class":34},[28,154313,154314,154317,154319,154321,154323,154326,154328,154330,154332,154335],{"class":30,"line":1297},[28,154315,154316],{"class":320},"    \"2024-10-03\"",[28,154318,154272],{"class":34},[28,154320,153702],{"class":320},[28,154322,51512],{"class":34},[28,154324,154325],{"class":45},"17000",[28,154327,12512],{"class":34},[28,154329,153732],{"class":320},[28,154331,51512],{"class":34},[28,154333,154334],{"class":45},"19000",[28,154336,5007],{"class":34},[28,154338,154339],{"class":30,"line":1388},[28,154340,1642],{"class":34},[28,154342,154343],{"class":30,"line":1394},[28,154344,2477],{"emptyLinePlaceholder":144},[28,154346,154347,154350,154352],{"class":30,"line":1406},[28,154348,154349],{"class":34},"timeline ",[28,154351,39],{"class":38},[28,154353,154354],{"class":34}," Timeline()\n",[28,154356,154357],{"class":30,"line":1689},[28,154358,2477],{"emptyLinePlaceholder":144},[28,154360,154361,154363,154366,154368],{"class":30,"line":1694},[28,154362,3102],{"class":38},[28,154364,154365],{"class":34}," date, category_data ",[28,154367,26121],{"class":38},[28,154369,149207],{"class":34},[28,154371,154372,154375,154377],{"class":30,"line":1700},[28,154373,154374],{"class":34},"    bar ",[28,154376,39],{"class":38},[28,154378,154121],{"class":34},[28,154380,154381,154384,154386],{"class":30,"line":1705},[28,154382,154383],{"class":34},"    bar.add_xaxis(",[28,154385,154129],{"class":45},[28,154387,154388],{"class":34},"(category_data.keys()))\n",[28,154390,154391,154394,154396,154398,154400],{"class":30,"line":1719},[28,154392,154393],{"class":34},"    bar.add_yaxis(",[28,154395,147354],{"class":320},[28,154397,12512],{"class":34},[28,154399,154129],{"class":45},[28,154401,154402],{"class":34},"(category_data.values()))\n",[28,154404,154405,154408,154411,154413,154415,154417,154419,154421,154423,154425,154427,154429,154432],{"class":30,"line":1724},[28,154406,154407],{"class":34},"    bar.set_global_opts(",[28,154409,154410],{"class":5293},"title_opts",[28,154412,39],{"class":38},[28,154414,147537],{"class":34},[28,154416,51482],{"class":5293},[28,154418,39],{"class":38},[28,154420,271],{"class":38},[28,154422,465],{"class":320},[28,154424,1102],{"class":45},[28,154426,74001],{"class":34},[28,154428,1150],{"class":45},[28,154430,154431],{"class":320},"销售额\"",[28,154433,30573],{"class":34},[28,154435,154436],{"class":30,"line":1730},[28,154437,154438],{"class":34},"    timeline.add(bar, date)\n",[28,154440,154441],{"class":30,"line":1751},[28,154442,2477],{"emptyLinePlaceholder":144},[28,154444,154445,154448,154451],{"class":30,"line":1756},[28,154446,154447],{"class":34},"timeline.render(",[28,154449,154450],{"class":320},"\"timeline_sales.html\"",[28,154452,227],{"class":34},[159,154454,154456],{"id":154455},"_128-绘制地图","12.8 绘制地图",[14,154458,154459],{},"地图适合展示地区数据。",[18,154461,154463],{"className":20,"code":154462,"language":22,"meta":23,"style":23},"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",[25,154464,154465,154479,154490,154494,154502,154515,154527,154540,154553,154557,154561,154571,154586,154591,154608,154627,154631],{"__ignoreMap":23},[28,154466,154467,154469,154471,154473,154475,154477],{"class":30,"line":31},[28,154468,30813],{"class":38},[28,154470,147438],{"class":34},[28,154472,30468],{"class":38},[28,154474,147443],{"class":34},[28,154476,31459],{"class":38},[28,154478,147448],{"class":34},[28,154480,154481,154483,154485,154487],{"class":30,"line":94},[28,154482,30813],{"class":38},[28,154484,147297],{"class":34},[28,154486,30468],{"class":38},[28,154488,154489],{"class":34}," Map\n",[28,154491,154492],{"class":30,"line":109},[28,154493,2477],{"emptyLinePlaceholder":144},[28,154495,154496,154498,154500],{"class":30,"line":125},[28,154497,101717],{"class":34},[28,154499,39],{"class":38},[28,154501,55522],{"class":34},[28,154503,154504,154507,154509,154511,154513],{"class":30,"line":131},[28,154505,154506],{"class":34},"    (",[28,154508,69344],{"class":320},[28,154510,12512],{"class":34},[28,154512,1023],{"class":45},[28,154514,38123],{"class":34},[28,154516,154517,154519,154521,154523,154525],{"class":30,"line":1291},[28,154518,154506],{"class":34},[28,154520,69364],{"class":320},[28,154522,12512],{"class":34},[28,154524,147371],{"class":45},[28,154526,38123],{"class":34},[28,154528,154529,154531,154534,154536,154538],{"class":30,"line":1297},[28,154530,154506],{"class":34},[28,154532,154533],{"class":320},"\"广东\"",[28,154535,12512],{"class":34},[28,154537,1799],{"class":45},[28,154539,38123],{"class":34},[28,154541,154542,154544,154547,154549,154551],{"class":30,"line":1388},[28,154543,154506],{"class":34},[28,154545,154546],{"class":320},"\"浙江\"",[28,154548,12512],{"class":34},[28,154550,147376],{"class":45},[28,154552,38123],{"class":34},[28,154554,154555],{"class":30,"line":1394},[28,154556,33322],{"class":34},[28,154558,154559],{"class":30,"line":1406},[28,154560,2477],{"emptyLinePlaceholder":144},[28,154562,154563,154566,154568],{"class":30,"line":1689},[28,154564,154565],{"class":34},"map_chart ",[28,154567,39],{"class":38},[28,154569,154570],{"class":34}," Map()\n",[28,154572,154573,154576,154578,154581,154584],{"class":30,"line":1694},[28,154574,154575],{"class":34},"map_chart.add(",[28,154577,147354],{"class":320},[28,154579,154580],{"class":34},", data, ",[28,154582,154583],{"class":320},"\"china\"",[28,154585,227],{"class":34},[28,154587,154588],{"class":30,"line":1700},[28,154589,154590],{"class":34},"map_chart.set_global_opts(\n",[28,154592,154593,154595,154597,154599,154601,154603,154606],{"class":30,"line":1705},[28,154594,147532],{"class":5293},[28,154596,39],{"class":38},[28,154598,147537],{"class":34},[28,154600,51482],{"class":5293},[28,154602,39],{"class":38},[28,154604,154605],{"class":320},"\"地区销售额\"",[28,154607,38123],{"class":34},[28,154609,154610,154613,154615,154618,154621,154623,154625],{"class":30,"line":1719},[28,154611,154612],{"class":5293},"    visualmap_opts",[28,154614,39],{"class":38},[28,154616,154617],{"class":34},"opts.VisualMapOpts(",[28,154619,154620],{"class":5293},"max_",[28,154622,39],{"class":38},[28,154624,1799],{"class":45},[28,154626,38123],{"class":34},[28,154628,154629],{"class":30,"line":1724},[28,154630,227],{"class":34},[28,154632,154633,154636,154639],{"class":30,"line":1730},[28,154634,154635],{"class":34},"map_chart.render(",[28,154637,154638],{"class":320},"\"map_sales.html\"",[28,154640,227],{"class":34},[14,154642,154643],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[159,154645,154647],{"id":154646},"_129-项目拆分建议","12.9 项目拆分建议",[14,154649,154650],{},"当代码超过一个文件时，可以这样组织：",[18,154652,154655],{"className":154653,"code":154654,"language":5264,"meta":23},[5262],"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",[25,154656,154654],{"__ignoreMap":23},[14,154658,154659],{},"职责：",[171,154661,154662,154668,154674,154680],{},[174,154663,154664,154667],{},[25,154665,154666],{},"main.py","：程序入口。",[174,154669,154670,154673],{},[25,154671,154672],{},"file_utils.py","：读写 JSON。",[174,154675,154676,154679],{},[25,154677,154678],{},"sales_service.py","：统计销售数据。",[174,154681,154682,154685],{},[25,154683,154684],{},"chart_builder.py","：生成图表。",[159,154687,154689],{"id":154688},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154691,154692],{},"语法基础：",[171,154694,154695,154698,154701,154704],{},[174,154696,154697],{},"会写变量、注释、输入输出。",[174,154699,154700],{},"会使用 int、float、str、bool。",[174,154702,154703],{},"会做类型转换。",[174,154705,154706],{},"会使用 f-string 格式化输出。",[14,154708,154709],{},"流程控制：",[171,154711,154712,154718,154724,154732],{},[174,154713,154714,154715,28463],{},"会写 ",[25,154716,154717],{},"if elif else",[174,154719,154714,154720,101077,154722,28463],{},[25,154721,108722],{},[25,154723,3102],{},[174,154725,154726,154727,101077,154729,28463],{},"理解 ",[25,154728,2130],{},[25,154730,154731],{},"continue",[174,154733,154734],{},"能写嵌套循环。",[14,154736,154737],{},"函数：",[171,154739,154740,154743,154746,154749],{},[174,154741,154742],{},"会定义和调用函数。",[174,154744,154745],{},"理解参数和返回值。",[174,154747,154748],{},"知道局部变量和全局变量。",[174,154750,154751],{},"会使用默认参数、关键字参数、不定长参数。",[14,154753,154754],{},"容器：",[171,154756,154757,154760,154763,154766,154769],{},[174,154758,154759],{},"会使用列表增删改查。",[174,154761,154762],{},"会遍历列表、字典。",[174,154764,154765],{},"会使用切片。",[174,154767,154768],{},"会用集合去重。",[174,154770,154771],{},"会处理列表嵌套字典。",[14,154773,154774],{},"文件和模块：",[171,154776,154777,154780,154783,154786,154789],{},[174,154778,154779],{},"会读写文本文件。",[174,154781,154782],{},"会读写 JSON。",[174,154784,154785],{},"会捕获常见异常。",[174,154787,154788],{},"会导入模块和第三方包。",[174,154790,154791],{},"会创建简单包结构。",[14,154793,154794],{},"项目能力：",[171,154796,154797,154800,154803,154806,154809],{},[174,154798,154799],{},"能把代码拆成函数。",[174,154801,154802],{},"能把数据保存到文件。",[174,154804,154805],{},"能处理用户输入错误。",[174,154807,154808],{},"能写一个完整菜单程序。",[174,154810,154811],{},"能用 pyecharts 生成图表。",[159,154813,154815],{"id":154814},"_1211-推荐练习顺序","12.11 推荐练习顺序",[171,154817,154818,154821,154824,154827,154830,154833,154836,154839],{},[174,154819,154820],{},"猜数字游戏。",[174,154822,154823],{},"ATM 菜单程序。",[174,154825,154826],{},"学生成绩统计。",[174,154828,154829],{},"学生管理系统函数版。",[174,154831,154832],{},"学生管理系统文件持久化版。",[174,154834,154835],{},"学生管理系统面向对象版。",[174,154837,154838],{},"销售数据统计。",[174,154840,154841],{},"销售数据可视化。",[159,154843,154845],{"id":154844},"_1212-常见学习误区","12.12 常见学习误区",[171,154847,154848,154851,154854,154857,154860,154863,154866],{},[174,154849,154850],{},"只看视频不敲代码。",[174,154852,154853],{},"一报错就复制错误去搜，不先读报错位置。",[174,154855,154856],{},"变量名随便写，后续自己看不懂。",[174,154858,154859],{},"所有代码都写在一个文件一个函数里。",[174,154861,154862],{},"不保存练习代码，复习时没有材料。",[174,154864,154865],{},"还没掌握列表字典就急着学框架。",[174,154867,154868],{},"不会读官方文档，只依赖教程。",[159,154870,154872],{"id":154871},"_1213-如何读报错","12.13 如何读报错",[14,154874,154875],{},"报错通常从下往上看最后几行。",[14,154877,15212],{},[18,154879,154882],{"className":154880,"code":154881,"language":5264,"meta":23},[5262],"ValueError: invalid literal for int() with base 10: 'abc'\n",[25,154883,154881],{"__ignoreMap":23},[14,154885,24677],{},[171,154887,154888,154894,154904],{},[174,154889,154890,154891,28463],{},"异常类型是 ",[25,154892,154893],{},"ValueError",[174,154895,107404,154896,154899,154900,154903],{},[25,154897,154898],{},"int()"," 无法把 ",[25,154901,154902],{},"'abc'"," 转成整数。",[174,154905,154906],{},"应该检查输入内容或增加异常处理。",[14,154908,154909],{},"再看文件名和行号：",[18,154911,154914],{"className":154912,"code":154913,"language":5264,"meta":23},[5262],"File \"main.py\", line 10, in \u003Cmodule>\n",[25,154915,154913],{"__ignoreMap":23},[14,154917,154918,154919,154921],{},"表示错误发生在 ",[25,154920,154666],{}," 第 10 行。",[159,154923,154925],{"id":154924},"_1214-后续学习方向","12.14 后续学习方向",[14,154927,154928],{},"Python 基础完成后，可以按兴趣选择方向：",[171,154930,154931,154943,154952,154964,154975,154984,154994],{},[174,154932,154933,154934,428,154937,428,154940,28463],{},"自动化办公：",[25,154935,154936],{},"openpyxl",[25,154938,154939],{},"python-docx",[25,154941,154942],{},"pdfplumber",[174,154944,154945,154946,428,154948,428,154950,28463],{},"数据分析：",[25,154947,100685],{},[25,154949,146244],{},[25,154951,146252],{},[174,154953,154954,154955,428,154958,428,154961,28463],{},"Web 后端：",[25,154956,154957],{},"Flask",[25,154959,154960],{},"FastAPI",[25,154962,154963],{},"Django",[174,154965,154966,154967,428,154969,428,154972,28463],{},"爬虫：",[25,154968,146229],{},[25,154970,154971],{},"BeautifulSoup",[25,154973,154974],{},"Scrapy",[174,154976,154977,154978,428,154980,154983],{},"测试开发：",[25,154979,146276],{},[25,154981,154982],{},"selenium","、接口测试。",[174,154985,154986,154987,428,154989,428,154991,28463],{},"人工智能：",[25,154988,100685],{},[25,154990,146244],{},[25,154992,154993],{},"pytorch",[174,154995,154996,154997,428,154999,428,155002,28463],{},"运维脚本：",[25,154998,145845],{},[25,155000,155001],{},"subprocess",[25,155003,155004],{},"paramiko",[14,155006,155007],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[159,155009,155011],{"id":155010},"_1215-结课练习","12.15 结课练习",[171,155013,155014,155017,155020,155023,155026,155029,155032,155035],{},[174,155015,155016],{},"完成函数版学生管理系统。",[174,155018,155019],{},"给学生管理系统增加 JSON 持久化。",[174,155021,155022],{},"给学生管理系统增加异常处理。",[174,155024,155025],{},"把学生管理系统改成面向对象版。",[174,155027,155028],{},"使用 pyecharts 绘制学生成绩柱状图。",[174,155030,155031],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[174,155033,155034],{},"按品类统计销售额并绘制柱状图。",[174,155036,155037],{},"写一份自己的 Python 学习路线图。",[136,155039,155040],{},"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":23,"searchDepth":94,"depth":94,"links":155042},[155043,155044,155047,155048,155049,155055,155056,155057,155058,155059,155060,155061,155062,155063,155064],{"id":151759,"depth":94,"text":151760},{"id":151809,"depth":94,"text":151810,"children":155045},[155046],{"id":151813,"depth":109,"text":151814},{"id":151852,"depth":94,"text":151853},{"id":153326,"depth":94,"text":153327},{"id":153664,"depth":94,"text":153665,"children":155050},[155051,155052,155053,155054],{"id":153668,"depth":109,"text":153669},{"id":153808,"depth":109,"text":153809},{"id":153898,"depth":109,"text":153899},{"id":153984,"depth":109,"text":153985},{"id":154025,"depth":94,"text":154026},{"id":154218,"depth":94,"text":154219},{"id":154455,"depth":94,"text":154456},{"id":154646,"depth":94,"text":154647},{"id":154688,"depth":94,"text":154689},{"id":154814,"depth":94,"text":154815},{"id":154844,"depth":94,"text":154845},{"id":154871,"depth":94,"text":154872},{"id":154924,"depth":94,"text":154925},{"id":155010,"depth":94,"text":155011},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151751,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155071,"title":155072,"body":155073,"description":141,"extension":142,"meta":157542,"navigation":144,"path":157543,"seo":157544,"stem":157545,"__hash__":157546},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155074,"toc":157517},[155075,155078,155082,155085,155088,155108,155111,155134,155137,155140,155162,155165,155187,155191,155194,155234,155237,155358,155362,155365,155405,155408,155432,155435,155439,155442,155456,155489,155492,155527,155530,155553,155556,155589,155592,155594,155600,155675,155678,155684,155701,155741,155745,155748,155794,155796,155834,155837,155872,155875,155910,155913,155945,155948,155967,155971,155975,156088,156090,156165,156169,156215,156218,156244,156253,156257,156260,156323,156331,156359,156363,156403,156468,156472,156475,156514,156517,156562,156565,156626,156630,156657,156660,156688,156691,156695,156699,156764,156767,156805,156808,156840,156844,156943,156947,156950,157023,157026,157074,157078,157084,157124,157127,157174,157177,157226,157230,157232,157246,157248,157429,157433,157460,157480,157487,157491,157508,157514],[10,155076,155072],{"id":155077},"_2-基础语法变量与字符串",[159,155079,155081],{"id":155080},"_21-注释","2.1 注释",[14,155083,155084],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155086,155087],{},"单行注释：",[18,155089,155091],{"className":20,"code":155090,"language":22,"meta":23,"style":23},"# 这是单行注释\nprint(\"hello\")\n",[25,155092,155093,155098],{"__ignoreMap":23},[28,155094,155095],{"class":30,"line":31},[28,155096,155097],{"class":105},"# 这是单行注释\n",[28,155099,155100,155102,155104,155106],{"class":30,"line":94},[28,155101,30491],{"class":45},[28,155103,221],{"class":34},[28,155105,5921],{"class":320},[28,155107,227],{"class":34},[14,155109,155110],{},"多行说明常用三引号：",[18,155112,155114],{"className":20,"code":155113,"language":22,"meta":23,"style":23},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[25,155115,155116,155120,155125,155130],{"__ignoreMap":23},[28,155117,155118],{"class":30,"line":31},[28,155119,95757],{"class":320},[28,155121,155122],{"class":30,"line":94},[28,155123,155124],{"class":320},"这是多行说明。\n",[28,155126,155127],{"class":30,"line":109},[28,155128,155129],{"class":320},"常用于文件顶部说明、函数说明等。\n",[28,155131,155132],{"class":30,"line":125},[28,155133,95757],{"class":320},[14,155135,155136],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155138,155139],{},"不好：",[18,155141,155143],{"className":20,"code":155142,"language":22,"meta":23,"style":23},"# age 加 1\nage = age + 1\n",[25,155144,155145,155150],{"__ignoreMap":23},[28,155146,155147],{"class":30,"line":31},[28,155148,155149],{"class":105},"# age 加 1\n",[28,155151,155152,155154,155156,155158,155160],{"class":30,"line":94},[28,155153,146605],{"class":34},[28,155155,39],{"class":38},[28,155157,15784],{"class":34},[28,155159,693],{"class":38},[28,155161,55774],{"class":45},[14,155163,155164],{},"较好：",[18,155166,155168],{"className":20,"code":155167,"language":22,"meta":23,"style":23},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[25,155169,155170,155175],{"__ignoreMap":23},[28,155171,155172],{"class":30,"line":31},[28,155173,155174],{"class":105},"# 用户过完生日后，年龄增加一岁\n",[28,155176,155177,155179,155181,155183,155185],{"class":30,"line":94},[28,155178,146605],{"class":34},[28,155180,39],{"class":38},[28,155182,15784],{"class":34},[28,155184,693],{"class":38},[28,155186,55774],{"class":45},[159,155188,155190],{"id":155189},"_22-字面量","2.2 字面量",[14,155192,155193],{},"字面量就是代码中直接写出来的数据。",[18,155195,155197],{"className":20,"code":155196,"language":22,"meta":23,"style":23},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[25,155198,155199,155206,155213,155220,155227],{"__ignoreMap":23},[28,155200,155201,155203],{"class":30,"line":31},[28,155202,525],{"class":45},[28,155204,155205],{"class":105},"          # 整数\n",[28,155207,155208,155210],{"class":30,"line":94},[28,155209,268],{"class":45},[28,155211,155212],{"class":105},"         # 小数\n",[28,155214,155215,155217],{"class":30,"line":109},[28,155216,5921],{"class":320},[28,155218,155219],{"class":105},"      # 字符串\n",[28,155221,155222,155224],{"class":30,"line":125},[28,155223,31552],{"class":45},[28,155225,155226],{"class":105},"         # 布尔值\n",[28,155228,155229,155231],{"class":30,"line":131},[28,155230,95745],{"class":45},[28,155232,155233],{"class":105},"         # 空值\n",[14,155235,155236],{},"常见字面量类型：",[353,155238,155239,155249],{},[356,155240,155241],{},[359,155242,155243,155245,155247],{},[362,155244,23814],{},[362,155246,27570],{},[362,155248,25947],{},[400,155250,155251,155262,155273,155284,155296,155308,155320,155333,155345],{},[359,155252,155253,155255,155259],{},[405,155254,224],{},[405,155256,155257],{},[25,155258,525],{},[405,155260,155261],{},"整数",[359,155263,155264,155266,155270],{},[405,155265,260],{},[405,155267,155268],{},[25,155269,268],{},[405,155271,155272],{},"浮点数",[359,155274,155275,155277,155281],{},[405,155276,1376],{},[405,155278,155279],{},[25,155280,5921],{},[405,155282,155283],{},"字符串",[359,155285,155286,155288,155294],{},[405,155287,1431],{},[405,155289,155290,428,155292],{},[25,155291,31552],{},[25,155293,34063],{},[405,155295,66090],{},[359,155297,155298,155301,155305],{},[405,155299,155300],{},"NoneType",[405,155302,155303],{},[25,155304,95745],{},[405,155306,155307],{},"空值",[359,155309,155310,155312,155317],{},[405,155311,154129],{},[405,155313,155314],{},[25,155315,155316],{},"[1, 2, 3]",[405,155318,155319],{},"列表",[359,155321,155322,155325,155330],{},[405,155323,155324],{},"tuple",[405,155326,155327],{},[25,155328,155329],{},"(1, 2, 3)",[405,155331,155332],{},"元组",[359,155334,155335,155337,155342],{},[405,155336,114605],{},[405,155338,155339],{},[25,155340,155341],{},"{\"name\": \"张三\"}",[405,155343,155344],{},"字典",[359,155346,155347,155350,155355],{},[405,155348,155349],{},"set",[405,155351,155352],{},[25,155353,155354],{},"{1, 2, 3}",[405,155356,155357],{},"集合",[159,155359,155361],{"id":155360},"_23-变量","2.3 变量",[14,155363,155364],{},"变量是保存数据的名字。",[18,155366,155368],{"className":20,"code":155367,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[25,155369,155370,155378,155386,155396],{"__ignoreMap":23},[28,155371,155372,155374,155376],{"class":30,"line":31},[28,155373,146595],{"class":34},[28,155375,39],{"class":38},[28,155377,149412],{"class":320},[28,155379,155380,155382,155384],{"class":30,"line":94},[28,155381,146605],{"class":34},[28,155383,39],{"class":38},[28,155385,146610],{"class":45},[28,155387,155388,155391,155393],{"class":30,"line":109},[28,155389,155390],{"class":34},"height ",[28,155392,39],{"class":38},[28,155394,155395],{"class":45}," 1.75\n",[28,155397,155398,155401,155403],{"class":30,"line":125},[28,155399,155400],{"class":34},"is_student ",[28,155402,39],{"class":38},[28,155404,153658],{"class":45},[14,155406,155407],{},"Python 的变量不需要提前声明类型：",[18,155409,155411],{"className":20,"code":155410,"language":22,"meta":23,"style":23},"score = 100\nscore = \"满分\"\n",[25,155412,155413,155423],{"__ignoreMap":23},[28,155414,155415,155418,155420],{"class":30,"line":31},[28,155416,155417],{"class":34},"score ",[28,155419,39],{"class":38},[28,155421,155422],{"class":45}," 100\n",[28,155424,155425,155427,155429],{"class":30,"line":94},[28,155426,155417],{"class":34},[28,155428,39],{"class":38},[28,155430,155431],{"class":320}," \"满分\"\n",[14,155433,155434],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[159,155436,155438],{"id":155437},"_24-变量命名规则","2.4 变量命名规则",[14,155440,155441],{},"硬性规则：",[171,155443,155444,155447,155450,155453],{},[174,155445,155446],{},"只能由字母、数字、下划线组成。",[174,155448,155449],{},"不能以数字开头。",[174,155451,155452],{},"不能使用 Python 关键字。",[174,155454,155455],{},"区分大小写。",[18,155457,155459],{"className":20,"code":155458,"language":22,"meta":23,"style":23},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[25,155460,155461,155470,155479],{"__ignoreMap":23},[28,155462,155463,155466,155468],{"class":30,"line":31},[28,155464,155465],{"class":34},"user_name ",[28,155467,39],{"class":38},[28,155469,146600],{"class":320},[28,155471,155472,155475,155477],{"class":30,"line":94},[28,155473,155474],{"class":34},"age2 ",[28,155476,39],{"class":38},[28,155478,146610],{"class":45},[28,155480,155481,155484,155486],{"class":30,"line":109},[28,155482,155483],{"class":34},"_token ",[28,155485,39],{"class":38},[28,155487,155488],{"class":320}," \"abc\"\n",[14,155490,155491],{},"错误写法：",[18,155493,155495],{"className":20,"code":155494,"language":22,"meta":23,"style":23},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[25,155496,155497,155506,155518],{"__ignoreMap":23},[28,155498,155499,155502,155504],{"class":30,"line":31},[28,155500,155501],{"class":77478},"2age",[28,155503,13641],{"class":38},[28,155505,146610],{"class":45},[28,155507,155508,155510,155512,155514,155516],{"class":30,"line":94},[28,155509,131643],{"class":34},[28,155511,742],{"class":38},[28,155513,146595],{"class":34},[28,155515,39],{"class":38},[28,155517,146600],{"class":320},[28,155519,155520,155522,155524],{"class":30,"line":109},[28,155521,14771],{"class":38},[28,155523,13641],{"class":38},[28,155525,155526],{"class":320}," \"一班\"\n",[14,155528,155529],{},"查看关键字：",[18,155531,155533],{"className":20,"code":155532,"language":22,"meta":23,"style":23},"import keyword\n\nprint(keyword.kwlist)\n",[25,155534,155535,155542,155546],{"__ignoreMap":23},[28,155536,155537,155539],{"class":30,"line":31},[28,155538,30468],{"class":38},[28,155540,155541],{"class":34}," keyword\n",[28,155543,155544],{"class":30,"line":94},[28,155545,2477],{"emptyLinePlaceholder":144},[28,155547,155548,155550],{"class":30,"line":109},[28,155549,30491],{"class":45},[28,155551,155552],{"class":34},"(keyword.kwlist)\n",[14,155554,155555],{},"推荐命名风格：",[18,155557,155559],{"className":20,"code":155558,"language":22,"meta":23,"style":23},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[25,155560,155561,155570,155580],{"__ignoreMap":23},[28,155562,155563,155566,155568],{"class":30,"line":31},[28,155564,155565],{"class":34},"student_name ",[28,155567,39],{"class":38},[28,155569,149412],{"class":320},[28,155571,155572,155575,155577],{"class":30,"line":94},[28,155573,155574],{"class":34},"total_price ",[28,155576,39],{"class":38},[28,155578,155579],{"class":45}," 99.8\n",[28,155581,155582,155585,155587],{"class":30,"line":109},[28,155583,155584],{"class":34},"is_finished ",[28,155586,39],{"class":38},[28,155588,125866],{"class":45},[14,155590,155591],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[159,155593,50807],{"id":50806},[14,155595,104425,155596,155599],{},[25,155597,155598],{},"type()"," 查看数据类型：",[18,155601,155603],{"className":20,"code":155602,"language":22,"meta":23,"style":23},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[25,155604,155605,155619,155633,155647,155661],{"__ignoreMap":23},[28,155606,155607,155609,155611,155613,155615,155617],{"class":30,"line":31},[28,155608,30491],{"class":45},[28,155610,221],{"class":34},[28,155612,103166],{"class":45},[28,155614,221],{"class":34},[28,155616,525],{"class":45},[28,155618,30573],{"class":34},[28,155620,155621,155623,155625,155627,155629,155631],{"class":30,"line":94},[28,155622,30491],{"class":45},[28,155624,221],{"class":34},[28,155626,103166],{"class":45},[28,155628,221],{"class":34},[28,155630,268],{"class":45},[28,155632,30573],{"class":34},[28,155634,155635,155637,155639,155641,155643,155645],{"class":30,"line":109},[28,155636,30491],{"class":45},[28,155638,221],{"class":34},[28,155640,103166],{"class":45},[28,155642,221],{"class":34},[28,155644,5921],{"class":320},[28,155646,30573],{"class":34},[28,155648,155649,155651,155653,155655,155657,155659],{"class":30,"line":125},[28,155650,30491],{"class":45},[28,155652,221],{"class":34},[28,155654,103166],{"class":45},[28,155656,221],{"class":34},[28,155658,31552],{"class":45},[28,155660,30573],{"class":34},[28,155662,155663,155665,155667,155669,155671,155673],{"class":30,"line":131},[28,155664,30491],{"class":45},[28,155666,221],{"class":34},[28,155668,103166],{"class":45},[28,155670,221],{"class":34},[28,155672,95745],{"class":45},[28,155674,30573],{"class":34},[14,155676,155677],{},"输出类似：",[18,155679,155682],{"className":155680,"code":155681,"language":5264,"meta":23},[5262],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[25,155683,155681],{"__ignoreMap":23},[14,155685,9102,155686,107342,155688,155690,155691,155693,155694,21577,155696,155693,155698,155700],{},[25,155687,1431],{},[25,155689,224],{}," 的子类，",[25,155692,31552],{}," 可以当作 ",[25,155695,46],{},[25,155697,34063],{},[25,155699,407],{},"，但业务代码中不要滥用。",[18,155702,155704],{"className":20,"code":155703,"language":22,"meta":23,"style":23},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[25,155705,155706,155724],{"__ignoreMap":23},[28,155707,155708,155710,155712,155714,155716,155718,155721],{"class":30,"line":31},[28,155709,30491],{"class":45},[28,155711,221],{"class":34},[28,155713,31552],{"class":45},[28,155715,45642],{"class":38},[28,155717,25196],{"class":45},[28,155719,155720],{"class":34},")   ",[28,155722,155723],{"class":105},"# 2\n",[28,155725,155726,155728,155730,155732,155734,155736,155738],{"class":30,"line":94},[28,155727,30491],{"class":45},[28,155729,221],{"class":34},[28,155731,34063],{"class":45},[28,155733,45642],{"class":38},[28,155735,25196],{"class":45},[28,155737,45884],{"class":34},[28,155739,155740],{"class":105},"# 1\n",[159,155742,155744],{"id":155743},"_26-类型转换","2.6 类型转换",[14,155746,155747],{},"常用转换函数：",[18,155749,155751],{"className":20,"code":155750,"language":22,"meta":23,"style":23},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[25,155752,155753,155763,155774,155784],{"__ignoreMap":23},[28,155754,155755,155757,155759,155761],{"class":30,"line":31},[28,155756,224],{"class":45},[28,155758,221],{"class":34},[28,155760,54391],{"class":320},[28,155762,227],{"class":34},[28,155764,155765,155767,155769,155772],{"class":30,"line":94},[28,155766,260],{"class":45},[28,155768,221],{"class":34},[28,155770,155771],{"class":320},"\"3.14\"",[28,155773,227],{"class":34},[28,155775,155776,155778,155780,155782],{"class":30,"line":109},[28,155777,1376],{"class":45},[28,155779,221],{"class":34},[28,155781,525],{"class":45},[28,155783,227],{"class":34},[28,155785,155786,155788,155790,155792],{"class":30,"line":125},[28,155787,1431],{"class":45},[28,155789,221],{"class":34},[28,155791,46],{"class":45},[28,155793,227],{"class":34},[14,155795,15212],{},[18,155797,155799],{"className":20,"code":155798,"language":22,"meta":23,"style":23},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[25,155800,155801,155810,155821],{"__ignoreMap":23},[28,155802,155803,155805,155807],{"class":30,"line":31},[28,155804,146605],{"class":34},[28,155806,39],{"class":38},[28,155808,155809],{"class":320}," \"18\"\n",[28,155811,155812,155814,155816,155818],{"class":30,"line":94},[28,155813,146605],{"class":34},[28,155815,39],{"class":38},[28,155817,2459],{"class":45},[28,155819,155820],{"class":34},"(age)\n",[28,155822,155823,155825,155828,155830,155832],{"class":30,"line":109},[28,155824,30491],{"class":45},[28,155826,155827],{"class":34},"(age ",[28,155829,693],{"class":38},[28,155831,25196],{"class":45},[28,155833,227],{"class":34},[14,155835,155836],{},"输入得到的内容永远是字符串：",[18,155838,155840],{"className":20,"code":155839,"language":22,"meta":23,"style":23},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[25,155841,155842,155858],{"__ignoreMap":23},[28,155843,155844,155847,155849,155851,155853,155856],{"class":30,"line":31},[28,155845,155846],{"class":34},"num ",[28,155848,39],{"class":38},[28,155850,60680],{"class":45},[28,155852,221],{"class":34},[28,155854,155855],{"class":320},"\"请输入数字:\"",[28,155857,227],{"class":34},[28,155859,155860,155862,155864,155866,155869],{"class":30,"line":94},[28,155861,30491],{"class":45},[28,155863,221],{"class":34},[28,155865,103166],{"class":45},[28,155867,155868],{"class":34},"(num))  ",[28,155870,155871],{"class":105},"# str\n",[14,155873,155874],{},"如果要做数学运算，必须转换：",[18,155876,155878],{"className":20,"code":155877,"language":22,"meta":23,"style":23},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[25,155879,155880,155898],{"__ignoreMap":23},[28,155881,155882,155884,155886,155888,155890,155892,155894,155896],{"class":30,"line":31},[28,155883,155846],{"class":34},[28,155885,39],{"class":38},[28,155887,2459],{"class":45},[28,155889,221],{"class":34},[28,155891,53896],{"class":45},[28,155893,221],{"class":34},[28,155895,155855],{"class":320},[28,155897,30573],{"class":34},[28,155899,155900,155902,155904,155906,155908],{"class":30,"line":94},[28,155901,30491],{"class":45},[28,155903,45695],{"class":34},[28,155905,693],{"class":38},[28,155907,2115],{"class":45},[28,155909,227],{"class":34},[14,155911,155912],{},"常见错误：",[18,155914,155916],{"className":20,"code":155915,"language":22,"meta":23,"style":23},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[25,155917,155918,155931],{"__ignoreMap":23},[28,155919,155920,155922,155924,155926,155928],{"class":30,"line":31},[28,155921,224],{"class":45},[28,155923,221],{"class":34},[28,155925,155771],{"class":320},[28,155927,155720],{"class":34},[28,155929,155930],{"class":105},"# 错误\n",[28,155932,155933,155935,155937,155940,155943],{"class":30,"line":94},[28,155934,224],{"class":45},[28,155936,221],{"class":34},[28,155938,155939],{"class":320},"\"abc\"",[28,155941,155942],{"class":34},")    ",[28,155944,155930],{"class":105},[14,155946,155947],{},"正确写法：",[18,155949,155951],{"className":20,"code":155950,"language":22,"meta":23,"style":23},"num = float(\"3.14\")\n",[25,155952,155953],{"__ignoreMap":23},[28,155954,155955,155957,155959,155961,155963,155965],{"class":30,"line":31},[28,155956,155846],{"class":34},[28,155958,39],{"class":38},[28,155960,109856],{"class":45},[28,155962,221],{"class":34},[28,155964,155771],{"class":320},[28,155966,227],{"class":34},[159,155968,155970],{"id":155969},"_27-运算符","2.7 运算符",[188,155972,155974],{"id":155973},"_271-算术运算符","2.7.1 算术运算符",[353,155976,155977,155988],{},[356,155978,155979],{},[359,155980,155981,155984,155986],{},[362,155982,155983],{},"运算符",[362,155985,25947],{},[362,155987,27570],{},[400,155989,155990,156004,156018,156032,156046,156060,156074],{},[359,155991,155992,155996,155999],{},[405,155993,155994],{},[25,155995,693],{},[405,155997,155998],{},"加法",[405,156000,156001],{},[25,156002,156003],{},"1 + 2",[359,156005,156006,156010,156013],{},[405,156007,156008],{},[25,156009,742],{},[405,156011,156012],{},"减法",[405,156014,156015],{},[25,156016,156017],{},"5 - 3",[359,156019,156020,156024,156027],{},[405,156021,156022],{},[25,156023,668],{},[405,156025,156026],{},"乘法",[405,156028,156029],{},[25,156030,156031],{},"2 * 3",[359,156033,156034,156038,156041],{},[405,156035,156036],{},[25,156037,794],{},[405,156039,156040],{},"除法，结果是浮点数",[405,156042,156043],{},[25,156044,156045],{},"5 \u002F 2",[359,156047,156048,156052,156055],{},[405,156049,156050],{},[25,156051,33405],{},[405,156053,156054],{},"整除",[405,156056,156057],{},[25,156058,156059],{},"5 \u002F\u002F 2",[359,156061,156062,156066,156069],{},[405,156063,156064],{},[25,156065,542],{},[405,156067,156068],{},"取余",[405,156070,156071],{},[25,156072,156073],{},"5 % 2",[359,156075,156076,156080,156083],{},[405,156077,156078],{},[25,156079,10738],{},[405,156081,156082],{},"幂运算",[405,156084,156085],{},[25,156086,156087],{},"2 ** 3",[14,156089,15212],{},[18,156091,156093],{"className":20,"code":156092,"language":22,"meta":23,"style":23},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[25,156094,156095,156113,156130,156147],{"__ignoreMap":23},[28,156096,156097,156099,156101,156103,156106,156108,156110],{"class":30,"line":31},[28,156098,30491],{"class":45},[28,156100,221],{"class":34},[28,156102,533],{"class":45},[28,156104,156105],{"class":38}," \u002F",[28,156107,14832],{"class":45},[28,156109,155720],{"class":34},[28,156111,156112],{"class":105},"# 2.5\n",[28,156114,156115,156117,156119,156121,156124,156126,156128],{"class":30,"line":94},[28,156116,30491],{"class":45},[28,156118,221],{"class":34},[28,156120,533],{"class":45},[28,156122,156123],{"class":38}," \u002F\u002F",[28,156125,14832],{"class":45},[28,156127,45884],{"class":34},[28,156129,155723],{"class":105},[28,156131,156132,156134,156136,156138,156141,156143,156145],{"class":30,"line":109},[28,156133,30491],{"class":45},[28,156135,221],{"class":34},[28,156137,533],{"class":45},[28,156139,156140],{"class":38}," %",[28,156142,14832],{"class":45},[28,156144,155720],{"class":34},[28,156146,155740],{"class":105},[28,156148,156149,156151,156153,156155,156158,156160,156162],{"class":30,"line":125},[28,156150,30491],{"class":45},[28,156152,221],{"class":34},[28,156154,52],{"class":45},[28,156156,156157],{"class":38}," **",[28,156159,78145],{"class":45},[28,156161,45884],{"class":34},[28,156163,156164],{"class":105},"# 8\n",[188,156166,156168],{"id":156167},"_272-赋值运算符","2.7.2 赋值运算符",[18,156170,156172],{"className":20,"code":156171,"language":22,"meta":23,"style":23},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[25,156173,156174,156182,156190,156198,156206],{"__ignoreMap":23},[28,156175,156176,156178,156180],{"class":30,"line":31},[28,156177,155846],{"class":34},[28,156179,39],{"class":38},[28,156181,58503],{"class":45},[28,156183,156184,156186,156188],{"class":30,"line":94},[28,156185,155846],{"class":34},[28,156187,9554],{"class":38},[28,156189,54502],{"class":45},[28,156191,156192,156194,156196],{"class":30,"line":109},[28,156193,155846],{"class":34},[28,156195,150311],{"class":38},[28,156197,47799],{"class":45},[28,156199,156200,156202,156204],{"class":30,"line":125},[28,156201,155846],{"class":34},[28,156203,137207],{"class":38},[28,156205,120095],{"class":45},[28,156207,156208,156210,156213],{"class":30,"line":131},[28,156209,155846],{"class":34},[28,156211,156212],{"class":38},"\u002F=",[28,156214,47799],{"class":45},[14,156216,156217],{},"等价关系：",[18,156219,156221],{"className":20,"code":156220,"language":22,"meta":23,"style":23},"num += 1\nnum = num + 1\n",[25,156222,156223,156231],{"__ignoreMap":23},[28,156224,156225,156227,156229],{"class":30,"line":31},[28,156226,155846],{"class":34},[28,156228,9554],{"class":38},[28,156230,55774],{"class":45},[28,156232,156233,156235,156237,156240,156242],{"class":30,"line":94},[28,156234,155846],{"class":34},[28,156236,39],{"class":38},[28,156238,156239],{"class":34}," num ",[28,156241,693],{"class":38},[28,156243,55774],{"class":45},[14,156245,156246,156247,101077,156250,28463],{},"Python 没有 ",[25,156248,156249],{},"num++",[25,156251,156252],{},"num--",[188,156254,156256],{"id":156255},"_273-比较运算符","2.7.3 比较运算符",[14,156258,156259],{},"比较运算结果是布尔值。",[18,156261,156263],{"className":20,"code":156262,"language":22,"meta":23,"style":23},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[25,156264,156265,156279,156294,156308],{"__ignoreMap":23},[28,156266,156267,156269,156271,156273,156275,156277],{"class":30,"line":31},[28,156268,30491],{"class":45},[28,156270,221],{"class":34},[28,156272,659],{"class":45},[28,156274,26300],{"class":38},[28,156276,2225],{"class":45},[28,156278,227],{"class":34},[28,156280,156281,156283,156285,156287,156290,156292],{"class":30,"line":94},[28,156282,30491],{"class":45},[28,156284,221],{"class":34},[28,156286,659],{"class":45},[28,156288,156289],{"class":38}," >=",[28,156291,2115],{"class":45},[28,156293,227],{"class":34},[28,156295,156296,156298,156300,156302,156304,156306],{"class":30,"line":109},[28,156297,30491],{"class":45},[28,156299,221],{"class":34},[28,156301,659],{"class":45},[28,156303,101618],{"class":38},[28,156305,2160],{"class":45},[28,156307,227],{"class":34},[28,156309,156310,156312,156314,156316,156319,156321],{"class":30,"line":125},[28,156311,30491],{"class":45},[28,156313,221],{"class":34},[28,156315,659],{"class":45},[28,156317,156318],{"class":38}," !=",[28,156320,2160],{"class":45},[28,156322,227],{"class":34},[14,156324,156325,156326,156328,156329,28463],{},"注意：判断相等用 ",[25,156327,3026],{},"，赋值用 ",[25,156330,39],{},[18,156332,156334],{"className":20,"code":156333,"language":22,"meta":23,"style":23},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[25,156335,156336,156348],{"__ignoreMap":23},[28,156337,156338,156340,156342,156345],{"class":30,"line":31},[28,156339,146605],{"class":34},[28,156341,39],{"class":38},[28,156343,156344],{"class":45}," 18",[28,156346,156347],{"class":105},"       # 赋值\n",[28,156349,156350,156352,156354,156356],{"class":30,"line":94},[28,156351,146605],{"class":34},[28,156353,3026],{"class":38},[28,156355,156344],{"class":45},[28,156357,156358],{"class":105},"      # 判断是否相等\n",[188,156360,156362],{"id":156361},"_274-逻辑运算符","2.7.4 逻辑运算符",[353,156364,156365,156373],{},[356,156366,156367],{},[359,156368,156369,156371],{},[362,156370,155983],{},[362,156372,25947],{},[400,156374,156375,156384,156393],{},[359,156376,156377,156381],{},[405,156378,156379],{},[25,156380,30538],{},[405,156382,156383],{},"并且",[359,156385,156386,156390],{},[405,156387,156388],{},[25,156389,115149],{},[405,156391,156392],{},"或者",[359,156394,156395,156400],{},[405,156396,156397],{},[25,156398,156399],{},"not",[405,156401,156402],{},"取反",[18,156404,156406],{"className":20,"code":156405,"language":22,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[25,156407,156408,156416,156425,156429,156444,156458],{"__ignoreMap":23},[28,156409,156410,156412,156414],{"class":30,"line":31},[28,156411,146605],{"class":34},[28,156413,39],{"class":38},[28,156415,88140],{"class":45},[28,156417,156418,156421,156423],{"class":30,"line":94},[28,156419,156420],{"class":34},"has_ticket ",[28,156422,39],{"class":38},[28,156424,153658],{"class":45},[28,156426,156427],{"class":30,"line":109},[28,156428,2477],{"emptyLinePlaceholder":144},[28,156430,156431,156433,156435,156437,156439,156441],{"class":30,"line":125},[28,156432,30491],{"class":45},[28,156434,155827],{"class":34},[28,156436,1787],{"class":38},[28,156438,156344],{"class":45},[28,156440,120488],{"class":38},[28,156442,156443],{"class":34}," has_ticket)\n",[28,156445,156446,156448,156450,156452,156454,156456],{"class":30,"line":131},[28,156447,30491],{"class":45},[28,156449,155827],{"class":34},[28,156451,99],{"class":38},[28,156453,156344],{"class":45},[28,156455,114260],{"class":38},[28,156457,156443],{"class":34},[28,156459,156460,156462,156464,156466],{"class":30,"line":1291},[28,156461,30491],{"class":45},[28,156463,221],{"class":34},[28,156465,156399],{"class":38},[28,156467,156443],{"class":34},[159,156469,156471],{"id":156470},"_28-字符串定义","2.8 字符串定义",[14,156473,156474],{},"三种常见写法：",[18,156476,156478],{"className":20,"code":156477,"language":22,"meta":23,"style":23},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[25,156479,156480,156490,156499,156509],{"__ignoreMap":23},[28,156481,156482,156485,156487],{"class":30,"line":31},[28,156483,156484],{"class":34},"name1 ",[28,156486,39],{"class":38},[28,156488,156489],{"class":320}," '小明'\n",[28,156491,156492,156495,156497],{"class":30,"line":94},[28,156493,156494],{"class":34},"name2 ",[28,156496,39],{"class":38},[28,156498,149412],{"class":320},[28,156500,156501,156504,156506],{"class":30,"line":109},[28,156502,156503],{"class":34},"text ",[28,156505,39],{"class":38},[28,156507,156508],{"class":320}," \"\"\"这是多行字符串\n",[28,156510,156511],{"class":30,"line":125},[28,156512,156513],{"class":320},"可以换行\"\"\"\n",[14,156515,156516],{},"字符串中包含引号：",[18,156518,156520],{"className":20,"code":156519,"language":22,"meta":23,"style":23},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[25,156521,156522,156532,156542],{"__ignoreMap":23},[28,156523,156524,156527,156529],{"class":30,"line":31},[28,156525,156526],{"class":34},"msg ",[28,156528,39],{"class":38},[28,156530,156531],{"class":320}," \"他说:'你好'\"\n",[28,156533,156534,156537,156539],{"class":30,"line":94},[28,156535,156536],{"class":34},"msg2 ",[28,156538,39],{"class":38},[28,156540,156541],{"class":320}," '他说:\"你好\"'\n",[28,156543,156544,156547,156549,156552,156555,156558,156560],{"class":30,"line":109},[28,156545,156546],{"class":34},"msg3 ",[28,156548,39],{"class":38},[28,156550,156551],{"class":320}," \"他说:",[28,156553,156554],{"class":45},"\\\"",[28,156556,156557],{"class":320},"你好",[28,156559,156554],{"class":45},[28,156561,25211],{"class":320},[14,156563,156564],{},"常见转义字符：",[353,156566,156567,156576],{},[356,156568,156569],{},[359,156570,156571,156574],{},[362,156572,156573],{},"写法",[362,156575,100759],{},[400,156577,156578,156588,156597,156607,156616],{},[359,156579,156580,156585],{},[405,156581,156582],{},[25,156583,156584],{},"\\n",[405,156586,156587],{},"换行",[359,156589,156590,156594],{},[405,156591,156592],{},[25,156593,1307],{},[405,156595,156596],{},"制表符",[359,156598,156599,156604],{},[405,156600,156601],{},[25,156602,156603],{},"\\\\",[405,156605,156606],{},"反斜杠",[359,156608,156609,156613],{},[405,156610,156611],{},[25,156612,156554],{},[405,156614,156615],{},"双引号",[359,156617,156618,156623],{},[405,156619,156620],{},[25,156621,156622],{},"\\'",[405,156624,156625],{},"单引号",[159,156627,156629],{"id":156628},"_29-字符串拼接","2.9 字符串拼接",[18,156631,156633],{"className":20,"code":156632,"language":22,"meta":23,"style":23},"name = \"小明\"\nprint(\"你好，\" + name)\n",[25,156634,156635,156643],{"__ignoreMap":23},[28,156636,156637,156639,156641],{"class":30,"line":31},[28,156638,146595],{"class":34},[28,156640,39],{"class":38},[28,156642,149412],{"class":320},[28,156644,156645,156647,156649,156652,156654],{"class":30,"line":94},[28,156646,30491],{"class":45},[28,156648,221],{"class":34},[28,156650,156651],{"class":320},"\"你好，\"",[28,156653,45642],{"class":38},[28,156655,156656],{"class":34}," name)\n",[14,156658,156659],{},"字符串只能和字符串拼接：",[18,156661,156663],{"className":20,"code":156662,"language":22,"meta":23,"style":23},"age = 18\nprint(\"年龄:\" + str(age))\n",[25,156664,156665,156673],{"__ignoreMap":23},[28,156666,156667,156669,156671],{"class":30,"line":31},[28,156668,146605],{"class":34},[28,156670,39],{"class":38},[28,156672,146610],{"class":45},[28,156674,156675,156677,156679,156681,156683,156685],{"class":30,"line":94},[28,156676,30491],{"class":45},[28,156678,221],{"class":34},[28,156680,146576],{"class":320},[28,156682,45642],{"class":38},[28,156684,73994],{"class":45},[28,156686,156687],{"class":34},"(age))\n",[14,156689,156690],{},"更推荐使用格式化字符串。",[159,156692,156694],{"id":156693},"_210-字符串格式化","2.10 字符串格式化",[188,156696,156698],{"id":156697},"_2101-百分号格式化","2.10.1 百分号格式化",[18,156700,156702],{"className":20,"code":156701,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[25,156703,156704,156712,156720,156729,156733],{"__ignoreMap":23},[28,156705,156706,156708,156710],{"class":30,"line":31},[28,156707,146595],{"class":34},[28,156709,39],{"class":38},[28,156711,149412],{"class":320},[28,156713,156714,156716,156718],{"class":30,"line":94},[28,156715,146605],{"class":34},[28,156717,39],{"class":38},[28,156719,146610],{"class":45},[28,156721,156722,156724,156726],{"class":30,"line":109},[28,156723,155417],{"class":34},[28,156725,39],{"class":38},[28,156727,156728],{"class":45}," 95.5\n",[28,156730,156731],{"class":30,"line":125},[28,156732,2477],{"emptyLinePlaceholder":144},[28,156734,156735,156737,156739,156742,156745,156748,156751,156754,156757,156759,156761],{"class":30,"line":131},[28,156736,30491],{"class":45},[28,156738,221],{"class":34},[28,156740,156741],{"class":320},"\"姓名:",[28,156743,156744],{"class":45},"%s",[28,156746,156747],{"class":320}," 年龄:",[28,156749,156750],{"class":45},"%d",[28,156752,156753],{"class":320}," 分数:",[28,156755,156756],{"class":45},"%.1f",[28,156758,465],{"class":320},[28,156760,156140],{"class":38},[28,156762,156763],{"class":34}," (name, age, score))\n",[14,156765,156766],{},"常用占位符：",[353,156768,156769,156778],{},[356,156770,156771],{},[359,156772,156773,156776],{},[362,156774,156775],{},"占位符",[362,156777,25947],{},[400,156779,156780,156788,156796],{},[359,156781,156782,156786],{},[405,156783,156784],{},[25,156785,156744],{},[405,156787,155283],{},[359,156789,156790,156794],{},[405,156791,156792],{},[25,156793,156750],{},[405,156795,155261],{},[359,156797,156798,156803],{},[405,156799,156800],{},[25,156801,156802],{},"%f",[405,156804,155272],{},[14,156806,156807],{},"精度控制：",[18,156809,156811],{"className":20,"code":156810,"language":22,"meta":23,"style":23},"price = 12.3456\nprint(\"%.2f\" % price)\n",[25,156812,156813,156822],{"__ignoreMap":23},[28,156814,156815,156817,156819],{"class":30,"line":31},[28,156816,146740],{"class":34},[28,156818,39],{"class":38},[28,156820,156821],{"class":45}," 12.3456\n",[28,156823,156824,156826,156828,156830,156833,156835,156837],{"class":30,"line":94},[28,156825,30491],{"class":45},[28,156827,221],{"class":34},[28,156829,465],{"class":320},[28,156831,156832],{"class":45},"%.2f",[28,156834,465],{"class":320},[28,156836,156140],{"class":38},[28,156838,156839],{"class":34}," price)\n",[188,156841,156843],{"id":156842},"_2102-format方法","2.10.2 format方法",[18,156845,156847],{"className":20,"code":156846,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[25,156848,156849,156857,156865,156869,156888,156908],{"__ignoreMap":23},[28,156850,156851,156853,156855],{"class":30,"line":31},[28,156852,146595],{"class":34},[28,156854,39],{"class":38},[28,156856,149412],{"class":320},[28,156858,156859,156861,156863],{"class":30,"line":94},[28,156860,146605],{"class":34},[28,156862,39],{"class":38},[28,156864,146610],{"class":45},[28,156866,156867],{"class":30,"line":109},[28,156868,2477],{"emptyLinePlaceholder":144},[28,156870,156871,156873,156875,156877,156879,156881,156883,156885],{"class":30,"line":125},[28,156872,30491],{"class":45},[28,156874,221],{"class":34},[28,156876,156741],{"class":320},[28,156878,32535],{"class":45},[28,156880,156747],{"class":320},[28,156882,32535],{"class":45},[28,156884,465],{"class":320},[28,156886,156887],{"class":34},".format(name, age))\n",[28,156889,156890,156892,156894,156896,156899,156901,156904,156906],{"class":30,"line":131},[28,156891,30491],{"class":45},[28,156893,221],{"class":34},[28,156895,156741],{"class":320},[28,156897,156898],{"class":45},"{0}",[28,156900,156747],{"class":320},[28,156902,156903],{"class":45},"{1}",[28,156905,465],{"class":320},[28,156907,156887],{"class":34},[28,156909,156910,156912,156914,156916,156919,156921,156924,156926,156929,156931,156933,156936,156938,156940],{"class":30,"line":1291},[28,156911,30491],{"class":45},[28,156913,221],{"class":34},[28,156915,156741],{"class":320},[28,156917,156918],{"class":45},"{name}",[28,156920,156747],{"class":320},[28,156922,156923],{"class":45},"{age}",[28,156925,465],{"class":320},[28,156927,156928],{"class":34},".format(",[28,156930,79885],{"class":5293},[28,156932,39],{"class":38},[28,156934,156935],{"class":34},"name, ",[28,156937,70296],{"class":5293},[28,156939,39],{"class":38},[28,156941,156942],{"class":34},"age))\n",[188,156944,156946],{"id":156945},"_2103-f-string","2.10.3 f-string",[14,156948,156949],{},"推荐写法：",[18,156951,156953],{"className":20,"code":156952,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[25,156954,156955,156963,156971,156979,156983],{"__ignoreMap":23},[28,156956,156957,156959,156961],{"class":30,"line":31},[28,156958,146595],{"class":34},[28,156960,39],{"class":38},[28,156962,149412],{"class":320},[28,156964,156965,156967,156969],{"class":30,"line":94},[28,156966,146605],{"class":34},[28,156968,39],{"class":38},[28,156970,146610],{"class":45},[28,156972,156973,156975,156977],{"class":30,"line":109},[28,156974,155417],{"class":34},[28,156976,39],{"class":38},[28,156978,156728],{"class":45},[28,156980,156981],{"class":30,"line":125},[28,156982,2477],{"emptyLinePlaceholder":144},[28,156984,156985,156987,156989,156991,156993,156995,156997,156999,157001,157003,157005,157007,157009,157011,157014,157017,157019,157021],{"class":30,"line":131},[28,156986,30491],{"class":45},[28,156988,221],{"class":34},[28,156990,271],{"class":38},[28,156992,156741],{"class":320},[28,156994,1102],{"class":45},[28,156996,79885],{"class":34},[28,156998,1150],{"class":45},[28,157000,156747],{"class":320},[28,157002,1102],{"class":45},[28,157004,70296],{"class":34},[28,157006,1150],{"class":45},[28,157008,156753],{"class":320},[28,157010,1102],{"class":45},[28,157012,157013],{"class":34},"score",[28,157015,157016],{"class":38},":.1f",[28,157018,1150],{"class":45},[28,157020,465],{"class":320},[28,157022,227],{"class":34},[14,157024,157025],{},"表达式也可以放进去：",[18,157027,157029],{"className":20,"code":157028,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[25,157030,157031,157039,157047],{"__ignoreMap":23},[28,157032,157033,157035,157037],{"class":30,"line":31},[28,157034,146740],{"class":34},[28,157036,39],{"class":38},[28,157038,146745],{"class":45},[28,157040,157041,157043,157045],{"class":30,"line":94},[28,157042,146750],{"class":34},[28,157044,39],{"class":38},[28,157046,54502],{"class":45},[28,157048,157049,157051,157053,157055,157058,157060,157062,157064,157067,157069,157072],{"class":30,"line":109},[28,157050,30491],{"class":45},[28,157052,221],{"class":34},[28,157054,271],{"class":38},[28,157056,157057],{"class":320},"\"总价:",[28,157059,1102],{"class":45},[28,157061,146740],{"class":34},[28,157063,668],{"class":38},[28,157065,157066],{"class":34}," count",[28,157068,1150],{"class":45},[28,157070,157071],{"class":320},"元\"",[28,157073,227],{"class":34},[159,157075,157077],{"id":157076},"_211-input输入","2.11 input输入",[14,157079,157080,157083],{},[25,157081,157082],{},"input()"," 会暂停程序，等待用户输入。",[18,157085,157087],{"className":20,"code":157086,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[25,157088,157089,157103],{"__ignoreMap":23},[28,157090,157091,157093,157095,157097,157099,157101],{"class":30,"line":31},[28,157092,146595],{"class":34},[28,157094,39],{"class":38},[28,157096,60680],{"class":45},[28,157098,221],{"class":34},[28,157100,152438],{"class":320},[28,157102,227],{"class":34},[28,157104,157105,157107,157109,157111,157114,157116,157118,157120,157122],{"class":30,"line":94},[28,157106,30491],{"class":45},[28,157108,221],{"class":34},[28,157110,271],{"class":38},[28,157112,157113],{"class":320},"\"你好，",[28,157115,1102],{"class":45},[28,157117,79885],{"class":34},[28,157119,1150],{"class":45},[28,157121,465],{"class":320},[28,157123,227],{"class":34},[14,157125,157126],{},"输入整数：",[18,157128,157130],{"className":20,"code":157129,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[25,157131,157132,157150],{"__ignoreMap":23},[28,157133,157134,157136,157138,157140,157142,157144,157146,157148],{"class":30,"line":31},[28,157135,146605],{"class":34},[28,157137,39],{"class":38},[28,157139,2459],{"class":45},[28,157141,221],{"class":34},[28,157143,53896],{"class":45},[28,157145,221],{"class":34},[28,157147,152453],{"class":320},[28,157149,30573],{"class":34},[28,157151,157152,157154,157156,157158,157161,157163,157165,157167,157170,157172],{"class":30,"line":94},[28,157153,30491],{"class":45},[28,157155,221],{"class":34},[28,157157,271],{"class":38},[28,157159,157160],{"class":320},"\"明年你",[28,157162,1102],{"class":45},[28,157164,146605],{"class":34},[28,157166,693],{"class":38},[28,157168,157169],{"class":45}," 1}",[28,157171,149463],{"class":320},[28,157173,227],{"class":34},[14,157175,157176],{},"输入小数：",[18,157178,157180],{"className":20,"code":157179,"language":22,"meta":23,"style":23},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[25,157181,157182,157201],{"__ignoreMap":23},[28,157183,157184,157186,157188,157190,157192,157194,157196,157199],{"class":30,"line":31},[28,157185,155390],{"class":34},[28,157187,39],{"class":38},[28,157189,109856],{"class":45},[28,157191,221],{"class":34},[28,157193,53896],{"class":45},[28,157195,221],{"class":34},[28,157197,157198],{"class":320},"\"请输入身高:\"",[28,157200,30573],{"class":34},[28,157202,157203,157205,157207,157209,157212,157214,157216,157219,157221,157224],{"class":30,"line":94},[28,157204,30491],{"class":45},[28,157206,221],{"class":34},[28,157208,271],{"class":38},[28,157210,157211],{"class":320},"\"身高:",[28,157213,1102],{"class":45},[28,157215,25059],{"class":34},[28,157217,157218],{"class":38},":.2f",[28,157220,1150],{"class":45},[28,157222,157223],{"class":320},"米\"",[28,157225,227],{"class":34},[159,157227,157229],{"id":157228},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157231,123351],{},[171,157233,157234,157237,157240,157243],{},[174,157235,157236],{},"输入商品单价。",[174,157238,157239],{},"输入购买数量。",[174,157241,157242],{},"输入折扣，例如 0.8 表示八折。",[174,157244,157245],{},"输出最终金额，保留两位小数。",[14,157247,10112],{},[18,157249,157251],{"className":20,"code":157250,"language":22,"meta":23,"style":23},"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",[25,157252,157253,157272,157291,157311,157315,157335,157339,157362,157383,157405],{"__ignoreMap":23},[28,157254,157255,157257,157259,157261,157263,157265,157267,157270],{"class":30,"line":31},[28,157256,146740],{"class":34},[28,157258,39],{"class":38},[28,157260,109856],{"class":45},[28,157262,221],{"class":34},[28,157264,53896],{"class":45},[28,157266,221],{"class":34},[28,157268,157269],{"class":320},"\"请输入商品单价:\"",[28,157271,30573],{"class":34},[28,157273,157274,157276,157278,157280,157282,157284,157286,157289],{"class":30,"line":94},[28,157275,146750],{"class":34},[28,157277,39],{"class":38},[28,157279,2459],{"class":45},[28,157281,221],{"class":34},[28,157283,53896],{"class":45},[28,157285,221],{"class":34},[28,157287,157288],{"class":320},"\"请输入购买数量:\"",[28,157290,30573],{"class":34},[28,157292,157293,157296,157298,157300,157302,157304,157306,157309],{"class":30,"line":109},[28,157294,157295],{"class":34},"discount ",[28,157297,39],{"class":38},[28,157299,109856],{"class":45},[28,157301,221],{"class":34},[28,157303,53896],{"class":45},[28,157305,221],{"class":34},[28,157307,157308],{"class":320},"\"请输入折扣:\"",[28,157310,30573],{"class":34},[28,157312,157313],{"class":30,"line":125},[28,157314,2477],{"emptyLinePlaceholder":144},[28,157316,157317,157320,157322,157325,157327,157330,157332],{"class":30,"line":131},[28,157318,157319],{"class":34},"total ",[28,157321,39],{"class":38},[28,157323,157324],{"class":34}," price ",[28,157326,668],{"class":38},[28,157328,157329],{"class":34}," count ",[28,157331,668],{"class":38},[28,157333,157334],{"class":34}," discount\n",[28,157336,157337],{"class":30,"line":1291},[28,157338,2477],{"emptyLinePlaceholder":144},[28,157340,157341,157343,157345,157347,157350,157352,157354,157356,157358,157360],{"class":30,"line":1297},[28,157342,30491],{"class":45},[28,157344,221],{"class":34},[28,157346,271],{"class":38},[28,157348,157349],{"class":320},"\"商品单价:",[28,157351,1102],{"class":45},[28,157353,79890],{"class":34},[28,157355,157218],{"class":38},[28,157357,1150],{"class":45},[28,157359,465],{"class":320},[28,157361,227],{"class":34},[28,157363,157364,157366,157368,157370,157373,157375,157377,157379,157381],{"class":30,"line":1388},[28,157365,30491],{"class":45},[28,157367,221],{"class":34},[28,157369,271],{"class":38},[28,157371,157372],{"class":320},"\"购买数量:",[28,157374,1102],{"class":45},[28,157376,84509],{"class":34},[28,157378,1150],{"class":45},[28,157380,465],{"class":320},[28,157382,227],{"class":34},[28,157384,157385,157387,157389,157391,157394,157396,157399,157401,157403],{"class":30,"line":1394},[28,157386,30491],{"class":45},[28,157388,221],{"class":34},[28,157390,271],{"class":38},[28,157392,157393],{"class":320},"\"折扣:",[28,157395,1102],{"class":45},[28,157397,157398],{"class":34},"discount",[28,157400,1150],{"class":45},[28,157402,465],{"class":320},[28,157404,227],{"class":34},[28,157406,157407,157409,157411,157413,157416,157418,157421,157423,157425,157427],{"class":30,"line":1406},[28,157408,30491],{"class":45},[28,157410,221],{"class":34},[28,157412,271],{"class":38},[28,157414,157415],{"class":320},"\"应付金额:",[28,157417,1102],{"class":45},[28,157419,157420],{"class":34},"total",[28,157422,157218],{"class":38},[28,157424,1150],{"class":45},[28,157426,157071],{"class":320},[28,157428,227],{"class":34},[159,157430,157432],{"id":157431},"_213-易错点","2.13 易错点",[171,157434,157435,157440,157446,157454,157457],{},[174,157436,157437,157439],{},[25,157438,157082],{}," 的结果是字符串，做运算前要转换。",[174,157441,157442,157443,28463],{},"字符串拼接时，数字要先 ",[25,157444,157445],{},"str()",[174,157447,157448,157450,157451,157453],{},[25,157449,39],{}," 是赋值，",[25,157452,3026],{}," 是比较。",[174,157455,157456],{},"Python 没有自增自减运算符。",[174,157458,157459],{},"浮点数计算可能有精度误差：",[18,157461,157463],{"className":20,"code":157462,"language":22,"meta":23,"style":23},"print(0.1 + 0.2)\n",[25,157464,157465],{"__ignoreMap":23},[28,157466,157467,157469,157471,157473,157475,157478],{"class":30,"line":31},[28,157468,30491],{"class":45},[28,157470,221],{"class":34},[28,157472,86285],{"class":45},[28,157474,45642],{"class":38},[28,157476,157477],{"class":45}," 0.2",[28,157479,227],{"class":34},[14,157481,157482,157483,157486],{},"金额计算如果要求严格，可以后续学习 ",[25,157484,157485],{},"decimal"," 模块。",[159,157488,157490],{"id":157489},"_214-本章练习","2.14 本章练习",[171,157492,157493,157496,157499,157502,157505],{},[174,157494,157495],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[174,157497,157498],{},"输入圆的半径，计算面积，保留两位小数。",[174,157500,157501],{},"输入工资和奖金，计算总收入。",[174,157503,157504],{},"输入摄氏温度，转换为华氏温度。",[174,157506,157507],{},"写一个 BMI 计算程序：",[18,157509,157512],{"className":157510,"code":157511,"language":5264,"meta":23},[5262],"BMI = 体重kg \u002F 身高m ** 2\n",[25,157513,157511],{"__ignoreMap":23},[136,157515,157516],{},"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":23,"searchDepth":94,"depth":94,"links":157518},[157519,157520,157521,157522,157523,157524,157525,157531,157532,157533,157538,157539,157540,157541],{"id":155080,"depth":94,"text":155081},{"id":155189,"depth":94,"text":155190},{"id":155360,"depth":94,"text":155361},{"id":155437,"depth":94,"text":155438},{"id":50806,"depth":94,"text":50807},{"id":155743,"depth":94,"text":155744},{"id":155969,"depth":94,"text":155970,"children":157526},[157527,157528,157529,157530],{"id":155973,"depth":109,"text":155974},{"id":156167,"depth":109,"text":156168},{"id":156255,"depth":109,"text":156256},{"id":156361,"depth":109,"text":156362},{"id":156470,"depth":94,"text":156471},{"id":156628,"depth":94,"text":156629},{"id":156693,"depth":94,"text":156694,"children":157534},[157535,157536,157537],{"id":156697,"depth":109,"text":156698},{"id":156842,"depth":109,"text":156843},{"id":156945,"depth":109,"text":156946},{"id":157076,"depth":94,"text":157077},{"id":157228,"depth":94,"text":157229},{"id":157431,"depth":94,"text":157432},{"id":157489,"depth":94,"text":157490},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155072,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157548,"title":157549,"body":157550,"description":141,"extension":142,"meta":159186,"navigation":144,"path":159187,"seo":159188,"stem":159189,"__hash__":159190},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157551,"toc":159167},[157552,157555,157559,157562,157577,157580,157608,157612,157662,157664,157680,157683,157709,157712,157716,157783,157786,157802,157806,157809,157927,157930,157937,157986,157992,157996,157999,158112,158115,158119,158123,158126,158176,158180,158183,158233,158237,158240,158278,158282,158285,158331,158334,158369,158373,158378,158381,158427,158429,158496,158500,158506,158617,158626,158630,158632,158643,158645,158811,158815,158817,158831,158833,159047,159051,159070,159087,159090,159136,159140,159164],[10,157553,157549],{"id":157554},"_3-判断语句",[159,157556,157558],{"id":157557},"_31-布尔值","3.1 布尔值",[14,157560,157561],{},"判断语句依赖布尔值：",[18,157563,157565],{"className":20,"code":157564,"language":22,"meta":23,"style":23},"True\nFalse\n",[25,157566,157567,157572],{"__ignoreMap":23},[28,157568,157569],{"class":30,"line":31},[28,157570,157571],{"class":45},"True\n",[28,157573,157574],{"class":30,"line":94},[28,157575,157576],{"class":45},"False\n",[14,157578,157579],{},"比较表达式会产生布尔值：",[18,157581,157583],{"className":20,"code":157582,"language":22,"meta":23,"style":23},"age = 18\nprint(age >= 18)  # True\n",[25,157584,157585,157593],{"__ignoreMap":23},[28,157586,157587,157589,157591],{"class":30,"line":31},[28,157588,146605],{"class":34},[28,157590,39],{"class":38},[28,157592,146610],{"class":45},[28,157594,157595,157597,157599,157601,157603,157605],{"class":30,"line":94},[28,157596,30491],{"class":45},[28,157598,155827],{"class":34},[28,157600,1787],{"class":38},[28,157602,156344],{"class":45},[28,157604,45884],{"class":34},[28,157606,157607],{"class":105},"# True\n",[159,157609,157611],{"id":157610},"_32-if基础语法","3.2 if基础语法",[18,157613,157615],{"className":20,"code":157614,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[25,157616,157617,157635,157639,157651],{"__ignoreMap":23},[28,157618,157619,157621,157623,157625,157627,157629,157631,157633],{"class":30,"line":31},[28,157620,146605],{"class":34},[28,157622,39],{"class":38},[28,157624,2459],{"class":45},[28,157626,221],{"class":34},[28,157628,53896],{"class":45},[28,157630,221],{"class":34},[28,157632,152453],{"class":320},[28,157634,30573],{"class":34},[28,157636,157637],{"class":30,"line":94},[28,157638,2477],{"emptyLinePlaceholder":144},[28,157640,157641,157643,157645,157647,157649],{"class":30,"line":109},[28,157642,1608],{"class":38},[28,157644,15784],{"class":34},[28,157646,1787],{"class":38},[28,157648,156344],{"class":45},[28,157650,3816],{"class":34},[28,157652,157653,157655,157657,157660],{"class":30,"line":125},[28,157654,31375],{"class":45},[28,157656,221],{"class":34},[28,157658,157659],{"class":320},"\"可以进入网吧\"",[28,157661,227],{"class":34},[14,157663,9102],{},[171,157665,157666,157671,157674,157677],{},[174,157667,157668,157670],{},[25,157669,1608],{}," 后面是条件表达式。",[174,157672,157673],{},"条件后面必须写冒号。",[174,157675,157676],{},"条件成立时执行缩进代码块。",[174,157678,157679],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157681,157682],{},"错误示例：",[18,157684,157686],{"className":20,"code":157685,"language":22,"meta":23,"style":23},"if age >= 18\n    print(\"可以进入\")\n",[25,157687,157688,157698],{"__ignoreMap":23},[28,157689,157690,157692,157694,157696],{"class":30,"line":31},[28,157691,1608],{"class":38},[28,157693,15784],{"class":34},[28,157695,1787],{"class":38},[28,157697,146610],{"class":45},[28,157699,157700,157702,157704,157707],{"class":30,"line":94},[28,157701,31375],{"class":45},[28,157703,221],{"class":34},[28,157705,157706],{"class":320},"\"可以进入\"",[28,157708,227],{"class":34},[14,157710,157711],{},"缺少冒号。",[159,157713,157715],{"id":157714},"_33-if-else","3.3 if else",[18,157717,157719],{"className":20,"code":157718,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[25,157720,157721,157739,157743,157755,157766,157772],{"__ignoreMap":23},[28,157722,157723,157725,157727,157729,157731,157733,157735,157737],{"class":30,"line":31},[28,157724,146605],{"class":34},[28,157726,39],{"class":38},[28,157728,2459],{"class":45},[28,157730,221],{"class":34},[28,157732,53896],{"class":45},[28,157734,221],{"class":34},[28,157736,152453],{"class":320},[28,157738,30573],{"class":34},[28,157740,157741],{"class":30,"line":94},[28,157742,2477],{"emptyLinePlaceholder":144},[28,157744,157745,157747,157749,157751,157753],{"class":30,"line":109},[28,157746,1608],{"class":38},[28,157748,15784],{"class":34},[28,157750,1787],{"class":38},[28,157752,156344],{"class":45},[28,157754,3816],{"class":34},[28,157756,157757,157759,157761,157764],{"class":30,"line":125},[28,157758,31375],{"class":45},[28,157760,221],{"class":34},[28,157762,157763],{"class":320},"\"成年人\"",[28,157765,227],{"class":34},[28,157767,157768,157770],{"class":30,"line":131},[28,157769,1778],{"class":38},[28,157771,3816],{"class":34},[28,157773,157774,157776,157778,157781],{"class":30,"line":1291},[28,157775,31375],{"class":45},[28,157777,221],{"class":34},[28,157779,157780],{"class":320},"\"未成年人\"",[28,157782,227],{"class":34},[14,157784,157785],{},"执行逻辑：",[171,157787,157788,157794,157799],{},[174,157789,157790,157791,157793],{},"条件成立，执行 ",[25,157792,1608],{}," 代码块。",[174,157795,157796,157797,157793],{},"条件不成立，执行 ",[25,157798,1778],{},[174,157800,157801],{},"两个代码块只会执行其中一个。",[159,157803,157805],{"id":157804},"_34-if-elif-else","3.4 if elif else",[14,157807,157808],{},"多条件判断：",[18,157810,157812],{"className":20,"code":157811,"language":22,"meta":23,"style":23},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[25,157813,157814,157832,157836,157850,157861,157875,157886,157899,157910,157916],{"__ignoreMap":23},[28,157815,157816,157818,157820,157822,157824,157826,157828,157830],{"class":30,"line":31},[28,157817,155417],{"class":34},[28,157819,39],{"class":38},[28,157821,2459],{"class":45},[28,157823,221],{"class":34},[28,157825,53896],{"class":45},[28,157827,221],{"class":34},[28,157829,152468],{"class":320},[28,157831,30573],{"class":34},[28,157833,157834],{"class":30,"line":94},[28,157835,2477],{"emptyLinePlaceholder":144},[28,157837,157838,157840,157843,157845,157848],{"class":30,"line":109},[28,157839,1608],{"class":38},[28,157841,157842],{"class":34}," score ",[28,157844,1787],{"class":38},[28,157846,157847],{"class":45}," 90",[28,157849,3816],{"class":34},[28,157851,157852,157854,157856,157859],{"class":30,"line":125},[28,157853,31375],{"class":45},[28,157855,221],{"class":34},[28,157857,157858],{"class":320},"\"优秀\"",[28,157860,227],{"class":34},[28,157862,157863,157866,157868,157870,157873],{"class":30,"line":131},[28,157864,157865],{"class":38},"elif",[28,157867,157842],{"class":34},[28,157869,1787],{"class":38},[28,157871,157872],{"class":45}," 80",[28,157874,3816],{"class":34},[28,157876,157877,157879,157881,157884],{"class":30,"line":1291},[28,157878,31375],{"class":45},[28,157880,221],{"class":34},[28,157882,157883],{"class":320},"\"良好\"",[28,157885,227],{"class":34},[28,157887,157888,157890,157892,157894,157897],{"class":30,"line":1297},[28,157889,157865],{"class":38},[28,157891,157842],{"class":34},[28,157893,1787],{"class":38},[28,157895,157896],{"class":45}," 60",[28,157898,3816],{"class":34},[28,157900,157901,157903,157905,157908],{"class":30,"line":1388},[28,157902,31375],{"class":45},[28,157904,221],{"class":34},[28,157906,157907],{"class":320},"\"及格\"",[28,157909,227],{"class":34},[28,157911,157912,157914],{"class":30,"line":1394},[28,157913,1778],{"class":38},[28,157915,3816],{"class":34},[28,157917,157918,157920,157922,157925],{"class":30,"line":1406},[28,157919,31375],{"class":45},[28,157921,221],{"class":34},[28,157923,157924],{"class":320},"\"不及格\"",[28,157926,227],{"class":34},[14,157928,157929],{},"注意判断顺序很重要。",[14,157931,157932,157933,157936],{},"如果把 ",[25,157934,157935],{},"score >= 60"," 放在最前面：",[18,157938,157940],{"className":20,"code":157939,"language":22,"meta":23,"style":23},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[25,157941,157942,157954,157964,157976],{"__ignoreMap":23},[28,157943,157944,157946,157948,157950,157952],{"class":30,"line":31},[28,157945,1608],{"class":38},[28,157947,157842],{"class":34},[28,157949,1787],{"class":38},[28,157951,157896],{"class":45},[28,157953,3816],{"class":34},[28,157955,157956,157958,157960,157962],{"class":30,"line":94},[28,157957,31375],{"class":45},[28,157959,221],{"class":34},[28,157961,157907],{"class":320},[28,157963,227],{"class":34},[28,157965,157966,157968,157970,157972,157974],{"class":30,"line":109},[28,157967,157865],{"class":38},[28,157969,157842],{"class":34},[28,157971,1787],{"class":38},[28,157973,157847],{"class":45},[28,157975,3816],{"class":34},[28,157977,157978,157980,157982,157984],{"class":30,"line":125},[28,157979,31375],{"class":45},[28,157981,221],{"class":34},[28,157983,157858],{"class":320},[28,157985,227],{"class":34},[14,157987,157988,157989,157991],{},"成绩 95 会先满足 ",[25,157990,157935],{},"，后面的优秀分支就不会执行。",[159,157993,157995],{"id":157994},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157997,157998],{},"嵌套判断就是在一个判断内部再写判断。",[18,158000,158002],{"className":20,"code":158001,"language":22,"meta":23,"style":23},"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",[25,158003,158004,158022,158037,158041,158053,158067,158077,158084,158095,158101],{"__ignoreMap":23},[28,158005,158006,158008,158010,158012,158014,158016,158018,158020],{"class":30,"line":31},[28,158007,146605],{"class":34},[28,158009,39],{"class":38},[28,158011,2459],{"class":45},[28,158013,221],{"class":34},[28,158015,53896],{"class":45},[28,158017,221],{"class":34},[28,158019,152453],{"class":320},[28,158021,30573],{"class":34},[28,158023,158024,158026,158028,158030,158032,158035],{"class":30,"line":94},[28,158025,156420],{"class":34},[28,158027,39],{"class":38},[28,158029,60680],{"class":45},[28,158031,221],{"class":34},[28,158033,158034],{"class":320},"\"是否有票(y\u002Fn):\"",[28,158036,227],{"class":34},[28,158038,158039],{"class":30,"line":109},[28,158040,2477],{"emptyLinePlaceholder":144},[28,158042,158043,158045,158047,158049,158051],{"class":30,"line":125},[28,158044,1608],{"class":38},[28,158046,15784],{"class":34},[28,158048,1787],{"class":38},[28,158050,156344],{"class":45},[28,158052,3816],{"class":34},[28,158054,158055,158057,158060,158062,158065],{"class":30,"line":131},[28,158056,3178],{"class":38},[28,158058,158059],{"class":34}," has_ticket ",[28,158061,3026],{"class":38},[28,158063,158064],{"class":320}," \"y\"",[28,158066,3816],{"class":34},[28,158068,158069,158071,158073,158075],{"class":30,"line":1291},[28,158070,32527],{"class":45},[28,158072,221],{"class":34},[28,158074,157706],{"class":320},[28,158076,227],{"class":34},[28,158078,158079,158082],{"class":30,"line":1297},[28,158080,158081],{"class":38},"    else",[28,158083,3816],{"class":34},[28,158085,158086,158088,158090,158093],{"class":30,"line":1388},[28,158087,32527],{"class":45},[28,158089,221],{"class":34},[28,158091,158092],{"class":320},"\"请先买票\"",[28,158094,227],{"class":34},[28,158096,158097,158099],{"class":30,"line":1394},[28,158098,1778],{"class":38},[28,158100,3816],{"class":34},[28,158102,158103,158105,158107,158110],{"class":30,"line":1406},[28,158104,31375],{"class":45},[28,158106,221],{"class":34},[28,158108,158109],{"class":320},"\"未成年人禁止进入\"",[28,158111,227],{"class":34},[14,158113,158114],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[159,158116,158118],{"id":158117},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[188,158120,158122],{"id":158121},"_361-and","3.6.1 and",[14,158124,158125],{},"两个条件都成立才成立。",[18,158127,158129],{"className":20,"code":158128,"language":22,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[25,158130,158131,158139,158147,158151,158166],{"__ignoreMap":23},[28,158132,158133,158135,158137],{"class":30,"line":31},[28,158134,146605],{"class":34},[28,158136,39],{"class":38},[28,158138,88140],{"class":45},[28,158140,158141,158143,158145],{"class":30,"line":94},[28,158142,156420],{"class":34},[28,158144,39],{"class":38},[28,158146,153658],{"class":45},[28,158148,158149],{"class":30,"line":109},[28,158150,2477],{"emptyLinePlaceholder":144},[28,158152,158153,158155,158157,158159,158161,158163],{"class":30,"line":125},[28,158154,1608],{"class":38},[28,158156,15784],{"class":34},[28,158158,1787],{"class":38},[28,158160,156344],{"class":45},[28,158162,120488],{"class":38},[28,158164,158165],{"class":34}," has_ticket:\n",[28,158167,158168,158170,158172,158174],{"class":30,"line":131},[28,158169,31375],{"class":45},[28,158171,221],{"class":34},[28,158173,157706],{"class":320},[28,158175,227],{"class":34},[188,158177,158179],{"id":158178},"_362-or","3.6.2 or",[14,158181,158182],{},"只要一个条件成立就成立。",[18,158184,158186],{"className":20,"code":158185,"language":22,"meta":23,"style":23},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[25,158187,158188,158197,158206,158210,158222],{"__ignoreMap":23},[28,158189,158190,158193,158195],{"class":30,"line":31},[28,158191,158192],{"class":34},"is_vip ",[28,158194,39],{"class":38},[28,158196,125866],{"class":45},[28,158198,158199,158202,158204],{"class":30,"line":94},[28,158200,158201],{"class":34},"coupon ",[28,158203,39],{"class":38},[28,158205,153658],{"class":45},[28,158207,158208],{"class":30,"line":109},[28,158209,2477],{"emptyLinePlaceholder":144},[28,158211,158212,158214,158217,158219],{"class":30,"line":125},[28,158213,1608],{"class":38},[28,158215,158216],{"class":34}," is_vip ",[28,158218,115149],{"class":38},[28,158220,158221],{"class":34}," coupon:\n",[28,158223,158224,158226,158228,158231],{"class":30,"line":131},[28,158225,31375],{"class":45},[28,158227,221],{"class":34},[28,158229,158230],{"class":320},"\"可以享受优惠\"",[28,158232,227],{"class":34},[188,158234,158236],{"id":158235},"_363-not","3.6.3 not",[14,158238,158239],{},"取反。",[18,158241,158243],{"className":20,"code":158242,"language":22,"meta":23,"style":23},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[25,158244,158245,158254,158258,158267],{"__ignoreMap":23},[28,158246,158247,158250,158252],{"class":30,"line":31},[28,158248,158249],{"class":34},"is_closed ",[28,158251,39],{"class":38},[28,158253,125866],{"class":45},[28,158255,158256],{"class":30,"line":94},[28,158257,2477],{"emptyLinePlaceholder":144},[28,158259,158260,158262,158264],{"class":30,"line":109},[28,158261,1608],{"class":38},[28,158263,39006],{"class":38},[28,158265,158266],{"class":34}," is_closed:\n",[28,158268,158269,158271,158273,158276],{"class":30,"line":125},[28,158270,31375],{"class":45},[28,158272,221],{"class":34},[28,158274,158275],{"class":320},"\"店铺营业中\"",[28,158277,227],{"class":34},[159,158279,158281],{"id":158280},"_37-链式比较","3.7 链式比较",[14,158283,158284],{},"Python 支持链式比较：",[18,158286,158288],{"className":20,"code":158287,"language":22,"meta":23,"style":23},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158289,158290,158299,158303,158320],{"__ignoreMap":23},[28,158291,158292,158294,158296],{"class":30,"line":31},[28,158293,155417],{"class":34},[28,158295,39],{"class":38},[28,158297,158298],{"class":45}," 85\n",[28,158300,158301],{"class":30,"line":94},[28,158302,2477],{"emptyLinePlaceholder":144},[28,158304,158305,158307,158309,158312,158314,158316,158318],{"class":30,"line":109},[28,158306,1608],{"class":38},[28,158308,4170],{"class":45},[28,158310,158311],{"class":38}," \u003C=",[28,158313,157842],{"class":34},[28,158315,1665],{"class":38},[28,158317,5831],{"class":45},[28,158319,3816],{"class":34},[28,158321,158322,158324,158326,158329],{"class":30,"line":125},[28,158323,31375],{"class":45},[28,158325,221],{"class":34},[28,158327,158328],{"class":320},"\"成绩合法\"",[28,158330,227],{"class":34},[14,158332,158333],{},"等价于：",[18,158335,158337],{"className":20,"code":158336,"language":22,"meta":23,"style":23},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158338,158339,158359],{"__ignoreMap":23},[28,158340,158341,158343,158345,158347,158349,158351,158353,158355,158357],{"class":30,"line":31},[28,158342,1608],{"class":38},[28,158344,157842],{"class":34},[28,158346,1787],{"class":38},[28,158348,4170],{"class":45},[28,158350,120488],{"class":38},[28,158352,157842],{"class":34},[28,158354,1665],{"class":38},[28,158356,5831],{"class":45},[28,158358,3816],{"class":34},[28,158360,158361,158363,158365,158367],{"class":30,"line":94},[28,158362,31375],{"class":45},[28,158364,221],{"class":34},[28,158366,158328],{"class":320},[28,158368,227],{"class":34},[159,158370,158372],{"id":158371},"_38-真值和假值","3.8 真值和假值",[14,158374,116526,158375,158377],{},[25,158376,1608],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158379,158380],{},"假值：",[18,158382,158384],{"className":20,"code":158383,"language":22,"meta":23,"style":23},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[25,158385,158386,158390,158395,158399,158403,158408,158412,158416,158421],{"__ignoreMap":23},[28,158387,158388],{"class":30,"line":31},[28,158389,157576],{"class":45},[28,158391,158392],{"class":30,"line":94},[28,158393,158394],{"class":45},"None\n",[28,158396,158397],{"class":30,"line":109},[28,158398,3162],{"class":45},[28,158400,158401],{"class":30,"line":125},[28,158402,32418],{"class":45},[28,158404,158405],{"class":30,"line":131},[28,158406,158407],{"class":320},"\"\"\n",[28,158409,158410],{"class":30,"line":1291},[28,158411,32433],{"class":34},[28,158413,158414],{"class":30,"line":1297},[28,158415,2053],{"class":34},[28,158417,158418],{"class":30,"line":1388},[28,158419,158420],{"class":34},"{}\n",[28,158422,158423,158425],{"class":30,"line":1394},[28,158424,155349],{"class":45},[28,158426,2053],{"class":34},[14,158428,15212],{},[18,158430,158432],{"className":20,"code":158431,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[25,158433,158434,158448,158452,158459,158479,158485],{"__ignoreMap":23},[28,158435,158436,158438,158440,158442,158444,158446],{"class":30,"line":31},[28,158437,146595],{"class":34},[28,158439,39],{"class":38},[28,158441,60680],{"class":45},[28,158443,221],{"class":34},[28,158445,152438],{"class":320},[28,158447,227],{"class":34},[28,158449,158450],{"class":30,"line":94},[28,158451,2477],{"emptyLinePlaceholder":144},[28,158453,158454,158456],{"class":30,"line":109},[28,158455,1608],{"class":38},[28,158457,158458],{"class":34}," name:\n",[28,158460,158461,158463,158465,158467,158469,158471,158473,158475,158477],{"class":30,"line":125},[28,158462,31375],{"class":45},[28,158464,221],{"class":34},[28,158466,271],{"class":38},[28,158468,157113],{"class":320},[28,158470,1102],{"class":45},[28,158472,79885],{"class":34},[28,158474,1150],{"class":45},[28,158476,465],{"class":320},[28,158478,227],{"class":34},[28,158480,158481,158483],{"class":30,"line":131},[28,158482,1778],{"class":38},[28,158484,3816],{"class":34},[28,158486,158487,158489,158491,158494],{"class":30,"line":1291},[28,158488,31375],{"class":45},[28,158490,221],{"class":34},[28,158492,158493],{"class":320},"\"姓名不能为空\"",[28,158495,227],{"class":34},[159,158497,158499],{"id":158498},"_39-match语句","3.9 match语句",[14,158501,158502,158503,158505],{},"Python 3.10 开始支持 ",[25,158504,71340],{},"。它适合处理固定选项。",[18,158507,158509],{"className":20,"code":158508,"language":22,"meta":23,"style":23},"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",[25,158510,158511,158527,158531,158538,158548,158559,158568,158579,158588,158599,158606],{"__ignoreMap":23},[28,158512,158513,158516,158518,158520,158522,158525],{"class":30,"line":31},[28,158514,158515],{"class":34},"command ",[28,158517,39],{"class":38},[28,158519,60680],{"class":45},[28,158521,221],{"class":34},[28,158523,158524],{"class":320},"\"请输入命令:\"",[28,158526,227],{"class":34},[28,158528,158529],{"class":30,"line":94},[28,158530,2477],{"emptyLinePlaceholder":144},[28,158532,158533,158535],{"class":30,"line":109},[28,158534,71340],{"class":38},[28,158536,158537],{"class":34}," command:\n",[28,158539,158540,158543,158546],{"class":30,"line":125},[28,158541,158542],{"class":38},"    case",[28,158544,158545],{"class":320}," \"start\"",[28,158547,3816],{"class":34},[28,158549,158550,158552,158554,158557],{"class":30,"line":131},[28,158551,32527],{"class":45},[28,158553,221],{"class":34},[28,158555,158556],{"class":320},"\"启动\"",[28,158558,227],{"class":34},[28,158560,158561,158563,158566],{"class":30,"line":1291},[28,158562,158542],{"class":38},[28,158564,158565],{"class":320}," \"stop\"",[28,158567,3816],{"class":34},[28,158569,158570,158572,158574,158577],{"class":30,"line":1297},[28,158571,32527],{"class":45},[28,158573,221],{"class":34},[28,158575,158576],{"class":320},"\"停止\"",[28,158578,227],{"class":34},[28,158580,158581,158583,158586],{"class":30,"line":1388},[28,158582,158542],{"class":38},[28,158584,158585],{"class":320}," \"restart\"",[28,158587,3816],{"class":34},[28,158589,158590,158592,158594,158597],{"class":30,"line":1394},[28,158591,32527],{"class":45},[28,158593,221],{"class":34},[28,158595,158596],{"class":320},"\"重启\"",[28,158598,227],{"class":34},[28,158600,158601,158603],{"class":30,"line":1406},[28,158602,158542],{"class":38},[28,158604,158605],{"class":34}," _:\n",[28,158607,158608,158610,158612,158615],{"class":30,"line":1689},[28,158609,32527],{"class":45},[28,158611,221],{"class":34},[28,158613,158614],{"class":320},"\"未知命令\"",[28,158616,227],{"class":34},[14,158618,158619,158620,158622,158623,158625],{},"入门阶段掌握 ",[25,158621,154717],{}," 更重要，",[25,158624,71340],{}," 可以作为补充。",[159,158627,158629],{"id":158628},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158631,123351],{},[171,158633,158634,158637,158640],{},[174,158635,158636],{},"输入成绩。",[174,158638,158639],{},"判断成绩是否合法。",[174,158641,158642],{},"输出等级。",[14,158644,10112],{},[18,158646,158648],{"className":20,"code":158647,"language":22,"meta":23,"style":23},"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",[25,158649,158650,158668,158672,158690,158701,158713,158724,158736,158747,158760,158771,158783,158794,158800],{"__ignoreMap":23},[28,158651,158652,158654,158656,158658,158660,158662,158664,158666],{"class":30,"line":31},[28,158653,155417],{"class":34},[28,158655,39],{"class":38},[28,158657,109856],{"class":45},[28,158659,221],{"class":34},[28,158661,53896],{"class":45},[28,158663,221],{"class":34},[28,158665,152468],{"class":320},[28,158667,30573],{"class":34},[28,158669,158670],{"class":30,"line":94},[28,158671,2477],{"emptyLinePlaceholder":144},[28,158673,158674,158676,158678,158680,158682,158684,158686,158688],{"class":30,"line":109},[28,158675,1608],{"class":38},[28,158677,39006],{"class":38},[28,158679,4170],{"class":45},[28,158681,158311],{"class":38},[28,158683,157842],{"class":34},[28,158685,1665],{"class":38},[28,158687,5831],{"class":45},[28,158689,3816],{"class":34},[28,158691,158692,158694,158696,158699],{"class":30,"line":125},[28,158693,31375],{"class":45},[28,158695,221],{"class":34},[28,158697,158698],{"class":320},"\"成绩不合法\"",[28,158700,227],{"class":34},[28,158702,158703,158705,158707,158709,158711],{"class":30,"line":131},[28,158704,157865],{"class":38},[28,158706,157842],{"class":34},[28,158708,1787],{"class":38},[28,158710,157847],{"class":45},[28,158712,3816],{"class":34},[28,158714,158715,158717,158719,158722],{"class":30,"line":1291},[28,158716,31375],{"class":45},[28,158718,221],{"class":34},[28,158720,158721],{"class":320},"\"等级:A\"",[28,158723,227],{"class":34},[28,158725,158726,158728,158730,158732,158734],{"class":30,"line":1297},[28,158727,157865],{"class":38},[28,158729,157842],{"class":34},[28,158731,1787],{"class":38},[28,158733,157872],{"class":45},[28,158735,3816],{"class":34},[28,158737,158738,158740,158742,158745],{"class":30,"line":1388},[28,158739,31375],{"class":45},[28,158741,221],{"class":34},[28,158743,158744],{"class":320},"\"等级:B\"",[28,158746,227],{"class":34},[28,158748,158749,158751,158753,158755,158758],{"class":30,"line":1394},[28,158750,157865],{"class":38},[28,158752,157842],{"class":34},[28,158754,1787],{"class":38},[28,158756,158757],{"class":45}," 70",[28,158759,3816],{"class":34},[28,158761,158762,158764,158766,158769],{"class":30,"line":1406},[28,158763,31375],{"class":45},[28,158765,221],{"class":34},[28,158767,158768],{"class":320},"\"等级:C\"",[28,158770,227],{"class":34},[28,158772,158773,158775,158777,158779,158781],{"class":30,"line":1689},[28,158774,157865],{"class":38},[28,158776,157842],{"class":34},[28,158778,1787],{"class":38},[28,158780,157896],{"class":45},[28,158782,3816],{"class":34},[28,158784,158785,158787,158789,158792],{"class":30,"line":1694},[28,158786,31375],{"class":45},[28,158788,221],{"class":34},[28,158790,158791],{"class":320},"\"等级:D\"",[28,158793,227],{"class":34},[28,158795,158796,158798],{"class":30,"line":1700},[28,158797,1778],{"class":38},[28,158799,3816],{"class":34},[28,158801,158802,158804,158806,158809],{"class":30,"line":1705},[28,158803,31375],{"class":45},[28,158805,221],{"class":34},[28,158807,158808],{"class":320},"\"等级:E\"",[28,158810,227],{"class":34},[159,158812,158814],{"id":158813},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158816,123351],{},[171,158818,158819,158822,158825,158828],{},[174,158820,158821],{},"输入消费金额。",[174,158823,158824],{},"输入会员等级，普通、银卡、金卡。",[174,158826,158827],{},"普通不打折，银卡 9 折，金卡 8 折。",[174,158829,158830],{},"满 500 再减 50。",[14,158832,10112],{},[18,158834,158836],{"className":20,"code":158835,"language":22,"meta":23,"style":23},"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",[25,158837,158838,158858,158874,158878,158886,158890,158904,158914,158927,158936,158949,158957,158963,158974,158978,158992,158996,159010,159020,159024],{"__ignoreMap":23},[28,158839,158840,158843,158845,158847,158849,158851,158853,158856],{"class":30,"line":31},[28,158841,158842],{"class":34},"amount ",[28,158844,39],{"class":38},[28,158846,109856],{"class":45},[28,158848,221],{"class":34},[28,158850,53896],{"class":45},[28,158852,221],{"class":34},[28,158854,158855],{"class":320},"\"请输入消费金额:\"",[28,158857,30573],{"class":34},[28,158859,158860,158863,158865,158867,158869,158872],{"class":30,"line":94},[28,158861,158862],{"class":34},"level ",[28,158864,39],{"class":38},[28,158866,60680],{"class":45},[28,158868,221],{"class":34},[28,158870,158871],{"class":320},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[28,158873,227],{"class":34},[28,158875,158876],{"class":30,"line":109},[28,158877,2477],{"emptyLinePlaceholder":144},[28,158879,158880,158882,158884],{"class":30,"line":125},[28,158881,157295],{"class":34},[28,158883,39],{"class":38},[28,158885,55774],{"class":45},[28,158887,158888],{"class":30,"line":131},[28,158889,2477],{"emptyLinePlaceholder":144},[28,158891,158892,158894,158897,158899,158902],{"class":30,"line":1291},[28,158893,1608],{"class":38},[28,158895,158896],{"class":34}," level ",[28,158898,3026],{"class":38},[28,158900,158901],{"class":320}," \"银卡\"",[28,158903,3816],{"class":34},[28,158905,158906,158909,158911],{"class":30,"line":1297},[28,158907,158908],{"class":34},"    discount ",[28,158910,39],{"class":38},[28,158912,158913],{"class":45}," 0.9\n",[28,158915,158916,158918,158920,158922,158925],{"class":30,"line":1388},[28,158917,157865],{"class":38},[28,158919,158896],{"class":34},[28,158921,3026],{"class":38},[28,158923,158924],{"class":320}," \"金卡\"",[28,158926,3816],{"class":34},[28,158928,158929,158931,158933],{"class":30,"line":1394},[28,158930,158908],{"class":34},[28,158932,39],{"class":38},[28,158934,158935],{"class":45}," 0.8\n",[28,158937,158938,158940,158942,158944,158947],{"class":30,"line":1406},[28,158939,157865],{"class":38},[28,158941,158896],{"class":34},[28,158943,3026],{"class":38},[28,158945,158946],{"class":320}," \"普通\"",[28,158948,3816],{"class":34},[28,158950,158951,158953,158955],{"class":30,"line":1689},[28,158952,158908],{"class":34},[28,158954,39],{"class":38},[28,158956,55774],{"class":45},[28,158958,158959,158961],{"class":30,"line":1694},[28,158960,1778],{"class":38},[28,158962,3816],{"class":34},[28,158964,158965,158967,158969,158972],{"class":30,"line":1700},[28,158966,31375],{"class":45},[28,158968,221],{"class":34},[28,158970,158971],{"class":320},"\"会员等级输入错误，按普通会员计算\"",[28,158973,227],{"class":34},[28,158975,158976],{"class":30,"line":1705},[28,158977,2477],{"emptyLinePlaceholder":144},[28,158979,158980,158983,158985,158988,158990],{"class":30,"line":1719},[28,158981,158982],{"class":34},"pay ",[28,158984,39],{"class":38},[28,158986,158987],{"class":34}," amount ",[28,158989,668],{"class":38},[28,158991,157334],{"class":34},[28,158993,158994],{"class":30,"line":1724},[28,158995,2477],{"emptyLinePlaceholder":144},[28,158997,158998,159000,159003,159005,159008],{"class":30,"line":1730},[28,158999,1608],{"class":38},[28,159001,159002],{"class":34}," pay ",[28,159004,1787],{"class":38},[28,159006,159007],{"class":45}," 500",[28,159009,3816],{"class":34},[28,159011,159012,159015,159017],{"class":30,"line":1751},[28,159013,159014],{"class":34},"    pay ",[28,159016,150311],{"class":38},[28,159018,159019],{"class":45}," 50\n",[28,159021,159022],{"class":30,"line":1756},[28,159023,2477],{"emptyLinePlaceholder":144},[28,159025,159026,159028,159030,159032,159034,159036,159039,159041,159043,159045],{"class":30,"line":1770},[28,159027,30491],{"class":45},[28,159029,221],{"class":34},[28,159031,271],{"class":38},[28,159033,157415],{"class":320},[28,159035,1102],{"class":45},[28,159037,159038],{"class":34},"pay",[28,159040,157218],{"class":38},[28,159042,1150],{"class":45},[28,159044,157071],{"class":320},[28,159046,227],{"class":34},[159,159048,159050],{"id":159049},"_312-易错点","3.12 易错点",[171,159052,159053,159056,159059,159062,159067],{},[174,159054,159055],{},"冒号不能漏。",[174,159057,159058],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[174,159060,159061],{},"多分支判断要注意顺序。",[174,159063,159064,159065,28463],{},"判断相等用 ",[25,159066,3026],{},[174,159068,159069],{},"字符串比较区分大小写：",[18,159071,159073],{"className":20,"code":159072,"language":22,"meta":23,"style":23},"\"Y\" == \"y\"  # False\n",[25,159074,159075],{"__ignoreMap":23},[28,159076,159077,159080,159082,159084],{"class":30,"line":31},[28,159078,159079],{"class":320},"\"Y\"",[28,159081,101618],{"class":38},[28,159083,158064],{"class":320},[28,159085,159086],{"class":105},"  # False\n",[14,159088,159089],{},"可转换后再判断：",[18,159091,159093],{"className":20,"code":159092,"language":22,"meta":23,"style":23},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[25,159094,159095,159112,159125],{"__ignoreMap":23},[28,159096,159097,159100,159102,159104,159106,159109],{"class":30,"line":31},[28,159098,159099],{"class":34},"answer ",[28,159101,39],{"class":38},[28,159103,60680],{"class":45},[28,159105,221],{"class":34},[28,159107,159108],{"class":320},"\"是否继续(y\u002Fn):\"",[28,159110,159111],{"class":34},").lower()\n",[28,159113,159114,159116,159119,159121,159123],{"class":30,"line":94},[28,159115,1608],{"class":38},[28,159117,159118],{"class":34}," answer ",[28,159120,3026],{"class":38},[28,159122,158064],{"class":320},[28,159124,3816],{"class":34},[28,159126,159127,159129,159131,159134],{"class":30,"line":109},[28,159128,31375],{"class":45},[28,159130,221],{"class":34},[28,159132,159133],{"class":320},"\"继续\"",[28,159135,227],{"class":34},[159,159137,159139],{"id":159138},"_313-本章练习","3.13 本章练习",[171,159141,159142,159145,159148,159151,159161],{},[174,159143,159144],{},"输入年龄，判断是否成年。",[174,159146,159147],{},"输入年份，判断是否为闰年。",[174,159149,159150],{},"输入三个数字，输出最大值。",[174,159152,159153,159154,159157,159158,159160],{},"写登录判断：用户名是 ",[25,159155,159156],{},"admin"," 且密码是 ",[25,159159,15161],{}," 才登录成功。",[174,159162,159163],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[136,159165,159166],{},"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":23,"searchDepth":94,"depth":94,"links":159168},[159169,159170,159171,159172,159173,159174,159179,159180,159181,159182,159183,159184,159185],{"id":157557,"depth":94,"text":157558},{"id":157610,"depth":94,"text":157611},{"id":157714,"depth":94,"text":157715},{"id":157804,"depth":94,"text":157805},{"id":157994,"depth":94,"text":157995},{"id":158117,"depth":94,"text":158118,"children":159175},[159176,159177,159178],{"id":158121,"depth":109,"text":158122},{"id":158178,"depth":109,"text":158179},{"id":158235,"depth":109,"text":158236},{"id":158280,"depth":94,"text":158281},{"id":158371,"depth":94,"text":158372},{"id":158498,"depth":94,"text":158499},{"id":158628,"depth":94,"text":158629},{"id":158813,"depth":94,"text":158814},{"id":159049,"depth":94,"text":159050},{"id":159138,"depth":94,"text":159139},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157549,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159192,"title":159193,"body":159194,"description":141,"extension":142,"meta":160963,"navigation":144,"path":160964,"seo":160965,"stem":160966,"__hash__":160967},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159195,"toc":160943},[159196,159199,159203,159209,159212,159229,159233,159235,159252,159254,159299,159301,159318,159322,159325,159391,159394,159412,159416,159577,159586,159590,159594,159599,159646,159648,159654,159658,159663,159710,159712,159718,159722,159727,159763,159766,159813,159817,159823,159881,159886,159917,159922,159926,159981,159984,160056,160059,160118,160122,160125,160200,160203,160207,160313,160316,160342,160346,160358,160427,160430,160522,160526,160528,160539,160541,160671,160675,160877,160885,160889,160919,160923,160940],[10,159197,159193],{"id":159198},"_4-循环语句",[159,159200,159202],{"id":159201},"_41-为什么需要循环","4.1 为什么需要循环",[14,159204,159205,159206,159208],{},"如果要输出 1 到 100，不应该写 100 行 ",[25,159207,146531],{},"，而应该用循环。",[14,159210,159211],{},"循环适合处理重复任务：",[171,159213,159214,159217,159220,159223,159226],{},[174,159215,159216],{},"重复输出。",[174,159218,159219],{},"重复输入。",[174,159221,159222],{},"遍历数据。",[174,159224,159225],{},"持续执行菜单。",[174,159227,159228],{},"批量处理文件或数据。",[159,159230,159232],{"id":159231},"_42-while循环","4.2 while循环",[14,159234,5258],{},[18,159236,159238],{"className":20,"code":159237,"language":22,"meta":23,"style":23},"while 条件:\n    循环体\n",[25,159239,159240,159247],{"__ignoreMap":23},[28,159241,159242,159244],{"class":30,"line":31},[28,159243,108722],{"class":38},[28,159245,159246],{"class":34}," 条件:\n",[28,159248,159249],{"class":30,"line":94},[28,159250,159251],{"class":34},"    循环体\n",[14,159253,15212],{},[18,159255,159257],{"className":20,"code":159256,"language":22,"meta":23,"style":23},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[25,159258,159259,159267,159271,159283,159290],{"__ignoreMap":23},[28,159260,159261,159263,159265],{"class":30,"line":31},[28,159262,100207],{"class":34},[28,159264,39],{"class":38},[28,159266,55774],{"class":45},[28,159268,159269],{"class":30,"line":94},[28,159270,2477],{"emptyLinePlaceholder":144},[28,159272,159273,159275,159277,159279,159281],{"class":30,"line":109},[28,159274,108722],{"class":38},[28,159276,9515],{"class":34},[28,159278,1665],{"class":38},[28,159280,2225],{"class":45},[28,159282,3816],{"class":34},[28,159284,159285,159287],{"class":30,"line":125},[28,159286,31375],{"class":45},[28,159288,159289],{"class":34},"(i)\n",[28,159291,159292,159295,159297],{"class":30,"line":131},[28,159293,159294],{"class":34},"    i ",[28,159296,9554],{"class":38},[28,159298,55774],{"class":45},[14,159300,81004],{},[171,159302,159303,159309,159312,159315],{},[174,159304,159305,159306,28463],{},"判断条件 ",[25,159307,159308],{},"i \u003C= 5",[174,159310,159311],{},"条件成立，执行循环体。",[174,159313,159314],{},"执行完后回到条件判断。",[174,159316,159317],{},"条件不成立，退出循环。",[159,159319,159321],{"id":159320},"_43-while累加","4.3 while累加",[14,159323,159324],{},"计算 1 到 100 的和：",[18,159326,159328],{"className":20,"code":159327,"language":22,"meta":23,"style":23},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[25,159329,159330,159338,159346,159350,159362,159372,159380,159384],{"__ignoreMap":23},[28,159331,159332,159334,159336],{"class":30,"line":31},[28,159333,100207],{"class":34},[28,159335,39],{"class":38},[28,159337,55774],{"class":45},[28,159339,159340,159342,159344],{"class":30,"line":94},[28,159341,157319],{"class":34},[28,159343,39],{"class":38},[28,159345,47409],{"class":45},[28,159347,159348],{"class":30,"line":109},[28,159349,2477],{"emptyLinePlaceholder":144},[28,159351,159352,159354,159356,159358,159360],{"class":30,"line":125},[28,159353,108722],{"class":38},[28,159355,9515],{"class":34},[28,159357,1665],{"class":38},[28,159359,5831],{"class":45},[28,159361,3816],{"class":34},[28,159363,159364,159367,159369],{"class":30,"line":131},[28,159365,159366],{"class":34},"    total ",[28,159368,9554],{"class":38},[28,159370,159371],{"class":34}," i\n",[28,159373,159374,159376,159378],{"class":30,"line":1291},[28,159375,159294],{"class":34},[28,159377,9554],{"class":38},[28,159379,55774],{"class":45},[28,159381,159382],{"class":30,"line":1297},[28,159383,2477],{"emptyLinePlaceholder":144},[28,159385,159386,159388],{"class":30,"line":1388},[28,159387,30491],{"class":45},[28,159389,159390],{"class":34},"(total)\n",[14,159392,159393],{},"核心思想：",[171,159395,159396,159401,159406],{},[174,159397,159398,159400],{},[25,159399,654],{}," 控制循环次数。",[174,159402,159403,159405],{},[25,159404,157420],{}," 保存累加结果。",[174,159407,159408,159409,159411],{},"每轮循环都要更新 ",[25,159410,654],{},"，否则可能死循环。",[159,159413,159415],{"id":159414},"_44-while猜数字","4.4 while猜数字",[18,159417,159419],{"className":20,"code":159418,"language":22,"meta":23,"style":23},"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",[25,159420,159421,159427,159431,159448,159456,159460,159468,159488,159497,159501,159513,159524,159534,159545,159551,159573],{"__ignoreMap":23},[28,159422,159423,159425],{"class":30,"line":31},[28,159424,30468],{"class":38},[28,159426,45404],{"class":34},[28,159428,159429],{"class":30,"line":94},[28,159430,2477],{"emptyLinePlaceholder":144},[28,159432,159433,159435,159437,159440,159442,159444,159446],{"class":30,"line":109},[28,159434,159099],{"class":34},[28,159436,39],{"class":38},[28,159438,159439],{"class":34}," random.randint(",[28,159441,46],{"class":45},[28,159443,12512],{"class":34},[28,159445,525],{"class":45},[28,159447,227],{"class":34},[28,159449,159450,159452,159454],{"class":30,"line":125},[28,159451,146750],{"class":34},[28,159453,39],{"class":38},[28,159455,47409],{"class":45},[28,159457,159458],{"class":30,"line":131},[28,159459,2477],{"emptyLinePlaceholder":144},[28,159461,159462,159464,159466],{"class":30,"line":1291},[28,159463,108722],{"class":38},[28,159465,95351],{"class":45},[28,159467,3816],{"class":34},[28,159469,159470,159473,159475,159477,159479,159481,159483,159486],{"class":30,"line":1297},[28,159471,159472],{"class":34},"    guess ",[28,159474,39],{"class":38},[28,159476,2459],{"class":45},[28,159478,221],{"class":34},[28,159480,53896],{"class":45},[28,159482,221],{"class":34},[28,159484,159485],{"class":320},"\"请输入1到100之间的数字:\"",[28,159487,30573],{"class":34},[28,159489,159490,159493,159495],{"class":30,"line":1388},[28,159491,159492],{"class":34},"    count ",[28,159494,9554],{"class":38},[28,159496,55774],{"class":45},[28,159498,159499],{"class":30,"line":1394},[28,159500,2477],{"emptyLinePlaceholder":144},[28,159502,159503,159505,159508,159510],{"class":30,"line":1406},[28,159504,3178],{"class":38},[28,159506,159507],{"class":34}," guess ",[28,159509,1164],{"class":38},[28,159511,159512],{"class":34}," answer:\n",[28,159514,159515,159517,159519,159522],{"class":30,"line":1689},[28,159516,32527],{"class":45},[28,159518,221],{"class":34},[28,159520,159521],{"class":320},"\"猜大了\"",[28,159523,227],{"class":34},[28,159525,159526,159528,159530,159532],{"class":30,"line":1694},[28,159527,39369],{"class":38},[28,159529,159507],{"class":34},[28,159531,99],{"class":38},[28,159533,159512],{"class":34},[28,159535,159536,159538,159540,159543],{"class":30,"line":1700},[28,159537,32527],{"class":45},[28,159539,221],{"class":34},[28,159541,159542],{"class":320},"\"猜小了\"",[28,159544,227],{"class":34},[28,159546,159547,159549],{"class":30,"line":1705},[28,159548,158081],{"class":38},[28,159550,3816],{"class":34},[28,159552,159553,159555,159557,159559,159562,159564,159566,159568,159571],{"class":30,"line":1719},[28,159554,32527],{"class":45},[28,159556,221],{"class":34},[28,159558,271],{"class":38},[28,159560,159561],{"class":320},"\"猜对了，一共猜了",[28,159563,1102],{"class":45},[28,159565,84509],{"class":34},[28,159567,1150],{"class":45},[28,159569,159570],{"class":320},"次\"",[28,159572,227],{"class":34},[28,159574,159575],{"class":30,"line":1724},[28,159576,31703],{"class":38},[14,159578,159579,159582,159583,159585],{},[25,159580,159581],{},"while True"," 表示无限循环，通常配合 ",[25,159584,2130],{}," 使用。",[159,159587,159589],{"id":159588},"_45-break和continue","4.5 break和continue",[188,159591,159593],{"id":159592},"_451-break","4.5.1 break",[14,159595,159596,159598],{},[25,159597,2130],{}," 直接结束整个循环。",[18,159600,159602],{"className":20,"code":159601,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[25,159603,159604,159624,159636,159640],{"__ignoreMap":23},[28,159605,159606,159608,159610,159612,159614,159616,159618,159620,159622],{"class":30,"line":31},[28,159607,3102],{"class":38},[28,159609,9515],{"class":34},[28,159611,26121],{"class":38},[28,159613,32519],{"class":45},[28,159615,221],{"class":34},[28,159617,46],{"class":45},[28,159619,12512],{"class":34},[28,159621,558],{"class":45},[28,159623,30862],{"class":34},[28,159625,159626,159628,159630,159632,159634],{"class":30,"line":94},[28,159627,3178],{"class":38},[28,159629,9515],{"class":34},[28,159631,3026],{"class":38},[28,159633,78145],{"class":45},[28,159635,3816],{"class":34},[28,159637,159638],{"class":30,"line":109},[28,159639,31703],{"class":38},[28,159641,159642,159644],{"class":30,"line":125},[28,159643,31375],{"class":45},[28,159645,159289],{"class":34},[14,159647,146516],{},[18,159649,159652],{"className":159650,"code":159651,"language":5264,"meta":23},[5262],"1\n2\n",[25,159653,159651],{"__ignoreMap":23},[188,159655,159657],{"id":159656},"_452-continue","4.5.2 continue",[14,159659,159660,159662],{},[25,159661,154731],{}," 跳过本轮剩余代码，进入下一轮循环。",[18,159664,159666],{"className":20,"code":159665,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[25,159667,159668,159688,159700,159704],{"__ignoreMap":23},[28,159669,159670,159672,159674,159676,159678,159680,159682,159684,159686],{"class":30,"line":31},[28,159671,3102],{"class":38},[28,159673,9515],{"class":34},[28,159675,26121],{"class":38},[28,159677,32519],{"class":45},[28,159679,221],{"class":34},[28,159681,46],{"class":45},[28,159683,12512],{"class":34},[28,159685,558],{"class":45},[28,159687,30862],{"class":34},[28,159689,159690,159692,159694,159696,159698],{"class":30,"line":94},[28,159691,3178],{"class":38},[28,159693,9515],{"class":34},[28,159695,3026],{"class":38},[28,159697,78145],{"class":45},[28,159699,3816],{"class":34},[28,159701,159702],{"class":30,"line":109},[28,159703,148571],{"class":38},[28,159705,159706,159708],{"class":30,"line":125},[28,159707,31375],{"class":45},[28,159709,159289],{"class":34},[14,159711,146516],{},[18,159713,159716],{"className":159714,"code":159715,"language":5264,"meta":23},[5262],"1\n2\n4\n5\n",[25,159717,159715],{"__ignoreMap":23},[159,159719,159721],{"id":159720},"_46-for循环","4.6 for循环",[14,159723,159724,159726],{},[25,159725,3102],{}," 常用于遍历序列。",[18,159728,159730],{"className":20,"code":159729,"language":22,"meta":23,"style":23},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[25,159731,159732,159741,159745,159756],{"__ignoreMap":23},[28,159733,159734,159736,159738],{"class":30,"line":31},[28,159735,146595],{"class":34},[28,159737,39],{"class":38},[28,159739,159740],{"class":320}," \"python\"\n",[28,159742,159743],{"class":30,"line":94},[28,159744,2477],{"emptyLinePlaceholder":144},[28,159746,159747,159749,159752,159754],{"class":30,"line":109},[28,159748,3102],{"class":38},[28,159750,159751],{"class":34}," ch ",[28,159753,26121],{"class":38},[28,159755,158458],{"class":34},[28,159757,159758,159760],{"class":30,"line":125},[28,159759,31375],{"class":45},[28,159761,159762],{"class":34},"(ch)\n",[14,159764,159765],{},"遍历列表：",[18,159767,159769],{"className":20,"code":159768,"language":22,"meta":23,"style":23},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[25,159770,159771,159793,159797,159807],{"__ignoreMap":23},[28,159772,159773,159776,159778,159780,159782,159784,159786,159788,159791],{"class":30,"line":31},[28,159774,159775],{"class":34},"students ",[28,159777,39],{"class":38},[28,159779,52301],{"class":34},[28,159781,149947],{"class":320},[28,159783,12512],{"class":34},[28,159785,150995],{"class":320},[28,159787,12512],{"class":34},[28,159789,159790],{"class":320},"\"小刚\"",[28,159792,33322],{"class":34},[28,159794,159795],{"class":30,"line":94},[28,159796,2477],{"emptyLinePlaceholder":144},[28,159798,159799,159801,159803,159805],{"class":30,"line":109},[28,159800,3102],{"class":38},[28,159802,152196],{"class":34},[28,159804,26121],{"class":38},[28,159806,152201],{"class":34},[28,159808,159809,159811],{"class":30,"line":125},[28,159810,31375],{"class":45},[28,159812,150101],{"class":34},[159,159814,159816],{"id":159815},"_47-range函数","4.7 range函数",[14,159818,159819,159822],{},[25,159820,159821],{},"range()"," 用于生成整数序列。",[18,159824,159826],{"className":20,"code":159825,"language":22,"meta":23,"style":23},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[25,159827,159828,159842,159860],{"__ignoreMap":23},[28,159829,159830,159832,159834,159836,159839],{"class":30,"line":31},[28,159831,33492],{"class":45},[28,159833,221],{"class":34},[28,159835,533],{"class":45},[28,159837,159838],{"class":34},")          ",[28,159840,159841],{"class":105},"# 0,1,2,3,4\n",[28,159843,159844,159846,159848,159850,159852,159854,159857],{"class":30,"line":94},[28,159845,33492],{"class":45},[28,159847,221],{"class":34},[28,159849,46],{"class":45},[28,159851,12512],{"class":34},[28,159853,533],{"class":45},[28,159855,159856],{"class":34},")       ",[28,159858,159859],{"class":105},"# 1,2,3,4\n",[28,159861,159862,159864,159866,159868,159870,159872,159874,159876,159878],{"class":30,"line":109},[28,159863,33492],{"class":45},[28,159865,221],{"class":34},[28,159867,46],{"class":45},[28,159869,12512],{"class":34},[28,159871,659],{"class":45},[28,159873,12512],{"class":34},[28,159875,52],{"class":45},[28,159877,155720],{"class":34},[28,159879,159880],{"class":105},"# 1,3,5,7,9\n",[14,159882,159883,159884,24696],{},"配合 ",[25,159885,3102],{},[18,159887,159889],{"className":20,"code":159888,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    print(i)\n",[25,159890,159891,159911],{"__ignoreMap":23},[28,159892,159893,159895,159897,159899,159901,159903,159905,159907,159909],{"class":30,"line":31},[28,159894,3102],{"class":38},[28,159896,9515],{"class":34},[28,159898,26121],{"class":38},[28,159900,32519],{"class":45},[28,159902,221],{"class":34},[28,159904,46],{"class":45},[28,159906,12512],{"class":34},[28,159908,558],{"class":45},[28,159910,30862],{"class":34},[28,159912,159913,159915],{"class":30,"line":94},[28,159914,31375],{"class":45},[28,159916,159289],{"class":34},[14,159918,9102,159919,159921],{},[25,159920,33492],{}," 的结束值不包含在内。",[159,159923,159925],{"id":159924},"_48-for循环求和","4.8 for循环求和",[18,159927,159929],{"className":20,"code":159928,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[25,159930,159931,159939,159943,159963,159971,159975],{"__ignoreMap":23},[28,159932,159933,159935,159937],{"class":30,"line":31},[28,159934,157319],{"class":34},[28,159936,39],{"class":38},[28,159938,47409],{"class":45},[28,159940,159941],{"class":30,"line":94},[28,159942,2477],{"emptyLinePlaceholder":144},[28,159944,159945,159947,159949,159951,159953,159955,159957,159959,159961],{"class":30,"line":109},[28,159946,3102],{"class":38},[28,159948,9515],{"class":34},[28,159950,26121],{"class":38},[28,159952,32519],{"class":45},[28,159954,221],{"class":34},[28,159956,46],{"class":45},[28,159958,12512],{"class":34},[28,159960,551],{"class":45},[28,159962,30862],{"class":34},[28,159964,159965,159967,159969],{"class":30,"line":125},[28,159966,159366],{"class":34},[28,159968,9554],{"class":38},[28,159970,159371],{"class":34},[28,159972,159973],{"class":30,"line":131},[28,159974,2477],{"emptyLinePlaceholder":144},[28,159976,159977,159979],{"class":30,"line":1291},[28,159978,30491],{"class":45},[28,159980,159390],{"class":34},[14,159982,159983],{},"求偶数和：",[18,159985,159987],{"className":20,"code":159986,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[25,159988,159989,159997,160001,160021,160037,160046,160050],{"__ignoreMap":23},[28,159990,159991,159993,159995],{"class":30,"line":31},[28,159992,157319],{"class":34},[28,159994,39],{"class":38},[28,159996,47409],{"class":45},[28,159998,159999],{"class":30,"line":94},[28,160000,2477],{"emptyLinePlaceholder":144},[28,160002,160003,160005,160007,160009,160011,160013,160015,160017,160019],{"class":30,"line":109},[28,160004,3102],{"class":38},[28,160006,9515],{"class":34},[28,160008,26121],{"class":38},[28,160010,32519],{"class":45},[28,160012,221],{"class":34},[28,160014,46],{"class":45},[28,160016,12512],{"class":34},[28,160018,551],{"class":45},[28,160020,30862],{"class":34},[28,160022,160023,160025,160027,160029,160031,160033,160035],{"class":30,"line":125},[28,160024,3178],{"class":38},[28,160026,9515],{"class":34},[28,160028,542],{"class":38},[28,160030,14832],{"class":45},[28,160032,101618],{"class":38},[28,160034,4170],{"class":45},[28,160036,3816],{"class":34},[28,160038,160039,160042,160044],{"class":30,"line":131},[28,160040,160041],{"class":34},"        total ",[28,160043,9554],{"class":38},[28,160045,159371],{"class":34},[28,160047,160048],{"class":30,"line":1291},[28,160049,2477],{"emptyLinePlaceholder":144},[28,160051,160052,160054],{"class":30,"line":1297},[28,160053,30491],{"class":45},[28,160055,159390],{"class":34},[14,160057,160058],{},"也可以：",[18,160060,160062],{"className":20,"code":160061,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[25,160063,160064,160072,160076,160100,160108,160112],{"__ignoreMap":23},[28,160065,160066,160068,160070],{"class":30,"line":31},[28,160067,157319],{"class":34},[28,160069,39],{"class":38},[28,160071,47409],{"class":45},[28,160073,160074],{"class":30,"line":94},[28,160075,2477],{"emptyLinePlaceholder":144},[28,160077,160078,160080,160082,160084,160086,160088,160090,160092,160094,160096,160098],{"class":30,"line":109},[28,160079,3102],{"class":38},[28,160081,9515],{"class":34},[28,160083,26121],{"class":38},[28,160085,32519],{"class":45},[28,160087,221],{"class":34},[28,160089,52],{"class":45},[28,160091,12512],{"class":34},[28,160093,551],{"class":45},[28,160095,12512],{"class":34},[28,160097,52],{"class":45},[28,160099,30862],{"class":34},[28,160101,160102,160104,160106],{"class":30,"line":125},[28,160103,159366],{"class":34},[28,160105,9554],{"class":38},[28,160107,159371],{"class":34},[28,160109,160110],{"class":30,"line":131},[28,160111,2477],{"emptyLinePlaceholder":144},[28,160113,160114,160116],{"class":30,"line":1291},[28,160115,30491],{"class":45},[28,160117,159390],{"class":34},[159,160119,160121],{"id":160120},"_49-循环嵌套","4.9 循环嵌套",[14,160123,160124],{},"嵌套循环就是循环里面再写循环。",[18,160126,160128],{"className":20,"code":160127,"language":22,"meta":23,"style":23},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[25,160129,160130,160150,160170],{"__ignoreMap":23},[28,160131,160132,160134,160136,160138,160140,160142,160144,160146,160148],{"class":30,"line":31},[28,160133,3102],{"class":38},[28,160135,9515],{"class":34},[28,160137,26121],{"class":38},[28,160139,32519],{"class":45},[28,160141,221],{"class":34},[28,160143,46],{"class":45},[28,160145,12512],{"class":34},[28,160147,507],{"class":45},[28,160149,30862],{"class":34},[28,160151,160152,160154,160156,160158,160160,160162,160164,160166,160168],{"class":30,"line":94},[28,160153,3278],{"class":38},[28,160155,9577],{"class":34},[28,160157,26121],{"class":38},[28,160159,32519],{"class":45},[28,160161,221],{"class":34},[28,160163,46],{"class":45},[28,160165,12512],{"class":34},[28,160167,507],{"class":45},[28,160169,30862],{"class":34},[28,160171,160172,160174,160176,160178,160181,160183,160185,160187,160190,160192,160194,160196,160198],{"class":30,"line":109},[28,160173,32527],{"class":45},[28,160175,221],{"class":34},[28,160177,271],{"class":38},[28,160179,160180],{"class":320},"\"i=",[28,160182,1102],{"class":45},[28,160184,654],{"class":34},[28,160186,1150],{"class":45},[28,160188,160189],{"class":320},", j=",[28,160191,1102],{"class":45},[28,160193,680],{"class":34},[28,160195,1150],{"class":45},[28,160197,465],{"class":320},[28,160199,227],{"class":34},[14,160201,160202],{},"外层循环执行一次，内层循环执行完整一轮。",[159,160204,160206],{"id":160205},"_410-九九乘法表","4.10 九九乘法表",[18,160208,160210],{"className":20,"code":160209,"language":22,"meta":23,"style":23},"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",[25,160211,160212,160232,160255,160307],{"__ignoreMap":23},[28,160213,160214,160216,160218,160220,160222,160224,160226,160228,160230],{"class":30,"line":31},[28,160215,3102],{"class":38},[28,160217,9515],{"class":34},[28,160219,26121],{"class":38},[28,160221,32519],{"class":45},[28,160223,221],{"class":34},[28,160225,46],{"class":45},[28,160227,12512],{"class":34},[28,160229,659],{"class":45},[28,160231,30862],{"class":34},[28,160233,160234,160236,160238,160240,160242,160244,160246,160249,160251,160253],{"class":30,"line":94},[28,160235,3278],{"class":38},[28,160237,9577],{"class":34},[28,160239,26121],{"class":38},[28,160241,32519],{"class":45},[28,160243,221],{"class":34},[28,160245,46],{"class":45},[28,160247,160248],{"class":34},", i ",[28,160250,693],{"class":38},[28,160252,25196],{"class":45},[28,160254,30862],{"class":34},[28,160256,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297,160299,160301,160303,160305],{"class":30,"line":109},[28,160258,32527],{"class":45},[28,160260,221],{"class":34},[28,160262,271],{"class":38},[28,160264,465],{"class":320},[28,160266,1102],{"class":45},[28,160268,680],{"class":34},[28,160270,1150],{"class":45},[28,160272,668],{"class":320},[28,160274,1102],{"class":45},[28,160276,654],{"class":34},[28,160278,1150],{"class":45},[28,160280,39],{"class":320},[28,160282,1102],{"class":45},[28,160284,100207],{"class":34},[28,160286,668],{"class":38},[28,160288,3487],{"class":34},[28,160290,1150],{"class":45},[28,160292,465],{"class":320},[28,160294,12512],{"class":34},[28,160296,45877],{"class":5293},[28,160298,39],{"class":38},[28,160300,465],{"class":320},[28,160302,1307],{"class":45},[28,160304,465],{"class":320},[28,160306,227],{"class":34},[28,160308,160309,160311],{"class":30,"line":125},[28,160310,31375],{"class":45},[28,160312,2053],{"class":34},[14,160314,160315],{},"关键点：",[171,160317,160318,160324,160330,160336],{},[174,160319,160320,160321,160323],{},"外层 ",[25,160322,654],{}," 控制行。",[174,160325,160326,160327,160329],{},"内层 ",[25,160328,680],{}," 控制列。",[174,160331,160332,160333,160335],{},"每行结束后用 ",[25,160334,146531],{}," 换行。",[174,160337,160338,160341],{},[25,160339,160340],{},"end=\"\\t\""," 让同一行的内容横向排列。",[159,160343,160345],{"id":160344},"_411-循环else","4.11 循环else",[14,160347,160348,160349,160351,160352,160354,160355,160357],{},"Python 的循环可以带 ",[25,160350,1778],{},"。当循环正常结束时执行 ",[25,160353,1778],{},"，如果被 ",[25,160356,2130],{}," 打断，则不执行。",[18,160359,160361],{"className":20,"code":160360,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160362,160363,160383,160395,160406,160410,160416],{"__ignoreMap":23},[28,160364,160365,160367,160369,160371,160373,160375,160377,160379,160381],{"class":30,"line":31},[28,160366,3102],{"class":38},[28,160368,9515],{"class":34},[28,160370,26121],{"class":38},[28,160372,32519],{"class":45},[28,160374,221],{"class":34},[28,160376,46],{"class":45},[28,160378,12512],{"class":34},[28,160380,558],{"class":45},[28,160382,30862],{"class":34},[28,160384,160385,160387,160389,160391,160393],{"class":30,"line":94},[28,160386,3178],{"class":38},[28,160388,9515],{"class":34},[28,160390,3026],{"class":38},[28,160392,2115],{"class":45},[28,160394,3816],{"class":34},[28,160396,160397,160399,160401,160404],{"class":30,"line":109},[28,160398,32527],{"class":45},[28,160400,221],{"class":34},[28,160402,160403],{"class":320},"\"找到了\"",[28,160405,227],{"class":34},[28,160407,160408],{"class":30,"line":125},[28,160409,31703],{"class":38},[28,160411,160412,160414],{"class":30,"line":131},[28,160413,1778],{"class":38},[28,160415,3816],{"class":34},[28,160417,160418,160420,160422,160425],{"class":30,"line":1291},[28,160419,31375],{"class":45},[28,160421,221],{"class":34},[28,160423,160424],{"class":320},"\"没找到\"",[28,160426,227],{"class":34},[14,160428,160429],{},"常用于搜索。",[18,160431,160433],{"className":20,"code":160432,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160434,160435,160456,160465,160469,160481,160492,160502,160506,160512],{"__ignoreMap":23},[28,160436,160437,160440,160442,160444,160446,160448,160450,160452,160454],{"class":30,"line":31},[28,160438,160439],{"class":34},"names ",[28,160441,39],{"class":38},[28,160443,52301],{"class":34},[28,160445,149947],{"class":320},[28,160447,12512],{"class":34},[28,160449,150995],{"class":320},[28,160451,12512],{"class":34},[28,160453,159790],{"class":320},[28,160455,33322],{"class":34},[28,160457,160458,160460,160462],{"class":30,"line":94},[28,160459,111637],{"class":34},[28,160461,39],{"class":38},[28,160463,160464],{"class":320}," \"小李\"\n",[28,160466,160467],{"class":30,"line":109},[28,160468,2477],{"emptyLinePlaceholder":144},[28,160470,160471,160473,160476,160478],{"class":30,"line":125},[28,160472,3102],{"class":38},[28,160474,160475],{"class":34}," name ",[28,160477,26121],{"class":38},[28,160479,160480],{"class":34}," names:\n",[28,160482,160483,160485,160487,160489],{"class":30,"line":131},[28,160484,3178],{"class":38},[28,160486,160475],{"class":34},[28,160488,3026],{"class":38},[28,160490,160491],{"class":34}," target:\n",[28,160493,160494,160496,160498,160500],{"class":30,"line":1291},[28,160495,32527],{"class":45},[28,160497,221],{"class":34},[28,160499,160403],{"class":320},[28,160501,227],{"class":34},[28,160503,160504],{"class":30,"line":1297},[28,160505,31703],{"class":38},[28,160507,160508,160510],{"class":30,"line":1388},[28,160509,1778],{"class":38},[28,160511,3816],{"class":34},[28,160513,160514,160516,160518,160520],{"class":30,"line":1394},[28,160515,31375],{"class":45},[28,160517,221],{"class":34},[28,160519,160424],{"class":320},[28,160521,227],{"class":34},[159,160523,160525],{"id":160524},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160527,123351],{},[171,160529,160530,160533,160536],{},[174,160531,160532],{},"用户最多输入 3 次密码。",[174,160534,160535],{},"密码正确则登录成功。",[174,160537,160538],{},"3 次都错误则锁定账号。",[14,160540,10112],{},[18,160542,160544],{"className":20,"code":160543,"language":22,"meta":23,"style":23},"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",[25,160545,160546,160556,160560,160576,160592,160596,160608,160619,160623,160629,160654,160660],{"__ignoreMap":23},[28,160547,160548,160551,160553],{"class":30,"line":31},[28,160549,160550],{"class":34},"password ",[28,160552,39],{"class":38},[28,160554,160555],{"class":320}," \"123456\"\n",[28,160557,160558],{"class":30,"line":94},[28,160559,2477],{"emptyLinePlaceholder":144},[28,160561,160562,160564,160566,160568,160570,160572,160574],{"class":30,"line":109},[28,160563,3102],{"class":38},[28,160565,9515],{"class":34},[28,160567,26121],{"class":38},[28,160569,32519],{"class":45},[28,160571,221],{"class":34},[28,160573,57],{"class":45},[28,160575,30862],{"class":34},[28,160577,160578,160581,160583,160585,160587,160590],{"class":30,"line":125},[28,160579,160580],{"class":34},"    user_password ",[28,160582,39],{"class":38},[28,160584,60680],{"class":45},[28,160586,221],{"class":34},[28,160588,160589],{"class":320},"\"请输入密码:\"",[28,160591,227],{"class":34},[28,160593,160594],{"class":30,"line":131},[28,160595,2477],{"emptyLinePlaceholder":144},[28,160597,160598,160600,160603,160605],{"class":30,"line":1291},[28,160599,3178],{"class":38},[28,160601,160602],{"class":34}," user_password ",[28,160604,3026],{"class":38},[28,160606,160607],{"class":34}," password:\n",[28,160609,160610,160612,160614,160617],{"class":30,"line":1297},[28,160611,32527],{"class":45},[28,160613,221],{"class":34},[28,160615,160616],{"class":320},"\"登录成功\"",[28,160618,227],{"class":34},[28,160620,160621],{"class":30,"line":1388},[28,160622,31703],{"class":38},[28,160624,160625,160627],{"class":30,"line":1394},[28,160626,158081],{"class":38},[28,160628,3816],{"class":34},[28,160630,160631,160633,160635,160637,160640,160643,160645,160647,160649,160652],{"class":30,"line":1406},[28,160632,32527],{"class":45},[28,160634,221],{"class":34},[28,160636,271],{"class":38},[28,160638,160639],{"class":320},"\"密码错误，还剩",[28,160641,160642],{"class":45},"{2",[28,160644,52346],{"class":38},[28,160646,3109],{"class":34},[28,160648,1150],{"class":45},[28,160650,160651],{"class":320},"次机会\"",[28,160653,227],{"class":34},[28,160655,160656,160658],{"class":30,"line":1689},[28,160657,1778],{"class":38},[28,160659,3816],{"class":34},[28,160661,160662,160664,160666,160669],{"class":30,"line":1694},[28,160663,31375],{"class":45},[28,160665,221],{"class":34},[28,160667,160668],{"class":320},"\"账号已锁定\"",[28,160670,227],{"class":34},[159,160672,160674],{"id":160673},"_413-小案例菜单程序","4.13 小案例：菜单程序",[18,160676,160678],{"className":20,"code":160677,"language":22,"meta":23,"style":23},"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",[25,160679,160680,160688,160699,160710,160721,160732,160743,160747,160762,160766,160778,160789,160801,160812,160824,160835,160847,160857,160861,160867],{"__ignoreMap":23},[28,160681,160682,160684,160686],{"class":30,"line":31},[28,160683,108722],{"class":38},[28,160685,95351],{"class":45},[28,160687,3816],{"class":34},[28,160689,160690,160692,160694,160697],{"class":30,"line":94},[28,160691,31375],{"class":45},[28,160693,221],{"class":34},[28,160695,160696],{"class":320},"\"====== 菜单 ======\"",[28,160698,227],{"class":34},[28,160700,160701,160703,160705,160708],{"class":30,"line":109},[28,160702,31375],{"class":45},[28,160704,221],{"class":34},[28,160706,160707],{"class":320},"\"1. 查询余额\"",[28,160709,227],{"class":34},[28,160711,160712,160714,160716,160719],{"class":30,"line":125},[28,160713,31375],{"class":45},[28,160715,221],{"class":34},[28,160717,160718],{"class":320},"\"2. 存款\"",[28,160720,227],{"class":34},[28,160722,160723,160725,160727,160730],{"class":30,"line":131},[28,160724,31375],{"class":45},[28,160726,221],{"class":34},[28,160728,160729],{"class":320},"\"3. 取款\"",[28,160731,227],{"class":34},[28,160733,160734,160736,160738,160741],{"class":30,"line":1291},[28,160735,31375],{"class":45},[28,160737,221],{"class":34},[28,160739,160740],{"class":320},"\"0. 退出\"",[28,160742,227],{"class":34},[28,160744,160745],{"class":30,"line":1297},[28,160746,2477],{"emptyLinePlaceholder":144},[28,160748,160749,160752,160754,160756,160758,160760],{"class":30,"line":1388},[28,160750,160751],{"class":34},"    choice ",[28,160753,39],{"class":38},[28,160755,60680],{"class":45},[28,160757,221],{"class":34},[28,160759,153132],{"class":320},[28,160761,227],{"class":34},[28,160763,160764],{"class":30,"line":1394},[28,160765,2477],{"emptyLinePlaceholder":144},[28,160767,160768,160770,160772,160774,160776],{"class":30,"line":1406},[28,160769,3178],{"class":38},[28,160771,153145],{"class":34},[28,160773,3026],{"class":38},[28,160775,153150],{"class":320},[28,160777,3816],{"class":34},[28,160779,160780,160782,160784,160787],{"class":30,"line":1689},[28,160781,32527],{"class":45},[28,160783,221],{"class":34},[28,160785,160786],{"class":320},"\"余额为1000元\"",[28,160788,227],{"class":34},[28,160790,160791,160793,160795,160797,160799],{"class":30,"line":1694},[28,160792,39369],{"class":38},[28,160794,153145],{"class":34},[28,160796,3026],{"class":38},[28,160798,153169],{"class":320},[28,160800,3816],{"class":34},[28,160802,160803,160805,160807,160810],{"class":30,"line":1700},[28,160804,32527],{"class":45},[28,160806,221],{"class":34},[28,160808,160809],{"class":320},"\"存款功能\"",[28,160811,227],{"class":34},[28,160813,160814,160816,160818,160820,160822],{"class":30,"line":1705},[28,160815,39369],{"class":38},[28,160817,153145],{"class":34},[28,160819,3026],{"class":38},[28,160821,153187],{"class":320},[28,160823,3816],{"class":34},[28,160825,160826,160828,160830,160833],{"class":30,"line":1719},[28,160827,32527],{"class":45},[28,160829,221],{"class":34},[28,160831,160832],{"class":320},"\"取款功能\"",[28,160834,227],{"class":34},[28,160836,160837,160839,160841,160843,160845],{"class":30,"line":1724},[28,160838,39369],{"class":38},[28,160840,153145],{"class":34},[28,160842,3026],{"class":38},[28,160844,153241],{"class":320},[28,160846,3816],{"class":34},[28,160848,160849,160851,160853,160855],{"class":30,"line":1730},[28,160850,32527],{"class":45},[28,160852,221],{"class":34},[28,160854,153252],{"class":320},[28,160856,227],{"class":34},[28,160858,160859],{"class":30,"line":1751},[28,160860,31703],{"class":38},[28,160862,160863,160865],{"class":30,"line":1756},[28,160864,158081],{"class":38},[28,160866,3816],{"class":34},[28,160868,160869,160871,160873,160875],{"class":30,"line":1770},[28,160870,32527],{"class":45},[28,160872,221],{"class":34},[28,160874,153273],{"class":320},[28,160876,227],{"class":34},[14,160878,160879,160880,160882,160883,28463],{},"菜单类程序通常使用 ",[25,160881,159581],{},"，用户选择退出时 ",[25,160884,2130],{},[159,160886,160888],{"id":160887},"_414-易错点","4.14 易错点",[171,160890,160891,160896,160902,160910,160916],{},[174,160892,160893,160895],{},[25,160894,108722],{}," 循环必须更新控制变量。",[174,160897,160898,160901],{},[25,160899,160900],{},"range(1, 10)"," 不包含 10。",[174,160903,160904,160906,160907,160909],{},[25,160905,2130],{}," 结束整个循环，",[25,160908,154731],{}," 只跳过本轮。",[174,160911,160912,160913,160915],{},"嵌套循环中，",[25,160914,2130],{}," 只跳出当前所在的一层循环。",[174,160917,160918],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[159,160920,160922],{"id":160921},"_415-本章练习","4.15 本章练习",[171,160924,160925,160928,160931,160934,160937],{},[174,160926,160927],{},"输出 1 到 100。",[174,160929,160930],{},"计算 1 到 100 的偶数和。",[174,160932,160933],{},"输出 100 以内能被 3 和 5 同时整除的数。",[174,160935,160936],{},"编写猜数字游戏，限制最多猜 7 次。",[174,160938,160939],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[136,160941,160942],{},"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":23,"searchDepth":94,"depth":94,"links":160944},[160945,160946,160947,160948,160949,160953,160954,160955,160956,160957,160958,160959,160960,160961,160962],{"id":159201,"depth":94,"text":159202},{"id":159231,"depth":94,"text":159232},{"id":159320,"depth":94,"text":159321},{"id":159414,"depth":94,"text":159415},{"id":159588,"depth":94,"text":159589,"children":160950},[160951,160952],{"id":159592,"depth":109,"text":159593},{"id":159656,"depth":109,"text":159657},{"id":159720,"depth":94,"text":159721},{"id":159815,"depth":94,"text":159816},{"id":159924,"depth":94,"text":159925},{"id":160120,"depth":94,"text":160121},{"id":160205,"depth":94,"text":160206},{"id":160344,"depth":94,"text":160345},{"id":160524,"depth":94,"text":160525},{"id":160673,"depth":94,"text":160674},{"id":160887,"depth":94,"text":160888},{"id":160921,"depth":94,"text":160922},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159193,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160969,"title":160970,"body":160971,"description":141,"extension":142,"meta":162976,"navigation":144,"path":162977,"seo":162978,"stem":162979,"__hash__":162980},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160972,"toc":162956},[160973,160976,160980,160983,160986,161000,161003,161017,161021,161023,161042,161044,161091,161093,161107,161111,161185,161188,161192,161195,161254,161262,161265,161318,161321,161325,161330,161385,161393,161443,161447,161452,161460,161559,161565,161569,161574,161577,161588,161629,161642,161646,161649,161685,161688,161701,161704,161764,161768,161772,161775,161826,161830,161833,161880,161886,161952,161955,161959,161962,162078,162081,162085,162088,162194,162198,162201,162239,162242,162284,162287,162347,162350,162354,162818,162821,162825,162852,162858,162919,162923,162953],[10,160974,160970],{"id":160975},"_5-函数基础",[159,160977,160979],{"id":160978},"_51-为什么需要函数","5.1 为什么需要函数",[14,160981,160982],{},"函数用于封装一段可以重复使用的代码。",[14,160984,160985],{},"不使用函数的问题：",[171,160987,160988,160991,160994,160997],{},[174,160989,160990],{},"重复代码多。",[174,160992,160993],{},"修改逻辑时容易漏改。",[174,160995,160996],{},"主流程不清晰。",[174,160998,160999],{},"程序越写越长，难以维护。",[14,161001,161002],{},"使用函数后的好处：",[171,161004,161005,161008,161011,161014],{},[174,161006,161007],{},"提高复用性。",[174,161009,161010],{},"提高可读性。",[174,161012,161013],{},"便于调试。",[174,161015,161016],{},"便于分工。",[159,161018,161020],{"id":161019},"_52-函数定义","5.2 函数定义",[14,161022,5258],{},[18,161024,161026],{"className":20,"code":161025,"language":22,"meta":23,"style":23},"def 函数名():\n    函数体\n",[25,161027,161028,161037],{"__ignoreMap":23},[28,161029,161030,161032,161035],{"class":30,"line":31},[28,161031,32023],{"class":38},[28,161033,161034],{"class":2040}," 函数名",[28,161036,32029],{"class":34},[28,161038,161039],{"class":30,"line":94},[28,161040,161041],{"class":34},"    函数体\n",[14,161043,15212],{},[18,161045,161047],{"className":20,"code":161046,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[25,161048,161049,161058,161068,161078,161082,161086],{"__ignoreMap":23},[28,161050,161051,161053,161056],{"class":30,"line":31},[28,161052,32023],{"class":38},[28,161054,161055],{"class":2040}," say_hello",[28,161057,32029],{"class":34},[28,161059,161060,161062,161064,161066],{"class":30,"line":94},[28,161061,31375],{"class":45},[28,161063,221],{"class":34},[28,161065,5921],{"class":320},[28,161067,227],{"class":34},[28,161069,161070,161072,161074,161076],{"class":30,"line":109},[28,161071,31375],{"class":45},[28,161073,221],{"class":34},[28,161075,146698],{"class":320},[28,161077,227],{"class":34},[28,161079,161080],{"class":30,"line":125},[28,161081,2477],{"emptyLinePlaceholder":144},[28,161083,161084],{"class":30,"line":131},[28,161085,2477],{"emptyLinePlaceholder":144},[28,161087,161088],{"class":30,"line":1291},[28,161089,161090],{"class":34},"say_hello()\n",[14,161092,9102],{},[171,161094,161095,161098,161101,161104],{},[174,161096,161097],{},"函数必须先定义，再调用。",[174,161099,161100],{},"函数名遵循变量命名规则。",[174,161102,161103],{},"函数体需要缩进。",[174,161105,161106],{},"函数不调用就不会执行。",[159,161108,161110],{"id":161109},"_53-函数调用","5.3 函数调用",[18,161112,161114],{"className":20,"code":161113,"language":22,"meta":23,"style":23},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[25,161115,161116,161125,161136,161147,161158,161168,161172,161176,161181],{"__ignoreMap":23},[28,161117,161118,161120,161123],{"class":30,"line":31},[28,161119,32023],{"class":38},[28,161121,161122],{"class":2040}," print_menu",[28,161124,32029],{"class":34},[28,161126,161127,161129,161131,161134],{"class":30,"line":94},[28,161128,31375],{"class":45},[28,161130,221],{"class":34},[28,161132,161133],{"class":320},"\"1. 查询\"",[28,161135,227],{"class":34},[28,161137,161138,161140,161142,161145],{"class":30,"line":109},[28,161139,31375],{"class":45},[28,161141,221],{"class":34},[28,161143,161144],{"class":320},"\"2. 添加\"",[28,161146,227],{"class":34},[28,161148,161149,161151,161153,161156],{"class":30,"line":125},[28,161150,31375],{"class":45},[28,161152,221],{"class":34},[28,161154,161155],{"class":320},"\"3. 删除\"",[28,161157,227],{"class":34},[28,161159,161160,161162,161164,161166],{"class":30,"line":131},[28,161161,31375],{"class":45},[28,161163,221],{"class":34},[28,161165,160740],{"class":320},[28,161167,227],{"class":34},[28,161169,161170],{"class":30,"line":1291},[28,161171,2477],{"emptyLinePlaceholder":144},[28,161173,161174],{"class":30,"line":1297},[28,161175,2477],{"emptyLinePlaceholder":144},[28,161177,161178],{"class":30,"line":1388},[28,161179,161180],{"class":34},"print_menu()\n",[28,161182,161183],{"class":30,"line":1394},[28,161184,161180],{"class":34},[14,161186,161187],{},"函数可以多次调用，每次调用都会执行函数体。",[159,161189,161191],{"id":161190},"_54-参数","5.4 参数",[14,161193,161194],{},"参数用于向函数传递数据。",[18,161196,161198],{"className":20,"code":161197,"language":22,"meta":23,"style":23},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[25,161199,161200,161209,161229,161233,161237,161246],{"__ignoreMap":23},[28,161201,161202,161204,161206],{"class":30,"line":31},[28,161203,32023],{"class":38},[28,161205,161055],{"class":2040},[28,161207,161208],{"class":34},"(name):\n",[28,161210,161211,161213,161215,161217,161219,161221,161223,161225,161227],{"class":30,"line":94},[28,161212,31375],{"class":45},[28,161214,221],{"class":34},[28,161216,271],{"class":38},[28,161218,157113],{"class":320},[28,161220,1102],{"class":45},[28,161222,79885],{"class":34},[28,161224,1150],{"class":45},[28,161226,465],{"class":320},[28,161228,227],{"class":34},[28,161230,161231],{"class":30,"line":109},[28,161232,2477],{"emptyLinePlaceholder":144},[28,161234,161235],{"class":30,"line":125},[28,161236,2477],{"emptyLinePlaceholder":144},[28,161238,161239,161242,161244],{"class":30,"line":131},[28,161240,161241],{"class":34},"say_hello(",[28,161243,149947],{"class":320},[28,161245,227],{"class":34},[28,161247,161248,161250,161252],{"class":30,"line":1291},[28,161249,161241],{"class":34},[28,161251,150995],{"class":320},[28,161253,227],{"class":34},[14,161255,161256,161258,161259,161261],{},[25,161257,79885],{}," 是形参，",[25,161260,149947],{}," 是实参。",[14,161263,161264],{},"多个参数：",[18,161266,161268],{"className":20,"code":161267,"language":22,"meta":23,"style":23},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[25,161269,161270,161278,161291,161297,161301,161305],{"__ignoreMap":23},[28,161271,161272,161274,161276],{"class":30,"line":31},[28,161273,32023],{"class":38},[28,161275,5286],{"class":2040},[28,161277,151152],{"class":34},[28,161279,161280,161283,161285,161287,161289],{"class":30,"line":94},[28,161281,161282],{"class":34},"    result ",[28,161284,39],{"class":38},[28,161286,10946],{"class":34},[28,161288,693],{"class":38},[28,161290,151163],{"class":34},[28,161292,161293,161295],{"class":30,"line":109},[28,161294,31375],{"class":45},[28,161296,76660],{"class":34},[28,161298,161299],{"class":30,"line":125},[28,161300,2477],{"emptyLinePlaceholder":144},[28,161302,161303],{"class":30,"line":131},[28,161304,2477],{"emptyLinePlaceholder":144},[28,161306,161307,161310,161312,161314,161316],{"class":30,"line":1291},[28,161308,161309],{"class":34},"add(",[28,161311,659],{"class":45},[28,161313,12512],{"class":34},[28,161315,102],{"class":45},[28,161317,227],{"class":34},[14,161319,161320],{},"调用时参数数量必须匹配。",[159,161322,161324],{"id":161323},"_55-返回值","5.5 返回值",[14,161326,161327,161329],{},[25,161328,17123],{}," 用于把函数内部的结果返回给调用者。",[18,161331,161333],{"className":20,"code":161332,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[25,161334,161335,161343,161353,161357,161361,161379],{"__ignoreMap":23},[28,161336,161337,161339,161341],{"class":30,"line":31},[28,161338,32023],{"class":38},[28,161340,5286],{"class":2040},[28,161342,151152],{"class":34},[28,161344,161345,161347,161349,161351],{"class":30,"line":94},[28,161346,4167],{"class":38},[28,161348,10946],{"class":34},[28,161350,693],{"class":38},[28,161352,151163],{"class":34},[28,161354,161355],{"class":30,"line":109},[28,161356,2477],{"emptyLinePlaceholder":144},[28,161358,161359],{"class":30,"line":125},[28,161360,2477],{"emptyLinePlaceholder":144},[28,161362,161363,161366,161368,161371,161373,161375,161377],{"class":30,"line":131},[28,161364,161365],{"class":34},"result ",[28,161367,39],{"class":38},[28,161369,161370],{"class":34}," add(",[28,161372,659],{"class":45},[28,161374,12512],{"class":34},[28,161376,102],{"class":45},[28,161378,227],{"class":34},[28,161380,161381,161383],{"class":30,"line":1291},[28,161382,30491],{"class":45},[28,161384,76660],{"class":34},[14,161386,161387,161388,161390,161391,28463],{},"如果函数没有写 ",[25,161389,17123],{},"，默认返回 ",[25,161392,95745],{},[18,161394,161396],{"className":20,"code":161395,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[25,161397,161398,161406,161416,161420,161424,161433],{"__ignoreMap":23},[28,161399,161400,161402,161404],{"class":30,"line":31},[28,161401,32023],{"class":38},[28,161403,161055],{"class":2040},[28,161405,32029],{"class":34},[28,161407,161408,161410,161412,161414],{"class":30,"line":94},[28,161409,31375],{"class":45},[28,161411,221],{"class":34},[28,161413,5921],{"class":320},[28,161415,227],{"class":34},[28,161417,161418],{"class":30,"line":109},[28,161419,2477],{"emptyLinePlaceholder":144},[28,161421,161422],{"class":30,"line":125},[28,161423,2477],{"emptyLinePlaceholder":144},[28,161425,161426,161428,161430],{"class":30,"line":131},[28,161427,161365],{"class":34},[28,161429,39],{"class":38},[28,161431,161432],{"class":34}," say_hello()\n",[28,161434,161435,161437,161440],{"class":30,"line":1291},[28,161436,30491],{"class":45},[28,161438,161439],{"class":34},"(result)  ",[28,161441,161442],{"class":105},"# None\n",[159,161444,161446],{"id":161445},"_56-return的作用","5.6 return的作用",[14,161448,161449,161451],{},[25,161450,17123],{}," 有两个作用：",[171,161453,161454,161457],{},[174,161455,161456],{},"返回结果。",[174,161458,161459],{},"结束函数。",[18,161461,161463],{"className":20,"code":161462,"language":22,"meta":23,"style":23},"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",[25,161464,161465,161475,161487,161494,161498,161510,161517,161521,161528,161532,161536,161547],{"__ignoreMap":23},[28,161466,161467,161469,161472],{"class":30,"line":31},[28,161468,32023],{"class":38},[28,161470,161471],{"class":2040}," check_age",[28,161473,161474],{"class":34},"(age):\n",[28,161476,161477,161479,161481,161483,161485],{"class":30,"line":94},[28,161478,3178],{"class":38},[28,161480,15784],{"class":34},[28,161482,99],{"class":38},[28,161484,4170],{"class":45},[28,161486,3816],{"class":34},[28,161488,161489,161491],{"class":30,"line":109},[28,161490,14829],{"class":38},[28,161492,161493],{"class":320}," \"年龄不合法\"\n",[28,161495,161496],{"class":30,"line":125},[28,161497,2477],{"emptyLinePlaceholder":144},[28,161499,161500,161502,161504,161506,161508],{"class":30,"line":131},[28,161501,3178],{"class":38},[28,161503,15784],{"class":34},[28,161505,1787],{"class":38},[28,161507,156344],{"class":45},[28,161509,3816],{"class":34},[28,161511,161512,161514],{"class":30,"line":1291},[28,161513,14829],{"class":38},[28,161515,161516],{"class":320}," \"成年人\"\n",[28,161518,161519],{"class":30,"line":1297},[28,161520,2477],{"emptyLinePlaceholder":144},[28,161522,161523,161525],{"class":30,"line":1388},[28,161524,4167],{"class":38},[28,161526,161527],{"class":320}," \"未成年人\"\n",[28,161529,161530],{"class":30,"line":1394},[28,161531,2477],{"emptyLinePlaceholder":144},[28,161533,161534],{"class":30,"line":1406},[28,161535,2477],{"emptyLinePlaceholder":144},[28,161537,161538,161540,161543,161545],{"class":30,"line":1689},[28,161539,30491],{"class":45},[28,161541,161542],{"class":34},"(check_age(",[28,161544,102],{"class":45},[28,161546,30573],{"class":34},[28,161548,161549,161551,161553,161555,161557],{"class":30,"line":1694},[28,161550,30491],{"class":45},[28,161552,161542],{"class":34},[28,161554,742],{"class":38},[28,161556,46],{"class":45},[28,161558,30573],{"class":34},[14,161560,161561,161562,161564],{},"函数执行到 ",[25,161563,17123],{}," 后，后面的代码不会继续执行。",[159,161566,161568],{"id":161567},"_57-none","5.7 None",[14,161570,161571,161573],{},[25,161572,95745],{}," 表示空值或没有结果。",[14,161575,161576],{},"常见使用场景：",[171,161578,161579,161582,161585],{},[174,161580,161581],{},"函数没有返回值。",[174,161583,161584],{},"变量暂时没有具体值。",[174,161586,161587],{},"表示查询不到结果。",[18,161589,161591],{"className":20,"code":161590,"language":22,"meta":23,"style":23},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[25,161592,161593,161601,161605,161618],{"__ignoreMap":23},[28,161594,161595,161597,161599],{"class":30,"line":31},[28,161596,161365],{"class":34},[28,161598,39],{"class":38},[28,161600,152231],{"class":45},[28,161602,161603],{"class":30,"line":94},[28,161604,2477],{"emptyLinePlaceholder":144},[28,161606,161607,161609,161612,161614,161616],{"class":30,"line":109},[28,161608,1608],{"class":38},[28,161610,161611],{"class":34}," result ",[28,161613,39003],{"class":38},[28,161615,39009],{"class":45},[28,161617,3816],{"class":34},[28,161619,161620,161622,161624,161627],{"class":30,"line":125},[28,161621,31375],{"class":45},[28,161623,221],{"class":34},[28,161625,161626],{"class":320},"\"没有数据\"",[28,161628,227],{"class":34},[14,161630,161631,161632,161634,161635,161638,161639,28463],{},"判断 ",[25,161633,95745],{}," 推荐使用 ",[25,161636,161637],{},"is None","，不要写成 ",[25,161640,161641],{},"== None",[159,161643,161645],{"id":161644},"_58-函数文档字符串","5.8 函数文档字符串",[14,161647,161648],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[18,161650,161652],{"className":20,"code":161651,"language":22,"meta":23,"style":23},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[25,161653,161654,161664,161669],{"__ignoreMap":23},[28,161655,161656,161658,161661],{"class":30,"line":31},[28,161657,32023],{"class":38},[28,161659,161660],{"class":2040}," calculate_bmi",[28,161662,161663],{"class":34},"(weight, height):\n",[28,161665,161666],{"class":30,"line":94},[28,161667,161668],{"class":320},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[28,161670,161671,161673,161676,161678,161681,161683],{"class":30,"line":109},[28,161672,4167],{"class":38},[28,161674,161675],{"class":34}," weight ",[28,161677,794],{"class":38},[28,161679,161680],{"class":34}," height ",[28,161682,10738],{"class":38},[28,161684,47799],{"class":45},[14,161686,161687],{},"查看说明：",[18,161689,161691],{"className":20,"code":161690,"language":22,"meta":23,"style":23},"help(calculate_bmi)\n",[25,161692,161693],{"__ignoreMap":23},[28,161694,161695,161698],{"class":30,"line":31},[28,161696,161697],{"class":45},"help",[28,161699,161700],{"class":34},"(calculate_bmi)\n",[14,161702,161703],{},"较完整的写法：",[18,161705,161707],{"className":20,"code":161706,"language":22,"meta":23,"style":23},"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",[25,161708,161709,161717,161722,161727,161731,161736,161741,161746,161750],{"__ignoreMap":23},[28,161710,161711,161713,161715],{"class":30,"line":31},[28,161712,32023],{"class":38},[28,161714,161660],{"class":2040},[28,161716,161663],{"class":34},[28,161718,161719],{"class":30,"line":94},[28,161720,161721],{"class":320},"    \"\"\"\n",[28,161723,161724],{"class":30,"line":109},[28,161725,161726],{"class":320},"    计算BMI。\n",[28,161728,161729],{"class":30,"line":125},[28,161730,2477],{"emptyLinePlaceholder":144},[28,161732,161733],{"class":30,"line":131},[28,161734,161735],{"class":320},"    :param weight: 体重，单位kg\n",[28,161737,161738],{"class":30,"line":1291},[28,161739,161740],{"class":320},"    :param height: 身高，单位m\n",[28,161742,161743],{"class":30,"line":1297},[28,161744,161745],{"class":320},"    :return: BMI数值\n",[28,161747,161748],{"class":30,"line":1388},[28,161749,161721],{"class":320},[28,161751,161752,161754,161756,161758,161760,161762],{"class":30,"line":1394},[28,161753,4167],{"class":38},[28,161755,161675],{"class":34},[28,161757,794],{"class":38},[28,161759,161680],{"class":34},[28,161761,10738],{"class":38},[28,161763,47799],{"class":45},[159,161765,161767],{"id":161766},"_59-变量作用域","5.9 变量作用域",[188,161769,161771],{"id":161770},"_591-局部变量","5.9.1 局部变量",[14,161773,161774],{},"在函数内部定义的变量，只能在函数内部使用。",[18,161776,161778],{"className":20,"code":161777,"language":22,"meta":23,"style":23},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[25,161779,161780,161789,161797,161803,161807,161811,161816],{"__ignoreMap":23},[28,161781,161782,161784,161787],{"class":30,"line":31},[28,161783,32023],{"class":38},[28,161785,161786],{"class":2040}," test",[28,161788,32029],{"class":34},[28,161790,161791,161793,161795],{"class":30,"line":94},[28,161792,45669],{"class":34},[28,161794,39],{"class":38},[28,161796,58503],{"class":45},[28,161798,161799,161801],{"class":30,"line":109},[28,161800,31375],{"class":45},[28,161802,234],{"class":34},[28,161804,161805],{"class":30,"line":125},[28,161806,2477],{"emptyLinePlaceholder":144},[28,161808,161809],{"class":30,"line":131},[28,161810,2477],{"emptyLinePlaceholder":144},[28,161812,161813],{"class":30,"line":1291},[28,161814,161815],{"class":34},"test()\n",[28,161817,161818,161820,161823],{"class":30,"line":1297},[28,161819,30491],{"class":45},[28,161821,161822],{"class":34},"(num)  ",[28,161824,161825],{"class":105},"# 报错\n",[188,161827,161829],{"id":161828},"_592-全局变量","5.9.2 全局变量",[14,161831,161832],{},"在函数外部定义的变量，可以在函数内部读取。",[18,161834,161836],{"className":20,"code":161835,"language":22,"meta":23,"style":23},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[25,161837,161838,161846,161850,161854,161862,161868,161872,161876],{"__ignoreMap":23},[28,161839,161840,161842,161844],{"class":30,"line":31},[28,161841,146595],{"class":34},[28,161843,39],{"class":38},[28,161845,149412],{"class":320},[28,161847,161848],{"class":30,"line":94},[28,161849,2477],{"emptyLinePlaceholder":144},[28,161851,161852],{"class":30,"line":109},[28,161853,2477],{"emptyLinePlaceholder":144},[28,161855,161856,161858,161860],{"class":30,"line":125},[28,161857,32023],{"class":38},[28,161859,161055],{"class":2040},[28,161861,32029],{"class":34},[28,161863,161864,161866],{"class":30,"line":131},[28,161865,31375],{"class":45},[28,161867,150719],{"class":34},[28,161869,161870],{"class":30,"line":1291},[28,161871,2477],{"emptyLinePlaceholder":144},[28,161873,161874],{"class":30,"line":1297},[28,161875,2477],{"emptyLinePlaceholder":144},[28,161877,161878],{"class":30,"line":1388},[28,161879,161090],{"class":34},[14,161881,161882,161883,28463],{},"如果要在函数内部修改全局变量，需要 ",[25,161884,161885],{},"global",[18,161887,161889],{"className":20,"code":161888,"language":22,"meta":23,"style":23},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[25,161890,161891,161899,161903,161907,161916,161924,161932,161936,161940,161945],{"__ignoreMap":23},[28,161892,161893,161895,161897],{"class":30,"line":31},[28,161894,146750],{"class":34},[28,161896,39],{"class":38},[28,161898,47409],{"class":45},[28,161900,161901],{"class":30,"line":94},[28,161902,2477],{"emptyLinePlaceholder":144},[28,161904,161905],{"class":30,"line":109},[28,161906,2477],{"emptyLinePlaceholder":144},[28,161908,161909,161911,161914],{"class":30,"line":125},[28,161910,32023],{"class":38},[28,161912,161913],{"class":2040}," add_count",[28,161915,32029],{"class":34},[28,161917,161918,161921],{"class":30,"line":131},[28,161919,161920],{"class":38},"    global",[28,161922,161923],{"class":34}," count\n",[28,161925,161926,161928,161930],{"class":30,"line":1291},[28,161927,159492],{"class":34},[28,161929,9554],{"class":38},[28,161931,55774],{"class":45},[28,161933,161934],{"class":30,"line":1297},[28,161935,2477],{"emptyLinePlaceholder":144},[28,161937,161938],{"class":30,"line":1388},[28,161939,2477],{"emptyLinePlaceholder":144},[28,161941,161942],{"class":30,"line":1394},[28,161943,161944],{"class":34},"add_count()\n",[28,161946,161947,161949],{"class":30,"line":1406},[28,161948,30491],{"class":45},[28,161950,161951],{"class":34},"(count)\n",[14,161953,161954],{},"不建议大量使用全局变量，项目变大后很难维护。",[159,161956,161958],{"id":161957},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161960,161961],{},"一个函数中可以调用另一个函数。",[18,161963,161965],{"className":20,"code":161964,"language":22,"meta":23,"style":23},"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",[25,161966,161967,161976,161990,161994,161998,162007,162012,162032,162053,162057,162061,162065],{"__ignoreMap":23},[28,161968,161969,161971,161974],{"class":30,"line":31},[28,161970,32023],{"class":38},[28,161972,161973],{"class":2040}," print_line",[28,161975,32029],{"class":34},[28,161977,161978,161980,161982,161984,161986,161988],{"class":30,"line":94},[28,161979,31375],{"class":45},[28,161981,221],{"class":34},[28,161983,32559],{"class":320},[28,161985,6595],{"class":38},[28,161987,78740],{"class":45},[28,161989,227],{"class":34},[28,161991,161992],{"class":30,"line":109},[28,161993,2477],{"emptyLinePlaceholder":144},[28,161995,161996],{"class":30,"line":125},[28,161997,2477],{"emptyLinePlaceholder":144},[28,161999,162000,162002,162005],{"class":30,"line":131},[28,162001,32023],{"class":38},[28,162003,162004],{"class":2040}," print_info",[28,162006,149434],{"class":34},[28,162008,162009],{"class":30,"line":1291},[28,162010,162011],{"class":34},"    print_line()\n",[28,162013,162014,162016,162018,162020,162022,162024,162026,162028,162030],{"class":30,"line":1297},[28,162015,31375],{"class":45},[28,162017,221],{"class":34},[28,162019,271],{"class":38},[28,162021,156741],{"class":320},[28,162023,1102],{"class":45},[28,162025,79885],{"class":34},[28,162027,1150],{"class":45},[28,162029,465],{"class":320},[28,162031,227],{"class":34},[28,162033,162034,162036,162038,162040,162043,162045,162047,162049,162051],{"class":30,"line":1388},[28,162035,31375],{"class":45},[28,162037,221],{"class":34},[28,162039,271],{"class":38},[28,162041,162042],{"class":320},"\"年龄:",[28,162044,1102],{"class":45},[28,162046,70296],{"class":34},[28,162048,1150],{"class":45},[28,162050,465],{"class":320},[28,162052,227],{"class":34},[28,162054,162055],{"class":30,"line":1394},[28,162056,162011],{"class":34},[28,162058,162059],{"class":30,"line":1406},[28,162060,2477],{"emptyLinePlaceholder":144},[28,162062,162063],{"class":30,"line":1689},[28,162064,2477],{"emptyLinePlaceholder":144},[28,162066,162067,162070,162072,162074,162076],{"class":30,"line":1694},[28,162068,162069],{"class":34},"print_info(",[28,162071,149947],{"class":320},[28,162073,12512],{"class":34},[28,162075,860],{"class":45},[28,162077,227],{"class":34},[14,162079,162080],{},"这种方式可以把小功能组合成大功能。",[159,162082,162084],{"id":162083},"_511-参数检查","5.11 参数检查",[14,162086,162087],{},"函数内部可以检查参数是否合法。",[18,162089,162091],{"className":20,"code":162090,"language":22,"meta":23,"style":23},"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",[25,162092,162093,162102,162114,162120,162130,162134,162138,162155,162159,162171,162182,162188],{"__ignoreMap":23},[28,162094,162095,162097,162100],{"class":30,"line":31},[28,162096,32023],{"class":38},[28,162098,162099],{"class":2040}," divide",[28,162101,151152],{"class":34},[28,162103,162104,162106,162108,162110,162112],{"class":30,"line":94},[28,162105,3178],{"class":38},[28,162107,10959],{"class":34},[28,162109,3026],{"class":38},[28,162111,4170],{"class":45},[28,162113,3816],{"class":34},[28,162115,162116,162118],{"class":30,"line":109},[28,162117,14829],{"class":38},[28,162119,152231],{"class":45},[28,162121,162122,162124,162126,162128],{"class":30,"line":125},[28,162123,4167],{"class":38},[28,162125,10946],{"class":34},[28,162127,794],{"class":38},[28,162129,151163],{"class":34},[28,162131,162132],{"class":30,"line":131},[28,162133,2477],{"emptyLinePlaceholder":144},[28,162135,162136],{"class":30,"line":1291},[28,162137,2477],{"emptyLinePlaceholder":144},[28,162139,162140,162142,162144,162147,162149,162151,162153],{"class":30,"line":1297},[28,162141,161365],{"class":34},[28,162143,39],{"class":38},[28,162145,162146],{"class":34}," divide(",[28,162148,659],{"class":45},[28,162150,12512],{"class":34},[28,162152,407],{"class":45},[28,162154,227],{"class":34},[28,162156,162157],{"class":30,"line":1388},[28,162158,2477],{"emptyLinePlaceholder":144},[28,162160,162161,162163,162165,162167,162169],{"class":30,"line":1394},[28,162162,1608],{"class":38},[28,162164,161611],{"class":34},[28,162166,39003],{"class":38},[28,162168,39009],{"class":45},[28,162170,3816],{"class":34},[28,162172,162173,162175,162177,162180],{"class":30,"line":1406},[28,162174,31375],{"class":45},[28,162176,221],{"class":34},[28,162178,162179],{"class":320},"\"除数不能为0\"",[28,162181,227],{"class":34},[28,162183,162184,162186],{"class":30,"line":1689},[28,162185,1778],{"class":38},[28,162187,3816],{"class":34},[28,162189,162190,162192],{"class":30,"line":1694},[28,162191,31375],{"class":45},[28,162193,76660],{"class":34},[159,162195,162197],{"id":162196},"_512-类型提示","5.12 类型提示",[14,162199,162200],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[18,162202,162204],{"className":20,"code":162203,"language":22,"meta":23,"style":23},"def add(a: int, b: int) -> int:\n    return a + b\n",[25,162205,162206,162229],{"__ignoreMap":23},[28,162207,162208,162210,162212,162215,162217,162220,162222,162225,162227],{"class":30,"line":31},[28,162209,32023],{"class":38},[28,162211,5286],{"class":2040},[28,162213,162214],{"class":34},"(a: ",[28,162216,224],{"class":45},[28,162218,162219],{"class":34},", b: ",[28,162221,224],{"class":45},[28,162223,162224],{"class":34},") -> ",[28,162226,224],{"class":45},[28,162228,3816],{"class":34},[28,162230,162231,162233,162235,162237],{"class":30,"line":94},[28,162232,4167],{"class":38},[28,162234,10946],{"class":34},[28,162236,693],{"class":38},[28,162238,151163],{"class":34},[14,162240,162241],{},"字符串参数：",[18,162243,162245],{"className":20,"code":162244,"language":22,"meta":23,"style":23},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[25,162246,162247,162264],{"__ignoreMap":23},[28,162248,162249,162251,162253,162256,162258,162260,162262],{"class":30,"line":31},[28,162250,32023],{"class":38},[28,162252,161055],{"class":2040},[28,162254,162255],{"class":34},"(name: ",[28,162257,1376],{"class":45},[28,162259,162224],{"class":34},[28,162261,95745],{"class":45},[28,162263,3816],{"class":34},[28,162265,162266,162268,162270,162272,162274,162276,162278,162280,162282],{"class":30,"line":94},[28,162267,31375],{"class":45},[28,162269,221],{"class":34},[28,162271,271],{"class":38},[28,162273,157113],{"class":320},[28,162275,1102],{"class":45},[28,162277,79885],{"class":34},[28,162279,1150],{"class":45},[28,162281,465],{"class":320},[28,162283,227],{"class":34},[14,162285,162286],{},"列表参数：",[18,162288,162290],{"className":20,"code":162289,"language":22,"meta":23,"style":23},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[25,162291,162292,162311,162319,162331,162340],{"__ignoreMap":23},[28,162293,162294,162296,162299,162302,162304,162307,162309],{"class":30,"line":31},[28,162295,32023],{"class":38},[28,162297,162298],{"class":2040}," get_total",[28,162300,162301],{"class":34},"(numbers: list[",[28,162303,224],{"class":45},[28,162305,162306],{"class":34},"]) -> ",[28,162308,224],{"class":45},[28,162310,3816],{"class":34},[28,162312,162313,162315,162317],{"class":30,"line":94},[28,162314,159366],{"class":34},[28,162316,39],{"class":38},[28,162318,47409],{"class":45},[28,162320,162321,162323,162326,162328],{"class":30,"line":109},[28,162322,3278],{"class":38},[28,162324,162325],{"class":34}," number ",[28,162327,26121],{"class":38},[28,162329,162330],{"class":34}," numbers:\n",[28,162332,162333,162335,162337],{"class":30,"line":125},[28,162334,160041],{"class":34},[28,162336,9554],{"class":38},[28,162338,162339],{"class":34}," number\n",[28,162341,162342,162344],{"class":30,"line":131},[28,162343,4167],{"class":38},[28,162345,162346],{"class":34}," total\n",[14,162348,162349],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[159,162351,162353],{"id":162352},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[18,162355,162357],{"className":20,"code":162356,"language":22,"meta":23,"style":23},"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",[25,162358,162359,162369,162373,162377,162385,162396,162406,162416,162426,162436,162440,162444,162453,162475,162479,162483,162492,162498,162518,162530,162541,162545,162554,162565,162570,162574,162578,162587,162593,162612,162624,162634,162638,162649,162659,162663,162671,162682,162686,162690,162694,162702,162707,162721,162725,162737,162742,162754,162759,162771,162776,162788,162798,162802,162808],{"__ignoreMap":23},[28,162360,162361,162364,162366],{"class":30,"line":31},[28,162362,162363],{"class":34},"balance ",[28,162365,39],{"class":38},[28,162367,162368],{"class":45}," 1000\n",[28,162370,162371],{"class":30,"line":94},[28,162372,2477],{"emptyLinePlaceholder":144},[28,162374,162375],{"class":30,"line":109},[28,162376,2477],{"emptyLinePlaceholder":144},[28,162378,162379,162381,162383],{"class":30,"line":125},[28,162380,32023],{"class":38},[28,162382,152092],{"class":2040},[28,162384,32029],{"class":34},[28,162386,162387,162389,162391,162394],{"class":30,"line":131},[28,162388,31375],{"class":45},[28,162390,221],{"class":34},[28,162392,162393],{"class":320},"\"====== ATM ======\"",[28,162395,227],{"class":34},[28,162397,162398,162400,162402,162404],{"class":30,"line":1291},[28,162399,31375],{"class":45},[28,162401,221],{"class":34},[28,162403,160707],{"class":320},[28,162405,227],{"class":34},[28,162407,162408,162410,162412,162414],{"class":30,"line":1297},[28,162409,31375],{"class":45},[28,162411,221],{"class":34},[28,162413,160718],{"class":320},[28,162415,227],{"class":34},[28,162417,162418,162420,162422,162424],{"class":30,"line":1388},[28,162419,31375],{"class":45},[28,162421,221],{"class":34},[28,162423,160729],{"class":320},[28,162425,227],{"class":34},[28,162427,162428,162430,162432,162434],{"class":30,"line":1394},[28,162429,31375],{"class":45},[28,162431,221],{"class":34},[28,162433,160740],{"class":320},[28,162435,227],{"class":34},[28,162437,162438],{"class":30,"line":1406},[28,162439,2477],{"emptyLinePlaceholder":144},[28,162441,162442],{"class":30,"line":1689},[28,162443,2477],{"emptyLinePlaceholder":144},[28,162445,162446,162448,162451],{"class":30,"line":1694},[28,162447,32023],{"class":38},[28,162449,162450],{"class":2040}," show_balance",[28,162452,32029],{"class":34},[28,162454,162455,162457,162459,162461,162464,162466,162469,162471,162473],{"class":30,"line":1700},[28,162456,31375],{"class":45},[28,162458,221],{"class":34},[28,162460,271],{"class":38},[28,162462,162463],{"class":320},"\"当前余额:",[28,162465,1102],{"class":45},[28,162467,162468],{"class":34},"balance",[28,162470,1150],{"class":45},[28,162472,157071],{"class":320},[28,162474,227],{"class":34},[28,162476,162477],{"class":30,"line":1705},[28,162478,2477],{"emptyLinePlaceholder":144},[28,162480,162481],{"class":30,"line":1719},[28,162482,2477],{"emptyLinePlaceholder":144},[28,162484,162485,162487,162490],{"class":30,"line":1724},[28,162486,32023],{"class":38},[28,162488,162489],{"class":2040}," save_money",[28,162491,32029],{"class":34},[28,162493,162494,162496],{"class":30,"line":1730},[28,162495,161920],{"class":38},[28,162497,150158],{"class":34},[28,162499,162500,162503,162505,162507,162509,162511,162513,162516],{"class":30,"line":1751},[28,162501,162502],{"class":34},"    money ",[28,162504,39],{"class":38},[28,162506,109856],{"class":45},[28,162508,221],{"class":34},[28,162510,53896],{"class":45},[28,162512,221],{"class":34},[28,162514,162515],{"class":320},"\"请输入存款金额:\"",[28,162517,30573],{"class":34},[28,162519,162520,162522,162524,162526,162528],{"class":30,"line":1756},[28,162521,3178],{"class":38},[28,162523,150201],{"class":34},[28,162525,1665],{"class":38},[28,162527,4170],{"class":45},[28,162529,3816],{"class":34},[28,162531,162532,162534,162536,162539],{"class":30,"line":1770},[28,162533,32527],{"class":45},[28,162535,221],{"class":34},[28,162537,162538],{"class":320},"\"金额必须大于0\"",[28,162540,227],{"class":34},[28,162542,162543],{"class":30,"line":1775},[28,162544,152420],{"class":38},[28,162546,162547,162550,162552],{"class":30,"line":1804},[28,162548,162549],{"class":34},"    balance ",[28,162551,9554],{"class":38},[28,162553,150234],{"class":34},[28,162555,162556,162558,162560,162563],{"class":30,"line":1809},[28,162557,31375],{"class":45},[28,162559,221],{"class":34},[28,162561,162562],{"class":320},"\"存款成功\"",[28,162564,227],{"class":34},[28,162566,162567],{"class":30,"line":1826},[28,162568,162569],{"class":34},"    show_balance()\n",[28,162571,162572],{"class":30,"line":1831},[28,162573,2477],{"emptyLinePlaceholder":144},[28,162575,162576],{"class":30,"line":1836},[28,162577,2477],{"emptyLinePlaceholder":144},[28,162579,162580,162582,162585],{"class":30,"line":1841},[28,162581,32023],{"class":38},[28,162583,162584],{"class":2040}," withdraw_money",[28,162586,32029],{"class":34},[28,162588,162589,162591],{"class":30,"line":1855},[28,162590,161920],{"class":38},[28,162592,150158],{"class":34},[28,162594,162595,162597,162599,162601,162603,162605,162607,162610],{"class":30,"line":1860},[28,162596,162502],{"class":34},[28,162598,39],{"class":38},[28,162600,109856],{"class":45},[28,162602,221],{"class":34},[28,162604,53896],{"class":45},[28,162606,221],{"class":34},[28,162608,162609],{"class":320},"\"请输入取款金额:\"",[28,162611,30573],{"class":34},[28,162613,162614,162616,162618,162620,162622],{"class":30,"line":2654},[28,162615,3178],{"class":38},[28,162617,150201],{"class":34},[28,162619,1665],{"class":38},[28,162621,4170],{"class":45},[28,162623,3816],{"class":34},[28,162625,162626,162628,162630,162632],{"class":30,"line":2668},[28,162627,32527],{"class":45},[28,162629,221],{"class":34},[28,162631,162538],{"class":320},[28,162633,227],{"class":34},[28,162635,162636],{"class":30,"line":2676},[28,162637,152420],{"class":38},[28,162639,162640,162642,162644,162646],{"class":30,"line":2681},[28,162641,3178],{"class":38},[28,162643,150201],{"class":34},[28,162645,1164],{"class":38},[28,162647,162648],{"class":34}," balance:\n",[28,162650,162651,162653,162655,162657],{"class":30,"line":2687},[28,162652,32527],{"class":45},[28,162654,221],{"class":34},[28,162656,150296],{"class":320},[28,162658,227],{"class":34},[28,162660,162661],{"class":30,"line":2693},[28,162662,152420],{"class":38},[28,162664,162665,162667,162669],{"class":30,"line":2698},[28,162666,162549],{"class":34},[28,162668,150311],{"class":38},[28,162670,150234],{"class":34},[28,162672,162673,162675,162677,162680],{"class":30,"line":8025},[28,162674,31375],{"class":45},[28,162676,221],{"class":34},[28,162678,162679],{"class":320},"\"取款成功\"",[28,162681,227],{"class":34},[28,162683,162684],{"class":30,"line":8049},[28,162685,162569],{"class":34},[28,162687,162688],{"class":30,"line":8054},[28,162689,2477],{"emptyLinePlaceholder":144},[28,162691,162692],{"class":30,"line":8060},[28,162693,2477],{"emptyLinePlaceholder":144},[28,162695,162696,162698,162700],{"class":30,"line":8087},[28,162697,108722],{"class":38},[28,162699,95351],{"class":45},[28,162701,3816],{"class":34},[28,162703,162704],{"class":30,"line":8092},[28,162705,162706],{"class":34},"    show_menu()\n",[28,162708,162709,162711,162713,162715,162717,162719],{"class":30,"line":8098},[28,162710,160751],{"class":34},[28,162712,39],{"class":38},[28,162714,60680],{"class":45},[28,162716,221],{"class":34},[28,162718,153132],{"class":320},[28,162720,227],{"class":34},[28,162722,162723],{"class":30,"line":8110},[28,162724,2477],{"emptyLinePlaceholder":144},[28,162726,162727,162729,162731,162733,162735],{"class":30,"line":8122},[28,162728,3178],{"class":38},[28,162730,153145],{"class":34},[28,162732,3026],{"class":38},[28,162734,153150],{"class":320},[28,162736,3816],{"class":34},[28,162738,162739],{"class":30,"line":8134},[28,162740,162741],{"class":34},"        show_balance()\n",[28,162743,162744,162746,162748,162750,162752],{"class":30,"line":9793},[28,162745,39369],{"class":38},[28,162747,153145],{"class":34},[28,162749,3026],{"class":38},[28,162751,153169],{"class":320},[28,162753,3816],{"class":34},[28,162755,162756],{"class":30,"line":9818},[28,162757,162758],{"class":34},"        save_money()\n",[28,162760,162761,162763,162765,162767,162769],{"class":30,"line":9841},[28,162762,39369],{"class":38},[28,162764,153145],{"class":34},[28,162766,3026],{"class":38},[28,162768,153187],{"class":320},[28,162770,3816],{"class":34},[28,162772,162773],{"class":30,"line":9865},[28,162774,162775],{"class":34},"        withdraw_money()\n",[28,162777,162778,162780,162782,162784,162786],{"class":30,"line":9870},[28,162779,39369],{"class":38},[28,162781,153145],{"class":34},[28,162783,3026],{"class":38},[28,162785,153241],{"class":320},[28,162787,3816],{"class":34},[28,162789,162790,162792,162794,162796],{"class":30,"line":9875},[28,162791,32527],{"class":45},[28,162793,221],{"class":34},[28,162795,153252],{"class":320},[28,162797,227],{"class":34},[28,162799,162800],{"class":30,"line":9880},[28,162801,31703],{"class":38},[28,162803,162804,162806],{"class":30,"line":9889},[28,162805,158081],{"class":38},[28,162807,3816],{"class":34},[28,162809,162810,162812,162814,162816],{"class":30,"line":9894},[28,162811,32527],{"class":45},[28,162813,221],{"class":34},[28,162815,153273],{"class":320},[28,162817,227],{"class":34},[14,162819,162820],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[159,162822,162824],{"id":162823},"_514-易错点","5.14 易错点",[171,162826,162827,162830,162833,162838,162843,162846],{},[174,162828,162829],{},"函数定义后必须调用才会执行。",[174,162831,162832],{},"函数名后面有括号才是调用。",[174,162834,162835,162837],{},[25,162836,17123],{}," 后面的代码不会执行。",[174,162839,162840,162841,28463],{},"没有返回值的函数默认返回 ",[25,162842,95745],{},[174,162844,162845],{},"局部变量不能在函数外部访问。",[174,162847,162848,162849,162851],{},"不要滥用 ",[25,162850,161885],{},"，更好的方式是让函数返回新值。",[14,162853,162854,162855,162857],{},"例如不用 ",[25,162856,161885],{}," 改写存款：",[18,162859,162861],{"className":20,"code":162860,"language":22,"meta":23,"style":23},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[25,162862,162863,162872,162883,162887,162891,162899,162912],{"__ignoreMap":23},[28,162864,162865,162867,162869],{"class":30,"line":31},[28,162866,32023],{"class":38},[28,162868,162489],{"class":2040},[28,162870,162871],{"class":34},"(balance, money):\n",[28,162873,162874,162876,162879,162881],{"class":30,"line":94},[28,162875,4167],{"class":38},[28,162877,162878],{"class":34}," balance ",[28,162880,693],{"class":38},[28,162882,150234],{"class":34},[28,162884,162885],{"class":30,"line":109},[28,162886,2477],{"emptyLinePlaceholder":144},[28,162888,162889],{"class":30,"line":125},[28,162890,2477],{"emptyLinePlaceholder":144},[28,162892,162893,162895,162897],{"class":30,"line":131},[28,162894,162363],{"class":34},[28,162896,39],{"class":38},[28,162898,162368],{"class":45},[28,162900,162901,162903,162905,162908,162910],{"class":30,"line":1291},[28,162902,162363],{"class":34},[28,162904,39],{"class":38},[28,162906,162907],{"class":34}," save_money(balance, ",[28,162909,1799],{"class":45},[28,162911,227],{"class":34},[28,162913,162914,162916],{"class":30,"line":1297},[28,162915,30491],{"class":45},[28,162917,162918],{"class":34},"(balance)\n",[159,162920,162922],{"id":162921},"_515-本章练习","5.15 本章练习",[171,162924,162925,162932,162938,162944,162950],{},[174,162926,162927,162928,162931],{},"定义函数 ",[25,162929,162930],{},"print_student(name, age)","，输出学生信息。",[174,162933,162927,162934,162937],{},[25,162935,162936],{},"get_max(a, b, c)","，返回三个数中的最大值。",[174,162939,162927,162940,162943],{},[25,162941,162942],{},"is_even(num)","，判断一个数是否为偶数。",[174,162945,162927,162946,162949],{},[25,162947,162948],{},"calculate_bmi(weight, height)","，返回 BMI。",[174,162951,162952],{},"把第 4 章的菜单程序拆分成多个函数。",[136,162954,162955],{},"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":23,"searchDepth":94,"depth":94,"links":162957},[162958,162959,162960,162961,162962,162963,162964,162965,162966,162970,162971,162972,162973,162974,162975],{"id":160978,"depth":94,"text":160979},{"id":161019,"depth":94,"text":161020},{"id":161109,"depth":94,"text":161110},{"id":161190,"depth":94,"text":161191},{"id":161323,"depth":94,"text":161324},{"id":161445,"depth":94,"text":161446},{"id":161567,"depth":94,"text":161568},{"id":161644,"depth":94,"text":161645},{"id":161766,"depth":94,"text":161767,"children":162967},[162968,162969],{"id":161770,"depth":109,"text":161771},{"id":161828,"depth":109,"text":161829},{"id":161957,"depth":94,"text":161958},{"id":162083,"depth":94,"text":162084},{"id":162196,"depth":94,"text":162197},{"id":162352,"depth":94,"text":162353},{"id":162823,"depth":94,"text":162824},{"id":162921,"depth":94,"text":162922},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160970,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162982,"title":162983,"body":162984,"description":141,"extension":142,"meta":166028,"navigation":144,"path":166029,"seo":166030,"stem":166031,"__hash__":166032},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162985,"toc":166009},[162986,162989,162993,162996,162999,163103,163106,163110,163113,163193,163196,163200,163203,163263,163266,163302,163305,163320,163324,163397,163400,163455,163458,163528,163531,163615,163625,163683,163687,163732,163735,163761,163764,163870,163874,163877,163919,163922,163986,163989,163993,163996,164057,164060,164090,164093,164131,164135,164138,164147,164150,164274,164277,164318,164322,164325,164336,164376,164379,164394,164399,164402,164469,164472,164562,164566,164569,164617,164620,164647,164649,164679,164682,164702,164705,164736,164739,164772,164776,164779,164803,164806,164830,164833,164857,164861,164864,164994,164997,165077,165080,165155,165159,165162,165212,165215,165257,165260,165284,165286,165310,165313,165368,165371,165437,165441,165444,165447,165485,165488,165541,165544,165590,165593,165626,165629,165633,165952,165956,165985,165989,166006],[10,162987,162983],{"id":162988},"_6-数据容器",[159,162990,162992],{"id":162991},"_61-什么是数据容器","6.1 什么是数据容器",[14,162994,162995],{},"数据容器用于一次保存多个数据。",[14,162997,162998],{},"常见容器：",[353,163000,163001,163018],{},[356,163002,163003],{},[359,163004,163005,163007,163010,163013,163016],{},[362,163006,25849],{},[362,163008,163009],{},"是否有序",[362,163011,163012],{},"是否可变",[362,163014,163015],{},"是否允许重复",[362,163017,27570],{},[400,163019,163020,163038,163054,163069,163086],{},[359,163021,163022,163025,163028,163031,163034],{},[405,163023,163024],{},"list列表",[405,163026,163027],{},"有序",[405,163029,163030],{},"可变",[405,163032,163033],{},"允许",[405,163035,163036],{},[25,163037,155316],{},[359,163039,163040,163043,163045,163048,163050],{},[405,163041,163042],{},"tuple元组",[405,163044,163027],{},[405,163046,163047],{},"不可变",[405,163049,163033],{},[405,163051,163052],{},[25,163053,155329],{},[359,163055,163056,163059,163061,163063,163065],{},[405,163057,163058],{},"str字符串",[405,163060,163027],{},[405,163062,163047],{},[405,163064,163033],{},[405,163066,163067],{},[25,163068,155939],{},[359,163070,163071,163074,163077,163079,163082],{},[405,163072,163073],{},"set集合",[405,163075,163076],{},"无序",[405,163078,163030],{},[405,163080,163081],{},"不允许",[405,163083,163084],{},[25,163085,155354],{},[359,163087,163088,163091,163093,163095,163098],{},[405,163089,163090],{},"dict字典",[405,163092,163027],{},[405,163094,163030],{},[405,163096,163097],{},"key不允许重复",[405,163099,163100],{},[25,163101,163102],{},"{\"name\": \"小明\"}",[14,163104,163105],{},"Python 3.7 之后，字典保持插入顺序。",[159,163107,163109],{"id":163108},"_62-列表list","6.2 列表list",[14,163111,163112],{},"列表用于保存一组有顺序的数据。",[18,163114,163116],{"className":20,"code":163115,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[25,163117,163118,163138,163163,163184],{"__ignoreMap":23},[28,163119,163120,163122,163124,163126,163128,163130,163132,163134,163136],{"class":30,"line":31},[28,163121,160439],{"class":34},[28,163123,39],{"class":38},[28,163125,52301],{"class":34},[28,163127,149947],{"class":320},[28,163129,12512],{"class":34},[28,163131,150995],{"class":320},[28,163133,12512],{"class":34},[28,163135,159790],{"class":320},[28,163137,33322],{"class":34},[28,163139,163140,163143,163145,163147,163149,163151,163153,163155,163157,163159,163161],{"class":30,"line":94},[28,163141,163142],{"class":34},"numbers ",[28,163144,39],{"class":38},[28,163146,52301],{"class":34},[28,163148,46],{"class":45},[28,163150,12512],{"class":34},[28,163152,52],{"class":45},[28,163154,12512],{"class":34},[28,163156,57],{"class":45},[28,163158,12512],{"class":34},[28,163160,507],{"class":45},[28,163162,33322],{"class":34},[28,163164,163165,163168,163170,163172,163174,163176,163178,163180,163182],{"class":30,"line":109},[28,163166,163167],{"class":34},"mixed ",[28,163169,39],{"class":38},[28,163171,52301],{"class":34},[28,163173,149947],{"class":320},[28,163175,12512],{"class":34},[28,163177,860],{"class":45},[28,163179,12512],{"class":34},[28,163181,31552],{"class":45},[28,163183,33322],{"class":34},[28,163185,163186,163189,163191],{"class":30,"line":125},[28,163187,163188],{"class":34},"empty ",[28,163190,39],{"class":38},[28,163192,51913],{"class":34},[14,163194,163195],{},"推荐一个列表中保存同类数据，代码更清晰。",[159,163197,163199],{"id":163198},"_63-列表索引","6.3 列表索引",[14,163201,163202],{},"正向索引从 0 开始：",[18,163204,163206],{"className":20,"code":163205,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[25,163207,163208,163228,163232,163243,163253],{"__ignoreMap":23},[28,163209,163210,163212,163214,163216,163218,163220,163222,163224,163226],{"class":30,"line":31},[28,163211,160439],{"class":34},[28,163213,39],{"class":38},[28,163215,52301],{"class":34},[28,163217,149947],{"class":320},[28,163219,12512],{"class":34},[28,163221,150995],{"class":320},[28,163223,12512],{"class":34},[28,163225,159790],{"class":320},[28,163227,33322],{"class":34},[28,163229,163230],{"class":30,"line":94},[28,163231,2477],{"emptyLinePlaceholder":144},[28,163233,163234,163236,163239,163241],{"class":30,"line":109},[28,163235,30491],{"class":45},[28,163237,163238],{"class":34},"(names[",[28,163240,407],{"class":45},[28,163242,4734],{"class":34},[28,163244,163245,163247,163249,163251],{"class":30,"line":125},[28,163246,30491],{"class":45},[28,163248,163238],{"class":34},[28,163250,46],{"class":45},[28,163252,4734],{"class":34},[28,163254,163255,163257,163259,163261],{"class":30,"line":131},[28,163256,30491],{"class":45},[28,163258,163238],{"class":34},[28,163260,52],{"class":45},[28,163262,4734],{"class":34},[14,163264,163265],{},"反向索引从 -1 开始：",[18,163267,163269],{"className":20,"code":163268,"language":22,"meta":23,"style":23},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[25,163270,163271,163287],{"__ignoreMap":23},[28,163272,163273,163275,163277,163279,163281,163284],{"class":30,"line":31},[28,163274,30491],{"class":45},[28,163276,163238],{"class":34},[28,163278,742],{"class":38},[28,163280,46],{"class":45},[28,163282,163283],{"class":34},"])  ",[28,163285,163286],{"class":105},"# 小刚\n",[28,163288,163289,163291,163293,163295,163297,163299],{"class":30,"line":94},[28,163290,30491],{"class":45},[28,163292,163238],{"class":34},[28,163294,742],{"class":38},[28,163296,52],{"class":45},[28,163298,163283],{"class":34},[28,163300,163301],{"class":105},"# 小红\n",[14,163303,163304],{},"索引越界会报错：",[18,163306,163308],{"className":20,"code":163307,"language":22,"meta":23,"style":23},"print(names[3])\n",[25,163309,163310],{"__ignoreMap":23},[28,163311,163312,163314,163316,163318],{"class":30,"line":31},[28,163313,30491],{"class":45},[28,163315,163238],{"class":34},[28,163317,57],{"class":45},[28,163319,4734],{"class":34},[159,163321,163323],{"id":163322},"_64-列表常用方法","6.4 列表常用方法",[18,163325,163327],{"className":20,"code":163326,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[25,163328,163329,163345,163349,163358,163372,163386,163390],{"__ignoreMap":23},[28,163330,163331,163333,163335,163337,163339,163341,163343],{"class":30,"line":31},[28,163332,160439],{"class":34},[28,163334,39],{"class":38},[28,163336,52301],{"class":34},[28,163338,149947],{"class":320},[28,163340,12512],{"class":34},[28,163342,150995],{"class":320},[28,163344,33322],{"class":34},[28,163346,163347],{"class":30,"line":94},[28,163348,2477],{"emptyLinePlaceholder":144},[28,163350,163351,163354,163356],{"class":30,"line":109},[28,163352,163353],{"class":34},"names.append(",[28,163355,159790],{"class":320},[28,163357,227],{"class":34},[28,163359,163360,163363,163365,163367,163370],{"class":30,"line":125},[28,163361,163362],{"class":34},"names.insert(",[28,163364,46],{"class":45},[28,163366,12512],{"class":34},[28,163368,163369],{"class":320},"\"小李\"",[28,163371,227],{"class":34},[28,163373,163374,163377,163379,163381,163384],{"class":30,"line":131},[28,163375,163376],{"class":34},"names.extend([",[28,163378,8760],{"class":320},[28,163380,12512],{"class":34},[28,163382,163383],{"class":320},"\"小赵\"",[28,163385,4734],{"class":34},[28,163387,163388],{"class":30,"line":1291},[28,163389,2477],{"emptyLinePlaceholder":144},[28,163391,163392,163394],{"class":30,"line":1297},[28,163393,30491],{"class":45},[28,163395,163396],{"class":34},"(names)\n",[14,163398,163399],{},"删除元素：",[18,163401,163403],{"className":20,"code":163402,"language":22,"meta":23,"style":23},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[25,163404,163405,163414,163424,163438,163450],{"__ignoreMap":23},[28,163406,163407,163410,163412],{"class":30,"line":31},[28,163408,163409],{"class":34},"names.remove(",[28,163411,150995],{"class":320},[28,163413,227],{"class":34},[28,163415,163416,163419,163421],{"class":30,"line":94},[28,163417,163418],{"class":34},"last ",[28,163420,39],{"class":38},[28,163422,163423],{"class":34}," names.pop()\n",[28,163425,163426,163429,163431,163434,163436],{"class":30,"line":109},[28,163427,163428],{"class":34},"first ",[28,163430,39],{"class":38},[28,163432,163433],{"class":34}," names.pop(",[28,163435,407],{"class":45},[28,163437,227],{"class":34},[28,163439,163440,163443,163446,163448],{"class":30,"line":125},[28,163441,163442],{"class":38},"del",[28,163444,163445],{"class":34}," names[",[28,163447,407],{"class":45},[28,163449,33322],{"class":34},[28,163451,163452],{"class":30,"line":131},[28,163453,163454],{"class":34},"names.clear()\n",[14,163456,163457],{},"查询和统计：",[18,163459,163461],{"className":20,"code":163460,"language":22,"meta":23,"style":23},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[25,163462,163463,163491,163495,163506,163517],{"__ignoreMap":23},[28,163464,163465,163467,163469,163471,163473,163475,163477,163479,163481,163483,163485,163487,163489],{"class":30,"line":31},[28,163466,163142],{"class":34},[28,163468,39],{"class":38},[28,163470,52301],{"class":34},[28,163472,46],{"class":45},[28,163474,12512],{"class":34},[28,163476,52],{"class":45},[28,163478,12512],{"class":34},[28,163480,57],{"class":45},[28,163482,12512],{"class":34},[28,163484,52],{"class":45},[28,163486,12512],{"class":34},[28,163488,507],{"class":45},[28,163490,33322],{"class":34},[28,163492,163493],{"class":30,"line":94},[28,163494,2477],{"emptyLinePlaceholder":144},[28,163496,163497,163499,163502,163504],{"class":30,"line":109},[28,163498,30491],{"class":45},[28,163500,163501],{"class":34},"(numbers.index(",[28,163503,57],{"class":45},[28,163505,30573],{"class":34},[28,163507,163508,163510,163513,163515],{"class":30,"line":125},[28,163509,30491],{"class":45},[28,163511,163512],{"class":34},"(numbers.count(",[28,163514,52],{"class":45},[28,163516,30573],{"class":34},[28,163518,163519,163521,163523,163525],{"class":30,"line":131},[28,163520,30491],{"class":45},[28,163522,221],{"class":34},[28,163524,7435],{"class":45},[28,163526,163527],{"class":34},"(numbers))\n",[14,163529,163530],{},"排序：",[18,163532,163534],{"className":20,"code":163533,"language":22,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[25,163535,163536,163560,163564,163569,163576,163580,163594,163600,163604,163609],{"__ignoreMap":23},[28,163537,163538,163540,163542,163544,163546,163548,163550,163552,163554,163556,163558],{"class":30,"line":31},[28,163539,163142],{"class":34},[28,163541,39],{"class":38},[28,163543,52301],{"class":34},[28,163545,57],{"class":45},[28,163547,12512],{"class":34},[28,163549,46],{"class":45},[28,163551,12512],{"class":34},[28,163553,533],{"class":45},[28,163555,12512],{"class":34},[28,163557,52],{"class":45},[28,163559,33322],{"class":34},[28,163561,163562],{"class":30,"line":94},[28,163563,2477],{"emptyLinePlaceholder":144},[28,163565,163566],{"class":30,"line":109},[28,163567,163568],{"class":34},"numbers.sort()\n",[28,163570,163571,163573],{"class":30,"line":125},[28,163572,30491],{"class":45},[28,163574,163575],{"class":34},"(numbers)\n",[28,163577,163578],{"class":30,"line":131},[28,163579,2477],{"emptyLinePlaceholder":144},[28,163581,163582,163585,163588,163590,163592],{"class":30,"line":1291},[28,163583,163584],{"class":34},"numbers.sort(",[28,163586,163587],{"class":5293},"reverse",[28,163589,39],{"class":38},[28,163591,31552],{"class":45},[28,163593,227],{"class":34},[28,163595,163596,163598],{"class":30,"line":1297},[28,163597,30491],{"class":45},[28,163599,163575],{"class":34},[28,163601,163602],{"class":30,"line":1388},[28,163603,2477],{"emptyLinePlaceholder":144},[28,163605,163606],{"class":30,"line":1394},[28,163607,163608],{"class":34},"numbers.reverse()\n",[28,163610,163611,163613],{"class":30,"line":1406},[28,163612,30491],{"class":45},[28,163614,163575],{"class":34},[14,163616,163617,163620,163621,163624],{},[25,163618,163619],{},"sort()"," 会修改原列表，",[25,163622,163623],{},"sorted()"," 返回新列表。",[18,163626,163628],{"className":20,"code":163627,"language":22,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[25,163629,163630,163654,163666,163670,163676],{"__ignoreMap":23},[28,163631,163632,163634,163636,163638,163640,163642,163644,163646,163648,163650,163652],{"class":30,"line":31},[28,163633,163142],{"class":34},[28,163635,39],{"class":38},[28,163637,52301],{"class":34},[28,163639,57],{"class":45},[28,163641,12512],{"class":34},[28,163643,46],{"class":45},[28,163645,12512],{"class":34},[28,163647,533],{"class":45},[28,163649,12512],{"class":34},[28,163651,52],{"class":45},[28,163653,33322],{"class":34},[28,163655,163656,163659,163661,163664],{"class":30,"line":94},[28,163657,163658],{"class":34},"new_numbers ",[28,163660,39],{"class":38},[28,163662,163663],{"class":45}," sorted",[28,163665,163575],{"class":34},[28,163667,163668],{"class":30,"line":109},[28,163669,2477],{"emptyLinePlaceholder":144},[28,163671,163672,163674],{"class":30,"line":125},[28,163673,30491],{"class":45},[28,163675,163575],{"class":34},[28,163677,163678,163680],{"class":30,"line":131},[28,163679,30491],{"class":45},[28,163681,163682],{"class":34},"(new_numbers)\n",[159,163684,163686],{"id":163685},"_65-列表遍历","6.5 列表遍历",[18,163688,163690],{"className":20,"code":163689,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[25,163691,163692,163712,163716,163726],{"__ignoreMap":23},[28,163693,163694,163696,163698,163700,163702,163704,163706,163708,163710],{"class":30,"line":31},[28,163695,160439],{"class":34},[28,163697,39],{"class":38},[28,163699,52301],{"class":34},[28,163701,149947],{"class":320},[28,163703,12512],{"class":34},[28,163705,150995],{"class":320},[28,163707,12512],{"class":34},[28,163709,159790],{"class":320},[28,163711,33322],{"class":34},[28,163713,163714],{"class":30,"line":94},[28,163715,2477],{"emptyLinePlaceholder":144},[28,163717,163718,163720,163722,163724],{"class":30,"line":109},[28,163719,3102],{"class":38},[28,163721,160475],{"class":34},[28,163723,26121],{"class":38},[28,163725,160480],{"class":34},[28,163727,163728,163730],{"class":30,"line":125},[28,163729,31375],{"class":45},[28,163731,150719],{"class":34},[14,163733,163734],{},"需要索引时：",[18,163736,163738],{"className":20,"code":163737,"language":22,"meta":23,"style":23},"for index, name in enumerate(names):\n    print(index, name)\n",[25,163739,163740,163754],{"__ignoreMap":23},[28,163741,163742,163744,163747,163749,163751],{"class":30,"line":31},[28,163743,3102],{"class":38},[28,163745,163746],{"class":34}," index, name ",[28,163748,26121],{"class":38},[28,163750,31682],{"class":45},[28,163752,163753],{"class":34},"(names):\n",[28,163755,163756,163758],{"class":30,"line":94},[28,163757,31375],{"class":45},[28,163759,163760],{"class":34},"(index, name)\n",[14,163762,163763],{},"统计总分：",[18,163765,163767],{"className":20,"code":163766,"language":22,"meta":23,"style":23},"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",[25,163768,163769,163794,163802,163806,163817,163825,163829,163846],{"__ignoreMap":23},[28,163770,163771,163774,163776,163778,163780,163782,163784,163786,163788,163790,163792],{"class":30,"line":31},[28,163772,163773],{"class":34},"scores ",[28,163775,39],{"class":38},[28,163777,52301],{"class":34},[28,163779,1068],{"class":45},[28,163781,12512],{"class":34},[28,163783,944],{"class":45},[28,163785,12512],{"class":34},[28,163787,468],{"class":45},[28,163789,12512],{"class":34},[28,163791,771],{"class":45},[28,163793,33322],{"class":34},[28,163795,163796,163798,163800],{"class":30,"line":94},[28,163797,157319],{"class":34},[28,163799,39],{"class":38},[28,163801,47409],{"class":45},[28,163803,163804],{"class":30,"line":109},[28,163805,2477],{"emptyLinePlaceholder":144},[28,163807,163808,163810,163812,163814],{"class":30,"line":125},[28,163809,3102],{"class":38},[28,163811,157842],{"class":34},[28,163813,26121],{"class":38},[28,163815,163816],{"class":34}," scores:\n",[28,163818,163819,163821,163823],{"class":30,"line":131},[28,163820,159366],{"class":34},[28,163822,9554],{"class":38},[28,163824,1656],{"class":34},[28,163826,163827],{"class":30,"line":1291},[28,163828,2477],{"emptyLinePlaceholder":144},[28,163830,163831,163834,163836,163839,163841,163843],{"class":30,"line":1297},[28,163832,163833],{"class":34},"avg ",[28,163835,39],{"class":38},[28,163837,163838],{"class":34}," total ",[28,163840,794],{"class":38},[28,163842,7408],{"class":45},[28,163844,163845],{"class":34},"(scores)\n",[28,163847,163848,163850,163852,163854,163857,163859,163862,163864,163866,163868],{"class":30,"line":1388},[28,163849,30491],{"class":45},[28,163851,221],{"class":34},[28,163853,271],{"class":38},[28,163855,163856],{"class":320},"\"平均分:",[28,163858,1102],{"class":45},[28,163860,163861],{"class":34},"avg",[28,163863,157218],{"class":38},[28,163865,1150],{"class":45},[28,163867,465],{"class":320},[28,163869,227],{"class":34},[159,163871,163873],{"id":163872},"_66-元组tuple","6.6 元组tuple",[14,163875,163876],{},"元组和列表类似，但不可修改。",[18,163878,163880],{"className":20,"code":163879,"language":22,"meta":23,"style":23},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[25,163881,163882,163899],{"__ignoreMap":23},[28,163883,163884,163887,163889,163891,163893,163895,163897],{"class":30,"line":31},[28,163885,163886],{"class":34},"point ",[28,163888,39],{"class":38},[28,163890,1735],{"class":34},[28,163892,659],{"class":45},[28,163894,12512],{"class":34},[28,163896,102],{"class":45},[28,163898,227],{"class":34},[28,163900,163901,163903,163905,163907,163909,163911,163913,163915,163917],{"class":30,"line":94},[28,163902,116373],{"class":34},[28,163904,39],{"class":38},[28,163906,1735],{"class":34},[28,163908,149947],{"class":320},[28,163910,12512],{"class":34},[28,163912,860],{"class":45},[28,163914,12512],{"class":34},[28,163916,69344],{"class":320},[28,163918,227],{"class":34},[14,163920,163921],{},"单元素元组必须加逗号：",[18,163923,163925],{"className":20,"code":163924,"language":22,"meta":23,"style":23},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[25,163926,163927,163941,163954,163958,163972],{"__ignoreMap":23},[28,163928,163929,163932,163934,163936,163938],{"class":30,"line":31},[28,163930,163931],{"class":34},"t1 ",[28,163933,39],{"class":38},[28,163935,1735],{"class":34},[28,163937,659],{"class":45},[28,163939,163940],{"class":34},",)\n",[28,163942,163943,163946,163948,163950,163952],{"class":30,"line":94},[28,163944,163945],{"class":34},"t2 ",[28,163947,39],{"class":38},[28,163949,1735],{"class":34},[28,163951,659],{"class":45},[28,163953,227],{"class":34},[28,163955,163956],{"class":30,"line":109},[28,163957,2477],{"emptyLinePlaceholder":144},[28,163959,163960,163962,163964,163966,163969],{"class":30,"line":125},[28,163961,30491],{"class":45},[28,163963,221],{"class":34},[28,163965,103166],{"class":45},[28,163967,163968],{"class":34},"(t1))  ",[28,163970,163971],{"class":105},"# tuple\n",[28,163973,163974,163976,163978,163980,163983],{"class":30,"line":131},[28,163975,30491],{"class":45},[28,163977,221],{"class":34},[28,163979,103166],{"class":45},[28,163981,163982],{"class":34},"(t2))  ",[28,163984,163985],{"class":105},"# int\n",[14,163987,163988],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[159,163990,163992],{"id":163991},"_67-字符串str","6.7 字符串str",[14,163994,163995],{},"字符串也是序列，可以索引、切片和遍历。",[18,163997,163999],{"className":20,"code":163998,"language":22,"meta":23,"style":23},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[25,164000,164001,164009,164013,164024,164036,164040,164051],{"__ignoreMap":23},[28,164002,164003,164005,164007],{"class":30,"line":31},[28,164004,156503],{"class":34},[28,164006,39],{"class":38},[28,164008,159740],{"class":320},[28,164010,164011],{"class":30,"line":94},[28,164012,2477],{"emptyLinePlaceholder":144},[28,164014,164015,164017,164020,164022],{"class":30,"line":109},[28,164016,30491],{"class":45},[28,164018,164019],{"class":34},"(text[",[28,164021,407],{"class":45},[28,164023,4734],{"class":34},[28,164025,164026,164028,164030,164032,164034],{"class":30,"line":125},[28,164027,30491],{"class":45},[28,164029,164019],{"class":34},[28,164031,742],{"class":38},[28,164033,46],{"class":45},[28,164035,4734],{"class":34},[28,164037,164038],{"class":30,"line":131},[28,164039,2477],{"emptyLinePlaceholder":144},[28,164041,164042,164044,164046,164048],{"class":30,"line":1291},[28,164043,3102],{"class":38},[28,164045,159751],{"class":34},[28,164047,26121],{"class":38},[28,164049,164050],{"class":34}," text:\n",[28,164052,164053,164055],{"class":30,"line":1297},[28,164054,31375],{"class":45},[28,164056,159762],{"class":34},[14,164058,164059],{},"字符串不可变：",[18,164061,164063],{"className":20,"code":164062,"language":22,"meta":23,"style":23},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[25,164064,164065,164073],{"__ignoreMap":23},[28,164066,164067,164069,164071],{"class":30,"line":31},[28,164068,156503],{"class":34},[28,164070,39],{"class":38},[28,164072,159740],{"class":320},[28,164074,164075,164078,164080,164082,164084,164087],{"class":30,"line":94},[28,164076,164077],{"class":34},"text[",[28,164079,407],{"class":45},[28,164081,4520],{"class":34},[28,164083,39],{"class":38},[28,164085,164086],{"class":320}," \"P\"",[28,164088,164089],{"class":105},"  # 报错\n",[14,164091,164092],{},"如果要得到新字符串：",[18,164094,164096],{"className":20,"code":164095,"language":22,"meta":23,"style":23},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[25,164097,164098,164106,164124],{"__ignoreMap":23},[28,164099,164100,164102,164104],{"class":30,"line":31},[28,164101,156503],{"class":34},[28,164103,39],{"class":38},[28,164105,159740],{"class":320},[28,164107,164108,164110,164112,164114,164116,164119,164121],{"class":30,"line":94},[28,164109,156503],{"class":34},[28,164111,39],{"class":38},[28,164113,164086],{"class":320},[28,164115,45642],{"class":38},[28,164117,164118],{"class":34}," text[",[28,164120,46],{"class":45},[28,164122,164123],{"class":34},":]\n",[28,164125,164126,164128],{"class":30,"line":109},[28,164127,30491],{"class":45},[28,164129,164130],{"class":34},"(text)\n",[159,164132,164134],{"id":164133},"_68-切片","6.8 切片",[14,164136,164137],{},"切片用于从序列中取一部分。",[18,164139,164141],{"className":20,"code":164140,"language":22,"meta":23,"style":23},"序列[开始:结束:步长]\n",[25,164142,164143],{"__ignoreMap":23},[28,164144,164145],{"class":30,"line":31},[28,164146,164140],{"class":34},[14,164148,164149],{},"结束位置不包含。",[18,164151,164153],{"className":20,"code":164152,"language":22,"meta":23,"style":23},"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",[25,164154,164155,164192,164196,164215,164230,164244,164258],{"__ignoreMap":23},[28,164156,164157,164160,164162,164164,164166,164168,164170,164172,164174,164176,164178,164180,164182,164184,164186,164188,164190],{"class":30,"line":31},[28,164158,164159],{"class":34},"nums ",[28,164161,39],{"class":38},[28,164163,52301],{"class":34},[28,164165,407],{"class":45},[28,164167,12512],{"class":34},[28,164169,46],{"class":45},[28,164171,12512],{"class":34},[28,164173,52],{"class":45},[28,164175,12512],{"class":34},[28,164177,57],{"class":45},[28,164179,12512],{"class":34},[28,164181,507],{"class":45},[28,164183,12512],{"class":34},[28,164185,533],{"class":45},[28,164187,12512],{"class":34},[28,164189,558],{"class":45},[28,164191,33322],{"class":34},[28,164193,164194],{"class":30,"line":94},[28,164195,2477],{"emptyLinePlaceholder":144},[28,164197,164198,164200,164203,164205,164207,164209,164212],{"class":30,"line":109},[28,164199,30491],{"class":45},[28,164201,164202],{"class":34},"(nums[",[28,164204,46],{"class":45},[28,164206,1065],{"class":34},[28,164208,507],{"class":45},[28,164210,164211],{"class":34},"])    ",[28,164213,164214],{"class":105},"# [1, 2, 3]\n",[28,164216,164217,164219,164222,164224,164227],{"class":30,"line":125},[28,164218,30491],{"class":45},[28,164220,164221],{"class":34},"(nums[:",[28,164223,57],{"class":45},[28,164225,164226],{"class":34},"])     ",[28,164228,164229],{"class":105},"# [0, 1, 2]\n",[28,164231,164232,164234,164236,164238,164241],{"class":30,"line":131},[28,164233,30491],{"class":45},[28,164235,164202],{"class":34},[28,164237,57],{"class":45},[28,164239,164240],{"class":34},":])     ",[28,164242,164243],{"class":105},"# [3, 4, 5, 6]\n",[28,164245,164246,164248,164251,164253,164255],{"class":30,"line":1291},[28,164247,30491],{"class":45},[28,164249,164250],{"class":34},"(nums[::",[28,164252,52],{"class":45},[28,164254,164211],{"class":34},[28,164256,164257],{"class":105},"# [0, 2, 4, 6]\n",[28,164259,164260,164262,164264,164266,164268,164271],{"class":30,"line":1297},[28,164261,30491],{"class":45},[28,164263,164250],{"class":34},[28,164265,742],{"class":38},[28,164267,46],{"class":45},[28,164269,164270],{"class":34},"])   ",[28,164272,164273],{"class":105},"# 反转\n",[14,164275,164276],{},"字符串切片：",[18,164278,164280],{"className":20,"code":164279,"language":22,"meta":23,"style":23},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[25,164281,164282,164291,164305],{"__ignoreMap":23},[28,164283,164284,164286,164288],{"class":30,"line":31},[28,164285,156503],{"class":34},[28,164287,39],{"class":38},[28,164289,164290],{"class":320}," \"abcdef\"\n",[28,164292,164293,164295,164297,164299,164301,164303],{"class":30,"line":94},[28,164294,30491],{"class":45},[28,164296,164019],{"class":34},[28,164298,46],{"class":45},[28,164300,1065],{"class":34},[28,164302,507],{"class":45},[28,164304,4734],{"class":34},[28,164306,164307,164309,164312,164314,164316],{"class":30,"line":109},[28,164308,30491],{"class":45},[28,164310,164311],{"class":34},"(text[::",[28,164313,742],{"class":38},[28,164315,46],{"class":45},[28,164317,4734],{"class":34},[159,164319,164321],{"id":164320},"_69-集合set","6.9 集合set",[14,164323,164324],{},"集合特点：",[171,164326,164327,164330,164333],{},[174,164328,164329],{},"无序。",[174,164331,164332],{},"元素不重复。",[174,164334,164335],{},"可以做交集、并集、差集。",[18,164337,164339],{"className":20,"code":164338,"language":22,"meta":23,"style":23},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[25,164340,164341,164369],{"__ignoreMap":23},[28,164342,164343,164345,164347,164349,164351,164353,164355,164357,164359,164361,164363,164365,164367],{"class":30,"line":31},[28,164344,164159],{"class":34},[28,164346,39],{"class":38},[28,164348,4525],{"class":34},[28,164350,46],{"class":45},[28,164352,12512],{"class":34},[28,164354,52],{"class":45},[28,164356,12512],{"class":34},[28,164358,57],{"class":45},[28,164360,12512],{"class":34},[28,164362,57],{"class":45},[28,164364,12512],{"class":34},[28,164366,507],{"class":45},[28,164368,1642],{"class":34},[28,164370,164371,164373],{"class":30,"line":94},[28,164372,30491],{"class":45},[28,164374,164375],{"class":34},"(nums)\n",[14,164377,164378],{},"创建空集合：",[18,164380,164382],{"className":20,"code":164381,"language":22,"meta":23,"style":23},"s = set()\n",[25,164383,164384],{"__ignoreMap":23},[28,164385,164386,164388,164390,164392],{"class":30,"line":31},[28,164387,10656],{"class":34},[28,164389,39],{"class":38},[28,164391,119781],{"class":45},[28,164393,2053],{"class":34},[14,164395,9102,164396,164398],{},[25,164397,32535],{}," 是空字典，不是空集合。",[14,164400,164401],{},"集合常用操作：",[18,164403,164405],{"className":20,"code":164404,"language":22,"meta":23,"style":23},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[25,164406,164407,164427,164431,164440,164449,164458],{"__ignoreMap":23},[28,164408,164409,164411,164413,164415,164417,164419,164421,164423,164425],{"class":30,"line":31},[28,164410,10656],{"class":34},[28,164412,39],{"class":38},[28,164414,4525],{"class":34},[28,164416,46],{"class":45},[28,164418,12512],{"class":34},[28,164420,52],{"class":45},[28,164422,12512],{"class":34},[28,164424,57],{"class":45},[28,164426,1642],{"class":34},[28,164428,164429],{"class":30,"line":94},[28,164430,2477],{"emptyLinePlaceholder":144},[28,164432,164433,164436,164438],{"class":30,"line":109},[28,164434,164435],{"class":34},"s.add(",[28,164437,507],{"class":45},[28,164439,227],{"class":34},[28,164441,164442,164445,164447],{"class":30,"line":125},[28,164443,164444],{"class":34},"s.remove(",[28,164446,52],{"class":45},[28,164448,227],{"class":34},[28,164450,164451,164454,164456],{"class":30,"line":131},[28,164452,164453],{"class":34},"s.discard(",[28,164455,659],{"class":45},[28,164457,227],{"class":34},[28,164459,164460,164462,164464,164466],{"class":30,"line":1291},[28,164461,30491],{"class":45},[28,164463,221],{"class":34},[28,164465,7435],{"class":45},[28,164467,164468],{"class":34},"(s))\n",[14,164470,164471],{},"交并差：",[18,164473,164475],{"className":20,"code":164474,"language":22,"meta":23,"style":23},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[25,164476,164477,164497,164517,164521,164536,164549],{"__ignoreMap":23},[28,164478,164479,164481,164483,164485,164487,164489,164491,164493,164495],{"class":30,"line":31},[28,164480,10996],{"class":34},[28,164482,39],{"class":38},[28,164484,4525],{"class":34},[28,164486,46],{"class":45},[28,164488,12512],{"class":34},[28,164490,52],{"class":45},[28,164492,12512],{"class":34},[28,164494,57],{"class":45},[28,164496,1642],{"class":34},[28,164498,164499,164501,164503,164505,164507,164509,164511,164513,164515],{"class":30,"line":94},[28,164500,11022],{"class":34},[28,164502,39],{"class":38},[28,164504,4525],{"class":34},[28,164506,57],{"class":45},[28,164508,12512],{"class":34},[28,164510,507],{"class":45},[28,164512,12512],{"class":34},[28,164514,533],{"class":45},[28,164516,1642],{"class":34},[28,164518,164519],{"class":30,"line":109},[28,164520,2477],{"emptyLinePlaceholder":144},[28,164522,164523,164525,164528,164530,164533],{"class":30,"line":125},[28,164524,30491],{"class":45},[28,164526,164527],{"class":34},"(a ",[28,164529,567],{"class":38},[28,164531,164532],{"class":34}," b)  ",[28,164534,164535],{"class":105},"# 交集\n",[28,164537,164538,164540,164542,164544,164546],{"class":30,"line":131},[28,164539,30491],{"class":45},[28,164541,164527],{"class":34},[28,164543,1126],{"class":38},[28,164545,164532],{"class":34},[28,164547,164548],{"class":105},"# 并集\n",[28,164550,164551,164553,164555,164557,164559],{"class":30,"line":1291},[28,164552,30491],{"class":45},[28,164554,164527],{"class":34},[28,164556,742],{"class":38},[28,164558,164532],{"class":34},[28,164560,164561],{"class":105},"# 差集\n",[159,164563,164565],{"id":164564},"_610-字典dict","6.10 字典dict",[14,164567,164568],{},"字典通过 key-value 保存数据。",[18,164570,164572],{"className":20,"code":164571,"language":22,"meta":23,"style":23},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[25,164573,164574,164582,164592,164603,164613],{"__ignoreMap":23},[28,164575,164576,164578,164580],{"class":30,"line":31},[28,164577,149540],{"class":34},[28,164579,39],{"class":38},[28,164581,15649],{"class":34},[28,164583,164584,164586,164588,164590],{"class":30,"line":94},[28,164585,147079],{"class":320},[28,164587,51512],{"class":34},[28,164589,149947],{"class":320},[28,164591,31542],{"class":34},[28,164593,164594,164597,164599,164601],{"class":30,"line":109},[28,164595,164596],{"class":320},"    \"age\"",[28,164598,51512],{"class":34},[28,164600,860],{"class":45},[28,164602,31542],{"class":34},[28,164604,164605,164608,164610],{"class":30,"line":125},[28,164606,164607],{"class":320},"    \"score\"",[28,164609,51512],{"class":34},[28,164611,164612],{"class":45},"95\n",[28,164614,164615],{"class":30,"line":131},[28,164616,1642],{"class":34},[14,164618,164619],{},"获取值：",[18,164621,164623],{"className":20,"code":164622,"language":22,"meta":23,"style":23},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[25,164624,164625,164636],{"__ignoreMap":23},[28,164626,164627,164629,164632,164634],{"class":30,"line":31},[28,164628,30491],{"class":45},[28,164630,164631],{"class":34},"(student[",[28,164633,62754],{"class":320},[28,164635,4734],{"class":34},[28,164637,164638,164640,164643,164645],{"class":30,"line":94},[28,164639,30491],{"class":45},[28,164641,164642],{"class":34},"(student.get(",[28,164644,62754],{"class":320},[28,164646,30573],{"class":34},[14,164648,15465],{},[18,164650,164652],{"className":20,"code":164651,"language":22,"meta":23,"style":23},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[25,164653,164654,164667],{"__ignoreMap":23},[28,164655,164656,164658,164661,164664],{"class":30,"line":31},[28,164657,152918],{"class":34},[28,164659,164660],{"class":320},"\"address\"",[28,164662,164663],{"class":34},"]     ",[28,164665,164666],{"class":105},"# key不存在会报错\n",[28,164668,164669,164672,164674,164676],{"class":30,"line":94},[28,164670,164671],{"class":34},"student.get(",[28,164673,164660],{"class":320},[28,164675,13791],{"class":34},[28,164677,164678],{"class":105},"# key不存在返回None\n",[14,164680,164681],{},"设置默认值：",[18,164683,164685],{"className":20,"code":164684,"language":22,"meta":23,"style":23},"print(student.get(\"address\", \"未知\"))\n",[25,164686,164687],{"__ignoreMap":23},[28,164688,164689,164691,164693,164695,164697,164700],{"class":30,"line":31},[28,164690,30491],{"class":45},[28,164692,164642],{"class":34},[28,164694,164660],{"class":320},[28,164696,12512],{"class":34},[28,164698,164699],{"class":320},"\"未知\"",[28,164701,30573],{"class":34},[14,164703,164704],{},"新增和修改：",[18,164706,164708],{"className":20,"code":164707,"language":22,"meta":23,"style":23},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[25,164709,164710,164723],{"__ignoreMap":23},[28,164711,164712,164714,164716,164718,164720],{"class":30,"line":31},[28,164713,152918],{"class":34},[28,164715,69199],{"class":320},[28,164717,4520],{"class":34},[28,164719,39],{"class":38},[28,164721,164722],{"class":45}," 19\n",[28,164724,164725,164727,164729,164731,164733],{"class":30,"line":94},[28,164726,152918],{"class":34},[28,164728,164660],{"class":320},[28,164730,4520],{"class":34},[28,164732,39],{"class":38},[28,164734,164735],{"class":320}," \"北京\"\n",[14,164737,164738],{},"删除：",[18,164740,164742],{"className":20,"code":164741,"language":22,"meta":23,"style":23},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[25,164743,164744,164757,164767],{"__ignoreMap":23},[28,164745,164746,164748,164750,164753,164755],{"class":30,"line":31},[28,164747,155417],{"class":34},[28,164749,39],{"class":38},[28,164751,164752],{"class":34}," student.pop(",[28,164754,151531],{"class":320},[28,164756,227],{"class":34},[28,164758,164759,164761,164763,164765],{"class":30,"line":94},[28,164760,163442],{"class":38},[28,164762,152208],{"class":34},[28,164764,69199],{"class":320},[28,164766,33322],{"class":34},[28,164768,164769],{"class":30,"line":109},[28,164770,164771],{"class":34},"student.clear()\n",[159,164773,164775],{"id":164774},"_611-字典遍历","6.11 字典遍历",[14,164777,164778],{},"遍历 key：",[18,164780,164782],{"className":20,"code":164781,"language":22,"meta":23,"style":23},"for key in student:\n    print(key, student[key])\n",[25,164783,164784,164796],{"__ignoreMap":23},[28,164785,164786,164788,164791,164793],{"class":30,"line":31},[28,164787,3102],{"class":38},[28,164789,164790],{"class":34}," key ",[28,164792,26121],{"class":38},[28,164794,164795],{"class":34}," student:\n",[28,164797,164798,164800],{"class":30,"line":94},[28,164799,31375],{"class":45},[28,164801,164802],{"class":34},"(key, student[key])\n",[14,164804,164805],{},"遍历 value：",[18,164807,164809],{"className":20,"code":164808,"language":22,"meta":23,"style":23},"for value in student.values():\n    print(value)\n",[25,164810,164811,164823],{"__ignoreMap":23},[28,164812,164813,164815,164818,164820],{"class":30,"line":31},[28,164814,3102],{"class":38},[28,164816,164817],{"class":34}," value ",[28,164819,26121],{"class":38},[28,164821,164822],{"class":34}," student.values():\n",[28,164824,164825,164827],{"class":30,"line":94},[28,164826,31375],{"class":45},[28,164828,164829],{"class":34},"(value)\n",[14,164831,164832],{},"遍历 key 和 value：",[18,164834,164836],{"className":20,"code":164835,"language":22,"meta":23,"style":23},"for key, value in student.items():\n    print(key, value)\n",[25,164837,164838,164850],{"__ignoreMap":23},[28,164839,164840,164842,164845,164847],{"class":30,"line":31},[28,164841,3102],{"class":38},[28,164843,164844],{"class":34}," key, value ",[28,164846,26121],{"class":38},[28,164848,164849],{"class":34}," student.items():\n",[28,164851,164852,164854],{"class":30,"line":94},[28,164853,31375],{"class":45},[28,164855,164856],{"class":34},"(key, value)\n",[159,164858,164860],{"id":164859},"_612-嵌套容器","6.12 嵌套容器",[14,164862,164863],{},"列表中保存字典，是项目中最常见的结构之一。",[18,164865,164867],{"className":20,"code":164866,"language":22,"meta":23,"style":23},"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",[25,164868,164869,164877,164905,164933,164961,164965,164969,164979],{"__ignoreMap":23},[28,164870,164871,164873,164875],{"class":30,"line":31},[28,164872,159775],{"class":34},[28,164874,39],{"class":38},[28,164876,55522],{"class":34},[28,164878,164879,164881,164883,164885,164887,164889,164891,164893,164895,164897,164899,164901,164903],{"class":30,"line":94},[28,164880,148444],{"class":34},[28,164882,62754],{"class":320},[28,164884,51512],{"class":34},[28,164886,149947],{"class":320},[28,164888,12512],{"class":34},[28,164890,69199],{"class":320},[28,164892,51512],{"class":34},[28,164894,860],{"class":45},[28,164896,12512],{"class":34},[28,164898,151531],{"class":320},[28,164900,51512],{"class":34},[28,164902,1193],{"class":45},[28,164904,5007],{"class":34},[28,164906,164907,164909,164911,164913,164915,164917,164919,164921,164923,164925,164927,164929,164931],{"class":30,"line":109},[28,164908,148444],{"class":34},[28,164910,62754],{"class":320},[28,164912,51512],{"class":34},[28,164914,150995],{"class":320},[28,164916,12512],{"class":34},[28,164918,69199],{"class":320},[28,164920,51512],{"class":34},[28,164922,835],{"class":45},[28,164924,12512],{"class":34},[28,164926,151531],{"class":320},[28,164928,51512],{"class":34},[28,164930,1017],{"class":45},[28,164932,5007],{"class":34},[28,164934,164935,164937,164939,164941,164943,164945,164947,164949,164951,164953,164955,164957,164959],{"class":30,"line":125},[28,164936,148444],{"class":34},[28,164938,62754],{"class":320},[28,164940,51512],{"class":34},[28,164942,159790],{"class":320},[28,164944,12512],{"class":34},[28,164946,69199],{"class":320},[28,164948,51512],{"class":34},[28,164950,885],{"class":45},[28,164952,12512],{"class":34},[28,164954,151531],{"class":320},[28,164956,51512],{"class":34},[28,164958,619],{"class":45},[28,164960,5007],{"class":34},[28,164962,164963],{"class":30,"line":131},[28,164964,33322],{"class":34},[28,164966,164967],{"class":30,"line":1291},[28,164968,2477],{"emptyLinePlaceholder":144},[28,164970,164971,164973,164975,164977],{"class":30,"line":1297},[28,164972,3102],{"class":38},[28,164974,152196],{"class":34},[28,164976,26121],{"class":38},[28,164978,152201],{"class":34},[28,164980,164981,164983,164985,164987,164990,164992],{"class":30,"line":1388},[28,164982,31375],{"class":45},[28,164984,164631],{"class":34},[28,164986,62754],{"class":320},[28,164988,164989],{"class":34},"], student[",[28,164991,151531],{"class":320},[28,164993,4734],{"class":34},[14,164995,164996],{},"统计平均分：",[18,164998,165000],{"className":20,"code":164999,"language":22,"meta":23,"style":23},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[25,165001,165002,165010,165014,165024,165036,165040,165055],{"__ignoreMap":23},[28,165003,165004,165006,165008],{"class":30,"line":31},[28,165005,157319],{"class":34},[28,165007,39],{"class":38},[28,165009,47409],{"class":45},[28,165011,165012],{"class":30,"line":94},[28,165013,2477],{"emptyLinePlaceholder":144},[28,165015,165016,165018,165020,165022],{"class":30,"line":109},[28,165017,3102],{"class":38},[28,165019,152196],{"class":34},[28,165021,26121],{"class":38},[28,165023,152201],{"class":34},[28,165025,165026,165028,165030,165032,165034],{"class":30,"line":125},[28,165027,159366],{"class":34},[28,165029,9554],{"class":38},[28,165031,152208],{"class":34},[28,165033,151531],{"class":320},[28,165035,33322],{"class":34},[28,165037,165038],{"class":30,"line":131},[28,165039,2477],{"emptyLinePlaceholder":144},[28,165041,165042,165044,165046,165048,165050,165052],{"class":30,"line":1291},[28,165043,163833],{"class":34},[28,165045,39],{"class":38},[28,165047,163838],{"class":34},[28,165049,794],{"class":38},[28,165051,7408],{"class":45},[28,165053,165054],{"class":34},"(students)\n",[28,165056,165057,165059,165061,165063,165065,165067,165069,165071,165073,165075],{"class":30,"line":1297},[28,165058,30491],{"class":45},[28,165060,221],{"class":34},[28,165062,271],{"class":38},[28,165064,163856],{"class":320},[28,165066,1102],{"class":45},[28,165068,163861],{"class":34},[28,165070,157218],{"class":38},[28,165072,1150],{"class":45},[28,165074,465],{"class":320},[28,165076,227],{"class":34},[14,165078,165079],{},"查找学生：",[18,165081,165083],{"className":20,"code":165082,"language":22,"meta":23,"style":23},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[25,165084,165085,165100,165104,165114,165128,165134,165138,165144],{"__ignoreMap":23},[28,165086,165087,165089,165091,165093,165095,165098],{"class":30,"line":31},[28,165088,111637],{"class":34},[28,165090,39],{"class":38},[28,165092,60680],{"class":45},[28,165094,221],{"class":34},[28,165096,165097],{"class":320},"\"请输入学生姓名:\"",[28,165099,227],{"class":34},[28,165101,165102],{"class":30,"line":94},[28,165103,2477],{"emptyLinePlaceholder":144},[28,165105,165106,165108,165110,165112],{"class":30,"line":109},[28,165107,3102],{"class":38},[28,165109,152196],{"class":34},[28,165111,26121],{"class":38},[28,165113,152201],{"class":34},[28,165115,165116,165118,165120,165122,165124,165126],{"class":30,"line":125},[28,165117,3178],{"class":38},[28,165119,152208],{"class":34},[28,165121,62754],{"class":320},[28,165123,4520],{"class":34},[28,165125,3026],{"class":38},[28,165127,160491],{"class":34},[28,165129,165130,165132],{"class":30,"line":131},[28,165131,32527],{"class":45},[28,165133,150101],{"class":34},[28,165135,165136],{"class":30,"line":1291},[28,165137,31703],{"class":38},[28,165139,165140,165142],{"class":30,"line":1297},[28,165141,1778],{"class":38},[28,165143,3816],{"class":34},[28,165145,165146,165148,165150,165153],{"class":30,"line":1388},[28,165147,31375],{"class":45},[28,165149,221],{"class":34},[28,165151,165152],{"class":320},"\"没有找到\"",[28,165154,227],{"class":34},[159,165156,165158],{"id":165157},"_613-容器通用操作","6.13 容器通用操作",[14,165160,165161],{},"长度：",[18,165163,165165],{"className":20,"code":165164,"language":22,"meta":23,"style":23},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[25,165166,165167,165186,165196],{"__ignoreMap":23},[28,165168,165169,165171,165174,165176,165178,165180,165182,165184],{"class":30,"line":31},[28,165170,7435],{"class":45},[28,165172,165173],{"class":34},"([",[28,165175,46],{"class":45},[28,165177,12512],{"class":34},[28,165179,52],{"class":45},[28,165181,12512],{"class":34},[28,165183,57],{"class":45},[28,165185,4734],{"class":34},[28,165187,165188,165190,165192,165194],{"class":30,"line":94},[28,165189,7435],{"class":45},[28,165191,221],{"class":34},[28,165193,155939],{"class":320},[28,165195,227],{"class":34},[28,165197,165198,165200,165203,165205,165207,165209],{"class":30,"line":109},[28,165199,7435],{"class":45},[28,165201,165202],{"class":34},"({",[28,165204,62754],{"class":320},[28,165206,51512],{"class":34},[28,165208,149947],{"class":320},[28,165210,165211],{"class":34},"})\n",[14,165213,165214],{},"最大最小：",[18,165216,165218],{"className":20,"code":165217,"language":22,"meta":23,"style":23},"max([1, 2, 3])\nmin([1, 2, 3])\n",[25,165219,165220,165238],{"__ignoreMap":23},[28,165221,165222,165224,165226,165228,165230,165232,165234,165236],{"class":30,"line":31},[28,165223,6092],{"class":45},[28,165225,165173],{"class":34},[28,165227,46],{"class":45},[28,165229,12512],{"class":34},[28,165231,52],{"class":45},[28,165233,12512],{"class":34},[28,165235,57],{"class":45},[28,165237,4734],{"class":34},[28,165239,165240,165243,165245,165247,165249,165251,165253,165255],{"class":30,"line":94},[28,165241,165242],{"class":45},"min",[28,165244,165173],{"class":34},[28,165246,46],{"class":45},[28,165248,12512],{"class":34},[28,165250,52],{"class":45},[28,165252,12512],{"class":34},[28,165254,57],{"class":45},[28,165256,4734],{"class":34},[14,165258,165259],{},"求和：",[18,165261,165263],{"className":20,"code":165262,"language":22,"meta":23,"style":23},"sum([1, 2, 3])\n",[25,165264,165265],{"__ignoreMap":23},[28,165266,165267,165270,165272,165274,165276,165278,165280,165282],{"class":30,"line":31},[28,165268,165269],{"class":45},"sum",[28,165271,165173],{"class":34},[28,165273,46],{"class":45},[28,165275,12512],{"class":34},[28,165277,52],{"class":45},[28,165279,12512],{"class":34},[28,165281,57],{"class":45},[28,165283,4734],{"class":34},[14,165285,163530],{},[18,165287,165289],{"className":20,"code":165288,"language":22,"meta":23,"style":23},"sorted([3, 1, 2])\n",[25,165290,165291],{"__ignoreMap":23},[28,165292,165293,165296,165298,165300,165302,165304,165306,165308],{"class":30,"line":31},[28,165294,165295],{"class":45},"sorted",[28,165297,165173],{"class":34},[28,165299,57],{"class":45},[28,165301,12512],{"class":34},[28,165303,46],{"class":45},[28,165305,12512],{"class":34},[28,165307,52],{"class":45},[28,165309,4734],{"class":34},[14,165311,165312],{},"类型转换：",[18,165314,165316],{"className":20,"code":165315,"language":22,"meta":23,"style":23},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[25,165317,165318,165328,165346],{"__ignoreMap":23},[28,165319,165320,165322,165324,165326],{"class":30,"line":31},[28,165321,154129],{"class":45},[28,165323,221],{"class":34},[28,165325,155939],{"class":320},[28,165327,227],{"class":34},[28,165329,165330,165332,165334,165336,165338,165340,165342,165344],{"class":30,"line":94},[28,165331,155324],{"class":45},[28,165333,165173],{"class":34},[28,165335,46],{"class":45},[28,165337,12512],{"class":34},[28,165339,52],{"class":45},[28,165341,12512],{"class":34},[28,165343,57],{"class":45},[28,165345,4734],{"class":34},[28,165347,165348,165350,165352,165354,165356,165358,165360,165362,165364,165366],{"class":30,"line":109},[28,165349,155349],{"class":45},[28,165351,165173],{"class":34},[28,165353,46],{"class":45},[28,165355,12512],{"class":34},[28,165357,46],{"class":45},[28,165359,12512],{"class":34},[28,165361,52],{"class":45},[28,165363,12512],{"class":34},[28,165365,57],{"class":45},[28,165367,4734],{"class":34},[14,165369,165370],{},"成员判断：",[18,165372,165374],{"className":20,"code":165373,"language":22,"meta":23,"style":23},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[25,165375,165376,165393,165417],{"__ignoreMap":23},[28,165377,165378,165380,165382,165385,165388,165391],{"class":30,"line":31},[28,165379,30491],{"class":45},[28,165381,221],{"class":34},[28,165383,165384],{"class":320},"\"a\"",[28,165386,165387],{"class":38}," in",[28,165389,165390],{"class":320}," \"abc\"",[28,165392,227],{"class":34},[28,165394,165395,165397,165399,165401,165403,165405,165407,165409,165411,165413,165415],{"class":30,"line":94},[28,165396,30491],{"class":45},[28,165398,221],{"class":34},[28,165400,46],{"class":45},[28,165402,165387],{"class":38},[28,165404,52301],{"class":34},[28,165406,46],{"class":45},[28,165408,12512],{"class":34},[28,165410,52],{"class":45},[28,165412,12512],{"class":34},[28,165414,57],{"class":45},[28,165416,4734],{"class":34},[28,165418,165419,165421,165423,165425,165427,165429,165431,165433,165435],{"class":30,"line":109},[28,165420,30491],{"class":45},[28,165422,221],{"class":34},[28,165424,62754],{"class":320},[28,165426,165387],{"class":38},[28,165428,4525],{"class":34},[28,165430,62754],{"class":320},[28,165432,51512],{"class":34},[28,165434,149947],{"class":320},[28,165436,165211],{"class":34},[159,165438,165440],{"id":165439},"_614-推导式","6.14 推导式",[14,165442,165443],{},"推导式用于快速生成容器。",[14,165445,165446],{},"列表推导式：",[18,165448,165450],{"className":20,"code":165449,"language":22,"meta":23,"style":23},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[25,165451,165452,165479],{"__ignoreMap":23},[28,165453,165454,165456,165458,165461,165463,165465,165467,165469,165471,165473,165475,165477],{"class":30,"line":31},[28,165455,164159],{"class":34},[28,165457,39],{"class":38},[28,165459,165460],{"class":34}," [i ",[28,165462,3102],{"class":38},[28,165464,9515],{"class":34},[28,165466,26121],{"class":38},[28,165468,32519],{"class":45},[28,165470,221],{"class":34},[28,165472,46],{"class":45},[28,165474,12512],{"class":34},[28,165476,558],{"class":45},[28,165478,97359],{"class":34},[28,165480,165481,165483],{"class":30,"line":94},[28,165482,30491],{"class":45},[28,165484,164375],{"class":34},[14,165486,165487],{},"带条件：",[18,165489,165491],{"className":20,"code":165490,"language":22,"meta":23,"style":23},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[25,165492,165493,165534],{"__ignoreMap":23},[28,165494,165495,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528,165530,165532],{"class":30,"line":31},[28,165496,165497],{"class":34},"even_nums ",[28,165499,39],{"class":38},[28,165501,165460],{"class":34},[28,165503,3102],{"class":38},[28,165505,9515],{"class":34},[28,165507,26121],{"class":38},[28,165509,32519],{"class":45},[28,165511,221],{"class":34},[28,165513,46],{"class":45},[28,165515,12512],{"class":34},[28,165517,551],{"class":45},[28,165519,13791],{"class":34},[28,165521,1608],{"class":38},[28,165523,9515],{"class":34},[28,165525,542],{"class":38},[28,165527,14832],{"class":45},[28,165529,101618],{"class":38},[28,165531,4170],{"class":45},[28,165533,33322],{"class":34},[28,165535,165536,165538],{"class":30,"line":94},[28,165537,30491],{"class":45},[28,165539,165540],{"class":34},"(even_nums)\n",[14,165542,165543],{},"字典推导式：",[18,165545,165547],{"className":20,"code":165546,"language":22,"meta":23,"style":23},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[25,165548,165549,165583],{"__ignoreMap":23},[28,165550,165551,165554,165556,165559,165561,165563,165566,165568,165570,165572,165574,165576,165578,165580],{"class":30,"line":31},[28,165552,165553],{"class":34},"squares ",[28,165555,39],{"class":38},[28,165557,165558],{"class":34}," {i: i ",[28,165560,10738],{"class":38},[28,165562,14832],{"class":45},[28,165564,165565],{"class":38}," for",[28,165567,9515],{"class":34},[28,165569,26121],{"class":38},[28,165571,32519],{"class":45},[28,165573,221],{"class":34},[28,165575,46],{"class":45},[28,165577,12512],{"class":34},[28,165579,558],{"class":45},[28,165581,165582],{"class":34},")}\n",[28,165584,165585,165587],{"class":30,"line":94},[28,165586,30491],{"class":45},[28,165588,165589],{"class":34},"(squares)\n",[14,165591,165592],{},"集合推导式：",[18,165594,165596],{"className":20,"code":165595,"language":22,"meta":23,"style":23},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[25,165597,165598,165619],{"__ignoreMap":23},[28,165599,165600,165603,165605,165608,165610,165612,165614,165617],{"class":30,"line":31},[28,165601,165602],{"class":34},"chars ",[28,165604,39],{"class":38},[28,165606,165607],{"class":34}," {ch ",[28,165609,3102],{"class":38},[28,165611,159751],{"class":34},[28,165613,26121],{"class":38},[28,165615,165616],{"class":320}," \"hello\"",[28,165618,1642],{"class":34},[28,165620,165621,165623],{"class":30,"line":94},[28,165622,30491],{"class":45},[28,165624,165625],{"class":34},"(chars)\n",[14,165627,165628],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[159,165630,165632],{"id":165631},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[18,165634,165636],{"className":20,"code":165635,"language":22,"meta":23,"style":23},"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",[25,165637,165638,165646,165666,165686,165706,165726,165730,165734,165742,165756,165765,165769,165779,165791,165795,165815,165824,165828,165844,165849,165853,165867,165871,165893,165929],{"__ignoreMap":23},[28,165639,165640,165642,165644],{"class":30,"line":31},[28,165641,159775],{"class":34},[28,165643,39],{"class":38},[28,165645,55522],{"class":34},[28,165647,165648,165650,165652,165654,165656,165658,165660,165662,165664],{"class":30,"line":94},[28,165649,148444],{"class":34},[28,165651,62754],{"class":320},[28,165653,51512],{"class":34},[28,165655,149947],{"class":320},[28,165657,12512],{"class":34},[28,165659,151531],{"class":320},[28,165661,51512],{"class":34},[28,165663,1193],{"class":45},[28,165665,5007],{"class":34},[28,165667,165668,165670,165672,165674,165676,165678,165680,165682,165684],{"class":30,"line":109},[28,165669,148444],{"class":34},[28,165671,62754],{"class":320},[28,165673,51512],{"class":34},[28,165675,150995],{"class":320},[28,165677,12512],{"class":34},[28,165679,151531],{"class":320},[28,165681,51512],{"class":34},[28,165683,1017],{"class":45},[28,165685,5007],{"class":34},[28,165687,165688,165690,165692,165694,165696,165698,165700,165702,165704],{"class":30,"line":125},[28,165689,148444],{"class":34},[28,165691,62754],{"class":320},[28,165693,51512],{"class":34},[28,165695,159790],{"class":320},[28,165697,12512],{"class":34},[28,165699,151531],{"class":320},[28,165701,51512],{"class":34},[28,165703,619],{"class":45},[28,165705,5007],{"class":34},[28,165707,165708,165710,165712,165714,165716,165718,165720,165722,165724],{"class":30,"line":131},[28,165709,148444],{"class":34},[28,165711,62754],{"class":320},[28,165713,51512],{"class":34},[28,165715,163369],{"class":320},[28,165717,12512],{"class":34},[28,165719,151531],{"class":320},[28,165721,51512],{"class":34},[28,165723,1088],{"class":45},[28,165725,5007],{"class":34},[28,165727,165728],{"class":30,"line":1291},[28,165729,33322],{"class":34},[28,165731,165732],{"class":30,"line":1297},[28,165733,2477],{"emptyLinePlaceholder":144},[28,165735,165736,165738,165740],{"class":30,"line":1388},[28,165737,157319],{"class":34},[28,165739,39],{"class":38},[28,165741,47409],{"class":45},[28,165743,165744,165747,165749,165752,165754],{"class":30,"line":1394},[28,165745,165746],{"class":34},"max_student ",[28,165748,39],{"class":38},[28,165750,165751],{"class":34}," students[",[28,165753,407],{"class":45},[28,165755,33322],{"class":34},[28,165757,165758,165761,165763],{"class":30,"line":1406},[28,165759,165760],{"class":34},"passed ",[28,165762,39],{"class":38},[28,165764,51913],{"class":34},[28,165766,165767],{"class":30,"line":1689},[28,165768,2477],{"emptyLinePlaceholder":144},[28,165770,165771,165773,165775,165777],{"class":30,"line":1694},[28,165772,3102],{"class":38},[28,165774,152196],{"class":34},[28,165776,26121],{"class":38},[28,165778,152201],{"class":34},[28,165780,165781,165783,165785,165787,165789],{"class":30,"line":1700},[28,165782,159366],{"class":34},[28,165784,9554],{"class":38},[28,165786,152208],{"class":34},[28,165788,151531],{"class":320},[28,165790,33322],{"class":34},[28,165792,165793],{"class":30,"line":1705},[28,165794,2477],{"emptyLinePlaceholder":144},[28,165796,165797,165799,165801,165803,165805,165807,165810,165812],{"class":30,"line":1719},[28,165798,3178],{"class":38},[28,165800,152208],{"class":34},[28,165802,151531],{"class":320},[28,165804,4520],{"class":34},[28,165806,1164],{"class":38},[28,165808,165809],{"class":34}," max_student[",[28,165811,151531],{"class":320},[28,165813,165814],{"class":34},"]:\n",[28,165816,165817,165820,165822],{"class":30,"line":1724},[28,165818,165819],{"class":34},"        max_student ",[28,165821,39],{"class":38},[28,165823,152224],{"class":34},[28,165825,165826],{"class":30,"line":1730},[28,165827,2477],{"emptyLinePlaceholder":144},[28,165829,165830,165832,165834,165836,165838,165840,165842],{"class":30,"line":1751},[28,165831,3178],{"class":38},[28,165833,152208],{"class":34},[28,165835,151531],{"class":320},[28,165837,4520],{"class":34},[28,165839,1787],{"class":38},[28,165841,157896],{"class":45},[28,165843,3816],{"class":34},[28,165845,165846],{"class":30,"line":1756},[28,165847,165848],{"class":34},"        passed.append(student)\n",[28,165850,165851],{"class":30,"line":1770},[28,165852,2477],{"emptyLinePlaceholder":144},[28,165854,165855,165857,165859,165861,165863,165865],{"class":30,"line":1775},[28,165856,163833],{"class":34},[28,165858,39],{"class":38},[28,165860,163838],{"class":34},[28,165862,794],{"class":38},[28,165864,7408],{"class":45},[28,165866,165054],{"class":34},[28,165868,165869],{"class":30,"line":1804},[28,165870,2477],{"emptyLinePlaceholder":144},[28,165872,165873,165875,165877,165879,165881,165883,165885,165887,165889,165891],{"class":30,"line":1809},[28,165874,30491],{"class":45},[28,165876,221],{"class":34},[28,165878,271],{"class":38},[28,165880,163856],{"class":320},[28,165882,1102],{"class":45},[28,165884,163861],{"class":34},[28,165886,157218],{"class":38},[28,165888,1150],{"class":45},[28,165890,465],{"class":320},[28,165892,227],{"class":34},[28,165894,165895,165897,165899,165901,165904,165906,165909,165911,165913,165915,165917,165919,165921,165923,165925,165927],{"class":30,"line":1826},[28,165896,30491],{"class":45},[28,165898,221],{"class":34},[28,165900,271],{"class":38},[28,165902,165903],{"class":320},"\"最高分学生:",[28,165905,1102],{"class":45},[28,165907,165908],{"class":34},"max_student[",[28,165910,152941],{"class":320},[28,165912,119],{"class":34},[28,165914,1150],{"class":45},[28,165916,4525],{"class":45},[28,165918,165908],{"class":34},[28,165920,152979],{"class":320},[28,165922,119],{"class":34},[28,165924,1150],{"class":45},[28,165926,465],{"class":320},[28,165928,227],{"class":34},[28,165930,165931,165933,165935,165937,165940,165943,165946,165948,165950],{"class":30,"line":1831},[28,165932,30491],{"class":45},[28,165934,221],{"class":34},[28,165936,271],{"class":38},[28,165938,165939],{"class":320},"\"及格人数:",[28,165941,165942],{"class":45},"{len",[28,165944,165945],{"class":34},"(passed)",[28,165947,1150],{"class":45},[28,165949,465],{"class":320},[28,165951,227],{"class":34},[159,165953,165955],{"id":165954},"_616-易错点","6.16 易错点",[171,165957,165958,165961,165964,165967,165973,165982],{},[174,165959,165960],{},"列表可变，元组和字符串不可变。",[174,165962,165963],{},"切片结束位置不包含。",[174,165965,165966],{},"字典通过 key 取值，不是通过索引。",[174,165968,165969,165970,28463],{},"空集合要用 ",[25,165971,165972],{},"set()",[174,165974,104425,165975,165978,165979,28463],{},[25,165976,165977],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[25,165980,165981],{},"get()",[174,165983,165984],{},"嵌套容器要先看清楚每一层是什么类型。",[159,165986,165988],{"id":165987},"_617-本章练习","6.17 本章练习",[171,165990,165991,165994,165997,166000,166003],{},[174,165992,165993],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[174,165995,165996],{},"输入一句话，统计每个字符出现次数。",[174,165998,165999],{},"使用集合去除列表中的重复元素。",[174,166001,166002],{},"使用字典保存一个学生的信息，并实现修改成绩。",[174,166004,166005],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[136,166007,166008],{},"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":23,"searchDepth":94,"depth":94,"links":166010},[166011,166012,166013,166014,166015,166016,166017,166018,166019,166020,166021,166022,166023,166024,166025,166026,166027],{"id":162991,"depth":94,"text":162992},{"id":163108,"depth":94,"text":163109},{"id":163198,"depth":94,"text":163199},{"id":163322,"depth":94,"text":163323},{"id":163685,"depth":94,"text":163686},{"id":163872,"depth":94,"text":163873},{"id":163991,"depth":94,"text":163992},{"id":164133,"depth":94,"text":164134},{"id":164320,"depth":94,"text":164321},{"id":164564,"depth":94,"text":164565},{"id":164774,"depth":94,"text":164775},{"id":164859,"depth":94,"text":164860},{"id":165157,"depth":94,"text":165158},{"id":165439,"depth":94,"text":165440},{"id":165631,"depth":94,"text":165632},{"id":165954,"depth":94,"text":165955},{"id":165987,"depth":94,"text":165988},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162983,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166034,"title":166035,"body":166036,"description":141,"extension":142,"meta":168208,"navigation":144,"path":168209,"seo":168210,"stem":168211,"__hash__":168212},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166037,"toc":168183},[166038,166041,166045,166048,166128,166131,166152,166155,166159,166162,166224,166227,166244,166248,166251,166296,166298,166306,166310,166313,166395,166398,166401,166426,166429,166452,166456,166459,166461,166523,166526,166528,166579,166583,166587,166593,166698,166702,166708,166779,166783,166786,166854,166857,166937,166941,166947,166983,166986,166989,167099,167105,167109,167112,167184,167187,167191,167195,167200,167262,167266,167271,167339,167343,167348,167464,167468,167471,167551,167554,167558,167561,167665,167667,167682,167685,167689,167827,167835,167839,167841,167852,167854,168112,168116,168148,168152,168180],[10,166039,166035],{"id":166040},"_7-函数进阶",[159,166042,166044],{"id":166043},"_71-多返回值","7.1 多返回值",[14,166046,166047],{},"Python 函数可以返回多个值，本质上返回的是元组。",[18,166049,166051],{"className":20,"code":166050,"language":22,"meta":23,"style":23},"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",[25,166052,166053,166062,166070,166078,166087,166094,166098,166102,166111,166117],{"__ignoreMap":23},[28,166054,166055,166057,166060],{"class":30,"line":31},[28,166056,32023],{"class":38},[28,166058,166059],{"class":2040}," get_info",[28,166061,32029],{"class":34},[28,166063,166064,166066,166068],{"class":30,"line":94},[28,166065,152429],{"class":34},[28,166067,39],{"class":38},[28,166069,149412],{"class":320},[28,166071,166072,166074,166076],{"class":30,"line":109},[28,166073,152445],{"class":34},[28,166075,39],{"class":38},[28,166077,146610],{"class":45},[28,166079,166080,166082,166084],{"class":30,"line":125},[28,166081,152460],{"class":34},[28,166083,39],{"class":38},[28,166085,166086],{"class":45}," 95\n",[28,166088,166089,166091],{"class":30,"line":131},[28,166090,4167],{"class":38},[28,166092,166093],{"class":34}," name, age, score\n",[28,166095,166096],{"class":30,"line":1291},[28,166097,2477],{"emptyLinePlaceholder":144},[28,166099,166100],{"class":30,"line":1297},[28,166101,2477],{"emptyLinePlaceholder":144},[28,166103,166104,166106,166108],{"class":30,"line":1388},[28,166105,161365],{"class":34},[28,166107,39],{"class":38},[28,166109,166110],{"class":34}," get_info()\n",[28,166112,166113,166115],{"class":30,"line":1394},[28,166114,30491],{"class":45},[28,166116,76660],{"class":34},[28,166118,166119,166121,166123,166125],{"class":30,"line":1406},[28,166120,30491],{"class":45},[28,166122,221],{"class":34},[28,166124,103166],{"class":45},[28,166126,166127],{"class":34},"(result))\n",[14,166129,166130],{},"可以直接解包：",[18,166132,166134],{"className":20,"code":166133,"language":22,"meta":23,"style":23},"name, age, score = get_info()\nprint(name, age, score)\n",[25,166135,166136,166145],{"__ignoreMap":23},[28,166137,166138,166141,166143],{"class":30,"line":31},[28,166139,166140],{"class":34},"name, age, score ",[28,166142,39],{"class":38},[28,166144,166110],{"class":34},[28,166146,166147,166149],{"class":30,"line":94},[28,166148,30491],{"class":45},[28,166150,166151],{"class":34},"(name, age, score)\n",[14,166153,166154],{},"返回多个值适合函数需要同时给出多个结果时使用。",[159,166156,166158],{"id":166157},"_72-位置参数","7.2 位置参数",[14,166160,166161],{},"位置参数按顺序传递。",[18,166163,166165],{"className":20,"code":166164,"language":22,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[25,166166,166167,166175,166203,166207,166211],{"__ignoreMap":23},[28,166168,166169,166171,166173],{"class":30,"line":31},[28,166170,32023],{"class":38},[28,166172,149431],{"class":2040},[28,166174,149434],{"class":34},[28,166176,166177,166179,166181,166183,166185,166187,166189,166191,166193,166195,166197,166199,166201],{"class":30,"line":94},[28,166178,31375],{"class":45},[28,166180,221],{"class":34},[28,166182,271],{"class":38},[28,166184,149445],{"class":320},[28,166186,1102],{"class":45},[28,166188,79885],{"class":34},[28,166190,1150],{"class":45},[28,166192,149454],{"class":320},[28,166194,1102],{"class":45},[28,166196,70296],{"class":34},[28,166198,1150],{"class":45},[28,166200,149463],{"class":320},[28,166202,227],{"class":34},[28,166204,166205],{"class":30,"line":109},[28,166206,2477],{"emptyLinePlaceholder":144},[28,166208,166209],{"class":30,"line":125},[28,166210,2477],{"emptyLinePlaceholder":144},[28,166212,166213,166216,166218,166220,166222],{"class":30,"line":131},[28,166214,166215],{"class":34},"introduce(",[28,166217,149947],{"class":320},[28,166219,12512],{"class":34},[28,166221,860],{"class":45},[28,166223,227],{"class":34},[14,166225,166226],{},"顺序错了就会得到错误含义：",[18,166228,166230],{"className":20,"code":166229,"language":22,"meta":23,"style":23},"introduce(18, \"小明\")\n",[25,166231,166232],{"__ignoreMap":23},[28,166233,166234,166236,166238,166240,166242],{"class":30,"line":31},[28,166235,166215],{"class":34},[28,166237,860],{"class":45},[28,166239,12512],{"class":34},[28,166241,149947],{"class":320},[28,166243,227],{"class":34},[159,166245,166247],{"id":166246},"_73-关键字参数","7.3 关键字参数",[14,166249,166250],{},"关键字参数按参数名传递。",[18,166252,166254],{"className":20,"code":166253,"language":22,"meta":23,"style":23},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[25,166255,166256,166276],{"__ignoreMap":23},[28,166257,166258,166260,166262,166264,166266,166268,166270,166272,166274],{"class":30,"line":31},[28,166259,166215],{"class":34},[28,166261,79885],{"class":5293},[28,166263,39],{"class":38},[28,166265,149947],{"class":320},[28,166267,12512],{"class":34},[28,166269,70296],{"class":5293},[28,166271,39],{"class":38},[28,166273,860],{"class":45},[28,166275,227],{"class":34},[28,166277,166278,166280,166282,166284,166286,166288,166290,166292,166294],{"class":30,"line":94},[28,166279,166215],{"class":34},[28,166281,70296],{"class":5293},[28,166283,39],{"class":38},[28,166285,860],{"class":45},[28,166287,12512],{"class":34},[28,166289,79885],{"class":5293},[28,166291,39],{"class":38},[28,166293,149947],{"class":320},[28,166295,227],{"class":34},[14,166297,117993],{},[171,166299,166300,166303],{},[174,166301,166302],{},"顺序不容易错。",[174,166304,166305],{},"调用时可读性更强。",[159,166307,166309],{"id":166308},"_74-默认参数","7.4 默认参数",[14,166311,166312],{},"默认参数给参数设置默认值。",[18,166314,166316],{"className":20,"code":166315,"language":22,"meta":23,"style":23},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[25,166317,166318,166334,166364,166368,166372,166382],{"__ignoreMap":23},[28,166319,166320,166322,166324,166327,166329,166332],{"class":30,"line":31},[28,166321,32023],{"class":38},[28,166323,122152],{"class":2040},[28,166325,166326],{"class":34},"(host, port",[28,166328,39],{"class":38},[28,166330,166331],{"class":45},"3306",[28,166333,30862],{"class":34},[28,166335,166336,166338,166340,166342,166345,166347,166349,166351,166353,166355,166358,166360,166362],{"class":30,"line":94},[28,166337,31375],{"class":45},[28,166339,221],{"class":34},[28,166341,271],{"class":38},[28,166343,166344],{"class":320},"\"连接",[28,166346,1102],{"class":45},[28,166348,27473],{"class":34},[28,166350,1150],{"class":45},[28,166352,1065],{"class":320},[28,166354,1102],{"class":45},[28,166356,166357],{"class":34},"port",[28,166359,1150],{"class":45},[28,166361,465],{"class":320},[28,166363,227],{"class":34},[28,166365,166366],{"class":30,"line":109},[28,166367,2477],{"emptyLinePlaceholder":144},[28,166369,166370],{"class":30,"line":125},[28,166371,2477],{"emptyLinePlaceholder":144},[28,166373,166374,166377,166380],{"class":30,"line":131},[28,166375,166376],{"class":34},"connect(",[28,166378,166379],{"class":320},"\"localhost\"",[28,166381,227],{"class":34},[28,166383,166384,166386,166388,166390,166393],{"class":30,"line":1291},[28,166385,166376],{"class":34},[28,166387,166379],{"class":320},[28,166389,12512],{"class":34},[28,166391,166392],{"class":45},"6379",[28,166394,227],{"class":34},[14,166396,166397],{},"注意：默认参数必须放在非默认参数后面。",[14,166399,166400],{},"错误：",[18,166402,166404],{"className":20,"code":166403,"language":22,"meta":23,"style":23},"def connect(port=3306, host):\n    pass\n",[25,166405,166406,166422],{"__ignoreMap":23},[28,166407,166408,166410,166412,166415,166417,166419],{"class":30,"line":31},[28,166409,32023],{"class":38},[28,166411,122152],{"class":2040},[28,166413,166414],{"class":34},"(port",[28,166416,39],{"class":38},[28,166418,166331],{"class":45},[28,166420,166421],{"class":34},", host):\n",[28,166423,166424],{"class":30,"line":94},[28,166425,149596],{"class":38},[14,166427,166428],{},"正确：",[18,166430,166432],{"className":20,"code":166431,"language":22,"meta":23,"style":23},"def connect(host, port=3306):\n    pass\n",[25,166433,166434,166448],{"__ignoreMap":23},[28,166435,166436,166438,166440,166442,166444,166446],{"class":30,"line":31},[28,166437,32023],{"class":38},[28,166439,122152],{"class":2040},[28,166441,166326],{"class":34},[28,166443,39],{"class":38},[28,166445,166331],{"class":45},[28,166447,30862],{"class":34},[28,166449,166450],{"class":30,"line":94},[28,166451,149596],{"class":38},[159,166453,166455],{"id":166454},"_75-默认参数的坑","7.5 默认参数的坑",[14,166457,166458],{},"不要使用可变对象作为默认参数。",[14,166460,157682],{},[18,166462,166464],{"className":20,"code":166463,"language":22,"meta":23,"style":23},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[25,166465,166466,166481,166486,166493,166497,166501,166512],{"__ignoreMap":23},[28,166467,166468,166470,166473,166476,166478],{"class":30,"line":31},[28,166469,32023],{"class":38},[28,166471,166472],{"class":2040}," add_item",[28,166474,166475],{"class":34},"(item, items",[28,166477,39],{"class":38},[28,166479,166480],{"class":34},"[]):\n",[28,166482,166483],{"class":30,"line":94},[28,166484,166485],{"class":34},"    items.append(item)\n",[28,166487,166488,166490],{"class":30,"line":109},[28,166489,4167],{"class":38},[28,166491,166492],{"class":34}," items\n",[28,166494,166495],{"class":30,"line":125},[28,166496,2477],{"emptyLinePlaceholder":144},[28,166498,166499],{"class":30,"line":131},[28,166500,2477],{"emptyLinePlaceholder":144},[28,166502,166503,166505,166508,166510],{"class":30,"line":1291},[28,166504,30491],{"class":45},[28,166506,166507],{"class":34},"(add_item(",[28,166509,165384],{"class":320},[28,166511,30573],{"class":34},[28,166513,166514,166516,166518,166521],{"class":30,"line":1297},[28,166515,30491],{"class":45},[28,166517,166507],{"class":34},[28,166519,166520],{"class":320},"\"b\"",[28,166522,30573],{"class":34},[14,166524,166525],{},"第二次调用会复用第一次的列表。",[14,166527,155947],{},[18,166529,166531],{"className":20,"code":166530,"language":22,"meta":23,"style":23},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[25,166532,166533,166547,166560,166569,166573],{"__ignoreMap":23},[28,166534,166535,166537,166539,166541,166543,166545],{"class":30,"line":31},[28,166536,32023],{"class":38},[28,166538,166472],{"class":2040},[28,166540,166475],{"class":34},[28,166542,39],{"class":38},[28,166544,95745],{"class":45},[28,166546,30862],{"class":34},[28,166548,166549,166551,166554,166556,166558],{"class":30,"line":94},[28,166550,3178],{"class":38},[28,166552,166553],{"class":34}," items ",[28,166555,39003],{"class":38},[28,166557,39009],{"class":45},[28,166559,3816],{"class":34},[28,166561,166562,166565,166567],{"class":30,"line":109},[28,166563,166564],{"class":34},"        items ",[28,166566,39],{"class":38},[28,166568,51913],{"class":34},[28,166570,166571],{"class":30,"line":125},[28,166572,166485],{"class":34},[28,166574,166575,166577],{"class":30,"line":131},[28,166576,4167],{"class":38},[28,166578,166492],{"class":34},[159,166580,166582],{"id":166581},"_76-不定长参数","7.6 不定长参数",[188,166584,166586],{"id":166585},"_761-args","7.6.1 *args",[14,166588,166589,166592],{},[25,166590,166591],{},"*args"," 接收任意数量的位置参数，得到元组。",[18,166594,166596],{"className":20,"code":166595,"language":22,"meta":23,"style":23},"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",[25,166597,166598,166611,166619,166630,166639,166645,166649,166653,166672],{"__ignoreMap":23},[28,166599,166600,166602,166604,166606,166608],{"class":30,"line":31},[28,166601,32023],{"class":38},[28,166603,5286],{"class":2040},[28,166605,221],{"class":34},[28,166607,668],{"class":38},[28,166609,166610],{"class":34},"args):\n",[28,166612,166613,166615,166617],{"class":30,"line":94},[28,166614,159366],{"class":34},[28,166616,39],{"class":38},[28,166618,47409],{"class":45},[28,166620,166621,166623,166625,166627],{"class":30,"line":109},[28,166622,3278],{"class":38},[28,166624,156239],{"class":34},[28,166626,26121],{"class":38},[28,166628,166629],{"class":34}," args:\n",[28,166631,166632,166634,166636],{"class":30,"line":125},[28,166633,160041],{"class":34},[28,166635,9554],{"class":38},[28,166637,166638],{"class":34}," num\n",[28,166640,166641,166643],{"class":30,"line":131},[28,166642,4167],{"class":38},[28,166644,162346],{"class":34},[28,166646,166647],{"class":30,"line":1291},[28,166648,2477],{"emptyLinePlaceholder":144},[28,166650,166651],{"class":30,"line":1297},[28,166652,2477],{"emptyLinePlaceholder":144},[28,166654,166655,166657,166660,166662,166664,166666,166668,166670],{"class":30,"line":1388},[28,166656,30491],{"class":45},[28,166658,166659],{"class":34},"(add(",[28,166661,46],{"class":45},[28,166663,12512],{"class":34},[28,166665,52],{"class":45},[28,166667,12512],{"class":34},[28,166669,57],{"class":45},[28,166671,30573],{"class":34},[28,166673,166674,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696],{"class":30,"line":1394},[28,166675,30491],{"class":45},[28,166677,166659],{"class":34},[28,166679,46],{"class":45},[28,166681,12512],{"class":34},[28,166683,52],{"class":45},[28,166685,12512],{"class":34},[28,166687,57],{"class":45},[28,166689,12512],{"class":34},[28,166691,507],{"class":45},[28,166693,12512],{"class":34},[28,166695,533],{"class":45},[28,166697,30573],{"class":34},[188,166699,166701],{"id":166700},"_762-kwargs","7.6.2 **kwargs",[14,166703,166704,166707],{},[25,166705,166706],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[18,166709,166711],{"className":20,"code":166710,"language":22,"meta":23,"style":23},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[25,166712,166713,166726,166737,166743,166747,166751],{"__ignoreMap":23},[28,166714,166715,166717,166719,166721,166723],{"class":30,"line":31},[28,166716,32023],{"class":38},[28,166718,162004],{"class":2040},[28,166720,221],{"class":34},[28,166722,10738],{"class":38},[28,166724,166725],{"class":34},"kwargs):\n",[28,166727,166728,166730,166732,166734],{"class":30,"line":94},[28,166729,3278],{"class":38},[28,166731,164844],{"class":34},[28,166733,26121],{"class":38},[28,166735,166736],{"class":34}," kwargs.items():\n",[28,166738,166739,166741],{"class":30,"line":109},[28,166740,32527],{"class":45},[28,166742,164856],{"class":34},[28,166744,166745],{"class":30,"line":125},[28,166746,2477],{"emptyLinePlaceholder":144},[28,166748,166749],{"class":30,"line":131},[28,166750,2477],{"emptyLinePlaceholder":144},[28,166752,166753,166755,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777],{"class":30,"line":1291},[28,166754,162069],{"class":34},[28,166756,79885],{"class":5293},[28,166758,39],{"class":38},[28,166760,149947],{"class":320},[28,166762,12512],{"class":34},[28,166764,70296],{"class":5293},[28,166766,39],{"class":38},[28,166768,860],{"class":45},[28,166770,12512],{"class":34},[28,166772,70347],{"class":5293},[28,166774,39],{"class":38},[28,166776,69344],{"class":320},[28,166778,227],{"class":34},[159,166780,166782],{"id":166781},"_77-参数解包","7.7 参数解包",[14,166784,166785],{},"列表或元组解包为位置参数：",[18,166787,166789],{"className":20,"code":166788,"language":22,"meta":23,"style":23},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[25,166790,166791,166800,166815,166819,166823,166843],{"__ignoreMap":23},[28,166792,166793,166795,166797],{"class":30,"line":31},[28,166794,32023],{"class":38},[28,166796,5286],{"class":2040},[28,166798,166799],{"class":34},"(a, b, c):\n",[28,166801,166802,166804,166806,166808,166810,166812],{"class":30,"line":94},[28,166803,4167],{"class":38},[28,166805,10946],{"class":34},[28,166807,693],{"class":38},[28,166809,10959],{"class":34},[28,166811,693],{"class":38},[28,166813,166814],{"class":34}," c\n",[28,166816,166817],{"class":30,"line":109},[28,166818,2477],{"emptyLinePlaceholder":144},[28,166820,166821],{"class":30,"line":125},[28,166822,2477],{"emptyLinePlaceholder":144},[28,166824,166825,166827,166829,166831,166833,166835,166837,166839,166841],{"class":30,"line":131},[28,166826,164159],{"class":34},[28,166828,39],{"class":38},[28,166830,52301],{"class":34},[28,166832,46],{"class":45},[28,166834,12512],{"class":34},[28,166836,52],{"class":45},[28,166838,12512],{"class":34},[28,166840,57],{"class":45},[28,166842,33322],{"class":34},[28,166844,166845,166847,166849,166851],{"class":30,"line":1291},[28,166846,30491],{"class":45},[28,166848,166659],{"class":34},[28,166850,668],{"class":38},[28,166852,166853],{"class":34},"nums))\n",[14,166855,166856],{},"字典解包为关键字参数：",[18,166858,166860],{"className":20,"code":166859,"language":22,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[25,166861,166862,166870,166896,166900,166904,166928],{"__ignoreMap":23},[28,166863,166864,166866,166868],{"class":30,"line":31},[28,166865,32023],{"class":38},[28,166867,149431],{"class":2040},[28,166869,149434],{"class":34},[28,166871,166872,166874,166876,166878,166880,166882,166884,166886,166888,166890,166892,166894],{"class":30,"line":94},[28,166873,31375],{"class":45},[28,166875,221],{"class":34},[28,166877,271],{"class":38},[28,166879,465],{"class":320},[28,166881,1102],{"class":45},[28,166883,79885],{"class":34},[28,166885,1150],{"class":45},[28,166887,4525],{"class":45},[28,166889,70296],{"class":34},[28,166891,1150],{"class":45},[28,166893,465],{"class":320},[28,166895,227],{"class":34},[28,166897,166898],{"class":30,"line":109},[28,166899,2477],{"emptyLinePlaceholder":144},[28,166901,166902],{"class":30,"line":125},[28,166903,2477],{"emptyLinePlaceholder":144},[28,166905,166906,166908,166910,166912,166914,166916,166918,166920,166922,166924,166926],{"class":30,"line":131},[28,166907,116373],{"class":34},[28,166909,39],{"class":38},[28,166911,4525],{"class":34},[28,166913,62754],{"class":320},[28,166915,51512],{"class":34},[28,166917,149947],{"class":320},[28,166919,12512],{"class":34},[28,166921,69199],{"class":320},[28,166923,51512],{"class":34},[28,166925,860],{"class":45},[28,166927,1642],{"class":34},[28,166929,166930,166932,166934],{"class":30,"line":1291},[28,166931,166215],{"class":34},[28,166933,10738],{"class":38},[28,166935,166936],{"class":34},"info)\n",[159,166938,166940],{"id":166939},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166942,166943,166946],{},[25,166944,166945],{},"lambda"," 用于定义简单匿名函数。",[18,166948,166950],{"className":20,"code":166949,"language":22,"meta":23,"style":23},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[25,166951,166952,166969],{"__ignoreMap":23},[28,166953,166954,166957,166959,166962,166965,166967],{"class":30,"line":31},[28,166955,166956],{"class":34},"add ",[28,166958,39],{"class":38},[28,166960,166961],{"class":38}," lambda",[28,166963,166964],{"class":34}," a, b: a ",[28,166966,693],{"class":38},[28,166968,151163],{"class":34},[28,166970,166971,166973,166975,166977,166979,166981],{"class":30,"line":94},[28,166972,30491],{"class":45},[28,166974,166659],{"class":34},[28,166976,46],{"class":45},[28,166978,12512],{"class":34},[28,166980,52],{"class":45},[28,166982,30573],{"class":34},[14,166984,166985],{},"常和排序、过滤等函数一起使用。",[14,166987,166988],{},"按分数排序：",[18,166990,166992],{"className":20,"code":166991,"language":22,"meta":23,"style":23},"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",[25,166993,166994,167002,167022,167042,167062,167066,167070,167093],{"__ignoreMap":23},[28,166995,166996,166998,167000],{"class":30,"line":31},[28,166997,159775],{"class":34},[28,166999,39],{"class":38},[28,167001,55522],{"class":34},[28,167003,167004,167006,167008,167010,167012,167014,167016,167018,167020],{"class":30,"line":94},[28,167005,148444],{"class":34},[28,167007,62754],{"class":320},[28,167009,51512],{"class":34},[28,167011,149947],{"class":320},[28,167013,12512],{"class":34},[28,167015,151531],{"class":320},[28,167017,51512],{"class":34},[28,167019,1193],{"class":45},[28,167021,5007],{"class":34},[28,167023,167024,167026,167028,167030,167032,167034,167036,167038,167040],{"class":30,"line":109},[28,167025,148444],{"class":34},[28,167027,62754],{"class":320},[28,167029,51512],{"class":34},[28,167031,150995],{"class":320},[28,167033,12512],{"class":34},[28,167035,151531],{"class":320},[28,167037,51512],{"class":34},[28,167039,1017],{"class":45},[28,167041,5007],{"class":34},[28,167043,167044,167046,167048,167050,167052,167054,167056,167058,167060],{"class":30,"line":125},[28,167045,148444],{"class":34},[28,167047,62754],{"class":320},[28,167049,51512],{"class":34},[28,167051,159790],{"class":320},[28,167053,12512],{"class":34},[28,167055,151531],{"class":320},[28,167057,51512],{"class":34},[28,167059,619],{"class":45},[28,167061,5007],{"class":34},[28,167063,167064],{"class":30,"line":131},[28,167065,33322],{"class":34},[28,167067,167068],{"class":30,"line":1291},[28,167069,2477],{"emptyLinePlaceholder":144},[28,167071,167072,167075,167077,167079,167081,167083,167085,167087,167089,167091],{"class":30,"line":1297},[28,167073,167074],{"class":34},"students.sort(",[28,167076,154005],{"class":5293},[28,167078,154008],{"class":38},[28,167080,154011],{"class":34},[28,167082,151531],{"class":320},[28,167084,112261],{"class":34},[28,167086,163587],{"class":5293},[28,167088,39],{"class":38},[28,167090,31552],{"class":45},[28,167092,227],{"class":34},[28,167094,167095,167097],{"class":30,"line":1388},[28,167096,30491],{"class":45},[28,167098,165054],{"class":34},[14,167100,167101,167102,167104],{},"如果逻辑复杂，不要硬写 ",[25,167103,166945],{},"，定义普通函数更清晰。",[159,167106,167108],{"id":167107},"_79-函数作为参数","7.9 函数作为参数",[14,167110,167111],{},"函数可以作为参数传给另一个函数。",[18,167113,167115],{"className":20,"code":167114,"language":22,"meta":23,"style":23},"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",[25,167116,167117,167125,167135,167139,167143,167153,167160,167164,167168],{"__ignoreMap":23},[28,167118,167119,167121,167123],{"class":30,"line":31},[28,167120,32023],{"class":38},[28,167122,5286],{"class":2040},[28,167124,151152],{"class":34},[28,167126,167127,167129,167131,167133],{"class":30,"line":94},[28,167128,4167],{"class":38},[28,167130,10946],{"class":34},[28,167132,693],{"class":38},[28,167134,151163],{"class":34},[28,167136,167137],{"class":30,"line":109},[28,167138,2477],{"emptyLinePlaceholder":144},[28,167140,167141],{"class":30,"line":125},[28,167142,2477],{"emptyLinePlaceholder":144},[28,167144,167145,167147,167150],{"class":30,"line":131},[28,167146,32023],{"class":38},[28,167148,167149],{"class":2040}," calculate",[28,167151,167152],{"class":34},"(a, b, func):\n",[28,167154,167155,167157],{"class":30,"line":1291},[28,167156,4167],{"class":38},[28,167158,167159],{"class":34}," func(a, b)\n",[28,167161,167162],{"class":30,"line":1297},[28,167163,2477],{"emptyLinePlaceholder":144},[28,167165,167166],{"class":30,"line":1388},[28,167167,2477],{"emptyLinePlaceholder":144},[28,167169,167170,167172,167175,167177,167179,167181],{"class":30,"line":1394},[28,167171,30491],{"class":45},[28,167173,167174],{"class":34},"(calculate(",[28,167176,659],{"class":45},[28,167178,12512],{"class":34},[28,167180,102],{"class":45},[28,167182,167183],{"class":34},", add))\n",[14,167185,167186],{},"这种思想在排序、回调、框架中经常出现。",[159,167188,167190],{"id":167189},"_710-mapfiltersorted","7.10 map、filter、sorted",[188,167192,167194],{"id":167193},"_7101-map","7.10.1 map",[14,167196,167197,167199],{},[25,167198,74119],{}," 对每个元素执行函数。",[18,167201,167203],{"className":20,"code":167202,"language":22,"meta":23,"style":23},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[25,167204,167205,167229,167252],{"__ignoreMap":23},[28,167206,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225,167227],{"class":30,"line":31},[28,167208,164159],{"class":34},[28,167210,39],{"class":38},[28,167212,52301],{"class":34},[28,167214,46],{"class":45},[28,167216,12512],{"class":34},[28,167218,52],{"class":45},[28,167220,12512],{"class":34},[28,167222,57],{"class":45},[28,167224,12512],{"class":34},[28,167226,507],{"class":45},[28,167228,33322],{"class":34},[28,167230,167231,167233,167235,167238,167240,167242,167245,167247,167249],{"class":30,"line":94},[28,167232,161365],{"class":34},[28,167234,39],{"class":38},[28,167236,167237],{"class":45}," map",[28,167239,221],{"class":34},[28,167241,166945],{"class":38},[28,167243,167244],{"class":34}," x: x ",[28,167246,668],{"class":38},[28,167248,14832],{"class":45},[28,167250,167251],{"class":34},", nums)\n",[28,167253,167254,167256,167258,167260],{"class":30,"line":109},[28,167255,30491],{"class":45},[28,167257,221],{"class":34},[28,167259,154129],{"class":45},[28,167261,166127],{"class":34},[188,167263,167265],{"id":167264},"_7102-filter","7.10.2 filter",[14,167267,167268,167270],{},[25,167269,80126],{}," 保留满足条件的元素。",[18,167272,167274],{"className":20,"code":167273,"language":22,"meta":23,"style":23},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[25,167275,167276,167304,167329],{"__ignoreMap":23},[28,167277,167278,167280,167282,167284,167286,167288,167290,167292,167294,167296,167298,167300,167302],{"class":30,"line":31},[28,167279,164159],{"class":34},[28,167281,39],{"class":38},[28,167283,52301],{"class":34},[28,167285,46],{"class":45},[28,167287,12512],{"class":34},[28,167289,52],{"class":45},[28,167291,12512],{"class":34},[28,167293,57],{"class":45},[28,167295,12512],{"class":34},[28,167297,507],{"class":45},[28,167299,12512],{"class":34},[28,167301,533],{"class":45},[28,167303,33322],{"class":34},[28,167305,167306,167308,167310,167313,167315,167317,167319,167321,167323,167325,167327],{"class":30,"line":94},[28,167307,161365],{"class":34},[28,167309,39],{"class":38},[28,167311,167312],{"class":45}," filter",[28,167314,221],{"class":34},[28,167316,166945],{"class":38},[28,167318,167244],{"class":34},[28,167320,542],{"class":38},[28,167322,14832],{"class":45},[28,167324,101618],{"class":38},[28,167326,4170],{"class":45},[28,167328,167251],{"class":34},[28,167330,167331,167333,167335,167337],{"class":30,"line":109},[28,167332,30491],{"class":45},[28,167334,221],{"class":34},[28,167336,154129],{"class":45},[28,167338,166127],{"class":34},[188,167340,167342],{"id":167341},"_7103-sorted","7.10.3 sorted",[14,167344,167345,167347],{},[25,167346,165295],{}," 返回排序后的新列表。",[18,167349,167351],{"className":20,"code":167350,"language":22,"meta":23,"style":23},"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",[25,167352,167353,167361,167381,167401,167421,167425,167429,167458],{"__ignoreMap":23},[28,167354,167355,167357,167359],{"class":30,"line":31},[28,167356,159775],{"class":34},[28,167358,39],{"class":38},[28,167360,55522],{"class":34},[28,167362,167363,167365,167367,167369,167371,167373,167375,167377,167379],{"class":30,"line":94},[28,167364,148444],{"class":34},[28,167366,62754],{"class":320},[28,167368,51512],{"class":34},[28,167370,149947],{"class":320},[28,167372,12512],{"class":34},[28,167374,151531],{"class":320},[28,167376,51512],{"class":34},[28,167378,1193],{"class":45},[28,167380,5007],{"class":34},[28,167382,167383,167385,167387,167389,167391,167393,167395,167397,167399],{"class":30,"line":109},[28,167384,148444],{"class":34},[28,167386,62754],{"class":320},[28,167388,51512],{"class":34},[28,167390,150995],{"class":320},[28,167392,12512],{"class":34},[28,167394,151531],{"class":320},[28,167396,51512],{"class":34},[28,167398,1017],{"class":45},[28,167400,5007],{"class":34},[28,167402,167403,167405,167407,167409,167411,167413,167415,167417,167419],{"class":30,"line":125},[28,167404,148444],{"class":34},[28,167406,62754],{"class":320},[28,167408,51512],{"class":34},[28,167410,159790],{"class":320},[28,167412,12512],{"class":34},[28,167414,151531],{"class":320},[28,167416,51512],{"class":34},[28,167418,619],{"class":45},[28,167420,5007],{"class":34},[28,167422,167423],{"class":30,"line":131},[28,167424,33322],{"class":34},[28,167426,167427],{"class":30,"line":1291},[28,167428,2477],{"emptyLinePlaceholder":144},[28,167430,167431,167433,167435,167437,167440,167442,167444,167446,167448,167450,167452,167454,167456],{"class":30,"line":1297},[28,167432,161365],{"class":34},[28,167434,39],{"class":38},[28,167436,163663],{"class":45},[28,167438,167439],{"class":34},"(students, ",[28,167441,154005],{"class":5293},[28,167443,154008],{"class":38},[28,167445,154011],{"class":34},[28,167447,151531],{"class":320},[28,167449,112261],{"class":34},[28,167451,163587],{"class":5293},[28,167453,39],{"class":38},[28,167455,31552],{"class":45},[28,167457,227],{"class":34},[28,167459,167460,167462],{"class":30,"line":1388},[28,167461,30491],{"class":45},[28,167463,76660],{"class":34},[159,167465,167467],{"id":167466},"_711-闭包入门","7.11 闭包入门",[14,167469,167470],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[18,167472,167474],{"className":20,"code":167473,"language":22,"meta":23,"style":23},"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",[25,167475,167476,167486,167496,167507,167511,167518,167522,167526,167540],{"__ignoreMap":23},[28,167477,167478,167480,167483],{"class":30,"line":31},[28,167479,32023],{"class":38},[28,167481,167482],{"class":2040}," outer",[28,167484,167485],{"class":34},"(base):\n",[28,167487,167488,167490,167493],{"class":30,"line":94},[28,167489,30877],{"class":38},[28,167491,167492],{"class":2040}," inner",[28,167494,167495],{"class":34},"(num):\n",[28,167497,167498,167500,167503,167505],{"class":30,"line":109},[28,167499,14829],{"class":38},[28,167501,167502],{"class":34}," base ",[28,167504,693],{"class":38},[28,167506,166638],{"class":34},[28,167508,167509],{"class":30,"line":125},[28,167510,2477],{"emptyLinePlaceholder":144},[28,167512,167513,167515],{"class":30,"line":131},[28,167514,4167],{"class":38},[28,167516,167517],{"class":34}," inner\n",[28,167519,167520],{"class":30,"line":1291},[28,167521,2477],{"emptyLinePlaceholder":144},[28,167523,167524],{"class":30,"line":1297},[28,167525,2477],{"emptyLinePlaceholder":144},[28,167527,167528,167531,167533,167536,167538],{"class":30,"line":1388},[28,167529,167530],{"class":34},"add_10 ",[28,167532,39],{"class":38},[28,167534,167535],{"class":34}," outer(",[28,167537,659],{"class":45},[28,167539,227],{"class":34},[28,167541,167542,167544,167547,167549],{"class":30,"line":1394},[28,167543,30491],{"class":45},[28,167545,167546],{"class":34},"(add_10(",[28,167548,533],{"class":45},[28,167550,30573],{"class":34},[14,167552,167553],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[159,167555,167557],{"id":167556},"_712-装饰器入门","7.12 装饰器入门",[14,167559,167560],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[18,167562,167564],{"className":20,"code":167563,"language":22,"meta":23,"style":23},"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",[25,167565,167566,167575,167584,167595,167600,167611,167615,167622,167626,167630,167635,167643,167653,167657,167661],{"__ignoreMap":23},[28,167567,167568,167570,167572],{"class":30,"line":31},[28,167569,32023],{"class":38},[28,167571,87266],{"class":2040},[28,167573,167574],{"class":34},"(func):\n",[28,167576,167577,167579,167582],{"class":30,"line":94},[28,167578,30877],{"class":38},[28,167580,167581],{"class":2040}," wrapper",[28,167583,32029],{"class":34},[28,167585,167586,167588,167590,167593],{"class":30,"line":109},[28,167587,32527],{"class":45},[28,167589,221],{"class":34},[28,167591,167592],{"class":320},"\"函数开始执行\"",[28,167594,227],{"class":34},[28,167596,167597],{"class":30,"line":125},[28,167598,167599],{"class":34},"        func()\n",[28,167601,167602,167604,167606,167609],{"class":30,"line":131},[28,167603,32527],{"class":45},[28,167605,221],{"class":34},[28,167607,167608],{"class":320},"\"函数执行结束\"",[28,167610,227],{"class":34},[28,167612,167613],{"class":30,"line":1291},[28,167614,2477],{"emptyLinePlaceholder":144},[28,167616,167617,167619],{"class":30,"line":1297},[28,167618,4167],{"class":38},[28,167620,167621],{"class":34}," wrapper\n",[28,167623,167624],{"class":30,"line":1388},[28,167625,2477],{"emptyLinePlaceholder":144},[28,167627,167628],{"class":30,"line":1394},[28,167629,2477],{"emptyLinePlaceholder":144},[28,167631,167632],{"class":30,"line":1406},[28,167633,167634],{"class":2040},"@log\n",[28,167636,167637,167639,167641],{"class":30,"line":1689},[28,167638,32023],{"class":38},[28,167640,161055],{"class":2040},[28,167642,32029],{"class":34},[28,167644,167645,167647,167649,167651],{"class":30,"line":1694},[28,167646,31375],{"class":45},[28,167648,221],{"class":34},[28,167650,5921],{"class":320},[28,167652,227],{"class":34},[28,167654,167655],{"class":30,"line":1700},[28,167656,2477],{"emptyLinePlaceholder":144},[28,167658,167659],{"class":30,"line":1705},[28,167660,2477],{"emptyLinePlaceholder":144},[28,167662,167663],{"class":30,"line":1719},[28,167664,161090],{"class":34},[14,167666,158333],{},[18,167668,167670],{"className":20,"code":167669,"language":22,"meta":23,"style":23},"say_hello = log(say_hello)\n",[25,167671,167672],{"__ignoreMap":23},[28,167673,167674,167677,167679],{"class":30,"line":31},[28,167675,167676],{"class":34},"say_hello ",[28,167678,39],{"class":38},[28,167680,167681],{"class":34}," log(say_hello)\n",[14,167683,167684],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[159,167686,167688],{"id":167687},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[18,167690,167692],{"className":20,"code":167691,"language":22,"meta":23,"style":23},"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",[25,167693,167694,167702,167719,167729,167748,167758,167765,167769,167775,167779,167783,167787,167795,167805,167809,167813],{"__ignoreMap":23},[28,167695,167696,167698,167700],{"class":30,"line":31},[28,167697,32023],{"class":38},[28,167699,87266],{"class":2040},[28,167701,167574],{"class":34},[28,167703,167704,167706,167708,167710,167712,167715,167717],{"class":30,"line":94},[28,167705,30877],{"class":38},[28,167707,167581],{"class":2040},[28,167709,221],{"class":34},[28,167711,668],{"class":38},[28,167713,167714],{"class":34},"args, ",[28,167716,10738],{"class":38},[28,167718,166725],{"class":34},[28,167720,167721,167723,167725,167727],{"class":30,"line":109},[28,167722,32527],{"class":45},[28,167724,221],{"class":34},[28,167726,167592],{"class":320},[28,167728,227],{"class":34},[28,167730,167731,167734,167736,167739,167741,167743,167745],{"class":30,"line":125},[28,167732,167733],{"class":34},"        result ",[28,167735,39],{"class":38},[28,167737,167738],{"class":34}," func(",[28,167740,668],{"class":38},[28,167742,167714],{"class":34},[28,167744,10738],{"class":38},[28,167746,167747],{"class":34},"kwargs)\n",[28,167749,167750,167752,167754,167756],{"class":30,"line":131},[28,167751,32527],{"class":45},[28,167753,221],{"class":34},[28,167755,167608],{"class":320},[28,167757,227],{"class":34},[28,167759,167760,167762],{"class":30,"line":1291},[28,167761,14829],{"class":38},[28,167763,167764],{"class":34}," result\n",[28,167766,167767],{"class":30,"line":1297},[28,167768,2477],{"emptyLinePlaceholder":144},[28,167770,167771,167773],{"class":30,"line":1388},[28,167772,4167],{"class":38},[28,167774,167621],{"class":34},[28,167776,167777],{"class":30,"line":1394},[28,167778,2477],{"emptyLinePlaceholder":144},[28,167780,167781],{"class":30,"line":1406},[28,167782,2477],{"emptyLinePlaceholder":144},[28,167784,167785],{"class":30,"line":1689},[28,167786,167634],{"class":2040},[28,167788,167789,167791,167793],{"class":30,"line":1694},[28,167790,32023],{"class":38},[28,167792,5286],{"class":2040},[28,167794,151152],{"class":34},[28,167796,167797,167799,167801,167803],{"class":30,"line":1700},[28,167798,4167],{"class":38},[28,167800,10946],{"class":34},[28,167802,693],{"class":38},[28,167804,151163],{"class":34},[28,167806,167807],{"class":30,"line":1705},[28,167808,2477],{"emptyLinePlaceholder":144},[28,167810,167811],{"class":30,"line":1719},[28,167812,2477],{"emptyLinePlaceholder":144},[28,167814,167815,167817,167819,167821,167823,167825],{"class":30,"line":1724},[28,167816,30491],{"class":45},[28,167818,166659],{"class":34},[28,167820,659],{"class":45},[28,167822,12512],{"class":34},[28,167824,102],{"class":45},[28,167826,30573],{"class":34},[14,167828,167829,167830,101077,167832,167834],{},"这个写法使用 ",[25,167831,166591],{},[25,167833,166706],{}," 接收原函数的所有参数。",[159,167836,167838],{"id":167837},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167840,123351],{},[171,167842,167843,167846,167849],{},[174,167844,167845],{},"给定一组学生数据。",[174,167847,167848],{},"封装函数，根据传入规则筛选学生。",[174,167850,167851],{},"筛选及格、优秀、未成年学生。",[14,167853,10112],{},[18,167855,167857],{"className":20,"code":167856,"language":22,"meta":23,"style":23},"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",[25,167858,167859,167867,167895,167923,167951,167955,167959,167963,167973,167981,167991,167998,168003,168009,168013,168017,168041,168064,168087,168091,168098,168105],{"__ignoreMap":23},[28,167860,167861,167863,167865],{"class":30,"line":31},[28,167862,159775],{"class":34},[28,167864,39],{"class":38},[28,167866,55522],{"class":34},[28,167868,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893],{"class":30,"line":94},[28,167870,148444],{"class":34},[28,167872,62754],{"class":320},[28,167874,51512],{"class":34},[28,167876,149947],{"class":320},[28,167878,12512],{"class":34},[28,167880,69199],{"class":320},[28,167882,51512],{"class":34},[28,167884,860],{"class":45},[28,167886,12512],{"class":34},[28,167888,151531],{"class":320},[28,167890,51512],{"class":34},[28,167892,1193],{"class":45},[28,167894,5007],{"class":34},[28,167896,167897,167899,167901,167903,167905,167907,167909,167911,167913,167915,167917,167919,167921],{"class":30,"line":109},[28,167898,148444],{"class":34},[28,167900,62754],{"class":320},[28,167902,51512],{"class":34},[28,167904,150995],{"class":320},[28,167906,12512],{"class":34},[28,167908,69199],{"class":320},[28,167910,51512],{"class":34},[28,167912,835],{"class":45},[28,167914,12512],{"class":34},[28,167916,151531],{"class":320},[28,167918,51512],{"class":34},[28,167920,1017],{"class":45},[28,167922,5007],{"class":34},[28,167924,167925,167927,167929,167931,167933,167935,167937,167939,167941,167943,167945,167947,167949],{"class":30,"line":125},[28,167926,148444],{"class":34},[28,167928,62754],{"class":320},[28,167930,51512],{"class":34},[28,167932,159790],{"class":320},[28,167934,12512],{"class":34},[28,167936,69199],{"class":320},[28,167938,51512],{"class":34},[28,167940,885],{"class":45},[28,167942,12512],{"class":34},[28,167944,151531],{"class":320},[28,167946,51512],{"class":34},[28,167948,1088],{"class":45},[28,167950,5007],{"class":34},[28,167952,167953],{"class":30,"line":131},[28,167954,33322],{"class":34},[28,167956,167957],{"class":30,"line":1291},[28,167958,2477],{"emptyLinePlaceholder":144},[28,167960,167961],{"class":30,"line":1297},[28,167962,2477],{"emptyLinePlaceholder":144},[28,167964,167965,167967,167970],{"class":30,"line":1388},[28,167966,32023],{"class":38},[28,167968,167969],{"class":2040}," filter_students",[28,167971,167972],{"class":34},"(students, condition):\n",[28,167974,167975,167977,167979],{"class":30,"line":1394},[28,167976,161282],{"class":34},[28,167978,39],{"class":38},[28,167980,51913],{"class":34},[28,167982,167983,167985,167987,167989],{"class":30,"line":1406},[28,167984,3278],{"class":38},[28,167986,152196],{"class":34},[28,167988,26121],{"class":38},[28,167990,152201],{"class":34},[28,167992,167993,167995],{"class":30,"line":1689},[28,167994,2574],{"class":38},[28,167996,167997],{"class":34}," condition(student):\n",[28,167999,168000],{"class":30,"line":1694},[28,168001,168002],{"class":34},"            result.append(student)\n",[28,168004,168005,168007],{"class":30,"line":1700},[28,168006,4167],{"class":38},[28,168008,167764],{"class":34},[28,168010,168011],{"class":30,"line":1705},[28,168012,2477],{"emptyLinePlaceholder":144},[28,168014,168015],{"class":30,"line":1719},[28,168016,2477],{"emptyLinePlaceholder":144},[28,168018,168019,168021,168023,168026,168028,168031,168033,168035,168037,168039],{"class":30,"line":1724},[28,168020,165760],{"class":34},[28,168022,39],{"class":38},[28,168024,168025],{"class":34}," filter_students(students, ",[28,168027,166945],{"class":38},[28,168029,168030],{"class":34}," s: s[",[28,168032,151531],{"class":320},[28,168034,4520],{"class":34},[28,168036,1787],{"class":38},[28,168038,157896],{"class":45},[28,168040,227],{"class":34},[28,168042,168043,168046,168048,168050,168052,168054,168056,168058,168060,168062],{"class":30,"line":1730},[28,168044,168045],{"class":34},"excellent ",[28,168047,39],{"class":38},[28,168049,168025],{"class":34},[28,168051,166945],{"class":38},[28,168053,168030],{"class":34},[28,168055,151531],{"class":320},[28,168057,4520],{"class":34},[28,168059,1787],{"class":38},[28,168061,157847],{"class":45},[28,168063,227],{"class":34},[28,168065,168066,168069,168071,168073,168075,168077,168079,168081,168083,168085],{"class":30,"line":1751},[28,168067,168068],{"class":34},"under_age ",[28,168070,39],{"class":38},[28,168072,168025],{"class":34},[28,168074,166945],{"class":38},[28,168076,168030],{"class":34},[28,168078,69199],{"class":320},[28,168080,4520],{"class":34},[28,168082,99],{"class":38},[28,168084,156344],{"class":45},[28,168086,227],{"class":34},[28,168088,168089],{"class":30,"line":1756},[28,168090,2477],{"emptyLinePlaceholder":144},[28,168092,168093,168095],{"class":30,"line":1770},[28,168094,30491],{"class":45},[28,168096,168097],{"class":34},"(passed)\n",[28,168099,168100,168102],{"class":30,"line":1775},[28,168101,30491],{"class":45},[28,168103,168104],{"class":34},"(excellent)\n",[28,168106,168107,168109],{"class":30,"line":1804},[28,168108,30491],{"class":45},[28,168110,168111],{"class":34},"(under_age)\n",[159,168113,168115],{"id":168114},"_715-易错点","7.15 易错点",[171,168117,168118,168121,168129,168134,168145],{},[174,168119,168120],{},"默认参数不要写可变对象。",[174,168122,168123,168125,168126,168128],{},[25,168124,166591],{}," 是元组，",[25,168127,166706],{}," 是字典。",[174,168130,168131,168133],{},[25,168132,166945],{}," 只适合简单表达式。",[174,168135,168136,101077,168138,168140,168141,168144],{},[25,168137,74119],{},[25,168139,80126],{}," 的结果是迭代器，常用 ",[25,168142,168143],{},"list()"," 转换查看。",[174,168146,168147],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[159,168149,168151],{"id":168150},"_716-本章练习","7.16 本章练习",[171,168153,168154,168161,168167,168172,168177],{},[174,168155,168156,168157,168160],{},"写函数 ",[25,168158,168159],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[174,168162,168156,168163,168166],{},[25,168164,168165],{},"print_user(**kwargs)","，输出用户所有字段。",[174,168168,104425,168169,168171],{},[25,168170,166945],{}," 对学生列表按年龄排序。",[174,168173,104425,168174,168176],{},[25,168175,80126],{}," 找出成绩不及格的学生。",[174,168178,168179],{},"写一个装饰器，统计函数执行前后的提示信息。",[136,168181,168182],{},"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":23,"searchDepth":94,"depth":94,"links":168184},[168185,168186,168187,168188,168189,168190,168194,168195,168196,168197,168202,168203,168204,168205,168206,168207],{"id":166043,"depth":94,"text":166044},{"id":166157,"depth":94,"text":166158},{"id":166246,"depth":94,"text":166247},{"id":166308,"depth":94,"text":166309},{"id":166454,"depth":94,"text":166455},{"id":166581,"depth":94,"text":166582,"children":168191},[168192,168193],{"id":166585,"depth":109,"text":166586},{"id":166700,"depth":109,"text":166701},{"id":166781,"depth":94,"text":166782},{"id":166939,"depth":94,"text":166940},{"id":167107,"depth":94,"text":167108},{"id":167189,"depth":94,"text":167190,"children":168198},[168199,168200,168201],{"id":167193,"depth":109,"text":167194},{"id":167264,"depth":109,"text":167265},{"id":167341,"depth":109,"text":167342},{"id":167466,"depth":94,"text":167467},{"id":167556,"depth":94,"text":167557},{"id":167687,"depth":94,"text":167688},{"id":167837,"depth":94,"text":167838},{"id":168114,"depth":94,"text":168115},{"id":168150,"depth":94,"text":168151},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166035,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168214,"title":168215,"body":168216,"description":141,"extension":142,"meta":170735,"navigation":144,"path":170736,"seo":170737,"stem":170738,"__hash__":170739},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168217,"toc":170710},[168218,168221,168225,168228,168231,168262,168266,168270,168273,168300,168304,168307,168358,168361,168376,168379,168414,168418,168420,168444,168447,168507,168511,168515,168518,168575,168578,168598,168602,168605,168668,168672,168675,168731,168738,168762,168766,168769,168832,168836,168841,168892,168895,168899,168904,168971,168974,169056,169060,169065,169116,169119,169123,169126,169129,169137,169140,169186,169189,169235,169239,169245,169289,169292,169338,169341,169381,169384,169445,169449,169452,169542,169545,169687,169690,169757,169761,169764,169767,169908,169911,169989,169992,170168,170172,170174,170185,170187,170386,170390,170634,170638,170672,170676,170707],[10,168219,168215],{"id":168220},"_8-文件操作",[159,168222,168224],{"id":168223},"_81-文件操作的意义","8.1 文件操作的意义",[14,168226,168227],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168229,168230],{},"常见文件类型：",[171,168232,168233,168239,168245,168251,168257],{},[174,168234,168235,168238],{},[25,168236,168237],{},".txt","：普通文本。",[174,168240,168241,168244],{},[25,168242,168243],{},".csv","：表格文本。",[174,168246,168247,168250],{},[25,168248,168249],{},".json","：结构化数据。",[174,168252,168253,168256],{},[25,168254,168255],{},".log","：日志文件。",[174,168258,168259,168261],{},[25,168260,146411],{},"：Python 源代码。",[159,168263,168265],{"id":168264},"_82-路径","8.2 路径",[188,168267,168269],{"id":168268},"_821-相对路径","8.2.1 相对路径",[14,168271,168272],{},"相对当前运行目录：",[18,168274,168276],{"className":20,"code":168275,"language":22,"meta":23,"style":23},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[25,168277,168278],{"__ignoreMap":23},[28,168279,168280,168282,168284,168286,168288,168290,168292,168294,168296,168298],{"class":30,"line":31},[28,168281,86990],{"class":45},[28,168283,221],{"class":34},[28,168285,146855],{"class":320},[28,168287,12512],{"class":34},[28,168289,146860],{"class":320},[28,168291,12512],{"class":34},[28,168293,146865],{"class":5293},[28,168295,39],{"class":38},[28,168297,146870],{"class":320},[28,168299,227],{"class":34},[188,168301,168303],{"id":168302},"_822-绝对路径","8.2.2 绝对路径",[14,168305,168306],{},"从根目录或盘符开始：",[18,168308,168310],{"className":20,"code":168309,"language":22,"meta":23,"style":23},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[25,168311,168312,168335],{"__ignoreMap":23},[28,168313,168314,168316,168318,168321,168323,168325,168327,168329,168331,168333],{"class":30,"line":31},[28,168315,86990],{"class":45},[28,168317,221],{"class":34},[28,168319,168320],{"class":320},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[28,168322,12512],{"class":34},[28,168324,146860],{"class":320},[28,168326,12512],{"class":34},[28,168328,146865],{"class":5293},[28,168330,39],{"class":38},[28,168332,146870],{"class":320},[28,168334,227],{"class":34},[28,168336,168337,168339,168341,168344,168346,168348,168350,168352,168354,168356],{"class":30,"line":94},[28,168338,86990],{"class":45},[28,168340,221],{"class":34},[28,168342,168343],{"class":320},"\"D:\u002Fdata\u002Fdata.txt\"",[28,168345,12512],{"class":34},[28,168347,146860],{"class":320},[28,168349,12512],{"class":34},[28,168351,146865],{"class":5293},[28,168353,39],{"class":38},[28,168355,146870],{"class":320},[28,168357,227],{"class":34},[14,168359,168360],{},"Windows 路径建议写成：",[18,168362,168364],{"className":20,"code":168363,"language":22,"meta":23,"style":23},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[25,168365,168366],{"__ignoreMap":23},[28,168367,168368,168371,168373],{"class":30,"line":31},[28,168369,168370],{"class":34},"path ",[28,168372,39],{"class":38},[28,168374,168375],{"class":320}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168377,168378],{},"或原始字符串：",[18,168380,168382],{"className":20,"code":168381,"language":22,"meta":23,"style":23},"path = r\"D:\\data\\data.txt\"\n",[25,168383,168384],{"__ignoreMap":23},[28,168385,168386,168388,168390,168392,168394,168397,168400,168403,168405,168407,168409,168412],{"class":30,"line":31},[28,168387,168370],{"class":34},[28,168389,39],{"class":38},[28,168391,17198],{"class":38},[28,168393,465],{"class":320},[28,168395,168396],{"class":48053},"D:",[28,168398,168399],{"class":45},"\\d",[28,168401,168402],{"class":48053},"ata",[28,168404,168399],{"class":45},[28,168406,168402],{"class":48053},[28,168408,768],{"class":45},[28,168410,168411],{"class":48053},"txt",[28,168413,25211],{"class":320},[159,168415,168417],{"id":168416},"_83-open函数","8.3 open函数",[14,168419,5258],{},[18,168421,168423],{"className":20,"code":168422,"language":22,"meta":23,"style":23},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[25,168424,168425],{"__ignoreMap":23},[28,168426,168427,168429,168431,168433,168436,168438,168440,168442],{"class":30,"line":31},[28,168428,45430],{"class":5293},[28,168430,13641],{"class":38},[28,168432,146850],{"class":45},[28,168434,168435],{"class":34},"(文件路径, 打开模式, ",[28,168437,146865],{"class":5293},[28,168439,39],{"class":38},[28,168441,146870],{"class":320},[28,168443,227],{"class":34},[14,168445,168446],{},"常见模式：",[353,168448,168449,168458],{},[356,168450,168451],{},[359,168452,168453,168456],{},[362,168454,168455],{},"模式",[362,168457,25947],{},[400,168459,168460,168469,168478,168487,168497],{},[359,168461,168462,168466],{},[405,168463,168464],{},[25,168465,880],{},[405,168467,168468],{},"只读，文件不存在会报错",[359,168470,168471,168475],{},[405,168472,168473],{},[25,168474,1001],{},[405,168476,168477],{},"只写，文件不存在会创建，存在会清空",[359,168479,168480,168484],{},[405,168481,168482],{},[25,168483,35],{},[405,168485,168486],{},"追加，文件不存在会创建",[359,168488,168489,168494],{},[405,168490,168491],{},[25,168492,168493],{},"rb",[405,168495,168496],{},"二进制只读",[359,168498,168499,168504],{},[405,168500,168501],{},[25,168502,168503],{},"wb",[405,168505,168506],{},"二进制只写",[159,168508,168510],{"id":168509},"_84-读取文件","8.4 读取文件",[188,168512,168514],{"id":168513},"_841-read","8.4.1 read",[14,168516,168517],{},"一次读取全部内容：",[18,168519,168521],{"className":20,"code":168520,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[25,168522,168523,168549,168561,168568],{"__ignoreMap":23},[28,168524,168525,168527,168529,168531,168533,168535,168537,168539,168541,168543,168545,168547],{"class":30,"line":31},[28,168526,45430],{"class":5293},[28,168528,13641],{"class":38},[28,168530,146850],{"class":45},[28,168532,221],{"class":34},[28,168534,146855],{"class":320},[28,168536,12512],{"class":34},[28,168538,146860],{"class":320},[28,168540,12512],{"class":34},[28,168542,146865],{"class":5293},[28,168544,39],{"class":38},[28,168546,146870],{"class":320},[28,168548,227],{"class":34},[28,168550,168551,168554,168556,168558],{"class":30,"line":94},[28,168552,168553],{"class":34},"content ",[28,168555,39],{"class":38},[28,168557,148212],{"class":5293},[28,168559,168560],{"class":34},".read()\n",[28,168562,168563,168565],{"class":30,"line":109},[28,168564,30491],{"class":45},[28,168566,168567],{"class":34},"(content)\n",[28,168569,168570,168572],{"class":30,"line":125},[28,168571,45430],{"class":5293},[28,168573,168574],{"class":34},".close()\n",[14,168576,168577],{},"可以指定读取字符数：",[18,168579,168581],{"className":20,"code":168580,"language":22,"meta":23,"style":23},"content = file.read(10)\n",[25,168582,168583],{"__ignoreMap":23},[28,168584,168585,168587,168589,168591,168594,168596],{"class":30,"line":31},[28,168586,168553],{"class":34},[28,168588,39],{"class":38},[28,168590,148212],{"class":5293},[28,168592,168593],{"class":34},".read(",[28,168595,659],{"class":45},[28,168597,227],{"class":34},[188,168599,168601],{"id":168600},"_842-readline","8.4.2 readline",[14,168603,168604],{},"一次读取一行：",[18,168606,168608],{"className":20,"code":168607,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[25,168609,168610,168636,168640,168651,168658,168662],{"__ignoreMap":23},[28,168611,168612,168614,168616,168618,168620,168622,168624,168626,168628,168630,168632,168634],{"class":30,"line":31},[28,168613,45430],{"class":5293},[28,168615,13641],{"class":38},[28,168617,146850],{"class":45},[28,168619,221],{"class":34},[28,168621,146855],{"class":320},[28,168623,12512],{"class":34},[28,168625,146860],{"class":320},[28,168627,12512],{"class":34},[28,168629,146865],{"class":5293},[28,168631,39],{"class":38},[28,168633,146870],{"class":320},[28,168635,227],{"class":34},[28,168637,168638],{"class":30,"line":94},[28,168639,2477],{"emptyLinePlaceholder":144},[28,168641,168642,168644,168646,168648],{"class":30,"line":109},[28,168643,147311],{"class":34},[28,168645,39],{"class":38},[28,168647,148212],{"class":5293},[28,168649,168650],{"class":34},".readline()\n",[28,168652,168653,168655],{"class":30,"line":125},[28,168654,30491],{"class":45},[28,168656,168657],{"class":34},"(line)\n",[28,168659,168660],{"class":30,"line":131},[28,168661,2477],{"emptyLinePlaceholder":144},[28,168663,168664,168666],{"class":30,"line":1291},[28,168665,45430],{"class":5293},[28,168667,168574],{"class":34},[188,168669,168671],{"id":168670},"_843-readlines","8.4.3 readlines",[14,168673,168674],{},"读取所有行，返回列表：",[18,168676,168678],{"className":20,"code":168677,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[25,168679,168680,168706,168718,168725],{"__ignoreMap":23},[28,168681,168682,168684,168686,168688,168690,168692,168694,168696,168698,168700,168702,168704],{"class":30,"line":31},[28,168683,45430],{"class":5293},[28,168685,13641],{"class":38},[28,168687,146850],{"class":45},[28,168689,221],{"class":34},[28,168691,146855],{"class":320},[28,168693,12512],{"class":34},[28,168695,146860],{"class":320},[28,168697,12512],{"class":34},[28,168699,146865],{"class":5293},[28,168701,39],{"class":38},[28,168703,146870],{"class":320},[28,168705,227],{"class":34},[28,168707,168708,168711,168713,168715],{"class":30,"line":94},[28,168709,168710],{"class":34},"lines ",[28,168712,39],{"class":38},[28,168714,148212],{"class":5293},[28,168716,168717],{"class":34},".readlines()\n",[28,168719,168720,168722],{"class":30,"line":109},[28,168721,30491],{"class":45},[28,168723,168724],{"class":34},"(lines)\n",[28,168726,168727,168729],{"class":30,"line":125},[28,168728,45430],{"class":5293},[28,168730,168574],{"class":34},[14,168732,168733,168734,168737],{},"每一行通常带有换行符，可以用 ",[25,168735,168736],{},"strip()"," 去掉：",[18,168739,168741],{"className":20,"code":168740,"language":22,"meta":23,"style":23},"for line in lines:\n    print(line.strip())\n",[25,168742,168743,168755],{"__ignoreMap":23},[28,168744,168745,168747,168750,168752],{"class":30,"line":31},[28,168746,3102],{"class":38},[28,168748,168749],{"class":34}," line ",[28,168751,26121],{"class":38},[28,168753,168754],{"class":34}," lines:\n",[28,168756,168757,168759],{"class":30,"line":94},[28,168758,31375],{"class":45},[28,168760,168761],{"class":34},"(line.strip())\n",[188,168763,168765],{"id":168764},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168767,168768],{},"推荐读取大文件时使用：",[18,168770,168772],{"className":20,"code":168771,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[25,168773,168774,168800,168804,168816,168822,168826],{"__ignoreMap":23},[28,168775,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798],{"class":30,"line":31},[28,168777,45430],{"class":5293},[28,168779,13641],{"class":38},[28,168781,146850],{"class":45},[28,168783,221],{"class":34},[28,168785,146855],{"class":320},[28,168787,12512],{"class":34},[28,168789,146860],{"class":320},[28,168791,12512],{"class":34},[28,168793,146865],{"class":5293},[28,168795,39],{"class":38},[28,168797,146870],{"class":320},[28,168799,227],{"class":34},[28,168801,168802],{"class":30,"line":94},[28,168803,2477],{"emptyLinePlaceholder":144},[28,168805,168806,168808,168810,168812,168814],{"class":30,"line":109},[28,168807,3102],{"class":38},[28,168809,168749],{"class":34},[28,168811,26121],{"class":38},[28,168813,148212],{"class":5293},[28,168815,3816],{"class":34},[28,168817,168818,168820],{"class":30,"line":125},[28,168819,31375],{"class":45},[28,168821,168761],{"class":34},[28,168823,168824],{"class":30,"line":131},[28,168825,2477],{"emptyLinePlaceholder":144},[28,168827,168828,168830],{"class":30,"line":1291},[28,168829,45430],{"class":5293},[28,168831,168574],{"class":34},[159,168833,168835],{"id":168834},"_85-with语句","8.5 with语句",[14,168837,168838,168840],{},[25,168839,107892],{}," 会自动关闭文件，推荐使用。",[18,168842,168844],{"className":20,"code":168843,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[25,168845,168846,168876,168886],{"__ignoreMap":23},[28,168847,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874],{"class":30,"line":31},[28,168849,107892],{"class":38},[28,168851,146850],{"class":45},[28,168853,221],{"class":34},[28,168855,146855],{"class":320},[28,168857,12512],{"class":34},[28,168859,146860],{"class":320},[28,168861,12512],{"class":34},[28,168863,146865],{"class":5293},[28,168865,39],{"class":38},[28,168867,146870],{"class":320},[28,168869,13791],{"class":34},[28,168871,31459],{"class":38},[28,168873,148212],{"class":5293},[28,168875,3816],{"class":34},[28,168877,168878,168880,168882,168884],{"class":30,"line":94},[28,168879,146882],{"class":34},[28,168881,39],{"class":38},[28,168883,148212],{"class":5293},[28,168885,168560],{"class":34},[28,168887,168888,168890],{"class":30,"line":109},[28,168889,31375],{"class":45},[28,168891,168567],{"class":34},[14,168893,168894],{},"等价于打开文件、读取、最后关闭，但更安全。",[159,168896,168898],{"id":168897},"_86-写入文件","8.6 写入文件",[14,168900,168901,168903],{},[25,168902,1001],{}," 模式会清空原文件。",[18,168905,168907],{"className":20,"code":168906,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[25,168908,168909,168939,168956],{"__ignoreMap":23},[28,168910,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929,168931,168933,168935,168937],{"class":30,"line":31},[28,168912,107892],{"class":38},[28,168914,146850],{"class":45},[28,168916,221],{"class":34},[28,168918,146855],{"class":320},[28,168920,12512],{"class":34},[28,168922,152035],{"class":320},[28,168924,12512],{"class":34},[28,168926,146865],{"class":5293},[28,168928,39],{"class":38},[28,168930,146870],{"class":320},[28,168932,13791],{"class":34},[28,168934,31459],{"class":38},[28,168936,148212],{"class":5293},[28,168938,3816],{"class":34},[28,168940,168941,168944,168947,168950,168952,168954],{"class":30,"line":94},[28,168942,168943],{"class":5293},"    file",[28,168945,168946],{"class":34},".write(",[28,168948,168949],{"class":320},"\"hello",[28,168951,156584],{"class":45},[28,168953,465],{"class":320},[28,168955,227],{"class":34},[28,168957,168958,168960,168962,168965,168967,168969],{"class":30,"line":109},[28,168959,168943],{"class":5293},[28,168961,168946],{"class":34},[28,168963,168964],{"class":320},"\"python",[28,168966,156584],{"class":45},[28,168968,465],{"class":320},[28,168970,227],{"class":34},[14,168972,168973],{},"写入多行：",[18,168975,168977],{"className":20,"code":168976,"language":22,"meta":23,"style":23},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[25,168978,168979,169014,169018,169049],{"__ignoreMap":23},[28,168980,168981,168983,168985,168987,168990,168992,168994,168996,168999,169001,169003,169005,169008,169010,169012],{"class":30,"line":31},[28,168982,168710],{"class":34},[28,168984,39],{"class":38},[28,168986,52301],{"class":34},[28,168988,168989],{"class":320},"\"小明,18",[28,168991,156584],{"class":45},[28,168993,465],{"class":320},[28,168995,12512],{"class":34},[28,168997,168998],{"class":320},"\"小红,17",[28,169000,156584],{"class":45},[28,169002,465],{"class":320},[28,169004,12512],{"class":34},[28,169006,169007],{"class":320},"\"小刚,19",[28,169009,156584],{"class":45},[28,169011,465],{"class":320},[28,169013,33322],{"class":34},[28,169015,169016],{"class":30,"line":94},[28,169017,2477],{"emptyLinePlaceholder":144},[28,169019,169020,169022,169024,169026,169029,169031,169033,169035,169037,169039,169041,169043,169045,169047],{"class":30,"line":109},[28,169021,107892],{"class":38},[28,169023,146850],{"class":45},[28,169025,221],{"class":34},[28,169027,169028],{"class":320},"\"students.txt\"",[28,169030,12512],{"class":34},[28,169032,152035],{"class":320},[28,169034,12512],{"class":34},[28,169036,146865],{"class":5293},[28,169038,39],{"class":38},[28,169040,146870],{"class":320},[28,169042,13791],{"class":34},[28,169044,31459],{"class":38},[28,169046,148212],{"class":5293},[28,169048,3816],{"class":34},[28,169050,169051,169053],{"class":30,"line":125},[28,169052,168943],{"class":5293},[28,169054,169055],{"class":34},".writelines(lines)\n",[159,169057,169059],{"id":169058},"_87-追加文件","8.7 追加文件",[14,169061,169062,169064],{},[25,169063,35],{}," 模式不会清空原内容，而是在末尾追加。",[18,169066,169068],{"className":20,"code":169067,"language":22,"meta":23,"style":23},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[25,169069,169070,169101],{"__ignoreMap":23},[28,169071,169072,169074,169076,169078,169081,169083,169085,169087,169089,169091,169093,169095,169097,169099],{"class":30,"line":31},[28,169073,107892],{"class":38},[28,169075,146850],{"class":45},[28,169077,221],{"class":34},[28,169079,169080],{"class":320},"\"log.txt\"",[28,169082,12512],{"class":34},[28,169084,165384],{"class":320},[28,169086,12512],{"class":34},[28,169088,146865],{"class":5293},[28,169090,39],{"class":38},[28,169092,146870],{"class":320},[28,169094,13791],{"class":34},[28,169096,31459],{"class":38},[28,169098,148212],{"class":5293},[28,169100,3816],{"class":34},[28,169102,169103,169105,169107,169110,169112,169114],{"class":30,"line":94},[28,169104,168943],{"class":5293},[28,169106,168946],{"class":34},[28,169108,169109],{"class":320},"\"程序启动",[28,169111,156584],{"class":45},[28,169113,465],{"class":320},[28,169115,227],{"class":34},[14,169117,169118],{},"日志类文件常用追加模式。",[159,169120,169122],{"id":169121},"_88-文件编码","8.8 文件编码",[14,169124,169125],{},"编码决定文字如何保存为字节。",[14,169127,169128],{},"常见编码：",[171,169130,169131,169134],{},[174,169132,169133],{},"UTF-8：推荐。",[174,169135,169136],{},"GBK：部分 Windows 中文文件常见。",[14,169138,169139],{},"读取文件乱码时，可以尝试：",[18,169141,169143],{"className":20,"code":169142,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[25,169144,169145,169176],{"__ignoreMap":23},[28,169146,169147,169149,169151,169153,169155,169157,169159,169161,169163,169165,169168,169170,169172,169174],{"class":30,"line":31},[28,169148,107892],{"class":38},[28,169150,146850],{"class":45},[28,169152,221],{"class":34},[28,169154,146855],{"class":320},[28,169156,12512],{"class":34},[28,169158,146860],{"class":320},[28,169160,12512],{"class":34},[28,169162,146865],{"class":5293},[28,169164,39],{"class":38},[28,169166,169167],{"class":320},"\"gbk\"",[28,169169,13791],{"class":34},[28,169171,31459],{"class":38},[28,169173,148212],{"class":5293},[28,169175,3816],{"class":34},[28,169177,169178,169180,169182,169184],{"class":30,"line":94},[28,169179,146882],{"class":34},[28,169181,39],{"class":38},[28,169183,148212],{"class":5293},[28,169185,168560],{"class":34},[14,169187,169188],{},"写文件时建议统一 UTF-8：",[18,169190,169192],{"className":20,"code":169191,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[25,169193,169194,169224],{"__ignoreMap":23},[28,169195,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214,169216,169218,169220,169222],{"class":30,"line":31},[28,169197,107892],{"class":38},[28,169199,146850],{"class":45},[28,169201,221],{"class":34},[28,169203,146855],{"class":320},[28,169205,12512],{"class":34},[28,169207,152035],{"class":320},[28,169209,12512],{"class":34},[28,169211,146865],{"class":5293},[28,169213,39],{"class":38},[28,169215,146870],{"class":320},[28,169217,13791],{"class":34},[28,169219,31459],{"class":38},[28,169221,148212],{"class":5293},[28,169223,3816],{"class":34},[28,169225,169226,169228,169230,169233],{"class":30,"line":94},[28,169227,168943],{"class":5293},[28,169229,168946],{"class":34},[28,169231,169232],{"class":320},"\"中文内容\"",[28,169234,227],{"class":34},[159,169236,169238],{"id":169237},"_89-pathlib","8.9 pathlib",[14,169240,169241,169244],{},[25,169242,169243],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[18,169246,169248],{"className":20,"code":169247,"language":22,"meta":23,"style":23},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[25,169249,169250,169260,169264,169282],{"__ignoreMap":23},[28,169251,169252,169254,169256,169258],{"class":30,"line":31},[28,169253,30813],{"class":38},[28,169255,108370],{"class":34},[28,169257,30468],{"class":38},[28,169259,108375],{"class":34},[28,169261,169262],{"class":30,"line":94},[28,169263,2477],{"emptyLinePlaceholder":144},[28,169265,169266,169268,169270,169272,169275,169277,169279],{"class":30,"line":109},[28,169267,168370],{"class":34},[28,169269,39],{"class":38},[28,169271,108604],{"class":34},[28,169273,169274],{"class":320},"\"data\"",[28,169276,13791],{"class":34},[28,169278,794],{"class":38},[28,169280,169281],{"class":320}," \"students.txt\"\n",[28,169283,169284,169286],{"class":30,"line":125},[28,169285,30491],{"class":45},[28,169287,169288],{"class":34},"(path)\n",[14,169290,169291],{},"创建目录：",[18,169293,169295],{"className":20,"code":169294,"language":22,"meta":23,"style":23},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[25,169296,169297,169307,169311,169324],{"__ignoreMap":23},[28,169298,169299,169301,169303,169305],{"class":30,"line":31},[28,169300,30813],{"class":38},[28,169302,108370],{"class":34},[28,169304,30468],{"class":38},[28,169306,108375],{"class":34},[28,169308,169309],{"class":30,"line":94},[28,169310,2477],{"emptyLinePlaceholder":144},[28,169312,169313,169316,169318,169320,169322],{"class":30,"line":109},[28,169314,169315],{"class":34},"data_dir ",[28,169317,39],{"class":38},[28,169319,108604],{"class":34},[28,169321,169274],{"class":320},[28,169323,227],{"class":34},[28,169325,169326,169329,169332,169334,169336],{"class":30,"line":125},[28,169327,169328],{"class":34},"data_dir.mkdir(",[28,169330,169331],{"class":5293},"exist_ok",[28,169333,39],{"class":38},[28,169335,31552],{"class":45},[28,169337,227],{"class":34},[14,169339,169340],{},"判断文件是否存在：",[18,169342,169344],{"className":20,"code":169343,"language":22,"meta":23,"style":23},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[25,169345,169346,169359,169363,169370],{"__ignoreMap":23},[28,169347,169348,169350,169352,169354,169357],{"class":30,"line":31},[28,169349,168370],{"class":34},[28,169351,39],{"class":38},[28,169353,108604],{"class":34},[28,169355,169356],{"class":320},"\"data\u002Fstudents.txt\"",[28,169358,227],{"class":34},[28,169360,169361],{"class":30,"line":94},[28,169362,2477],{"emptyLinePlaceholder":144},[28,169364,169365,169367],{"class":30,"line":109},[28,169366,1608],{"class":38},[28,169368,169369],{"class":34}," path.exists():\n",[28,169371,169372,169374,169376,169379],{"class":30,"line":125},[28,169373,31375],{"class":45},[28,169375,221],{"class":34},[28,169377,169378],{"class":320},"\"文件存在\"",[28,169380,227],{"class":34},[14,169382,169383],{},"读写文本：",[18,169385,169387],{"className":20,"code":169386,"language":22,"meta":23,"style":23},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[25,169388,169389,169401,169405,169422,169439],{"__ignoreMap":23},[28,169390,169391,169393,169395,169397,169399],{"class":30,"line":31},[28,169392,168370],{"class":34},[28,169394,39],{"class":38},[28,169396,108604],{"class":34},[28,169398,146855],{"class":320},[28,169400,227],{"class":34},[28,169402,169403],{"class":30,"line":94},[28,169404,2477],{"emptyLinePlaceholder":144},[28,169406,169407,169410,169412,169414,169416,169418,169420],{"class":30,"line":109},[28,169408,169409],{"class":34},"path.write_text(",[28,169411,145935],{"class":320},[28,169413,12512],{"class":34},[28,169415,146865],{"class":5293},[28,169417,39],{"class":38},[28,169419,146870],{"class":320},[28,169421,227],{"class":34},[28,169423,169424,169426,169428,169431,169433,169435,169437],{"class":30,"line":125},[28,169425,168553],{"class":34},[28,169427,39],{"class":38},[28,169429,169430],{"class":34}," path.read_text(",[28,169432,146865],{"class":5293},[28,169434,39],{"class":38},[28,169436,146870],{"class":320},[28,169438,227],{"class":34},[28,169440,169441,169443],{"class":30,"line":131},[28,169442,30491],{"class":45},[28,169444,168567],{"class":34},[159,169446,169448],{"id":169447},"_810-json文件","8.10 JSON文件",[14,169450,169451],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[18,169453,169455],{"className":20,"code":169454,"language":22,"meta":23,"style":23},"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",[25,169456,169457,169463,169467,169475,169485,169495,169503,169507,169511,169536],{"__ignoreMap":23},[28,169458,169459,169461],{"class":30,"line":31},[28,169460,30468],{"class":38},[28,169462,147150],{"class":34},[28,169464,169465],{"class":30,"line":94},[28,169466,2477],{"emptyLinePlaceholder":144},[28,169468,169469,169471,169473],{"class":30,"line":109},[28,169470,149540],{"class":34},[28,169472,39],{"class":38},[28,169474,15649],{"class":34},[28,169476,169477,169479,169481,169483],{"class":30,"line":125},[28,169478,147079],{"class":320},[28,169480,51512],{"class":34},[28,169482,149947],{"class":320},[28,169484,31542],{"class":34},[28,169486,169487,169489,169491,169493],{"class":30,"line":131},[28,169488,164596],{"class":320},[28,169490,51512],{"class":34},[28,169492,860],{"class":45},[28,169494,31542],{"class":34},[28,169496,169497,169499,169501],{"class":30,"line":1291},[28,169498,164607],{"class":320},[28,169500,51512],{"class":34},[28,169502,164612],{"class":45},[28,169504,169505],{"class":30,"line":1297},[28,169506,1642],{"class":34},[28,169508,169509],{"class":30,"line":1388},[28,169510,2477],{"emptyLinePlaceholder":144},[28,169512,169513,169515,169517,169520,169522,169524,169526,169528,169530,169532,169534],{"class":30,"line":1394},[28,169514,156503],{"class":34},[28,169516,39],{"class":38},[28,169518,169519],{"class":34}," json.dumps(student, ",[28,169521,147196],{"class":5293},[28,169523,39],{"class":38},[28,169525,34063],{"class":45},[28,169527,12512],{"class":34},[28,169529,152071],{"class":5293},[28,169531,39],{"class":38},[28,169533,52],{"class":45},[28,169535,227],{"class":34},[28,169537,169538,169540],{"class":30,"line":1406},[28,169539,30491],{"class":45},[28,169541,164130],{"class":34},[14,169543,169544],{},"写入 JSON 文件：",[18,169546,169548],{"className":20,"code":169547,"language":22,"meta":23,"style":23},"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",[25,169549,169550,169556,169560,169568,169596,169624,169628,169632,169662],{"__ignoreMap":23},[28,169551,169552,169554],{"class":30,"line":31},[28,169553,30468],{"class":38},[28,169555,147150],{"class":34},[28,169557,169558],{"class":30,"line":94},[28,169559,2477],{"emptyLinePlaceholder":144},[28,169561,169562,169564,169566],{"class":30,"line":109},[28,169563,159775],{"class":34},[28,169565,39],{"class":38},[28,169567,55522],{"class":34},[28,169569,169570,169572,169574,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594],{"class":30,"line":125},[28,169571,148444],{"class":34},[28,169573,62754],{"class":320},[28,169575,51512],{"class":34},[28,169577,149947],{"class":320},[28,169579,12512],{"class":34},[28,169581,69199],{"class":320},[28,169583,51512],{"class":34},[28,169585,860],{"class":45},[28,169587,12512],{"class":34},[28,169589,151531],{"class":320},[28,169591,51512],{"class":34},[28,169593,1193],{"class":45},[28,169595,5007],{"class":34},[28,169597,169598,169600,169602,169604,169606,169608,169610,169612,169614,169616,169618,169620,169622],{"class":30,"line":131},[28,169599,148444],{"class":34},[28,169601,62754],{"class":320},[28,169603,51512],{"class":34},[28,169605,150995],{"class":320},[28,169607,12512],{"class":34},[28,169609,69199],{"class":320},[28,169611,51512],{"class":34},[28,169613,835],{"class":45},[28,169615,12512],{"class":34},[28,169617,151531],{"class":320},[28,169619,51512],{"class":34},[28,169621,1017],{"class":45},[28,169623,5007],{"class":34},[28,169625,169626],{"class":30,"line":1291},[28,169627,33322],{"class":34},[28,169629,169630],{"class":30,"line":1297},[28,169631,2477],{"emptyLinePlaceholder":144},[28,169633,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660],{"class":30,"line":1388},[28,169635,107892],{"class":38},[28,169637,146850],{"class":45},[28,169639,221],{"class":34},[28,169641,151890],{"class":320},[28,169643,12512],{"class":34},[28,169645,152035],{"class":320},[28,169647,12512],{"class":34},[28,169649,146865],{"class":5293},[28,169651,39],{"class":38},[28,169653,146870],{"class":320},[28,169655,13791],{"class":34},[28,169657,31459],{"class":38},[28,169659,148212],{"class":5293},[28,169661,3816],{"class":34},[28,169663,169664,169667,169669,169671,169673,169675,169677,169679,169681,169683,169685],{"class":30,"line":1394},[28,169665,169666],{"class":34},"    json.dump(students, ",[28,169668,45430],{"class":5293},[28,169670,12512],{"class":34},[28,169672,147196],{"class":5293},[28,169674,39],{"class":38},[28,169676,34063],{"class":45},[28,169678,12512],{"class":34},[28,169680,152071],{"class":5293},[28,169682,39],{"class":38},[28,169684,52],{"class":45},[28,169686,227],{"class":34},[14,169688,169689],{},"读取 JSON 文件：",[18,169691,169693],{"className":20,"code":169692,"language":22,"meta":23,"style":23},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[25,169694,169695,169701,169705,169735,169747,169751],{"__ignoreMap":23},[28,169696,169697,169699],{"class":30,"line":31},[28,169698,30468],{"class":38},[28,169700,147150],{"class":34},[28,169702,169703],{"class":30,"line":94},[28,169704,2477],{"emptyLinePlaceholder":144},[28,169706,169707,169709,169711,169713,169715,169717,169719,169721,169723,169725,169727,169729,169731,169733],{"class":30,"line":109},[28,169708,107892],{"class":38},[28,169710,146850],{"class":45},[28,169712,221],{"class":34},[28,169714,151890],{"class":320},[28,169716,12512],{"class":34},[28,169718,146860],{"class":320},[28,169720,12512],{"class":34},[28,169722,146865],{"class":5293},[28,169724,39],{"class":38},[28,169726,146870],{"class":320},[28,169728,13791],{"class":34},[28,169730,31459],{"class":38},[28,169732,148212],{"class":5293},[28,169734,3816],{"class":34},[28,169736,169737,169739,169741,169743,169745],{"class":30,"line":125},[28,169738,153096],{"class":34},[28,169740,39],{"class":38},[28,169742,148223],{"class":34},[28,169744,45430],{"class":5293},[28,169746,227],{"class":34},[28,169748,169749],{"class":30,"line":131},[28,169750,2477],{"emptyLinePlaceholder":144},[28,169752,169753,169755],{"class":30,"line":1291},[28,169754,30491],{"class":45},[28,169756,165054],{"class":34},[159,169758,169760],{"id":169759},"_811-csv文件","8.11 CSV文件",[14,169762,169763],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169765,169766],{},"写入 CSV：",[18,169768,169770],{"className":20,"code":169769,"language":22,"meta":23,"style":23},"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",[25,169771,169772,169779,169783,169791,169809,169825,169841,169845,169849,169889,169903],{"__ignoreMap":23},[28,169773,169774,169776],{"class":30,"line":31},[28,169775,30468],{"class":38},[28,169777,169778],{"class":34}," csv\n",[28,169780,169781],{"class":30,"line":94},[28,169782,2477],{"emptyLinePlaceholder":144},[28,169784,169785,169787,169789],{"class":30,"line":109},[28,169786,159775],{"class":34},[28,169788,39],{"class":38},[28,169790,55522],{"class":34},[28,169792,169793,169796,169798,169800,169802,169804,169807],{"class":30,"line":125},[28,169794,169795],{"class":34},"    [",[28,169797,73174],{"class":320},[28,169799,12512],{"class":34},[28,169801,73207],{"class":320},[28,169803,12512],{"class":34},[28,169805,169806],{"class":320},"\"成绩\"",[28,169808,87911],{"class":34},[28,169810,169811,169813,169815,169817,169819,169821,169823],{"class":30,"line":131},[28,169812,169795],{"class":34},[28,169814,149947],{"class":320},[28,169816,12512],{"class":34},[28,169818,860],{"class":45},[28,169820,12512],{"class":34},[28,169822,1193],{"class":45},[28,169824,87911],{"class":34},[28,169826,169827,169829,169831,169833,169835,169837,169839],{"class":30,"line":1291},[28,169828,169795],{"class":34},[28,169830,150995],{"class":320},[28,169832,12512],{"class":34},[28,169834,835],{"class":45},[28,169836,12512],{"class":34},[28,169838,1017],{"class":45},[28,169840,87911],{"class":34},[28,169842,169843],{"class":30,"line":1297},[28,169844,33322],{"class":34},[28,169846,169847],{"class":30,"line":1388},[28,169848,2477],{"emptyLinePlaceholder":144},[28,169850,169851,169853,169855,169857,169860,169862,169864,169866,169868,169870,169872,169874,169877,169879,169881,169883,169885,169887],{"class":30,"line":1394},[28,169852,107892],{"class":38},[28,169854,146850],{"class":45},[28,169856,221],{"class":34},[28,169858,169859],{"class":320},"\"students.csv\"",[28,169861,12512],{"class":34},[28,169863,152035],{"class":320},[28,169865,12512],{"class":34},[28,169867,146865],{"class":5293},[28,169869,39],{"class":38},[28,169871,146870],{"class":320},[28,169873,12512],{"class":34},[28,169875,169876],{"class":5293},"newline",[28,169878,39],{"class":38},[28,169880,7729],{"class":320},[28,169882,13791],{"class":34},[28,169884,31459],{"class":38},[28,169886,148212],{"class":5293},[28,169888,3816],{"class":34},[28,169890,169891,169894,169896,169899,169901],{"class":30,"line":1406},[28,169892,169893],{"class":34},"    writer ",[28,169895,39],{"class":38},[28,169897,169898],{"class":34}," csv.writer(",[28,169900,45430],{"class":5293},[28,169902,227],{"class":34},[28,169904,169905],{"class":30,"line":1689},[28,169906,169907],{"class":34},"    writer.writerows(students)\n",[14,169909,169910],{},"读取 CSV：",[18,169912,169914],{"className":20,"code":169913,"language":22,"meta":23,"style":23},"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",[25,169915,169916,169922,169926,169956,169970,169982],{"__ignoreMap":23},[28,169917,169918,169920],{"class":30,"line":31},[28,169919,30468],{"class":38},[28,169921,169778],{"class":34},[28,169923,169924],{"class":30,"line":94},[28,169925,2477],{"emptyLinePlaceholder":144},[28,169927,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946,169948,169950,169952,169954],{"class":30,"line":109},[28,169929,107892],{"class":38},[28,169931,146850],{"class":45},[28,169933,221],{"class":34},[28,169935,169859],{"class":320},[28,169937,12512],{"class":34},[28,169939,146860],{"class":320},[28,169941,12512],{"class":34},[28,169943,146865],{"class":5293},[28,169945,39],{"class":38},[28,169947,146870],{"class":320},[28,169949,13791],{"class":34},[28,169951,31459],{"class":38},[28,169953,148212],{"class":5293},[28,169955,3816],{"class":34},[28,169957,169958,169961,169963,169966,169968],{"class":30,"line":125},[28,169959,169960],{"class":34},"    reader ",[28,169962,39],{"class":38},[28,169964,169965],{"class":34}," csv.reader(",[28,169967,45430],{"class":5293},[28,169969,227],{"class":34},[28,169971,169972,169974,169977,169979],{"class":30,"line":131},[28,169973,3278],{"class":38},[28,169975,169976],{"class":34}," row ",[28,169978,26121],{"class":38},[28,169980,169981],{"class":34}," reader:\n",[28,169983,169984,169986],{"class":30,"line":1291},[28,169985,32527],{"class":45},[28,169987,169988],{"class":34},"(row)\n",[14,169990,169991],{},"使用字典写入：",[18,169993,169995],{"className":20,"code":169994,"language":22,"meta":23,"style":23},"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",[25,169996,169997,170003,170007,170015,170043,170071,170075,170079,170117,170138,170159,170164],{"__ignoreMap":23},[28,169998,169999,170001],{"class":30,"line":31},[28,170000,30468],{"class":38},[28,170002,169778],{"class":34},[28,170004,170005],{"class":30,"line":94},[28,170006,2477],{"emptyLinePlaceholder":144},[28,170008,170009,170011,170013],{"class":30,"line":109},[28,170010,159775],{"class":34},[28,170012,39],{"class":38},[28,170014,55522],{"class":34},[28,170016,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041],{"class":30,"line":125},[28,170018,148444],{"class":34},[28,170020,62754],{"class":320},[28,170022,51512],{"class":34},[28,170024,149947],{"class":320},[28,170026,12512],{"class":34},[28,170028,69199],{"class":320},[28,170030,51512],{"class":34},[28,170032,860],{"class":45},[28,170034,12512],{"class":34},[28,170036,151531],{"class":320},[28,170038,51512],{"class":34},[28,170040,1193],{"class":45},[28,170042,5007],{"class":34},[28,170044,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069],{"class":30,"line":131},[28,170046,148444],{"class":34},[28,170048,62754],{"class":320},[28,170050,51512],{"class":34},[28,170052,150995],{"class":320},[28,170054,12512],{"class":34},[28,170056,69199],{"class":320},[28,170058,51512],{"class":34},[28,170060,835],{"class":45},[28,170062,12512],{"class":34},[28,170064,151531],{"class":320},[28,170066,51512],{"class":34},[28,170068,1017],{"class":45},[28,170070,5007],{"class":34},[28,170072,170073],{"class":30,"line":1291},[28,170074,33322],{"class":34},[28,170076,170077],{"class":30,"line":1297},[28,170078,2477],{"emptyLinePlaceholder":144},[28,170080,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113,170115],{"class":30,"line":1388},[28,170082,107892],{"class":38},[28,170084,146850],{"class":45},[28,170086,221],{"class":34},[28,170088,169859],{"class":320},[28,170090,12512],{"class":34},[28,170092,152035],{"class":320},[28,170094,12512],{"class":34},[28,170096,146865],{"class":5293},[28,170098,39],{"class":38},[28,170100,146870],{"class":320},[28,170102,12512],{"class":34},[28,170104,169876],{"class":5293},[28,170106,39],{"class":38},[28,170108,7729],{"class":320},[28,170110,13791],{"class":34},[28,170112,31459],{"class":38},[28,170114,148212],{"class":5293},[28,170116,3816],{"class":34},[28,170118,170119,170122,170124,170126,170128,170130,170132,170134,170136],{"class":30,"line":1394},[28,170120,170121],{"class":34},"    fieldnames ",[28,170123,39],{"class":38},[28,170125,52301],{"class":34},[28,170127,62754],{"class":320},[28,170129,12512],{"class":34},[28,170131,69199],{"class":320},[28,170133,12512],{"class":34},[28,170135,151531],{"class":320},[28,170137,33322],{"class":34},[28,170139,170140,170142,170144,170147,170149,170151,170154,170156],{"class":30,"line":1406},[28,170141,169893],{"class":34},[28,170143,39],{"class":38},[28,170145,170146],{"class":34}," csv.DictWriter(",[28,170148,45430],{"class":5293},[28,170150,12512],{"class":34},[28,170152,170153],{"class":5293},"fieldnames",[28,170155,39],{"class":38},[28,170157,170158],{"class":34},"fieldnames)\n",[28,170160,170161],{"class":30,"line":1689},[28,170162,170163],{"class":34},"    writer.writeheader()\n",[28,170165,170166],{"class":30,"line":1694},[28,170167,169907],{"class":34},[159,170169,170171],{"id":170170},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170173,123351],{},[171,170175,170176,170179,170182],{},[174,170177,170178],{},"读取文本文件。",[174,170180,170181],{},"统计每个单词出现次数。",[174,170183,170184],{},"输出出现次数最多的前 10 个单词。",[14,170186,10112],{},[18,170188,170190],{"className":20,"code":170189,"language":22,"meta":23,"style":23},"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",[25,170191,170192,170202,170206,170219,170235,170239,170249,170258,170262,170274,170294,170303,170307,170325,170329,170359,170363,170379],{"__ignoreMap":23},[28,170193,170194,170196,170198,170200],{"class":30,"line":31},[28,170195,30813],{"class":38},[28,170197,108370],{"class":34},[28,170199,30468],{"class":38},[28,170201,108375],{"class":34},[28,170203,170204],{"class":30,"line":94},[28,170205,2477],{"emptyLinePlaceholder":144},[28,170207,170208,170210,170212,170214,170217],{"class":30,"line":109},[28,170209,168370],{"class":34},[28,170211,39],{"class":38},[28,170213,108604],{"class":34},[28,170215,170216],{"class":320},"\"article.txt\"",[28,170218,227],{"class":34},[28,170220,170221,170223,170225,170227,170229,170231,170233],{"class":30,"line":125},[28,170222,168553],{"class":34},[28,170224,39],{"class":38},[28,170226,169430],{"class":34},[28,170228,146865],{"class":5293},[28,170230,39],{"class":38},[28,170232,146870],{"class":320},[28,170234,227],{"class":34},[28,170236,170237],{"class":30,"line":131},[28,170238,2477],{"emptyLinePlaceholder":144},[28,170240,170241,170244,170246],{"class":30,"line":1291},[28,170242,170243],{"class":34},"words ",[28,170245,39],{"class":38},[28,170247,170248],{"class":34}," content.lower().split()\n",[28,170250,170251,170254,170256],{"class":30,"line":1297},[28,170252,170253],{"class":34},"counter ",[28,170255,39],{"class":38},[28,170257,87943],{"class":34},[28,170259,170260],{"class":30,"line":1388},[28,170261,2477],{"emptyLinePlaceholder":144},[28,170263,170264,170266,170269,170271],{"class":30,"line":1394},[28,170265,3102],{"class":38},[28,170267,170268],{"class":34}," word ",[28,170270,26121],{"class":38},[28,170272,170273],{"class":34}," words:\n",[28,170275,170276,170279,170281,170284,170287,170289,170292],{"class":30,"line":1406},[28,170277,170278],{"class":34},"    word ",[28,170280,39],{"class":38},[28,170282,170283],{"class":34}," word.strip(",[28,170285,170286],{"class":320},"\".,!?;:",[28,170288,156554],{"class":45},[28,170290,170291],{"class":320},"'()[]\"",[28,170293,227],{"class":34},[28,170295,170296,170298,170300],{"class":30,"line":1689},[28,170297,3178],{"class":38},[28,170299,39006],{"class":38},[28,170301,170302],{"class":34}," word:\n",[28,170304,170305],{"class":30,"line":1694},[28,170306,148571],{"class":38},[28,170308,170309,170312,170314,170317,170319,170321,170323],{"class":30,"line":1700},[28,170310,170311],{"class":34},"    counter[word] ",[28,170313,39],{"class":38},[28,170315,170316],{"class":34}," counter.get(word, ",[28,170318,407],{"class":45},[28,170320,13791],{"class":34},[28,170322,693],{"class":38},[28,170324,55774],{"class":45},[28,170326,170327],{"class":30,"line":1705},[28,170328,2477],{"emptyLinePlaceholder":144},[28,170330,170331,170334,170336,170338,170341,170343,170345,170347,170349,170351,170353,170355,170357],{"class":30,"line":1719},[28,170332,170333],{"class":34},"items ",[28,170335,39],{"class":38},[28,170337,163663],{"class":45},[28,170339,170340],{"class":34},"(counter.items(), ",[28,170342,154005],{"class":5293},[28,170344,154008],{"class":38},[28,170346,154011],{"class":34},[28,170348,46],{"class":45},[28,170350,112261],{"class":34},[28,170352,163587],{"class":5293},[28,170354,39],{"class":38},[28,170356,31552],{"class":45},[28,170358,227],{"class":34},[28,170360,170361],{"class":30,"line":1724},[28,170362,2477],{"emptyLinePlaceholder":144},[28,170364,170365,170367,170370,170372,170375,170377],{"class":30,"line":1730},[28,170366,3102],{"class":38},[28,170368,170369],{"class":34}," word, count ",[28,170371,26121],{"class":38},[28,170373,170374],{"class":34}," items[:",[28,170376,659],{"class":45},[28,170378,165814],{"class":34},[28,170380,170381,170383],{"class":30,"line":1751},[28,170382,31375],{"class":45},[28,170384,170385],{"class":34},"(word, count)\n",[159,170387,170389],{"id":170388},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[18,170391,170393],{"className":20,"code":170392,"language":22,"meta":23,"style":23},"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",[25,170394,170395,170401,170411,170415,170427,170431,170435,170443,170453,170459,170463,170493,170503,170507,170511,170519,170549,170573,170577,170581,170589,170618,170623],{"__ignoreMap":23},[28,170396,170397,170399],{"class":30,"line":31},[28,170398,30468],{"class":38},[28,170400,147150],{"class":34},[28,170402,170403,170405,170407,170409],{"class":30,"line":94},[28,170404,30813],{"class":38},[28,170406,108370],{"class":34},[28,170408,30468],{"class":38},[28,170410,108375],{"class":34},[28,170412,170413],{"class":30,"line":109},[28,170414,2477],{"emptyLinePlaceholder":144},[28,170416,170417,170419,170421,170423,170425],{"class":30,"line":125},[28,170418,151883],{"class":45},[28,170420,13641],{"class":38},[28,170422,108604],{"class":34},[28,170424,151890],{"class":320},[28,170426,227],{"class":34},[28,170428,170429],{"class":30,"line":131},[28,170430,2477],{"emptyLinePlaceholder":144},[28,170432,170433],{"class":30,"line":1291},[28,170434,2477],{"emptyLinePlaceholder":144},[28,170436,170437,170439,170441],{"class":30,"line":1297},[28,170438,32023],{"class":38},[28,170440,151907],{"class":2040},[28,170442,32029],{"class":34},[28,170444,170445,170447,170449,170451],{"class":30,"line":1388},[28,170446,3178],{"class":38},[28,170448,39006],{"class":38},[28,170450,151918],{"class":45},[28,170452,151921],{"class":34},[28,170454,170455,170457],{"class":30,"line":1394},[28,170456,14829],{"class":38},[28,170458,51913],{"class":34},[28,170460,170461],{"class":30,"line":1406},[28,170462,2477],{"emptyLinePlaceholder":144},[28,170464,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491],{"class":30,"line":1689},[28,170466,34254],{"class":38},[28,170468,146850],{"class":45},[28,170470,221],{"class":34},[28,170472,151883],{"class":45},[28,170474,12512],{"class":34},[28,170476,146860],{"class":320},[28,170478,12512],{"class":34},[28,170480,146865],{"class":5293},[28,170482,39],{"class":38},[28,170484,146870],{"class":320},[28,170486,13791],{"class":34},[28,170488,31459],{"class":38},[28,170490,148212],{"class":5293},[28,170492,3816],{"class":34},[28,170494,170495,170497,170499,170501],{"class":30,"line":1694},[28,170496,14829],{"class":38},[28,170498,148223],{"class":34},[28,170500,45430],{"class":5293},[28,170502,227],{"class":34},[28,170504,170505],{"class":30,"line":1700},[28,170506,2477],{"emptyLinePlaceholder":144},[28,170508,170509],{"class":30,"line":1705},[28,170510,2477],{"emptyLinePlaceholder":144},[28,170512,170513,170515,170517],{"class":30,"line":1719},[28,170514,32023],{"class":38},[28,170516,152017],{"class":2040},[28,170518,152020],{"class":34},[28,170520,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":30,"line":1724},[28,170522,34254],{"class":38},[28,170524,146850],{"class":45},[28,170526,221],{"class":34},[28,170528,151883],{"class":45},[28,170530,12512],{"class":34},[28,170532,152035],{"class":320},[28,170534,12512],{"class":34},[28,170536,146865],{"class":5293},[28,170538,39],{"class":38},[28,170540,146870],{"class":320},[28,170542,13791],{"class":34},[28,170544,31459],{"class":38},[28,170546,148212],{"class":5293},[28,170548,3816],{"class":34},[28,170550,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571],{"class":30,"line":1730},[28,170552,152056],{"class":34},[28,170554,45430],{"class":5293},[28,170556,12512],{"class":34},[28,170558,147196],{"class":5293},[28,170560,39],{"class":38},[28,170562,34063],{"class":45},[28,170564,12512],{"class":34},[28,170566,152071],{"class":5293},[28,170568,39],{"class":38},[28,170570,52],{"class":45},[28,170572,227],{"class":34},[28,170574,170575],{"class":30,"line":1751},[28,170576,2477],{"emptyLinePlaceholder":144},[28,170578,170579],{"class":30,"line":1756},[28,170580,2477],{"emptyLinePlaceholder":144},[28,170582,170583,170585,170587],{"class":30,"line":1770},[28,170584,159775],{"class":34},[28,170586,39],{"class":38},[28,170588,153101],{"class":34},[28,170590,170591,170594,170596,170598,170600,170602,170604,170606,170608,170610,170612,170614,170616],{"class":30,"line":1775},[28,170592,170593],{"class":34},"students.append({",[28,170595,62754],{"class":320},[28,170597,51512],{"class":34},[28,170599,149947],{"class":320},[28,170601,12512],{"class":34},[28,170603,69199],{"class":320},[28,170605,51512],{"class":34},[28,170607,860],{"class":45},[28,170609,12512],{"class":34},[28,170611,151531],{"class":320},[28,170613,51512],{"class":34},[28,170615,1193],{"class":45},[28,170617,165211],{"class":34},[28,170619,170620],{"class":30,"line":1804},[28,170621,170622],{"class":34},"save_students(students)\n",[28,170624,170625,170627,170629,170632],{"class":30,"line":1809},[28,170626,30491],{"class":45},[28,170628,221],{"class":34},[28,170630,170631],{"class":320},"\"保存成功\"",[28,170633,227],{"class":34},[159,170635,170637],{"id":170636},"_814-易错点","8.14 易错点",[171,170639,170640,170644,170650,170655,170662,170669],{},[174,170641,170642,168903],{},[25,170643,1001],{},[174,170645,170646,170647,28463],{},"读写中文要指定 ",[25,170648,170649],{},"encoding=\"utf-8\"",[174,170651,170652,170653,28463],{},"打开文件后要关闭，推荐使用 ",[25,170654,107892],{},[174,170656,170657,170658,170661],{},"读取大文件不要直接 ",[25,170659,170660],{},"read()"," 全部内容。",[174,170663,170664,170665,170668],{},"Windows 写 CSV 时建议加 ",[25,170666,170667],{},"newline=\"\"","，避免空行。",[174,170670,170671],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[159,170673,170675],{"id":170674},"_815-本章练习","8.15 本章练习",[171,170677,170678,170685,170690,170693,170696],{},[174,170679,170680,170681,170684],{},"写入一个 ",[25,170682,170683],{},"students.txt","，每行保存一个学生姓名。",[174,170686,104414,170687,170689],{},[25,170688,170683],{}," 并输出所有学生。",[174,170691,170692],{},"把学生列表保存为 JSON 文件。",[174,170694,170695],{},"从 JSON 文件读取学生数据，计算平均分。",[174,170697,170698,170699,170702,170703,170706],{},"写一个日志函数 ",[25,170700,170701],{},"write_log(message)","，每次调用向 ",[25,170704,170705],{},"app.log"," 追加一行。",[136,170708,170709],{},"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":23,"searchDepth":94,"depth":94,"links":170711},[170712,170713,170717,170718,170724,170725,170726,170727,170728,170729,170730,170731,170732,170733,170734],{"id":168223,"depth":94,"text":168224},{"id":168264,"depth":94,"text":168265,"children":170714},[170715,170716],{"id":168268,"depth":109,"text":168269},{"id":168302,"depth":109,"text":168303},{"id":168416,"depth":94,"text":168417},{"id":168509,"depth":94,"text":168510,"children":170719},[170720,170721,170722,170723],{"id":168513,"depth":109,"text":168514},{"id":168600,"depth":109,"text":168601},{"id":168670,"depth":109,"text":168671},{"id":168764,"depth":109,"text":168765},{"id":168834,"depth":94,"text":168835},{"id":168897,"depth":94,"text":168898},{"id":169058,"depth":94,"text":169059},{"id":169121,"depth":94,"text":169122},{"id":169237,"depth":94,"text":169238},{"id":169447,"depth":94,"text":169448},{"id":169759,"depth":94,"text":169760},{"id":170170,"depth":94,"text":170171},{"id":170388,"depth":94,"text":170389},{"id":170636,"depth":94,"text":170637},{"id":170674,"depth":94,"text":170675},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168215,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170741,"title":170742,"body":170743,"description":141,"extension":142,"meta":172929,"navigation":144,"path":172930,"seo":172931,"stem":172932,"__hash__":172933},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170744,"toc":172896},[170745,170748,170752,170755,170758,170850,170852,170871,170876,170880,170883,170886,170915,170922,170925,170929,170932,170961,170963,171015,171021,171074,171078,171176,171179,171246,171250,171307,171309,171315,171319,171324,171330,171421,171426,171430,171433,171511,171514,171552,171556,171674,171677,171681,171684,171729,171732,171736,171741,171747,171797,171800,171831,171835,171839,171869,171873,171908,171912,171947,171987,171991,172007,172010,172014,172018,172097,172101,172142,172146,172201,172205,172239,172243,172273,172282,172289,172295,172352,172355,172363,172366,172370,172377,172380,172386,172389,172406,172411,172415,172421,172434,172437,172474,172477,172488,172491,172505,172508,172522,172526,172533,172566,172569,172571,172577,172580,172584,172586,172592,172597,172770,172774,172837,172841,172865,172869,172893],[10,170746,170742],{"id":170747},"_9-异常模块与包",[159,170749,170751],{"id":170750},"_91-什么是异常","9.1 什么是异常",[14,170753,170754],{},"异常是程序运行过程中出现的错误。",[14,170756,170757],{},"常见异常：",[353,170759,170760,170769],{},[356,170761,170762],{},[359,170763,170764,170767],{},[362,170765,170766],{},"异常",[362,170768,25947],{},[400,170770,170771,170781,170791,170800,170810,170820,170830,170840],{},[359,170772,170773,170778],{},[405,170774,170775],{},[25,170776,170777],{},"NameError",[405,170779,170780],{},"使用了未定义变量",[359,170782,170783,170788],{},[405,170784,170785],{},[25,170786,170787],{},"TypeError",[405,170789,170790],{},"类型不匹配",[359,170792,170793,170797],{},[405,170794,170795],{},[25,170796,154893],{},[405,170798,170799],{},"值不合法",[359,170801,170802,170807],{},[405,170803,170804],{},[25,170805,170806],{},"IndexError",[405,170808,170809],{},"列表索引越界",[359,170811,170812,170817],{},[405,170813,170814],{},[25,170815,170816],{},"KeyError",[405,170818,170819],{},"字典 key 不存在",[359,170821,170822,170827],{},[405,170823,170824],{},[25,170825,170826],{},"FileNotFoundError",[405,170828,170829],{},"文件不存在",[359,170831,170832,170837],{},[405,170833,170834],{},[25,170835,170836],{},"ZeroDivisionError",[405,170838,170839],{},"除数为 0",[359,170841,170842,170847],{},[405,170843,170844],{},[25,170845,170846],{},"ImportError",[405,170848,170849],{},"导入失败",[14,170851,15212],{},[18,170853,170855],{"className":20,"code":170854,"language":22,"meta":23,"style":23},"num = int(\"abc\")\n",[25,170856,170857],{"__ignoreMap":23},[28,170858,170859,170861,170863,170865,170867,170869],{"class":30,"line":31},[28,170860,155846],{"class":34},[28,170862,39],{"class":38},[28,170864,2459],{"class":45},[28,170866,221],{"class":34},[28,170868,155939],{"class":320},[28,170870,227],{"class":34},[14,170872,170873,170874,28463],{},"会触发 ",[25,170875,154893],{},[159,170877,170879],{"id":170878},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170881,170882],{},"如果不处理异常，程序会直接终止。",[14,170884,170885],{},"例如用户输入年龄：",[18,170887,170889],{"className":20,"code":170888,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[25,170890,170891,170909],{"__ignoreMap":23},[28,170892,170893,170895,170897,170899,170901,170903,170905,170907],{"class":30,"line":31},[28,170894,146605],{"class":34},[28,170896,39],{"class":38},[28,170898,2459],{"class":45},[28,170900,221],{"class":34},[28,170902,53896],{"class":45},[28,170904,221],{"class":34},[28,170906,152453],{"class":320},[28,170908,30573],{"class":34},[28,170910,170911,170913],{"class":30,"line":94},[28,170912,30491],{"class":45},[28,170914,155820],{"class":34},[14,170916,170917,170918,170921],{},"用户输入 ",[25,170919,170920],{},"abc","，程序就会报错退出。",[14,170923,170924],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[159,170926,170928],{"id":170927},"_93-try-except","9.3 try except",[14,170930,170931],{},"基础语法：",[18,170933,170935],{"className":20,"code":170934,"language":22,"meta":23,"style":23},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[25,170936,170937,170944,170949,170956],{"__ignoreMap":23},[28,170938,170939,170942],{"class":30,"line":31},[28,170940,170941],{"class":38},"try",[28,170943,3816],{"class":34},[28,170945,170946],{"class":30,"line":94},[28,170947,170948],{"class":34},"    可能出错的代码\n",[28,170950,170951,170954],{"class":30,"line":109},[28,170952,170953],{"class":38},"except",[28,170955,3816],{"class":34},[28,170957,170958],{"class":30,"line":125},[28,170959,170960],{"class":34},"    出错后的处理代码\n",[14,170962,15212],{},[18,170964,170966],{"className":20,"code":170965,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[25,170967,170968,170974,170992,170998,171004],{"__ignoreMap":23},[28,170969,170970,170972],{"class":30,"line":31},[28,170971,170941],{"class":38},[28,170973,3816],{"class":34},[28,170975,170976,170978,170980,170982,170984,170986,170988,170990],{"class":30,"line":94},[28,170977,152445],{"class":34},[28,170979,39],{"class":38},[28,170981,2459],{"class":45},[28,170983,221],{"class":34},[28,170985,53896],{"class":45},[28,170987,221],{"class":34},[28,170989,152453],{"class":320},[28,170991,30573],{"class":34},[28,170993,170994,170996],{"class":30,"line":109},[28,170995,31375],{"class":45},[28,170997,155820],{"class":34},[28,170999,171000,171002],{"class":30,"line":125},[28,171001,170953],{"class":38},[28,171003,3816],{"class":34},[28,171005,171006,171008,171010,171013],{"class":30,"line":131},[28,171007,31375],{"class":45},[28,171009,221],{"class":34},[28,171011,171012],{"class":320},"\"年龄必须是数字\"",[28,171014,227],{"class":34},[14,171016,171017,171018,171020],{},"不建议裸写 ",[25,171019,170953],{},"，最好指定异常类型。",[18,171022,171024],{"className":20,"code":171023,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[25,171025,171026,171032,171050,171056,171064],{"__ignoreMap":23},[28,171027,171028,171030],{"class":30,"line":31},[28,171029,170941],{"class":38},[28,171031,3816],{"class":34},[28,171033,171034,171036,171038,171040,171042,171044,171046,171048],{"class":30,"line":94},[28,171035,152445],{"class":34},[28,171037,39],{"class":38},[28,171039,2459],{"class":45},[28,171041,221],{"class":34},[28,171043,53896],{"class":45},[28,171045,221],{"class":34},[28,171047,152453],{"class":320},[28,171049,30573],{"class":34},[28,171051,171052,171054],{"class":30,"line":109},[28,171053,31375],{"class":45},[28,171055,155820],{"class":34},[28,171057,171058,171060,171062],{"class":30,"line":125},[28,171059,170953],{"class":38},[28,171061,152285],{"class":45},[28,171063,3816],{"class":34},[28,171065,171066,171068,171070,171072],{"class":30,"line":131},[28,171067,31375],{"class":45},[28,171069,221],{"class":34},[28,171071,171012],{"class":320},[28,171073,227],{"class":34},[159,171075,171077],{"id":171076},"_94-捕获多个异常","9.4 捕获多个异常",[18,171079,171081],{"className":20,"code":171080,"language":22,"meta":23,"style":23},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[25,171082,171083,171089,171110,171130,171137,171145,171156,171165],{"__ignoreMap":23},[28,171084,171085,171087],{"class":30,"line":31},[28,171086,170941],{"class":38},[28,171088,3816],{"class":34},[28,171090,171091,171094,171096,171098,171100,171102,171104,171106,171108],{"class":30,"line":94},[28,171092,171093],{"class":34},"    nums ",[28,171095,39],{"class":38},[28,171097,52301],{"class":34},[28,171099,46],{"class":45},[28,171101,12512],{"class":34},[28,171103,52],{"class":45},[28,171105,12512],{"class":34},[28,171107,57],{"class":45},[28,171109,33322],{"class":34},[28,171111,171112,171115,171117,171119,171121,171123,171125,171128],{"class":30,"line":109},[28,171113,171114],{"class":34},"    index ",[28,171116,39],{"class":38},[28,171118,2459],{"class":45},[28,171120,221],{"class":34},[28,171122,53896],{"class":45},[28,171124,221],{"class":34},[28,171126,171127],{"class":320},"\"请输入索引:\"",[28,171129,30573],{"class":34},[28,171131,171132,171134],{"class":30,"line":125},[28,171133,31375],{"class":45},[28,171135,171136],{"class":34},"(nums[index])\n",[28,171138,171139,171141,171143],{"class":30,"line":131},[28,171140,170953],{"class":38},[28,171142,152285],{"class":45},[28,171144,3816],{"class":34},[28,171146,171147,171149,171151,171154],{"class":30,"line":1291},[28,171148,31375],{"class":45},[28,171150,221],{"class":34},[28,171152,171153],{"class":320},"\"索引必须是整数\"",[28,171155,227],{"class":34},[28,171157,171158,171160,171163],{"class":30,"line":1297},[28,171159,170953],{"class":38},[28,171161,171162],{"class":45}," IndexError",[28,171164,3816],{"class":34},[28,171166,171167,171169,171171,171174],{"class":30,"line":1388},[28,171168,31375],{"class":45},[28,171170,221],{"class":34},[28,171172,171173],{"class":320},"\"索引越界\"",[28,171175,227],{"class":34},[14,171177,171178],{},"多个异常使用相同处理逻辑：",[18,171180,171182],{"className":20,"code":171181,"language":22,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[25,171183,171184,171190,171208,171221,171235],{"__ignoreMap":23},[28,171185,171186,171188],{"class":30,"line":31},[28,171187,170941],{"class":38},[28,171189,3816],{"class":34},[28,171191,171192,171194,171196,171198,171200,171202,171204,171206],{"class":30,"line":94},[28,171193,45669],{"class":34},[28,171195,39],{"class":38},[28,171197,2459],{"class":45},[28,171199,221],{"class":34},[28,171201,53896],{"class":45},[28,171203,221],{"class":34},[28,171205,155855],{"class":320},[28,171207,30573],{"class":34},[28,171209,171210,171212,171214,171216,171218],{"class":30,"line":109},[28,171211,31375],{"class":45},[28,171213,221],{"class":34},[28,171215,659],{"class":45},[28,171217,156105],{"class":38},[28,171219,171220],{"class":34}," num)\n",[28,171222,171223,171225,171227,171229,171231,171233],{"class":30,"line":125},[28,171224,170953],{"class":38},[28,171226,1735],{"class":34},[28,171228,154893],{"class":45},[28,171230,12512],{"class":34},[28,171232,170836],{"class":45},[28,171234,30862],{"class":34},[28,171236,171237,171239,171241,171244],{"class":30,"line":131},[28,171238,31375],{"class":45},[28,171240,221],{"class":34},[28,171242,171243],{"class":320},"\"输入不合法\"",[28,171245,227],{"class":34},[159,171247,171249],{"id":171248},"_95-获取异常信息","9.5 获取异常信息",[18,171251,171253],{"className":20,"code":171252,"language":22,"meta":23,"style":23},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[25,171254,171255,171261,171275,171286],{"__ignoreMap":23},[28,171256,171257,171259],{"class":30,"line":31},[28,171258,170941],{"class":38},[28,171260,3816],{"class":34},[28,171262,171263,171265,171267,171269,171271,171273],{"class":30,"line":94},[28,171264,45669],{"class":34},[28,171266,39],{"class":38},[28,171268,2459],{"class":45},[28,171270,221],{"class":34},[28,171272,155939],{"class":320},[28,171274,227],{"class":34},[28,171276,171277,171279,171281,171283],{"class":30,"line":109},[28,171278,170953],{"class":38},[28,171280,152285],{"class":45},[28,171282,64679],{"class":38},[28,171284,171285],{"class":34}," e:\n",[28,171287,171288,171290,171292,171294,171297,171299,171301,171303,171305],{"class":30,"line":125},[28,171289,31375],{"class":45},[28,171291,221],{"class":34},[28,171293,271],{"class":38},[28,171295,171296],{"class":320},"\"出错了:",[28,171298,1102],{"class":45},[28,171300,291],{"class":34},[28,171302,1150],{"class":45},[28,171304,465],{"class":320},[28,171306,227],{"class":34},[14,171308,146516],{},[18,171310,171313],{"className":171311,"code":171312,"language":5264,"meta":23},[5262],"出错了:invalid literal for int() with base 10: 'abc'\n",[25,171314,171312],{"__ignoreMap":23},[159,171316,171318],{"id":171317},"_96-else和finally","9.6 else和finally",[14,171320,171321,171323],{},[25,171322,1778],{},"：没有异常时执行。",[14,171325,171326,171329],{},[25,171327,171328],{},"finally","：无论是否异常都会执行。",[18,171331,171333],{"className":20,"code":171332,"language":22,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[25,171334,171335,171341,171359,171367,171377,171383,171404,171410],{"__ignoreMap":23},[28,171336,171337,171339],{"class":30,"line":31},[28,171338,170941],{"class":38},[28,171340,3816],{"class":34},[28,171342,171343,171345,171347,171349,171351,171353,171355,171357],{"class":30,"line":94},[28,171344,45669],{"class":34},[28,171346,39],{"class":38},[28,171348,2459],{"class":45},[28,171350,221],{"class":34},[28,171352,53896],{"class":45},[28,171354,221],{"class":34},[28,171356,155855],{"class":320},[28,171358,30573],{"class":34},[28,171360,171361,171363,171365],{"class":30,"line":109},[28,171362,170953],{"class":38},[28,171364,152285],{"class":45},[28,171366,3816],{"class":34},[28,171368,171369,171371,171373,171375],{"class":30,"line":125},[28,171370,31375],{"class":45},[28,171372,221],{"class":34},[28,171374,153273],{"class":320},[28,171376,227],{"class":34},[28,171378,171379,171381],{"class":30,"line":131},[28,171380,1778],{"class":38},[28,171382,3816],{"class":34},[28,171384,171385,171387,171389,171391,171394,171396,171398,171400,171402],{"class":30,"line":1291},[28,171386,31375],{"class":45},[28,171388,221],{"class":34},[28,171390,271],{"class":38},[28,171392,171393],{"class":320},"\"输入正确:",[28,171395,1102],{"class":45},[28,171397,1742],{"class":34},[28,171399,1150],{"class":45},[28,171401,465],{"class":320},[28,171403,227],{"class":34},[28,171405,171406,171408],{"class":30,"line":1297},[28,171407,171328],{"class":38},[28,171409,3816],{"class":34},[28,171411,171412,171414,171416,171419],{"class":30,"line":1388},[28,171413,31375],{"class":45},[28,171415,221],{"class":34},[28,171417,171418],{"class":320},"\"程序结束\"",[28,171420,227],{"class":34},[14,171422,171423,171425],{},[25,171424,171328],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[159,171427,171429],{"id":171428},"_97-抛出异常","9.7 抛出异常",[14,171431,171432],{},"程序可以主动抛出异常。",[18,171434,171436],{"className":20,"code":171435,"language":22,"meta":23,"style":23},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[25,171437,171438,171447,171459,171472,171492,171496,171500],{"__ignoreMap":23},[28,171439,171440,171442,171445],{"class":30,"line":31},[28,171441,32023],{"class":38},[28,171443,171444],{"class":2040}," set_age",[28,171446,161474],{"class":34},[28,171448,171449,171451,171453,171455,171457],{"class":30,"line":94},[28,171450,3178],{"class":38},[28,171452,15784],{"class":34},[28,171454,99],{"class":38},[28,171456,4170],{"class":45},[28,171458,3816],{"class":34},[28,171460,171461,171463,171465,171467,171470],{"class":30,"line":109},[28,171462,103491],{"class":38},[28,171464,152285],{"class":45},[28,171466,221],{"class":34},[28,171468,171469],{"class":320},"\"年龄不能为负数\"",[28,171471,227],{"class":34},[28,171473,171474,171476,171478,171480,171482,171484,171486,171488,171490],{"class":30,"line":125},[28,171475,31375],{"class":45},[28,171477,221],{"class":34},[28,171479,271],{"class":38},[28,171481,162042],{"class":320},[28,171483,1102],{"class":45},[28,171485,70296],{"class":34},[28,171487,1150],{"class":45},[28,171489,465],{"class":320},[28,171491,227],{"class":34},[28,171493,171494],{"class":30,"line":131},[28,171495,2477],{"emptyLinePlaceholder":144},[28,171497,171498],{"class":30,"line":1291},[28,171499,2477],{"emptyLinePlaceholder":144},[28,171501,171502,171505,171507,171509],{"class":30,"line":1297},[28,171503,171504],{"class":34},"set_age(",[28,171506,742],{"class":38},[28,171508,46],{"class":45},[28,171510,227],{"class":34},[14,171512,171513],{},"调用者可以捕获：",[18,171515,171517],{"className":20,"code":171516,"language":22,"meta":23,"style":23},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[25,171518,171519,171525,171536,171546],{"__ignoreMap":23},[28,171520,171521,171523],{"class":30,"line":31},[28,171522,170941],{"class":38},[28,171524,3816],{"class":34},[28,171526,171527,171530,171532,171534],{"class":30,"line":94},[28,171528,171529],{"class":34},"    set_age(",[28,171531,742],{"class":38},[28,171533,46],{"class":45},[28,171535,227],{"class":34},[28,171537,171538,171540,171542,171544],{"class":30,"line":109},[28,171539,170953],{"class":38},[28,171541,152285],{"class":45},[28,171543,64679],{"class":38},[28,171545,171285],{"class":34},[28,171547,171548,171550],{"class":30,"line":125},[28,171549,31375],{"class":45},[28,171551,67074],{"class":34},[159,171553,171555],{"id":171554},"_98-自定义异常","9.8 自定义异常",[18,171557,171559],{"className":20,"code":171558,"language":22,"meta":23,"style":23},"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",[25,171560,171561,171575,171579,171583,171587,171595,171605,171616,171626,171630,171634,171640,171657,171668],{"__ignoreMap":23},[28,171562,171563,171565,171568,171570,171573],{"class":30,"line":31},[28,171564,14771],{"class":38},[28,171566,171567],{"class":2040}," BalanceNotEnoughError",[28,171569,221],{"class":34},[28,171571,171572],{"class":45},"Exception",[28,171574,30862],{"class":34},[28,171576,171577],{"class":30,"line":94},[28,171578,149596],{"class":38},[28,171580,171581],{"class":30,"line":109},[28,171582,2477],{"emptyLinePlaceholder":144},[28,171584,171585],{"class":30,"line":125},[28,171586,2477],{"emptyLinePlaceholder":144},[28,171588,171589,171591,171593],{"class":30,"line":131},[28,171590,32023],{"class":38},[28,171592,150245],{"class":2040},[28,171594,162871],{"class":34},[28,171596,171597,171599,171601,171603],{"class":30,"line":1291},[28,171598,3178],{"class":38},[28,171600,150201],{"class":34},[28,171602,1164],{"class":38},[28,171604,162648],{"class":34},[28,171606,171607,171609,171612,171614],{"class":30,"line":1297},[28,171608,103491],{"class":38},[28,171610,171611],{"class":34}," BalanceNotEnoughError(",[28,171613,150296],{"class":320},[28,171615,227],{"class":34},[28,171617,171618,171620,171622,171624],{"class":30,"line":1388},[28,171619,4167],{"class":38},[28,171621,162878],{"class":34},[28,171623,742],{"class":38},[28,171625,150234],{"class":34},[28,171627,171628],{"class":30,"line":1394},[28,171629,2477],{"emptyLinePlaceholder":144},[28,171631,171632],{"class":30,"line":1406},[28,171633,2477],{"emptyLinePlaceholder":144},[28,171635,171636,171638],{"class":30,"line":1689},[28,171637,170941],{"class":38},[28,171639,3816],{"class":34},[28,171641,171642,171644,171646,171649,171651,171653,171655],{"class":30,"line":1694},[28,171643,162549],{"class":34},[28,171645,39],{"class":38},[28,171647,171648],{"class":34}," withdraw(",[28,171650,525],{"class":45},[28,171652,12512],{"class":34},[28,171654,1799],{"class":45},[28,171656,227],{"class":34},[28,171658,171659,171661,171664,171666],{"class":30,"line":1700},[28,171660,170953],{"class":38},[28,171662,171663],{"class":34}," BalanceNotEnoughError ",[28,171665,31459],{"class":38},[28,171667,171285],{"class":34},[28,171669,171670,171672],{"class":30,"line":1705},[28,171671,31375],{"class":45},[28,171673,67074],{"class":34},[14,171675,171676],{},"入门阶段大多数情况使用内置异常即可。",[159,171678,171680],{"id":171679},"_99-traceback","9.9 traceback",[14,171682,171683],{},"调试时可以输出完整异常堆栈。",[18,171685,171687],{"className":20,"code":171686,"language":22,"meta":23,"style":23},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[25,171688,171689,171696,171700,171706,171716,171724],{"__ignoreMap":23},[28,171690,171691,171693],{"class":30,"line":31},[28,171692,30468],{"class":38},[28,171694,171695],{"class":34}," traceback\n",[28,171697,171698],{"class":30,"line":94},[28,171699,2477],{"emptyLinePlaceholder":144},[28,171701,171702,171704],{"class":30,"line":109},[28,171703,170941],{"class":38},[28,171705,3816],{"class":34},[28,171707,171708,171710,171712,171714],{"class":30,"line":125},[28,171709,2062],{"class":45},[28,171711,221],{"class":34},[28,171713,155939],{"class":320},[28,171715,227],{"class":34},[28,171717,171718,171720,171722],{"class":30,"line":131},[28,171719,170953],{"class":38},[28,171721,152285],{"class":45},[28,171723,3816],{"class":34},[28,171725,171726],{"class":30,"line":1291},[28,171727,171728],{"class":34},"    traceback.print_exc()\n",[14,171730,171731],{},"日志系统中常把异常堆栈记录到文件。",[159,171733,171735],{"id":171734},"_910-什么是模块","9.10 什么是模块",[14,171737,171738,171739,126042],{},"模块就是一个 ",[25,171740,146411],{},[14,171742,171743,171744,24696],{},"例如创建 ",[25,171745,171746],{},"my_math.py",[18,171748,171750],{"className":20,"code":171749,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[25,171751,171752,171760,171770,171774,171778,171787],{"__ignoreMap":23},[28,171753,171754,171756,171758],{"class":30,"line":31},[28,171755,32023],{"class":38},[28,171757,5286],{"class":2040},[28,171759,151152],{"class":34},[28,171761,171762,171764,171766,171768],{"class":30,"line":94},[28,171763,4167],{"class":38},[28,171765,10946],{"class":34},[28,171767,693],{"class":38},[28,171769,151163],{"class":34},[28,171771,171772],{"class":30,"line":109},[28,171773,2477],{"emptyLinePlaceholder":144},[28,171775,171776],{"class":30,"line":125},[28,171777,2477],{"emptyLinePlaceholder":144},[28,171779,171780,171782,171785],{"class":30,"line":131},[28,171781,32023],{"class":38},[28,171783,171784],{"class":2040}," sub",[28,171786,151152],{"class":34},[28,171788,171789,171791,171793,171795],{"class":30,"line":1291},[28,171790,4167],{"class":38},[28,171792,10946],{"class":34},[28,171794,742],{"class":38},[28,171796,151163],{"class":34},[14,171798,171799],{},"在另一个文件中导入：",[18,171801,171803],{"className":20,"code":171802,"language":22,"meta":23,"style":23},"import my_math\n\nprint(my_math.add(1, 2))\n",[25,171804,171805,171812,171816],{"__ignoreMap":23},[28,171806,171807,171809],{"class":30,"line":31},[28,171808,30468],{"class":38},[28,171810,171811],{"class":34}," my_math\n",[28,171813,171814],{"class":30,"line":94},[28,171815,2477],{"emptyLinePlaceholder":144},[28,171817,171818,171820,171823,171825,171827,171829],{"class":30,"line":109},[28,171819,30491],{"class":45},[28,171821,171822],{"class":34},"(my_math.add(",[28,171824,46],{"class":45},[28,171826,12512],{"class":34},[28,171828,52],{"class":45},[28,171830,30573],{"class":34},[159,171832,171834],{"id":171833},"_911-import导入","9.11 import导入",[188,171836,171838],{"id":171837},"_9111-导入模块","9.11.1 导入模块",[18,171840,171842],{"className":20,"code":171841,"language":22,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\n",[25,171843,171844,171850,171854],{"__ignoreMap":23},[28,171845,171846,171848],{"class":30,"line":31},[28,171847,30468],{"class":38},[28,171849,45404],{"class":34},[28,171851,171852],{"class":30,"line":94},[28,171853,2477],{"emptyLinePlaceholder":144},[28,171855,171856,171858,171861,171863,171865,171867],{"class":30,"line":109},[28,171857,30491],{"class":45},[28,171859,171860],{"class":34},"(random.randint(",[28,171862,46],{"class":45},[28,171864,12512],{"class":34},[28,171866,659],{"class":45},[28,171868,30573],{"class":34},[188,171870,171872],{"id":171871},"_9112-导入指定内容","9.11.2 导入指定内容",[18,171874,171876],{"className":20,"code":171875,"language":22,"meta":23,"style":23},"from random import randint\n\nprint(randint(1, 10))\n",[25,171877,171878,171889,171893],{"__ignoreMap":23},[28,171879,171880,171882,171884,171886],{"class":30,"line":31},[28,171881,30813],{"class":38},[28,171883,57871],{"class":34},[28,171885,30468],{"class":38},[28,171887,171888],{"class":34}," randint\n",[28,171890,171891],{"class":30,"line":94},[28,171892,2477],{"emptyLinePlaceholder":144},[28,171894,171895,171897,171900,171902,171904,171906],{"class":30,"line":109},[28,171896,30491],{"class":45},[28,171898,171899],{"class":34},"(randint(",[28,171901,46],{"class":45},[28,171903,12512],{"class":34},[28,171905,659],{"class":45},[28,171907,30573],{"class":34},[188,171909,171911],{"id":171910},"_9113-起别名","9.11.3 起别名",[18,171913,171915],{"className":20,"code":171914,"language":22,"meta":23,"style":23},"import random as rd\n\nprint(rd.randint(1, 10))\n",[25,171916,171917,171928,171932],{"__ignoreMap":23},[28,171918,171919,171921,171923,171925],{"class":30,"line":31},[28,171920,30468],{"class":38},[28,171922,57871],{"class":34},[28,171924,31459],{"class":38},[28,171926,171927],{"class":34}," rd\n",[28,171929,171930],{"class":30,"line":94},[28,171931,2477],{"emptyLinePlaceholder":144},[28,171933,171934,171936,171939,171941,171943,171945],{"class":30,"line":109},[28,171935,30491],{"class":45},[28,171937,171938],{"class":34},"(rd.randint(",[28,171940,46],{"class":45},[28,171942,12512],{"class":34},[28,171944,659],{"class":45},[28,171946,30573],{"class":34},[18,171948,171950],{"className":20,"code":171949,"language":22,"meta":23,"style":23},"from random import randint as rint\n\nprint(rint(1, 10))\n",[25,171951,171952,171968,171972],{"__ignoreMap":23},[28,171953,171954,171956,171958,171960,171963,171965],{"class":30,"line":31},[28,171955,30813],{"class":38},[28,171957,57871],{"class":34},[28,171959,30468],{"class":38},[28,171961,171962],{"class":34}," randint ",[28,171964,31459],{"class":38},[28,171966,171967],{"class":34}," rint\n",[28,171969,171970],{"class":30,"line":94},[28,171971,2477],{"emptyLinePlaceholder":144},[28,171973,171974,171976,171979,171981,171983,171985],{"class":30,"line":109},[28,171975,30491],{"class":45},[28,171977,171978],{"class":34},"(rint(",[28,171980,46],{"class":45},[28,171982,12512],{"class":34},[28,171984,659],{"class":45},[28,171986,30573],{"class":34},[188,171988,171990],{"id":171989},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[18,171992,171994],{"className":20,"code":171993,"language":22,"meta":23,"style":23},"from random import *\n",[25,171995,171996],{"__ignoreMap":23},[28,171997,171998,172000,172002,172004],{"class":30,"line":31},[28,171999,30813],{"class":38},[28,172001,57871],{"class":34},[28,172003,30468],{"class":38},[28,172005,172006],{"class":38}," *\n",[14,172008,172009],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[159,172011,172013],{"id":172012},"_912-常用内置模块","9.12 常用内置模块",[188,172015,172017],{"id":172016},"_9121-random","9.12.1 random",[18,172019,172021],{"className":20,"code":172020,"language":22,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[25,172022,172023,172029,172033,172047,172066],{"__ignoreMap":23},[28,172024,172025,172027],{"class":30,"line":31},[28,172026,30468],{"class":38},[28,172028,45404],{"class":34},[28,172030,172031],{"class":30,"line":94},[28,172032,2477],{"emptyLinePlaceholder":144},[28,172034,172035,172037,172039,172041,172043,172045],{"class":30,"line":109},[28,172036,30491],{"class":45},[28,172038,171860],{"class":34},[28,172040,46],{"class":45},[28,172042,12512],{"class":34},[28,172044,659],{"class":45},[28,172046,30573],{"class":34},[28,172048,172049,172051,172054,172056,172058,172060,172062,172064],{"class":30,"line":125},[28,172050,30491],{"class":45},[28,172052,172053],{"class":34},"(random.choice([",[28,172055,149947],{"class":320},[28,172057,12512],{"class":34},[28,172059,150995],{"class":320},[28,172061,12512],{"class":34},[28,172063,159790],{"class":320},[28,172065,33219],{"class":34},[28,172067,172068,172070,172073,172075,172077,172079,172081,172083,172085,172087,172089,172091,172093,172095],{"class":30,"line":131},[28,172069,30491],{"class":45},[28,172071,172072],{"class":34},"(random.sample([",[28,172074,46],{"class":45},[28,172076,12512],{"class":34},[28,172078,52],{"class":45},[28,172080,12512],{"class":34},[28,172082,57],{"class":45},[28,172084,12512],{"class":34},[28,172086,507],{"class":45},[28,172088,12512],{"class":34},[28,172090,533],{"class":45},[28,172092,112261],{"class":34},[28,172094,52],{"class":45},[28,172096,30573],{"class":34},[188,172098,172100],{"id":172099},"_9122-time","9.12.2 time",[18,172102,172104],{"className":20,"code":172103,"language":22,"meta":23,"style":23},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[25,172105,172106,172112,172116,172123,172131],{"__ignoreMap":23},[28,172107,172108,172110],{"class":30,"line":31},[28,172109,30468],{"class":38},[28,172111,31905],{"class":34},[28,172113,172114],{"class":30,"line":94},[28,172115,2477],{"emptyLinePlaceholder":144},[28,172117,172118,172120],{"class":30,"line":109},[28,172119,30491],{"class":45},[28,172121,172122],{"class":34},"(time.time())\n",[28,172124,172125,172127,172129],{"class":30,"line":125},[28,172126,95130],{"class":34},[28,172128,46],{"class":45},[28,172130,227],{"class":34},[28,172132,172133,172135,172137,172140],{"class":30,"line":131},[28,172134,30491],{"class":45},[28,172136,221],{"class":34},[28,172138,172139],{"class":320},"\"1秒后执行\"",[28,172141,227],{"class":34},[188,172143,172145],{"id":172144},"_9123-datetime","9.12.3 datetime",[18,172147,172149],{"className":20,"code":172148,"language":22,"meta":23,"style":23},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[25,172150,172151,172163,172167,172177,172184],{"__ignoreMap":23},[28,172152,172153,172155,172158,172160],{"class":30,"line":31},[28,172154,30813],{"class":38},[28,172156,172157],{"class":34}," datetime ",[28,172159,30468],{"class":38},[28,172161,172162],{"class":34}," datetime\n",[28,172164,172165],{"class":30,"line":94},[28,172166,2477],{"emptyLinePlaceholder":144},[28,172168,172169,172172,172174],{"class":30,"line":109},[28,172170,172171],{"class":34},"now ",[28,172173,39],{"class":38},[28,172175,172176],{"class":34}," datetime.now()\n",[28,172178,172179,172181],{"class":30,"line":125},[28,172180,30491],{"class":45},[28,172182,172183],{"class":34},"(now)\n",[28,172185,172186,172188,172191,172194,172196,172199],{"class":30,"line":131},[28,172187,30491],{"class":45},[28,172189,172190],{"class":34},"(now.strftime(",[28,172192,172193],{"class":320},"\"%Y-%m-",[28,172195,156750],{"class":45},[28,172197,172198],{"class":320}," %H:%M:%S\"",[28,172200,30573],{"class":34},[188,172202,172204],{"id":172203},"_9124-os","9.12.4 os",[18,172206,172208],{"className":20,"code":172207,"language":22,"meta":23,"style":23},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[25,172209,172210,172216,172220,172227],{"__ignoreMap":23},[28,172211,172212,172214],{"class":30,"line":31},[28,172213,30468],{"class":38},[28,172215,45381],{"class":34},[28,172217,172218],{"class":30,"line":94},[28,172219,2477],{"emptyLinePlaceholder":144},[28,172221,172222,172224],{"class":30,"line":109},[28,172223,30491],{"class":45},[28,172225,172226],{"class":34},"(os.getcwd())\n",[28,172228,172229,172231,172234,172237],{"class":30,"line":125},[28,172230,30491],{"class":45},[28,172232,172233],{"class":34},"(os.listdir(",[28,172235,172236],{"class":320},"\".\"",[28,172238,30573],{"class":34},[188,172240,172242],{"id":172241},"_9125-sys","9.12.5 sys",[18,172244,172246],{"className":20,"code":172245,"language":22,"meta":23,"style":23},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[25,172247,172248,172255,172259,172266],{"__ignoreMap":23},[28,172249,172250,172252],{"class":30,"line":31},[28,172251,30468],{"class":38},[28,172253,172254],{"class":34}," sys\n",[28,172256,172257],{"class":30,"line":94},[28,172258,2477],{"emptyLinePlaceholder":144},[28,172260,172261,172263],{"class":30,"line":109},[28,172262,30491],{"class":45},[28,172264,172265],{"class":34},"(sys.version)\n",[28,172267,172268,172270],{"class":30,"line":125},[28,172269,30491],{"class":45},[28,172271,172272],{"class":34},"(sys.path)\n",[159,172274,172276,172277,172279,172280,465],{"id":172275},"_913-if-name-main","9.13 if ",[365,172278,79885],{}," == \"",[365,172281,102117],{},[14,172283,172284,172285,172288],{},"模块被直接运行和被导入时，",[25,172286,172287],{},"__name__"," 的值不同。",[14,172290,172291,172292,24696],{},"创建 ",[25,172293,172294],{},"my_module.py",[18,172296,172298],{"className":20,"code":172297,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[25,172299,172300,172308,172318,172322,172326,172338],{"__ignoreMap":23},[28,172301,172302,172304,172306],{"class":30,"line":31},[28,172303,32023],{"class":38},[28,172305,5286],{"class":2040},[28,172307,151152],{"class":34},[28,172309,172310,172312,172314,172316],{"class":30,"line":94},[28,172311,4167],{"class":38},[28,172313,10946],{"class":34},[28,172315,693],{"class":38},[28,172317,151163],{"class":34},[28,172319,172320],{"class":30,"line":109},[28,172321,2477],{"emptyLinePlaceholder":144},[28,172323,172324],{"class":30,"line":125},[28,172325,2477],{"emptyLinePlaceholder":144},[28,172327,172328,172330,172332,172334,172336],{"class":30,"line":131},[28,172329,1608],{"class":38},[28,172331,31296],{"class":45},[28,172333,101618],{"class":38},[28,172335,101621],{"class":320},[28,172337,3816],{"class":34},[28,172339,172340,172342,172344,172346,172348,172350],{"class":30,"line":1291},[28,172341,31375],{"class":45},[28,172343,166659],{"class":34},[28,172345,46],{"class":45},[28,172347,12512],{"class":34},[28,172349,52],{"class":45},[28,172351,30573],{"class":34},[14,172353,172354],{},"作用：",[171,172356,172357,172360],{},[174,172358,172359],{},"直接运行该文件时，执行测试代码。",[174,172361,172362],{},"被其他文件导入时，不执行测试代码。",[14,172364,172365],{},"这是写模块时很常用的习惯。",[159,172367,172369],{"id":172368},"_914-包","9.14 包",[14,172371,172372,172373,172376],{},"包是包含 ",[25,172374,172375],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172378,172379],{},"目录结构：",[18,172381,172384],{"className":172382,"code":172383,"language":5264,"meta":23},[5262],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[25,172385,172383],{"__ignoreMap":23},[14,172387,172388],{},"导入：",[18,172390,172392],{"className":20,"code":172391,"language":22,"meta":23,"style":23},"from utils.file_utils import read_file\n",[25,172393,172394],{"__ignoreMap":23},[28,172395,172396,172398,172401,172403],{"class":30,"line":31},[28,172397,30813],{"class":38},[28,172399,172400],{"class":34}," utils.file_utils ",[28,172402,30468],{"class":38},[28,172404,172405],{"class":34}," read_file\n",[14,172407,172408,172410],{},[25,172409,172375],{}," 可以为空，也可以写包初始化逻辑。",[159,172412,172414],{"id":172413},"_915-第三方包","9.15 第三方包",[14,172416,172417,172418,172420],{},"第三方包通过 ",[25,172419,23908],{}," 安装。",[18,172422,172424],{"className":23899,"code":172423,"language":23901,"meta":23,"style":23},"pip install requests\n",[25,172425,172426],{"__ignoreMap":23},[28,172427,172428,172430,172432],{"class":30,"line":31},[28,172429,23908],{"class":2040},[28,172431,23911],{"class":320},[28,172433,146157],{"class":320},[14,172435,172436],{},"使用：",[18,172438,172440],{"className":20,"code":172439,"language":22,"meta":23,"style":23},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[25,172441,172442,172448,172452,172467],{"__ignoreMap":23},[28,172443,172444,172446],{"class":30,"line":31},[28,172445,30468],{"class":38},[28,172447,146157],{"class":34},[28,172449,172450],{"class":30,"line":94},[28,172451,2477],{"emptyLinePlaceholder":144},[28,172453,172454,172457,172459,172462,172465],{"class":30,"line":109},[28,172455,172456],{"class":34},"response ",[28,172458,39],{"class":38},[28,172460,172461],{"class":34}," requests.get(",[28,172463,172464],{"class":320},"\"https:\u002F\u002Fwww.example.com\"",[28,172466,227],{"class":34},[28,172468,172469,172471],{"class":30,"line":125},[28,172470,30491],{"class":45},[28,172472,172473],{"class":34},"(response.status_code)\n",[14,172475,172476],{},"查看已安装包：",[18,172478,172480],{"className":23899,"code":172479,"language":23901,"meta":23,"style":23},"pip list\n",[25,172481,172482],{"__ignoreMap":23},[28,172483,172484,172486],{"class":30,"line":31},[28,172485,23908],{"class":2040},[28,172487,119014],{"class":320},[14,172489,172490],{},"导出项目依赖：",[18,172492,172493],{"className":23899,"code":146352,"language":23901,"meta":23,"style":23},[25,172494,172495],{"__ignoreMap":23},[28,172496,172497,172499,172501,172503],{"class":30,"line":31},[28,172498,23908],{"class":2040},[28,172500,146361],{"class":320},[28,172502,26300],{"class":38},[28,172504,146366],{"class":320},[14,172506,172507],{},"安装项目依赖：",[18,172509,172510],{"className":23899,"code":146372,"language":23901,"meta":23,"style":23},[25,172511,172512],{"__ignoreMap":23},[28,172513,172514,172516,172518,172520],{"class":30,"line":31},[28,172515,23908],{"class":2040},[28,172517,23911],{"class":320},[28,172519,119698],{"class":45},[28,172521,146366],{"class":320},[159,172523,172525],{"id":172524},"_916-模块搜索路径","9.16 模块搜索路径",[14,172527,172528,172529,172532],{},"Python 导入模块时会在 ",[25,172530,172531],{},"sys.path"," 中查找。",[18,172534,172536],{"className":20,"code":172535,"language":22,"meta":23,"style":23},"import sys\n\nfor path in sys.path:\n    print(path)\n",[25,172537,172538,172544,172548,172560],{"__ignoreMap":23},[28,172539,172540,172542],{"class":30,"line":31},[28,172541,30468],{"class":38},[28,172543,172254],{"class":34},[28,172545,172546],{"class":30,"line":94},[28,172547,2477],{"emptyLinePlaceholder":144},[28,172549,172550,172552,172555,172557],{"class":30,"line":109},[28,172551,3102],{"class":38},[28,172553,172554],{"class":34}," path ",[28,172556,26121],{"class":38},[28,172558,172559],{"class":34}," sys.path:\n",[28,172561,172562,172564],{"class":30,"line":125},[28,172563,31375],{"class":45},[28,172565,169288],{"class":34},[14,172567,172568],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172570,157682],{},[18,172572,172575],{"className":172573,"code":172574,"language":5264,"meta":23},[5262],"random.py\njson.py\ntime.py\n",[25,172576,172574],{"__ignoreMap":23},[14,172578,172579],{},"这些文件名可能导致导入异常。",[159,172581,172583],{"id":172582},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172585,172379],{},[18,172587,172590],{"className":172588,"code":172589,"language":5264,"meta":23},[5262],"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",[25,172591,172589],{"__ignoreMap":23},[14,172593,172594,24696],{},[25,172595,172596],{},"utils\u002Ffile_utils.py",[18,172598,172600],{"className":20,"code":172599,"language":22,"meta":23,"style":23},"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",[25,172601,172602,172608,172618,172622,172626,172636,172646,172654,172660,172664,172691,172701,172705,172709,172719,172745],{"__ignoreMap":23},[28,172603,172604,172606],{"class":30,"line":31},[28,172605,30468],{"class":38},[28,172607,147150],{"class":34},[28,172609,172610,172612,172614,172616],{"class":30,"line":94},[28,172611,30813],{"class":38},[28,172613,108370],{"class":34},[28,172615,30468],{"class":38},[28,172617,108375],{"class":34},[28,172619,172620],{"class":30,"line":109},[28,172621,2477],{"emptyLinePlaceholder":144},[28,172623,172624],{"class":30,"line":125},[28,172625,2477],{"emptyLinePlaceholder":144},[28,172627,172628,172630,172633],{"class":30,"line":131},[28,172629,32023],{"class":38},[28,172631,172632],{"class":2040}," read_json",[28,172634,172635],{"class":34},"(path):\n",[28,172637,172638,172641,172643],{"class":30,"line":1291},[28,172639,172640],{"class":34},"    path ",[28,172642,39],{"class":38},[28,172644,172645],{"class":34}," Path(path)\n",[28,172647,172648,172650,172652],{"class":30,"line":1297},[28,172649,3178],{"class":38},[28,172651,39006],{"class":38},[28,172653,169369],{"class":34},[28,172655,172656,172658],{"class":30,"line":1388},[28,172657,14829],{"class":38},[28,172659,51913],{"class":34},[28,172661,172662],{"class":30,"line":1394},[28,172663,2477],{"emptyLinePlaceholder":144},[28,172665,172666,172668,172670,172673,172675,172677,172679,172681,172683,172685,172687,172689],{"class":30,"line":1406},[28,172667,34254],{"class":38},[28,172669,146850],{"class":45},[28,172671,172672],{"class":34},"(path, ",[28,172674,146860],{"class":320},[28,172676,12512],{"class":34},[28,172678,146865],{"class":5293},[28,172680,39],{"class":38},[28,172682,146870],{"class":320},[28,172684,13791],{"class":34},[28,172686,31459],{"class":38},[28,172688,148212],{"class":5293},[28,172690,3816],{"class":34},[28,172692,172693,172695,172697,172699],{"class":30,"line":1689},[28,172694,14829],{"class":38},[28,172696,148223],{"class":34},[28,172698,45430],{"class":5293},[28,172700,227],{"class":34},[28,172702,172703],{"class":30,"line":1694},[28,172704,2477],{"emptyLinePlaceholder":144},[28,172706,172707],{"class":30,"line":1700},[28,172708,2477],{"emptyLinePlaceholder":144},[28,172710,172711,172713,172716],{"class":30,"line":1705},[28,172712,32023],{"class":38},[28,172714,172715],{"class":2040}," write_json",[28,172717,172718],{"class":34},"(path, data):\n",[28,172720,172721,172723,172725,172727,172729,172731,172733,172735,172737,172739,172741,172743],{"class":30,"line":1719},[28,172722,34254],{"class":38},[28,172724,146850],{"class":45},[28,172726,172672],{"class":34},[28,172728,152035],{"class":320},[28,172730,12512],{"class":34},[28,172732,146865],{"class":5293},[28,172734,39],{"class":38},[28,172736,146870],{"class":320},[28,172738,13791],{"class":34},[28,172740,31459],{"class":38},[28,172742,148212],{"class":5293},[28,172744,3816],{"class":34},[28,172746,172747,172750,172752,172754,172756,172758,172760,172762,172764,172766,172768],{"class":30,"line":1724},[28,172748,172749],{"class":34},"        json.dump(data, ",[28,172751,45430],{"class":5293},[28,172753,12512],{"class":34},[28,172755,147196],{"class":5293},[28,172757,39],{"class":38},[28,172759,34063],{"class":45},[28,172761,12512],{"class":34},[28,172763,152071],{"class":5293},[28,172765,39],{"class":38},[28,172767,52],{"class":45},[28,172769,227],{"class":34},[14,172771,172772,24696],{},[25,172773,154666],{},[18,172775,172777],{"className":20,"code":172776,"language":22,"meta":23,"style":23},"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",[25,172778,172779,172790,172794,172807,172827],{"__ignoreMap":23},[28,172780,172781,172783,172785,172787],{"class":30,"line":31},[28,172782,30813],{"class":38},[28,172784,172400],{"class":34},[28,172786,30468],{"class":38},[28,172788,172789],{"class":34}," read_json, write_json\n",[28,172791,172792],{"class":30,"line":94},[28,172793,2477],{"emptyLinePlaceholder":144},[28,172795,172796,172798,172800,172803,172805],{"class":30,"line":109},[28,172797,159775],{"class":34},[28,172799,39],{"class":38},[28,172801,172802],{"class":34}," read_json(",[28,172804,151890],{"class":320},[28,172806,227],{"class":34},[28,172808,172809,172811,172813,172815,172817,172819,172821,172823,172825],{"class":30,"line":125},[28,172810,170593],{"class":34},[28,172812,62754],{"class":320},[28,172814,51512],{"class":34},[28,172816,149947],{"class":320},[28,172818,12512],{"class":34},[28,172820,151531],{"class":320},[28,172822,51512],{"class":34},[28,172824,1193],{"class":45},[28,172826,165211],{"class":34},[28,172828,172829,172832,172834],{"class":30,"line":131},[28,172830,172831],{"class":34},"write_json(",[28,172833,151890],{"class":320},[28,172835,172836],{"class":34},", students)\n",[159,172838,172840],{"id":172839},"_918-易错点","9.18 易错点",[171,172842,172843,172846,172851,172856,172859,172862],{},[174,172844,172845],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[174,172847,172848,172849,28463],{},"能指定异常类型就不要裸写 ",[25,172850,170953],{},[174,172852,172853,172855],{},[25,172854,171328],{}," 无论是否出错都会执行。",[174,172857,172858],{},"模块文件名不要和标准库重名。",[174,172860,172861],{},"导入自己写的模块时，要注意运行目录。",[174,172863,172864],{},"第三方包要安装到当前解释器或虚拟环境中。",[159,172866,172868],{"id":172867},"_919-本章练习","9.19 本章练习",[171,172870,172871,172874,172877,172883,172890],{},[174,172872,172873],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[174,172875,172876],{},"写函数读取文件，如果文件不存在则返回空字符串。",[174,172878,172291,172879,172882],{},[25,172880,172881],{},"math_utils.py","，实现加减乘除函数并导入使用。",[174,172884,172885,172886,172889],{},"创建一个 ",[25,172887,172888],{},"utils"," 包，把 JSON 读写函数放进去。",[174,172891,172892],{},"写一个程序，捕获除零异常和输入格式异常。",[136,172894,172895],{},"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":23,"searchDepth":94,"depth":94,"links":172897},[172898,172899,172900,172901,172902,172903,172904,172905,172906,172907,172908,172914,172921,172923,172924,172925,172926,172927,172928],{"id":170750,"depth":94,"text":170751},{"id":170878,"depth":94,"text":170879},{"id":170927,"depth":94,"text":170928},{"id":171076,"depth":94,"text":171077},{"id":171248,"depth":94,"text":171249},{"id":171317,"depth":94,"text":171318},{"id":171428,"depth":94,"text":171429},{"id":171554,"depth":94,"text":171555},{"id":171679,"depth":94,"text":171680},{"id":171734,"depth":94,"text":171735},{"id":171833,"depth":94,"text":171834,"children":172909},[172910,172911,172912,172913],{"id":171837,"depth":109,"text":171838},{"id":171871,"depth":109,"text":171872},{"id":171910,"depth":109,"text":171911},{"id":171989,"depth":109,"text":171990},{"id":172012,"depth":94,"text":172013,"children":172915},[172916,172917,172918,172919,172920],{"id":172016,"depth":109,"text":172017},{"id":172099,"depth":109,"text":172100},{"id":172144,"depth":109,"text":172145},{"id":172203,"depth":109,"text":172204},{"id":172241,"depth":109,"text":172242},{"id":172275,"depth":94,"text":172922},"9.13 if name == \"main\"",{"id":172368,"depth":94,"text":172369},{"id":172413,"depth":94,"text":172414},{"id":172524,"depth":94,"text":172525},{"id":172582,"depth":94,"text":172583},{"id":172839,"depth":94,"text":172840},{"id":172867,"depth":94,"text":172868},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170742,"description":141},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172935,"title":172936,"body":172937,"description":173100,"extension":142,"meta":173101,"navigation":144,"path":173102,"seo":173103,"stem":173104,"__hash__":173105},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172938,"toc":173095},[172939,172942,172945,172948,172959,172961,173035,173038,173041,173044,173047,173050,173053,173056,173059,173062,173065],[10,172940,172936],{"id":172941},"python教程",[14,172943,172944],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172946,172947],{},"建议学习环境：",[171,172949,172950,172953,172956],{},[174,172951,172952],{},"Python 版本：Python 3.10 及以上。",[174,172954,172955],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[174,172957,172958],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[159,172960,117137],{"id":117137},[171,172962,172963,172969,172975,172981,172987,172993,172999,173005,173011,173017,173023,173029],{},[174,172964,172965],{},[35,172966,172968],{"href":172967},".\u002Fch1-Python","Python环境与第一个程序",[174,172970,172971],{},[35,172972,172974],{"href":172973},".\u002Fch2","基础语法、变量与字符串",[174,172976,172977],{},[35,172978,172980],{"href":172979},".\u002Fch3","判断语句",[174,172982,172983],{},[35,172984,172986],{"href":172985},".\u002Fch4","循环语句",[174,172988,172989],{},[35,172990,172992],{"href":172991},".\u002Fch5","函数基础",[174,172994,172995],{},[35,172996,172998],{"href":172997},".\u002Fch6","数据容器",[174,173000,173001],{},[35,173002,173004],{"href":173003},".\u002Fch7","函数进阶",[174,173006,173007],{},[35,173008,173010],{"href":173009},".\u002Fch8","文件操作",[174,173012,173013],{},[35,173014,173016],{"href":173015},".\u002Fch9","异常、模块与包",[174,173018,173019],{},[35,173020,173022],{"href":173021},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[174,173024,173025],{},[35,173026,173028],{"href":173027},".\u002Fch11","面向对象基础",[174,173030,173031],{},[35,173032,173034],{"href":173033},".\u002Fch12","综合案例与复习路线",[159,173036,173037],{"id":173037},"学习路线",[14,173039,173040],{},"第一阶段：能运行程序。",[14,173042,173043],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173045,173046],{},"第二阶段：能组织数据。",[14,173048,173049],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173051,173052],{},"第三阶段：能封装逻辑。",[14,173054,173055],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173057,173058],{},"第四阶段：能做小项目。",[14,173060,173061],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[159,173063,173064],{"id":173064},"参考资料",[171,173066,173067,173074,173081,173088],{},[174,173068,173069,173070],{},"黑马程序员 Python 入门教程推荐：",[35,173071,173072],{"href":173072,"rel":173073},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23942],[174,173075,173076,173077],{},"Python 官方中文教程：",[35,173078,173079],{"href":173079,"rel":173080},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23942],[174,173082,173083,173084],{},"Python 标准库文档：",[35,173085,173086],{"href":173086,"rel":173087},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23942],[174,173089,173090,173091],{},"pyecharts 文档：",[35,173092,173093],{"href":173093,"rel":173094},"https:\u002F\u002Fpyecharts.org\u002F",[23942],{"title":23,"searchDepth":94,"depth":94,"links":173096},[173097,173098,173099],{"id":117137,"depth":94,"text":117137},{"id":173037,"depth":94,"text":173037},{"id":173064,"depth":94,"text":173064},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23455},"\u002Fwiki\u002F2024-10-10-python",{"title":172936,"description":173100},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331454978]