[{"data":1,"prerenderedAt":173110},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-suan-shu-han-shu":3,"wiki-doc-nav":156},{"id":4,"title":5,"body":6,"description":148,"extension":149,"meta":150,"navigation":151,"path":152,"seo":153,"stem":154,"__hash__":155},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":8,"toc":146},"minimark",[9,13,17,20,23,26,29,32,35,38,139,142],[10,11,5],"h1",{"id":12},"_10算数函数",[14,15,16],"p",{},"加减乘除运算跟python基础语法没区别",[14,18,19],{},"除了python那种方法外还可以使用函数",[14,21,22],{},"加：np.add(a,b)",[14,24,25],{},"减：np.subtract(a,b)",[14,27,28],{},"乘：np.multiply(a,b)",[14,30,31],{},"除：np.divide(a,b) == a\u002Fb",[14,33,34],{},"取余：np.mod(a,b) == a%b",[14,36,37],{},"必须会的用法：",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-python shiki shiki-themes github-light github-dark","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","python","",[46,47,48,82,107,118,133],"code",{"__ignoreMap":44},[49,50,53,57,61,64,68,71,74,77,79],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sVt8B","a",[49,58,60],{"class":59},"szBVR","=",[49,62,63],{"class":55},"np.arange(",[49,65,67],{"class":66},"sj4cs","9",[49,69,70],{"class":55},").reshape(",[49,72,73],{"class":66},"3",[49,75,76],{"class":55},",",[49,78,73],{"class":66},[49,80,81],{"class":55},")\n",[49,83,85,88,90,93,96,98,100,102,104],{"class":51,"line":84},2,[49,86,87],{"class":55},"b",[49,89,60],{"class":59},[49,91,92],{"class":55},"np.array([",[49,94,95],{"class":66},"10",[49,97,76],{"class":55},[49,99,95],{"class":66},[49,101,76],{"class":55},[49,103,95],{"class":66},[49,105,106],{"class":55},"])\n",[49,108,110,113,115],{"class":51,"line":109},3,[49,111,112],{"class":55},"result",[49,114,60],{"class":59},[49,116,117],{"class":55},"np.empty_like(a)\n",[49,119,121,124,128,130],{"class":51,"line":120},4,[49,122,123],{"class":55},"np.add(a,b,",[49,125,127],{"class":126},"s4XuR","out",[49,129,60],{"class":59},[49,131,132],{"class":55},"result)\n",[49,134,136],{"class":51,"line":135},5,[49,137,138],{"class":55},"result\n",[14,140,141],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[143,144,145],"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 .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":44,"searchDepth":84,"depth":84,"links":147},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":5,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",[157,5253,6360,7780,10769,12120,13609,14698,23461,23473,24072,24098,24222,24463,24528,24546,24559,24606,24730,24899,25098,25278,25483,25619,25714,25751,25764,26074,26815,27523,27544,28564,30195,30346,30359,30371,30670,50482,50497,50514,50547,53419,76767,92912,92933,93046,93141,93911,94574,94935,94973,95079,95179,95222,95248,95309,96963,97064,97089,97580,98080,99160,99443,100185,100687,100699,102715,104379,105882,107580,109497,111416,113438,116908,117340,117803,118552,121496,121844,121866,122222,125529,125541,125944,125967,126114,126281,126486,126787,127344,128001,129932,131530,132179,133673,135104,136339,138033,139785,142195,142311,143246,143457,144342,145577,145805,145818,146973,149385,151753,155074,157551,159195,160972,162985,166037,168217,170744,172938],{"id":158,"title":159,"body":160,"description":44,"extension":149,"meta":5248,"navigation":151,"path":5249,"seo":5250,"stem":5251,"__hash__":5252},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":161,"toc":5220},[162,165,170,173,177,190,194,199,202,205,208,211,214,241,245,248,251,254,257,307,311,330,332,346,349,357,360,1218,1225,1242,1246,1334,1338,1344,1433,1437,1475,1479,1543,1547,1551,1558,1569,1573,1578,1582,1587,1591,1596,1600,1604,1609,1879,1884,2022,2027,2284,2287,2295,2299,2304,2407,2410,2716,2725,2826,2829,2832,2835,2838,3098,3103,3243,3246,3425,3428,3556,3559,3711,3715,3720,3723,3734,3742,3745,3852,3856,3860,3865,3915,3920,3925,3949,3954,4007,4010,4015,4192,4197,4482,4487,4883,4887,4892,4949,4954,4962,4965,5105,5108,5217],[10,163,159],{"id":164},"_1基础入门",[166,167,169],"h2",{"id":168},"_11注释","1.1注释",[14,171,172],{},"\u002F\u002F或者\u002F* *\u002F",[166,174,176],{"id":175},"_12命名","1.2命名",[178,179,180,184,187],"ol",{},[181,182,183],"li",{},"字母数字下划线",[181,185,186],{},"开头必须是字母或_",[181,188,189],{},"不能使用关键词",[166,191,193],{"id":192},"_13数据类型","1.3数据类型",[195,196,198],"h3",{"id":197},"_131整形","1.3.1整形",[14,200,201],{},"short 短整形 2",[14,203,204],{},"int 整形 4",[14,206,207],{},"long 长整形 win4 linux32位4 linux64位8",[14,209,210],{},"long long 长长整形 8",[14,212,213],{},"利用sizeof可以求数据类型占用的内存空间大小",[39,215,219],{"className":216,"code":217,"language":218,"meta":44,"style":44},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[46,220,221,234],{"__ignoreMap":44},[49,222,223,226,229,232],{"class":51,"line":52},[49,224,225],{"class":59},"sizeof",[49,227,228],{"class":55},"(",[49,230,231],{"class":59},"int",[49,233,81],{"class":55},[49,235,236,238],{"class":51,"line":84},[49,237,225],{"class":59},[49,239,240],{"class":55},"(num)\n",[195,242,244],{"id":243},"_132浮点型","1.3.2浮点型",[14,246,247],{},"float 单精度 4节 7位有效数字",[14,249,250],{},"double 双精度 8节 15-16有效数字",[14,252,253],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,255,256],{},"注意点：",[39,258,260],{"className":216,"code":259,"language":218,"meta":44,"style":44},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[46,261,262,285],{"__ignoreMap":44},[49,263,264,267,270,272,275,278,281],{"class":51,"line":52},[49,265,266],{"class":59},"float",[49,268,269],{"class":55}," f1",[49,271,60],{"class":59},[49,273,274],{"class":66},"3.14",[49,276,277],{"class":59},"f",[49,279,280],{"class":55},";",[49,282,284],{"class":283},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[49,286,287,289,292,294,296,299,302,304],{"class":51,"line":84},[49,288,266],{"class":59},[49,290,291],{"class":55}," f2",[49,293,60],{"class":59},[49,295,73],{"class":66},[49,297,298],{"class":59},"e",[49,300,301],{"class":66},"2",[49,303,280],{"class":55},[49,305,306],{"class":283}," \u002F\u002F科学记数法\n",[195,308,310],{"id":309},"_133字符型","1.3.3字符型",[39,312,314],{"className":216,"code":313,"language":218,"meta":44,"style":44},"char ch='a'\n",[46,315,316],{"__ignoreMap":44},[49,317,318,321,324,326],{"class":51,"line":52},[49,319,320],{"class":59},"char",[49,322,323],{"class":55}," ch",[49,325,60],{"class":59},[49,327,329],{"class":328},"sZZnC","'a'\n",[14,331,256],{},[178,333,334,337,340,343],{},[181,335,336],{},"在显示字符型变量时，只能单引号，双引号x",[181,338,339],{},"单引号内只能一个字符，不能字符串",[181,341,342],{},"c和c++字符型变量只占用一个字符",[181,344,345],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,347,348],{},"ASCII码大致由以下两部分组成：",[178,350,351,354],{},[181,352,353],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[181,355,356],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,358,359],{},"ASCII码表格：",[361,362,363,407],"table",{},[364,365,366],"thead",{},[367,368,369,377,382,386,391,395,399,403],"tr",{},[370,371,372,376],"th",{},[373,374,375],"strong",{},"ASCII","值",[370,378,379],{},[373,380,381],{},"控制字符",[370,383,384,376],{},[373,385,375],{},[370,387,388],{},[373,389,390],{},"字符",[370,392,393,376],{},[373,394,375],{},[370,396,397],{},[373,398,390],{},[370,400,401,376],{},[373,402,375],{},[370,404,405],{},[373,406,390],{},[408,409,410,437,462,486,511,537,562,587,612,637,662,687,713,738,764,790,816,840,865,890,915,940,965,990,1015,1040,1065,1091,1116,1141,1166,1192],"tbody",{},[367,411,412,416,419,422,425,428,431,434],{},[413,414,415],"td",{},"0",[413,417,418],{},"NUT",[413,420,421],{},"32",[413,423,424],{},"(space)",[413,426,427],{},"64",[413,429,430],{},"@",[413,432,433],{},"96",[413,435,436],{},"、",[367,438,439,442,445,448,451,454,457,460],{},[413,440,441],{},"1",[413,443,444],{},"SOH",[413,446,447],{},"33",[413,449,450],{},"!",[413,452,453],{},"65",[413,455,456],{},"A",[413,458,459],{},"97",[413,461,56],{},[367,463,464,466,469,472,475,478,481,484],{},[413,465,301],{},[413,467,468],{},"STX",[413,470,471],{},"34",[413,473,474],{},"\"",[413,476,477],{},"66",[413,479,480],{},"B",[413,482,483],{},"98",[413,485,87],{},[367,487,488,490,493,496,499,502,505,508],{},[413,489,73],{},[413,491,492],{},"ETX",[413,494,495],{},"35",[413,497,498],{},"#",[413,500,501],{},"67",[413,503,504],{},"C",[413,506,507],{},"99",[413,509,510],{},"c",[367,512,513,516,519,522,525,528,531,534],{},[413,514,515],{},"4",[413,517,518],{},"EOT",[413,520,521],{},"36",[413,523,524],{},"$",[413,526,527],{},"68",[413,529,530],{},"D",[413,532,533],{},"100",[413,535,536],{},"d",[367,538,539,542,545,548,551,554,557,560],{},[413,540,541],{},"5",[413,543,544],{},"ENQ",[413,546,547],{},"37",[413,549,550],{},"%",[413,552,553],{},"69",[413,555,556],{},"E",[413,558,559],{},"101",[413,561,298],{},[367,563,564,567,570,573,576,579,582,585],{},[413,565,566],{},"6",[413,568,569],{},"ACK",[413,571,572],{},"38",[413,574,575],{},"&",[413,577,578],{},"70",[413,580,581],{},"F",[413,583,584],{},"102",[413,586,277],{},[367,588,589,592,595,598,600,603,606,609],{},[413,590,591],{},"7",[413,593,594],{},"BEL",[413,596,597],{},"39",[413,599,76],{},[413,601,602],{},"71",[413,604,605],{},"G",[413,607,608],{},"103",[413,610,611],{},"g",[367,613,614,617,620,623,625,628,631,634],{},[413,615,616],{},"8",[413,618,619],{},"BS",[413,621,622],{},"40",[413,624,228],{},[413,626,627],{},"72",[413,629,630],{},"H",[413,632,633],{},"104",[413,635,636],{},"h",[367,638,639,641,644,647,650,653,656,659],{},[413,640,67],{},[413,642,643],{},"HT",[413,645,646],{},"41",[413,648,649],{},")",[413,651,652],{},"73",[413,654,655],{},"I",[413,657,658],{},"105",[413,660,661],{},"i",[367,663,664,666,669,672,675,678,681,684],{},[413,665,95],{},[413,667,668],{},"LF",[413,670,671],{},"42",[413,673,674],{},"*",[413,676,677],{},"74",[413,679,680],{},"J",[413,682,683],{},"106",[413,685,686],{},"j",[367,688,689,692,695,698,701,704,707,710],{},[413,690,691],{},"11",[413,693,694],{},"VT",[413,696,697],{},"43",[413,699,700],{},"+",[413,702,703],{},"75",[413,705,706],{},"K",[413,708,709],{},"107",[413,711,712],{},"k",[367,714,715,718,721,724,726,729,732,735],{},[413,716,717],{},"12",[413,719,720],{},"FF",[413,722,723],{},"44",[413,725,76],{},[413,727,728],{},"76",[413,730,731],{},"L",[413,733,734],{},"108",[413,736,737],{},"l",[367,739,740,743,746,749,752,755,758,761],{},[413,741,742],{},"13",[413,744,745],{},"CR",[413,747,748],{},"45",[413,750,751],{},"-",[413,753,754],{},"77",[413,756,757],{},"M",[413,759,760],{},"109",[413,762,763],{},"m",[367,765,766,769,772,775,778,781,784,787],{},[413,767,768],{},"14",[413,770,771],{},"SO",[413,773,774],{},"46",[413,776,777],{},".",[413,779,780],{},"78",[413,782,783],{},"N",[413,785,786],{},"110",[413,788,789],{},"n",[367,791,792,795,798,801,804,807,810,813],{},[413,793,794],{},"15",[413,796,797],{},"SI",[413,799,800],{},"47",[413,802,803],{},"\u002F",[413,805,806],{},"79",[413,808,809],{},"O",[413,811,812],{},"111",[413,814,815],{},"o",[367,817,818,821,824,827,829,832,835,838],{},[413,819,820],{},"16",[413,822,823],{},"DLE",[413,825,826],{},"48",[413,828,415],{},[413,830,831],{},"80",[413,833,834],{},"P",[413,836,837],{},"112",[413,839,14],{},[367,841,842,845,848,851,853,856,859,862],{},[413,843,844],{},"17",[413,846,847],{},"DCI",[413,849,850],{},"49",[413,852,441],{},[413,854,855],{},"81",[413,857,858],{},"Q",[413,860,861],{},"113",[413,863,864],{},"q",[367,866,867,870,873,876,878,881,884,887],{},[413,868,869],{},"18",[413,871,872],{},"DC2",[413,874,875],{},"50",[413,877,301],{},[413,879,880],{},"82",[413,882,883],{},"R",[413,885,886],{},"114",[413,888,889],{},"r",[367,891,892,895,898,901,903,906,909,912],{},[413,893,894],{},"19",[413,896,897],{},"DC3",[413,899,900],{},"51",[413,902,73],{},[413,904,905],{},"83",[413,907,908],{},"S",[413,910,911],{},"115",[413,913,914],{},"s",[367,916,917,920,923,926,928,931,934,937],{},[413,918,919],{},"20",[413,921,922],{},"DC4",[413,924,925],{},"52",[413,927,515],{},[413,929,930],{},"84",[413,932,933],{},"T",[413,935,936],{},"116",[413,938,939],{},"t",[367,941,942,945,948,951,953,956,959,962],{},[413,943,944],{},"21",[413,946,947],{},"NAK",[413,949,950],{},"53",[413,952,541],{},[413,954,955],{},"85",[413,957,958],{},"U",[413,960,961],{},"117",[413,963,964],{},"u",[367,966,967,970,973,976,978,981,984,987],{},[413,968,969],{},"22",[413,971,972],{},"SYN",[413,974,975],{},"54",[413,977,566],{},[413,979,980],{},"86",[413,982,983],{},"V",[413,985,986],{},"118",[413,988,989],{},"v",[367,991,992,995,998,1001,1003,1006,1009,1012],{},[413,993,994],{},"23",[413,996,997],{},"TB",[413,999,1000],{},"55",[413,1002,591],{},[413,1004,1005],{},"87",[413,1007,1008],{},"W",[413,1010,1011],{},"119",[413,1013,1014],{},"w",[367,1016,1017,1020,1023,1026,1028,1031,1034,1037],{},[413,1018,1019],{},"24",[413,1021,1022],{},"CAN",[413,1024,1025],{},"56",[413,1027,616],{},[413,1029,1030],{},"88",[413,1032,1033],{},"X",[413,1035,1036],{},"120",[413,1038,1039],{},"x",[367,1041,1042,1045,1048,1051,1053,1056,1059,1062],{},[413,1043,1044],{},"25",[413,1046,1047],{},"EM",[413,1049,1050],{},"57",[413,1052,67],{},[413,1054,1055],{},"89",[413,1057,1058],{},"Y",[413,1060,1061],{},"121",[413,1063,1064],{},"y",[367,1066,1067,1070,1073,1076,1079,1082,1085,1088],{},[413,1068,1069],{},"26",[413,1071,1072],{},"SUB",[413,1074,1075],{},"58",[413,1077,1078],{},":",[413,1080,1081],{},"90",[413,1083,1084],{},"Z",[413,1086,1087],{},"122",[413,1089,1090],{},"z",[367,1092,1093,1096,1099,1102,1104,1107,1110,1113],{},[413,1094,1095],{},"27",[413,1097,1098],{},"ESC",[413,1100,1101],{},"59",[413,1103,280],{},[413,1105,1106],{},"91",[413,1108,1109],{},"[",[413,1111,1112],{},"123",[413,1114,1115],{},"{",[367,1117,1118,1121,1124,1127,1130,1133,1135,1138],{},[413,1119,1120],{},"28",[413,1122,1123],{},"FS",[413,1125,1126],{},"60",[413,1128,1129],{},"\u003C",[413,1131,1132],{},"92",[413,1134,803],{},[413,1136,1137],{},"124",[413,1139,1140],{},"|",[367,1142,1143,1146,1149,1152,1154,1157,1160,1163],{},[413,1144,1145],{},"29",[413,1147,1148],{},"GS",[413,1150,1151],{},"61",[413,1153,60],{},[413,1155,1156],{},"93",[413,1158,1159],{},"]",[413,1161,1162],{},"125",[413,1164,1165],{},"}",[367,1167,1168,1171,1174,1177,1180,1183,1186,1189],{},[413,1169,1170],{},"30",[413,1172,1173],{},"RS",[413,1175,1176],{},"62",[413,1178,1179],{},">",[413,1181,1182],{},"94",[413,1184,1185],{},"^",[413,1187,1188],{},"126",[413,1190,1191],{},"`",[367,1193,1194,1197,1200,1203,1206,1209,1212,1215],{},[413,1195,1196],{},"31",[413,1198,1199],{},"US",[413,1201,1202],{},"63",[413,1204,1205],{},"?",[413,1207,1208],{},"95",[413,1210,1211],{},"_",[413,1213,1214],{},"127",[413,1216,1217],{},"DEL",[14,1219,1220,1221,1224],{},"ASCII 码大致由以下",[373,1222,1223],{},"两部分组","成：",[1226,1227,1228,1235],"ul",{},[181,1229,1230,1231,1234],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[373,1232,1233],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[181,1236,1237,1238,1241],{},"ASCII 打印字符：数字 ",[373,1239,1240],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[195,1243,1245],{"id":1244},"_134转义字符","1.3.4转义字符",[39,1247,1249],{"className":216,"code":1248,"language":218,"meta":44,"style":44},"\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",[46,1250,1251,1256,1272,1286,1291,1304,1310],{"__ignoreMap":44},[49,1252,1253],{"class":51,"line":52},[49,1254,1255],{"class":283},"\u002F\u002F换行符\n",[49,1257,1258,1261,1264,1267,1269],{"class":51,"line":84},[49,1259,1260],{"class":55},"cout ",[49,1262,1263],{"class":59},"\u003C\u003C",[49,1265,1266],{"class":328},"\"hello world\u002Fn\"",[49,1268,280],{"class":55},[49,1270,1271],{"class":283}," \u002F\u002F就等同于如下：\n",[49,1273,1274,1276,1278,1281,1283],{"class":51,"line":109},[49,1275,1260],{"class":55},[49,1277,1263],{"class":59},[49,1279,1280],{"class":328},"\"hello world\"",[49,1282,1263],{"class":59},[49,1284,1285],{"class":55},"endl;\n",[49,1287,1288],{"class":51,"line":120},[49,1289,1290],{"class":283},"\u002F\u002F反斜杠\n",[49,1292,1293,1295,1297,1300,1302],{"class":51,"line":135},[49,1294,1260],{"class":55},[49,1296,1263],{"class":59},[49,1298,1299],{"class":328},"\"\u002F\u002F\"",[49,1301,1263],{"class":59},[49,1303,1285],{"class":55},[49,1305,1307],{"class":51,"line":1306},6,[49,1308,1309],{"class":283},"\u002F\u002F水平制表符\n",[49,1311,1313,1315,1317,1320,1323,1326,1328,1331],{"class":51,"line":1312},7,[49,1314,1260],{"class":55},[49,1316,1263],{"class":59},[49,1318,1319],{"class":328},"\"aaaa",[49,1321,1322],{"class":66},"\\t",[49,1324,1325],{"class":328},"helloworld\"",[49,1327,1263],{"class":59},[49,1329,1330],{"class":55},"endl;",[49,1332,1333],{"class":283}," \u002F\u002F输出窗口时有对齐效果\n",[195,1335,1337],{"id":1336},"_135字符串型","1.3.5字符串型",[14,1339,1340,1341,1343],{},"char 变量名",[49,1342],{},"=\"字符串值\"",[39,1345,1347],{"className":216,"code":1346,"language":218,"meta":44,"style":44},"\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",[46,1348,1349,1354,1359,1364,1369,1383,1396,1401,1407,1419],{"__ignoreMap":44},[49,1350,1351],{"class":51,"line":52},[49,1352,1353],{"class":283},"\u002F\u002Fc风格字符串\n",[49,1355,1356],{"class":51,"line":84},[49,1357,1358],{"class":283},"\u002F\u002F注意事项：\n",[49,1360,1361],{"class":51,"line":109},[49,1362,1363],{"class":283},"\u002F\u002F1.char字符串名[]\n",[49,1365,1366],{"class":51,"line":120},[49,1367,1368],{"class":283},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[49,1370,1371,1373,1376,1378,1380],{"class":51,"line":135},[49,1372,320],{"class":59},[49,1374,1375],{"class":55}," str[]",[49,1377,60],{"class":59},[49,1379,1280],{"class":328},[49,1381,1382],{"class":55},";\n",[49,1384,1385,1387,1389,1392,1394],{"class":51,"line":1306},[49,1386,1260],{"class":55},[49,1388,1263],{"class":59},[49,1390,1391],{"class":55},"str",[49,1393,1263],{"class":59},[49,1395,1285],{"class":55},[49,1397,1398],{"class":51,"line":1312},[49,1399,1400],{"class":283},"\u002F\u002Fc++风格字符串\n",[49,1402,1404],{"class":51,"line":1403},8,[49,1405,1406],{"class":283},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[49,1408,1410,1413,1415,1417],{"class":51,"line":1409},9,[49,1411,1412],{"class":55},"string str2",[49,1414,60],{"class":59},[49,1416,1280],{"class":328},[49,1418,1382],{"class":55},[49,1420,1422,1424,1426,1429,1431],{"class":51,"line":1421},10,[49,1423,1260],{"class":55},[49,1425,1263],{"class":59},[49,1427,1428],{"class":55},"str2",[49,1430,1263],{"class":59},[49,1432,1285],{"class":55},[195,1434,1436],{"id":1435},"_136布尔类型bool","1.3.6布尔类型bool",[39,1438,1440],{"className":216,"code":1439,"language":218,"meta":44,"style":44},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[46,1441,1442,1457],{"__ignoreMap":44},[49,1443,1444,1447,1450,1452,1455],{"class":51,"line":52},[49,1445,1446],{"class":59},"bool",[49,1448,1449],{"class":55}," flag",[49,1451,60],{"class":59},[49,1453,1454],{"class":66},"true",[49,1456,1382],{"class":55},[49,1458,1459,1462,1465,1468,1470,1472],{"class":51,"line":84},[49,1460,1461],{"class":55},"cout",[49,1463,1464],{"class":59},"\u003C\u003Csizeof",[49,1466,1467],{"class":55},"(flag)",[49,1469,1263],{"class":59},[49,1471,1330],{"class":55},[49,1473,1474],{"class":283}," \u002F\u002F查看布尔占内存空间\n",[166,1476,1478],{"id":1477},"_14键盘输入cin","1.4键盘输入cin",[39,1480,1482],{"className":216,"code":1481,"language":218,"meta":44,"style":44},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[46,1483,1484,1497,1514,1525],{"__ignoreMap":44},[49,1485,1486,1488,1491,1493,1495],{"class":51,"line":52},[49,1487,231],{"class":59},[49,1489,1490],{"class":55}," a",[49,1492,60],{"class":59},[49,1494,415],{"class":66},[49,1496,1382],{"class":55},[49,1498,1499,1501,1503,1506,1508,1510,1512],{"class":51,"line":84},[49,1500,1461],{"class":55},[49,1502,1263],{"class":59},[49,1504,1505],{"class":328},"\"请给整型变量a赋值\"",[49,1507,1263],{"class":59},[49,1509,56],{"class":55},[49,1511,1263],{"class":59},[49,1513,1285],{"class":55},[49,1515,1516,1519,1522],{"class":51,"line":109},[49,1517,1518],{"class":55},"cin ",[49,1520,1521],{"class":59},">>",[49,1523,1524],{"class":55}," a;\n",[49,1526,1527,1529,1531,1534,1537,1539,1541],{"class":51,"line":120},[49,1528,1260],{"class":55},[49,1530,1263],{"class":59},[49,1532,1533],{"class":328}," \"整型变量a=\"",[49,1535,1536],{"class":59}," \u003C\u003C",[49,1538,56],{"class":55},[49,1540,1263],{"class":59},[49,1542,1285],{"class":55},[166,1544,1546],{"id":1545},"_15运算符","1.5运算符",[195,1548,1550],{"id":1549},"_151算术运算符","1.5.1算术运算符",[14,1552,1553,1557],{},[1554,1555],"img",{"alt":44,"src":1556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[178,1559,1560,1563,1566],{},[181,1561,1562],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[181,1564,1565],{},"两个小数不可以做取模运算",[181,1567,1568],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[195,1570,1572],{"id":1571},"_152赋值运算符","1.5.2赋值运算符",[14,1574,1575],{},[1554,1576],{"alt":44,"src":1577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[195,1579,1581],{"id":1580},"_153比较运算符","1.5.3比较运算符",[14,1583,1584],{},[1554,1585],{"alt":44,"src":1586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[195,1588,1590],{"id":1589},"_154逻辑运算符","1.5.4逻辑运算符",[14,1592,1593],{},[1554,1594],{"alt":44,"src":1595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[166,1597,1599],{"id":1598},"_16程序流程结构","1.6程序流程结构",[195,1601,1603],{"id":1602},"_161选择结构","1.6.1选择结构",[178,1605,1606],{},[181,1607,1608],{},"if语句\n单行、多行、多条件if语句",[39,1610,1612],{"className":216,"code":1611,"language":218,"meta":44,"style":44},"\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",[46,1613,1614,1619,1634,1639,1653,1658,1663,1672,1685,1689,1702,1707,1713,1718,1732,1737,1743,1764,1769,1783,1788,1817,1822,1839,1844,1849,1854,1868,1873],{"__ignoreMap":44},[49,1615,1616],{"class":51,"line":52},[49,1617,1618],{"class":283},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[49,1620,1621,1624,1627,1629,1632],{"class":51,"line":84},[49,1622,1623],{"class":59},"if",[49,1625,1626],{"class":55},"(score",[49,1628,1179],{"class":59},[49,1630,1631],{"class":66},"600",[49,1633,81],{"class":55},[49,1635,1636],{"class":51,"line":109},[49,1637,1638],{"class":55},"{\n",[49,1640,1641,1644,1646,1649,1651],{"class":51,"line":120},[49,1642,1643],{"class":55},"    cout",[49,1645,1263],{"class":59},[49,1647,1648],{"class":328},"'这是单行if语句'",[49,1650,1263],{"class":59},[49,1652,1285],{"class":55},[49,1654,1655],{"class":51,"line":135},[49,1656,1657],{"class":55},"}\n",[49,1659,1660],{"class":51,"line":1306},[49,1661,1662],{"class":283},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[49,1664,1665,1667,1669],{"class":51,"line":1312},[49,1666,1518],{"class":55},[49,1668,1521],{"class":59},[49,1670,1671],{"class":55}," score\n",[49,1673,1674,1676,1678,1681,1683],{"class":51,"line":1403},[49,1675,1623],{"class":59},[49,1677,1626],{"class":55},[49,1679,1680],{"class":59},"\u003C=",[49,1682,1631],{"class":66},[49,1684,81],{"class":55},[49,1686,1687],{"class":51,"line":1409},[49,1688,1638],{"class":55},[49,1690,1691,1693,1695,1698,1700],{"class":51,"line":1421},[49,1692,1643],{"class":55},[49,1694,1521],{"class":59},[49,1696,1697],{"class":328},"\"小于等于600\"",[49,1699,1263],{"class":59},[49,1701,1285],{"class":55},[49,1703,1705],{"class":51,"line":1704},11,[49,1706,1657],{"class":55},[49,1708,1710],{"class":51,"line":1709},12,[49,1711,1712],{"class":59},"else\n",[49,1714,1716],{"class":51,"line":1715},13,[49,1717,1638],{"class":55},[49,1719,1721,1723,1725,1728,1730],{"class":51,"line":1720},14,[49,1722,1643],{"class":55},[49,1724,1521],{"class":59},[49,1726,1727],{"class":328},"\"大于600\"",[49,1729,1521],{"class":59},[49,1731,1285],{"class":55},[49,1733,1735],{"class":51,"line":1734},15,[49,1736,1657],{"class":55},[49,1738,1740],{"class":51,"line":1739},16,[49,1741,1742],{"class":283},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[49,1744,1746,1748,1751,1753,1755,1758,1760,1762],{"class":51,"line":1745},17,[49,1747,1623],{"class":59},[49,1749,1750],{"class":55}," (",[49,1752,415],{"class":66},[49,1754,1129],{"class":59},[49,1756,1757],{"class":55},"num",[49,1759,1129],{"class":59},[49,1761,533],{"class":66},[49,1763,81],{"class":55},[49,1765,1767],{"class":51,"line":1766},18,[49,1768,1638],{"class":55},[49,1770,1772,1774,1776,1779,1781],{"class":51,"line":1771},19,[49,1773,1643],{"class":55},[49,1775,1263],{"class":59},[49,1777,1778],{"class":328},"\"小于100\"",[49,1780,1263],{"class":59},[49,1782,1285],{"class":55},[49,1784,1786],{"class":51,"line":1785},20,[49,1787,1657],{"class":55},[49,1789,1791,1794,1797,1800,1803,1805,1808,1810,1812,1815],{"class":51,"line":1790},21,[49,1792,1793],{"class":59},"else",[49,1795,1796],{"class":59}," if",[49,1798,1799],{"class":55}," (nmu",[49,1801,1802],{"class":59},">=",[49,1804,533],{"class":66},[49,1806,1807],{"class":59},"&&",[49,1809,1757],{"class":55},[49,1811,1129],{"class":59},[49,1813,1814],{"class":66},"200",[49,1816,81],{"class":55},[49,1818,1820],{"class":51,"line":1819},22,[49,1821,1638],{"class":55},[49,1823,1825,1827,1829,1832,1834,1836],{"class":51,"line":1824},23,[49,1826,1643],{"class":55},[49,1828,1263],{"class":59},[49,1830,1831],{"class":328},"\"不小于100且小于200\"",[49,1833,1263],{"class":59},[49,1835,1330],{"class":55},[49,1837,1838],{"class":283}," \u002F\u002F可以无限else if,python中是elif：\n",[49,1840,1842],{"class":51,"line":1841},24,[49,1843,1657],{"class":55},[49,1845,1847],{"class":51,"line":1846},25,[49,1848,1712],{"class":59},[49,1850,1852],{"class":51,"line":1851},26,[49,1853,1638],{"class":55},[49,1855,1857,1859,1861,1864,1866],{"class":51,"line":1856},27,[49,1858,1643],{"class":55},[49,1860,1263],{"class":59},[49,1862,1863],{"class":328},"\"不小于200\"",[49,1865,1263],{"class":59},[49,1867,1285],{"class":55},[49,1869,1871],{"class":51,"line":1870},28,[49,1872,1657],{"class":55},[49,1874,1876],{"class":51,"line":1875},29,[49,1877,1878],{"class":283},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[178,1880,1881],{"start":84},[181,1882,1883],{},"三目运算符",[39,1885,1887],{"className":216,"code":1886,"language":218,"meta":44,"style":44},"\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",[46,1888,1889,1894,1899,1925,1947,1964,1969,1992,2007],{"__ignoreMap":44},[49,1890,1891],{"class":51,"line":52},[49,1892,1893],{"class":283},"\u002F\u002F创建三个变量a,b,c\n",[49,1895,1896],{"class":51,"line":84},[49,1897,1898],{"class":283},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[49,1900,1901,1903,1905,1907,1909,1912,1914,1916,1919,1921,1923],{"class":51,"line":109},[49,1902,231],{"class":59},[49,1904,1490],{"class":55},[49,1906,60],{"class":59},[49,1908,919],{"class":66},[49,1910,1911],{"class":55},",b",[49,1913,60],{"class":59},[49,1915,95],{"class":66},[49,1917,1918],{"class":55},",c",[49,1920,60],{"class":59},[49,1922,415],{"class":66},[49,1924,1382],{"class":55},[49,1926,1927,1929,1931,1934,1936,1938,1940,1942,1944],{"class":51,"line":120},[49,1928,510],{"class":55},[49,1930,60],{"class":59},[49,1932,1933],{"class":55},"(a",[49,1935,1179],{"class":59},[49,1937,87],{"class":55},[49,1939,1205],{"class":59},[49,1941,56],{"class":55},[49,1943,1078],{"class":59},[49,1945,1946],{"class":55},"b)\n",[49,1948,1949,1951,1953,1956,1958,1960,1962],{"class":51,"line":135},[49,1950,1461],{"class":55},[49,1952,1263],{"class":59},[49,1954,1955],{"class":328},"\"c=\"",[49,1957,1263],{"class":59},[49,1959,510],{"class":55},[49,1961,1263],{"class":59},[49,1963,1285],{"class":55},[49,1965,1966],{"class":51,"line":1306},[49,1967,1968],{"class":283},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[49,1970,1971,1973,1975,1977,1979,1981,1983,1986,1988,1990],{"class":51,"line":1312},[49,1972,1933],{"class":55},[49,1974,1179],{"class":59},[49,1976,87],{"class":55},[49,1978,1205],{"class":59},[49,1980,56],{"class":55},[49,1982,1078],{"class":59},[49,1984,1985],{"class":55},"b)",[49,1987,60],{"class":59},[49,1989,533],{"class":66},[49,1991,1382],{"class":55},[49,1993,1994,1996,1998,2000,2002,2004],{"class":51,"line":1403},[49,1995,1461],{"class":55},[49,1997,1263],{"class":59},[49,1999,56],{"class":55},[49,2001,1263],{"class":59},[49,2003,1330],{"class":55},[49,2005,2006],{"class":283}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[49,2008,2009,2011,2013,2015,2017,2019],{"class":51,"line":1409},[49,2010,1461],{"class":55},[49,2012,1263],{"class":59},[49,2014,87],{"class":55},[49,2016,1263],{"class":59},[49,2018,1330],{"class":55},[49,2020,2021],{"class":283}," \u002F\u002F10   a>b,b还是原值\n",[178,2023,2024],{"start":109},[181,2025,2026],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[39,2028,2030],{"className":216,"code":2029,"language":218,"meta":44,"style":44},"\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",[46,2031,2032,2037,2045,2059,2069,2073,2087,2100,2110,2118,2123,2148,2169,2191,2212,2234,2255,2275,2280],{"__ignoreMap":44},[49,2033,2034],{"class":51,"line":52},[49,2035,2036],{"class":283},"\u002F\u002F案例-电影打分\n",[49,2038,2039,2042],{"class":51,"line":84},[49,2040,2041],{"class":59},"#include",[49,2043,2044],{"class":328},"\u003Ciostream>\n",[49,2046,2047,2050,2053,2057],{"class":51,"line":109},[49,2048,2049],{"class":59},"using",[49,2051,2052],{"class":59}," namespace",[49,2054,2056],{"class":2055},"sScJk"," std",[49,2058,1382],{"class":55},[49,2060,2061,2063,2066],{"class":51,"line":120},[49,2062,231],{"class":59},[49,2064,2065],{"class":2055}," main",[49,2067,2068],{"class":55},"()\n",[49,2070,2071],{"class":51,"line":135},[49,2072,1638],{"class":55},[49,2074,2075,2078,2081,2083,2085],{"class":51,"line":1306},[49,2076,2077],{"class":59},"    int",[49,2079,2080],{"class":55}," score",[49,2082,60],{"class":59},[49,2084,415],{"class":66},[49,2086,1382],{"class":55},[49,2088,2089,2091,2093,2096,2098],{"class":51,"line":1312},[49,2090,1643],{"class":55},[49,2092,1263],{"class":59},[49,2094,2095],{"class":328},"\"电影打分：\"",[49,2097,1263],{"class":59},[49,2099,1285],{"class":55},[49,2101,2102,2105,2107],{"class":51,"line":1403},[49,2103,2104],{"class":55},"    cin",[49,2106,1521],{"class":59},[49,2108,2109],{"class":55},"score;\n",[49,2111,2112,2115],{"class":51,"line":1409},[49,2113,2114],{"class":59},"    switch",[49,2116,2117],{"class":55},"(score)\n",[49,2119,2120],{"class":51,"line":1421},[49,2121,2122],{"class":55},"    {\n",[49,2124,2125,2128,2131,2134,2136,2139,2141,2143,2146],{"class":51,"line":1704},[49,2126,2127],{"class":59},"        case",[49,2129,2130],{"class":66}," 10",[49,2132,2133],{"class":55},":cout",[49,2135,1263],{"class":59},[49,2137,2138],{"class":328},"\"经典\"",[49,2140,1263],{"class":59},[49,2142,1330],{"class":55},[49,2144,2145],{"class":59},"break",[49,2147,1382],{"class":55},[49,2149,2150,2152,2155,2157,2159,2161,2163,2165,2167],{"class":51,"line":1709},[49,2151,2127],{"class":59},[49,2153,2154],{"class":66}," 9",[49,2156,2133],{"class":55},[49,2158,1263],{"class":59},[49,2160,2138],{"class":328},[49,2162,1263],{"class":59},[49,2164,1330],{"class":55},[49,2166,2145],{"class":59},[49,2168,1382],{"class":55},[49,2170,2171,2173,2176,2178,2180,2183,2185,2187,2189],{"class":51,"line":1715},[49,2172,2127],{"class":59},[49,2174,2175],{"class":66}," 8",[49,2177,2133],{"class":55},[49,2179,1263],{"class":59},[49,2181,2182],{"class":328},"\"非常好\"",[49,2184,1263],{"class":59},[49,2186,1330],{"class":55},[49,2188,2145],{"class":59},[49,2190,1382],{"class":55},[49,2192,2193,2195,2198,2200,2202,2204,2206,2208,2210],{"class":51,"line":1720},[49,2194,2127],{"class":59},[49,2196,2197],{"class":66}," 7",[49,2199,2133],{"class":55},[49,2201,1263],{"class":59},[49,2203,2182],{"class":328},[49,2205,1263],{"class":59},[49,2207,1330],{"class":55},[49,2209,2145],{"class":59},[49,2211,1382],{"class":55},[49,2213,2214,2216,2219,2221,2223,2226,2228,2230,2232],{"class":51,"line":1734},[49,2215,2127],{"class":59},[49,2217,2218],{"class":66}," 6",[49,2220,2133],{"class":55},[49,2222,1263],{"class":59},[49,2224,2225],{"class":328},"\"一般\"",[49,2227,1263],{"class":59},[49,2229,1330],{"class":55},[49,2231,2145],{"class":59},[49,2233,1382],{"class":55},[49,2235,2236,2238,2241,2243,2245,2247,2249,2251,2253],{"class":51,"line":1739},[49,2237,2127],{"class":59},[49,2239,2240],{"class":66}," 5",[49,2242,2133],{"class":55},[49,2244,1263],{"class":59},[49,2246,2225],{"class":328},[49,2248,1263],{"class":59},[49,2250,1330],{"class":55},[49,2252,2145],{"class":59},[49,2254,1382],{"class":55},[49,2256,2257,2260,2262,2264,2267,2269,2271,2273],{"class":51,"line":1745},[49,2258,2259],{"class":59},"        default",[49,2261,2133],{"class":55},[49,2263,1263],{"class":59},[49,2265,2266],{"class":328},"\"烂片\"",[49,2268,1263],{"class":59},[49,2270,1330],{"class":55},[49,2272,2145],{"class":59},[49,2274,1382],{"class":55},[49,2276,2277],{"class":51,"line":1766},[49,2278,2279],{"class":55},"    }\n",[49,2281,2282],{"class":51,"line":1771},[49,2283,1657],{"class":55},[14,2285,2286],{},"if和switch区别：",[1226,2288,2289,2292],{},[181,2290,2291],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[181,2293,2294],{},"switch优点：结构清晰，执行效率高",[195,2296,2298],{"id":2297},"_162循环结构","1.6.2循环结构",[178,2300,2301],{},[181,2302,2303],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[39,2305,2307],{"className":216,"code":2306,"language":218,"meta":44,"style":44},"\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",[46,2308,2309,2314,2322,2326,2339,2353,2357,2377,2387,2391,2403],{"__ignoreMap":44},[49,2310,2311],{"class":51,"line":52},[49,2312,2313],{"class":283},"\u002F\u002F打印0-9数字\n",[49,2315,2316,2318,2320],{"class":51,"line":84},[49,2317,231],{"class":59},[49,2319,2065],{"class":2055},[49,2321,2068],{"class":55},[49,2323,2324],{"class":51,"line":109},[49,2325,1638],{"class":55},[49,2327,2328,2330,2333,2335,2337],{"class":51,"line":120},[49,2329,2077],{"class":59},[49,2331,2332],{"class":55}," num",[49,2334,60],{"class":59},[49,2336,415],{"class":66},[49,2338,1382],{"class":55},[49,2340,2341,2344,2347,2349,2351],{"class":51,"line":135},[49,2342,2343],{"class":59},"    while",[49,2345,2346],{"class":55},"(num",[49,2348,1129],{"class":59},[49,2350,95],{"class":66},[49,2352,81],{"class":55},[49,2354,2355],{"class":51,"line":1306},[49,2356,2122],{"class":55},[49,2358,2359,2362,2365,2367,2369,2371,2374],{"class":51,"line":1312},[49,2360,2361],{"class":2055},"       std",[49,2363,2364],{"class":55},"::cout",[49,2366,1263],{"class":59},[49,2368,1757],{"class":55},[49,2370,1263],{"class":59},[49,2372,2373],{"class":2055},"std",[49,2375,2376],{"class":55},"::endl;\n",[49,2378,2379,2382,2385],{"class":51,"line":1403},[49,2380,2381],{"class":55},"        num",[49,2383,2384],{"class":59},"++",[49,2386,1382],{"class":55},[49,2388,2389],{"class":51,"line":1409},[49,2390,2279],{"class":55},[49,2392,2393,2396,2398,2401],{"class":51,"line":1421},[49,2394,2395],{"class":2055},"    system",[49,2397,228],{"class":55},[49,2399,2400],{"class":328},"\"pause\"",[49,2402,81],{"class":55},[49,2404,2405],{"class":51,"line":1704},[49,2406,1657],{"class":55},[14,2408,2409],{},"注意：写好循环条件，避免死循环情况",[39,2411,2413],{"className":216,"code":2412,"language":218,"meta":44,"style":44},"\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",[46,2414,2415,2420,2427,2434,2444,2452,2456,2461,2488,2493,2498,2506,2533,2538,2543,2556,2566,2570,2580,2585,2598,2603,2617,2622,2637,2641,2654,2658,2663,2667,2681,2689,2694,2700,2706,2711],{"__ignoreMap":44},[49,2416,2417],{"class":51,"line":52},[49,2418,2419],{"class":283},"\u002F\u002F循环结构-猜数字\n",[49,2421,2422,2424],{"class":51,"line":84},[49,2423,2041],{"class":59},[49,2425,2426],{"class":328}," \u003Ciostream>\n",[49,2428,2429,2431],{"class":51,"line":109},[49,2430,2041],{"class":59},[49,2432,2433],{"class":328}," \u003Cctime>\n",[49,2435,2436,2438,2440,2442],{"class":51,"line":120},[49,2437,2049],{"class":59},[49,2439,2052],{"class":59},[49,2441,2056],{"class":2055},[49,2443,1382],{"class":55},[49,2445,2446,2448,2450],{"class":51,"line":135},[49,2447,231],{"class":59},[49,2449,2065],{"class":2055},[49,2451,2068],{"class":55},[49,2453,2454],{"class":51,"line":1306},[49,2455,1638],{"class":55},[49,2457,2458],{"class":51,"line":1312},[49,2459,2460],{"class":283},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[49,2462,2463,2466,2469,2472,2475,2477,2480,2482,2485],{"class":51,"line":1403},[49,2464,2465],{"class":2055},"    srand",[49,2467,2468],{"class":55},"((",[49,2470,2471],{"class":59},"unsigned",[49,2473,2474],{"class":59}," int",[49,2476,649],{"class":55},[49,2478,2479],{"class":2055},"time",[49,2481,228],{"class":55},[49,2483,2484],{"class":66},"NULL",[49,2486,2487],{"class":55},"));\n",[49,2489,2490],{"class":51,"line":1409},[49,2491,2492],{"emptyLinePlaceholder":151},"\n",[49,2494,2495],{"class":51,"line":1421},[49,2496,2497],{"class":283},"    \u002F\u002F1.系统生成随机数\n",[49,2499,2500,2503],{"class":51,"line":1704},[49,2501,2502],{"class":283},"    \u002F\u002Frand()%100",[49,2504,2505],{"class":283}," \u002F\u002F生成0-99的随机数\n",[49,2507,2508,2510,2512,2514,2517,2520,2522,2524,2526,2528,2530],{"class":51,"line":1709},[49,2509,2077],{"class":59},[49,2511,2332],{"class":55},[49,2513,60],{"class":59},[49,2515,2516],{"class":2055},"rand",[49,2518,2519],{"class":55},"()",[49,2521,550],{"class":59},[49,2523,533],{"class":66},[49,2525,700],{"class":59},[49,2527,441],{"class":66},[49,2529,280],{"class":55},[49,2531,2532],{"class":283}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[49,2534,2535],{"class":51,"line":1715},[49,2536,2537],{"class":283},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[49,2539,2540],{"class":51,"line":1720},[49,2541,2542],{"class":283},"    \u002F\u002F2.玩家猜测\n",[49,2544,2545,2547,2550,2552,2554],{"class":51,"line":1734},[49,2546,2077],{"class":59},[49,2548,2549],{"class":55}," val",[49,2551,60],{"class":59},[49,2553,415],{"class":66},[49,2555,1382],{"class":55},[49,2557,2558,2560,2562,2564],{"class":51,"line":1739},[49,2559,2343],{"class":59},[49,2561,1750],{"class":55},[49,2563,441],{"class":66},[49,2565,81],{"class":55},[49,2567,2568],{"class":51,"line":1745},[49,2569,2122],{"class":55},[49,2571,2572,2575,2577],{"class":51,"line":1766},[49,2573,2574],{"class":55},"        cin",[49,2576,1521],{"class":59},[49,2578,2579],{"class":55},"val;\n",[49,2581,2582],{"class":51,"line":1771},[49,2583,2584],{"class":283},"        \u002F\u002F3.判断玩家猜测\n",[49,2586,2587,2590,2593,2595],{"class":51,"line":1785},[49,2588,2589],{"class":59},"        if",[49,2591,2592],{"class":55},"(val",[49,2594,1129],{"class":59},[49,2596,2597],{"class":55},"num) \n",[49,2599,2600],{"class":51,"line":1790},[49,2601,2602],{"class":55},"        {\n",[49,2604,2605,2608,2610,2613,2615],{"class":51,"line":1819},[49,2606,2607],{"class":55},"            cout",[49,2609,1263],{"class":59},[49,2611,2612],{"class":328},"\"猜小了！\"",[49,2614,1263],{"class":59},[49,2616,1285],{"class":55},[49,2618,2619],{"class":51,"line":1824},[49,2620,2621],{"class":55},"        }\n",[49,2623,2624,2627,2629,2632,2634],{"class":51,"line":1841},[49,2625,2626],{"class":59},"        else",[49,2628,1796],{"class":59},[49,2630,2631],{"class":55}," (val",[49,2633,1179],{"class":59},[49,2635,2636],{"class":55},"num)\n",[49,2638,2639],{"class":51,"line":1846},[49,2640,2602],{"class":55},[49,2642,2643,2645,2647,2650,2652],{"class":51,"line":1851},[49,2644,2607],{"class":55},[49,2646,1263],{"class":59},[49,2648,2649],{"class":328},"\"猜大了！\"",[49,2651,1263],{"class":59},[49,2653,1285],{"class":55},[49,2655,2656],{"class":51,"line":1856},[49,2657,2621],{"class":55},[49,2659,2660],{"class":51,"line":1870},[49,2661,2662],{"class":59},"        else\n",[49,2664,2665],{"class":51,"line":1875},[49,2666,2602],{"class":55},[49,2668,2670,2672,2674,2677,2679],{"class":51,"line":2669},30,[49,2671,2607],{"class":55},[49,2673,1263],{"class":59},[49,2675,2676],{"class":328},"\"猜对了！\"",[49,2678,1263],{"class":59},[49,2680,1285],{"class":55},[49,2682,2684,2687],{"class":51,"line":2683},31,[49,2685,2686],{"class":59},"            break",[49,2688,1382],{"class":55},[49,2690,2692],{"class":51,"line":2691},32,[49,2693,2621],{"class":55},[49,2695,2697],{"class":51,"line":2696},33,[49,2698,2699],{"class":283},"        \u002F\u002F猜对 退出游戏\n",[49,2701,2703],{"class":51,"line":2702},34,[49,2704,2705],{"class":283},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[49,2707,2709],{"class":51,"line":2708},35,[49,2710,2279],{"class":55},[49,2712,2714],{"class":51,"line":2713},36,[49,2715,1657],{"class":55},[178,2717,2718],{"start":84},[181,2719,2720,2721,2724],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[373,2722,2723],{},"do...while会先执行一次循环语句","，在判断循环语句",[39,2726,2728],{"className":216,"code":2727,"language":218,"meta":44,"style":44},"\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",[46,2729,2730,2735,2743,2747,2759,2767,2771,2788,2795,2799,2812,2822],{"__ignoreMap":44},[49,2731,2732],{"class":51,"line":52},[49,2733,2734],{"class":283},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[49,2736,2737,2739,2741],{"class":51,"line":84},[49,2738,231],{"class":59},[49,2740,2065],{"class":2055},[49,2742,2068],{"class":55},[49,2744,2745],{"class":51,"line":109},[49,2746,1638],{"class":55},[49,2748,2749,2751,2753,2755,2757],{"class":51,"line":120},[49,2750,2077],{"class":59},[49,2752,2332],{"class":55},[49,2754,60],{"class":59},[49,2756,415],{"class":66},[49,2758,1382],{"class":55},[49,2760,2761,2764],{"class":51,"line":135},[49,2762,2763],{"class":59},"    do",[49,2765,2766],{"class":55}," \n",[49,2768,2769],{"class":51,"line":1306},[49,2770,2122],{"class":55},[49,2772,2773,2776,2778,2780,2782,2784,2786],{"class":51,"line":1312},[49,2774,2775],{"class":2055},"        std",[49,2777,2364],{"class":55},[49,2779,1263],{"class":59},[49,2781,1757],{"class":55},[49,2783,1263],{"class":59},[49,2785,2373],{"class":2055},[49,2787,2376],{"class":55},[49,2789,2790,2792],{"class":51,"line":1403},[49,2791,2381],{"class":55},[49,2793,2794],{"class":59},"++\n",[49,2796,2797],{"class":51,"line":1409},[49,2798,2279],{"class":55},[49,2800,2801,2803,2805,2807,2809],{"class":51,"line":1421},[49,2802,2343],{"class":59},[49,2804,2346],{"class":55},[49,2806,1129],{"class":59},[49,2808,95],{"class":66},[49,2810,2811],{"class":55},");\n",[49,2813,2814,2816,2818,2820],{"class":51,"line":1704},[49,2815,2395],{"class":2055},[49,2817,228],{"class":55},[49,2819,2400],{"class":328},[49,2821,2811],{"class":55},[49,2823,2824],{"class":51,"line":1709},[49,2825,1657],{"class":55},[14,2827,2828],{},"案例-水仙花数",[14,2830,2831],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2833,2834],{},"例如：1^3+5^3+3^3=153",[14,2836,2837],{},"请用do...while语句，求出所有3位数的水仙花数",[39,2839,2841],{"className":216,"code":2840,"language":218,"meta":44,"style":44},"#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",[46,2842,2843,2849,2859,2867,2871,2876,2888,2894,2898,2903,2919,2935,2951,2966,2985,3000,3048,3052,3064,3068,3076,3080,3094],{"__ignoreMap":44},[49,2844,2845,2847],{"class":51,"line":52},[49,2846,2041],{"class":59},[49,2848,2426],{"class":328},[49,2850,2851,2853,2855,2857],{"class":51,"line":84},[49,2852,2049],{"class":59},[49,2854,2052],{"class":59},[49,2856,2056],{"class":2055},[49,2858,1382],{"class":55},[49,2860,2861,2863,2865],{"class":51,"line":109},[49,2862,231],{"class":59},[49,2864,2065],{"class":2055},[49,2866,2068],{"class":55},[49,2868,2869],{"class":51,"line":120},[49,2870,1638],{"class":55},[49,2872,2873],{"class":51,"line":135},[49,2874,2875],{"class":283},"    \u002F\u002F1.先打印所有三位数字\n",[49,2877,2878,2880,2882,2884,2886],{"class":51,"line":1306},[49,2879,2077],{"class":59},[49,2881,2332],{"class":55},[49,2883,60],{"class":59},[49,2885,533],{"class":66},[49,2887,1382],{"class":55},[49,2889,2890,2892],{"class":51,"line":1312},[49,2891,2763],{"class":59},[49,2893,2766],{"class":55},[49,2895,2896],{"class":51,"line":1403},[49,2897,2122],{"class":55},[49,2899,2900],{"class":51,"line":1409},[49,2901,2902],{"class":283},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[49,2904,2905,2908,2910,2912,2914,2916],{"class":51,"line":1421},[49,2906,2907],{"class":59},"        int",[49,2909,1490],{"class":55},[49,2911,60],{"class":59},[49,2913,415],{"class":66},[49,2915,280],{"class":55},[49,2917,2918],{"class":283}," \u002F\u002F个位\n",[49,2920,2921,2923,2926,2928,2930,2932],{"class":51,"line":1704},[49,2922,2907],{"class":59},[49,2924,2925],{"class":55}," b",[49,2927,60],{"class":59},[49,2929,415],{"class":66},[49,2931,280],{"class":55},[49,2933,2934],{"class":283}," \u002F\u002F十位\n",[49,2936,2937,2939,2942,2944,2946,2948],{"class":51,"line":1709},[49,2938,2907],{"class":59},[49,2940,2941],{"class":55}," c",[49,2943,60],{"class":59},[49,2945,415],{"class":66},[49,2947,280],{"class":55},[49,2949,2950],{"class":283}," \u002F\u002F百位\n",[49,2952,2953,2956,2958,2960,2962,2964],{"class":51,"line":1715},[49,2954,2955],{"class":55},"        a",[49,2957,60],{"class":59},[49,2959,1757],{"class":55},[49,2961,550],{"class":59},[49,2963,95],{"class":66},[49,2965,1382],{"class":55},[49,2967,2968,2971,2973,2975,2977,2979,2981,2983],{"class":51,"line":1720},[49,2969,2970],{"class":55},"        b",[49,2972,60],{"class":59},[49,2974,1757],{"class":55},[49,2976,803],{"class":59},[49,2978,95],{"class":66},[49,2980,550],{"class":59},[49,2982,95],{"class":66},[49,2984,1382],{"class":55},[49,2986,2987,2990,2992,2994,2996,2998],{"class":51,"line":1734},[49,2988,2989],{"class":55},"        c",[49,2991,60],{"class":59},[49,2993,1757],{"class":55},[49,2995,803],{"class":59},[49,2997,533],{"class":66},[49,2999,1382],{"class":55},[49,3001,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3039,3042,3045],{"class":51,"line":1739},[49,3003,2589],{"class":59},[49,3005,1933],{"class":55},[49,3007,674],{"class":59},[49,3009,56],{"class":55},[49,3011,674],{"class":59},[49,3013,56],{"class":55},[49,3015,700],{"class":59},[49,3017,87],{"class":55},[49,3019,674],{"class":59},[49,3021,87],{"class":55},[49,3023,674],{"class":59},[49,3025,87],{"class":55},[49,3027,700],{"class":59},[49,3029,510],{"class":55},[49,3031,674],{"class":59},[49,3033,510],{"class":55},[49,3035,674],{"class":59},[49,3037,3038],{"class":55},"c ",[49,3040,3041],{"class":59},"==",[49,3043,3044],{"class":55}," num)",[49,3046,3047],{"class":283}," \u002F\u002F如果是水仙花数，才打印\n",[49,3049,3050],{"class":51,"line":1745},[49,3051,2602],{"class":55},[49,3053,3054,3056,3058,3060,3062],{"class":51,"line":1766},[49,3055,2607],{"class":55},[49,3057,1263],{"class":59},[49,3059,1757],{"class":55},[49,3061,1263],{"class":59},[49,3063,1285],{"class":55},[49,3065,3066],{"class":51,"line":1771},[49,3067,2621],{"class":55},[49,3069,3070,3072,3074],{"class":51,"line":1785},[49,3071,2381],{"class":55},[49,3073,2384],{"class":59},[49,3075,1382],{"class":55},[49,3077,3078],{"class":51,"line":1790},[49,3079,2279],{"class":55},[49,3081,3082,3084,3087,3089,3092],{"class":51,"line":1819},[49,3083,2343],{"class":59},[49,3085,3086],{"class":55}," (num ",[49,3088,1129],{"class":59},[49,3090,3091],{"class":66}," 1000",[49,3093,2811],{"class":55},[49,3095,3096],{"class":51,"line":1824},[49,3097,1657],{"class":55},[178,3099,3100],{"start":109},[181,3101,3102],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[39,3104,3106],{"className":216,"code":3105,"language":218,"meta":44,"style":44},"\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",[46,3107,3108,3113,3142,3146,3158,3162,3167,3178,3185,3189,3203,3207,3214,3218,3230,3239],{"__ignoreMap":44},[49,3109,3110],{"class":51,"line":52},[49,3111,3112],{"class":283},"\u002F\u002F从数字0-9打印\n",[49,3114,3115,3118,3120,3122,3125,3127,3129,3132,3134,3136,3138,3140],{"class":51,"line":84},[49,3116,3117],{"class":59},"for",[49,3119,228],{"class":55},[49,3121,231],{"class":59},[49,3123,3124],{"class":55}," i",[49,3126,60],{"class":59},[49,3128,415],{"class":66},[49,3130,3131],{"class":55},";i",[49,3133,1129],{"class":59},[49,3135,95],{"class":66},[49,3137,3131],{"class":55},[49,3139,2384],{"class":59},[49,3141,81],{"class":55},[49,3143,3144],{"class":51,"line":109},[49,3145,1638],{"class":55},[49,3147,3148,3150,3152,3154,3156],{"class":51,"line":120},[49,3149,1643],{"class":55},[49,3151,1263],{"class":59},[49,3153,661],{"class":55},[49,3155,1263],{"class":59},[49,3157,1285],{"class":55},[49,3159,3160],{"class":51,"line":135},[49,3161,1657],{"class":55},[49,3163,3164],{"class":51,"line":1306},[49,3165,3166],{"class":283},"\u002F\u002F上式可以进行拆分\n",[49,3168,3169,3171,3173,3175],{"class":51,"line":1312},[49,3170,231],{"class":59},[49,3172,3124],{"class":55},[49,3174,60],{"class":59},[49,3176,3177],{"class":66},"0\n",[49,3179,3180,3182],{"class":51,"line":1403},[49,3181,3117],{"class":59},[49,3183,3184],{"class":55},"(;;;)\n",[49,3186,3187],{"class":51,"line":1409},[49,3188,1638],{"class":55},[49,3190,3191,3194,3197,3199,3201],{"class":51,"line":1421},[49,3192,3193],{"class":59},"    if",[49,3195,3196],{"class":55},"(i",[49,3198,1802],{"class":59},[49,3200,95],{"class":66},[49,3202,81],{"class":55},[49,3204,3205],{"class":51,"line":1704},[49,3206,2122],{"class":55},[49,3208,3209,3212],{"class":51,"line":1709},[49,3210,3211],{"class":59},"        break",[49,3213,1382],{"class":55},[49,3215,3216],{"class":51,"line":1715},[49,3217,2279],{"class":55},[49,3219,3220,3222,3224,3226,3228],{"class":51,"line":1720},[49,3221,1643],{"class":55},[49,3223,1263],{"class":59},[49,3225,661],{"class":55},[49,3227,1263],{"class":59},[49,3229,1285],{"class":55},[49,3231,3232,3235,3237],{"class":51,"line":1734},[49,3233,3234],{"class":55},"    i",[49,3236,2384],{"class":59},[49,3238,1382],{"class":55},[49,3240,3241],{"class":51,"line":1739},[49,3242,1657],{"class":55},[14,3244,3245],{},"小练习",[39,3247,3249],{"className":216,"code":3248,"language":218,"meta":44,"style":44},"#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",[46,3250,3251,3257,3267,3275,3279,3284,3289,3317,3321,3326,3331,3372,3376,3389,3393,3397,3401,3413,3417,3421],{"__ignoreMap":44},[49,3252,3253,3255],{"class":51,"line":52},[49,3254,2041],{"class":59},[49,3256,2044],{"class":328},[49,3258,3259,3261,3263,3265],{"class":51,"line":84},[49,3260,2049],{"class":59},[49,3262,2052],{"class":59},[49,3264,2056],{"class":2055},[49,3266,1382],{"class":55},[49,3268,3269,3271,3273],{"class":51,"line":109},[49,3270,231],{"class":59},[49,3272,2065],{"class":2055},[49,3274,2068],{"class":55},[49,3276,3277],{"class":51,"line":120},[49,3278,1638],{"class":55},[49,3280,3281],{"class":51,"line":135},[49,3282,3283],{"class":283},"    \u002F\u002F敲桌子案例\n",[49,3285,3286],{"class":51,"line":1306},[49,3287,3288],{"class":283},"    \u002F\u002F1.先输出1-100的数字\n",[49,3290,3291,3294,3296,3298,3300,3302,3304,3307,3309,3311,3313,3315],{"class":51,"line":1312},[49,3292,3293],{"class":59},"    for",[49,3295,228],{"class":55},[49,3297,231],{"class":59},[49,3299,3124],{"class":55},[49,3301,60],{"class":59},[49,3303,441],{"class":66},[49,3305,3306],{"class":55},"; i",[49,3308,1680],{"class":59},[49,3310,533],{"class":66},[49,3312,3306],{"class":55},[49,3314,2384],{"class":59},[49,3316,81],{"class":55},[49,3318,3319],{"class":51,"line":1403},[49,3320,2122],{"class":55},[49,3322,3323],{"class":51,"line":1409},[49,3324,3325],{"class":283},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[49,3327,3328],{"class":51,"line":1421},[49,3329,3330],{"class":283},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[49,3332,3333,3335,3337,3339,3341,3343,3345,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370],{"class":51,"line":1704},[49,3334,2589],{"class":59},[49,3336,3196],{"class":55},[49,3338,550],{"class":59},[49,3340,591],{"class":66},[49,3342,3041],{"class":59},[49,3344,415],{"class":66},[49,3346,3347],{"class":59}," ||",[49,3349,3124],{"class":55},[49,3351,550],{"class":59},[49,3353,95],{"class":66},[49,3355,3041],{"class":59},[49,3357,591],{"class":66},[49,3359,3347],{"class":59},[49,3361,3124],{"class":55},[49,3363,803],{"class":59},[49,3365,95],{"class":66},[49,3367,3041],{"class":59},[49,3369,591],{"class":66},[49,3371,81],{"class":55},[49,3373,3374],{"class":51,"line":1709},[49,3375,2602],{"class":55},[49,3377,3378,3380,3382,3385,3387],{"class":51,"line":1715},[49,3379,2607],{"class":55},[49,3381,1263],{"class":59},[49,3383,3384],{"class":328},"\"敲桌子\"",[49,3386,1263],{"class":59},[49,3388,1285],{"class":55},[49,3390,3391],{"class":51,"line":1720},[49,3392,2621],{"class":55},[49,3394,3395],{"class":51,"line":1734},[49,3396,2662],{"class":59},[49,3398,3399],{"class":51,"line":1739},[49,3400,2602],{"class":55},[49,3402,3403,3405,3407,3409,3411],{"class":51,"line":1745},[49,3404,2607],{"class":55},[49,3406,1263],{"class":59},[49,3408,661],{"class":55},[49,3410,1263],{"class":59},[49,3412,1285],{"class":55},[49,3414,3415],{"class":51,"line":1766},[49,3416,2621],{"class":55},[49,3418,3419],{"class":51,"line":1771},[49,3420,2279],{"class":55},[49,3422,3423],{"class":51,"line":1785},[49,3424,1657],{"class":55},[14,3426,3427],{},"嵌套实现星图",[39,3429,3431],{"className":216,"code":3430,"language":218,"meta":44,"style":44},"#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",[46,3432,3433,3439,3449,3457,3461,3487,3491,3520,3524,3535,3539,3548,3552],{"__ignoreMap":44},[49,3434,3435,3437],{"class":51,"line":52},[49,3436,2041],{"class":59},[49,3438,2044],{"class":328},[49,3440,3441,3443,3445,3447],{"class":51,"line":84},[49,3442,2049],{"class":59},[49,3444,2052],{"class":59},[49,3446,2056],{"class":2055},[49,3448,1382],{"class":55},[49,3450,3451,3453,3455],{"class":51,"line":109},[49,3452,231],{"class":59},[49,3454,2065],{"class":2055},[49,3456,2068],{"class":55},[49,3458,3459],{"class":51,"line":120},[49,3460,1638],{"class":55},[49,3462,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485],{"class":51,"line":135},[49,3464,3293],{"class":59},[49,3466,1750],{"class":55},[49,3468,231],{"class":59},[49,3470,3124],{"class":55},[49,3472,60],{"class":59},[49,3474,415],{"class":66},[49,3476,3131],{"class":55},[49,3478,1129],{"class":59},[49,3480,95],{"class":66},[49,3482,3131],{"class":55},[49,3484,2384],{"class":59},[49,3486,81],{"class":55},[49,3488,3489],{"class":51,"line":1306},[49,3490,2122],{"class":55},[49,3492,3493,3496,3498,3500,3503,3505,3507,3510,3512,3514,3516,3518],{"class":51,"line":1312},[49,3494,3495],{"class":59},"        for",[49,3497,1750],{"class":55},[49,3499,231],{"class":59},[49,3501,3502],{"class":55}," j",[49,3504,60],{"class":59},[49,3506,415],{"class":66},[49,3508,3509],{"class":55},";j",[49,3511,1129],{"class":59},[49,3513,95],{"class":66},[49,3515,3509],{"class":55},[49,3517,2384],{"class":59},[49,3519,81],{"class":55},[49,3521,3522],{"class":51,"line":1403},[49,3523,2602],{"class":55},[49,3525,3526,3528,3530,3533],{"class":51,"line":1409},[49,3527,2607],{"class":55},[49,3529,1263],{"class":59},[49,3531,3532],{"class":328},"\"*\"",[49,3534,1382],{"class":55},[49,3536,3537],{"class":51,"line":1421},[49,3538,2621],{"class":55},[49,3540,3541,3544,3546],{"class":51,"line":1704},[49,3542,3543],{"class":55},"        cout",[49,3545,1263],{"class":59},[49,3547,1285],{"class":55},[49,3549,3550],{"class":51,"line":1709},[49,3551,2279],{"class":55},[49,3553,3554],{"class":51,"line":1715},[49,3555,1657],{"class":55},[14,3557,3558],{},"乘法口诀表",[39,3560,3562],{"className":216,"code":3561,"language":218,"meta":44,"style":44},"#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",[46,3563,3564,3570,3580,3588,3592,3618,3622,3647,3651,3691,3695,3703,3707],{"__ignoreMap":44},[49,3565,3566,3568],{"class":51,"line":52},[49,3567,2041],{"class":59},[49,3569,2426],{"class":328},[49,3571,3572,3574,3576,3578],{"class":51,"line":84},[49,3573,2049],{"class":59},[49,3575,2052],{"class":59},[49,3577,2056],{"class":2055},[49,3579,1382],{"class":55},[49,3581,3582,3584,3586],{"class":51,"line":109},[49,3583,231],{"class":59},[49,3585,2065],{"class":2055},[49,3587,2068],{"class":55},[49,3589,3590],{"class":51,"line":120},[49,3591,1638],{"class":55},[49,3593,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616],{"class":51,"line":135},[49,3595,3293],{"class":59},[49,3597,228],{"class":55},[49,3599,231],{"class":59},[49,3601,3124],{"class":55},[49,3603,60],{"class":59},[49,3605,441],{"class":66},[49,3607,3131],{"class":55},[49,3609,1129],{"class":59},[49,3611,95],{"class":66},[49,3613,3131],{"class":55},[49,3615,2384],{"class":59},[49,3617,81],{"class":55},[49,3619,3620],{"class":51,"line":1306},[49,3621,2122],{"class":55},[49,3623,3624,3626,3628,3630,3632,3634,3636,3638,3640,3643,3645],{"class":51,"line":1312},[49,3625,3495],{"class":59},[49,3627,228],{"class":55},[49,3629,231],{"class":59},[49,3631,3502],{"class":55},[49,3633,60],{"class":59},[49,3635,441],{"class":66},[49,3637,3509],{"class":55},[49,3639,1680],{"class":59},[49,3641,3642],{"class":55},"i;j",[49,3644,2384],{"class":59},[49,3646,81],{"class":55},[49,3648,3649],{"class":51,"line":1403},[49,3650,2602],{"class":55},[49,3652,3653,3655,3657,3659,3661,3663,3665,3667,3669,3672,3674,3676,3678,3680,3682,3685,3687,3689],{"class":51,"line":1409},[49,3654,2607],{"class":55},[49,3656,1263],{"class":59},[49,3658,686],{"class":55},[49,3660,1263],{"class":59},[49,3662,3532],{"class":328},[49,3664,1263],{"class":59},[49,3666,661],{"class":55},[49,3668,1263],{"class":59},[49,3670,3671],{"class":328},"\"=\"",[49,3673,1263],{"class":59},[49,3675,661],{"class":55},[49,3677,674],{"class":59},[49,3679,686],{"class":55},[49,3681,1263],{"class":59},[49,3683,3684],{"class":328},"'",[49,3686,1322],{"class":66},[49,3688,3684],{"class":328},[49,3690,1382],{"class":55},[49,3692,3693],{"class":51,"line":1421},[49,3694,2621],{"class":55},[49,3696,3697,3699,3701],{"class":51,"line":1704},[49,3698,3543],{"class":55},[49,3700,1263],{"class":59},[49,3702,1285],{"class":55},[49,3704,3705],{"class":51,"line":1709},[49,3706,2279],{"class":55},[49,3708,3709],{"class":51,"line":1715},[49,3710,1657],{"class":55},[195,3712,3714],{"id":3713},"_163跳出语句","1.6.3跳出语句",[178,3716,3717],{},[181,3718,3719],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3721,3722],{},"break使用时机：",[1226,3724,3725,3728,3731],{},[181,3726,3727],{},"出现在switch条件语句中，作用是终止case并跳出switch",[181,3729,3730],{},"出现在循环结构中，作用是跳出当前的循环结构",[181,3732,3733],{},"出现在嵌套循环中，跳出最近的内层循环语句",[178,3735,3736,3739],{"start":84},[181,3737,3738],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[181,3740,3741],{},"goto语句\n语法：goto 标记;",[14,3743,3744],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[39,3746,3748],{"className":216,"code":3747,"language":218,"meta":44,"style":44},"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",[46,3749,3750,3758,3762,3775,3785,3798,3811,3824,3832,3848],{"__ignoreMap":44},[49,3751,3752,3754,3756],{"class":51,"line":52},[49,3753,231],{"class":59},[49,3755,2065],{"class":2055},[49,3757,2068],{"class":55},[49,3759,3760],{"class":51,"line":84},[49,3761,1638],{"class":55},[49,3763,3764,3766,3768,3771,3773],{"class":51,"line":109},[49,3765,1643],{"class":55},[49,3767,1263],{"class":59},[49,3769,3770],{"class":328},"\"1\"",[49,3772,1263],{"class":59},[49,3774,1285],{"class":55},[49,3776,3777,3780,3783],{"class":51,"line":120},[49,3778,3779],{"class":59},"    goto",[49,3781,3782],{"class":2055}," FLAG",[49,3784,1382],{"class":55},[49,3786,3787,3789,3791,3794,3796],{"class":51,"line":135},[49,3788,1643],{"class":55},[49,3790,1263],{"class":59},[49,3792,3793],{"class":328},"\"2\"",[49,3795,1263],{"class":59},[49,3797,1285],{"class":55},[49,3799,3800,3802,3804,3807,3809],{"class":51,"line":1306},[49,3801,1643],{"class":55},[49,3803,1263],{"class":59},[49,3805,3806],{"class":328},"\"3\"",[49,3808,1263],{"class":59},[49,3810,1285],{"class":55},[49,3812,3813,3815,3817,3820,3822],{"class":51,"line":1312},[49,3814,1643],{"class":55},[49,3816,1263],{"class":59},[49,3818,3819],{"class":328},"\"4\"",[49,3821,1263],{"class":59},[49,3823,1285],{"class":55},[49,3825,3826,3829],{"class":51,"line":1403},[49,3827,3828],{"class":2055},"    FLAG",[49,3830,3831],{"class":55},":\n",[49,3833,3834,3836,3838,3841,3843,3845],{"class":51,"line":1409},[49,3835,1643],{"class":55},[49,3837,1263],{"class":59},[49,3839,3840],{"class":328},"\"5\"",[49,3842,1263],{"class":59},[49,3844,1330],{"class":55},[49,3846,3847],{"class":283},"\u002F\u002F跳过了2,3,4,直接到5\n",[49,3849,3850],{"class":51,"line":1421},[49,3851,1657],{"class":55},[166,3853,3855],{"id":3854},"_17数组","1.7数组",[195,3857,3859],{"id":3858},"_171一维数组","1.7.1一维数组",[178,3861,3862],{},[181,3863,3864],{},"一维数组定义方式",[361,3866,3867,3877],{},[364,3868,3869],{},[367,3870,3871,3874],{},[370,3872,3873],{},"方式",[370,3875,3876],{},"注意事项",[408,3878,3879,3893,3903],{},[367,3880,3881,3887],{},[413,3882,3883,3884,280],{},"数据类型 数组名",[49,3885,3886],{},"数组长度",[413,3888,3889,3890,3892],{},"这种方式是先定义再arr",[49,3891,661],{},"赋值",[367,3894,3895,3900],{},[413,3896,3883,3897,3899],{},[49,3898,3886],{},"={值1,值2....};",[413,3901,3902],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[367,3904,3905,3909],{},[413,3906,3883,3907,3899],{},[49,3908],{},[413,3910,3911,3912,3914],{},"int arr",[49,3913],{},";这是不正确的，按照这样的方式定义必须有初始长度",[178,3916,3917],{"start":84},[181,3918,3919],{},"一维数组数组名\n用途：",[1226,3921,3922],{},[181,3923,3924],{},"1.可以统计整个数组在内存中的长度：",[39,3926,3928],{"className":216,"code":3927,"language":218,"meta":44,"style":44},"sizeof(arr);\nsizeof(arr[0]);\n",[46,3929,3930,3937],{"__ignoreMap":44},[49,3931,3932,3934],{"class":51,"line":52},[49,3933,225],{"class":59},[49,3935,3936],{"class":55},"(arr);\n",[49,3938,3939,3941,3944,3946],{"class":51,"line":84},[49,3940,225],{"class":59},[49,3942,3943],{"class":55},"(arr[",[49,3945,415],{"class":66},[49,3947,3948],{"class":55},"]);\n",[1226,3950,3951],{},[181,3952,3953],{},"2.可以获取数组在内存中的首地址:",[39,3955,3957],{"className":216,"code":3956,"language":218,"meta":44,"style":44},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[46,3958,3959,3964,3977,3982],{"__ignoreMap":44},[49,3960,3961],{"class":51,"line":52},[49,3962,3963],{"class":283},"\u002F\u002F查看16进制的首地址\n",[49,3965,3966,3968,3970,3973,3975],{"class":51,"line":84},[49,3967,1461],{"class":55},[49,3969,1263],{"class":59},[49,3971,3972],{"class":55},"arr",[49,3974,1263],{"class":59},[49,3976,1285],{"class":55},[49,3978,3979],{"class":51,"line":109},[49,3980,3981],{"class":283},"\u002F\u002F看10进制数\n",[49,3983,3984,3986,3988,3990,3992,3994,3996,3999,4001,4003,4005],{"class":51,"line":120},[49,3985,1461],{"class":55},[49,3987,1263],{"class":59},[49,3989,228],{"class":55},[49,3991,231],{"class":59},[49,3993,649],{"class":55},[49,3995,575],{"class":59},[49,3997,3998],{"class":55},"arr[",[49,4000,415],{"class":66},[49,4002,1159],{"class":55},[49,4004,1263],{"class":59},[49,4006,1285],{"class":55},[14,4008,4009],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1226,4011,4012],{},[181,4013,4014],{},"1️⃣五只小猪称体重",[39,4016,4018],{"className":216,"code":4017,"language":218,"meta":44,"style":44},"#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",[46,4019,4020,4026,4036,4044,4048,4088,4101,4127,4131,4143,4147,4157,4161,4165,4178,4188],{"__ignoreMap":44},[49,4021,4022,4024],{"class":51,"line":52},[49,4023,2041],{"class":59},[49,4025,2044],{"class":328},[49,4027,4028,4030,4032,4034],{"class":51,"line":84},[49,4029,2049],{"class":59},[49,4031,2052],{"class":59},[49,4033,2056],{"class":2055},[49,4035,1382],{"class":55},[49,4037,4038,4040,4042],{"class":51,"line":109},[49,4039,231],{"class":59},[49,4041,2065],{"class":2055},[49,4043,2068],{"class":55},[49,4045,4046],{"class":51,"line":120},[49,4047,1638],{"class":55},[49,4049,4050,4052,4055,4057,4059,4061,4063,4066,4068,4071,4073,4075,4077,4080,4082,4085],{"class":51,"line":135},[49,4051,2077],{"class":59},[49,4053,4054],{"class":55}," arr[",[49,4056,541],{"class":66},[49,4058,1159],{"class":55},[49,4060,60],{"class":59},[49,4062,1115],{"class":55},[49,4064,4065],{"class":66},"300",[49,4067,76],{"class":55},[49,4069,4070],{"class":66},"350",[49,4072,76],{"class":55},[49,4074,1814],{"class":66},[49,4076,76],{"class":55},[49,4078,4079],{"class":66},"400",[49,4081,76],{"class":55},[49,4083,4084],{"class":66},"250",[49,4086,4087],{"class":55},"};\n",[49,4089,4090,4092,4095,4097,4099],{"class":51,"line":1306},[49,4091,2077],{"class":59},[49,4093,4094],{"class":55}," tmp",[49,4096,60],{"class":59},[49,4098,415],{"class":66},[49,4100,1382],{"class":55},[49,4102,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125],{"class":51,"line":1312},[49,4104,3293],{"class":59},[49,4106,1750],{"class":55},[49,4108,231],{"class":59},[49,4110,3124],{"class":55},[49,4112,60],{"class":59},[49,4114,415],{"class":66},[49,4116,3131],{"class":55},[49,4118,1129],{"class":59},[49,4120,541],{"class":66},[49,4122,3131],{"class":55},[49,4124,2384],{"class":59},[49,4126,81],{"class":55},[49,4128,4129],{"class":51,"line":1403},[49,4130,2122],{"class":55},[49,4132,4133,4135,4138,4140],{"class":51,"line":1409},[49,4134,2589],{"class":59},[49,4136,4137],{"class":55},"(tmp",[49,4139,1129],{"class":59},[49,4141,4142],{"class":55},"arr[i])\n",[49,4144,4145],{"class":51,"line":1421},[49,4146,2602],{"class":55},[49,4148,4149,4152,4154],{"class":51,"line":1704},[49,4150,4151],{"class":55},"            tmp",[49,4153,60],{"class":59},[49,4155,4156],{"class":55},"arr[i];\n",[49,4158,4159],{"class":51,"line":1709},[49,4160,2621],{"class":55},[49,4162,4163],{"class":51,"line":1715},[49,4164,2279],{"class":55},[49,4166,4167,4169,4171,4174,4176],{"class":51,"line":1720},[49,4168,1643],{"class":55},[49,4170,1263],{"class":59},[49,4172,4173],{"class":55},"tmp",[49,4175,1263],{"class":59},[49,4177,1285],{"class":55},[49,4179,4180,4183,4186],{"class":51,"line":1734},[49,4181,4182],{"class":59},"    return",[49,4184,4185],{"class":66}," 0",[49,4187,1382],{"class":55},[49,4189,4190],{"class":51,"line":1739},[49,4191,1657],{"class":55},[1226,4193,4194],{},[181,4195,4196],{},"2️⃣数组元素逆置",[39,4198,4200],{"className":216,"code":4199,"language":218,"meta":44,"style":44},"\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",[46,4201,4202,4207,4213,4223,4231,4235,4270,4286,4318,4331,4336,4341,4353,4363,4373,4378,4387,4397,4402,4407,4434,4438,4454,4458,4469,4478],{"__ignoreMap":44},[49,4203,4204],{"class":51,"line":52},[49,4205,4206],{"class":283},"\u002F\u002F元素逆置\n",[49,4208,4209,4211],{"class":51,"line":84},[49,4210,2041],{"class":59},[49,4212,2044],{"class":328},[49,4214,4215,4217,4219,4221],{"class":51,"line":109},[49,4216,2049],{"class":59},[49,4218,2052],{"class":59},[49,4220,2056],{"class":2055},[49,4222,1382],{"class":55},[49,4224,4225,4227,4229],{"class":51,"line":120},[49,4226,231],{"class":59},[49,4228,2065],{"class":2055},[49,4230,2068],{"class":55},[49,4232,4233],{"class":51,"line":135},[49,4234,1638],{"class":55},[49,4236,4237,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4268],{"class":51,"line":1306},[49,4238,4239],{"class":59},"   int",[49,4241,4054],{"class":55},[49,4243,541],{"class":66},[49,4245,1159],{"class":55},[49,4247,60],{"class":59},[49,4249,1115],{"class":55},[49,4251,441],{"class":66},[49,4253,76],{"class":55},[49,4255,301],{"class":66},[49,4257,76],{"class":55},[49,4259,73],{"class":66},[49,4261,76],{"class":55},[49,4263,515],{"class":66},[49,4265,76],{"class":55},[49,4267,541],{"class":66},[49,4269,4087],{"class":55},[49,4271,4272,4274,4277,4279,4281,4283],{"class":51,"line":1312},[49,4273,4239],{"class":59},[49,4275,4276],{"class":55}," start",[49,4278,60],{"class":59},[49,4280,415],{"class":66},[49,4282,280],{"class":55},[49,4284,4285],{"class":283},"\u002F\u002F起始下标\n",[49,4287,4288,4290,4293,4296,4299,4302,4304,4306,4309,4311,4313,4315],{"class":51,"line":1403},[49,4289,4239],{"class":59},[49,4291,4292],{"class":55}," end",[49,4294,4295],{"class":59},"=sizeof",[49,4297,4298],{"class":55},"(arr)",[49,4300,4301],{"class":59},"\u002Fsizeof",[49,4303,3943],{"class":55},[49,4305,415],{"class":66},[49,4307,4308],{"class":55},"])",[49,4310,751],{"class":59},[49,4312,441],{"class":66},[49,4314,280],{"class":55},[49,4316,4317],{"class":283},"\u002F\u002F结束下标\n",[49,4319,4320,4323,4326,4328],{"class":51,"line":1409},[49,4321,4322],{"class":59},"   while",[49,4324,4325],{"class":55}," (start",[49,4327,1129],{"class":59},[49,4329,4330],{"class":55},"end)\n",[49,4332,4333],{"class":51,"line":1421},[49,4334,4335],{"class":55},"   {\n",[49,4337,4338],{"class":51,"line":1704},[49,4339,4340],{"class":283},"    \u002F\u002F实现元素互换代码\n",[49,4342,4343,4345,4348,4350],{"class":51,"line":1709},[49,4344,2077],{"class":59},[49,4346,4347],{"class":55}," temp",[49,4349,60],{"class":59},[49,4351,4352],{"class":55},"arr[start];\n",[49,4354,4355,4358,4360],{"class":51,"line":1715},[49,4356,4357],{"class":55},"    arr[start]",[49,4359,60],{"class":59},[49,4361,4362],{"class":55},"arr[end];\n",[49,4364,4365,4368,4370],{"class":51,"line":1720},[49,4366,4367],{"class":55},"    arr[end]",[49,4369,60],{"class":59},[49,4371,4372],{"class":55},"temp;\n",[49,4374,4375],{"class":51,"line":1734},[49,4376,4377],{"class":283},"    \u002F\u002F下标更新\n",[49,4379,4380,4383,4385],{"class":51,"line":1739},[49,4381,4382],{"class":55},"    start",[49,4384,2384],{"class":59},[49,4386,1382],{"class":55},[49,4388,4389,4392,4395],{"class":51,"line":1745},[49,4390,4391],{"class":55},"    end",[49,4393,4394],{"class":59},"--",[49,4396,1382],{"class":55},[49,4398,4399],{"class":51,"line":1766},[49,4400,4401],{"class":55},"   }\n",[49,4403,4404],{"class":51,"line":1771},[49,4405,4406],{"class":283},"   \u002F\u002F输出逆置后的数组\n",[49,4408,4409,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432],{"class":51,"line":1785},[49,4410,4411],{"class":59},"   for",[49,4413,1750],{"class":55},[49,4415,231],{"class":59},[49,4417,3124],{"class":55},[49,4419,60],{"class":59},[49,4421,415],{"class":66},[49,4423,3131],{"class":55},[49,4425,1129],{"class":59},[49,4427,541],{"class":66},[49,4429,3131],{"class":55},[49,4431,2384],{"class":59},[49,4433,81],{"class":55},[49,4435,4436],{"class":51,"line":1790},[49,4437,4335],{"class":55},[49,4439,4440,4442,4444,4447,4449,4452],{"class":51,"line":1819},[49,4441,1643],{"class":55},[49,4443,1263],{"class":59},[49,4445,4446],{"class":55},"arr[i]",[49,4448,1263],{"class":59},[49,4450,4451],{"class":328},"\" \"",[49,4453,1382],{"class":55},[49,4455,4456],{"class":51,"line":1824},[49,4457,4401],{"class":55},[49,4459,4460,4463,4465,4467],{"class":51,"line":1841},[49,4461,4462],{"class":2055},"   system",[49,4464,228],{"class":55},[49,4466,2400],{"class":328},[49,4468,2811],{"class":55},[49,4470,4471,4474,4476],{"class":51,"line":1846},[49,4472,4473],{"class":59},"   return",[49,4475,4185],{"class":66},[49,4477,1382],{"class":55},[49,4479,4480],{"class":51,"line":1851},[49,4481,1657],{"class":55},[1226,4483,4484],{},[181,4485,4486],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[39,4488,4490],{"className":216,"code":4489,"language":218,"meta":44,"style":44},"\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",[46,4491,4492,4497,4503,4513,4521,4525,4577,4590,4616,4620,4634,4638,4643,4648,4678,4682,4687,4721,4725,4730,4749,4754,4766,4782,4797,4802,4806,4810,4823,4849,4853,4867,4871,4879],{"__ignoreMap":44},[49,4493,4494],{"class":51,"line":52},[49,4495,4496],{"class":283},"\u002F\u002F冒泡排序,升序\n",[49,4498,4499,4501],{"class":51,"line":84},[49,4500,2041],{"class":59},[49,4502,2044],{"class":328},[49,4504,4505,4507,4509,4511],{"class":51,"line":109},[49,4506,2049],{"class":59},[49,4508,2052],{"class":59},[49,4510,2056],{"class":2055},[49,4512,1382],{"class":55},[49,4514,4515,4517,4519],{"class":51,"line":120},[49,4516,231],{"class":59},[49,4518,2065],{"class":2055},[49,4520,2068],{"class":55},[49,4522,4523],{"class":51,"line":135},[49,4524,1638],{"class":55},[49,4526,4527,4529,4531,4533,4536,4538,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575],{"class":51,"line":1306},[49,4528,2077],{"class":59},[49,4530,4054],{"class":55},[49,4532,67],{"class":66},[49,4534,4535],{"class":55},"] ",[49,4537,60],{"class":59},[49,4539,4540],{"class":55}," {",[49,4542,515],{"class":66},[49,4544,76],{"class":55},[49,4546,301],{"class":66},[49,4548,76],{"class":55},[49,4550,616],{"class":66},[49,4552,76],{"class":55},[49,4554,415],{"class":66},[49,4556,76],{"class":55},[49,4558,541],{"class":66},[49,4560,76],{"class":55},[49,4562,591],{"class":66},[49,4564,76],{"class":55},[49,4566,441],{"class":66},[49,4568,76],{"class":55},[49,4570,73],{"class":66},[49,4572,76],{"class":55},[49,4574,67],{"class":66},[49,4576,4087],{"class":55},[49,4578,4579,4581,4583,4586,4588],{"class":51,"line":1312},[49,4580,1643],{"class":55},[49,4582,1263],{"class":59},[49,4584,4585],{"class":328},"\"排序前：\"",[49,4587,1263],{"class":59},[49,4589,1285],{"class":55},[49,4591,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614],{"class":51,"line":1403},[49,4593,3293],{"class":59},[49,4595,1750],{"class":55},[49,4597,231],{"class":59},[49,4599,3124],{"class":55},[49,4601,60],{"class":59},[49,4603,415],{"class":66},[49,4605,3131],{"class":55},[49,4607,1129],{"class":59},[49,4609,67],{"class":66},[49,4611,3131],{"class":55},[49,4613,2384],{"class":59},[49,4615,81],{"class":55},[49,4617,4618],{"class":51,"line":1409},[49,4619,2122],{"class":55},[49,4621,4622,4624,4626,4628,4630,4632],{"class":51,"line":1421},[49,4623,3543],{"class":55},[49,4625,1263],{"class":59},[49,4627,4446],{"class":55},[49,4629,1263],{"class":59},[49,4631,4451],{"class":328},[49,4633,1382],{"class":55},[49,4635,4636],{"class":51,"line":1704},[49,4637,2279],{"class":55},[49,4639,4640],{"class":51,"line":1709},[49,4641,4642],{"class":283},"    \u002F\u002F开始冒泡排序\n",[49,4644,4645],{"class":51,"line":1715},[49,4646,4647],{"class":283},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[49,4649,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674,4676],{"class":51,"line":1720},[49,4651,3293],{"class":59},[49,4653,1750],{"class":55},[49,4655,231],{"class":59},[49,4657,3124],{"class":55},[49,4659,60],{"class":59},[49,4661,415],{"class":66},[49,4663,3131],{"class":55},[49,4665,1129],{"class":59},[49,4667,67],{"class":66},[49,4669,751],{"class":59},[49,4671,441],{"class":66},[49,4673,3131],{"class":55},[49,4675,2384],{"class":59},[49,4677,81],{"class":55},[49,4679,4680],{"class":51,"line":1734},[49,4681,2122],{"class":55},[49,4683,4684],{"class":51,"line":1739},[49,4685,4686],{"class":283},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[49,4688,4689,4691,4693,4695,4697,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719],{"class":51,"line":1745},[49,4690,3495],{"class":59},[49,4692,1750],{"class":55},[49,4694,231],{"class":59},[49,4696,3502],{"class":55},[49,4698,60],{"class":59},[49,4700,415],{"class":66},[49,4702,3509],{"class":55},[49,4704,1129],{"class":59},[49,4706,67],{"class":66},[49,4708,751],{"class":59},[49,4710,661],{"class":55},[49,4712,751],{"class":59},[49,4714,441],{"class":66},[49,4716,3509],{"class":55},[49,4718,2384],{"class":59},[49,4720,81],{"class":55},[49,4722,4723],{"class":51,"line":1766},[49,4724,2602],{"class":55},[49,4726,4727],{"class":51,"line":1771},[49,4728,4729],{"class":283},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[49,4731,4732,4735,4738,4740,4743,4745,4747],{"class":51,"line":1785},[49,4733,4734],{"class":59},"            if",[49,4736,4737],{"class":55},"(arr[j]",[49,4739,1179],{"class":59},[49,4741,4742],{"class":55},"arr[j",[49,4744,700],{"class":59},[49,4746,441],{"class":66},[49,4748,106],{"class":55},[49,4750,4751],{"class":51,"line":1790},[49,4752,4753],{"class":55},"            {\n",[49,4755,4756,4759,4761,4763],{"class":51,"line":1819},[49,4757,4758],{"class":59},"                int",[49,4760,4347],{"class":55},[49,4762,60],{"class":59},[49,4764,4765],{"class":55},"arr[j];\n",[49,4767,4768,4771,4773,4775,4777,4779],{"class":51,"line":1824},[49,4769,4770],{"class":55},"                arr[j]",[49,4772,60],{"class":59},[49,4774,4742],{"class":55},[49,4776,700],{"class":59},[49,4778,441],{"class":66},[49,4780,4781],{"class":55},"];\n",[49,4783,4784,4787,4789,4791,4793,4795],{"class":51,"line":1841},[49,4785,4786],{"class":55},"                arr[j",[49,4788,700],{"class":59},[49,4790,441],{"class":66},[49,4792,1159],{"class":55},[49,4794,60],{"class":59},[49,4796,4372],{"class":55},[49,4798,4799],{"class":51,"line":1846},[49,4800,4801],{"class":55},"            }\n",[49,4803,4804],{"class":51,"line":1851},[49,4805,2621],{"class":55},[49,4807,4808],{"class":51,"line":1856},[49,4809,2279],{"class":55},[49,4811,4812,4814,4816,4819,4821],{"class":51,"line":1870},[49,4813,1643],{"class":55},[49,4815,1263],{"class":59},[49,4817,4818],{"class":328},"\"排序后：\"",[49,4820,1263],{"class":59},[49,4822,1285],{"class":55},[49,4824,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847],{"class":51,"line":1875},[49,4826,3293],{"class":59},[49,4828,1750],{"class":55},[49,4830,231],{"class":59},[49,4832,3124],{"class":55},[49,4834,60],{"class":59},[49,4836,415],{"class":66},[49,4838,3131],{"class":55},[49,4840,1129],{"class":59},[49,4842,67],{"class":66},[49,4844,3131],{"class":55},[49,4846,2384],{"class":59},[49,4848,81],{"class":55},[49,4850,4851],{"class":51,"line":2669},[49,4852,2122],{"class":55},[49,4854,4855,4857,4859,4861,4863,4865],{"class":51,"line":2683},[49,4856,3543],{"class":55},[49,4858,1263],{"class":59},[49,4860,4446],{"class":55},[49,4862,1263],{"class":59},[49,4864,4451],{"class":328},[49,4866,1382],{"class":55},[49,4868,4869],{"class":51,"line":2691},[49,4870,2279],{"class":55},[49,4872,4873,4875,4877],{"class":51,"line":2696},[49,4874,4182],{"class":59},[49,4876,4185],{"class":66},[49,4878,1382],{"class":55},[49,4880,4881],{"class":51,"line":2702},[49,4882,1657],{"class":55},[195,4884,4886],{"id":4885},"_172二维数组","1.7.2二维数组",[178,4888,4889],{},[181,4890,4891],{},"二维数组的四种定义方式",[361,4893,4894,4903],{},[364,4895,4896],{},[367,4897,4898,4901],{},[370,4899,4900],{},"序号",[370,4902,3873],{},[408,4904,4905,4915,4924,4933,4942],{},[367,4906,4907,4909],{},[413,4908,441],{},[413,4910,4911,4912,280],{},"数据类型 数组名[行数]",[49,4913,4914],{},"列数",[367,4916,4917,4919],{},[413,4918,301],{},[413,4920,4911,4921,4923],{},[49,4922,4914],{},"={ {数据1,数据2}，{数据3，数据4}... }",[367,4925,4926,4928],{},[413,4927,73],{},[413,4929,4911,4930,4932],{},[49,4931,4914],{},"={数据1,数据2,数据3...}",[367,4934,4935,4937],{},[413,4936,515],{},[413,4938,4939,4940,4932],{},"数据类型 数组名[]",[49,4941,4914],{},[367,4943,4944,4947],{},[413,4945,4946],{},"注意：不能只省略列数",[413,4948],{},[178,4950,4951],{"start":84},[181,4952,4953],{},"二维数组数组名",[1226,4955,4956,4959],{},[181,4957,4958],{},"1.查看二维数组所占内存空间",[181,4960,4961],{},"2.获取二维数组首地址",[14,4963,4964],{},"已知二维数组，求二维数组的行数与列数",[39,4966,4968],{"className":216,"code":4967,"language":218,"meta":44,"style":44},"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",[46,4969,4970,4978,4982,5000,5004,5022,5038,5043,5068,5101],{"__ignoreMap":44},[49,4971,4972,4974,4976],{"class":51,"line":52},[49,4973,231],{"class":59},[49,4975,2065],{"class":2055},[49,4977,2068],{"class":55},[49,4979,4980],{"class":51,"line":84},[49,4981,1638],{"class":55},[49,4983,4984,4986,4988,4990,4993,4995,4997],{"class":51,"line":109},[49,4985,2077],{"class":59},[49,4987,4054],{"class":55},[49,4989,301],{"class":66},[49,4991,4992],{"class":55},"][",[49,4994,73],{"class":66},[49,4996,1159],{"class":55},[49,4998,4999],{"class":59},"=\n",[49,5001,5002],{"class":51,"line":120},[49,5003,2122],{"class":55},[49,5005,5006,5009,5011,5013,5015,5017,5019],{"class":51,"line":135},[49,5007,5008],{"class":55},"        {",[49,5010,441],{"class":66},[49,5012,76],{"class":55},[49,5014,301],{"class":66},[49,5016,76],{"class":55},[49,5018,73],{"class":66},[49,5020,5021],{"class":55},"},\n",[49,5023,5024,5026,5028,5030,5032,5034,5036],{"class":51,"line":1306},[49,5025,5008],{"class":55},[49,5027,515],{"class":66},[49,5029,76],{"class":55},[49,5031,541],{"class":66},[49,5033,76],{"class":55},[49,5035,566],{"class":66},[49,5037,1657],{"class":55},[49,5039,5040],{"class":51,"line":1312},[49,5041,5042],{"class":55},"    };\n",[49,5044,5045,5047,5049,5052,5054,5056,5058,5060,5062,5064,5066],{"class":51,"line":1403},[49,5046,1643],{"class":55},[49,5048,1263],{"class":59},[49,5050,5051],{"class":328},"\"二维数组的行数\"",[49,5053,1464],{"class":59},[49,5055,4298],{"class":55},[49,5057,4301],{"class":59},[49,5059,3943],{"class":55},[49,5061,415],{"class":66},[49,5063,4308],{"class":55},[49,5065,1263],{"class":59},[49,5067,1285],{"class":55},[49,5069,5070,5072,5074,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099],{"class":51,"line":1409},[49,5071,1643],{"class":55},[49,5073,1263],{"class":59},[49,5075,5076],{"class":328},"\"二维数组的列数\"",[49,5078,1464],{"class":59},[49,5080,3943],{"class":55},[49,5082,415],{"class":66},[49,5084,4308],{"class":55},[49,5086,4301],{"class":59},[49,5088,3943],{"class":55},[49,5090,415],{"class":66},[49,5092,4992],{"class":55},[49,5094,415],{"class":66},[49,5096,4308],{"class":55},[49,5098,1263],{"class":59},[49,5100,1285],{"class":55},[49,5102,5103],{"class":51,"line":1421},[49,5104,1657],{"class":55},[14,5106,5107],{},"查看二维数组首地址",[39,5109,5111],{"className":216,"code":5110,"language":218,"meta":44,"style":44},"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",[46,5112,5113,5130,5156,5181],{"__ignoreMap":44},[49,5114,5115,5117,5119,5122,5124,5126,5128],{"class":51,"line":52},[49,5116,1461],{"class":55},[49,5118,1263],{"class":59},[49,5120,5121],{"class":328},"\"二维数组首地址：\"",[49,5123,1263],{"class":59},[49,5125,3972],{"class":55},[49,5127,1263],{"class":59},[49,5129,1285],{"class":55},[49,5131,5132,5134,5136,5139,5141,5143,5145,5148,5150,5152,5154],{"class":51,"line":84},[49,5133,1461],{"class":55},[49,5135,1263],{"class":59},[49,5137,5138],{"class":328},"\"二维数组第一行的首地址：\"",[49,5140,1263],{"class":59},[49,5142,228],{"class":55},[49,5144,231],{"class":59},[49,5146,5147],{"class":55},")arr[",[49,5149,415],{"class":66},[49,5151,1159],{"class":55},[49,5153,1263],{"class":59},[49,5155,1285],{"class":55},[49,5157,5158,5160,5162,5165,5167,5169,5171,5173,5175,5177,5179],{"class":51,"line":109},[49,5159,1461],{"class":55},[49,5161,1263],{"class":59},[49,5163,5164],{"class":328},"\"二维数组第二行的首地址：\"",[49,5166,1263],{"class":59},[49,5168,228],{"class":55},[49,5170,231],{"class":59},[49,5172,5147],{"class":55},[49,5174,441],{"class":66},[49,5176,1159],{"class":55},[49,5178,1263],{"class":59},[49,5180,1285],{"class":55},[49,5182,5183,5185,5187,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212,5214],{"class":51,"line":120},[49,5184,1461],{"class":55},[49,5186,1263],{"class":59},[49,5188,5189],{"class":328},"\"二维数组第一个元素的首地址:\"",[49,5191,1263],{"class":59},[49,5193,228],{"class":55},[49,5195,231],{"class":59},[49,5197,649],{"class":55},[49,5199,575],{"class":59},[49,5201,3998],{"class":55},[49,5203,415],{"class":66},[49,5205,4992],{"class":55},[49,5207,415],{"class":66},[49,5209,1159],{"class":55},[49,5211,1263],{"class":59},[49,5213,1330],{"class":55},[49,5215,5216],{"class":283},"\u002F\u002F对于数，要加取址符\n",[143,5218,5219],{},"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":44,"searchDepth":84,"depth":84,"links":5221},[5222,5223,5224,5232,5233,5239,5244],{"id":168,"depth":84,"text":169},{"id":175,"depth":84,"text":176},{"id":192,"depth":84,"text":193,"children":5225},[5226,5227,5228,5229,5230,5231],{"id":197,"depth":109,"text":198},{"id":243,"depth":109,"text":244},{"id":309,"depth":109,"text":310},{"id":1244,"depth":109,"text":1245},{"id":1336,"depth":109,"text":1337},{"id":1435,"depth":109,"text":1436},{"id":1477,"depth":84,"text":1478},{"id":1545,"depth":84,"text":1546,"children":5234},[5235,5236,5237,5238],{"id":1549,"depth":109,"text":1550},{"id":1571,"depth":109,"text":1572},{"id":1580,"depth":109,"text":1581},{"id":1589,"depth":109,"text":1590},{"id":1598,"depth":84,"text":1599,"children":5240},[5241,5242,5243],{"id":1602,"depth":109,"text":1603},{"id":2297,"depth":109,"text":2298},{"id":3713,"depth":109,"text":3714},{"id":3854,"depth":84,"text":3855,"children":5245},[5246,5247],{"id":3858,"depth":109,"text":3859},{"id":4885,"depth":109,"text":4886},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":159,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5254,"title":5255,"body":5256,"description":44,"extension":149,"meta":6355,"navigation":151,"path":6356,"seo":6357,"stem":6358,"__hash__":6359},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5257,"toc":6347},[5258,5261,5265,5273,5281,5284,5349,5353,5356,5432,5436,5439,5442,5445,5658,5662,5667,5731,5736,5803,5808,5899,5902,6007,6011,6014,6020,6164,6168,6171,6185,6188,6233,6236,6344],[10,5259,5255],{"id":5260},"_2函数",[166,5262,5264],{"id":5263},"_21函数概述","2.1函数概述",[178,5266,5267,5270],{},[181,5268,5269],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[181,5271,5272],{},"语法：",[39,5274,5279],{"className":5275,"code":5277,"language":5278,"meta":44},[5276],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[46,5280,5277],{"__ignoreMap":44},[14,5282,5283],{},"小案例",[39,5285,5287],{"className":216,"code":5286,"language":218,"meta":44,"style":44},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[46,5288,5289,5294,5317,5321,5338,5345],{"__ignoreMap":44},[49,5290,5291],{"class":51,"line":52},[49,5292,5293],{"class":283},"\u002F\u002Fnum1,num2形参\n",[49,5295,5296,5298,5301,5303,5305,5308,5310,5312,5315],{"class":51,"line":84},[49,5297,231],{"class":59},[49,5299,5300],{"class":2055}," add",[49,5302,228],{"class":55},[49,5304,231],{"class":59},[49,5306,5307],{"class":126}," num1",[49,5309,76],{"class":55},[49,5311,231],{"class":59},[49,5313,5314],{"class":126}," num2",[49,5316,81],{"class":55},[49,5318,5319],{"class":51,"line":109},[49,5320,1638],{"class":55},[49,5322,5323,5325,5328,5330,5333,5335],{"class":51,"line":120},[49,5324,2077],{"class":59},[49,5326,5327],{"class":55}," sum",[49,5329,60],{"class":59},[49,5331,5332],{"class":55},"num1",[49,5334,700],{"class":59},[49,5336,5337],{"class":55},"num2;\n",[49,5339,5340,5342],{"class":51,"line":135},[49,5341,4182],{"class":59},[49,5343,5344],{"class":55}," sum;\n",[49,5346,5347],{"class":51,"line":1306},[49,5348,1657],{"class":55},[166,5350,5352],{"id":5351},"_22函数调用","2.2函数调用",[14,5354,5355],{},"调用刚刚写的求和函数",[39,5357,5359],{"className":216,"code":5358,"language":218,"meta":44,"style":44},"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",[46,5360,5361,5369,5373,5378,5390,5402,5411,5416,5428],{"__ignoreMap":44},[49,5362,5363,5365,5367],{"class":51,"line":52},[49,5364,231],{"class":59},[49,5366,2065],{"class":2055},[49,5368,2068],{"class":55},[49,5370,5371],{"class":51,"line":84},[49,5372,1638],{"class":55},[49,5374,5375],{"class":51,"line":109},[49,5376,5377],{"class":283},"    \u002F\u002Fa,b实参\n",[49,5379,5380,5382,5384,5386,5388],{"class":51,"line":120},[49,5381,2077],{"class":59},[49,5383,1490],{"class":55},[49,5385,60],{"class":59},[49,5387,415],{"class":66},[49,5389,1382],{"class":55},[49,5391,5392,5394,5396,5398,5400],{"class":51,"line":135},[49,5393,2077],{"class":59},[49,5395,2925],{"class":55},[49,5397,60],{"class":59},[49,5399,415],{"class":66},[49,5401,1382],{"class":55},[49,5403,5404,5406,5408],{"class":51,"line":1306},[49,5405,2104],{"class":55},[49,5407,1521],{"class":59},[49,5409,5410],{"class":55},"a,b;\n",[49,5412,5413],{"class":51,"line":1312},[49,5414,5415],{"class":283},"    \u002F\u002F调用函数时，实参值传给了形参\n",[49,5417,5418,5420,5422,5425],{"class":51,"line":1403},[49,5419,1643],{"class":55},[49,5421,1263],{"class":59},[49,5423,5424],{"class":2055},"add",[49,5426,5427],{"class":55},"(a,b);\n",[49,5429,5430],{"class":51,"line":1409},[49,5431,1657],{"class":55},[166,5433,5435],{"id":5434},"_23值传递","2.3值传递",[14,5437,5438],{},"值传递就是函数调用时实参将数值传给形参",[14,5440,5441],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5443,5444],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[39,5446,5448],{"className":216,"code":5447,"language":218,"meta":44,"style":44},"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",[46,5449,5450,5472,5476,5489,5506,5524,5535,5544,5553,5566,5582,5598,5607,5611,5619,5623,5635,5647,5654],{"__ignoreMap":44},[49,5451,5452,5455,5458,5460,5462,5464,5466,5468,5470],{"class":51,"line":52},[49,5453,5454],{"class":59},"void",[49,5456,5457],{"class":2055}," swap",[49,5459,228],{"class":55},[49,5461,231],{"class":59},[49,5463,5307],{"class":126},[49,5465,76],{"class":55},[49,5467,231],{"class":59},[49,5469,5314],{"class":126},[49,5471,81],{"class":55},[49,5473,5474],{"class":51,"line":84},[49,5475,1638],{"class":55},[49,5477,5478,5480,5482,5485,5487],{"class":51,"line":109},[49,5479,1643],{"class":55},[49,5481,1263],{"class":59},[49,5483,5484],{"class":328},"\"交换前：\"",[49,5486,1263],{"class":59},[49,5488,1285],{"class":55},[49,5490,5491,5493,5495,5498,5500,5502,5504],{"class":51,"line":120},[49,5492,1643],{"class":55},[49,5494,1263],{"class":59},[49,5496,5497],{"class":328},"\"num1=\"",[49,5499,1263],{"class":59},[49,5501,5332],{"class":55},[49,5503,1263],{"class":59},[49,5505,1285],{"class":55},[49,5507,5508,5510,5512,5515,5517,5520,5522],{"class":51,"line":135},[49,5509,1643],{"class":55},[49,5511,1263],{"class":59},[49,5513,5514],{"class":328},"\"num2=\"",[49,5516,1263],{"class":59},[49,5518,5519],{"class":55},"num2",[49,5521,1263],{"class":59},[49,5523,1285],{"class":55},[49,5525,5526,5528,5530,5532],{"class":51,"line":1306},[49,5527,2077],{"class":59},[49,5529,4347],{"class":55},[49,5531,60],{"class":59},[49,5533,5534],{"class":55},"num1;\n",[49,5536,5537,5540,5542],{"class":51,"line":1312},[49,5538,5539],{"class":55},"    num1",[49,5541,60],{"class":59},[49,5543,5337],{"class":55},[49,5545,5546,5549,5551],{"class":51,"line":1403},[49,5547,5548],{"class":55},"    num2",[49,5550,60],{"class":59},[49,5552,4372],{"class":55},[49,5554,5555,5557,5559,5562,5564],{"class":51,"line":1409},[49,5556,1643],{"class":55},[49,5558,1263],{"class":59},[49,5560,5561],{"class":328},"\"交换后：\"",[49,5563,1263],{"class":59},[49,5565,1285],{"class":55},[49,5567,5568,5570,5572,5574,5576,5578,5580],{"class":51,"line":1421},[49,5569,1643],{"class":55},[49,5571,1263],{"class":59},[49,5573,5497],{"class":328},[49,5575,1263],{"class":59},[49,5577,5332],{"class":55},[49,5579,1263],{"class":59},[49,5581,1285],{"class":55},[49,5583,5584,5586,5588,5590,5592,5594,5596],{"class":51,"line":1704},[49,5585,1643],{"class":55},[49,5587,1263],{"class":59},[49,5589,5514],{"class":328},[49,5591,1263],{"class":59},[49,5593,5519],{"class":55},[49,5595,1263],{"class":59},[49,5597,1285],{"class":55},[49,5599,5600,5602,5604],{"class":51,"line":1709},[49,5601,4182],{"class":59},[49,5603,280],{"class":55},[49,5605,5606],{"class":283},"\u002F\u002F或者不写\n",[49,5608,5609],{"class":51,"line":1715},[49,5610,1657],{"class":55},[49,5612,5613,5615,5617],{"class":51,"line":1720},[49,5614,231],{"class":59},[49,5616,2065],{"class":2055},[49,5618,2068],{"class":55},[49,5620,5621],{"class":51,"line":1734},[49,5622,1638],{"class":55},[49,5624,5625,5627,5629,5631,5633],{"class":51,"line":1739},[49,5626,2077],{"class":59},[49,5628,1490],{"class":55},[49,5630,60],{"class":59},[49,5632,95],{"class":66},[49,5634,1382],{"class":55},[49,5636,5637,5639,5641,5643,5645],{"class":51,"line":1745},[49,5638,2077],{"class":59},[49,5640,2925],{"class":55},[49,5642,60],{"class":59},[49,5644,919],{"class":66},[49,5646,1382],{"class":55},[49,5648,5649,5652],{"class":51,"line":1766},[49,5650,5651],{"class":2055},"    swap",[49,5653,5427],{"class":55},[49,5655,5656],{"class":51,"line":1771},[49,5657,1657],{"class":55},[166,5659,5661],{"id":5660},"_24函数的常见形式","2.4函数的常见形式",[178,5663,5664],{},[181,5665,5666],{},"无参无返",[39,5668,5670],{"className":216,"code":5669,"language":218,"meta":44,"style":44},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[46,5671,5672,5681,5685,5698,5702,5710,5714,5719,5727],{"__ignoreMap":44},[49,5673,5674,5676,5679],{"class":51,"line":52},[49,5675,5454],{"class":59},[49,5677,5678],{"class":2055}," test01",[49,5680,2068],{"class":55},[49,5682,5683],{"class":51,"line":84},[49,5684,1638],{"class":55},[49,5686,5687,5689,5691,5694,5696],{"class":51,"line":109},[49,5688,1643],{"class":55},[49,5690,1263],{"class":59},[49,5692,5693],{"class":328},"\"你好\"",[49,5695,1263],{"class":59},[49,5697,1285],{"class":55},[49,5699,5700],{"class":51,"line":120},[49,5701,1657],{"class":55},[49,5703,5704,5706,5708],{"class":51,"line":135},[49,5705,231],{"class":59},[49,5707,2065],{"class":2055},[49,5709,2068],{"class":55},[49,5711,5712],{"class":51,"line":1306},[49,5713,1638],{"class":55},[49,5715,5716],{"class":51,"line":1312},[49,5717,5718],{"class":283},"    \u002F\u002F函数调用\n",[49,5720,5721,5724],{"class":51,"line":1403},[49,5722,5723],{"class":2055},"    test01",[49,5725,5726],{"class":55},"();\n",[49,5728,5729],{"class":51,"line":1409},[49,5730,1657],{"class":55},[178,5732,5733],{"start":84},[181,5734,5735],{},"有参无返",[39,5737,5739],{"className":216,"code":5738,"language":218,"meta":44,"style":44},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[46,5740,5741,5756,5760,5772,5776,5784,5788,5799],{"__ignoreMap":44},[49,5742,5743,5745,5748,5750,5752,5754],{"class":51,"line":52},[49,5744,5454],{"class":59},[49,5746,5747],{"class":2055}," test02",[49,5749,228],{"class":55},[49,5751,231],{"class":59},[49,5753,1490],{"class":126},[49,5755,81],{"class":55},[49,5757,5758],{"class":51,"line":84},[49,5759,1638],{"class":55},[49,5761,5762,5764,5766,5768,5770],{"class":51,"line":109},[49,5763,1643],{"class":55},[49,5765,1263],{"class":59},[49,5767,5693],{"class":328},[49,5769,1263],{"class":59},[49,5771,1285],{"class":55},[49,5773,5774],{"class":51,"line":120},[49,5775,1657],{"class":55},[49,5777,5778,5780,5782],{"class":51,"line":135},[49,5779,231],{"class":59},[49,5781,2065],{"class":2055},[49,5783,2068],{"class":55},[49,5785,5786],{"class":51,"line":1306},[49,5787,1638],{"class":55},[49,5789,5790,5793,5795,5797],{"class":51,"line":1312},[49,5791,5792],{"class":2055},"    test02",[49,5794,228],{"class":55},[49,5796,533],{"class":66},[49,5798,2811],{"class":55},[49,5800,5801],{"class":51,"line":1403},[49,5802,1657],{"class":55},[178,5804,5805],{"start":109},[181,5806,5807],{},"无参有返",[39,5809,5811],{"className":216,"code":5810,"language":218,"meta":44,"style":44},"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",[46,5812,5813,5822,5826,5838,5847,5851,5859,5863,5876,5895],{"__ignoreMap":44},[49,5814,5815,5817,5820],{"class":51,"line":52},[49,5816,231],{"class":59},[49,5818,5819],{"class":2055}," test03",[49,5821,2068],{"class":55},[49,5823,5824],{"class":51,"line":84},[49,5825,1638],{"class":55},[49,5827,5828,5830,5832,5834,5836],{"class":51,"line":109},[49,5829,1643],{"class":55},[49,5831,1263],{"class":59},[49,5833,5693],{"class":328},[49,5835,1263],{"class":59},[49,5837,1285],{"class":55},[49,5839,5840,5842,5845],{"class":51,"line":120},[49,5841,4182],{"class":59},[49,5843,5844],{"class":66}," 100",[49,5846,1382],{"class":55},[49,5848,5849],{"class":51,"line":135},[49,5850,1657],{"class":55},[49,5852,5853,5855,5857],{"class":51,"line":1306},[49,5854,231],{"class":59},[49,5856,2065],{"class":2055},[49,5858,2068],{"class":55},[49,5860,5861],{"class":51,"line":1312},[49,5862,1638],{"class":55},[49,5864,5865,5867,5869,5871,5874],{"class":51,"line":1403},[49,5866,2077],{"class":59},[49,5868,5307],{"class":55},[49,5870,60],{"class":59},[49,5872,5873],{"class":2055},"test03",[49,5875,5726],{"class":55},[49,5877,5878,5880,5882,5884,5886,5888,5890,5892],{"class":51,"line":1409},[49,5879,1643],{"class":55},[49,5881,1263],{"class":59},[49,5883,5497],{"class":328},[49,5885,1263],{"class":59},[49,5887,5332],{"class":55},[49,5889,1263],{"class":59},[49,5891,1330],{"class":55},[49,5893,5894],{"class":283}," \u002F\u002F100\n",[49,5896,5897],{"class":51,"line":1421},[49,5898,1657],{"class":55},[14,5900,5901],{},"4.有参有返",[39,5903,5905],{"className":216,"code":5904,"language":218,"meta":44,"style":44},"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",[46,5906,5907,5922,5926,5939,5945,5949,5958,5962,5974,5988,6003],{"__ignoreMap":44},[49,5908,5909,5911,5914,5916,5918,5920],{"class":51,"line":52},[49,5910,231],{"class":59},[49,5912,5913],{"class":2055}," test04",[49,5915,228],{"class":55},[49,5917,231],{"class":59},[49,5919,1490],{"class":126},[49,5921,81],{"class":55},[49,5923,5924],{"class":51,"line":84},[49,5925,1638],{"class":55},[49,5927,5928,5930,5932,5935,5937],{"class":51,"line":109},[49,5929,1643],{"class":55},[49,5931,1263],{"class":59},[49,5933,5934],{"class":328},"\"hello\"",[49,5936,1263],{"class":59},[49,5938,1285],{"class":55},[49,5940,5941,5943],{"class":51,"line":120},[49,5942,4182],{"class":59},[49,5944,1524],{"class":55},[49,5946,5947],{"class":51,"line":135},[49,5948,1657],{"class":55},[49,5950,5951,5953,5956],{"class":51,"line":1306},[49,5952,231],{"class":59},[49,5954,5955],{"class":2055}," mian",[49,5957,2068],{"class":55},[49,5959,5960],{"class":51,"line":1312},[49,5961,1638],{"class":55},[49,5963,5964,5966,5968,5970,5972],{"class":51,"line":1403},[49,5965,2077],{"class":59},[49,5967,2925],{"class":55},[49,5969,60],{"class":59},[49,5971,441],{"class":66},[49,5973,1382],{"class":55},[49,5975,5976,5978,5980,5982,5985],{"class":51,"line":1409},[49,5977,2077],{"class":59},[49,5979,2941],{"class":55},[49,5981,60],{"class":59},[49,5983,5984],{"class":2055},"test04",[49,5986,5987],{"class":55},"(b);\n",[49,5989,5990,5992,5994,5996,5998,6000],{"class":51,"line":1421},[49,5991,1643],{"class":55},[49,5993,1263],{"class":59},[49,5995,510],{"class":55},[49,5997,1263],{"class":59},[49,5999,1330],{"class":55},[49,6001,6002],{"class":283}," \u002F\u002F1\n",[49,6004,6005],{"class":51,"line":1704},[49,6006,1657],{"class":55},[166,6008,6010],{"id":6009},"_25函数的声明","2.5函数的声明",[14,6012,6013],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6015,6016,6017],{},"函数的",[373,6018,6019],{},"声明可以多次，但是函数的定义只能有一次",[39,6021,6023],{"className":216,"code":6022,"language":218,"meta":44,"style":44},"\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",[46,6024,6025,6030,6035,6060,6069,6073,6085,6097,6113,6117,6137,6141,6160],{"__ignoreMap":44},[49,6026,6027],{"class":51,"line":52},[49,6028,6029],{"class":283},"\u002F\u002F函数声明\n",[49,6031,6032],{"class":51,"line":84},[49,6033,6034],{"class":283},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[49,6036,6037,6039,6042,6044,6046,6048,6050,6052,6054,6057],{"class":51,"line":109},[49,6038,231],{"class":59},[49,6040,6041],{"class":2055}," max",[49,6043,228],{"class":55},[49,6045,231],{"class":59},[49,6047,1490],{"class":126},[49,6049,76],{"class":55},[49,6051,231],{"class":59},[49,6053,2925],{"class":126},[49,6055,6056],{"class":55},");",[49,6058,6059],{"class":283},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[49,6061,6062,6064,6066],{"class":51,"line":120},[49,6063,231],{"class":59},[49,6065,2065],{"class":2055},[49,6067,6068],{"class":55},"() \n",[49,6070,6071],{"class":51,"line":135},[49,6072,1638],{"class":55},[49,6074,6075,6077,6079,6081,6083],{"class":51,"line":1306},[49,6076,2077],{"class":59},[49,6078,1490],{"class":55},[49,6080,60],{"class":59},[49,6082,95],{"class":66},[49,6084,1382],{"class":55},[49,6086,6087,6089,6091,6093,6095],{"class":51,"line":1312},[49,6088,2077],{"class":59},[49,6090,2925],{"class":55},[49,6092,60],{"class":59},[49,6094,919],{"class":66},[49,6096,1382],{"class":55},[49,6098,6099,6101,6103,6106,6109,6111],{"class":51,"line":1403},[49,6100,1643],{"class":55},[49,6102,1263],{"class":59},[49,6104,6105],{"class":2055},"max",[49,6107,6108],{"class":55},"(a,b)",[49,6110,1263],{"class":59},[49,6112,1285],{"class":55},[49,6114,6115],{"class":51,"line":1409},[49,6116,1657],{"class":55},[49,6118,6119,6121,6123,6125,6127,6129,6131,6133,6135],{"class":51,"line":1421},[49,6120,231],{"class":59},[49,6122,6041],{"class":2055},[49,6124,228],{"class":55},[49,6126,231],{"class":59},[49,6128,1490],{"class":126},[49,6130,76],{"class":55},[49,6132,231],{"class":59},[49,6134,2925],{"class":126},[49,6136,81],{"class":55},[49,6138,6139],{"class":51,"line":1704},[49,6140,1638],{"class":55},[49,6142,6143,6145,6147,6149,6151,6153,6155,6157],{"class":51,"line":1709},[49,6144,4182],{"class":59},[49,6146,1490],{"class":55},[49,6148,1179],{"class":59},[49,6150,87],{"class":55},[49,6152,1205],{"class":59},[49,6154,56],{"class":55},[49,6156,1078],{"class":59},[49,6158,6159],{"class":55},"b;\n",[49,6161,6162],{"class":51,"line":1715},[49,6163,1657],{"class":55},[166,6165,6167],{"id":6166},"_26函数的分文件编写","2.6函数的分文件编写",[14,6169,6170],{},"4个步骤：",[1226,6172,6173,6176,6179,6182],{},[181,6174,6175],{},"1.创建后缀名为.h的头文件",[181,6177,6178],{},"2.创建后缀名为.cpp的源文件",[181,6180,6181],{},"3.在头文件中写函数的定义",[181,6183,6184],{},"4.在源文件中写函数的定义\n示例：",[14,6186,6187],{},"头文件：swap.h",[39,6189,6191],{"className":216,"code":6190,"language":218,"meta":44,"style":44},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[46,6192,6193,6199,6209,6213],{"__ignoreMap":44},[49,6194,6195,6197],{"class":51,"line":52},[49,6196,2041],{"class":59},[49,6198,2044],{"class":328},[49,6200,6201,6203,6205,6207],{"class":51,"line":84},[49,6202,2049],{"class":59},[49,6204,2052],{"class":59},[49,6206,2056],{"class":2055},[49,6208,1382],{"class":55},[49,6210,6211],{"class":51,"line":109},[49,6212,6029],{"class":283},[49,6214,6215,6217,6219,6221,6223,6225,6227,6229,6231],{"class":51,"line":120},[49,6216,5454],{"class":59},[49,6218,5457],{"class":2055},[49,6220,228],{"class":55},[49,6222,231],{"class":59},[49,6224,1490],{"class":126},[49,6226,76],{"class":55},[49,6228,231],{"class":59},[49,6230,2925],{"class":126},[49,6232,2811],{"class":55},[14,6234,6235],{},"源文件：swap.cpp",[39,6237,6239],{"className":216,"code":6238,"language":218,"meta":44,"style":44},"#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",[46,6240,6241,6248,6253,6273,6277,6288,6297,6306,6323,6340],{"__ignoreMap":44},[49,6242,6243,6245],{"class":51,"line":52},[49,6244,2041],{"class":59},[49,6246,6247],{"class":328}," \"swap.h\"\n",[49,6249,6250],{"class":51,"line":84},[49,6251,6252],{"class":283},"\u002F\u002F函数的定义\n",[49,6254,6255,6257,6259,6261,6263,6265,6267,6269,6271],{"class":51,"line":109},[49,6256,5454],{"class":59},[49,6258,5457],{"class":2055},[49,6260,228],{"class":55},[49,6262,231],{"class":59},[49,6264,1490],{"class":126},[49,6266,76],{"class":55},[49,6268,231],{"class":59},[49,6270,2925],{"class":126},[49,6272,81],{"class":55},[49,6274,6275],{"class":51,"line":120},[49,6276,1638],{"class":55},[49,6278,6279,6281,6283,6285],{"class":51,"line":135},[49,6280,2077],{"class":59},[49,6282,4347],{"class":55},[49,6284,60],{"class":59},[49,6286,6287],{"class":55},"a;\n",[49,6289,6290,6293,6295],{"class":51,"line":1306},[49,6291,6292],{"class":55},"    a",[49,6294,60],{"class":59},[49,6296,6159],{"class":55},[49,6298,6299,6302,6304],{"class":51,"line":1312},[49,6300,6301],{"class":55},"    b",[49,6303,60],{"class":59},[49,6305,4372],{"class":55},[49,6307,6308,6310,6312,6315,6317,6319,6321],{"class":51,"line":1403},[49,6309,1643],{"class":55},[49,6311,1263],{"class":59},[49,6313,6314],{"class":328},"\"a=\"",[49,6316,1263],{"class":59},[49,6318,56],{"class":55},[49,6320,1263],{"class":59},[49,6322,1285],{"class":55},[49,6324,6325,6327,6329,6332,6334,6336,6338],{"class":51,"line":1409},[49,6326,1643],{"class":55},[49,6328,1263],{"class":59},[49,6330,6331],{"class":328},"\"b=\"",[49,6333,1263],{"class":59},[49,6335,87],{"class":55},[49,6337,1263],{"class":59},[49,6339,1285],{"class":55},[49,6341,6342],{"class":51,"line":1421},[49,6343,1657],{"class":55},[143,6345,6346],{},"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":44,"searchDepth":84,"depth":84,"links":6348},[6349,6350,6351,6352,6353,6354],{"id":5263,"depth":84,"text":5264},{"id":5351,"depth":84,"text":5352},{"id":5434,"depth":84,"text":5435},{"id":5660,"depth":84,"text":5661},{"id":6009,"depth":84,"text":6010},{"id":6166,"depth":84,"text":6167},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5255,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6361,"title":6362,"body":6363,"description":6370,"extension":149,"meta":7775,"navigation":151,"path":7776,"seo":7777,"stem":7778,"__hash__":7779},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6364,"toc":7765},[6365,6368,6371,6375,6537,6541,6544,6547,6550,6553,6693,6697,6700,6703,6706,6771,6775,6780,6847,6850,6854,6857,6868,6873,6893,6896,6901,6920,6923,6927,6946,6949,6953,7188,7192,7195,7198,7201,7363,7366,7370,7373,7379,7762],[10,6366,6362],{"id":6367},"_3指针",[14,6369,6370],{},"通过指针保存一个地址，指针就是个地址",[166,6372,6374],{"id":6373},"_31定义指针","3.1定义指针",[39,6376,6378],{"className":216,"code":6377,"language":218,"meta":44,"style":44},"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",[46,6379,6380,6388,6392,6397,6409,6414,6422,6432,6450,6470,6474,6479,6484,6489,6503,6519,6533],{"__ignoreMap":44},[49,6381,6382,6384,6386],{"class":51,"line":52},[49,6383,231],{"class":59},[49,6385,2065],{"class":2055},[49,6387,2068],{"class":55},[49,6389,6390],{"class":51,"line":84},[49,6391,1638],{"class":55},[49,6393,6394],{"class":51,"line":109},[49,6395,6396],{"class":283},"    \u002F\u002F1.定义指针\n",[49,6398,6399,6401,6403,6405,6407],{"class":51,"line":120},[49,6400,2077],{"class":59},[49,6402,1490],{"class":55},[49,6404,60],{"class":59},[49,6406,95],{"class":66},[49,6408,1382],{"class":55},[49,6410,6411],{"class":51,"line":135},[49,6412,6413],{"class":283},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[49,6415,6416,6419],{"class":51,"line":1306},[49,6417,6418],{"class":59},"    int*",[49,6420,6421],{"class":55},"p;\n",[49,6423,6424,6427,6430],{"class":51,"line":1312},[49,6425,6426],{"class":55},"    p",[49,6428,6429],{"class":59},"=&",[49,6431,6287],{"class":55},[49,6433,6434,6436,6438,6441,6444,6446,6448],{"class":51,"line":1403},[49,6435,1643],{"class":55},[49,6437,1263],{"class":59},[49,6439,6440],{"class":328},"\"a的地址为：\"",[49,6442,6443],{"class":59},"\u003C\u003C&",[49,6445,56],{"class":55},[49,6447,1263],{"class":59},[49,6449,1285],{"class":55},[49,6451,6452,6454,6456,6459,6461,6463,6465,6467],{"class":51,"line":1409},[49,6453,1643],{"class":55},[49,6455,1263],{"class":59},[49,6457,6458],{"class":328},"\"指针p为：\"",[49,6460,1263],{"class":59},[49,6462,14],{"class":55},[49,6464,1263],{"class":59},[49,6466,1330],{"class":55},[49,6468,6469],{"class":283},"\u002F\u002F指针p表示的就是a的地址\n",[49,6471,6472],{"class":51,"line":1421},[49,6473,2492],{"emptyLinePlaceholder":151},[49,6475,6476],{"class":51,"line":1704},[49,6477,6478],{"class":283},"    \u002F\u002F2.使用指针\n",[49,6480,6481],{"class":51,"line":1709},[49,6482,6483],{"class":283},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[49,6485,6486],{"class":51,"line":1715},[49,6487,6488],{"class":283},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[49,6490,6491,6494,6496,6498,6501],{"class":51,"line":1720},[49,6492,6493],{"class":59},"    *",[49,6495,14],{"class":55},[49,6497,60],{"class":59},[49,6499,6500],{"class":66},"1000",[49,6502,1382],{"class":55},[49,6504,6505,6507,6510,6512,6514,6516],{"class":51,"line":1734},[49,6506,1643],{"class":55},[49,6508,6509],{"class":59},"\u003C\u003C*",[49,6511,14],{"class":55},[49,6513,1263],{"class":59},[49,6515,1330],{"class":55},[49,6517,6518],{"class":283},"\u002F\u002F1000\n",[49,6520,6521,6523,6525,6527,6529,6531],{"class":51,"line":1739},[49,6522,1643],{"class":55},[49,6524,1263],{"class":59},[49,6526,56],{"class":55},[49,6528,1263],{"class":59},[49,6530,1330],{"class":55},[49,6532,6518],{"class":283},[49,6534,6535],{"class":51,"line":1745},[49,6536,1657],{"class":55},[166,6538,6540],{"id":6539},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6542,6543],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6545,6546],{},"在32位操作系统下：占用4个字节空间",[14,6548,6549],{},"在64位操作系统下：占用8个字节空间",[14,6551,6552],{},"上方是不管啥数据类型的",[39,6554,6556],{"className":216,"code":6555,"language":218,"meta":44,"style":44},"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",[46,6557,6558,6566,6570,6575,6587,6592,6597,6602,6615,6637,6663,6689],{"__ignoreMap":44},[49,6559,6560,6562,6564],{"class":51,"line":52},[49,6561,231],{"class":59},[49,6563,2065],{"class":2055},[49,6565,2068],{"class":55},[49,6567,6568],{"class":51,"line":84},[49,6569,1638],{"class":55},[49,6571,6572],{"class":51,"line":109},[49,6573,6574],{"class":283},"    \u002F\u002F指针所占内存空间\n",[49,6576,6577,6579,6581,6583,6585],{"class":51,"line":120},[49,6578,2077],{"class":59},[49,6580,1490],{"class":55},[49,6582,60],{"class":59},[49,6584,95],{"class":66},[49,6586,1382],{"class":55},[49,6588,6589],{"class":51,"line":135},[49,6590,6591],{"class":283},"    \u002F\u002Fint *p;\n",[49,6593,6594],{"class":51,"line":1306},[49,6595,6596],{"class":283},"    \u002F\u002Fp=&a;\n",[49,6598,6599],{"class":51,"line":1312},[49,6600,6601],{"class":283},"    \u002F\u002F上述可以写为以下：\n",[49,6603,6604,6606,6609,6611,6613],{"class":51,"line":1403},[49,6605,2077],{"class":59},[49,6607,6608],{"class":59}," *",[49,6610,14],{"class":55},[49,6612,6429],{"class":59},[49,6614,6287],{"class":55},[49,6616,6617,6620,6622,6625,6627,6630,6632,6634],{"class":51,"line":1409},[49,6618,6619],{"class":55},"    cout ",[49,6621,1263],{"class":59},[49,6623,6624],{"class":328},"\"sizeof(int *)\"",[49,6626,1464],{"class":59},[49,6628,6629],{"class":55},"(p)",[49,6631,1263],{"class":59},[49,6633,1330],{"class":55},[49,6635,6636],{"class":283},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[49,6638,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6660],{"class":51,"line":1421},[49,6640,6619],{"class":55},[49,6642,1263],{"class":59},[49,6644,6624],{"class":328},[49,6646,1464],{"class":59},[49,6648,228],{"class":55},[49,6650,231],{"class":59},[49,6652,6608],{"class":59},[49,6654,649],{"class":55},[49,6656,1263],{"class":59},[49,6658,6659],{"class":55},"endl",[49,6661,6662],{"class":283},"  \u002F\u002F4字节(32位的话)\n",[49,6664,6665,6667,6669,6672,6674,6676,6678,6680,6682,6684,6686],{"class":51,"line":1704},[49,6666,6619],{"class":55},[49,6668,1263],{"class":59},[49,6670,6671],{"class":328},"\"sizeof(char *)\"",[49,6673,1464],{"class":59},[49,6675,228],{"class":55},[49,6677,320],{"class":59},[49,6679,6608],{"class":59},[49,6681,649],{"class":55},[49,6683,1263],{"class":59},[49,6685,1330],{"class":55},[49,6687,6688],{"class":283}," \u002F\u002F4字节(32位的话)\n",[49,6690,6691],{"class":51,"line":1709},[49,6692,1657],{"class":55},[166,6694,6696],{"id":6695},"_33空指针","3.3空指针",[14,6698,6699],{},"空指针：指针变量指向内存中编号为0的空间",[14,6701,6702],{},"用途：初始化指针变量",[14,6704,6705],{},"注意：空指针指向的内存是不可以访问的",[39,6707,6709],{"className":216,"code":6708,"language":218,"meta":44,"style":44},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[46,6710,6711,6719,6723,6728,6742,6747,6762,6767],{"__ignoreMap":44},[49,6712,6713,6715,6717],{"class":51,"line":52},[49,6714,231],{"class":59},[49,6716,2065],{"class":2055},[49,6718,2068],{"class":55},[49,6720,6721],{"class":51,"line":84},[49,6722,1638],{"class":55},[49,6724,6725],{"class":51,"line":109},[49,6726,6727],{"class":283},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[49,6729,6730,6732,6734,6736,6738,6740],{"class":51,"line":120},[49,6731,2077],{"class":59},[49,6733,6608],{"class":59},[49,6735,14],{"class":55},[49,6737,60],{"class":59},[49,6739,2484],{"class":66},[49,6741,1382],{"class":55},[49,6743,6744],{"class":51,"line":135},[49,6745,6746],{"class":283},"    \u002F\u002F2.空指针不能进行访问\n",[49,6748,6749,6751,6753,6755,6757,6759],{"class":51,"line":1306},[49,6750,6493],{"class":59},[49,6752,14],{"class":55},[49,6754,60],{"class":59},[49,6756,533],{"class":66},[49,6758,280],{"class":55},[49,6760,6761],{"class":283},"\u002F\u002F直接报错，压根不能访问\n",[49,6763,6764],{"class":51,"line":1312},[49,6765,6766],{"class":283},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[49,6768,6769],{"class":51,"line":1403},[49,6770,1657],{"class":55},[166,6772,6774],{"id":6773},"_34野指针","3.4野指针",[14,6776,6777],{},[373,6778,6779],{},"指针变量指向非法的内存空间",[39,6781,6783],{"className":216,"code":6782,"language":218,"meta":44,"style":44},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[46,6784,6785,6793,6797,6826,6831,6843],{"__ignoreMap":44},[49,6786,6787,6789,6791],{"class":51,"line":52},[49,6788,231],{"class":59},[49,6790,2065],{"class":2055},[49,6792,2068],{"class":55},[49,6794,6795],{"class":51,"line":84},[49,6796,1638],{"class":55},[49,6798,6799,6801,6803,6805,6807,6809,6811,6813,6815,6818,6821,6823],{"class":51,"line":109},[49,6800,2077],{"class":59},[49,6802,6608],{"class":59},[49,6804,14],{"class":55},[49,6806,60],{"class":59},[49,6808,228],{"class":55},[49,6810,231],{"class":59},[49,6812,6608],{"class":59},[49,6814,649],{"class":55},[49,6816,6817],{"class":59},"0x",[49,6819,6820],{"class":66},"1100",[49,6822,280],{"class":55},[49,6824,6825],{"class":283}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[49,6827,6828],{"class":51,"line":120},[49,6829,6830],{"class":283},"    \u002F\u002F访问野指针报错\n",[49,6832,6833,6835,6837,6839,6841],{"class":51,"line":135},[49,6834,1643],{"class":55},[49,6836,6509],{"class":59},[49,6838,14],{"class":55},[49,6840,1263],{"class":59},[49,6842,1285],{"class":55},[49,6844,6845],{"class":51,"line":1306},[49,6846,1657],{"class":55},[14,6848,6849],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[166,6851,6853],{"id":6852},"_35const修饰指针","3.5const修饰指针",[14,6855,6856],{},"三种情况：",[1226,6858,6859,6862,6865],{},[181,6860,6861],{},"const修饰指针 常量指针",[181,6863,6864],{},"const修饰常量 指针常量",[181,6866,6867],{},"const即修饰指针，又修饰常量",[178,6869,6870],{},[181,6871,6872],{},"常量指针",[39,6874,6876],{"className":216,"code":6875,"language":218,"meta":44,"style":44},"const int *p=&a;\n",[46,6877,6878],{"__ignoreMap":44},[49,6879,6880,6883,6885,6887,6889,6891],{"class":51,"line":52},[49,6881,6882],{"class":59},"const",[49,6884,2474],{"class":59},[49,6886,6608],{"class":59},[49,6888,14],{"class":55},[49,6890,6429],{"class":59},[49,6892,6287],{"class":55},[14,6894,6895],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[178,6897,6898],{"start":84},[181,6899,6900],{},"指针常量",[39,6902,6904],{"className":216,"code":6903,"language":218,"meta":44,"style":44},"int *const p=&a;\n",[46,6905,6906],{"__ignoreMap":44},[49,6907,6908,6910,6913,6916,6918],{"class":51,"line":52},[49,6909,231],{"class":59},[49,6911,6912],{"class":59}," *const",[49,6914,6915],{"class":55}," p",[49,6917,6429],{"class":59},[49,6919,6287],{"class":55},[14,6921,6922],{},"指针的指向不可以改，指针指向的值可以改",[178,6924,6925],{"start":109},[181,6926,6867],{},[39,6928,6930],{"className":216,"code":6929,"language":218,"meta":44,"style":44},"const int *const p=&a;\n",[46,6931,6932],{"__ignoreMap":44},[49,6933,6934,6936,6938,6940,6942,6944],{"class":51,"line":52},[49,6935,6882],{"class":59},[49,6937,2474],{"class":59},[49,6939,6912],{"class":59},[49,6941,6915],{"class":55},[49,6943,6429],{"class":59},[49,6945,6287],{"class":55},[14,6947,6948],{},"指针的指向和指针指向的值都不可以改变",[166,6950,6952],{"id":6951},"_36指针和数组","3.6指针和数组",[39,6954,6956],{"className":216,"code":6955,"language":218,"meta":44,"style":44},"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",[46,6957,6958,6966,6970,6975,7029,7050,7066,7082,7093,7110,7115,7129,7155,7159,7171,7180,7184],{"__ignoreMap":44},[49,6959,6960,6962,6964],{"class":51,"line":52},[49,6961,231],{"class":59},[49,6963,2065],{"class":2055},[49,6965,2068],{"class":55},[49,6967,6968],{"class":51,"line":84},[49,6969,1638],{"class":55},[49,6971,6972],{"class":51,"line":109},[49,6973,6974],{"class":283},"    \u002F\u002F利用指针访问数组中的元素\n",[49,6976,6977,6979,6981,6983,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027],{"class":51,"line":120},[49,6978,2077],{"class":59},[49,6980,4054],{"class":55},[49,6982,95],{"class":66},[49,6984,1159],{"class":55},[49,6986,60],{"class":59},[49,6988,1115],{"class":55},[49,6990,441],{"class":66},[49,6992,76],{"class":55},[49,6994,301],{"class":66},[49,6996,76],{"class":55},[49,6998,73],{"class":66},[49,7000,76],{"class":55},[49,7002,515],{"class":66},[49,7004,76],{"class":55},[49,7006,541],{"class":66},[49,7008,76],{"class":55},[49,7010,566],{"class":66},[49,7012,76],{"class":55},[49,7014,591],{"class":66},[49,7016,76],{"class":55},[49,7018,616],{"class":66},[49,7020,76],{"class":55},[49,7022,67],{"class":66},[49,7024,76],{"class":55},[49,7026,95],{"class":66},[49,7028,4087],{"class":55},[49,7030,7031,7033,7035,7038,7040,7042,7044,7046,7048],{"class":51,"line":135},[49,7032,1643],{"class":55},[49,7034,1263],{"class":59},[49,7036,7037],{"class":328},"\"数组的第一个元素为：\"",[49,7039,1263],{"class":59},[49,7041,3998],{"class":55},[49,7043,415],{"class":66},[49,7045,1159],{"class":55},[49,7047,1263],{"class":59},[49,7049,1285],{"class":55},[49,7051,7052,7054,7056,7058,7060,7063],{"class":51,"line":1306},[49,7053,2077],{"class":59},[49,7055,6608],{"class":59},[49,7057,14],{"class":55},[49,7059,60],{"class":59},[49,7061,7062],{"class":55},"arr;",[49,7064,7065],{"class":283},"\u002F\u002F注意数才要加取地址符号&\n",[49,7067,7068,7070,7072,7074,7076,7078,7080],{"class":51,"line":1312},[49,7069,1643],{"class":55},[49,7071,1263],{"class":59},[49,7073,7037],{"class":328},[49,7075,6509],{"class":59},[49,7077,14],{"class":55},[49,7079,1263],{"class":59},[49,7081,1285],{"class":55},[49,7083,7084,7086,7088,7090],{"class":51,"line":1403},[49,7085,6426],{"class":55},[49,7087,2384],{"class":59},[49,7089,280],{"class":55},[49,7091,7092],{"class":283}," \u002F\u002F让指针向后偏移4个字节\n",[49,7094,7095,7097,7099,7102,7104,7106,7108],{"class":51,"line":1409},[49,7096,1643],{"class":55},[49,7098,1263],{"class":59},[49,7100,7101],{"class":328},"\"数组的第二个元素为：\"",[49,7103,6509],{"class":59},[49,7105,14],{"class":55},[49,7107,1263],{"class":59},[49,7109,1285],{"class":55},[49,7111,7112],{"class":51,"line":1421},[49,7113,7114],{"class":283},"    \u002F\u002F利用指针遍历数组\n",[49,7116,7117,7119,7121,7124,7126],{"class":51,"line":1704},[49,7118,2077],{"class":59},[49,7120,6608],{"class":59},[49,7122,7123],{"class":55},"p2",[49,7125,60],{"class":59},[49,7127,7128],{"class":55},"arr;\n",[49,7130,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153],{"class":51,"line":1709},[49,7132,3293],{"class":59},[49,7134,1750],{"class":55},[49,7136,231],{"class":59},[49,7138,3124],{"class":55},[49,7140,60],{"class":59},[49,7142,415],{"class":66},[49,7144,3131],{"class":55},[49,7146,1129],{"class":59},[49,7148,95],{"class":66},[49,7150,3131],{"class":55},[49,7152,2384],{"class":59},[49,7154,81],{"class":55},[49,7156,7157],{"class":51,"line":1715},[49,7158,2122],{"class":55},[49,7160,7161,7163,7165,7167,7169],{"class":51,"line":1720},[49,7162,3543],{"class":55},[49,7164,6509],{"class":59},[49,7166,7123],{"class":55},[49,7168,1263],{"class":59},[49,7170,1285],{"class":55},[49,7172,7173,7176,7178],{"class":51,"line":1734},[49,7174,7175],{"class":55},"        p2",[49,7177,2384],{"class":59},[49,7179,1382],{"class":55},[49,7181,7182],{"class":51,"line":1739},[49,7183,2279],{"class":55},[49,7185,7186],{"class":51,"line":1745},[49,7187,1657],{"class":55},[166,7189,7191],{"id":7190},"_37指针和函数","3.7指针和函数",[14,7193,7194],{},"利用指针做函数参数，可以修改实参的值",[14,7196,7197],{},"值传递：只改变形参，不改变实参",[14,7199,7200],{},"地址传递：",[39,7202,7204],{"className":216,"code":7203,"language":218,"meta":44,"style":44},"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",[46,7205,7206,7231,7235,7247,7258,7268,7272,7280,7284,7296,7308,7313,7329,7344,7359],{"__ignoreMap":44},[49,7207,7208,7210,7212,7214,7216,7218,7221,7223,7225,7227,7229],{"class":51,"line":52},[49,7209,5454],{"class":59},[49,7211,5457],{"class":2055},[49,7213,228],{"class":55},[49,7215,231],{"class":59},[49,7217,6608],{"class":59},[49,7219,7220],{"class":126},"p1",[49,7222,76],{"class":55},[49,7224,231],{"class":59},[49,7226,6608],{"class":59},[49,7228,7123],{"class":126},[49,7230,81],{"class":55},[49,7232,7233],{"class":51,"line":84},[49,7234,1638],{"class":55},[49,7236,7237,7239,7241,7244],{"class":51,"line":109},[49,7238,2077],{"class":59},[49,7240,4347],{"class":55},[49,7242,7243],{"class":59},"=*",[49,7245,7246],{"class":55},"p1;\n",[49,7248,7249,7251,7253,7255],{"class":51,"line":120},[49,7250,6493],{"class":59},[49,7252,7220],{"class":55},[49,7254,7243],{"class":59},[49,7256,7257],{"class":55},"p2;\n",[49,7259,7260,7262,7264,7266],{"class":51,"line":135},[49,7261,6493],{"class":59},[49,7263,7123],{"class":55},[49,7265,60],{"class":59},[49,7267,4372],{"class":55},[49,7269,7270],{"class":51,"line":1306},[49,7271,1657],{"class":55},[49,7273,7274,7276,7278],{"class":51,"line":1312},[49,7275,231],{"class":59},[49,7277,2065],{"class":2055},[49,7279,2068],{"class":55},[49,7281,7282],{"class":51,"line":1403},[49,7283,1638],{"class":55},[49,7285,7286,7288,7290,7292,7294],{"class":51,"line":1409},[49,7287,2077],{"class":59},[49,7289,1490],{"class":55},[49,7291,60],{"class":59},[49,7293,95],{"class":66},[49,7295,1382],{"class":55},[49,7297,7298,7300,7302,7304,7306],{"class":51,"line":1421},[49,7299,2077],{"class":59},[49,7301,2925],{"class":55},[49,7303,60],{"class":59},[49,7305,919],{"class":66},[49,7307,1382],{"class":55},[49,7309,7310],{"class":51,"line":1704},[49,7311,7312],{"class":283},"    \u002F\u002F地址传递\n",[49,7314,7315,7317,7319,7321,7324,7326],{"class":51,"line":1709},[49,7316,5651],{"class":2055},[49,7318,228],{"class":55},[49,7320,575],{"class":59},[49,7322,7323],{"class":55},"a,",[49,7325,575],{"class":59},[49,7327,7328],{"class":55},"b);\n",[49,7330,7331,7333,7335,7337,7339,7341],{"class":51,"line":1715},[49,7332,1643],{"class":55},[49,7334,1263],{"class":59},[49,7336,56],{"class":55},[49,7338,1263],{"class":59},[49,7340,1330],{"class":55},[49,7342,7343],{"class":283},"\u002F\u002F20\n",[49,7345,7346,7348,7350,7352,7354,7356],{"class":51,"line":1720},[49,7347,1643],{"class":55},[49,7349,1263],{"class":59},[49,7351,87],{"class":55},[49,7353,1263],{"class":59},[49,7355,1330],{"class":55},[49,7357,7358],{"class":283},"\u002F\u002F10\n",[49,7360,7361],{"class":51,"line":1734},[49,7362,1657],{"class":55},[14,7364,7365],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[166,7367,7369],{"id":7368},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7371,7372],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7374,7375,7376,7378],{},"例如数组：int arr",[49,7377,95],{},"={4,3,6,9,1,2,10,8,7,5}",[39,7380,7382],{"className":216,"code":7381,"language":218,"meta":44,"style":44},"#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",[46,7383,7384,7390,7400,7424,7428,7459,7463,7497,7501,7519,7523,7534,7549,7564,7568,7572,7576,7580,7584,7592,7596,7601,7655,7667,7679,7684,7692,7696,7701,7726,7730,7745,7754,7758],{"__ignoreMap":44},[49,7385,7386,7388],{"class":51,"line":52},[49,7387,2041],{"class":59},[49,7389,2044],{"class":328},[49,7391,7392,7394,7396,7398],{"class":51,"line":84},[49,7393,2049],{"class":59},[49,7395,2052],{"class":59},[49,7397,2056],{"class":2055},[49,7399,1382],{"class":55},[49,7401,7402,7404,7407,7409,7411,7413,7415,7417,7419,7422],{"class":51,"line":109},[49,7403,5454],{"class":59},[49,7405,7406],{"class":2055}," bubbleSort",[49,7408,228],{"class":55},[49,7410,231],{"class":59},[49,7412,6608],{"class":59},[49,7414,14],{"class":126},[49,7416,76],{"class":55},[49,7418,231],{"class":59},[49,7420,7421],{"class":126}," len",[49,7423,81],{"class":55},[49,7425,7426],{"class":51,"line":120},[49,7427,1638],{"class":55},[49,7429,7430,7432,7434,7436,7438,7440,7442,7444,7446,7449,7451,7453,7455,7457],{"class":51,"line":135},[49,7431,3293],{"class":59},[49,7433,228],{"class":55},[49,7435,231],{"class":59},[49,7437,3124],{"class":55},[49,7439,60],{"class":59},[49,7441,415],{"class":66},[49,7443,3131],{"class":55},[49,7445,1129],{"class":59},[49,7447,7448],{"class":55},"len",[49,7450,751],{"class":59},[49,7452,441],{"class":66},[49,7454,3131],{"class":55},[49,7456,2384],{"class":59},[49,7458,81],{"class":55},[49,7460,7461],{"class":51,"line":1306},[49,7462,2122],{"class":55},[49,7464,7465,7467,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493,7495],{"class":51,"line":1312},[49,7466,3495],{"class":59},[49,7468,228],{"class":55},[49,7470,231],{"class":59},[49,7472,3502],{"class":55},[49,7474,60],{"class":59},[49,7476,415],{"class":66},[49,7478,3509],{"class":55},[49,7480,1129],{"class":59},[49,7482,7448],{"class":55},[49,7484,751],{"class":59},[49,7486,661],{"class":55},[49,7488,751],{"class":59},[49,7490,441],{"class":66},[49,7492,3509],{"class":55},[49,7494,2384],{"class":59},[49,7496,81],{"class":55},[49,7498,7499],{"class":51,"line":1403},[49,7500,2602],{"class":55},[49,7502,7503,7505,7508,7510,7513,7515,7517],{"class":51,"line":1409},[49,7504,4734],{"class":59},[49,7506,7507],{"class":55},"(p[j]",[49,7509,1179],{"class":59},[49,7511,7512],{"class":55},"p[j",[49,7514,700],{"class":59},[49,7516,441],{"class":66},[49,7518,106],{"class":55},[49,7520,7521],{"class":51,"line":1421},[49,7522,4753],{"class":55},[49,7524,7525,7527,7529,7531],{"class":51,"line":1704},[49,7526,4758],{"class":59},[49,7528,4347],{"class":55},[49,7530,60],{"class":59},[49,7532,7533],{"class":55},"p[j];\n",[49,7535,7536,7539,7541,7543,7545,7547],{"class":51,"line":1709},[49,7537,7538],{"class":55},"                p[j]",[49,7540,60],{"class":59},[49,7542,7512],{"class":55},[49,7544,700],{"class":59},[49,7546,441],{"class":66},[49,7548,4781],{"class":55},[49,7550,7551,7554,7556,7558,7560,7562],{"class":51,"line":1715},[49,7552,7553],{"class":55},"                p[j",[49,7555,700],{"class":59},[49,7557,441],{"class":66},[49,7559,1159],{"class":55},[49,7561,60],{"class":59},[49,7563,4372],{"class":55},[49,7565,7566],{"class":51,"line":1720},[49,7567,4801],{"class":55},[49,7569,7570],{"class":51,"line":1734},[49,7571,2621],{"class":55},[49,7573,7574],{"class":51,"line":1739},[49,7575,2279],{"class":55},[49,7577,7578],{"class":51,"line":1745},[49,7579,1657],{"class":55},[49,7581,7582],{"class":51,"line":1766},[49,7583,2492],{"emptyLinePlaceholder":151},[49,7585,7586,7588,7590],{"class":51,"line":1771},[49,7587,231],{"class":59},[49,7589,2065],{"class":2055},[49,7591,2068],{"class":55},[49,7593,7594],{"class":51,"line":1785},[49,7595,1638],{"class":55},[49,7597,7598],{"class":51,"line":1790},[49,7599,7600],{"class":283},"    \u002F\u002F 1.创建数组\n",[49,7602,7603,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623,7625,7627,7629,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649,7651,7653],{"class":51,"line":1819},[49,7604,2077],{"class":59},[49,7606,4054],{"class":55},[49,7608,95],{"class":66},[49,7610,1159],{"class":55},[49,7612,60],{"class":59},[49,7614,1115],{"class":55},[49,7616,515],{"class":66},[49,7618,76],{"class":55},[49,7620,73],{"class":66},[49,7622,76],{"class":55},[49,7624,566],{"class":66},[49,7626,76],{"class":55},[49,7628,67],{"class":66},[49,7630,76],{"class":55},[49,7632,441],{"class":66},[49,7634,76],{"class":55},[49,7636,301],{"class":66},[49,7638,76],{"class":55},[49,7640,95],{"class":66},[49,7642,76],{"class":55},[49,7644,616],{"class":66},[49,7646,76],{"class":55},[49,7648,591],{"class":66},[49,7650,76],{"class":55},[49,7652,541],{"class":66},[49,7654,4087],{"class":55},[49,7656,7657,7659,7661,7663,7665],{"class":51,"line":1824},[49,7658,2077],{"class":59},[49,7660,7421],{"class":55},[49,7662,60],{"class":59},[49,7664,95],{"class":66},[49,7666,1382],{"class":55},[49,7668,7669,7671,7673,7675,7677],{"class":51,"line":1841},[49,7670,2077],{"class":59},[49,7672,6608],{"class":59},[49,7674,14],{"class":55},[49,7676,60],{"class":59},[49,7678,7128],{"class":55},[49,7680,7681],{"class":51,"line":1846},[49,7682,7683],{"class":283},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[49,7685,7686,7689],{"class":51,"line":1851},[49,7687,7688],{"class":2055},"    bubbleSort",[49,7690,7691],{"class":55},"(p,len);\n",[49,7693,7694],{"class":51,"line":1856},[49,7695,2492],{"emptyLinePlaceholder":151},[49,7697,7698],{"class":51,"line":1870},[49,7699,7700],{"class":283},"    \u002F\u002F 3.打印排序后的数组\n",[49,7702,7703,7705,7707,7709,7711,7713,7715,7717,7719,7722,7724],{"class":51,"line":1875},[49,7704,3293],{"class":59},[49,7706,1750],{"class":55},[49,7708,231],{"class":59},[49,7710,3124],{"class":55},[49,7712,60],{"class":59},[49,7714,415],{"class":66},[49,7716,3306],{"class":55},[49,7718,1129],{"class":59},[49,7720,7721],{"class":55},"len; i",[49,7723,2384],{"class":59},[49,7725,81],{"class":55},[49,7727,7728],{"class":51,"line":2669},[49,7729,2122],{"class":55},[49,7731,7732,7734,7736,7738,7740,7743],{"class":51,"line":2683},[49,7733,3543],{"class":55},[49,7735,6509],{"class":59},[49,7737,14],{"class":55},[49,7739,1263],{"class":59},[49,7741,7742],{"class":328},"\"\"",[49,7744,1382],{"class":55},[49,7746,7747,7750,7752],{"class":51,"line":2691},[49,7748,7749],{"class":55},"        p",[49,7751,2384],{"class":59},[49,7753,1382],{"class":55},[49,7755,7756],{"class":51,"line":2696},[49,7757,2279],{"class":55},[49,7759,7760],{"class":51,"line":2702},[49,7761,1657],{"class":55},[143,7763,7764],{},"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":44,"searchDepth":84,"depth":84,"links":7766},[7767,7768,7769,7770,7771,7772,7773,7774],{"id":6373,"depth":84,"text":6374},{"id":6539,"depth":84,"text":6540},{"id":6695,"depth":84,"text":6696},{"id":6773,"depth":84,"text":6774},{"id":6852,"depth":84,"text":6853},{"id":6951,"depth":84,"text":6952},{"id":7190,"depth":84,"text":7191},{"id":7368,"depth":84,"text":7369},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6362,"description":6370},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7781,"title":7782,"body":7783,"description":7790,"extension":149,"meta":10764,"navigation":151,"path":10765,"seo":10766,"stem":10767,"__hash__":10768},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7784,"toc":10755},[7785,7788,7791,7795,7798,7801,7812,8150,8153,8157,8160,8167,8422,8426,8429,8432,8587,8591,8594,8597,8803,8807,8810,9113,9116,9124,9128,9131,9282,9284,9295,9352,9356,9361,10018,10026,10029,10123,10126,10746,10752],[10,7786,7782],{"id":7787},"_4结构体",[14,7789,7790],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[166,7792,7794],{"id":7793},"_41结构体定义与使用","4.1结构体定义与使用",[14,7796,7797],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7799,7800],{},"通过结构体创建变量的方式：",[1226,7802,7803,7806,7809],{},[181,7804,7805],{},"struct 结构体名 变量名",[181,7807,7808],{},"struct 结构体名 变量名={成员1值，成员2值...}",[181,7810,7811],{},"定义结构体时顺便创建变量",[39,7813,7815],{"className":216,"code":7814,"language":218,"meta":44,"style":44},"#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",[46,7816,7817,7823,7833,7840,7845,7853,7857,7862,7866,7871,7876,7881,7888,7893,7900,7904,7911,7915,7919,7923,7927,7931,7935,7941,7945,7951,7959,7967,7971,7976,7981,7992,7997,8009,8020,8031,8036,8060,8065,8071,8098,8103,8109,8121,8133,8145],{"__ignoreMap":44},[49,7818,7819,7821],{"class":51,"line":52},[49,7820,2041],{"class":59},[49,7822,2044],{"class":328},[49,7824,7825,7827,7829,7831],{"class":51,"line":84},[49,7826,2049],{"class":59},[49,7828,2052],{"class":59},[49,7830,2056],{"class":2055},[49,7832,1382],{"class":55},[49,7834,7835,7837],{"class":51,"line":109},[49,7836,2041],{"class":59},[49,7838,7839],{"class":328},"\u003Cstring>\n",[49,7841,7842],{"class":51,"line":120},[49,7843,7844],{"class":283},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[49,7846,7847,7850],{"class":51,"line":135},[49,7848,7849],{"class":59},"struct",[49,7851,7852],{"class":2055}," Student\n",[49,7854,7855],{"class":51,"line":1306},[49,7856,1638],{"class":55},[49,7858,7859],{"class":51,"line":1312},[49,7860,7861],{"class":283},"    \u002F\u002F成员列表\n",[49,7863,7864],{"class":51,"line":1403},[49,7865,2492],{"emptyLinePlaceholder":151},[49,7867,7868],{"class":51,"line":1409},[49,7869,7870],{"class":283},"    \u002F\u002F姓名\n",[49,7872,7873],{"class":51,"line":1421},[49,7874,7875],{"class":55},"    string name;\n",[49,7877,7878],{"class":51,"line":1704},[49,7879,7880],{"class":283},"    \u002F\u002F年龄\n",[49,7882,7883,7885],{"class":51,"line":1709},[49,7884,2077],{"class":59},[49,7886,7887],{"class":55}," age;\n",[49,7889,7890],{"class":51,"line":1715},[49,7891,7892],{"class":283},"    \u002F\u002F分数\n",[49,7894,7895,7897],{"class":51,"line":1720},[49,7896,2077],{"class":59},[49,7898,7899],{"class":55}," score;\n",[49,7901,7902],{"class":51,"line":1734},[49,7903,4087],{"class":55},[49,7905,7906,7908],{"class":51,"line":1739},[49,7907,7849],{"class":59},[49,7909,7910],{"class":2055}," School\n",[49,7912,7913],{"class":51,"line":1745},[49,7914,1638],{"class":55},[49,7916,7917],{"class":51,"line":1766},[49,7918,7861],{"class":283},[49,7920,7921],{"class":51,"line":1771},[49,7922,2492],{"emptyLinePlaceholder":151},[49,7924,7925],{"class":51,"line":1785},[49,7926,7870],{"class":283},[49,7928,7929],{"class":51,"line":1790},[49,7930,7875],{"class":55},[49,7932,7933],{"class":51,"line":1819},[49,7934,7880],{"class":283},[49,7936,7937,7939],{"class":51,"line":1824},[49,7938,2077],{"class":59},[49,7940,7887],{"class":55},[49,7942,7943],{"class":51,"line":1841},[49,7944,7892],{"class":283},[49,7946,7947,7949],{"class":51,"line":1846},[49,7948,2077],{"class":59},[49,7950,7899],{"class":55},[49,7952,7953,7956],{"class":51,"line":1851},[49,7954,7955],{"class":55},"} s3;",[49,7957,7958],{"class":283}," \u002F\u002F创建结构体时就创建了变量\n",[49,7960,7961,7963,7965],{"class":51,"line":1856},[49,7962,231],{"class":59},[49,7964,2065],{"class":2055},[49,7966,2068],{"class":55},[49,7968,7969],{"class":51,"line":1870},[49,7970,1638],{"class":55},[49,7972,7973],{"class":51,"line":1875},[49,7974,7975],{"class":283},"    \u002F\u002F2.通过学生类型创建具体学生\n",[49,7977,7978],{"class":51,"line":2669},[49,7979,7980],{"class":283},"    \u002F\u002F2.1 struct Student s1;\n",[49,7982,7983,7986,7989],{"class":51,"line":2683},[49,7984,7985],{"class":59},"    struct",[49,7987,7988],{"class":2055}," Student",[49,7990,7991],{"class":55}," s1;\n",[49,7993,7994],{"class":51,"line":2691},[49,7995,7996],{"class":283},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[49,7998,7999,8002,8004,8007],{"class":51,"line":2696},[49,8000,8001],{"class":55},"    s1.name",[49,8003,60],{"class":59},[49,8005,8006],{"class":328},"\"张三\"",[49,8008,1382],{"class":55},[49,8010,8011,8014,8016,8018],{"class":51,"line":2702},[49,8012,8013],{"class":55},"    s1.age",[49,8015,60],{"class":59},[49,8017,869],{"class":66},[49,8019,1382],{"class":55},[49,8021,8022,8025,8027,8029],{"class":51,"line":2708},[49,8023,8024],{"class":55},"    s1.score",[49,8026,60],{"class":59},[49,8028,477],{"class":66},[49,8030,1382],{"class":55},[49,8032,8033],{"class":51,"line":2713},[49,8034,8035],{"class":283},"    \u002F\u002F输出结果\n",[49,8037,8039,8041,8043,8046,8048,8051,8053,8056,8058],{"class":51,"line":8038},37,[49,8040,1643],{"class":55},[49,8042,1263],{"class":59},[49,8044,8045],{"class":55},"s1.name",[49,8047,1263],{"class":59},[49,8049,8050],{"class":55},"s1.age",[49,8052,1263],{"class":59},[49,8054,8055],{"class":55},"s1.score",[49,8057,1263],{"class":59},[49,8059,1285],{"class":55},[49,8061,8063],{"class":51,"line":8062},38,[49,8064,2492],{"emptyLinePlaceholder":151},[49,8066,8068],{"class":51,"line":8067},39,[49,8069,8070],{"class":283},"    \u002F\u002F2.2 struct Student s2={...}\n",[49,8072,8074,8076,8078,8081,8083,8085,8088,8090,8092,8094,8096],{"class":51,"line":8073},40,[49,8075,7985],{"class":59},[49,8077,7988],{"class":2055},[49,8079,8080],{"class":55}," s2",[49,8082,60],{"class":59},[49,8084,1115],{"class":55},[49,8086,8087],{"class":328},"\"王五\"",[49,8089,76],{"class":55},[49,8091,869],{"class":66},[49,8093,76],{"class":55},[49,8095,477],{"class":66},[49,8097,4087],{"class":55},[49,8099,8101],{"class":51,"line":8100},41,[49,8102,2492],{"emptyLinePlaceholder":151},[49,8104,8106],{"class":51,"line":8105},42,[49,8107,8108],{"class":283},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[49,8110,8112,8115,8117,8119],{"class":51,"line":8111},43,[49,8113,8114],{"class":55},"    s3.name",[49,8116,60],{"class":59},[49,8118,3770],{"class":328},[49,8120,1382],{"class":55},[49,8122,8124,8127,8129,8131],{"class":51,"line":8123},44,[49,8125,8126],{"class":55},"    s3.age",[49,8128,60],{"class":59},[49,8130,869],{"class":66},[49,8132,1382],{"class":55},[49,8134,8136,8139,8141,8143],{"class":51,"line":8135},45,[49,8137,8138],{"class":55},"    s3.score",[49,8140,60],{"class":59},[49,8142,919],{"class":66},[49,8144,1382],{"class":55},[49,8146,8148],{"class":51,"line":8147},46,[49,8149,1657],{"class":55},[14,8151,8152],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[166,8154,8156],{"id":8155},"_42结构体数组","4.2结构体数组",[14,8158,8159],{},"将自定义的结构体放入到数组中方便维护",[14,8161,8162,8163,8166],{},"语法：struct 结构体名 数组名",[49,8164,8165],{},"元素个数","={ {}，{},...{} };",[39,8168,8170],{"className":216,"code":8169,"language":218,"meta":44,"style":44},"#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",[46,8171,8172,8178,8188,8194,8199,8205,8209,8213,8219,8225,8229,8233,8241,8245,8250,8265,8269,8285,8301,8305,8310,8326,8341,8356,8361,8387,8391,8414,8418],{"__ignoreMap":44},[49,8173,8174,8176],{"class":51,"line":52},[49,8175,2041],{"class":59},[49,8177,2044],{"class":328},[49,8179,8180,8182,8184,8186],{"class":51,"line":84},[49,8181,2049],{"class":59},[49,8183,2052],{"class":59},[49,8185,2056],{"class":2055},[49,8187,1382],{"class":55},[49,8189,8190,8192],{"class":51,"line":109},[49,8191,2041],{"class":59},[49,8193,7839],{"class":328},[49,8195,8196],{"class":51,"line":120},[49,8197,8198],{"class":283},"\u002F\u002F1.定义结构体\n",[49,8200,8201,8203],{"class":51,"line":135},[49,8202,7849],{"class":59},[49,8204,7852],{"class":2055},[49,8206,8207],{"class":51,"line":1306},[49,8208,1638],{"class":55},[49,8210,8211],{"class":51,"line":1312},[49,8212,7875],{"class":55},[49,8214,8215,8217],{"class":51,"line":1403},[49,8216,2077],{"class":59},[49,8218,7887],{"class":55},[49,8220,8221,8223],{"class":51,"line":1409},[49,8222,2077],{"class":59},[49,8224,7899],{"class":55},[49,8226,8227],{"class":51,"line":1421},[49,8228,2492],{"emptyLinePlaceholder":151},[49,8230,8231],{"class":51,"line":1704},[49,8232,4087],{"class":55},[49,8234,8235,8237,8239],{"class":51,"line":1709},[49,8236,231],{"class":59},[49,8238,2065],{"class":2055},[49,8240,2068],{"class":55},[49,8242,8243],{"class":51,"line":1715},[49,8244,1638],{"class":55},[49,8246,8247],{"class":51,"line":1720},[49,8248,8249],{"class":283},"    \u002F\u002F2.创建结构体数组\n",[49,8251,8252,8254,8256,8259,8261,8263],{"class":51,"line":1734},[49,8253,7985],{"class":59},[49,8255,7988],{"class":2055},[49,8257,8258],{"class":55}," stuArray[",[49,8260,301],{"class":66},[49,8262,1159],{"class":55},[49,8264,4999],{"class":59},[49,8266,8267],{"class":51,"line":1739},[49,8268,2122],{"class":55},[49,8270,8271,8273,8275,8277,8279,8281,8283],{"class":51,"line":1745},[49,8272,5008],{"class":55},[49,8274,8006],{"class":328},[49,8276,76],{"class":55},[49,8278,869],{"class":66},[49,8280,76],{"class":55},[49,8282,533],{"class":66},[49,8284,5021],{"class":55},[49,8286,8287,8289,8291,8293,8295,8297,8299],{"class":51,"line":1766},[49,8288,5008],{"class":55},[49,8290,3770],{"class":328},[49,8292,76],{"class":55},[49,8294,794],{"class":66},[49,8296,76],{"class":55},[49,8298,794],{"class":66},[49,8300,1657],{"class":55},[49,8302,8303],{"class":51,"line":1771},[49,8304,2279],{"class":55},[49,8306,8307],{"class":51,"line":1785},[49,8308,8309],{"class":283},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[49,8311,8312,8315,8317,8320,8322,8324],{"class":51,"line":1790},[49,8313,8314],{"class":55},"    stuArray[",[49,8316,441],{"class":66},[49,8318,8319],{"class":55},"].name",[49,8321,60],{"class":59},[49,8323,3793],{"class":328},[49,8325,1382],{"class":55},[49,8327,8328,8330,8332,8335,8337,8339],{"class":51,"line":1819},[49,8329,8314],{"class":55},[49,8331,441],{"class":66},[49,8333,8334],{"class":55},"].age",[49,8336,60],{"class":59},[49,8338,301],{"class":66},[49,8340,1382],{"class":55},[49,8342,8343,8345,8347,8350,8352,8354],{"class":51,"line":1824},[49,8344,8314],{"class":55},[49,8346,441],{"class":66},[49,8348,8349],{"class":55},"].score",[49,8351,60],{"class":59},[49,8353,301],{"class":66},[49,8355,1382],{"class":55},[49,8357,8358],{"class":51,"line":1841},[49,8359,8360],{"class":283},"    \u002F\u002F4.遍历结构体数组\n",[49,8362,8363,8365,8367,8369,8371,8373,8375,8377,8379,8381,8383,8385],{"class":51,"line":1846},[49,8364,3293],{"class":59},[49,8366,1750],{"class":55},[49,8368,231],{"class":59},[49,8370,3124],{"class":55},[49,8372,60],{"class":59},[49,8374,415],{"class":66},[49,8376,3131],{"class":55},[49,8378,1129],{"class":59},[49,8380,301],{"class":66},[49,8382,3131],{"class":55},[49,8384,2384],{"class":59},[49,8386,81],{"class":55},[49,8388,8389],{"class":51,"line":1851},[49,8390,2122],{"class":55},[49,8392,8393,8395,8397,8400,8402,8405,8407,8410,8412],{"class":51,"line":1856},[49,8394,3543],{"class":55},[49,8396,1263],{"class":59},[49,8398,8399],{"class":55},"stuArray[i].name",[49,8401,1263],{"class":59},[49,8403,8404],{"class":55},"stuArray[i].age",[49,8406,1263],{"class":59},[49,8408,8409],{"class":55},"stuArray[i].score",[49,8411,1263],{"class":59},[49,8413,1285],{"class":55},[49,8415,8416],{"class":51,"line":1870},[49,8417,2279],{"class":55},[49,8419,8420],{"class":51,"line":1875},[49,8421,1657],{"class":55},[166,8423,8425],{"id":8424},"_43结构体指针","4.3结构体指针",[14,8427,8428],{},"作用：通过指针访问结构体中的成员",[14,8430,8431],{},"利用操作符->可以通过结构体指针访问结构体属性",[39,8433,8435],{"className":216,"code":8434,"language":218,"meta":44,"style":44},"#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",[46,8436,8437,8443,8453,8459,8463,8469,8473,8477,8483,8489,8493,8501,8505,8510,8535,8540,8555,8560,8583],{"__ignoreMap":44},[49,8438,8439,8441],{"class":51,"line":52},[49,8440,2041],{"class":59},[49,8442,2044],{"class":328},[49,8444,8445,8447,8449,8451],{"class":51,"line":84},[49,8446,2049],{"class":59},[49,8448,2052],{"class":59},[49,8450,2056],{"class":2055},[49,8452,1382],{"class":55},[49,8454,8455,8457],{"class":51,"line":109},[49,8456,2041],{"class":59},[49,8458,7839],{"class":328},[49,8460,8461],{"class":51,"line":120},[49,8462,8198],{"class":283},[49,8464,8465,8467],{"class":51,"line":135},[49,8466,7849],{"class":59},[49,8468,7852],{"class":2055},[49,8470,8471],{"class":51,"line":1306},[49,8472,1638],{"class":55},[49,8474,8475],{"class":51,"line":1312},[49,8476,7875],{"class":55},[49,8478,8479,8481],{"class":51,"line":1403},[49,8480,2077],{"class":59},[49,8482,7887],{"class":55},[49,8484,8485,8487],{"class":51,"line":1409},[49,8486,2077],{"class":59},[49,8488,7899],{"class":55},[49,8490,8491],{"class":51,"line":1421},[49,8492,4087],{"class":55},[49,8494,8495,8497,8499],{"class":51,"line":1704},[49,8496,231],{"class":59},[49,8498,2065],{"class":2055},[49,8500,2068],{"class":55},[49,8502,8503],{"class":51,"line":1709},[49,8504,1638],{"class":55},[49,8506,8507],{"class":51,"line":1715},[49,8508,8509],{"class":283},"    \u002F\u002F创建学生结构体变量\n",[49,8511,8512,8514,8516,8519,8521,8523,8525,8527,8529,8531,8533],{"class":51,"line":1720},[49,8513,7985],{"class":59},[49,8515,7988],{"class":2055},[49,8517,8518],{"class":55}," s",[49,8520,60],{"class":59},[49,8522,1115],{"class":55},[49,8524,8006],{"class":328},[49,8526,76],{"class":55},[49,8528,869],{"class":66},[49,8530,76],{"class":55},[49,8532,1814],{"class":66},[49,8534,4087],{"class":55},[49,8536,8537],{"class":51,"line":1734},[49,8538,8539],{"class":283},"    \u002F\u002F通过指针指向结构体变量\n",[49,8541,8542,8544,8546,8548,8550,8552],{"class":51,"line":1739},[49,8543,7985],{"class":59},[49,8545,7988],{"class":2055},[49,8547,6608],{"class":59},[49,8549,14],{"class":55},[49,8551,6429],{"class":59},[49,8553,8554],{"class":55},"s\n",[49,8556,8557],{"class":51,"line":1745},[49,8558,8559],{"class":283},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[49,8561,8562,8564,8566,8569,8571,8574,8576,8579,8581],{"class":51,"line":1766},[49,8563,1643],{"class":55},[49,8565,1263],{"class":59},[49,8567,8568],{"class":55},"p->name",[49,8570,1263],{"class":59},[49,8572,8573],{"class":55},"p->age",[49,8575,1263],{"class":59},[49,8577,8578],{"class":55},"p->score",[49,8580,1263],{"class":59},[49,8582,1285],{"class":55},[49,8584,8585],{"class":51,"line":1771},[49,8586,1657],{"class":55},[166,8588,8590],{"id":8589},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8592,8593],{},"作用：结构体中的成员可以是另一个结构体",[14,8595,8596],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[39,8598,8600],{"className":216,"code":8599,"language":218,"meta":44,"style":44},"#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",[46,8601,8602,8608,8618,8624,8629,8637,8641,8645,8651,8657,8661,8666,8673,8677,8684,8688,8694,8699,8703,8711,8715,8720,8725,8730,8741,8753,8764,8777,8788,8799],{"__ignoreMap":44},[49,8603,8604,8606],{"class":51,"line":52},[49,8605,2041],{"class":59},[49,8607,2044],{"class":328},[49,8609,8610,8612,8614,8616],{"class":51,"line":84},[49,8611,2049],{"class":59},[49,8613,2052],{"class":59},[49,8615,2056],{"class":2055},[49,8617,1382],{"class":55},[49,8619,8620,8622],{"class":51,"line":109},[49,8621,2041],{"class":59},[49,8623,7839],{"class":328},[49,8625,8626],{"class":51,"line":120},[49,8627,8628],{"class":283},"\u002F\u002F定义学生结构体\n",[49,8630,8631,8633,8635],{"class":51,"line":135},[49,8632,7849],{"class":59},[49,8634,7988],{"class":2055},[49,8636,2766],{"class":55},[49,8638,8639],{"class":51,"line":1306},[49,8640,1638],{"class":55},[49,8642,8643],{"class":51,"line":1312},[49,8644,7875],{"class":55},[49,8646,8647,8649],{"class":51,"line":1403},[49,8648,2077],{"class":59},[49,8650,7887],{"class":55},[49,8652,8653,8655],{"class":51,"line":1409},[49,8654,2077],{"class":59},[49,8656,7899],{"class":55},[49,8658,8659],{"class":51,"line":1421},[49,8660,1657],{"class":55},[49,8662,8663],{"class":51,"line":1704},[49,8664,8665],{"class":283},"\u002F\u002F定义老师结构体\n",[49,8667,8668,8670],{"class":51,"line":1709},[49,8669,7849],{"class":59},[49,8671,8672],{"class":2055}," Teacher\n",[49,8674,8675],{"class":51,"line":1715},[49,8676,1638],{"class":55},[49,8678,8679,8681],{"class":51,"line":1720},[49,8680,2077],{"class":59},[49,8682,8683],{"class":55}," id;\n",[49,8685,8686],{"class":51,"line":1734},[49,8687,7875],{"class":55},[49,8689,8690,8692],{"class":51,"line":1739},[49,8691,2077],{"class":59},[49,8693,7887],{"class":55},[49,8695,8696],{"class":51,"line":1745},[49,8697,8698],{"class":55},"    Student stu;\n",[49,8700,8701],{"class":51,"line":1766},[49,8702,1657],{"class":55},[49,8704,8705,8707,8709],{"class":51,"line":1771},[49,8706,231],{"class":59},[49,8708,2065],{"class":2055},[49,8710,6068],{"class":55},[49,8712,8713],{"class":51,"line":1785},[49,8714,1638],{"class":55},[49,8716,8717],{"class":51,"line":1790},[49,8718,8719],{"class":283},"    \u002F\u002F结构体嵌套结构体\n",[49,8721,8722],{"class":51,"line":1819},[49,8723,8724],{"class":283},"    \u002F\u002F创建老师\n",[49,8726,8727],{"class":51,"line":1824},[49,8728,8729],{"class":55},"    Teacher t;\n",[49,8731,8732,8735,8737,8739],{"class":51,"line":1841},[49,8733,8734],{"class":55},"    t.id",[49,8736,60],{"class":59},[49,8738,533],{"class":66},[49,8740,1382],{"class":55},[49,8742,8743,8746,8748,8751],{"class":51,"line":1846},[49,8744,8745],{"class":55},"    t.name",[49,8747,60],{"class":59},[49,8749,8750],{"class":328},"\"老王\"",[49,8752,1382],{"class":55},[49,8754,8755,8758,8760,8762],{"class":51,"line":1851},[49,8756,8757],{"class":55},"    t.age",[49,8759,60],{"class":59},[49,8761,869],{"class":66},[49,8763,1382],{"class":55},[49,8765,8766,8769,8771,8774],{"class":51,"line":1856},[49,8767,8768],{"class":55},"    t.stu.name",[49,8770,60],{"class":59},[49,8772,8773],{"class":328},"\"小王\"",[49,8775,8776],{"class":55},"；\n",[49,8778,8779,8782,8784,8786],{"class":51,"line":1870},[49,8780,8781],{"class":55},"    t.stu.age",[49,8783,60],{"class":59},[49,8785,919],{"class":66},[49,8787,1382],{"class":55},[49,8789,8790,8793,8795,8797],{"class":51,"line":1875},[49,8791,8792],{"class":55},"    t.stu.score",[49,8794,60],{"class":59},[49,8796,566],{"class":66},[49,8798,1382],{"class":55},[49,8800,8801],{"class":51,"line":2669},[49,8802,1657],{"class":55},[166,8804,8806],{"id":8805},"_45结构体做函数参数","4.5结构体做函数参数",[14,8808,8809],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[39,8811,8813],{"className":216,"code":8812,"language":218,"meta":44,"style":44},"#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",[46,8814,8815,8821,8831,8837,8843,8847,8851,8857,8863,8867,8872,8877,8894,8898,8931,8935,8940,8959,8963,8994,8998,9006,9010,9019,9031,9043,9055,9068,9076,9089,9101,9109],{"__ignoreMap":44},[49,8816,8817,8819],{"class":51,"line":52},[49,8818,2041],{"class":59},[49,8820,2044],{"class":328},[49,8822,8823,8825,8827,8829],{"class":51,"line":84},[49,8824,2049],{"class":59},[49,8826,2052],{"class":59},[49,8828,2056],{"class":2055},[49,8830,1382],{"class":55},[49,8832,8833,8835],{"class":51,"line":109},[49,8834,2041],{"class":59},[49,8836,7839],{"class":328},[49,8838,8839,8841],{"class":51,"line":120},[49,8840,7849],{"class":59},[49,8842,7852],{"class":2055},[49,8844,8845],{"class":51,"line":135},[49,8846,1638],{"class":55},[49,8848,8849],{"class":51,"line":1306},[49,8850,7875],{"class":55},[49,8852,8853,8855],{"class":51,"line":1312},[49,8854,2077],{"class":59},[49,8856,7887],{"class":55},[49,8858,8859,8861],{"class":51,"line":1403},[49,8860,2077],{"class":59},[49,8862,7899],{"class":55},[49,8864,8865],{"class":51,"line":1409},[49,8866,4087],{"class":55},[49,8868,8869],{"class":51,"line":1421},[49,8870,8871],{"class":283},"\u002F\u002F打印学生信息的函数\n",[49,8873,8874],{"class":51,"line":1704},[49,8875,8876],{"class":283},"\u002F\u002F值传递\n",[49,8878,8879,8881,8884,8886,8888,8890,8892],{"class":51,"line":1709},[49,8880,5454],{"class":59},[49,8882,8883],{"class":2055}," printStudent1",[49,8885,228],{"class":55},[49,8887,7849],{"class":59},[49,8889,7988],{"class":2055},[49,8891,8518],{"class":126},[49,8893,81],{"class":55},[49,8895,8896],{"class":51,"line":1715},[49,8897,1638],{"class":55},[49,8899,8900,8902,8904,8907,8909,8912,8914,8917,8919,8921,8923,8926,8928],{"class":51,"line":1720},[49,8901,6619],{"class":55},[49,8903,1263],{"class":59},[49,8905,8906],{"class":55}," s.name ",[49,8908,1263],{"class":59},[49,8910,8911],{"class":328}," \" \"",[49,8913,1536],{"class":59},[49,8915,8916],{"class":55}," s.age ",[49,8918,1263],{"class":59},[49,8920,8911],{"class":328},[49,8922,1536],{"class":59},[49,8924,8925],{"class":55}," s.score ",[49,8927,1263],{"class":59},[49,8929,8930],{"class":55}," endl;\n",[49,8932,8933],{"class":51,"line":1734},[49,8934,1657],{"class":55},[49,8936,8937],{"class":51,"line":1739},[49,8938,8939],{"class":283},"\u002F\u002F地址传递\n",[49,8941,8942,8944,8947,8949,8951,8953,8955,8957],{"class":51,"line":1745},[49,8943,5454],{"class":59},[49,8945,8946],{"class":2055}," printStudent2",[49,8948,228],{"class":55},[49,8950,7849],{"class":59},[49,8952,7988],{"class":2055},[49,8954,6608],{"class":59},[49,8956,914],{"class":126},[49,8958,81],{"class":55},[49,8960,8961],{"class":51,"line":1766},[49,8962,1638],{"class":55},[49,8964,8965,8967,8969,8972,8974,8976,8978,8981,8983,8985,8987,8990,8992],{"class":51,"line":1771},[49,8966,6619],{"class":55},[49,8968,1263],{"class":59},[49,8970,8971],{"class":55}," s->name ",[49,8973,1263],{"class":59},[49,8975,8911],{"class":328},[49,8977,1536],{"class":59},[49,8979,8980],{"class":55}," s->age ",[49,8982,1263],{"class":59},[49,8984,8911],{"class":328},[49,8986,1536],{"class":59},[49,8988,8989],{"class":55}," s->score ",[49,8991,1263],{"class":59},[49,8993,8930],{"class":55},[49,8995,8996],{"class":51,"line":1785},[49,8997,1657],{"class":55},[49,8999,9000,9002,9004],{"class":51,"line":1790},[49,9001,231],{"class":59},[49,9003,2065],{"class":2055},[49,9005,2068],{"class":55},[49,9007,9008],{"class":51,"line":1819},[49,9009,1638],{"class":55},[49,9011,9012,9014,9016],{"class":51,"line":1824},[49,9013,7985],{"class":59},[49,9015,7988],{"class":2055},[49,9017,9018],{"class":55}," s;\n",[49,9020,9021,9024,9026,9029],{"class":51,"line":1841},[49,9022,9023],{"class":55},"    s.name ",[49,9025,60],{"class":59},[49,9027,9028],{"class":328}," \"张三\"",[49,9030,1382],{"class":55},[49,9032,9033,9036,9038,9041],{"class":51,"line":1846},[49,9034,9035],{"class":55},"    s.age ",[49,9037,60],{"class":59},[49,9039,9040],{"class":66}," 20",[49,9042,1382],{"class":55},[49,9044,9045,9048,9050,9053],{"class":51,"line":1851},[49,9046,9047],{"class":55},"    s.score ",[49,9049,60],{"class":59},[49,9051,9052],{"class":66}," 85",[49,9054,1382],{"class":55},[49,9056,9057,9059,9061,9064,9066],{"class":51,"line":1856},[49,9058,1643],{"class":55},[49,9060,1263],{"class":59},[49,9062,9063],{"class":328},"\"值传递:\"",[49,9065,1263],{"class":59},[49,9067,1285],{"class":55},[49,9069,9070,9073],{"class":51,"line":1870},[49,9071,9072],{"class":2055},"    printStudent1",[49,9074,9075],{"class":55},"(s);\n",[49,9077,9078,9080,9082,9085,9087],{"class":51,"line":1875},[49,9079,1643],{"class":55},[49,9081,1263],{"class":59},[49,9083,9084],{"class":328},"\"地址传递:\"",[49,9086,1263],{"class":59},[49,9088,1285],{"class":55},[49,9090,9091,9094,9096,9098],{"class":51,"line":2669},[49,9092,9093],{"class":2055},"    printStudent2",[49,9095,228],{"class":55},[49,9097,575],{"class":59},[49,9099,9100],{"class":55},"s); \n",[49,9102,9103,9105,9107],{"class":51,"line":2683},[49,9104,4182],{"class":59},[49,9106,4185],{"class":66},[49,9108,1382],{"class":55},[49,9110,9111],{"class":51,"line":2691},[49,9112,1657],{"class":55},[14,9114,9115],{},"注意：",[1226,9117,9118,9121],{},[181,9119,9120],{},"1.先定义结构体，不要在函数中写结构体的定义",[181,9122,9123],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[166,9125,9127],{"id":9126},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9129,9130],{},"用const防止误操作",[39,9132,9134],{"className":216,"code":9133,"language":218,"meta":44,"style":44},"#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",[46,9135,9136,9142,9152,9158,9163,9167,9171,9177,9183,9187,9203,9207,9230,9234,9242,9246,9267,9274,9278],{"__ignoreMap":44},[49,9137,9138,9140],{"class":51,"line":52},[49,9139,2041],{"class":59},[49,9141,2044],{"class":328},[49,9143,9144,9146,9148,9150],{"class":51,"line":84},[49,9145,2049],{"class":59},[49,9147,2052],{"class":59},[49,9149,2056],{"class":2055},[49,9151,1382],{"class":55},[49,9153,9154,9156],{"class":51,"line":109},[49,9155,2041],{"class":59},[49,9157,7839],{"class":328},[49,9159,9160],{"class":51,"line":120},[49,9161,9162],{"class":55},"sctuct Student\n",[49,9164,9165],{"class":51,"line":135},[49,9166,1638],{"class":55},[49,9168,9169],{"class":51,"line":1306},[49,9170,7875],{"class":55},[49,9172,9173,9175],{"class":51,"line":1312},[49,9174,2077],{"class":59},[49,9176,7887],{"class":55},[49,9178,9179,9181],{"class":51,"line":1403},[49,9180,2077],{"class":59},[49,9182,7899],{"class":55},[49,9184,9185],{"class":51,"line":1409},[49,9186,4087],{"class":55},[49,9188,9189,9191,9194,9196,9199,9201],{"class":51,"line":1421},[49,9190,5454],{"class":59},[49,9192,9193],{"class":2055}," printStudents",[49,9195,228],{"class":55},[49,9197,9198],{"class":2055},"student",[49,9200,8518],{"class":126},[49,9202,81],{"class":55},[49,9204,9205],{"class":51,"line":1704},[49,9206,1638],{"class":55},[49,9208,9209,9211,9213,9216,9218,9221,9223,9226,9228],{"class":51,"line":1709},[49,9210,1643],{"class":55},[49,9212,1263],{"class":59},[49,9214,9215],{"class":55},"s.name",[49,9217,1263],{"class":59},[49,9219,9220],{"class":55},"s.age",[49,9222,1263],{"class":59},[49,9224,9225],{"class":55},"s.score",[49,9227,1263],{"class":59},[49,9229,1285],{"class":55},[49,9231,9232],{"class":51,"line":1715},[49,9233,1657],{"class":55},[49,9235,9236,9238,9240],{"class":51,"line":1720},[49,9237,231],{"class":59},[49,9239,2065],{"class":2055},[49,9241,6068],{"class":55},[49,9243,9244],{"class":51,"line":1734},[49,9245,1638],{"class":55},[49,9247,9248,9251,9253,9255,9257,9259,9261,9263,9265],{"class":51,"line":1739},[49,9249,9250],{"class":55},"    Student s",[49,9252,60],{"class":59},[49,9254,1115],{"class":55},[49,9256,8006],{"class":328},[49,9258,76],{"class":55},[49,9260,869],{"class":66},[49,9262,76],{"class":55},[49,9264,869],{"class":66},[49,9266,4087],{"class":55},[49,9268,9269,9272],{"class":51,"line":1745},[49,9270,9271],{"class":2055},"    printStudent",[49,9273,9075],{"class":55},[49,9275,9276],{"class":51,"line":1766},[49,9277,2492],{"emptyLinePlaceholder":151},[49,9279,9280],{"class":51,"line":1771},[49,9281,1657],{"class":55},[14,9283,9115],{},[1226,9285,9286,9289,9292],{},[181,9287,9288],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[181,9290,9291],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[181,9293,9294],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[39,9296,9298],{"className":216,"code":9297,"language":218,"meta":44,"style":44},"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",[46,9299,9300,9319,9323,9328,9348],{"__ignoreMap":44},[49,9301,9302,9304,9306,9308,9310,9313,9315,9317],{"class":51,"line":52},[49,9303,5454],{"class":59},[49,9305,9193],{"class":2055},[49,9307,228],{"class":55},[49,9309,6882],{"class":59},[49,9311,9312],{"class":2055}," student",[49,9314,6608],{"class":59},[49,9316,914],{"class":126},[49,9318,81],{"class":55},[49,9320,9321],{"class":51,"line":84},[49,9322,1638],{"class":55},[49,9324,9325],{"class":51,"line":109},[49,9326,9327],{"class":283},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[49,9329,9330,9332,9334,9336,9338,9340,9342,9344,9346],{"class":51,"line":120},[49,9331,1643],{"class":55},[49,9333,1263],{"class":59},[49,9335,9215],{"class":55},[49,9337,1263],{"class":59},[49,9339,9220],{"class":55},[49,9341,1263],{"class":59},[49,9343,9225],{"class":55},[49,9345,1263],{"class":59},[49,9347,1285],{"class":55},[49,9349,9350],{"class":51,"line":135},[49,9351,1657],{"class":55},[166,9353,9355],{"id":9354},"_47案例","4.7案例",[178,9357,9358],{},[181,9359,9360],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[39,9362,9364],{"className":216,"code":9363,"language":218,"meta":44,"style":44},"#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",[46,9365,9366,9372,9382,9388,9395,9399,9405,9409,9414,9420,9426,9430,9434,9440,9444,9449,9454,9467,9471,9476,9502,9506,9518,9545,9549,9561,9571,9575,9580,9609,9613,9625,9634,9661,9672,9682,9686,9690,9694,9699,9723,9727,9751,9755,9774,9800,9804,9829,9852,9876,9881,9886,9891,9900,9905,9911,9932,9938,9952,9958,9985,9994,10000,10008,10013],{"__ignoreMap":44},[49,9367,9368,9370],{"class":51,"line":52},[49,9369,2041],{"class":59},[49,9371,2044],{"class":328},[49,9373,9374,9376,9378,9380],{"class":51,"line":84},[49,9375,2049],{"class":59},[49,9377,2052],{"class":59},[49,9379,2056],{"class":2055},[49,9381,1382],{"class":55},[49,9383,9384,9386],{"class":51,"line":109},[49,9385,2041],{"class":59},[49,9387,7839],{"class":328},[49,9389,9390,9392],{"class":51,"line":120},[49,9391,2041],{"class":59},[49,9393,9394],{"class":328},"\u003Cctime>\n",[49,9396,9397],{"class":51,"line":135},[49,9398,8628],{"class":283},[49,9400,9401,9403],{"class":51,"line":1306},[49,9402,7849],{"class":59},[49,9404,7852],{"class":2055},[49,9406,9407],{"class":51,"line":1312},[49,9408,1638],{"class":55},[49,9410,9411],{"class":51,"line":1403},[49,9412,9413],{"class":55},"    string sName;\n",[49,9415,9416,9418],{"class":51,"line":1409},[49,9417,2077],{"class":59},[49,9419,7887],{"class":55},[49,9421,9422,9424],{"class":51,"line":1421},[49,9423,2077],{"class":59},[49,9425,7899],{"class":55},[49,9427,9428],{"class":51,"line":1704},[49,9429,4087],{"class":55},[49,9431,9432],{"class":51,"line":1709},[49,9433,8665],{"class":283},[49,9435,9436,9438],{"class":51,"line":1715},[49,9437,7849],{"class":59},[49,9439,8672],{"class":2055},[49,9441,9442],{"class":51,"line":1720},[49,9443,1638],{"class":55},[49,9445,9446],{"class":51,"line":1734},[49,9447,9448],{"class":55},"    string tName;\n",[49,9450,9451],{"class":51,"line":1739},[49,9452,9453],{"class":283},"    \u002F\u002F学生数组\n",[49,9455,9456,9458,9460,9463,9465],{"class":51,"line":1745},[49,9457,7985],{"class":59},[49,9459,7988],{"class":2055},[49,9461,9462],{"class":55}," sArray[",[49,9464,541],{"class":66},[49,9466,4781],{"class":55},[49,9468,9469],{"class":51,"line":1766},[49,9470,4087],{"class":55},[49,9472,9473],{"class":51,"line":1771},[49,9474,9475],{"class":283},"\u002F\u002F给老师和学生赋值的函数\n",[49,9477,9478,9480,9483,9485,9487,9490,9493,9496,9498,9500],{"class":51,"line":1785},[49,9479,5454],{"class":59},[49,9481,9482],{"class":2055}," allocateSpace",[49,9484,228],{"class":55},[49,9486,7849],{"class":59},[49,9488,9489],{"class":2055}," Teacher",[49,9491,9492],{"class":126}," tArray",[49,9494,9495],{"class":55},"[],",[49,9497,231],{"class":59},[49,9499,7421],{"class":126},[49,9501,81],{"class":55},[49,9503,9504],{"class":51,"line":1790},[49,9505,1638],{"class":55},[49,9507,9508,9511,9513,9516],{"class":51,"line":1819},[49,9509,9510],{"class":55},"    string nameSeed",[49,9512,60],{"class":59},[49,9514,9515],{"class":328},"\"ABCDE\"",[49,9517,1382],{"class":55},[49,9519,9520,9522,9524,9526,9529,9531,9533,9536,9538,9541,9543],{"class":51,"line":1824},[49,9521,3293],{"class":59},[49,9523,1750],{"class":55},[49,9525,231],{"class":59},[49,9527,9528],{"class":55}," i ",[49,9530,60],{"class":59},[49,9532,4185],{"class":66},[49,9534,9535],{"class":55},"; i ",[49,9537,1129],{"class":59},[49,9539,9540],{"class":55}," len; i",[49,9542,2384],{"class":59},[49,9544,81],{"class":55},[49,9546,9547],{"class":51,"line":1841},[49,9548,2122],{"class":55},[49,9550,9551,9554,9556,9559],{"class":51,"line":1846},[49,9552,9553],{"class":55},"        tArray[i].tName ",[49,9555,60],{"class":59},[49,9557,9558],{"class":328}," \"Teacher_\"",[49,9560,1382],{"class":55},[49,9562,9563,9565,9568],{"class":51,"line":1851},[49,9564,9553],{"class":55},[49,9566,9567],{"class":59},"+=",[49,9569,9570],{"class":55},"nameSeed[i];\n",[49,9572,9573],{"class":51,"line":1856},[49,9574,2492],{"emptyLinePlaceholder":151},[49,9576,9577],{"class":51,"line":1870},[49,9578,9579],{"class":283},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[49,9581,9582,9584,9586,9588,9591,9593,9595,9598,9600,9602,9605,9607],{"class":51,"line":1875},[49,9583,3495],{"class":59},[49,9585,1750],{"class":55},[49,9587,231],{"class":59},[49,9589,9590],{"class":55}," j ",[49,9592,60],{"class":59},[49,9594,4185],{"class":66},[49,9596,9597],{"class":55},"; j ",[49,9599,1129],{"class":59},[49,9601,2240],{"class":66},[49,9603,9604],{"class":55},"; j",[49,9606,2384],{"class":59},[49,9608,81],{"class":55},[49,9610,9611],{"class":51,"line":2669},[49,9612,2602],{"class":55},[49,9614,9615,9618,9620,9623],{"class":51,"line":2683},[49,9616,9617],{"class":55},"            tArray[i].sArray[j].sName ",[49,9619,60],{"class":59},[49,9621,9622],{"class":328}," \"Student_\"",[49,9624,1382],{"class":55},[49,9626,9627,9629,9631],{"class":51,"line":2691},[49,9628,9617],{"class":55},[49,9630,9567],{"class":59},[49,9632,9633],{"class":55}," nameSeed[j];\n",[49,9635,9636,9639,9642,9644,9646,9648,9650,9652,9654,9656,9658],{"class":51,"line":2696},[49,9637,9638],{"class":59},"            int",[49,9640,9641],{"class":55}," random",[49,9643,60],{"class":59},[49,9645,2516],{"class":2055},[49,9647,2519],{"class":55},[49,9649,550],{"class":59},[49,9651,1126],{"class":66},[49,9653,700],{"class":59},[49,9655,622],{"class":66},[49,9657,280],{"class":55},[49,9659,9660],{"class":283},"\u002F\u002F40~99\n",[49,9662,9663,9666,9668,9670],{"class":51,"line":2702},[49,9664,9665],{"class":55},"            tArray[i].sArray[j].age ",[49,9667,60],{"class":59},[49,9669,9040],{"class":66},[49,9671,1382],{"class":55},[49,9673,9674,9677,9679],{"class":51,"line":2708},[49,9675,9676],{"class":55},"            tArray[i].sArray[j].score ",[49,9678,60],{"class":59},[49,9680,9681],{"class":55}," random;\n",[49,9683,9684],{"class":51,"line":2713},[49,9685,2621],{"class":55},[49,9687,9688],{"class":51,"line":8038},[49,9689,2279],{"class":55},[49,9691,9692],{"class":51,"line":8062},[49,9693,1657],{"class":55},[49,9695,9696],{"class":51,"line":8067},[49,9697,9698],{"class":283},"\u002F\u002F打印所有信息的函数\n",[49,9700,9701,9703,9706,9708,9710,9712,9714,9717,9719,9721],{"class":51,"line":8073},[49,9702,5454],{"class":59},[49,9704,9705],{"class":2055}," printInfo",[49,9707,228],{"class":55},[49,9709,7849],{"class":59},[49,9711,9489],{"class":2055},[49,9713,9492],{"class":126},[49,9715,9716],{"class":55},"[], ",[49,9718,231],{"class":59},[49,9720,7421],{"class":126},[49,9722,81],{"class":55},[49,9724,9725],{"class":51,"line":8100},[49,9726,1638],{"class":55},[49,9728,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749],{"class":51,"line":8105},[49,9730,3293],{"class":59},[49,9732,1750],{"class":55},[49,9734,231],{"class":59},[49,9736,9528],{"class":55},[49,9738,60],{"class":59},[49,9740,4185],{"class":66},[49,9742,9535],{"class":55},[49,9744,1129],{"class":59},[49,9746,9540],{"class":55},[49,9748,2384],{"class":59},[49,9750,81],{"class":55},[49,9752,9753],{"class":51,"line":8111},[49,9754,2122],{"class":55},[49,9756,9757,9760,9762,9765,9767,9770,9772],{"class":51,"line":8123},[49,9758,9759],{"class":55},"        cout ",[49,9761,1263],{"class":59},[49,9763,9764],{"class":328}," \"Teacher: \"",[49,9766,1536],{"class":59},[49,9768,9769],{"class":55}," tArray[i].tName ",[49,9771,1263],{"class":59},[49,9773,8930],{"class":55},[49,9775,9776,9778,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798],{"class":51,"line":8135},[49,9777,3495],{"class":59},[49,9779,1750],{"class":55},[49,9781,231],{"class":59},[49,9783,9590],{"class":55},[49,9785,60],{"class":59},[49,9787,4185],{"class":66},[49,9789,9597],{"class":55},[49,9791,1129],{"class":59},[49,9793,2240],{"class":66},[49,9795,9604],{"class":55},[49,9797,2384],{"class":59},[49,9799,81],{"class":55},[49,9801,9802],{"class":51,"line":8147},[49,9803,2602],{"class":55},[49,9805,9807,9810,9812,9815,9817,9820,9822,9825,9827],{"class":51,"line":9806},47,[49,9808,9809],{"class":55},"            cout ",[49,9811,1263],{"class":59},[49,9813,9814],{"class":328}," \"",[49,9816,1322],{"class":66},[49,9818,9819],{"class":328},"Student: \"",[49,9821,1536],{"class":59},[49,9823,9824],{"class":55}," tArray[i].sArray[j].sName",[49,9826,1263],{"class":59},[49,9828,1285],{"class":55},[49,9830,9832,9834,9836,9838,9840,9843,9845,9848,9850],{"class":51,"line":9831},48,[49,9833,9809],{"class":55},[49,9835,1263],{"class":59},[49,9837,9814],{"class":328},[49,9839,1322],{"class":66},[49,9841,9842],{"class":328},"Age: \"",[49,9844,1536],{"class":59},[49,9846,9847],{"class":55}," tArray[i].sArray[j].age ",[49,9849,1263],{"class":59},[49,9851,8930],{"class":55},[49,9853,9855,9857,9859,9861,9863,9866,9868,9871,9873],{"class":51,"line":9854},49,[49,9856,9809],{"class":55},[49,9858,1263],{"class":59},[49,9860,9814],{"class":328},[49,9862,1322],{"class":66},[49,9864,9865],{"class":328},"Score: \"",[49,9867,1536],{"class":59},[49,9869,9870],{"class":55}," tArray[i].sArray[j].score ",[49,9872,1263],{"class":59},[49,9874,9875],{"class":55}," endl;   \n",[49,9877,9879],{"class":51,"line":9878},50,[49,9880,2621],{"class":55},[49,9882,9884],{"class":51,"line":9883},51,[49,9885,2279],{"class":55},[49,9887,9889],{"class":51,"line":9888},52,[49,9890,1657],{"class":55},[49,9892,9894,9896,9898],{"class":51,"line":9893},53,[49,9895,231],{"class":59},[49,9897,2065],{"class":2055},[49,9899,2068],{"class":55},[49,9901,9903],{"class":51,"line":9902},54,[49,9904,1638],{"class":55},[49,9906,9908],{"class":51,"line":9907},55,[49,9909,9910],{"class":283},"    \u002F\u002F随机数种子\n",[49,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930],{"class":51,"line":9913},56,[49,9915,2465],{"class":2055},[49,9917,2468],{"class":55},[49,9919,2471],{"class":59},[49,9921,2474],{"class":59},[49,9923,649],{"class":55},[49,9925,2479],{"class":2055},[49,9927,228],{"class":55},[49,9929,2484],{"class":66},[49,9931,2487],{"class":55},[49,9933,9935],{"class":51,"line":9934},57,[49,9936,9937],{"class":283},"    \u002F\u002F1.创建3名老师的数组\n",[49,9939,9941,9943,9945,9948,9950],{"class":51,"line":9940},58,[49,9942,7985],{"class":59},[49,9944,9489],{"class":2055},[49,9946,9947],{"class":55}," tArray[",[49,9949,73],{"class":66},[49,9951,4781],{"class":55},[49,9953,9955],{"class":51,"line":9954},59,[49,9956,9957],{"class":283},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[49,9959,9961,9963,9966,9968,9971,9974,9976,9978,9981,9983],{"class":51,"line":9960},60,[49,9962,2077],{"class":59},[49,9964,9965],{"class":55}," len ",[49,9967,60],{"class":59},[49,9969,9970],{"class":59}," sizeof",[49,9972,9973],{"class":55},"(tArray) ",[49,9975,803],{"class":59},[49,9977,9970],{"class":59},[49,9979,9980],{"class":55},"(tArray[",[49,9982,415],{"class":66},[49,9984,3948],{"class":55},[49,9986,9988,9991],{"class":51,"line":9987},61,[49,9989,9990],{"class":2055},"    allocateSpace",[49,9992,9993],{"class":55},"(tArray, len);\n",[49,9995,9997],{"class":51,"line":9996},62,[49,9998,9999],{"class":283},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[49,10001,10003,10006],{"class":51,"line":10002},63,[49,10004,10005],{"class":2055},"    printInfo",[49,10007,9993],{"class":55},[49,10009,10011],{"class":51,"line":10010},64,[49,10012,2492],{"emptyLinePlaceholder":151},[49,10014,10016],{"class":51,"line":10015},65,[49,10017,1657],{"class":55},[178,10019,10020],{"start":84},[181,10021,10022,10025],{},[373,10023,10024],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10027,10028],{},"五名英雄信息如下：",[39,10030,10034],{"className":10031,"code":10032,"language":10033,"meta":44,"style":44},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[46,10035,10036,10054,10071,10088,10105],{"__ignoreMap":44},[49,10037,10038,10040,10043,10045,10047,10049,10052],{"class":51,"line":52},[49,10039,5008],{"class":55},[49,10041,10042],{"class":328},"\"刘备\"",[49,10044,76],{"class":55},[49,10046,994],{"class":66},[49,10048,76],{"class":55},[49,10050,10051],{"class":328},"\"男\"",[49,10053,5021],{"class":55},[49,10055,10056,10058,10061,10063,10065,10067,10069],{"class":51,"line":84},[49,10057,5008],{"class":55},[49,10059,10060],{"class":328},"\"关羽\"",[49,10062,76],{"class":55},[49,10064,969],{"class":66},[49,10066,76],{"class":55},[49,10068,10051],{"class":328},[49,10070,5021],{"class":55},[49,10072,10073,10075,10078,10080,10082,10084,10086],{"class":51,"line":109},[49,10074,5008],{"class":55},[49,10076,10077],{"class":328},"\"张飞\"",[49,10079,76],{"class":55},[49,10081,919],{"class":66},[49,10083,76],{"class":55},[49,10085,10051],{"class":328},[49,10087,5021],{"class":55},[49,10089,10090,10092,10095,10097,10099,10101,10103],{"class":51,"line":120},[49,10091,5008],{"class":55},[49,10093,10094],{"class":328},"\"赵云\"",[49,10096,76],{"class":55},[49,10098,944],{"class":66},[49,10100,76],{"class":55},[49,10102,10051],{"class":328},[49,10104,5021],{"class":55},[49,10106,10107,10109,10112,10114,10116,10118,10121],{"class":51,"line":135},[49,10108,5008],{"class":55},[49,10110,10111],{"class":328},"\"貂蝉\"",[49,10113,76],{"class":55},[49,10115,894],{"class":66},[49,10117,76],{"class":55},[49,10119,10120],{"class":328},"\"女\"",[49,10122,5021],{"class":55},[14,10124,10125],{},"代码：",[39,10127,10129],{"className":216,"code":10128,"language":218,"meta":44,"style":44},"#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",[46,10130,10131,10137,10147,10153,10160,10164,10168,10174,10179,10183,10188,10211,10215,10240,10244,10277,10282,10311,10316,10331,10357,10377,10382,10387,10391,10395,10400,10422,10426,10450,10454,10516,10520,10524,10532,10536,10541,10552,10556,10572,10588,10604,10620,10636,10640,10660,10682,10687,10700,10707,10712,10718,10723,10736,10742],{"__ignoreMap":44},[49,10132,10133,10135],{"class":51,"line":52},[49,10134,2041],{"class":59},[49,10136,2044],{"class":328},[49,10138,10139,10141,10143,10145],{"class":51,"line":84},[49,10140,2049],{"class":59},[49,10142,2052],{"class":59},[49,10144,2056],{"class":2055},[49,10146,1382],{"class":55},[49,10148,10149,10151],{"class":51,"line":109},[49,10150,2041],{"class":59},[49,10152,7839],{"class":328},[49,10154,10155,10157],{"class":51,"line":120},[49,10156,7849],{"class":59},[49,10158,10159],{"class":2055}," Sanguo\n",[49,10161,10162],{"class":51,"line":135},[49,10163,1638],{"class":55},[49,10165,10166],{"class":51,"line":1306},[49,10167,7875],{"class":55},[49,10169,10170,10172],{"class":51,"line":1312},[49,10171,2077],{"class":59},[49,10173,7887],{"class":55},[49,10175,10176],{"class":51,"line":1403},[49,10177,10178],{"class":55},"    string gender;\n",[49,10180,10181],{"class":51,"line":1409},[49,10182,4087],{"class":55},[49,10184,10185],{"class":51,"line":1421},[49,10186,10187],{"class":283},"\u002F\u002F定义排序函数\n",[49,10189,10190,10192,10194,10196,10199,10201,10203,10205,10207,10209],{"class":51,"line":1704},[49,10191,5454],{"class":59},[49,10193,7406],{"class":2055},[49,10195,228],{"class":55},[49,10197,10198],{"class":2055},"Sanguo",[49,10200,6608],{"class":59},[49,10202,914],{"class":126},[49,10204,76],{"class":55},[49,10206,231],{"class":59},[49,10208,7421],{"class":126},[49,10210,81],{"class":55},[49,10212,10213],{"class":51,"line":1709},[49,10214,1638],{"class":55},[49,10216,10217,10219,10221,10223,10225,10227,10229,10231,10233,10236,10238],{"class":51,"line":1715},[49,10218,3293],{"class":59},[49,10220,228],{"class":55},[49,10222,231],{"class":59},[49,10224,3124],{"class":55},[49,10226,60],{"class":59},[49,10228,415],{"class":66},[49,10230,3131],{"class":55},[49,10232,1129],{"class":59},[49,10234,10235],{"class":55},"len;i",[49,10237,2384],{"class":59},[49,10239,81],{"class":55},[49,10241,10242],{"class":51,"line":1720},[49,10243,2122],{"class":55},[49,10245,10246,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275],{"class":51,"line":1734},[49,10247,10248],{"class":59},"     for",[49,10250,1750],{"class":55},[49,10252,231],{"class":59},[49,10254,3502],{"class":55},[49,10256,60],{"class":59},[49,10258,415],{"class":66},[49,10260,3509],{"class":55},[49,10262,1129],{"class":59},[49,10264,7448],{"class":55},[49,10266,751],{"class":59},[49,10268,441],{"class":66},[49,10270,751],{"class":59},[49,10272,3642],{"class":55},[49,10274,2384],{"class":59},[49,10276,81],{"class":55},[49,10278,10279],{"class":51,"line":1739},[49,10280,10281],{"class":55},"     {\n",[49,10283,10284,10287,10290,10292,10295,10297,10300,10302,10304,10306,10308],{"class":51,"line":1745},[49,10285,10286],{"class":59},"         if",[49,10288,10289],{"class":55}," ((s",[49,10291,700],{"class":59},[49,10293,10294],{"class":55},"j)->age ",[49,10296,1179],{"class":59},[49,10298,10299],{"class":55}," (s",[49,10301,700],{"class":59},[49,10303,686],{"class":55},[49,10305,700],{"class":59},[49,10307,441],{"class":66},[49,10309,10310],{"class":55},")->age)\n",[49,10312,10313],{"class":51,"line":1766},[49,10314,10315],{"class":55},"         {\n",[49,10317,10318,10321,10323,10326,10328],{"class":51,"line":1771},[49,10319,10320],{"class":55},"             Sanguo temp",[49,10322,7243],{"class":59},[49,10324,10325],{"class":55},"(s",[49,10327,700],{"class":59},[49,10329,10330],{"class":55},"j);\n",[49,10332,10333,10336,10338,10340,10343,10345,10347,10349,10351,10353,10355],{"class":51,"line":1785},[49,10334,10335],{"class":59},"             *",[49,10337,10325],{"class":55},[49,10339,700],{"class":59},[49,10341,10342],{"class":55},"j)",[49,10344,7243],{"class":59},[49,10346,10325],{"class":55},[49,10348,700],{"class":59},[49,10350,686],{"class":55},[49,10352,700],{"class":59},[49,10354,441],{"class":66},[49,10356,2811],{"class":55},[49,10358,10359,10361,10363,10365,10367,10369,10371,10373,10375],{"class":51,"line":1790},[49,10360,10335],{"class":59},[49,10362,10325],{"class":55},[49,10364,700],{"class":59},[49,10366,686],{"class":55},[49,10368,700],{"class":59},[49,10370,441],{"class":66},[49,10372,649],{"class":55},[49,10374,60],{"class":59},[49,10376,4372],{"class":55},[49,10378,10379],{"class":51,"line":1819},[49,10380,10381],{"class":55},"         }\n",[49,10383,10384],{"class":51,"line":1824},[49,10385,10386],{"class":55},"     }\n",[49,10388,10389],{"class":51,"line":1841},[49,10390,2279],{"class":55},[49,10392,10393],{"class":51,"line":1846},[49,10394,1657],{"class":55},[49,10396,10397],{"class":51,"line":1851},[49,10398,10399],{"class":283},"\u002F\u002F定义打印函数\n",[49,10401,10402,10404,10406,10408,10410,10412,10414,10416,10418,10420],{"class":51,"line":1856},[49,10403,5454],{"class":59},[49,10405,9705],{"class":2055},[49,10407,228],{"class":55},[49,10409,10198],{"class":2055},[49,10411,6608],{"class":59},[49,10413,914],{"class":126},[49,10415,76],{"class":55},[49,10417,231],{"class":59},[49,10419,7421],{"class":126},[49,10421,81],{"class":55},[49,10423,10424],{"class":51,"line":1870},[49,10425,1638],{"class":55},[49,10427,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448],{"class":51,"line":1875},[49,10429,3293],{"class":59},[49,10431,1750],{"class":55},[49,10433,231],{"class":59},[49,10435,3124],{"class":55},[49,10437,60],{"class":59},[49,10439,415],{"class":66},[49,10441,3131],{"class":55},[49,10443,1129],{"class":59},[49,10445,10235],{"class":55},[49,10447,2384],{"class":59},[49,10449,81],{"class":55},[49,10451,10452],{"class":51,"line":2669},[49,10453,2122],{"class":55},[49,10455,10456,10458,10460,10462,10464,10467,10469,10471,10473,10476,10478,10480,10482,10485,10487,10489,10491,10494,10496,10498,10500,10503,10505,10507,10509,10512,10514],{"class":51,"line":2683},[49,10457,3543],{"class":55},[49,10459,1263],{"class":59},[49,10461,474],{"class":328},[49,10463,1322],{"class":66},[49,10465,10466],{"class":328},"姓名：\"",[49,10468,1263],{"class":59},[49,10470,10325],{"class":55},[49,10472,700],{"class":59},[49,10474,10475],{"class":55},"i)->name",[49,10477,1263],{"class":59},[49,10479,474],{"class":328},[49,10481,1322],{"class":66},[49,10483,10484],{"class":328},"年龄：\"",[49,10486,1263],{"class":59},[49,10488,10325],{"class":55},[49,10490,700],{"class":59},[49,10492,10493],{"class":55},"i)->age",[49,10495,1263],{"class":59},[49,10497,474],{"class":328},[49,10499,1322],{"class":66},[49,10501,10502],{"class":328},"性别：\"",[49,10504,1263],{"class":59},[49,10506,10325],{"class":55},[49,10508,700],{"class":59},[49,10510,10511],{"class":55},"i)->gender",[49,10513,1263],{"class":59},[49,10515,1285],{"class":55},[49,10517,10518],{"class":51,"line":2691},[49,10519,2279],{"class":55},[49,10521,10522],{"class":51,"line":2696},[49,10523,1657],{"class":55},[49,10525,10526,10528,10530],{"class":51,"line":2702},[49,10527,231],{"class":59},[49,10529,2065],{"class":2055},[49,10531,2068],{"class":55},[49,10533,10534],{"class":51,"line":2708},[49,10535,1638],{"class":55},[49,10537,10538],{"class":51,"line":2713},[49,10539,10540],{"class":283},"    \u002F\u002F定义结构体变量\n",[49,10542,10543,10546,10548,10550],{"class":51,"line":8038},[49,10544,10545],{"class":55},"    Sanguo s1[",[49,10547,541],{"class":66},[49,10549,1159],{"class":55},[49,10551,4999],{"class":59},[49,10553,10554],{"class":51,"line":8062},[49,10555,2122],{"class":55},[49,10557,10558,10560,10562,10564,10566,10568,10570],{"class":51,"line":8067},[49,10559,5008],{"class":55},[49,10561,10042],{"class":328},[49,10563,76],{"class":55},[49,10565,994],{"class":66},[49,10567,76],{"class":55},[49,10569,10051],{"class":328},[49,10571,5021],{"class":55},[49,10573,10574,10576,10578,10580,10582,10584,10586],{"class":51,"line":8073},[49,10575,5008],{"class":55},[49,10577,10060],{"class":328},[49,10579,76],{"class":55},[49,10581,969],{"class":66},[49,10583,76],{"class":55},[49,10585,10051],{"class":328},[49,10587,5021],{"class":55},[49,10589,10590,10592,10594,10596,10598,10600,10602],{"class":51,"line":8100},[49,10591,5008],{"class":55},[49,10593,10077],{"class":328},[49,10595,76],{"class":55},[49,10597,919],{"class":66},[49,10599,76],{"class":55},[49,10601,10051],{"class":328},[49,10603,5021],{"class":55},[49,10605,10606,10608,10610,10612,10614,10616,10618],{"class":51,"line":8105},[49,10607,5008],{"class":55},[49,10609,10094],{"class":328},[49,10611,76],{"class":55},[49,10613,944],{"class":66},[49,10615,76],{"class":55},[49,10617,10051],{"class":328},[49,10619,5021],{"class":55},[49,10621,10622,10624,10626,10628,10630,10632,10634],{"class":51,"line":8111},[49,10623,5008],{"class":55},[49,10625,10111],{"class":328},[49,10627,76],{"class":55},[49,10629,894],{"class":66},[49,10631,76],{"class":55},[49,10633,10120],{"class":328},[49,10635,5021],{"class":55},[49,10637,10638],{"class":51,"line":8123},[49,10639,5042],{"class":55},[49,10641,10642,10644,10646,10648,10651,10653,10656,10658],{"class":51,"line":8135},[49,10643,2077],{"class":59},[49,10645,7421],{"class":55},[49,10647,4295],{"class":59},[49,10649,10650],{"class":55},"(s1)",[49,10652,4301],{"class":59},[49,10654,10655],{"class":55},"(s1[",[49,10657,415],{"class":66},[49,10659,3948],{"class":55},[49,10661,10662,10665,10667,10670,10672,10675,10678,10680],{"class":51,"line":8147},[49,10663,10664],{"class":55},"    Sanguo ",[49,10666,674],{"class":59},[49,10668,10669],{"class":55},"s ",[49,10671,60],{"class":59},[49,10673,10674],{"class":59}," &",[49,10676,10677],{"class":55},"s1[",[49,10679,415],{"class":66},[49,10681,4781],{"class":55},[49,10683,10684],{"class":51,"line":9806},[49,10685,10686],{"class":283},"    \u002F\u002F排序前：\n",[49,10688,10689,10691,10693,10696,10698],{"class":51,"line":9831},[49,10690,6619],{"class":55},[49,10692,1263],{"class":59},[49,10694,10695],{"class":328}," \"排序前：\"",[49,10697,1536],{"class":59},[49,10699,8930],{"class":55},[49,10701,10702,10704],{"class":51,"line":9854},[49,10703,10005],{"class":2055},[49,10705,10706],{"class":55},"(s,len);\n",[49,10708,10709],{"class":51,"line":9878},[49,10710,10711],{"class":283},"    \u002F\u002F调用排序函数\n",[49,10713,10714,10716],{"class":51,"line":9883},[49,10715,7688],{"class":2055},[49,10717,10706],{"class":55},[49,10719,10720],{"class":51,"line":9888},[49,10721,10722],{"class":283},"    \u002F\u002F排序后\n",[49,10724,10725,10727,10729,10732,10734],{"class":51,"line":9893},[49,10726,6619],{"class":55},[49,10728,1263],{"class":59},[49,10730,10731],{"class":328}," \"排序后：\"",[49,10733,1536],{"class":59},[49,10735,8930],{"class":55},[49,10737,10738,10740],{"class":51,"line":9902},[49,10739,10005],{"class":2055},[49,10741,10706],{"class":55},[49,10743,10744],{"class":51,"line":9907},[49,10745,1657],{"class":55},[14,10747,10748,10749,10751],{},"注意：使用指针时直接用传首地址**&s",[49,10750,415],{},"**",[143,10753,10754],{},"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":44,"searchDepth":84,"depth":84,"links":10756},[10757,10758,10759,10760,10761,10762,10763],{"id":7793,"depth":84,"text":7794},{"id":8155,"depth":84,"text":8156},{"id":8424,"depth":84,"text":8425},{"id":8589,"depth":84,"text":8590},{"id":8805,"depth":84,"text":8806},{"id":9126,"depth":84,"text":9127},{"id":9354,"depth":84,"text":9355},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7782,"description":7790},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10770,"title":10771,"body":10772,"description":44,"extension":149,"meta":12115,"navigation":151,"path":12116,"seo":12117,"stem":12118,"__hash__":12119},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10773,"toc":12109},[10774,10777,10781,10787,10801,10806,10809,10813,10820,10826,10829,10836,10842,10847,10850,10853,10856,11420,11423,11437,11441,11446,11462,11602,11605,11611,11614,11619,11627,11735,11738,11743,11746,11751,11754,11760,11763,12106],[10,10775,10771],{"id":10776},"_5程序内存模型",[166,10778,10780],{"id":10779},"_51内存分区模型","5.1内存分区模型",[14,10782,10783,10784],{},"C++程序在执行时，将内存大方向划分为",[373,10785,10786],{},"4个区域",[1226,10788,10789,10792,10795,10798],{},[181,10790,10791],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[181,10793,10794],{},"全局区：存放全局变量和静态变量以及常量",[181,10796,10797],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[181,10799,10800],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10802,10803],{},[373,10804,10805],{},"内存四区意义：",[14,10807,10808],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[195,10810,10812],{"id":10811},"_511程序运行前","5.1.1程序运行前",[14,10814,10815,10816,10819],{},"​\t在程序编译后，生成了exe可执行程序，",[373,10817,10818],{},"未执行该程序前","分为两个区域",[14,10821,10822,10823],{},"​\t",[373,10824,10825],{},"代码区：",[14,10827,10828],{},"​\t\t存放 CPU 执行的机器指令",[14,10830,10831,10832,10835],{},"​\t\t代码区是",[373,10833,10834],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10837,10831,10838,10841],{},[373,10839,10840],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10843,10822,10844],{},[373,10845,10846],{},"全局区：",[14,10848,10849],{},"​\t\t全局变量和静态变量存放在此.",[14,10851,10852],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10854,10855],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[39,10857,10859],{"className":216,"code":10858,"language":218,"meta":44,"style":44},"\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",[46,10860,10861,10866,10879,10892,10896,10901,10916,10931,10935,10944,10948,10953,10966,10979,10983,10988,11014,11040,11044,11071,11097,11101,11106,11122,11137,11141,11167,11193,11197,11222,11247,11251,11277,11303,11307,11323,11338,11364,11390,11394,11404,11408,11416],{"__ignoreMap":44},[49,10862,10863],{"class":51,"line":52},[49,10864,10865],{"class":283},"\u002F\u002F全局变量\n",[49,10867,10868,10870,10873,10875,10877],{"class":51,"line":84},[49,10869,231],{"class":59},[49,10871,10872],{"class":55}," g_a ",[49,10874,60],{"class":59},[49,10876,2130],{"class":66},[49,10878,1382],{"class":55},[49,10880,10881,10883,10886,10888,10890],{"class":51,"line":109},[49,10882,231],{"class":59},[49,10884,10885],{"class":55}," g_b ",[49,10887,60],{"class":59},[49,10889,2130],{"class":66},[49,10891,1382],{"class":55},[49,10893,10894],{"class":51,"line":120},[49,10895,2492],{"emptyLinePlaceholder":151},[49,10897,10898],{"class":51,"line":135},[49,10899,10900],{"class":283},"\u002F\u002F全局常量\n",[49,10902,10903,10905,10907,10910,10912,10914],{"class":51,"line":1306},[49,10904,6882],{"class":59},[49,10906,2474],{"class":59},[49,10908,10909],{"class":55}," c_g_a ",[49,10911,60],{"class":59},[49,10913,2130],{"class":66},[49,10915,1382],{"class":55},[49,10917,10918,10920,10922,10925,10927,10929],{"class":51,"line":1312},[49,10919,6882],{"class":59},[49,10921,2474],{"class":59},[49,10923,10924],{"class":55}," c_g_b ",[49,10926,60],{"class":59},[49,10928,2130],{"class":66},[49,10930,1382],{"class":55},[49,10932,10933],{"class":51,"line":1403},[49,10934,2492],{"emptyLinePlaceholder":151},[49,10936,10937,10939,10941],{"class":51,"line":1409},[49,10938,231],{"class":59},[49,10940,2065],{"class":2055},[49,10942,10943],{"class":55},"() {\n",[49,10945,10946],{"class":51,"line":1421},[49,10947,2492],{"emptyLinePlaceholder":151},[49,10949,10950],{"class":51,"line":1704},[49,10951,10952],{"class":283},"    \u002F\u002F局部变量\n",[49,10954,10955,10957,10960,10962,10964],{"class":51,"line":1709},[49,10956,2077],{"class":59},[49,10958,10959],{"class":55}," a ",[49,10961,60],{"class":59},[49,10963,2130],{"class":66},[49,10965,1382],{"class":55},[49,10967,10968,10970,10973,10975,10977],{"class":51,"line":1715},[49,10969,2077],{"class":59},[49,10971,10972],{"class":55}," b ",[49,10974,60],{"class":59},[49,10976,2130],{"class":66},[49,10978,1382],{"class":55},[49,10980,10981],{"class":51,"line":1720},[49,10982,2492],{"emptyLinePlaceholder":151},[49,10984,10985],{"class":51,"line":1734},[49,10986,10987],{"class":283},"    \u002F\u002F打印地址\n",[49,10989,10990,10992,10994,10997,10999,11001,11003,11005,11007,11010,11012],{"class":51,"line":1739},[49,10991,6619],{"class":55},[49,10993,1263],{"class":59},[49,10995,10996],{"class":328}," \"局部变量a地址为： \"",[49,10998,1536],{"class":59},[49,11000,1750],{"class":55},[49,11002,231],{"class":59},[49,11004,649],{"class":55},[49,11006,575],{"class":59},[49,11008,11009],{"class":55},"a ",[49,11011,1263],{"class":59},[49,11013,8930],{"class":55},[49,11015,11016,11018,11020,11023,11025,11027,11029,11031,11033,11036,11038],{"class":51,"line":1745},[49,11017,6619],{"class":55},[49,11019,1263],{"class":59},[49,11021,11022],{"class":328}," \"局部变量b地址为： \"",[49,11024,1536],{"class":59},[49,11026,1750],{"class":55},[49,11028,231],{"class":59},[49,11030,649],{"class":55},[49,11032,575],{"class":59},[49,11034,11035],{"class":55},"b ",[49,11037,1263],{"class":59},[49,11039,8930],{"class":55},[49,11041,11042],{"class":51,"line":1766},[49,11043,2492],{"emptyLinePlaceholder":151},[49,11045,11046,11048,11050,11053,11055,11058,11060,11062,11064,11067,11069],{"class":51,"line":1771},[49,11047,6619],{"class":55},[49,11049,1263],{"class":59},[49,11051,11052],{"class":328}," \"全局变量g_a地址为： \"",[49,11054,1536],{"class":59},[49,11056,11057],{"class":55},"  (",[49,11059,231],{"class":59},[49,11061,649],{"class":55},[49,11063,575],{"class":59},[49,11065,11066],{"class":55},"g_a ",[49,11068,1263],{"class":59},[49,11070,8930],{"class":55},[49,11072,11073,11075,11077,11080,11082,11084,11086,11088,11090,11093,11095],{"class":51,"line":1785},[49,11074,6619],{"class":55},[49,11076,1263],{"class":59},[49,11078,11079],{"class":328}," \"全局变量g_b地址为： \"",[49,11081,1536],{"class":59},[49,11083,11057],{"class":55},[49,11085,231],{"class":59},[49,11087,649],{"class":55},[49,11089,575],{"class":59},[49,11091,11092],{"class":55},"g_b ",[49,11094,1263],{"class":59},[49,11096,8930],{"class":55},[49,11098,11099],{"class":51,"line":1790},[49,11100,2492],{"emptyLinePlaceholder":151},[49,11102,11103],{"class":51,"line":1819},[49,11104,11105],{"class":283},"    \u002F\u002F静态变量\n",[49,11107,11108,11111,11113,11116,11118,11120],{"class":51,"line":1824},[49,11109,11110],{"class":59},"    static",[49,11112,2474],{"class":59},[49,11114,11115],{"class":55}," s_a ",[49,11117,60],{"class":59},[49,11119,2130],{"class":66},[49,11121,1382],{"class":55},[49,11123,11124,11126,11128,11131,11133,11135],{"class":51,"line":1841},[49,11125,11110],{"class":59},[49,11127,2474],{"class":59},[49,11129,11130],{"class":55}," s_b ",[49,11132,60],{"class":59},[49,11134,2130],{"class":66},[49,11136,1382],{"class":55},[49,11138,11139],{"class":51,"line":1846},[49,11140,2492],{"emptyLinePlaceholder":151},[49,11142,11143,11145,11147,11150,11152,11154,11156,11158,11160,11163,11165],{"class":51,"line":1851},[49,11144,6619],{"class":55},[49,11146,1263],{"class":59},[49,11148,11149],{"class":328}," \"静态变量s_a地址为： \"",[49,11151,1536],{"class":59},[49,11153,1750],{"class":55},[49,11155,231],{"class":59},[49,11157,649],{"class":55},[49,11159,575],{"class":59},[49,11161,11162],{"class":55},"s_a ",[49,11164,1263],{"class":59},[49,11166,8930],{"class":55},[49,11168,11169,11171,11173,11176,11178,11180,11182,11184,11186,11189,11191],{"class":51,"line":1856},[49,11170,6619],{"class":55},[49,11172,1263],{"class":59},[49,11174,11175],{"class":328}," \"静态变量s_b地址为： \"",[49,11177,1536],{"class":59},[49,11179,1750],{"class":55},[49,11181,231],{"class":59},[49,11183,649],{"class":55},[49,11185,575],{"class":59},[49,11187,11188],{"class":55},"s_b ",[49,11190,1263],{"class":59},[49,11192,8930],{"class":55},[49,11194,11195],{"class":51,"line":1870},[49,11196,2492],{"emptyLinePlaceholder":151},[49,11198,11199,11201,11203,11206,11208,11210,11212,11214,11216,11218,11220],{"class":51,"line":1875},[49,11200,6619],{"class":55},[49,11202,1263],{"class":59},[49,11204,11205],{"class":328}," \"字符串常量地址为： \"",[49,11207,1536],{"class":59},[49,11209,1750],{"class":55},[49,11211,231],{"class":59},[49,11213,649],{"class":55},[49,11215,575],{"class":59},[49,11217,1280],{"class":328},[49,11219,1536],{"class":59},[49,11221,8930],{"class":55},[49,11223,11224,11226,11228,11230,11232,11234,11236,11238,11240,11243,11245],{"class":51,"line":2669},[49,11225,6619],{"class":55},[49,11227,1263],{"class":59},[49,11229,11205],{"class":328},[49,11231,1536],{"class":59},[49,11233,1750],{"class":55},[49,11235,231],{"class":59},[49,11237,649],{"class":55},[49,11239,575],{"class":59},[49,11241,11242],{"class":328},"\"hello world1\"",[49,11244,1536],{"class":59},[49,11246,8930],{"class":55},[49,11248,11249],{"class":51,"line":2683},[49,11250,2492],{"emptyLinePlaceholder":151},[49,11252,11253,11255,11257,11260,11262,11264,11266,11268,11270,11273,11275],{"class":51,"line":2691},[49,11254,6619],{"class":55},[49,11256,1263],{"class":59},[49,11258,11259],{"class":328}," \"全局常量c_g_a地址为： \"",[49,11261,1536],{"class":59},[49,11263,1750],{"class":55},[49,11265,231],{"class":59},[49,11267,649],{"class":55},[49,11269,575],{"class":59},[49,11271,11272],{"class":55},"c_g_a ",[49,11274,1263],{"class":59},[49,11276,8930],{"class":55},[49,11278,11279,11281,11283,11286,11288,11290,11292,11294,11296,11299,11301],{"class":51,"line":2696},[49,11280,6619],{"class":55},[49,11282,1263],{"class":59},[49,11284,11285],{"class":328}," \"全局常量c_g_b地址为： \"",[49,11287,1536],{"class":59},[49,11289,1750],{"class":55},[49,11291,231],{"class":59},[49,11293,649],{"class":55},[49,11295,575],{"class":59},[49,11297,11298],{"class":55},"c_g_b ",[49,11300,1263],{"class":59},[49,11302,8930],{"class":55},[49,11304,11305],{"class":51,"line":2702},[49,11306,2492],{"emptyLinePlaceholder":151},[49,11308,11309,11312,11314,11317,11319,11321],{"class":51,"line":2708},[49,11310,11311],{"class":59},"    const",[49,11313,2474],{"class":59},[49,11315,11316],{"class":55}," c_l_a ",[49,11318,60],{"class":59},[49,11320,2130],{"class":66},[49,11322,1382],{"class":55},[49,11324,11325,11327,11329,11332,11334,11336],{"class":51,"line":2713},[49,11326,11311],{"class":59},[49,11328,2474],{"class":59},[49,11330,11331],{"class":55}," c_l_b ",[49,11333,60],{"class":59},[49,11335,2130],{"class":66},[49,11337,1382],{"class":55},[49,11339,11340,11342,11344,11347,11349,11351,11353,11355,11357,11360,11362],{"class":51,"line":8038},[49,11341,6619],{"class":55},[49,11343,1263],{"class":59},[49,11345,11346],{"class":328}," \"局部常量c_l_a地址为： \"",[49,11348,1536],{"class":59},[49,11350,1750],{"class":55},[49,11352,231],{"class":59},[49,11354,649],{"class":55},[49,11356,575],{"class":59},[49,11358,11359],{"class":55},"c_l_a ",[49,11361,1263],{"class":59},[49,11363,8930],{"class":55},[49,11365,11366,11368,11370,11373,11375,11377,11379,11381,11383,11386,11388],{"class":51,"line":8062},[49,11367,6619],{"class":55},[49,11369,1263],{"class":59},[49,11371,11372],{"class":328}," \"局部常量c_l_b地址为： \"",[49,11374,1536],{"class":59},[49,11376,1750],{"class":55},[49,11378,231],{"class":59},[49,11380,649],{"class":55},[49,11382,575],{"class":59},[49,11384,11385],{"class":55},"c_l_b ",[49,11387,1263],{"class":59},[49,11389,8930],{"class":55},[49,11391,11392],{"class":51,"line":8067},[49,11393,2492],{"emptyLinePlaceholder":151},[49,11395,11396,11398,11400,11402],{"class":51,"line":8073},[49,11397,2395],{"class":2055},[49,11399,228],{"class":55},[49,11401,2400],{"class":328},[49,11403,2811],{"class":55},[49,11405,11406],{"class":51,"line":8100},[49,11407,2492],{"emptyLinePlaceholder":151},[49,11409,11410,11412,11414],{"class":51,"line":8105},[49,11411,4182],{"class":59},[49,11413,4185],{"class":66},[49,11415,1382],{"class":55},[49,11417,11418],{"class":51,"line":8111},[49,11419,1657],{"class":55},[14,11421,11422],{},"总结：",[1226,11424,11425,11428,11431,11434],{},[181,11426,11427],{},"c++中程序运行前分为全局区和代码区",[181,11429,11430],{},"代码区特点是共享和只读",[181,11432,11433],{},"全局区中存放全局变量、静态变量、常量",[181,11435,11436],{},"常量区中存放const修饰的全局常量和字符串常量",[195,11438,11440],{"id":11439},"_512程序运行后","5.1.2程序运行后",[178,11442,11443],{},[181,11444,11445],{},"栈区：",[1226,11447,11448,11455],{},[181,11449,11450,11451,11454],{},"由编译器自动分配释放, 存放",[373,11452,11453],{},"函数的参数值,局部变量","等",[181,11456,11457,11458,11461],{},"注意事项：",[373,11459,11460],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[39,11463,11465],{"className":216,"code":11464,"language":218,"meta":44,"style":44},"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",[46,11466,11467,11478,11482,11497,11509,11513,11517,11525,11530,11545,11563,11580,11590,11598],{"__ignoreMap":44},[49,11468,11469,11471,11473,11476],{"class":51,"line":52},[49,11470,231],{"class":59},[49,11472,6608],{"class":59},[49,11474,11475],{"class":2055}," func",[49,11477,2068],{"class":55},[49,11479,11480],{"class":51,"line":84},[49,11481,1638],{"class":55},[49,11483,11484,11486,11488,11490,11492,11494],{"class":51,"line":109},[49,11485,2077],{"class":59},[49,11487,10959],{"class":55},[49,11489,60],{"class":59},[49,11491,2130],{"class":66},[49,11493,280],{"class":55},[49,11495,11496],{"class":283}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[49,11498,11499,11501,11503,11506],{"class":51,"line":120},[49,11500,4182],{"class":59},[49,11502,10674],{"class":59},[49,11504,11505],{"class":55},"a;",[49,11507,11508],{"class":283}," \u002F\u002F放回局部变量的地址\n",[49,11510,11511],{"class":51,"line":135},[49,11512,1657],{"class":55},[49,11514,11515],{"class":51,"line":1306},[49,11516,2492],{"emptyLinePlaceholder":151},[49,11518,11519,11521,11523],{"class":51,"line":1312},[49,11520,231],{"class":59},[49,11522,2065],{"class":2055},[49,11524,10943],{"class":55},[49,11526,11527],{"class":51,"line":1403},[49,11528,11529],{"class":283},"    \u002F\u002F接受func的返回值\n",[49,11531,11532,11534,11536,11539,11541,11543],{"class":51,"line":1409},[49,11533,2077],{"class":59},[49,11535,6608],{"class":59},[49,11537,11538],{"class":55},"p ",[49,11540,60],{"class":59},[49,11542,11475],{"class":2055},[49,11544,5726],{"class":55},[49,11546,11547,11549,11551,11553,11555,11557,11560],{"class":51,"line":1421},[49,11548,6619],{"class":55},[49,11550,1263],{"class":59},[49,11552,6608],{"class":59},[49,11554,11538],{"class":55},[49,11556,1263],{"class":59},[49,11558,11559],{"class":55}," endl;",[49,11561,11562],{"class":283}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[49,11564,11565,11567,11569,11571,11573,11575,11577],{"class":51,"line":1704},[49,11566,6619],{"class":55},[49,11568,1263],{"class":59},[49,11570,6608],{"class":59},[49,11572,11538],{"class":55},[49,11574,1263],{"class":59},[49,11576,11559],{"class":55},[49,11578,11579],{"class":283}," \u002F\u002F第二次这个数据不再保留\n",[49,11581,11582,11584,11586,11588],{"class":51,"line":1709},[49,11583,2395],{"class":2055},[49,11585,228],{"class":55},[49,11587,2400],{"class":328},[49,11589,2811],{"class":55},[49,11591,11592,11594,11596],{"class":51,"line":1715},[49,11593,4182],{"class":59},[49,11595,4185],{"class":66},[49,11597,1382],{"class":55},[49,11599,11600],{"class":51,"line":1720},[49,11601,1657],{"class":55},[14,11603,11604],{},"输出结果：",[14,11606,11607],{},[1554,11608],{"alt":11609,"src":11610},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11612,11613],{},"总结：不要返回局部变量的地址",[178,11615,11616],{"start":84},[181,11617,11618],{},"堆区",[1226,11620,11621,11624],{},[181,11622,11623],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[181,11625,11626],{},"在c++中主要利用new在堆区开辟内存",[39,11628,11630],{"className":216,"code":11629,"language":218,"meta":44,"style":44},"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",[46,11631,11632,11647,11651,11656,11677,11684,11688,11696,11700,11705,11719,11731],{"__ignoreMap":44},[49,11633,11634,11636,11639,11642,11644],{"class":51,"line":52},[49,11635,231],{"class":59},[49,11637,11638],{"class":59},"  *",[49,11640,11641],{"class":2055},"func",[49,11643,2519],{"class":55},[49,11645,11646],{"class":283},"  \u002F\u002F函数返回指针\n",[49,11648,11649],{"class":51,"line":84},[49,11650,1638],{"class":55},[49,11652,11653],{"class":51,"line":109},[49,11654,11655],{"class":283},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[49,11657,11658,11660,11662,11664,11666,11669,11671,11673,11675],{"class":51,"line":120},[49,11659,4239],{"class":59},[49,11661,6608],{"class":59},[49,11663,14],{"class":55},[49,11665,60],{"class":59},[49,11667,11668],{"class":59}," new",[49,11670,2474],{"class":59},[49,11672,228],{"class":55},[49,11674,95],{"class":66},[49,11676,2811],{"class":55},[49,11678,11679,11681],{"class":51,"line":135},[49,11680,4473],{"class":59},[49,11682,11683],{"class":55}," p;\n",[49,11685,11686],{"class":51,"line":1306},[49,11687,1657],{"class":55},[49,11689,11690,11692,11694],{"class":51,"line":1312},[49,11691,231],{"class":59},[49,11693,2065],{"class":2055},[49,11695,2068],{"class":55},[49,11697,11698],{"class":51,"line":1403},[49,11699,1638],{"class":55},[49,11701,11702],{"class":51,"line":1409},[49,11703,11704],{"class":283},"    \u002F\u002F在堆区开辟数据\n",[49,11706,11707,11709,11711,11713,11715,11717],{"class":51,"line":1421},[49,11708,2077],{"class":59},[49,11710,6608],{"class":59},[49,11712,14],{"class":55},[49,11714,60],{"class":59},[49,11716,11641],{"class":2055},[49,11718,5726],{"class":55},[49,11720,11721,11723,11725,11727,11729],{"class":51,"line":1704},[49,11722,1643],{"class":55},[49,11724,6509],{"class":59},[49,11726,14],{"class":55},[49,11728,1263],{"class":59},[49,11730,1285],{"class":55},[49,11732,11733],{"class":51,"line":1709},[49,11734,1657],{"class":55},[14,11736,11737],{},"图片展示：",[14,11739,11740],{},[1554,11741],{"alt":11609,"src":11742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11744,11745],{},"堆区内存由程序员管生死！！！",[178,11747,11748],{"start":109},[181,11749,11750],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11752,11753],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11755,11756,11757],{},"​语法：",[46,11758,11759],{}," new 数据类型",[14,11761,11762],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[39,11764,11766],{"className":216,"code":11765,"language":218,"meta":44,"style":44},"\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",[46,11767,11768,11773,11783,11787,11792,11797,11819,11823,11831,11835,11849,11861,11873,11885,11890,11895,11906,11910,11915,11923,11927,11932,11954,11980,11984,12002,12006,12032,12036,12048,12052,12057,12062,12070,12074,12078,12086,12090,12096,12102],{"__ignoreMap":44},[49,11769,11770],{"class":51,"line":52},[49,11771,11772],{"class":283},"\u002F\u002F1.new的基本语法\n",[49,11774,11775,11777,11779,11781],{"class":51,"line":84},[49,11776,231],{"class":59},[49,11778,6608],{"class":59},[49,11780,11641],{"class":2055},[49,11782,2068],{"class":55},[49,11784,11785],{"class":51,"line":109},[49,11786,1638],{"class":55},[49,11788,11789],{"class":51,"line":120},[49,11790,11791],{"class":283},"    \u002F\u002F在堆区创建整型数据\n",[49,11793,11794],{"class":51,"line":135},[49,11795,11796],{"class":283},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[49,11798,11799,11801,11803,11805,11808,11810,11812,11814,11816],{"class":51,"line":1306},[49,11800,2077],{"class":59},[49,11802,6608],{"class":59},[49,11804,14],{"class":55},[49,11806,11807],{"class":59},"=new",[49,11809,2474],{"class":59},[49,11811,228],{"class":55},[49,11813,95],{"class":66},[49,11815,6056],{"class":55},[49,11817,11818],{"class":283},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[49,11820,11821],{"class":51,"line":1312},[49,11822,1657],{"class":55},[49,11824,11825,11827,11829],{"class":51,"line":1403},[49,11826,5454],{"class":59},[49,11828,5678],{"class":2055},[49,11830,2068],{"class":55},[49,11832,11833],{"class":51,"line":1409},[49,11834,1638],{"class":55},[49,11836,11837,11839,11841,11843,11845,11847],{"class":51,"line":1421},[49,11838,2077],{"class":59},[49,11840,6608],{"class":59},[49,11842,14],{"class":55},[49,11844,60],{"class":59},[49,11846,11641],{"class":2055},[49,11848,5726],{"class":55},[49,11850,11851,11853,11855,11857,11859],{"class":51,"line":1704},[49,11852,1643],{"class":55},[49,11854,6509],{"class":59},[49,11856,14],{"class":55},[49,11858,1263],{"class":59},[49,11860,1285],{"class":55},[49,11862,11863,11865,11867,11869,11871],{"class":51,"line":1709},[49,11864,1643],{"class":55},[49,11866,6509],{"class":59},[49,11868,14],{"class":55},[49,11870,1263],{"class":59},[49,11872,1285],{"class":55},[49,11874,11875,11877,11879,11881,11883],{"class":51,"line":1715},[49,11876,1643],{"class":55},[49,11878,6509],{"class":59},[49,11880,14],{"class":55},[49,11882,1263],{"class":59},[49,11884,1285],{"class":55},[49,11886,11887],{"class":51,"line":1720},[49,11888,11889],{"class":283},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[49,11891,11892],{"class":51,"line":1734},[49,11893,11894],{"class":283},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[49,11896,11897,11900,11903],{"class":51,"line":1739},[49,11898,11899],{"class":59},"    delete",[49,11901,11902],{"class":55}," p;",[49,11904,11905],{"class":283},"\u002F\u002F删除这块地址\n",[49,11907,11908],{"class":51,"line":1745},[49,11909,1657],{"class":55},[49,11911,11912],{"class":51,"line":1766},[49,11913,11914],{"class":283},"\u002F\u002F2.在堆区利用new开辟数组\n",[49,11916,11917,11919,11921],{"class":51,"line":1771},[49,11918,5454],{"class":59},[49,11920,5747],{"class":2055},[49,11922,2068],{"class":55},[49,11924,11925],{"class":51,"line":1785},[49,11926,1638],{"class":55},[49,11928,11929],{"class":51,"line":1790},[49,11930,11931],{"class":283},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[49,11933,11934,11936,11938,11940,11942,11944,11946,11948,11951],{"class":51,"line":1819},[49,11935,2077],{"class":59},[49,11937,6608],{"class":59},[49,11939,3972],{"class":55},[49,11941,11807],{"class":59},[49,11943,2474],{"class":59},[49,11945,1109],{"class":55},[49,11947,95],{"class":66},[49,11949,11950],{"class":55},"];",[49,11952,11953],{"class":283},"\u002F\u002F10代表数组有10个元素\n",[49,11955,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974,11976,11978],{"class":51,"line":1824},[49,11957,3293],{"class":59},[49,11959,1750],{"class":55},[49,11961,231],{"class":59},[49,11963,3124],{"class":55},[49,11965,60],{"class":59},[49,11967,415],{"class":66},[49,11969,3131],{"class":55},[49,11971,1129],{"class":59},[49,11973,95],{"class":66},[49,11975,3131],{"class":55},[49,11977,2384],{"class":59},[49,11979,81],{"class":55},[49,11981,11982],{"class":51,"line":1841},[49,11983,2122],{"class":55},[49,11985,11986,11989,11991,11993,11995,11997,11999],{"class":51,"line":1846},[49,11987,11988],{"class":55},"        arr[i]",[49,11990,60],{"class":59},[49,11992,661],{"class":55},[49,11994,700],{"class":59},[49,11996,533],{"class":66},[49,11998,280],{"class":55},[49,12000,12001],{"class":283},"\u002F\u002F给10个元素赋值100～109\n",[49,12003,12004],{"class":51,"line":1851},[49,12005,2279],{"class":55},[49,12007,12008,12010,12012,12014,12016,12018,12020,12022,12024,12026,12028,12030],{"class":51,"line":1856},[49,12009,3293],{"class":59},[49,12011,1750],{"class":55},[49,12013,231],{"class":59},[49,12015,3124],{"class":55},[49,12017,60],{"class":59},[49,12019,415],{"class":66},[49,12021,3131],{"class":55},[49,12023,1129],{"class":59},[49,12025,95],{"class":66},[49,12027,3131],{"class":55},[49,12029,2384],{"class":59},[49,12031,81],{"class":55},[49,12033,12034],{"class":51,"line":1870},[49,12035,2122],{"class":55},[49,12037,12038,12040,12042,12044,12046],{"class":51,"line":1875},[49,12039,3543],{"class":55},[49,12041,1263],{"class":59},[49,12043,4446],{"class":55},[49,12045,1263],{"class":59},[49,12047,1285],{"class":55},[49,12049,12050],{"class":51,"line":2669},[49,12051,2279],{"class":55},[49,12053,12054],{"class":51,"line":2683},[49,12055,12056],{"class":283},"    \u002F\u002F释放堆区数组\n",[49,12058,12059],{"class":51,"line":2691},[49,12060,12061],{"class":283},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[49,12063,12064,12067],{"class":51,"line":2696},[49,12065,12066],{"class":59},"    delete[]",[49,12068,12069],{"class":55}," arr;\n",[49,12071,12072],{"class":51,"line":2702},[49,12073,1657],{"class":55},[49,12075,12076],{"class":51,"line":2708},[49,12077,2492],{"emptyLinePlaceholder":151},[49,12079,12080,12082,12084],{"class":51,"line":2713},[49,12081,231],{"class":59},[49,12083,2065],{"class":2055},[49,12085,2068],{"class":55},[49,12087,12088],{"class":51,"line":8038},[49,12089,1638],{"class":55},[49,12091,12092,12094],{"class":51,"line":8062},[49,12093,5723],{"class":2055},[49,12095,5726],{"class":55},[49,12097,12098,12100],{"class":51,"line":8067},[49,12099,5792],{"class":2055},[49,12101,5726],{"class":55},[49,12103,12104],{"class":51,"line":8073},[49,12105,1657],{"class":55},[143,12107,12108],{},"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":44,"searchDepth":84,"depth":84,"links":12110},[12111],{"id":10779,"depth":84,"text":10780,"children":12112},[12113,12114],{"id":10811,"depth":109,"text":10812},{"id":11439,"depth":109,"text":11440},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10771,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12121,"title":12122,"body":12123,"description":44,"extension":149,"meta":13604,"navigation":151,"path":13605,"seo":13606,"stem":13607,"__hash__":13608},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12124,"toc":13596},[12125,12128,12132,12135,12138,12307,12311,12316,12333,12338,12490,12494,12497,12500,12894,12898,12901,12906,12909,13221,13225,13231,13391,13393,13401,13405,13408,13415,13593],[10,12126,12122],{"id":12127},"_6引用",[166,12129,12131],{"id":12130},"_61引用基本用法","6.1引用基本用法",[14,12133,12134],{},"引用的本质：给变量起别名",[14,12136,12137],{},"语法：数据类型 &别名=原名",[39,12139,12141],{"className":216,"code":12140,"language":218,"meta":44,"style":44},"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",[46,12142,12143,12151,12155,12167,12179,12183,12202,12221,12225,12236,12240,12259,12277,12281,12291,12295,12303],{"__ignoreMap":44},[49,12144,12145,12147,12149],{"class":51,"line":52},[49,12146,231],{"class":59},[49,12148,2065],{"class":2055},[49,12150,10943],{"class":55},[49,12152,12153],{"class":51,"line":84},[49,12154,2492],{"emptyLinePlaceholder":151},[49,12156,12157,12159,12161,12163,12165],{"class":51,"line":109},[49,12158,2077],{"class":59},[49,12160,10959],{"class":55},[49,12162,60],{"class":59},[49,12164,2130],{"class":66},[49,12166,1382],{"class":55},[49,12168,12169,12171,12173,12175,12177],{"class":51,"line":120},[49,12170,2077],{"class":59},[49,12172,10674],{"class":59},[49,12174,11035],{"class":55},[49,12176,60],{"class":59},[49,12178,1524],{"class":55},[49,12180,12181],{"class":51,"line":135},[49,12182,2492],{"emptyLinePlaceholder":151},[49,12184,12185,12187,12189,12192,12194,12196,12198,12200],{"class":51,"line":1306},[49,12186,6619],{"class":55},[49,12188,1263],{"class":59},[49,12190,12191],{"class":328}," \"a = \"",[49,12193,1536],{"class":59},[49,12195,10959],{"class":55},[49,12197,1263],{"class":59},[49,12199,11559],{"class":55},[49,12201,7358],{"class":283},[49,12203,12204,12206,12208,12211,12213,12215,12217,12219],{"class":51,"line":1312},[49,12205,6619],{"class":55},[49,12207,1263],{"class":59},[49,12209,12210],{"class":328}," \"b = \"",[49,12212,1536],{"class":59},[49,12214,10972],{"class":55},[49,12216,1263],{"class":59},[49,12218,11559],{"class":55},[49,12220,7358],{"class":283},[49,12222,12223],{"class":51,"line":1403},[49,12224,2492],{"emptyLinePlaceholder":151},[49,12226,12227,12230,12232,12234],{"class":51,"line":1409},[49,12228,12229],{"class":55},"    b ",[49,12231,60],{"class":59},[49,12233,5844],{"class":66},[49,12235,1382],{"class":55},[49,12237,12238],{"class":51,"line":1421},[49,12239,2492],{"emptyLinePlaceholder":151},[49,12241,12242,12244,12246,12248,12250,12252,12254,12256],{"class":51,"line":1704},[49,12243,6619],{"class":55},[49,12245,1263],{"class":59},[49,12247,12191],{"class":328},[49,12249,1536],{"class":59},[49,12251,10959],{"class":55},[49,12253,1263],{"class":59},[49,12255,11559],{"class":55},[49,12257,12258],{"class":283},"\u002F\u002F100\n",[49,12260,12261,12263,12265,12267,12269,12271,12273,12275],{"class":51,"line":1709},[49,12262,6619],{"class":55},[49,12264,1263],{"class":59},[49,12266,12210],{"class":328},[49,12268,1536],{"class":59},[49,12270,10972],{"class":55},[49,12272,1263],{"class":59},[49,12274,11559],{"class":55},[49,12276,12258],{"class":283},[49,12278,12279],{"class":51,"line":1715},[49,12280,2492],{"emptyLinePlaceholder":151},[49,12282,12283,12285,12287,12289],{"class":51,"line":1720},[49,12284,2395],{"class":2055},[49,12286,228],{"class":55},[49,12288,2400],{"class":328},[49,12290,2811],{"class":55},[49,12292,12293],{"class":51,"line":1734},[49,12294,2492],{"emptyLinePlaceholder":151},[49,12296,12297,12299,12301],{"class":51,"line":1739},[49,12298,4182],{"class":59},[49,12300,4185],{"class":66},[49,12302,1382],{"class":55},[49,12304,12305],{"class":51,"line":1745},[49,12306,1657],{"class":55},[166,12308,12310],{"id":12309},"_62引用的注意事项","6.2引用的注意事项",[178,12312,12313],{},[181,12314,12315],{},"引用必须要初始化",[39,12317,12319],{"className":216,"code":12318,"language":218,"meta":44,"style":44},"int &b;\u002F\u002F非常错误！\n",[46,12320,12321],{"__ignoreMap":44},[49,12322,12323,12325,12327,12330],{"class":51,"line":52},[49,12324,231],{"class":59},[49,12326,10674],{"class":59},[49,12328,12329],{"class":55},"b;",[49,12331,12332],{"class":283},"\u002F\u002F非常错误！\n",[178,12334,12335],{"start":84},[181,12336,12337],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[39,12339,12341],{"className":216,"code":12340,"language":218,"meta":44,"style":44},"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",[46,12342,12343,12351,12363,12375,12383,12399,12412,12430,12448,12468,12478,12486],{"__ignoreMap":44},[49,12344,12345,12347,12349],{"class":51,"line":52},[49,12346,231],{"class":59},[49,12348,2065],{"class":2055},[49,12350,10943],{"class":55},[49,12352,12353,12355,12357,12359,12361],{"class":51,"line":84},[49,12354,2077],{"class":59},[49,12356,10959],{"class":55},[49,12358,60],{"class":59},[49,12360,2130],{"class":66},[49,12362,1382],{"class":55},[49,12364,12365,12367,12369,12371,12373],{"class":51,"line":109},[49,12366,2077],{"class":59},[49,12368,10972],{"class":55},[49,12370,60],{"class":59},[49,12372,9040],{"class":66},[49,12374,1382],{"class":55},[49,12376,12377,12380],{"class":51,"line":120},[49,12378,12379],{"class":283},"    \u002F\u002Fint &c;",[49,12381,12382],{"class":283}," \u002F\u002F错误，引用必须初始化\n",[49,12384,12385,12387,12389,12391,12393,12396],{"class":51,"line":135},[49,12386,2077],{"class":59},[49,12388,10674],{"class":59},[49,12390,3038],{"class":55},[49,12392,60],{"class":59},[49,12394,12395],{"class":55}," a;",[49,12397,12398],{"class":283}," \u002F\u002F一旦初始化后，就不可以更改\n",[49,12400,12401,12404,12406,12409],{"class":51,"line":1306},[49,12402,12403],{"class":55},"    c ",[49,12405,60],{"class":59},[49,12407,12408],{"class":55}," b;",[49,12410,12411],{"class":283}," \u002F\u002F这是赋值操作，不是更改引用\n",[49,12413,12414,12416,12418,12420,12422,12424,12426,12428],{"class":51,"line":1312},[49,12415,6619],{"class":55},[49,12417,1263],{"class":59},[49,12419,12191],{"class":328},[49,12421,1536],{"class":59},[49,12423,10959],{"class":55},[49,12425,1263],{"class":59},[49,12427,11559],{"class":55},[49,12429,7343],{"class":283},[49,12431,12432,12434,12436,12438,12440,12442,12444,12446],{"class":51,"line":1403},[49,12433,6619],{"class":55},[49,12435,1263],{"class":59},[49,12437,12210],{"class":328},[49,12439,1536],{"class":59},[49,12441,10972],{"class":55},[49,12443,1263],{"class":59},[49,12445,11559],{"class":55},[49,12447,7343],{"class":283},[49,12449,12450,12452,12454,12457,12459,12462,12464,12466],{"class":51,"line":1409},[49,12451,6619],{"class":55},[49,12453,1263],{"class":59},[49,12455,12456],{"class":328}," \"c = \"",[49,12458,1536],{"class":59},[49,12460,12461],{"class":55}," c ",[49,12463,1263],{"class":59},[49,12465,11559],{"class":55},[49,12467,7343],{"class":283},[49,12469,12470,12472,12474,12476],{"class":51,"line":1421},[49,12471,2395],{"class":2055},[49,12473,228],{"class":55},[49,12475,2400],{"class":328},[49,12477,2811],{"class":55},[49,12479,12480,12482,12484],{"class":51,"line":1704},[49,12481,4182],{"class":59},[49,12483,4185],{"class":66},[49,12485,1382],{"class":55},[49,12487,12488],{"class":51,"line":1709},[49,12489,1657],{"class":55},[166,12491,12493],{"id":12492},"_63引用做函数参数","6.3引用做函数参数",[14,12495,12496],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12498,12499],{},"优点：可以简化指针修改实参",[39,12501,12503],{"className":216,"code":12502,"language":218,"meta":44,"style":44},"\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",[46,12504,12505,12510,12533,12544,12554,12563,12567,12571,12576,12598,12610,12622,12632,12636,12640,12645,12667,12677,12685,12693,12697,12701,12709,12713,12725,12737,12741,12752,12778,12782,12802,12826,12830,12840,12864,12868,12878,12882,12890],{"__ignoreMap":44},[49,12506,12507],{"class":51,"line":52},[49,12508,12509],{"class":283},"\u002F\u002F1. 值传递\n",[49,12511,12512,12514,12517,12519,12521,12523,12526,12528,12530],{"class":51,"line":84},[49,12513,5454],{"class":59},[49,12515,12516],{"class":2055}," mySwap01",[49,12518,228],{"class":55},[49,12520,231],{"class":59},[49,12522,1490],{"class":126},[49,12524,12525],{"class":55},", ",[49,12527,231],{"class":59},[49,12529,2925],{"class":126},[49,12531,12532],{"class":55},") {\n",[49,12534,12535,12537,12540,12542],{"class":51,"line":109},[49,12536,2077],{"class":59},[49,12538,12539],{"class":55}," temp ",[49,12541,60],{"class":59},[49,12543,1524],{"class":55},[49,12545,12546,12549,12551],{"class":51,"line":120},[49,12547,12548],{"class":55},"    a ",[49,12550,60],{"class":59},[49,12552,12553],{"class":55}," b;\n",[49,12555,12556,12558,12560],{"class":51,"line":135},[49,12557,12229],{"class":55},[49,12559,60],{"class":59},[49,12561,12562],{"class":55}," temp;\n",[49,12564,12565],{"class":51,"line":1306},[49,12566,1657],{"class":55},[49,12568,12569],{"class":51,"line":1312},[49,12570,2492],{"emptyLinePlaceholder":151},[49,12572,12573],{"class":51,"line":1403},[49,12574,12575],{"class":283},"\u002F\u002F2. 地址传递\n",[49,12577,12578,12580,12583,12585,12588,12590,12592,12594,12596],{"class":51,"line":1409},[49,12579,5454],{"class":59},[49,12581,12582],{"class":2055}," mySwap02",[49,12584,228],{"class":55},[49,12586,12587],{"class":59},"int*",[49,12589,1490],{"class":126},[49,12591,12525],{"class":55},[49,12593,12587],{"class":59},[49,12595,2925],{"class":126},[49,12597,12532],{"class":55},[49,12599,12600,12602,12604,12606,12608],{"class":51,"line":1421},[49,12601,2077],{"class":59},[49,12603,12539],{"class":55},[49,12605,60],{"class":59},[49,12607,6608],{"class":59},[49,12609,6287],{"class":55},[49,12611,12612,12614,12616,12618,12620],{"class":51,"line":1704},[49,12613,6493],{"class":59},[49,12615,11009],{"class":55},[49,12617,60],{"class":59},[49,12619,6608],{"class":59},[49,12621,6159],{"class":55},[49,12623,12624,12626,12628,12630],{"class":51,"line":1709},[49,12625,6493],{"class":59},[49,12627,11035],{"class":55},[49,12629,60],{"class":59},[49,12631,12562],{"class":55},[49,12633,12634],{"class":51,"line":1715},[49,12635,1657],{"class":55},[49,12637,12638],{"class":51,"line":1720},[49,12639,2492],{"emptyLinePlaceholder":151},[49,12641,12642],{"class":51,"line":1734},[49,12643,12644],{"class":283},"\u002F\u002F3. 引用传递\n",[49,12646,12647,12649,12652,12654,12657,12659,12661,12663,12665],{"class":51,"line":1739},[49,12648,5454],{"class":59},[49,12650,12651],{"class":2055}," mySwap03",[49,12653,228],{"class":55},[49,12655,12656],{"class":59},"int&",[49,12658,1490],{"class":126},[49,12660,12525],{"class":55},[49,12662,12656],{"class":59},[49,12664,2925],{"class":126},[49,12666,12532],{"class":55},[49,12668,12669,12671,12673,12675],{"class":51,"line":1745},[49,12670,2077],{"class":59},[49,12672,12539],{"class":55},[49,12674,60],{"class":59},[49,12676,1524],{"class":55},[49,12678,12679,12681,12683],{"class":51,"line":1766},[49,12680,12548],{"class":55},[49,12682,60],{"class":59},[49,12684,12553],{"class":55},[49,12686,12687,12689,12691],{"class":51,"line":1771},[49,12688,12229],{"class":55},[49,12690,60],{"class":59},[49,12692,12562],{"class":55},[49,12694,12695],{"class":51,"line":1785},[49,12696,1657],{"class":55},[49,12698,12699],{"class":51,"line":1790},[49,12700,2492],{"emptyLinePlaceholder":151},[49,12702,12703,12705,12707],{"class":51,"line":1819},[49,12704,231],{"class":59},[49,12706,2065],{"class":2055},[49,12708,10943],{"class":55},[49,12710,12711],{"class":51,"line":1824},[49,12712,2492],{"emptyLinePlaceholder":151},[49,12714,12715,12717,12719,12721,12723],{"class":51,"line":1841},[49,12716,2077],{"class":59},[49,12718,10959],{"class":55},[49,12720,60],{"class":59},[49,12722,2130],{"class":66},[49,12724,1382],{"class":55},[49,12726,12727,12729,12731,12733,12735],{"class":51,"line":1846},[49,12728,2077],{"class":59},[49,12730,10972],{"class":55},[49,12732,60],{"class":59},[49,12734,9040],{"class":66},[49,12736,1382],{"class":55},[49,12738,12739],{"class":51,"line":1851},[49,12740,2492],{"emptyLinePlaceholder":151},[49,12742,12743,12746,12749],{"class":51,"line":1856},[49,12744,12745],{"class":2055},"    mySwap01",[49,12747,12748],{"class":55},"(a, b);",[49,12750,12751],{"class":283},"\u002F\u002F值传递，形参不会修饰实参\n",[49,12753,12754,12756,12758,12761,12763,12765,12767,12770,12772,12774,12776],{"class":51,"line":1870},[49,12755,6619],{"class":55},[49,12757,1263],{"class":59},[49,12759,12760],{"class":328}," \"a:\"",[49,12762,1536],{"class":59},[49,12764,10959],{"class":55},[49,12766,1263],{"class":59},[49,12768,12769],{"class":328}," \" b:\"",[49,12771,1536],{"class":59},[49,12773,10972],{"class":55},[49,12775,1263],{"class":59},[49,12777,8930],{"class":55},[49,12779,12780],{"class":51,"line":1875},[49,12781,2492],{"emptyLinePlaceholder":151},[49,12783,12784,12787,12789,12791,12794,12796,12799],{"class":51,"line":2669},[49,12785,12786],{"class":2055},"    mySwap02",[49,12788,228],{"class":55},[49,12790,575],{"class":59},[49,12792,12793],{"class":55},"a, ",[49,12795,575],{"class":59},[49,12797,12798],{"class":55},"b);",[49,12800,12801],{"class":283},"\u002F\u002F地址传递，形参会修饰实参\n",[49,12803,12804,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824],{"class":51,"line":2683},[49,12805,6619],{"class":55},[49,12807,1263],{"class":59},[49,12809,12760],{"class":328},[49,12811,1536],{"class":59},[49,12813,10959],{"class":55},[49,12815,1263],{"class":59},[49,12817,12769],{"class":328},[49,12819,1536],{"class":59},[49,12821,10972],{"class":55},[49,12823,1263],{"class":59},[49,12825,8930],{"class":55},[49,12827,12828],{"class":51,"line":2691},[49,12829,2492],{"emptyLinePlaceholder":151},[49,12831,12832,12835,12837],{"class":51,"line":2696},[49,12833,12834],{"class":2055},"    mySwap03",[49,12836,12748],{"class":55},[49,12838,12839],{"class":283},"\u002F\u002F引用传递，形参会修饰实参\n",[49,12841,12842,12844,12846,12848,12850,12852,12854,12856,12858,12860,12862],{"class":51,"line":2702},[49,12843,6619],{"class":55},[49,12845,1263],{"class":59},[49,12847,12760],{"class":328},[49,12849,1536],{"class":59},[49,12851,10959],{"class":55},[49,12853,1263],{"class":59},[49,12855,12769],{"class":328},[49,12857,1536],{"class":59},[49,12859,10972],{"class":55},[49,12861,1263],{"class":59},[49,12863,8930],{"class":55},[49,12865,12866],{"class":51,"line":2708},[49,12867,2492],{"emptyLinePlaceholder":151},[49,12869,12870,12872,12874,12876],{"class":51,"line":2713},[49,12871,2395],{"class":2055},[49,12873,228],{"class":55},[49,12875,2400],{"class":328},[49,12877,2811],{"class":55},[49,12879,12880],{"class":51,"line":8038},[49,12881,2492],{"emptyLinePlaceholder":151},[49,12883,12884,12886,12888],{"class":51,"line":8062},[49,12885,4182],{"class":59},[49,12887,4185],{"class":66},[49,12889,1382],{"class":55},[49,12891,12892],{"class":51,"line":8067},[49,12893,1657],{"class":55},[166,12895,12897],{"id":12896},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12899,12900],{},"作用：引用是可以作为函数的返回值存在的",[14,12902,9115,12903],{},[373,12904,12905],{},"不要返回局部变量引用",[14,12907,12908],{},"用法：函数调用作为左值",[39,12910,12912],{"className":10031,"code":12911,"language":10033,"meta":44,"style":44},"\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",[46,12913,12914,12919,12927,12942,12948,12952,12956,12961,12969,12986,12992,12996,13000,13008,13012,13017,13031,13051,13070,13074,13079,13092,13112,13130,13134,13150,13154,13173,13191,13195,13205,13209,13217],{"__ignoreMap":44},[49,12915,12916],{"class":51,"line":52},[49,12917,12918],{"class":283},"\u002F\u002F返回局部变量引用\n",[49,12920,12921,12923,12925],{"class":51,"line":84},[49,12922,12656],{"class":59},[49,12924,5678],{"class":2055},[49,12926,10943],{"class":55},[49,12928,12929,12931,12933,12935,12937,12939],{"class":51,"line":109},[49,12930,2077],{"class":59},[49,12932,10959],{"class":55},[49,12934,60],{"class":59},[49,12936,2130],{"class":66},[49,12938,280],{"class":55},[49,12940,12941],{"class":283}," \u002F\u002F局部变量\n",[49,12943,12944,12946],{"class":51,"line":120},[49,12945,4182],{"class":59},[49,12947,1524],{"class":55},[49,12949,12950],{"class":51,"line":135},[49,12951,1657],{"class":55},[49,12953,12954],{"class":51,"line":1306},[49,12955,2492],{"emptyLinePlaceholder":151},[49,12957,12958],{"class":51,"line":1312},[49,12959,12960],{"class":283},"\u002F\u002F返回静态变量引用\n",[49,12962,12963,12965,12967],{"class":51,"line":1403},[49,12964,12656],{"class":59},[49,12966,5747],{"class":2055},[49,12968,10943],{"class":55},[49,12970,12971,12973,12975,12977,12979,12981,12983],{"class":51,"line":1409},[49,12972,11110],{"class":59},[49,12974,2474],{"class":59},[49,12976,10959],{"class":55},[49,12978,60],{"class":59},[49,12980,9040],{"class":66},[49,12982,280],{"class":55},[49,12984,12985],{"class":283},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[49,12987,12988,12990],{"class":51,"line":1421},[49,12989,4182],{"class":59},[49,12991,1524],{"class":55},[49,12993,12994],{"class":51,"line":1704},[49,12995,1657],{"class":55},[49,12997,12998],{"class":51,"line":1709},[49,12999,2492],{"emptyLinePlaceholder":151},[49,13001,13002,13004,13006],{"class":51,"line":1715},[49,13003,231],{"class":59},[49,13005,2065],{"class":2055},[49,13007,10943],{"class":55},[49,13009,13010],{"class":51,"line":1720},[49,13011,2492],{"emptyLinePlaceholder":151},[49,13013,13014],{"class":51,"line":1734},[49,13015,13016],{"class":283},"    \u002F\u002F不能返回局部变量的引用\n",[49,13018,13019,13022,13025,13027,13029],{"class":51,"line":1739},[49,13020,13021],{"class":59},"    int&",[49,13023,13024],{"class":55}," ref ",[49,13026,60],{"class":59},[49,13028,5678],{"class":2055},[49,13030,5726],{"class":55},[49,13032,13033,13035,13037,13040,13042,13044,13046,13048],{"class":51,"line":1745},[49,13034,6619],{"class":55},[49,13036,1263],{"class":59},[49,13038,13039],{"class":328}," \"ref = \"",[49,13041,1536],{"class":59},[49,13043,13024],{"class":55},[49,13045,1263],{"class":59},[49,13047,11559],{"class":55},[49,13049,13050],{"class":283},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[49,13052,13053,13055,13057,13059,13061,13063,13065,13067],{"class":51,"line":1766},[49,13054,6619],{"class":55},[49,13056,1263],{"class":59},[49,13058,13039],{"class":328},[49,13060,1536],{"class":59},[49,13062,13024],{"class":55},[49,13064,1263],{"class":59},[49,13066,11559],{"class":55},[49,13068,13069],{"class":283},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[49,13071,13072],{"class":51,"line":1771},[49,13073,2492],{"emptyLinePlaceholder":151},[49,13075,13076],{"class":51,"line":1785},[49,13077,13078],{"class":283},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[49,13080,13081,13083,13086,13088,13090],{"class":51,"line":1790},[49,13082,13021],{"class":59},[49,13084,13085],{"class":55}," ref2 ",[49,13087,60],{"class":59},[49,13089,5747],{"class":2055},[49,13091,5726],{"class":55},[49,13093,13094,13096,13098,13101,13103,13105,13107,13109],{"class":51,"line":1819},[49,13095,6619],{"class":55},[49,13097,1263],{"class":59},[49,13099,13100],{"class":328}," \"ref2 = \"",[49,13102,1536],{"class":59},[49,13104,13085],{"class":55},[49,13106,1263],{"class":59},[49,13108,11559],{"class":55},[49,13110,13111],{"class":283}," \u002F\u002F20\n",[49,13113,13114,13116,13118,13120,13122,13124,13126,13128],{"class":51,"line":1824},[49,13115,6619],{"class":55},[49,13117,1263],{"class":59},[49,13119,13100],{"class":328},[49,13121,1536],{"class":59},[49,13123,13085],{"class":55},[49,13125,1263],{"class":59},[49,13127,11559],{"class":55},[49,13129,13111],{"class":283},[49,13131,13132],{"class":51,"line":1841},[49,13133,2492],{"emptyLinePlaceholder":151},[49,13135,13136,13138,13141,13143,13145,13147],{"class":51,"line":1846},[49,13137,5792],{"class":2055},[49,13139,13140],{"class":55},"() ",[49,13142,60],{"class":59},[49,13144,3091],{"class":66},[49,13146,280],{"class":55},[49,13148,13149],{"class":283},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[49,13151,13152],{"class":51,"line":1851},[49,13153,2492],{"emptyLinePlaceholder":151},[49,13155,13156,13158,13160,13162,13164,13166,13168,13170],{"class":51,"line":1856},[49,13157,6619],{"class":55},[49,13159,1263],{"class":59},[49,13161,13100],{"class":328},[49,13163,1536],{"class":59},[49,13165,13085],{"class":55},[49,13167,1263],{"class":59},[49,13169,11559],{"class":55},[49,13171,13172],{"class":283}," \u002F\u002F1000\n",[49,13174,13175,13177,13179,13181,13183,13185,13187,13189],{"class":51,"line":1870},[49,13176,6619],{"class":55},[49,13178,1263],{"class":59},[49,13180,13100],{"class":328},[49,13182,1536],{"class":59},[49,13184,13085],{"class":55},[49,13186,1263],{"class":59},[49,13188,11559],{"class":55},[49,13190,13172],{"class":283},[49,13192,13193],{"class":51,"line":1875},[49,13194,2492],{"emptyLinePlaceholder":151},[49,13196,13197,13199,13201,13203],{"class":51,"line":2669},[49,13198,2395],{"class":2055},[49,13200,228],{"class":55},[49,13202,2400],{"class":328},[49,13204,2811],{"class":55},[49,13206,13207],{"class":51,"line":2683},[49,13208,2492],{"emptyLinePlaceholder":151},[49,13210,13211,13213,13215],{"class":51,"line":2691},[49,13212,4182],{"class":59},[49,13214,4185],{"class":66},[49,13216,1382],{"class":55},[49,13218,13219],{"class":51,"line":2696},[49,13220,1657],{"class":55},[166,13222,13224],{"id":13223},"_65引用的本质","6.5引用的本质",[14,13226,13227,13228],{},"本质：",[373,13229,13230],{},"引用的本质在c++内部实现是一个指针常量.",[39,13232,13234],{"className":216,"code":13233,"language":218,"meta":44,"style":44},"\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",[46,13235,13236,13241,13257,13271,13275,13284,13296,13301,13306,13317,13330,13334,13350,13367,13371,13379,13387],{"__ignoreMap":44},[49,13237,13238],{"class":51,"line":52},[49,13239,13240],{"class":283},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[49,13242,13243,13245,13247,13249,13251,13254],{"class":51,"line":84},[49,13244,5454],{"class":59},[49,13246,11475],{"class":2055},[49,13248,228],{"class":55},[49,13250,12656],{"class":59},[49,13252,13253],{"class":126}," ref",[49,13255,13256],{"class":55},"){\n",[49,13258,13259,13262,13264,13266,13268],{"class":51,"line":109},[49,13260,13261],{"class":55},"    ref ",[49,13263,60],{"class":59},[49,13265,5844],{"class":66},[49,13267,280],{"class":55},[49,13269,13270],{"class":283}," \u002F\u002F ref是引用，转换为*ref = 100\n",[49,13272,13273],{"class":51,"line":120},[49,13274,1657],{"class":55},[49,13276,13277,13279,13281],{"class":51,"line":135},[49,13278,231],{"class":59},[49,13280,2065],{"class":2055},[49,13282,13283],{"class":55},"(){\n",[49,13285,13286,13288,13290,13292,13294],{"class":51,"line":1306},[49,13287,2077],{"class":59},[49,13289,10959],{"class":55},[49,13291,60],{"class":59},[49,13293,2130],{"class":66},[49,13295,1382],{"class":55},[49,13297,13298],{"class":51,"line":1312},[49,13299,13300],{"class":55},"    \n",[49,13302,13303],{"class":51,"line":1403},[49,13304,13305],{"class":283},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[49,13307,13308,13310,13312,13314],{"class":51,"line":1409},[49,13309,13021],{"class":59},[49,13311,13024],{"class":55},[49,13313,60],{"class":59},[49,13315,13316],{"class":55}," a; \n",[49,13318,13319,13321,13323,13325,13327],{"class":51,"line":1421},[49,13320,13261],{"class":55},[49,13322,60],{"class":59},[49,13324,9040],{"class":66},[49,13326,280],{"class":55},[49,13328,13329],{"class":283}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[49,13331,13332],{"class":51,"line":1704},[49,13333,13300],{"class":55},[49,13335,13336,13338,13340,13342,13344,13346,13348],{"class":51,"line":1709},[49,13337,6619],{"class":55},[49,13339,1263],{"class":59},[49,13341,12760],{"class":328},[49,13343,1536],{"class":59},[49,13345,10959],{"class":55},[49,13347,1263],{"class":59},[49,13349,8930],{"class":55},[49,13351,13352,13354,13356,13359,13361,13363,13365],{"class":51,"line":1715},[49,13353,6619],{"class":55},[49,13355,1263],{"class":59},[49,13357,13358],{"class":328}," \"ref:\"",[49,13360,1536],{"class":59},[49,13362,13024],{"class":55},[49,13364,1263],{"class":59},[49,13366,8930],{"class":55},[49,13368,13369],{"class":51,"line":1720},[49,13370,13300],{"class":55},[49,13372,13373,13376],{"class":51,"line":1734},[49,13374,13375],{"class":2055},"    func",[49,13377,13378],{"class":55},"(a);\n",[49,13380,13381,13383,13385],{"class":51,"line":1739},[49,13382,4182],{"class":59},[49,13384,4185],{"class":66},[49,13386,1382],{"class":55},[49,13388,13389],{"class":51,"line":1745},[49,13390,1657],{"class":55},[14,13392,11422],{},[178,13394,13395,13398],{},[181,13396,13397],{},"引用的本质，就是一个指针常量",[181,13399,13400],{},"引用一旦初始化，就不可以发生改变",[166,13402,13404],{"id":13403},"_66常量引用","6.6常量引用",[14,13406,13407],{},"作用：常量引用主要用来修饰形参",[14,13409,13410,13411,13414],{},"在函数形参列表中，可以加",[373,13412,13413],{},"const修饰形参","，防止形参改变实参",[39,13416,13418],{"className":216,"code":13417,"language":218,"meta":44,"style":44},"\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",[46,13419,13420,13425,13430,13449,13454,13467,13471,13475,13483,13487,13492,13497,13511,13515,13523,13535,13539,13544,13556,13563,13567,13577,13581,13589],{"__ignoreMap":44},[49,13421,13422],{"class":51,"line":52},[49,13423,13424],{"class":283},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[49,13426,13427],{"class":51,"line":84},[49,13428,13429],{"class":283},"\u002F\u002F加上const就不能修改实参的\n",[49,13431,13432,13434,13437,13439,13441,13444,13447],{"class":51,"line":109},[49,13433,5454],{"class":59},[49,13435,13436],{"class":2055}," showValue",[49,13438,228],{"class":55},[49,13440,6882],{"class":59},[49,13442,13443],{"class":59}," int&",[49,13445,13446],{"class":126}," v",[49,13448,12532],{"class":55},[49,13450,13451],{"class":51,"line":120},[49,13452,13453],{"class":283},"    \u002F\u002Fv += 100;\n",[49,13455,13456,13458,13460,13463,13465],{"class":51,"line":135},[49,13457,6619],{"class":55},[49,13459,1263],{"class":59},[49,13461,13462],{"class":55}," v ",[49,13464,1263],{"class":59},[49,13466,8930],{"class":55},[49,13468,13469],{"class":51,"line":1306},[49,13470,1657],{"class":55},[49,13472,13473],{"class":51,"line":1312},[49,13474,2492],{"emptyLinePlaceholder":151},[49,13476,13477,13479,13481],{"class":51,"line":1403},[49,13478,231],{"class":59},[49,13480,2065],{"class":2055},[49,13482,10943],{"class":55},[49,13484,13485],{"class":51,"line":1409},[49,13486,2492],{"emptyLinePlaceholder":151},[49,13488,13489],{"class":51,"line":1421},[49,13490,13491],{"class":283},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[49,13493,13494],{"class":51,"line":1704},[49,13495,13496],{"class":283},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[49,13498,13499,13501,13503,13505,13507,13509],{"class":51,"line":1709},[49,13500,11311],{"class":59},[49,13502,13443],{"class":59},[49,13504,13024],{"class":55},[49,13506,60],{"class":59},[49,13508,2130],{"class":66},[49,13510,1382],{"class":55},[49,13512,13513],{"class":51,"line":1715},[49,13514,2492],{"emptyLinePlaceholder":151},[49,13516,13517,13520],{"class":51,"line":1720},[49,13518,13519],{"class":283},"    \u002F\u002Fref = 100;",[49,13521,13522],{"class":283},"  \u002F\u002F加入const后不可以修改变量\n",[49,13524,13525,13527,13529,13531,13533],{"class":51,"line":1734},[49,13526,6619],{"class":55},[49,13528,1263],{"class":59},[49,13530,13024],{"class":55},[49,13532,1263],{"class":59},[49,13534,8930],{"class":55},[49,13536,13537],{"class":51,"line":1739},[49,13538,2492],{"emptyLinePlaceholder":151},[49,13540,13541],{"class":51,"line":1745},[49,13542,13543],{"class":283},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[49,13545,13546,13548,13550,13552,13554],{"class":51,"line":1766},[49,13547,2077],{"class":59},[49,13549,10959],{"class":55},[49,13551,60],{"class":59},[49,13553,2130],{"class":66},[49,13555,1382],{"class":55},[49,13557,13558,13561],{"class":51,"line":1771},[49,13559,13560],{"class":2055},"    showValue",[49,13562,13378],{"class":55},[49,13564,13565],{"class":51,"line":1785},[49,13566,2492],{"emptyLinePlaceholder":151},[49,13568,13569,13571,13573,13575],{"class":51,"line":1790},[49,13570,2395],{"class":2055},[49,13572,228],{"class":55},[49,13574,2400],{"class":328},[49,13576,2811],{"class":55},[49,13578,13579],{"class":51,"line":1819},[49,13580,2492],{"emptyLinePlaceholder":151},[49,13582,13583,13585,13587],{"class":51,"line":1824},[49,13584,4182],{"class":59},[49,13586,4185],{"class":66},[49,13588,1382],{"class":55},[49,13590,13591],{"class":51,"line":1841},[49,13592,1657],{"class":55},[143,13594,13595],{},"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":44,"searchDepth":84,"depth":84,"links":13597},[13598,13599,13600,13601,13602,13603],{"id":12130,"depth":84,"text":12131},{"id":12309,"depth":84,"text":12310},{"id":12492,"depth":84,"text":12493},{"id":12896,"depth":84,"text":12897},{"id":13223,"depth":84,"text":13224},{"id":13403,"depth":84,"text":13404},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12122,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13610,"title":13611,"body":13612,"description":44,"extension":149,"meta":14693,"navigation":151,"path":14694,"seo":14695,"stem":14696,"__hash__":14697},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13613,"toc":14685},[13614,13617,13621,13624,13629,13861,13863,13874,13878,13881,13889,13993,13996,14000,14003,14007,14010,14015,14037,14043,14370,14373,14377,14385,14682],[10,13615,13611],{"id":13616},"_7函数高级部分",[166,13618,13620],{"id":13619},"_71函数默认参数","7.1函数默认参数",[14,13622,13623],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13625,5272,13626],{},[46,13627,13628],{}," 返回值类型  函数名 （参数= 默认值）{}",[39,13630,13632],{"className":216,"code":13631,"language":218,"meta":44,"style":44},"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",[46,13633,13634,13669,13684,13688,13692,13697,13702,13731,13751,13761,13765,13769,13777,13781,13809,13831,13835,13845,13849,13857],{"__ignoreMap":44},[49,13635,13636,13638,13640,13642,13644,13646,13648,13650,13652,13655,13657,13659,13661,13663,13665,13667],{"class":51,"line":52},[49,13637,231],{"class":59},[49,13639,11475],{"class":2055},[49,13641,228],{"class":55},[49,13643,231],{"class":59},[49,13645,1490],{"class":126},[49,13647,12525],{"class":55},[49,13649,231],{"class":59},[49,13651,2925],{"class":126},[49,13653,13654],{"class":59}," =",[49,13656,2130],{"class":66},[49,13658,12525],{"class":55},[49,13660,231],{"class":59},[49,13662,2941],{"class":126},[49,13664,13654],{"class":59},[49,13666,2130],{"class":66},[49,13668,12532],{"class":55},[49,13670,13671,13673,13675,13677,13679,13681],{"class":51,"line":84},[49,13672,4182],{"class":59},[49,13674,10959],{"class":55},[49,13676,700],{"class":59},[49,13678,10972],{"class":55},[49,13680,700],{"class":59},[49,13682,13683],{"class":55}," c;\n",[49,13685,13686],{"class":51,"line":109},[49,13687,1657],{"class":55},[49,13689,13690],{"class":51,"line":120},[49,13691,2492],{"emptyLinePlaceholder":151},[49,13693,13694],{"class":51,"line":135},[49,13695,13696],{"class":283},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[49,13698,13699],{"class":51,"line":1306},[49,13700,13701],{"class":283},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[49,13703,13704,13706,13709,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729],{"class":51,"line":1312},[49,13705,231],{"class":59},[49,13707,13708],{"class":2055}," func2",[49,13710,228],{"class":55},[49,13712,231],{"class":59},[49,13714,1490],{"class":126},[49,13716,13654],{"class":59},[49,13718,2130],{"class":66},[49,13720,12525],{"class":55},[49,13722,231],{"class":59},[49,13724,2925],{"class":126},[49,13726,13654],{"class":59},[49,13728,2130],{"class":66},[49,13730,2811],{"class":55},[49,13732,13733,13735,13737,13739,13741,13743,13745,13747,13749],{"class":51,"line":1403},[49,13734,231],{"class":59},[49,13736,13708],{"class":2055},[49,13738,228],{"class":55},[49,13740,231],{"class":59},[49,13742,1490],{"class":126},[49,13744,12525],{"class":55},[49,13746,231],{"class":59},[49,13748,2925],{"class":126},[49,13750,12532],{"class":55},[49,13752,13753,13755,13757,13759],{"class":51,"line":1409},[49,13754,4182],{"class":59},[49,13756,10959],{"class":55},[49,13758,700],{"class":59},[49,13760,12553],{"class":55},[49,13762,13763],{"class":51,"line":1421},[49,13764,1657],{"class":55},[49,13766,13767],{"class":51,"line":1704},[49,13768,2492],{"emptyLinePlaceholder":151},[49,13770,13771,13773,13775],{"class":51,"line":1709},[49,13772,231],{"class":59},[49,13774,2065],{"class":2055},[49,13776,10943],{"class":55},[49,13778,13779],{"class":51,"line":1715},[49,13780,2492],{"emptyLinePlaceholder":151},[49,13782,13783,13785,13787,13790,13792,13794,13796,13798,13800,13802,13805,13807],{"class":51,"line":1720},[49,13784,6619],{"class":55},[49,13786,1263],{"class":59},[49,13788,13789],{"class":328}," \"ret = \"",[49,13791,1536],{"class":59},[49,13793,11475],{"class":2055},[49,13795,228],{"class":55},[49,13797,919],{"class":66},[49,13799,12525],{"class":55},[49,13801,919],{"class":66},[49,13803,13804],{"class":55},") ",[49,13806,1263],{"class":59},[49,13808,8930],{"class":55},[49,13810,13811,13813,13815,13817,13819,13821,13823,13825,13827,13829],{"class":51,"line":1734},[49,13812,6619],{"class":55},[49,13814,1263],{"class":59},[49,13816,13789],{"class":328},[49,13818,1536],{"class":59},[49,13820,11475],{"class":2055},[49,13822,228],{"class":55},[49,13824,533],{"class":66},[49,13826,13804],{"class":55},[49,13828,1263],{"class":59},[49,13830,8930],{"class":55},[49,13832,13833],{"class":51,"line":1739},[49,13834,2492],{"emptyLinePlaceholder":151},[49,13836,13837,13839,13841,13843],{"class":51,"line":1745},[49,13838,2395],{"class":2055},[49,13840,228],{"class":55},[49,13842,2400],{"class":328},[49,13844,2811],{"class":55},[49,13846,13847],{"class":51,"line":1766},[49,13848,2492],{"emptyLinePlaceholder":151},[49,13850,13851,13853,13855],{"class":51,"line":1771},[49,13852,4182],{"class":59},[49,13854,4185],{"class":66},[49,13856,1382],{"class":55},[49,13858,13859],{"class":51,"line":1785},[49,13860,1657],{"class":55},[14,13862,11422],{},[178,13864,13865,13868,13871],{},[181,13866,13867],{},"我传就用我；没传就用你",[181,13869,13870],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[181,13872,13873],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[166,13875,13877],{"id":13876},"_72函数的占位参数","7.2函数的占位参数",[14,13879,13880],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13882,13883,13885,13886],{},[373,13884,5272],{}," ",[46,13887,13888],{},"返回值类型 函数名 (数据类型){}",[39,13890,13892],{"className":216,"code":13891,"language":218,"meta":44,"style":44},"\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",[46,13893,13894,13899,13917,13930,13934,13942,13946,13963,13967,13977,13981,13989],{"__ignoreMap":44},[49,13895,13896],{"class":51,"line":52},[49,13897,13898],{"class":283},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[49,13900,13901,13903,13905,13907,13909,13911,13913,13915],{"class":51,"line":84},[49,13902,5454],{"class":59},[49,13904,11475],{"class":2055},[49,13906,228],{"class":55},[49,13908,231],{"class":59},[49,13910,1490],{"class":126},[49,13912,12525],{"class":55},[49,13914,231],{"class":59},[49,13916,12532],{"class":55},[49,13918,13919,13921,13923,13926,13928],{"class":51,"line":109},[49,13920,6619],{"class":55},[49,13922,1263],{"class":59},[49,13924,13925],{"class":328}," \"this is func\"",[49,13927,1536],{"class":59},[49,13929,8930],{"class":55},[49,13931,13932],{"class":51,"line":120},[49,13933,1657],{"class":55},[49,13935,13936,13938,13940],{"class":51,"line":135},[49,13937,231],{"class":59},[49,13939,2065],{"class":2055},[49,13941,10943],{"class":55},[49,13943,13944],{"class":51,"line":1306},[49,13945,2492],{"emptyLinePlaceholder":151},[49,13947,13948,13950,13952,13954,13956,13958,13960],{"class":51,"line":1312},[49,13949,13375],{"class":2055},[49,13951,228],{"class":55},[49,13953,95],{"class":66},[49,13955,76],{"class":55},[49,13957,95],{"class":66},[49,13959,6056],{"class":55},[49,13961,13962],{"class":283}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[49,13964,13965],{"class":51,"line":1403},[49,13966,2492],{"emptyLinePlaceholder":151},[49,13968,13969,13971,13973,13975],{"class":51,"line":1409},[49,13970,2395],{"class":2055},[49,13972,228],{"class":55},[49,13974,2400],{"class":328},[49,13976,2811],{"class":55},[49,13978,13979],{"class":51,"line":1421},[49,13980,2492],{"emptyLinePlaceholder":151},[49,13982,13983,13985,13987],{"class":51,"line":1704},[49,13984,4182],{"class":59},[49,13986,4185],{"class":66},[49,13988,1382],{"class":55},[49,13990,13991],{"class":51,"line":1709},[49,13992,1657],{"class":55},[14,13994,13995],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[166,13997,13999],{"id":13998},"_73函数重载","7.3函数重载",[14,14001,14002],{},"意思是函数名是可以相同的",[195,14004,14006],{"id":14005},"_731基本语法","7.3.1基本语法",[14,14008,14009],{},"作用：函数名可以相同，提高复用性",[14,14011,14012],{},[373,14013,14014],{},"函数重载满足条件：",[1226,14016,14017,14020,14023],{},[181,14018,14019],{},"同一个作用域下",[181,14021,14022],{},"函数名称相同",[181,14024,14025,14026,14029,14030,14033,14034],{},"函数参数",[373,14027,14028],{},"类型不同","  或者 ",[373,14031,14032],{},"个数不同"," 或者 ",[373,14035,14036],{},"顺序不同",[14,14038,14039,14042],{},[373,14040,14041],{},"注意:","  函数的返回值不可以作为函数重载的条件",[39,14044,14046],{"className":10031,"code":14045,"language":10033,"meta":44,"style":44},"\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",[46,14047,14048,14053,14061,14065,14078,14082,14096,14100,14113,14117,14132,14136,14149,14153,14174,14178,14191,14195,14215,14219,14232,14236,14240,14245,14250,14255,14260,14265,14269,14273,14281,14285,14291,14301,14311,14325,14340,14344,14354,14358,14366],{"__ignoreMap":44},[49,14049,14050],{"class":51,"line":52},[49,14051,14052],{"class":283},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[49,14054,14055,14057,14059],{"class":51,"line":84},[49,14056,5454],{"class":59},[49,14058,11475],{"class":2055},[49,14060,2068],{"class":55},[49,14062,14063],{"class":51,"line":109},[49,14064,1638],{"class":55},[49,14066,14067,14069,14071,14074,14076],{"class":51,"line":120},[49,14068,6619],{"class":55},[49,14070,1263],{"class":59},[49,14072,14073],{"class":328}," \"func 的调用！\"",[49,14075,1536],{"class":59},[49,14077,8930],{"class":55},[49,14079,14080],{"class":51,"line":135},[49,14081,1657],{"class":55},[49,14083,14084,14086,14088,14090,14092,14094],{"class":51,"line":1306},[49,14085,5454],{"class":59},[49,14087,11475],{"class":2055},[49,14089,228],{"class":55},[49,14091,231],{"class":59},[49,14093,1490],{"class":126},[49,14095,81],{"class":55},[49,14097,14098],{"class":51,"line":1312},[49,14099,1638],{"class":55},[49,14101,14102,14104,14106,14109,14111],{"class":51,"line":1403},[49,14103,6619],{"class":55},[49,14105,1263],{"class":59},[49,14107,14108],{"class":328}," \"func (int a) 的调用！\"",[49,14110,1536],{"class":59},[49,14112,8930],{"class":55},[49,14114,14115],{"class":51,"line":1409},[49,14116,1657],{"class":55},[49,14118,14119,14121,14123,14125,14128,14130],{"class":51,"line":1421},[49,14120,5454],{"class":59},[49,14122,11475],{"class":2055},[49,14124,228],{"class":55},[49,14126,14127],{"class":59},"double",[49,14129,1490],{"class":126},[49,14131,81],{"class":55},[49,14133,14134],{"class":51,"line":1704},[49,14135,1638],{"class":55},[49,14137,14138,14140,14142,14145,14147],{"class":51,"line":1709},[49,14139,6619],{"class":55},[49,14141,1263],{"class":59},[49,14143,14144],{"class":328}," \"func (double a)的调用！\"",[49,14146,1536],{"class":59},[49,14148,8930],{"class":55},[49,14150,14151],{"class":51,"line":1715},[49,14152,1657],{"class":55},[49,14154,14155,14157,14159,14161,14163,14165,14168,14170,14172],{"class":51,"line":1720},[49,14156,5454],{"class":59},[49,14158,11475],{"class":2055},[49,14160,228],{"class":55},[49,14162,231],{"class":59},[49,14164,1490],{"class":126},[49,14166,14167],{"class":55}," ,",[49,14169,14127],{"class":59},[49,14171,2925],{"class":126},[49,14173,81],{"class":55},[49,14175,14176],{"class":51,"line":1734},[49,14177,1638],{"class":55},[49,14179,14180,14182,14184,14187,14189],{"class":51,"line":1739},[49,14181,6619],{"class":55},[49,14183,1263],{"class":59},[49,14185,14186],{"class":328}," \"func (int a ,double b) 的调用！\"",[49,14188,1536],{"class":59},[49,14190,8930],{"class":55},[49,14192,14193],{"class":51,"line":1745},[49,14194,1657],{"class":55},[49,14196,14197,14199,14201,14203,14205,14207,14209,14211,14213],{"class":51,"line":1766},[49,14198,5454],{"class":59},[49,14200,11475],{"class":2055},[49,14202,228],{"class":55},[49,14204,14127],{"class":59},[49,14206,1490],{"class":126},[49,14208,14167],{"class":55},[49,14210,231],{"class":59},[49,14212,2925],{"class":126},[49,14214,81],{"class":55},[49,14216,14217],{"class":51,"line":1771},[49,14218,1638],{"class":55},[49,14220,14221,14223,14225,14228,14230],{"class":51,"line":1785},[49,14222,6619],{"class":55},[49,14224,1263],{"class":59},[49,14226,14227],{"class":328}," \"func (double a ,int b)的调用！\"",[49,14229,1536],{"class":59},[49,14231,8930],{"class":55},[49,14233,14234],{"class":51,"line":1790},[49,14235,1657],{"class":55},[49,14237,14238],{"class":51,"line":1819},[49,14239,2492],{"emptyLinePlaceholder":151},[49,14241,14242],{"class":51,"line":1824},[49,14243,14244],{"class":283},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[49,14246,14247],{"class":51,"line":1841},[49,14248,14249],{"class":283},"\u002F\u002Fint func(double a, int b)\n",[49,14251,14252],{"class":51,"line":1846},[49,14253,14254],{"class":283},"\u002F\u002F{\n",[49,14256,14257],{"class":51,"line":1851},[49,14258,14259],{"class":283},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[49,14261,14262],{"class":51,"line":1856},[49,14263,14264],{"class":283},"\u002F\u002F}\n",[49,14266,14267],{"class":51,"line":1870},[49,14268,2492],{"emptyLinePlaceholder":151},[49,14270,14271],{"class":51,"line":1875},[49,14272,2492],{"emptyLinePlaceholder":151},[49,14274,14275,14277,14279],{"class":51,"line":2669},[49,14276,231],{"class":59},[49,14278,2065],{"class":2055},[49,14280,10943],{"class":55},[49,14282,14283],{"class":51,"line":2683},[49,14284,2492],{"emptyLinePlaceholder":151},[49,14286,14287,14289],{"class":51,"line":2691},[49,14288,13375],{"class":2055},[49,14290,5726],{"class":55},[49,14292,14293,14295,14297,14299],{"class":51,"line":2696},[49,14294,13375],{"class":2055},[49,14296,228],{"class":55},[49,14298,95],{"class":66},[49,14300,2811],{"class":55},[49,14302,14303,14305,14307,14309],{"class":51,"line":2702},[49,14304,13375],{"class":2055},[49,14306,228],{"class":55},[49,14308,274],{"class":66},[49,14310,2811],{"class":55},[49,14312,14313,14315,14317,14319,14321,14323],{"class":51,"line":2708},[49,14314,13375],{"class":2055},[49,14316,228],{"class":55},[49,14318,95],{"class":66},[49,14320,76],{"class":55},[49,14322,274],{"class":66},[49,14324,2811],{"class":55},[49,14326,14327,14329,14331,14333,14336,14338],{"class":51,"line":2713},[49,14328,13375],{"class":2055},[49,14330,228],{"class":55},[49,14332,274],{"class":66},[49,14334,14335],{"class":55}," , ",[49,14337,95],{"class":66},[49,14339,2811],{"class":55},[49,14341,14342],{"class":51,"line":8038},[49,14343,13300],{"class":55},[49,14345,14346,14348,14350,14352],{"class":51,"line":8062},[49,14347,2395],{"class":2055},[49,14349,228],{"class":55},[49,14351,2400],{"class":328},[49,14353,2811],{"class":55},[49,14355,14356],{"class":51,"line":8067},[49,14357,2492],{"emptyLinePlaceholder":151},[49,14359,14360,14362,14364],{"class":51,"line":8073},[49,14361,4182],{"class":59},[49,14363,4185],{"class":66},[49,14365,1382],{"class":55},[49,14367,14368],{"class":51,"line":8100},[49,14369,1657],{"class":55},[14,14371,14372],{},"重点：函数返回值不可以作为函数重载条件！",[195,14374,14376],{"id":14375},"_732注意事项","7.3.2注意事项",[1226,14378,14379,14382],{},[181,14380,14381],{},"引用作为重载条件!!!",[181,14383,14384],{},"函数重载碰到函数默认参数",[39,14386,14388],{"className":216,"code":14387,"language":218,"meta":44,"style":44},"\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",[46,14389,14390,14395,14400,14404,14420,14424,14437,14441,14445,14463,14467,14480,14484,14488,14492,14497,14501,14525,14529,14542,14546,14550,14564,14568,14581,14585,14589,14597,14601,14613,14623,14636,14640,14644,14652,14656,14666,14670,14678],{"__ignoreMap":44},[49,14391,14392],{"class":51,"line":52},[49,14393,14394],{"class":283},"\u002F\u002F函数重载注意事项\n",[49,14396,14397],{"class":51,"line":84},[49,14398,14399],{"class":283},"\u002F\u002F1、引用作为重载条件\n",[49,14401,14402],{"class":51,"line":109},[49,14403,2492],{"emptyLinePlaceholder":151},[49,14405,14406,14408,14410,14412,14414,14416,14418],{"class":51,"line":120},[49,14407,5454],{"class":59},[49,14409,11475],{"class":2055},[49,14411,228],{"class":55},[49,14413,231],{"class":59},[49,14415,10674],{"class":59},[49,14417,56],{"class":126},[49,14419,81],{"class":55},[49,14421,14422],{"class":51,"line":135},[49,14423,1638],{"class":55},[49,14425,14426,14428,14430,14433,14435],{"class":51,"line":1306},[49,14427,6619],{"class":55},[49,14429,1263],{"class":59},[49,14431,14432],{"class":328}," \"func (int &a) 调用 \"",[49,14434,1536],{"class":59},[49,14436,8930],{"class":55},[49,14438,14439],{"class":51,"line":1312},[49,14440,1657],{"class":55},[49,14442,14443],{"class":51,"line":1403},[49,14444,2492],{"emptyLinePlaceholder":151},[49,14446,14447,14449,14451,14453,14455,14457,14459,14461],{"class":51,"line":1409},[49,14448,5454],{"class":59},[49,14450,11475],{"class":2055},[49,14452,228],{"class":55},[49,14454,6882],{"class":59},[49,14456,2474],{"class":59},[49,14458,10674],{"class":59},[49,14460,56],{"class":126},[49,14462,81],{"class":55},[49,14464,14465],{"class":51,"line":1421},[49,14466,1638],{"class":55},[49,14468,14469,14471,14473,14476,14478],{"class":51,"line":1704},[49,14470,6619],{"class":55},[49,14472,1263],{"class":59},[49,14474,14475],{"class":328}," \"func (const int &a) 调用 \"",[49,14477,1536],{"class":59},[49,14479,8930],{"class":55},[49,14481,14482],{"class":51,"line":1709},[49,14483,1657],{"class":55},[49,14485,14486],{"class":51,"line":1715},[49,14487,2492],{"emptyLinePlaceholder":151},[49,14489,14490],{"class":51,"line":1720},[49,14491,2492],{"emptyLinePlaceholder":151},[49,14493,14494],{"class":51,"line":1734},[49,14495,14496],{"class":283},"\u002F\u002F2、函数重载碰到函数默认参数\n",[49,14498,14499],{"class":51,"line":1739},[49,14500,2492],{"emptyLinePlaceholder":151},[49,14502,14503,14505,14507,14509,14511,14513,14515,14517,14519,14521,14523],{"class":51,"line":1745},[49,14504,5454],{"class":59},[49,14506,13708],{"class":2055},[49,14508,228],{"class":55},[49,14510,231],{"class":59},[49,14512,1490],{"class":126},[49,14514,12525],{"class":55},[49,14516,231],{"class":59},[49,14518,2925],{"class":126},[49,14520,13654],{"class":59},[49,14522,2130],{"class":66},[49,14524,81],{"class":55},[49,14526,14527],{"class":51,"line":1766},[49,14528,1638],{"class":55},[49,14530,14531,14533,14535,14538,14540],{"class":51,"line":1771},[49,14532,6619],{"class":55},[49,14534,1263],{"class":59},[49,14536,14537],{"class":328}," \"func2(int a, int b = 10) 调用\"",[49,14539,1536],{"class":59},[49,14541,8930],{"class":55},[49,14543,14544],{"class":51,"line":1785},[49,14545,1657],{"class":55},[49,14547,14548],{"class":51,"line":1790},[49,14549,2492],{"emptyLinePlaceholder":151},[49,14551,14552,14554,14556,14558,14560,14562],{"class":51,"line":1819},[49,14553,5454],{"class":59},[49,14555,13708],{"class":2055},[49,14557,228],{"class":55},[49,14559,231],{"class":59},[49,14561,1490],{"class":126},[49,14563,81],{"class":55},[49,14565,14566],{"class":51,"line":1824},[49,14567,1638],{"class":55},[49,14569,14570,14572,14574,14577,14579],{"class":51,"line":1841},[49,14571,6619],{"class":55},[49,14573,1263],{"class":59},[49,14575,14576],{"class":328}," \"func2(int a) 调用\"",[49,14578,1536],{"class":59},[49,14580,8930],{"class":55},[49,14582,14583],{"class":51,"line":1846},[49,14584,1657],{"class":55},[49,14586,14587],{"class":51,"line":1851},[49,14588,2492],{"emptyLinePlaceholder":151},[49,14590,14591,14593,14595],{"class":51,"line":1856},[49,14592,231],{"class":59},[49,14594,2065],{"class":2055},[49,14596,10943],{"class":55},[49,14598,14599],{"class":51,"line":1870},[49,14600,13300],{"class":55},[49,14602,14603,14605,14607,14609,14611],{"class":51,"line":1875},[49,14604,2077],{"class":59},[49,14606,10959],{"class":55},[49,14608,60],{"class":59},[49,14610,2130],{"class":66},[49,14612,1382],{"class":55},[49,14614,14615,14617,14620],{"class":51,"line":2669},[49,14616,13375],{"class":2055},[49,14618,14619],{"class":55},"(a);",[49,14621,14622],{"class":283}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[49,14624,14625,14627,14629,14631,14633],{"class":51,"line":2683},[49,14626,13375],{"class":2055},[49,14628,228],{"class":55},[49,14630,95],{"class":66},[49,14632,6056],{"class":55},[49,14634,14635],{"class":283},"\u002F\u002F调用有const   10是个常量\n",[49,14637,14638],{"class":51,"line":2691},[49,14639,2492],{"emptyLinePlaceholder":151},[49,14641,14642],{"class":51,"line":2696},[49,14643,2492],{"emptyLinePlaceholder":151},[49,14645,14646,14649],{"class":51,"line":2702},[49,14647,14648],{"class":283},"    \u002F\u002Ffunc2(10);",[49,14650,14651],{"class":283}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[49,14653,14654],{"class":51,"line":2708},[49,14655,2492],{"emptyLinePlaceholder":151},[49,14657,14658,14660,14662,14664],{"class":51,"line":2713},[49,14659,2395],{"class":2055},[49,14661,228],{"class":55},[49,14663,2400],{"class":328},[49,14665,2811],{"class":55},[49,14667,14668],{"class":51,"line":8038},[49,14669,2492],{"emptyLinePlaceholder":151},[49,14671,14672,14674,14676],{"class":51,"line":8062},[49,14673,4182],{"class":59},[49,14675,4185],{"class":66},[49,14677,1382],{"class":55},[49,14679,14680],{"class":51,"line":8067},[49,14681,1657],{"class":55},[143,14683,14684],{},"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":44,"searchDepth":84,"depth":84,"links":14686},[14687,14688,14689],{"id":13619,"depth":84,"text":13620},{"id":13876,"depth":84,"text":13877},{"id":13998,"depth":84,"text":13999,"children":14690},[14691,14692],{"id":14005,"depth":109,"text":14006},{"id":14375,"depth":109,"text":14376},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13611,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14699,"title":14700,"body":14701,"description":23455,"extension":149,"meta":23456,"navigation":151,"path":23457,"seo":23458,"stem":23459,"__hash__":23460},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14702,"toc":23436},[14703,14706,14712,14719,14724,14727,14730,14733,14737,14741,14744,14747,14755,14760,14763,14770,14775,14934,14937,15190,15193,15196,15199,15204,15207,15210,15221,15226,15462,15466,15476,15479,15487,15634,15638,15641,15644,15648,16093,16097,16105,16113,17025,17032,17037,17665,17668,17671,17674,17793,17796,17883,17886,18012,18015,18109,18112,18465,18469,18477,18481,18488,18491,18494,18505,18511,18516,18528,18536,18556,18564,18581,18767,18770,18774,18777,18780,18783,18786,18789,18792,18795,19255,19261,19265,19268,19279,19866,19869,20358,20362,20365,20368,20371,20374,20377,20385,20781,20785,20788,20791,21238,21241,21244,21249,21252,21257,21260,21264,21267,21269,21275,21278,21584,21594,21635,21639,21642,21644,21677,21680,21987,21989,22004,22007,22030,22039,22045,22048,22052,22055,22058,22063,22074,22079,22087,22092,22222,22225,22228,22403,22408,22620,22624,22627,22741,22746,22985,22989,22993,22996,22999,23004,23109,23112,23115,23118,23122,23233,23236,23239,23244,23296,23299,23302,23307,23353,23356,23361,23429,23431,23434],[10,14704,14700],{"id":14705},"_8类和对象",[14,14707,14708,14709],{},"C++面向对象的三大特性为",[373,14710,14711],{},"封装、继承、多态",[14,14713,14714,14715,14718],{},"C++认为",[373,14716,14717],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14720,14721],{},[373,14722,14723],{},"例如：",[14,14725,14726],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14728,14729],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14731,14732],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[166,14734,14736],{"id":14735},"_81封装","8.1封装",[195,14738,14740],{"id":14739},"_811封装的意义","8.1.1封装的意义",[14,14742,14743],{},"封装是C++面向对象三大特性之一",[14,14745,14746],{},"封装的意义：",[1226,14748,14749,14752],{},[181,14750,14751],{},"将属性和行为作为一个整体，表现生活中的事物",[181,14753,14754],{},"将属性和行为加以权限控制",[14,14756,14757],{},[373,14758,14759],{},"封装意义一：",[14,14761,14762],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14764,14765,13885,14767],{},[373,14766,5272],{},[46,14768,14769],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[178,14771,14772],{},[181,14773,14774],{},"**示例1：**设计一个圆类，求圆的周长",[39,14776,14778],{"className":216,"code":14777,"language":218,"meta":44,"style":44},"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",[46,14779,14780,14788,14792,14797,14802,14807,14812,14819,14824,14834,14838,14856,14860,14864,14872,14876,14881,14886,14891,14896,14907,14930],{"__ignoreMap":44},[49,14781,14782,14785],{"class":51,"line":52},[49,14783,14784],{"class":59},"class",[49,14786,14787],{"class":2055}," Circle\n",[49,14789,14790],{"class":51,"line":84},[49,14791,1638],{"class":55},[49,14793,14794],{"class":51,"line":109},[49,14795,14796],{"class":283},"    \u002F\u002F访问权限\n",[49,14798,14799],{"class":51,"line":120},[49,14800,14801],{"class":283},"    \u002F\u002F公共权限\n",[49,14803,14804],{"class":51,"line":135},[49,14805,14806],{"class":59},"public:\n",[49,14808,14809],{"class":51,"line":1306},[49,14810,14811],{"class":283},"    \u002F\u002F属性\n",[49,14813,14814,14816],{"class":51,"line":1312},[49,14815,2077],{"class":59},[49,14817,14818],{"class":55}," m_r;\n",[49,14820,14821],{"class":51,"line":1403},[49,14822,14823],{"class":283},"    \u002F\u002F行为\n",[49,14825,14826,14829,14832],{"class":51,"line":1409},[49,14827,14828],{"class":59},"    double",[49,14830,14831],{"class":2055}," calculateZC",[49,14833,2068],{"class":55},[49,14835,14836],{"class":51,"line":1421},[49,14837,2122],{"class":55},[49,14839,14840,14843,14846,14848,14851,14853],{"class":51,"line":1704},[49,14841,14842],{"class":59},"        return",[49,14844,14845],{"class":66}," 2",[49,14847,674],{"class":59},[49,14849,14850],{"class":55},"PI",[49,14852,674],{"class":59},[49,14854,14855],{"class":55},"m_r;\n",[49,14857,14858],{"class":51,"line":1709},[49,14859,2279],{"class":55},[49,14861,14862],{"class":51,"line":1715},[49,14863,4087],{"class":55},[49,14865,14866,14868,14870],{"class":51,"line":1720},[49,14867,231],{"class":59},[49,14869,2065],{"class":2055},[49,14871,2068],{"class":55},[49,14873,14874],{"class":51,"line":1734},[49,14875,1638],{"class":55},[49,14877,14878],{"class":51,"line":1739},[49,14879,14880],{"class":283},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[49,14882,14883],{"class":51,"line":1745},[49,14884,14885],{"class":283},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[49,14887,14888],{"class":51,"line":1766},[49,14889,14890],{"class":55},"    Circle c1;\n",[49,14892,14893],{"class":51,"line":1771},[49,14894,14895],{"class":283},"    \u002F\u002F给圆对象 的属性进行赋值\n",[49,14897,14898,14901,14903,14905],{"class":51,"line":1785},[49,14899,14900],{"class":55},"    c1.m_r",[49,14902,60],{"class":59},[49,14904,95],{"class":66},[49,14906,1382],{"class":55},[49,14908,14909,14911,14913,14916,14918,14921,14924,14926,14928],{"class":51,"line":1790},[49,14910,1643],{"class":55},[49,14912,1263],{"class":59},[49,14914,14915],{"class":328},"\"圆的周长\"",[49,14917,1263],{"class":59},[49,14919,14920],{"class":55},"c1.",[49,14922,14923],{"class":2055},"calculateZC",[49,14925,2519],{"class":55},[49,14927,1263],{"class":59},[49,14929,1285],{"class":55},[49,14931,14932],{"class":51,"line":1819},[49,14933,1657],{"class":55},[14,14935,14936],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[39,14938,14940],{"className":216,"code":14939,"language":218,"meta":44,"style":44},"#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",[46,14941,14942,14948,14958,14964,14970,14974,14978,14983,14990,14995,15013,15017,15027,15031,15036,15052,15056,15066,15070,15075,15083,15087,15119,15123,15127,15135,15139,15144,15149,15163,15177,15186],{"__ignoreMap":44},[49,14943,14944,14946],{"class":51,"line":52},[49,14945,2041],{"class":59},[49,14947,2044],{"class":328},[49,14949,14950,14952,14954,14956],{"class":51,"line":84},[49,14951,2049],{"class":59},[49,14953,2052],{"class":59},[49,14955,2056],{"class":2055},[49,14957,1382],{"class":55},[49,14959,14960,14962],{"class":51,"line":109},[49,14961,2041],{"class":59},[49,14963,7839],{"class":328},[49,14965,14966,14968],{"class":51,"line":120},[49,14967,14784],{"class":59},[49,14969,7852],{"class":2055},[49,14971,14972],{"class":51,"line":135},[49,14973,1638],{"class":55},[49,14975,14976],{"class":51,"line":1306},[49,14977,14806],{"class":59},[49,14979,14980],{"class":51,"line":1312},[49,14981,14982],{"class":55},"    string m_name;\n",[49,14984,14985,14987],{"class":51,"line":1403},[49,14986,2077],{"class":59},[49,14988,14989],{"class":55}," m_id;\n",[49,14991,14992],{"class":51,"line":1409},[49,14993,14994],{"class":283},"    \u002F\u002F赋值姓名\n",[49,14996,14997,15000,15003,15005,15008,15011],{"class":51,"line":1421},[49,14998,14999],{"class":59},"    void",[49,15001,15002],{"class":2055}," setName",[49,15004,228],{"class":55},[49,15006,15007],{"class":2055},"string",[49,15009,15010],{"class":126}," name",[49,15012,81],{"class":55},[49,15014,15015],{"class":51,"line":1704},[49,15016,2122],{"class":55},[49,15018,15019,15022,15024],{"class":51,"line":1709},[49,15020,15021],{"class":55},"        m_name",[49,15023,60],{"class":59},[49,15025,15026],{"class":55},"name;\n",[49,15028,15029],{"class":51,"line":1715},[49,15030,2279],{"class":55},[49,15032,15033],{"class":51,"line":1720},[49,15034,15035],{"class":283},"    \u002F\u002F赋值学号\n",[49,15037,15038,15040,15043,15045,15047,15050],{"class":51,"line":1734},[49,15039,14999],{"class":59},[49,15041,15042],{"class":2055}," setId",[49,15044,228],{"class":55},[49,15046,231],{"class":59},[49,15048,15049],{"class":126}," id",[49,15051,81],{"class":55},[49,15053,15054],{"class":51,"line":1739},[49,15055,2122],{"class":55},[49,15057,15058,15061,15063],{"class":51,"line":1745},[49,15059,15060],{"class":55},"        m_id",[49,15062,60],{"class":59},[49,15064,15065],{"class":55},"id;\n",[49,15067,15068],{"class":51,"line":1766},[49,15069,2279],{"class":55},[49,15071,15072],{"class":51,"line":1771},[49,15073,15074],{"class":283},"    \u002F\u002F打印学生信息\n",[49,15076,15077,15079,15081],{"class":51,"line":1785},[49,15078,14999],{"class":59},[49,15080,9705],{"class":2055},[49,15082,2068],{"class":55},[49,15084,15085],{"class":51,"line":1790},[49,15086,2122],{"class":55},[49,15088,15089,15091,15093,15096,15098,15101,15103,15105,15107,15110,15112,15115,15117],{"class":51,"line":1819},[49,15090,3543],{"class":55},[49,15092,1263],{"class":59},[49,15094,15095],{"class":328},"\"姓名：\"",[49,15097,1263],{"class":59},[49,15099,15100],{"class":55},"m_name",[49,15102,1263],{"class":59},[49,15104,4451],{"class":328},[49,15106,1263],{"class":59},[49,15108,15109],{"class":328},"\"学号：\"",[49,15111,1263],{"class":59},[49,15113,15114],{"class":55},"m_id",[49,15116,1263],{"class":59},[49,15118,1285],{"class":55},[49,15120,15121],{"class":51,"line":1824},[49,15122,2279],{"class":55},[49,15124,15125],{"class":51,"line":1841},[49,15126,4087],{"class":55},[49,15128,15129,15131,15133],{"class":51,"line":1846},[49,15130,231],{"class":59},[49,15132,2065],{"class":2055},[49,15134,2068],{"class":55},[49,15136,15137],{"class":51,"line":1851},[49,15138,1638],{"class":55},[49,15140,15141],{"class":51,"line":1856},[49,15142,15143],{"class":283},"    \u002F\u002F实例化\n",[49,15145,15146],{"class":51,"line":1870},[49,15147,15148],{"class":55},"    Student s1;\n",[49,15150,15151,15154,15157,15159,15161],{"class":51,"line":1875},[49,15152,15153],{"class":55},"    s1.",[49,15155,15156],{"class":2055},"setName",[49,15158,228],{"class":55},[49,15160,8006],{"class":328},[49,15162,2811],{"class":55},[49,15164,15165,15167,15170,15172,15175],{"class":51,"line":2669},[49,15166,15153],{"class":55},[49,15168,15169],{"class":2055},"setId",[49,15171,228],{"class":55},[49,15173,15174],{"class":66},"123456",[49,15176,2811],{"class":55},[49,15178,15179,15181,15184],{"class":51,"line":2683},[49,15180,15153],{"class":55},[49,15182,15183],{"class":2055},"printInfo",[49,15185,5726],{"class":55},[49,15187,15188],{"class":51,"line":2691},[49,15189,1657],{"class":55},[14,15191,15192],{},"类中的属性和行为统称为成员",[14,15194,15195],{},"属性：成员属性(成员变量)",[14,15197,15198],{},"方法：成员函数(成员方法)",[14,15200,15201],{},[373,15202,15203],{},"封装意义二：",[14,15205,15206],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15208,15209],{},"访问权限有三种：",[178,15211,15212,15215,15218],{},[181,15213,15214],{},"public        公共权限",[181,15216,15217],{},"protected 保护权限",[181,15219,15220],{},"private      私有权限",[14,15222,15223],{},[373,15224,15225],{},"示例：",[39,15227,15229],{"className":10031,"code":15228,"language":10033,"meta":44,"style":44},"\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",[46,15230,15231,15236,15241,15246,15251,15255,15262,15266,15271,15275,15280,15284,15289,15294,15299,15303,15308,15313,15320,15324,15328,15336,15340,15351,15363,15375,15379,15383,15387,15395,15399,15404,15416,15424,15432,15436,15446,15450,15458],{"__ignoreMap":44},[49,15232,15233],{"class":51,"line":52},[49,15234,15235],{"class":283},"\u002F\u002F三种权限\n",[49,15237,15238],{"class":51,"line":84},[49,15239,15240],{"class":283},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[49,15242,15243],{"class":51,"line":109},[49,15244,15245],{"class":283},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[49,15247,15248],{"class":51,"line":120},[49,15249,15250],{"class":283},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[49,15252,15253],{"class":51,"line":135},[49,15254,2492],{"emptyLinePlaceholder":151},[49,15256,15257,15259],{"class":51,"line":1306},[49,15258,14784],{"class":59},[49,15260,15261],{"class":2055}," Person\n",[49,15263,15264],{"class":51,"line":1312},[49,15265,1638],{"class":55},[49,15267,15268],{"class":51,"line":1403},[49,15269,15270],{"class":283},"    \u002F\u002F姓名  公共权限\n",[49,15272,15273],{"class":51,"line":1409},[49,15274,14806],{"class":59},[49,15276,15277],{"class":51,"line":1421},[49,15278,15279],{"class":55},"    string m_Name;\n",[49,15281,15282],{"class":51,"line":1704},[49,15283,2492],{"emptyLinePlaceholder":151},[49,15285,15286],{"class":51,"line":1709},[49,15287,15288],{"class":283},"    \u002F\u002F汽车  保护权限\n",[49,15290,15291],{"class":51,"line":1715},[49,15292,15293],{"class":59},"protected:\n",[49,15295,15296],{"class":51,"line":1720},[49,15297,15298],{"class":55},"    string m_Car;\n",[49,15300,15301],{"class":51,"line":1734},[49,15302,2492],{"emptyLinePlaceholder":151},[49,15304,15305],{"class":51,"line":1739},[49,15306,15307],{"class":283},"    \u002F\u002F银行卡密码  私有权限\n",[49,15309,15310],{"class":51,"line":1745},[49,15311,15312],{"class":59},"private:\n",[49,15314,15315,15317],{"class":51,"line":1766},[49,15316,2077],{"class":59},[49,15318,15319],{"class":55}," m_Password;\n",[49,15321,15322],{"class":51,"line":1771},[49,15323,2492],{"emptyLinePlaceholder":151},[49,15325,15326],{"class":51,"line":1785},[49,15327,14806],{"class":59},[49,15329,15330,15332,15334],{"class":51,"line":1790},[49,15331,14999],{"class":59},[49,15333,11475],{"class":2055},[49,15335,2068],{"class":55},[49,15337,15338],{"class":51,"line":1819},[49,15339,2122],{"class":55},[49,15341,15342,15345,15347,15349],{"class":51,"line":1824},[49,15343,15344],{"class":55},"        m_Name ",[49,15346,60],{"class":59},[49,15348,9028],{"class":328},[49,15350,1382],{"class":55},[49,15352,15353,15356,15358,15361],{"class":51,"line":1841},[49,15354,15355],{"class":55},"        m_Car ",[49,15357,60],{"class":59},[49,15359,15360],{"class":328}," \"拖拉机\"",[49,15362,1382],{"class":55},[49,15364,15365,15368,15370,15373],{"class":51,"line":1846},[49,15366,15367],{"class":55},"        m_Password ",[49,15369,60],{"class":59},[49,15371,15372],{"class":66}," 123456",[49,15374,1382],{"class":55},[49,15376,15377],{"class":51,"line":1851},[49,15378,2279],{"class":55},[49,15380,15381],{"class":51,"line":1856},[49,15382,4087],{"class":55},[49,15384,15385],{"class":51,"line":1870},[49,15386,2492],{"emptyLinePlaceholder":151},[49,15388,15389,15391,15393],{"class":51,"line":1875},[49,15390,231],{"class":59},[49,15392,2065],{"class":2055},[49,15394,10943],{"class":55},[49,15396,15397],{"class":51,"line":2669},[49,15398,2492],{"emptyLinePlaceholder":151},[49,15400,15401],{"class":51,"line":2683},[49,15402,15403],{"class":55},"    Person p;\n",[49,15405,15406,15409,15411,15414],{"class":51,"line":2691},[49,15407,15408],{"class":55},"    p.m_Name ",[49,15410,60],{"class":59},[49,15412,15413],{"class":328}," \"李四\"",[49,15415,1382],{"class":55},[49,15417,15418,15421],{"class":51,"line":2696},[49,15419,15420],{"class":283},"    \u002F\u002Fp.m_Car = \"奔驰\";",[49,15422,15423],{"class":283},"  \u002F\u002F保护权限类外访问不到\n",[49,15425,15426,15429],{"class":51,"line":2702},[49,15427,15428],{"class":283},"    \u002F\u002Fp.m_Password = 123;",[49,15430,15431],{"class":283}," \u002F\u002F私有权限类外访问不到\n",[49,15433,15434],{"class":51,"line":2708},[49,15435,2492],{"emptyLinePlaceholder":151},[49,15437,15438,15440,15442,15444],{"class":51,"line":2713},[49,15439,2395],{"class":2055},[49,15441,228],{"class":55},[49,15443,2400],{"class":328},[49,15445,2811],{"class":55},[49,15447,15448],{"class":51,"line":8038},[49,15449,2492],{"emptyLinePlaceholder":151},[49,15451,15452,15454,15456],{"class":51,"line":8062},[49,15453,4182],{"class":59},[49,15455,4185],{"class":66},[49,15457,1382],{"class":55},[49,15459,15460],{"class":51,"line":8067},[49,15461,1657],{"class":55},[195,15463,15465],{"id":15464},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15467,15468,15469,15472,15473],{},"在C++中 struct和class唯一的",[373,15470,15471],{},"区别","就在于 ",[373,15474,15475],{},"默认的访问权限不同",[14,15477,15478],{},"区别：",[1226,15480,15481,15484],{},[181,15482,15483],{},"struct 默认权限为公共",[181,15485,15486],{},"class   默认权限为私有",[39,15488,15490],{"className":10031,"code":15489,"language":10033,"meta":44,"style":44},"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",[46,15491,15492,15499,15503,15513,15517,15521,15528,15532,15542,15546,15550,15558,15562,15567,15581,15585,15590,15604,15608,15618,15622,15630],{"__ignoreMap":44},[49,15493,15494,15496],{"class":51,"line":52},[49,15495,14784],{"class":59},[49,15497,15498],{"class":2055}," C1\n",[49,15500,15501],{"class":51,"line":84},[49,15502,1638],{"class":55},[49,15504,15505,15507,15510],{"class":51,"line":109},[49,15506,2077],{"class":59},[49,15508,15509],{"class":55},"  m_A;",[49,15511,15512],{"class":283}," \u002F\u002F默认是私有权限\n",[49,15514,15515],{"class":51,"line":120},[49,15516,4087],{"class":55},[49,15518,15519],{"class":51,"line":135},[49,15520,2492],{"emptyLinePlaceholder":151},[49,15522,15523,15525],{"class":51,"line":1306},[49,15524,7849],{"class":59},[49,15526,15527],{"class":2055}," C2\n",[49,15529,15530],{"class":51,"line":1312},[49,15531,1638],{"class":55},[49,15533,15534,15536,15539],{"class":51,"line":1403},[49,15535,2077],{"class":59},[49,15537,15538],{"class":55}," m_A;",[49,15540,15541],{"class":283},"  \u002F\u002F默认是公共权限\n",[49,15543,15544],{"class":51,"line":1409},[49,15545,4087],{"class":55},[49,15547,15548],{"class":51,"line":1421},[49,15549,2492],{"emptyLinePlaceholder":151},[49,15551,15552,15554,15556],{"class":51,"line":1704},[49,15553,231],{"class":59},[49,15555,2065],{"class":2055},[49,15557,10943],{"class":55},[49,15559,15560],{"class":51,"line":1709},[49,15561,2492],{"emptyLinePlaceholder":151},[49,15563,15564],{"class":51,"line":1715},[49,15565,15566],{"class":55},"    C1 c1;\n",[49,15568,15569,15572,15574,15576,15578],{"class":51,"line":1720},[49,15570,15571],{"class":55},"    c1.m_A ",[49,15573,60],{"class":59},[49,15575,2130],{"class":66},[49,15577,280],{"class":55},[49,15579,15580],{"class":283}," \u002F\u002F错误，访问权限是私有\n",[49,15582,15583],{"class":51,"line":1734},[49,15584,2492],{"emptyLinePlaceholder":151},[49,15586,15587],{"class":51,"line":1739},[49,15588,15589],{"class":55},"    C2 c2;\n",[49,15591,15592,15595,15597,15599,15601],{"class":51,"line":1745},[49,15593,15594],{"class":55},"    c2.m_A ",[49,15596,60],{"class":59},[49,15598,2130],{"class":66},[49,15600,280],{"class":55},[49,15602,15603],{"class":283}," \u002F\u002F正确，访问权限是公共\n",[49,15605,15606],{"class":51,"line":1766},[49,15607,2492],{"emptyLinePlaceholder":151},[49,15609,15610,15612,15614,15616],{"class":51,"line":1771},[49,15611,2395],{"class":2055},[49,15613,228],{"class":55},[49,15615,2400],{"class":328},[49,15617,2811],{"class":55},[49,15619,15620],{"class":51,"line":1785},[49,15621,2492],{"emptyLinePlaceholder":151},[49,15623,15624,15626,15628],{"class":51,"line":1790},[49,15625,4182],{"class":59},[49,15627,4185],{"class":66},[49,15629,1382],{"class":55},[49,15631,15632],{"class":51,"line":1819},[49,15633,1657],{"class":55},[195,15635,15637],{"id":15636},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15639,15640],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15642,15643],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15645,15646],{},[373,15647,15225],{},[39,15649,15651],{"className":10031,"code":15650,"language":10033,"meta":44,"style":44},"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",[46,15652,15653,15663,15667,15671,15676,15690,15699,15703,15713,15717,15724,15728,15732,15736,15741,15750,15757,15761,15766,15782,15805,15818,15825,15829,15838,15842,15846,15851,15867,15877,15881,15885,15889,15897,15901,15911,15915,15923,15927,15931,15939,15943,15947,15952,15965,15988,15992,15997,16010,16032,16036,16041,16055,16063,16067,16077,16081,16089],{"__ignoreMap":44},[49,15654,15655,15657,15660],{"class":51,"line":52},[49,15656,14784],{"class":59},[49,15658,15659],{"class":2055}," Person",[49,15661,15662],{"class":55}," {\n",[49,15664,15665],{"class":51,"line":84},[49,15666,14806],{"class":59},[49,15668,15669],{"class":51,"line":109},[49,15670,2492],{"emptyLinePlaceholder":151},[49,15672,15673],{"class":51,"line":120},[49,15674,15675],{"class":283},"    \u002F\u002F姓名设置可读可写\n",[49,15677,15678,15680,15682,15684,15686,15688],{"class":51,"line":135},[49,15679,14999],{"class":59},[49,15681,15002],{"class":2055},[49,15683,228],{"class":55},[49,15685,15007],{"class":2055},[49,15687,15010],{"class":126},[49,15689,12532],{"class":55},[49,15691,15692,15694,15696],{"class":51,"line":1306},[49,15693,15344],{"class":55},[49,15695,60],{"class":59},[49,15697,15698],{"class":55}," name;\n",[49,15700,15701],{"class":51,"line":1312},[49,15702,2279],{"class":55},[49,15704,15705,15708,15711],{"class":51,"line":1403},[49,15706,15707],{"class":2055},"    string",[49,15709,15710],{"class":2055}," getName",[49,15712,2068],{"class":55},[49,15714,15715],{"class":51,"line":1409},[49,15716,2122],{"class":55},[49,15718,15719,15721],{"class":51,"line":1421},[49,15720,14842],{"class":59},[49,15722,15723],{"class":55}," m_Name;\n",[49,15725,15726],{"class":51,"line":1704},[49,15727,2279],{"class":55},[49,15729,15730],{"class":51,"line":1709},[49,15731,2492],{"emptyLinePlaceholder":151},[49,15733,15734],{"class":51,"line":1715},[49,15735,2492],{"emptyLinePlaceholder":151},[49,15737,15738],{"class":51,"line":1720},[49,15739,15740],{"class":283},"    \u002F\u002F获取年龄 \n",[49,15742,15743,15745,15748],{"class":51,"line":1734},[49,15744,2077],{"class":59},[49,15746,15747],{"class":2055}," getAge",[49,15749,10943],{"class":55},[49,15751,15752,15754],{"class":51,"line":1739},[49,15753,14842],{"class":59},[49,15755,15756],{"class":55}," m_Age;\n",[49,15758,15759],{"class":51,"line":1745},[49,15760,2279],{"class":55},[49,15762,15763],{"class":51,"line":1766},[49,15764,15765],{"class":283},"    \u002F\u002F设置年龄\n",[49,15767,15768,15770,15773,15775,15777,15780],{"class":51,"line":1771},[49,15769,14999],{"class":59},[49,15771,15772],{"class":2055}," setAge",[49,15774,228],{"class":55},[49,15776,231],{"class":59},[49,15778,15779],{"class":126}," age",[49,15781,12532],{"class":55},[49,15783,15784,15786,15789,15791,15793,15795,15798,15800,15803],{"class":51,"line":1785},[49,15785,2589],{"class":59},[49,15787,15788],{"class":55}," (age ",[49,15790,1129],{"class":59},[49,15792,4185],{"class":66},[49,15794,3347],{"class":59},[49,15796,15797],{"class":55}," age ",[49,15799,1179],{"class":59},[49,15801,15802],{"class":66}," 150",[49,15804,12532],{"class":55},[49,15806,15807,15809,15811,15814,15816],{"class":51,"line":1790},[49,15808,9809],{"class":55},[49,15810,1263],{"class":59},[49,15812,15813],{"class":328}," \"你个老妖精!\"",[49,15815,1536],{"class":59},[49,15817,8930],{"class":55},[49,15819,15820,15823],{"class":51,"line":1819},[49,15821,15822],{"class":59},"            return",[49,15824,1382],{"class":55},[49,15826,15827],{"class":51,"line":1824},[49,15828,2621],{"class":55},[49,15830,15831,15834,15836],{"class":51,"line":1841},[49,15832,15833],{"class":55},"        m_Age ",[49,15835,60],{"class":59},[49,15837,7887],{"class":55},[49,15839,15840],{"class":51,"line":1846},[49,15841,2279],{"class":55},[49,15843,15844],{"class":51,"line":1851},[49,15845,2492],{"emptyLinePlaceholder":151},[49,15847,15848],{"class":51,"line":1856},[49,15849,15850],{"class":283},"    \u002F\u002F情人设置为只写\n",[49,15852,15853,15855,15858,15860,15862,15865],{"class":51,"line":1870},[49,15854,14999],{"class":59},[49,15856,15857],{"class":2055}," setLover",[49,15859,228],{"class":55},[49,15861,15007],{"class":2055},[49,15863,15864],{"class":126}," lover",[49,15866,12532],{"class":55},[49,15868,15869,15872,15874],{"class":51,"line":1875},[49,15870,15871],{"class":55},"        m_Lover ",[49,15873,60],{"class":59},[49,15875,15876],{"class":55}," lover;\n",[49,15878,15879],{"class":51,"line":2669},[49,15880,2279],{"class":55},[49,15882,15883],{"class":51,"line":2683},[49,15884,2492],{"emptyLinePlaceholder":151},[49,15886,15887],{"class":51,"line":2691},[49,15888,15312],{"class":59},[49,15890,15891,15894],{"class":51,"line":2696},[49,15892,15893],{"class":55},"    string m_Name;",[49,15895,15896],{"class":283}," \u002F\u002F可读可写  姓名\n",[49,15898,15899],{"class":51,"line":2702},[49,15900,13300],{"class":55},[49,15902,15903,15905,15908],{"class":51,"line":2708},[49,15904,2077],{"class":59},[49,15906,15907],{"class":55}," m_Age;",[49,15909,15910],{"class":283}," \u002F\u002F只读  年龄\n",[49,15912,15913],{"class":51,"line":2713},[49,15914,2492],{"emptyLinePlaceholder":151},[49,15916,15917,15920],{"class":51,"line":8038},[49,15918,15919],{"class":55},"    string m_Lover;",[49,15921,15922],{"class":283}," \u002F\u002F只写  情人\n",[49,15924,15925],{"class":51,"line":8062},[49,15926,4087],{"class":55},[49,15928,15929],{"class":51,"line":8067},[49,15930,2492],{"emptyLinePlaceholder":151},[49,15932,15933,15935,15937],{"class":51,"line":8073},[49,15934,231],{"class":59},[49,15936,2065],{"class":2055},[49,15938,10943],{"class":55},[49,15940,15941],{"class":51,"line":8100},[49,15942,2492],{"emptyLinePlaceholder":151},[49,15944,15945],{"class":51,"line":8105},[49,15946,15403],{"class":55},[49,15948,15949],{"class":51,"line":8111},[49,15950,15951],{"class":283},"    \u002F\u002F姓名设置\n",[49,15953,15954,15957,15959,15961,15963],{"class":51,"line":8123},[49,15955,15956],{"class":55},"    p.",[49,15958,15156],{"class":2055},[49,15960,228],{"class":55},[49,15962,8006],{"class":328},[49,15964,2811],{"class":55},[49,15966,15967,15969,15971,15974,15976,15979,15982,15984,15986],{"class":51,"line":8135},[49,15968,6619],{"class":55},[49,15970,1263],{"class":59},[49,15972,15973],{"class":328}," \"姓名： \"",[49,15975,1536],{"class":59},[49,15977,15978],{"class":55}," p.",[49,15980,15981],{"class":2055},"getName",[49,15983,13140],{"class":55},[49,15985,1263],{"class":59},[49,15987,8930],{"class":55},[49,15989,15990],{"class":51,"line":8147},[49,15991,2492],{"emptyLinePlaceholder":151},[49,15993,15994],{"class":51,"line":9806},[49,15995,15996],{"class":283},"    \u002F\u002F年龄设置\n",[49,15998,15999,16001,16004,16006,16008],{"class":51,"line":9831},[49,16000,15956],{"class":55},[49,16002,16003],{"class":2055},"setAge",[49,16005,228],{"class":55},[49,16007,875],{"class":66},[49,16009,2811],{"class":55},[49,16011,16012,16014,16016,16019,16021,16023,16026,16028,16030],{"class":51,"line":9854},[49,16013,6619],{"class":55},[49,16015,1263],{"class":59},[49,16017,16018],{"class":328}," \"年龄： \"",[49,16020,1536],{"class":59},[49,16022,15978],{"class":55},[49,16024,16025],{"class":2055},"getAge",[49,16027,13140],{"class":55},[49,16029,1263],{"class":59},[49,16031,8930],{"class":55},[49,16033,16034],{"class":51,"line":9878},[49,16035,2492],{"emptyLinePlaceholder":151},[49,16037,16038],{"class":51,"line":9883},[49,16039,16040],{"class":283},"    \u002F\u002F情人设置\n",[49,16042,16043,16045,16048,16050,16053],{"class":51,"line":9888},[49,16044,15956],{"class":55},[49,16046,16047],{"class":2055},"setLover",[49,16049,228],{"class":55},[49,16051,16052],{"class":328},"\"苍井\"",[49,16054,2811],{"class":55},[49,16056,16057,16060],{"class":51,"line":9893},[49,16058,16059],{"class":283},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[49,16061,16062],{"class":283},"  \u002F\u002F只写属性，不可以读取\n",[49,16064,16065],{"class":51,"line":9902},[49,16066,2492],{"emptyLinePlaceholder":151},[49,16068,16069,16071,16073,16075],{"class":51,"line":9907},[49,16070,2395],{"class":2055},[49,16072,228],{"class":55},[49,16074,2400],{"class":328},[49,16076,2811],{"class":55},[49,16078,16079],{"class":51,"line":9913},[49,16080,2492],{"emptyLinePlaceholder":151},[49,16082,16083,16085,16087],{"class":51,"line":9934},[49,16084,4182],{"class":59},[49,16086,4185],{"class":66},[49,16088,1382],{"class":55},[49,16090,16091],{"class":51,"line":9940},[49,16092,1657],{"class":55},[195,16094,16096],{"id":16095},"_814封装案例","8.1.4封装案例",[178,16098,16099],{},[181,16100,16101,16104],{},[373,16102,16103],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1226,16106,16107,16110],{},[181,16108,16109],{},"求出立方体的面积和体积",[181,16111,16112],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[39,16114,16116],{"className":216,"code":16115,"language":218,"meta":44,"style":44},"#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",[46,16117,16118,16124,16134,16141,16145,16149,16154,16184,16188,16198,16208,16218,16222,16231,16235,16271,16275,16284,16288,16304,16308,16313,16322,16326,16333,16337,16346,16350,16357,16361,16370,16374,16381,16385,16390,16407,16411,16457,16461,16470,16474,16478,16482,16491,16495,16499,16504,16508,16514,16520,16526,16530,16534,16539,16561,16565,16619,16623,16631,16635,16640,16645,16658,16665,16681,16692,16698,16721,16727,16750,16764,16784,16790,16801,16824,16846,16851,16857,16871,16884,16889,16903,16908,16914,16919,16933,16938,16943,16957,16969,16974,16987,16992,16997,17002,17015,17020],{"__ignoreMap":44},[49,16119,16120,16122],{"class":51,"line":52},[49,16121,2041],{"class":59},[49,16123,2044],{"class":328},[49,16125,16126,16128,16130,16132],{"class":51,"line":84},[49,16127,2049],{"class":59},[49,16129,2052],{"class":59},[49,16131,2056],{"class":2055},[49,16133,1382],{"class":55},[49,16135,16136,16138],{"class":51,"line":109},[49,16137,14784],{"class":59},[49,16139,16140],{"class":2055}," Cube\n",[49,16142,16143],{"class":51,"line":120},[49,16144,1638],{"class":55},[49,16146,16147],{"class":51,"line":135},[49,16148,14806],{"class":59},[49,16150,16151],{"class":51,"line":1306},[49,16152,16153],{"class":283},"    \u002F\u002F输入长宽高\n",[49,16155,16156,16158,16161,16163,16165,16168,16170,16172,16175,16177,16179,16182],{"class":51,"line":1312},[49,16157,14999],{"class":59},[49,16159,16160],{"class":2055}," setLwh",[49,16162,228],{"class":55},[49,16164,231],{"class":59},[49,16166,16167],{"class":126}," l",[49,16169,76],{"class":55},[49,16171,231],{"class":59},[49,16173,16174],{"class":126}," w",[49,16176,76],{"class":55},[49,16178,231],{"class":59},[49,16180,16181],{"class":126}," h",[49,16183,81],{"class":55},[49,16185,16186],{"class":51,"line":1403},[49,16187,2122],{"class":55},[49,16189,16190,16193,16195],{"class":51,"line":1409},[49,16191,16192],{"class":55},"        m_L",[49,16194,60],{"class":59},[49,16196,16197],{"class":55},"l;\n",[49,16199,16200,16203,16205],{"class":51,"line":1421},[49,16201,16202],{"class":55},"        m_W",[49,16204,60],{"class":59},[49,16206,16207],{"class":55},"w;\n",[49,16209,16210,16213,16215],{"class":51,"line":1704},[49,16211,16212],{"class":55},"        m_H",[49,16214,60],{"class":59},[49,16216,16217],{"class":55},"h;\n",[49,16219,16220],{"class":51,"line":1709},[49,16221,2279],{"class":55},[49,16223,16224,16226,16229],{"class":51,"line":1715},[49,16225,2077],{"class":59},[49,16227,16228],{"class":2055}," mianji",[49,16230,2068],{"class":55},[49,16232,16233],{"class":51,"line":1720},[49,16234,2122],{"class":55},[49,16236,16237,16239,16241,16243,16246,16248,16251,16253,16256,16258,16261,16263,16266,16268],{"class":51,"line":1734},[49,16238,14842],{"class":59},[49,16240,14845],{"class":66},[49,16242,674],{"class":59},[49,16244,16245],{"class":55},"(m_L",[49,16247,674],{"class":59},[49,16249,16250],{"class":55},"m_W ",[49,16252,700],{"class":59},[49,16254,16255],{"class":55}," m_L",[49,16257,674],{"class":59},[49,16259,16260],{"class":55},"m_H ",[49,16262,700],{"class":59},[49,16264,16265],{"class":55}," m_W",[49,16267,674],{"class":59},[49,16269,16270],{"class":55},"m_H);\n",[49,16272,16273],{"class":51,"line":1739},[49,16274,2279],{"class":55},[49,16276,16277,16279,16282],{"class":51,"line":1745},[49,16278,2077],{"class":59},[49,16280,16281],{"class":2055}," tiji",[49,16283,2068],{"class":55},[49,16285,16286],{"class":51,"line":1766},[49,16287,2122],{"class":55},[49,16289,16290,16292,16294,16296,16299,16301],{"class":51,"line":1771},[49,16291,14842],{"class":59},[49,16293,16255],{"class":55},[49,16295,674],{"class":59},[49,16297,16298],{"class":55},"m_W",[49,16300,674],{"class":59},[49,16302,16303],{"class":55},"m_H;\n",[49,16305,16306],{"class":51,"line":1785},[49,16307,2279],{"class":55},[49,16309,16310],{"class":51,"line":1790},[49,16311,16312],{"class":283},"    \u002F\u002F获取长宽高\n",[49,16314,16315,16317,16320],{"class":51,"line":1819},[49,16316,2077],{"class":59},[49,16318,16319],{"class":2055}," getLength",[49,16321,2068],{"class":55},[49,16323,16324],{"class":51,"line":1824},[49,16325,2122],{"class":55},[49,16327,16328,16330],{"class":51,"line":1841},[49,16329,14842],{"class":59},[49,16331,16332],{"class":55}," m_L;\n",[49,16334,16335],{"class":51,"line":1846},[49,16336,2279],{"class":55},[49,16338,16339,16341,16344],{"class":51,"line":1851},[49,16340,2077],{"class":59},[49,16342,16343],{"class":2055}," getWidth",[49,16345,2068],{"class":55},[49,16347,16348],{"class":51,"line":1856},[49,16349,2122],{"class":55},[49,16351,16352,16354],{"class":51,"line":1870},[49,16353,14842],{"class":59},[49,16355,16356],{"class":55}," m_W;\n",[49,16358,16359],{"class":51,"line":1875},[49,16360,2279],{"class":55},[49,16362,16363,16365,16368],{"class":51,"line":2669},[49,16364,2077],{"class":59},[49,16366,16367],{"class":2055}," getHeight",[49,16369,2068],{"class":55},[49,16371,16372],{"class":51,"line":2683},[49,16373,2122],{"class":55},[49,16375,16376,16378],{"class":51,"line":2691},[49,16377,14842],{"class":59},[49,16379,16380],{"class":55}," m_H;\n",[49,16382,16383],{"class":51,"line":2696},[49,16384,2279],{"class":55},[49,16386,16387],{"class":51,"line":2702},[49,16388,16389],{"class":283},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[49,16391,16392,16395,16398,16400,16403,16405],{"class":51,"line":2708},[49,16393,16394],{"class":59},"    bool",[49,16396,16397],{"class":2055}," isEqual",[49,16399,228],{"class":55},[49,16401,16402],{"class":2055},"Cube",[49,16404,2941],{"class":126},[49,16406,81],{"class":55},[49,16408,16409],{"class":51,"line":2713},[49,16410,2122],{"class":55},[49,16412,16413,16415,16418,16421,16423,16425,16428,16430,16433,16436,16438,16440,16443,16445,16447,16450,16452,16454],{"class":51,"line":8038},[49,16414,2589],{"class":59},[49,16416,16417],{"class":55}," (c.",[49,16419,16420],{"class":2055},"getLength",[49,16422,13140],{"class":55},[49,16424,3041],{"class":59},[49,16426,16427],{"class":55}," m_L ",[49,16429,1807],{"class":59},[49,16431,16432],{"class":55}," c.",[49,16434,16435],{"class":2055},"getWidth",[49,16437,13140],{"class":55},[49,16439,3041],{"class":59},[49,16441,16442],{"class":55}," m_W ",[49,16444,1807],{"class":59},[49,16446,16432],{"class":55},[49,16448,16449],{"class":2055},"getHeight",[49,16451,13140],{"class":55},[49,16453,3041],{"class":59},[49,16455,16456],{"class":55}," m_H)\n",[49,16458,16459],{"class":51,"line":8062},[49,16460,2602],{"class":55},[49,16462,16463,16465,16468],{"class":51,"line":8067},[49,16464,15822],{"class":59},[49,16466,16467],{"class":66}," true",[49,16469,1382],{"class":55},[49,16471,16472],{"class":51,"line":8073},[49,16473,2621],{"class":55},[49,16475,16476],{"class":51,"line":8100},[49,16477,2662],{"class":59},[49,16479,16480],{"class":51,"line":8105},[49,16481,2602],{"class":55},[49,16483,16484,16486,16489],{"class":51,"line":8111},[49,16485,15822],{"class":59},[49,16487,16488],{"class":66}," false",[49,16490,1382],{"class":55},[49,16492,16493],{"class":51,"line":8123},[49,16494,2621],{"class":55},[49,16496,16497],{"class":51,"line":8135},[49,16498,2279],{"class":55},[49,16500,16501],{"class":51,"line":8147},[49,16502,16503],{"class":283},"    \u002F\u002F私有属性\n",[49,16505,16506],{"class":51,"line":9806},[49,16507,15312],{"class":59},[49,16509,16510,16512],{"class":51,"line":9831},[49,16511,2077],{"class":59},[49,16513,16332],{"class":55},[49,16515,16516,16518],{"class":51,"line":9854},[49,16517,2077],{"class":59},[49,16519,16356],{"class":55},[49,16521,16522,16524],{"class":51,"line":9878},[49,16523,2077],{"class":59},[49,16525,16380],{"class":55},[49,16527,16528],{"class":51,"line":9883},[49,16529,2492],{"emptyLinePlaceholder":151},[49,16531,16532],{"class":51,"line":9888},[49,16533,4087],{"class":55},[49,16535,16536],{"class":51,"line":9893},[49,16537,16538],{"class":283},"\u002F\u002F全局函数判断两个立方体是否相等\n",[49,16540,16541,16543,16545,16547,16549,16552,16554,16556,16559],{"class":51,"line":9902},[49,16542,1446],{"class":59},[49,16544,16397],{"class":2055},[49,16546,228],{"class":55},[49,16548,16402],{"class":2055},[49,16550,16551],{"class":126}," c1",[49,16553,76],{"class":55},[49,16555,16402],{"class":2055},[49,16557,16558],{"class":126}," c2",[49,16560,81],{"class":55},[49,16562,16563],{"class":51,"line":9907},[49,16564,1638],{"class":55},[49,16566,16567,16569,16572,16574,16576,16578,16581,16583,16586,16588,16590,16592,16594,16596,16598,16600,16602,16604,16606,16608,16610,16612,16614,16616],{"class":51,"line":9913},[49,16568,4182],{"class":59},[49,16570,16571],{"class":55}," (c1.",[49,16573,16420],{"class":2055},[49,16575,13140],{"class":55},[49,16577,3041],{"class":59},[49,16579,16580],{"class":55}," c2.",[49,16582,16420],{"class":2055},[49,16584,16585],{"class":55},"()) ",[49,16587,1807],{"class":59},[49,16589,16571],{"class":55},[49,16591,16435],{"class":2055},[49,16593,13140],{"class":55},[49,16595,3041],{"class":59},[49,16597,16580],{"class":55},[49,16599,16435],{"class":2055},[49,16601,16585],{"class":55},[49,16603,1807],{"class":59},[49,16605,16571],{"class":55},[49,16607,16449],{"class":2055},[49,16609,13140],{"class":55},[49,16611,3041],{"class":59},[49,16613,16580],{"class":55},[49,16615,16449],{"class":2055},[49,16617,16618],{"class":55},"());\n",[49,16620,16621],{"class":51,"line":9934},[49,16622,1657],{"class":55},[49,16624,16625,16627,16629],{"class":51,"line":9940},[49,16626,231],{"class":59},[49,16628,2065],{"class":2055},[49,16630,2068],{"class":55},[49,16632,16633],{"class":51,"line":9954},[49,16634,1638],{"class":55},[49,16636,16637],{"class":51,"line":9960},[49,16638,16639],{"class":55},"    Cube c1;\n",[49,16641,16642],{"class":51,"line":9987},[49,16643,16644],{"class":283},"    \u002F\u002F输入立方体的长宽高\n",[49,16646,16647,16649,16651,16654,16656],{"class":51,"line":9996},[49,16648,1643],{"class":55},[49,16650,1263],{"class":59},[49,16652,16653],{"class":328},"\"请输入第一个立方体的长、宽、高：\"",[49,16655,1263],{"class":59},[49,16657,1285],{"class":55},[49,16659,16660,16662],{"class":51,"line":10002},[49,16661,2077],{"class":59},[49,16663,16664],{"class":55}," l,w,h,l1,w1,h1;\n",[49,16666,16667,16669,16671,16673,16675,16677,16679],{"class":51,"line":10010},[49,16668,2104],{"class":55},[49,16670,1521],{"class":59},[49,16672,737],{"class":55},[49,16674,1521],{"class":59},[49,16676,1014],{"class":55},[49,16678,1521],{"class":59},[49,16680,16217],{"class":55},[49,16682,16683,16686,16689],{"class":51,"line":10015},[49,16684,16685],{"class":55},"    c1.",[49,16687,16688],{"class":2055},"setLwh",[49,16690,16691],{"class":55},"(l,w,h);\n",[49,16693,16695],{"class":51,"line":16694},66,[49,16696,16697],{"class":283},"    \u002F\u002F面积\n",[49,16699,16701,16703,16705,16708,16710,16712,16715,16717,16719],{"class":51,"line":16700},67,[49,16702,1643],{"class":55},[49,16704,1263],{"class":59},[49,16706,16707],{"class":328},"\"立方体的表面积为：\"",[49,16709,1263],{"class":59},[49,16711,14920],{"class":55},[49,16713,16714],{"class":2055},"mianji",[49,16716,2519],{"class":55},[49,16718,1263],{"class":59},[49,16720,1285],{"class":55},[49,16722,16724],{"class":51,"line":16723},68,[49,16725,16726],{"class":283},"    \u002F\u002F体积\n",[49,16728,16730,16732,16734,16737,16739,16741,16744,16746,16748],{"class":51,"line":16729},69,[49,16731,1643],{"class":55},[49,16733,1263],{"class":59},[49,16735,16736],{"class":328},"\"立方体的体积为：\"",[49,16738,1263],{"class":59},[49,16740,14920],{"class":55},[49,16742,16743],{"class":2055},"tiji",[49,16745,2519],{"class":55},[49,16747,1263],{"class":59},[49,16749,1285],{"class":55},[49,16751,16753,16755,16757,16760,16762],{"class":51,"line":16752},70,[49,16754,1643],{"class":55},[49,16756,1263],{"class":59},[49,16758,16759],{"class":328},"\"请输入第二个立方体的长、宽、高：\"",[49,16761,1263],{"class":59},[49,16763,1285],{"class":55},[49,16765,16767,16769,16771,16774,16776,16779,16781],{"class":51,"line":16766},71,[49,16768,2104],{"class":55},[49,16770,1521],{"class":59},[49,16772,16773],{"class":55},"l1",[49,16775,1521],{"class":59},[49,16777,16778],{"class":55},"w1",[49,16780,1521],{"class":59},[49,16782,16783],{"class":55},"h1;\n",[49,16785,16787],{"class":51,"line":16786},72,[49,16788,16789],{"class":55},"    Cube c2;\n",[49,16791,16793,16796,16798],{"class":51,"line":16792},73,[49,16794,16795],{"class":55},"    c2.",[49,16797,16688],{"class":2055},[49,16799,16800],{"class":55},"(l1,w1,h1);\n",[49,16802,16804,16806,16808,16811,16813,16816,16818,16820,16822],{"class":51,"line":16803},74,[49,16805,1643],{"class":55},[49,16807,1263],{"class":59},[49,16809,16810],{"class":328},"\"第二个立方体的表面积为：\"",[49,16812,1263],{"class":59},[49,16814,16815],{"class":55},"c2.",[49,16817,16714],{"class":2055},[49,16819,2519],{"class":55},[49,16821,1263],{"class":59},[49,16823,1285],{"class":55},[49,16825,16827,16829,16831,16834,16836,16838,16840,16842,16844],{"class":51,"line":16826},75,[49,16828,1643],{"class":55},[49,16830,1263],{"class":59},[49,16832,16833],{"class":328},"\"第二个立方体的体积为：\"",[49,16835,1263],{"class":59},[49,16837,16815],{"class":55},[49,16839,16743],{"class":2055},[49,16841,2519],{"class":55},[49,16843,1263],{"class":59},[49,16845,1285],{"class":55},[49,16847,16849],{"class":51,"line":16848},76,[49,16850,2492],{"emptyLinePlaceholder":151},[49,16852,16854],{"class":51,"line":16853},77,[49,16855,16856],{"class":283},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[49,16858,16860,16862,16864,16867,16869],{"class":51,"line":16859},78,[49,16861,1643],{"class":55},[49,16863,1263],{"class":59},[49,16865,16866],{"class":328},"\"内部函数判断结果：\"",[49,16868,1263],{"class":59},[49,16870,1285],{"class":55},[49,16872,16874,16876,16878,16881],{"class":51,"line":16873},79,[49,16875,3193],{"class":59},[49,16877,16571],{"class":55},[49,16879,16880],{"class":2055},"isEqual",[49,16882,16883],{"class":55},"(c2))\n",[49,16885,16887],{"class":51,"line":16886},80,[49,16888,2122],{"class":55},[49,16890,16892,16894,16896,16899,16901],{"class":51,"line":16891},81,[49,16893,3543],{"class":55},[49,16895,1263],{"class":59},[49,16897,16898],{"class":328},"\"两个立方体相等\"",[49,16900,1263],{"class":59},[49,16902,1285],{"class":55},[49,16904,16906],{"class":51,"line":16905},82,[49,16907,2279],{"class":55},[49,16909,16911],{"class":51,"line":16910},83,[49,16912,16913],{"class":59},"    else\n",[49,16915,16917],{"class":51,"line":16916},84,[49,16918,2122],{"class":55},[49,16920,16922,16924,16926,16929,16931],{"class":51,"line":16921},85,[49,16923,3543],{"class":55},[49,16925,1263],{"class":59},[49,16927,16928],{"class":328},"\"两个立方体不相等\"",[49,16930,1263],{"class":59},[49,16932,1285],{"class":55},[49,16934,16936],{"class":51,"line":16935},86,[49,16937,2279],{"class":55},[49,16939,16941],{"class":51,"line":16940},87,[49,16942,2492],{"emptyLinePlaceholder":151},[49,16944,16946,16948,16950,16953,16955],{"class":51,"line":16945},88,[49,16947,1643],{"class":55},[49,16949,1263],{"class":59},[49,16951,16952],{"class":328},"\"全局函数判断结果：\"",[49,16954,1263],{"class":59},[49,16956,1285],{"class":55},[49,16958,16960,16962,16964,16966],{"class":51,"line":16959},89,[49,16961,3193],{"class":59},[49,16963,1750],{"class":55},[49,16965,16880],{"class":2055},[49,16967,16968],{"class":55},"(c1, c2))\n",[49,16970,16972],{"class":51,"line":16971},90,[49,16973,2122],{"class":55},[49,16975,16977,16979,16981,16983,16985],{"class":51,"line":16976},91,[49,16978,3543],{"class":55},[49,16980,1263],{"class":59},[49,16982,16898],{"class":328},[49,16984,1263],{"class":59},[49,16986,1285],{"class":55},[49,16988,16990],{"class":51,"line":16989},92,[49,16991,2279],{"class":55},[49,16993,16995],{"class":51,"line":16994},93,[49,16996,16913],{"class":59},[49,16998,17000],{"class":51,"line":16999},94,[49,17001,2122],{"class":55},[49,17003,17005,17007,17009,17011,17013],{"class":51,"line":17004},95,[49,17006,3543],{"class":55},[49,17008,1263],{"class":59},[49,17010,16928],{"class":328},[49,17012,1263],{"class":59},[49,17014,1285],{"class":55},[49,17016,17018],{"class":51,"line":17017},96,[49,17019,2279],{"class":55},[49,17021,17023],{"class":51,"line":17022},97,[49,17024,1657],{"class":55},[178,17026,17027],{"start":84},[181,17028,17029],{},[373,17030,17031],{},"练习案例2：点和圆的关系",[1226,17033,17034],{},[181,17035,17036],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[39,17038,17040],{"className":216,"code":17039,"language":218,"meta":44,"style":44},"#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",[46,17041,17042,17048,17058,17065,17072,17076,17080,17085,17119,17124,17140,17154,17158,17162,17169,17176,17180,17186,17190,17194,17198,17220,17243,17248,17262,17277,17281,17285,17291,17296,17301,17305,17331,17335,17365,17393,17421,17438,17442,17455,17459,17463,17467,17480,17484,17488,17496,17500,17504,17508,17513,17517,17528,17535,17544,17554,17565,17572,17585,17596,17606,17617,17624,17638,17643,17653,17661],{"__ignoreMap":44},[49,17043,17044,17046],{"class":51,"line":52},[49,17045,2041],{"class":59},[49,17047,2044],{"class":328},[49,17049,17050,17052,17054,17056],{"class":51,"line":84},[49,17051,2049],{"class":59},[49,17053,2052],{"class":59},[49,17055,2056],{"class":2055},[49,17057,1382],{"class":55},[49,17059,17060,17062],{"class":51,"line":109},[49,17061,2041],{"class":59},[49,17063,17064],{"class":328},"\u003Ccmath>\n",[49,17066,17067,17069],{"class":51,"line":120},[49,17068,14784],{"class":59},[49,17070,17071],{"class":2055}," Point\n",[49,17073,17074],{"class":51,"line":135},[49,17075,1638],{"class":55},[49,17077,17078],{"class":51,"line":1306},[49,17079,14806],{"class":59},[49,17081,17082],{"class":51,"line":1312},[49,17083,17084],{"class":283},"    \u002F\u002F赋值\n",[49,17086,17087,17089,17092,17094,17096,17099,17101,17103,17106,17109,17111,17114,17116],{"class":51,"line":1403},[49,17088,14999],{"class":59},[49,17090,17091],{"class":2055}," setPoint",[49,17093,228],{"class":55},[49,17095,14127],{"class":59},[49,17097,17098],{"class":126}," x",[49,17100,12525],{"class":55},[49,17102,14127],{"class":59},[49,17104,17105],{"class":126}," y",[49,17107,17108],{"class":55},") { m_x ",[49,17110,60],{"class":59},[49,17112,17113],{"class":55}," x; m_y ",[49,17115,60],{"class":59},[49,17117,17118],{"class":55}," y; }\n",[49,17120,17121],{"class":51,"line":1409},[49,17122,17123],{"class":283},"    \u002F\u002F获取坐标\n",[49,17125,17126,17128,17131,17134,17137],{"class":51,"line":1421},[49,17127,14828],{"class":59},[49,17129,17130],{"class":2055}," getX",[49,17132,17133],{"class":55},"() { ",[49,17135,17136],{"class":59},"return",[49,17138,17139],{"class":55}," m_x; }\n",[49,17141,17142,17144,17147,17149,17151],{"class":51,"line":1704},[49,17143,14828],{"class":59},[49,17145,17146],{"class":2055}," getY",[49,17148,17133],{"class":55},[49,17150,17136],{"class":59},[49,17152,17153],{"class":55}," m_y; }\n",[49,17155,17156],{"class":51,"line":1709},[49,17157,2492],{"emptyLinePlaceholder":151},[49,17159,17160],{"class":51,"line":1715},[49,17161,15312],{"class":59},[49,17163,17164,17166],{"class":51,"line":1720},[49,17165,14828],{"class":59},[49,17167,17168],{"class":55}," m_x;\n",[49,17170,17171,17173],{"class":51,"line":1734},[49,17172,14828],{"class":59},[49,17174,17175],{"class":55}," m_y;\n",[49,17177,17178],{"class":51,"line":1739},[49,17179,4087],{"class":55},[49,17181,17182,17184],{"class":51,"line":1745},[49,17183,14784],{"class":59},[49,17185,14787],{"class":2055},[49,17187,17188],{"class":51,"line":1766},[49,17189,1638],{"class":55},[49,17191,17192],{"class":51,"line":1771},[49,17193,14806],{"class":59},[49,17195,17196],{"class":51,"line":1785},[49,17197,17084],{"class":283},[49,17199,17200,17202,17205,17207,17209,17212,17215,17217],{"class":51,"line":1790},[49,17201,14999],{"class":59},[49,17203,17204],{"class":2055}," setRadius",[49,17206,228],{"class":55},[49,17208,14127],{"class":59},[49,17210,17211],{"class":126}," r",[49,17213,17214],{"class":55},") { m_r ",[49,17216,60],{"class":59},[49,17218,17219],{"class":55}," r; }\n",[49,17221,17222,17224,17227,17229,17232,17235,17238,17240],{"class":51,"line":1819},[49,17223,14999],{"class":59},[49,17225,17226],{"class":2055}," setCenter",[49,17228,228],{"class":55},[49,17230,17231],{"class":2055},"Point",[49,17233,17234],{"class":126}," center",[49,17236,17237],{"class":55},") { m_center ",[49,17239,60],{"class":59},[49,17241,17242],{"class":55}," center; }\n",[49,17244,17245],{"class":51,"line":1824},[49,17246,17247],{"class":283},"    \u002F\u002F获取属性\n",[49,17249,17250,17252,17255,17257,17259],{"class":51,"line":1841},[49,17251,14828],{"class":59},[49,17253,17254],{"class":2055}," getRadius",[49,17256,17133],{"class":55},[49,17258,17136],{"class":59},[49,17260,17261],{"class":55}," m_r; }\n",[49,17263,17264,17267,17270,17272,17274],{"class":51,"line":1846},[49,17265,17266],{"class":2055},"    Point",[49,17268,17269],{"class":2055}," getCenter",[49,17271,17133],{"class":55},[49,17273,17136],{"class":59},[49,17275,17276],{"class":55}," m_center; }\n",[49,17278,17279],{"class":51,"line":1851},[49,17280,2492],{"emptyLinePlaceholder":151},[49,17282,17283],{"class":51,"line":1856},[49,17284,15312],{"class":59},[49,17286,17287,17289],{"class":51,"line":1870},[49,17288,14828],{"class":59},[49,17290,14818],{"class":55},[49,17292,17293],{"class":51,"line":1875},[49,17294,17295],{"class":283},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[49,17297,17298],{"class":51,"line":2669},[49,17299,17300],{"class":55},"    Point m_center;\n",[49,17302,17303],{"class":51,"line":2683},[49,17304,4087],{"class":55},[49,17306,17307,17309,17312,17314,17317,17319,17321,17323,17325,17327,17329],{"class":51,"line":2691},[49,17308,5454],{"class":59},[49,17310,17311],{"class":2055}," isInCircle",[49,17313,228],{"class":55},[49,17315,17316],{"class":2055},"Circle",[49,17318,10674],{"class":59},[49,17320,510],{"class":126},[49,17322,76],{"class":55},[49,17324,17231],{"class":2055},[49,17326,10674],{"class":59},[49,17328,14],{"class":126},[49,17330,81],{"class":55},[49,17332,17333],{"class":51,"line":2696},[49,17334,1638],{"class":55},[49,17336,17337,17339,17342,17344,17346,17349,17352,17355,17357,17359,17361,17363],{"class":51,"line":2702},[49,17338,14828],{"class":59},[49,17340,17341],{"class":55}," dx ",[49,17343,60],{"class":59},[49,17345,16432],{"class":55},[49,17347,17348],{"class":2055},"getCenter",[49,17350,17351],{"class":55},"().",[49,17353,17354],{"class":2055},"getX",[49,17356,13140],{"class":55},[49,17358,751],{"class":59},[49,17360,15978],{"class":55},[49,17362,17354],{"class":2055},[49,17364,5726],{"class":55},[49,17366,17367,17369,17372,17374,17376,17378,17380,17383,17385,17387,17389,17391],{"class":51,"line":2708},[49,17368,14828],{"class":59},[49,17370,17371],{"class":55}," dy ",[49,17373,60],{"class":59},[49,17375,16432],{"class":55},[49,17377,17348],{"class":2055},[49,17379,17351],{"class":55},[49,17381,17382],{"class":2055},"getY",[49,17384,13140],{"class":55},[49,17386,751],{"class":59},[49,17388,15978],{"class":55},[49,17390,17382],{"class":2055},[49,17392,5726],{"class":55},[49,17394,17395,17397,17400,17402,17405,17408,17410,17412,17414,17416,17418],{"class":51,"line":2713},[49,17396,14828],{"class":59},[49,17398,17399],{"class":55}," distance ",[49,17401,60],{"class":59},[49,17403,17404],{"class":2055}," sqrt",[49,17406,17407],{"class":55},"(dx ",[49,17409,674],{"class":59},[49,17411,17341],{"class":55},[49,17413,700],{"class":59},[49,17415,17371],{"class":55},[49,17417,674],{"class":59},[49,17419,17420],{"class":55}," dy);\n",[49,17422,17423,17425,17428,17430,17432,17435],{"class":51,"line":8038},[49,17424,3193],{"class":59},[49,17426,17427],{"class":55}," (distance ",[49,17429,1129],{"class":59},[49,17431,16432],{"class":55},[49,17433,17434],{"class":2055},"getRadius",[49,17436,17437],{"class":55},"())\n",[49,17439,17440],{"class":51,"line":8062},[49,17441,2122],{"class":55},[49,17443,17444,17446,17448,17451,17453],{"class":51,"line":8067},[49,17445,9759],{"class":55},[49,17447,1263],{"class":59},[49,17449,17450],{"class":328}," \"点在圆内\"",[49,17452,1536],{"class":59},[49,17454,8930],{"class":55},[49,17456,17457],{"class":51,"line":8073},[49,17458,2279],{"class":55},[49,17460,17461],{"class":51,"line":8100},[49,17462,16913],{"class":59},[49,17464,17465],{"class":51,"line":8105},[49,17466,2122],{"class":55},[49,17468,17469,17471,17473,17476,17478],{"class":51,"line":8111},[49,17470,9759],{"class":55},[49,17472,1263],{"class":59},[49,17474,17475],{"class":328}," \"点在圆外\"",[49,17477,1536],{"class":59},[49,17479,8930],{"class":55},[49,17481,17482],{"class":51,"line":8123},[49,17483,2279],{"class":55},[49,17485,17486],{"class":51,"line":8135},[49,17487,1657],{"class":55},[49,17489,17490,17492,17494],{"class":51,"line":8147},[49,17491,231],{"class":59},[49,17493,2065],{"class":2055},[49,17495,2068],{"class":55},[49,17497,17498],{"class":51,"line":9806},[49,17499,1638],{"class":55},[49,17501,17502],{"class":51,"line":9831},[49,17503,15143],{"class":283},[49,17505,17506],{"class":51,"line":9854},[49,17507,14890],{"class":55},[49,17509,17510],{"class":51,"line":9878},[49,17511,17512],{"class":55},"    Point p1;\n",[49,17514,17515],{"class":51,"line":9883},[49,17516,17084],{"class":283},[49,17518,17519,17521,17523,17526],{"class":51,"line":9888},[49,17520,1643],{"class":55},[49,17522,1263],{"class":59},[49,17524,17525],{"class":328},"\"请输入圆的半径：\"",[49,17527,1382],{"class":55},[49,17529,17530,17532],{"class":51,"line":9893},[49,17531,14828],{"class":59},[49,17533,17534],{"class":55}," r;\n",[49,17536,17537,17539,17541],{"class":51,"line":9902},[49,17538,2104],{"class":55},[49,17540,1521],{"class":59},[49,17542,17543],{"class":55},"r;\n",[49,17545,17546,17548,17551],{"class":51,"line":9907},[49,17547,16685],{"class":55},[49,17549,17550],{"class":2055},"setRadius",[49,17552,17553],{"class":55},"(r);\n",[49,17555,17556,17558,17560,17563],{"class":51,"line":9913},[49,17557,1643],{"class":55},[49,17559,1263],{"class":59},[49,17561,17562],{"class":328},"\"请输入圆心坐标：\"",[49,17564,1382],{"class":55},[49,17566,17567,17569],{"class":51,"line":9934},[49,17568,14828],{"class":59},[49,17570,17571],{"class":55}," x, y;\n",[49,17573,17574,17576,17578,17580,17582],{"class":51,"line":9940},[49,17575,2104],{"class":55},[49,17577,1521],{"class":59},[49,17579,1039],{"class":55},[49,17581,1521],{"class":59},[49,17583,17584],{"class":55},"y;\n",[49,17586,17587,17590,17593],{"class":51,"line":9954},[49,17588,17589],{"class":55},"    p1.",[49,17591,17592],{"class":2055},"setPoint",[49,17594,17595],{"class":55},"(x, y);\n",[49,17597,17598,17600,17603],{"class":51,"line":9960},[49,17599,16685],{"class":55},[49,17601,17602],{"class":2055},"setCenter",[49,17604,17605],{"class":55},"(p1);\n",[49,17607,17608,17610,17612,17615],{"class":51,"line":9987},[49,17609,1643],{"class":55},[49,17611,1263],{"class":59},[49,17613,17614],{"class":328},"\"请输入测试点坐标：\"",[49,17616,1382],{"class":55},[49,17618,17619,17621],{"class":51,"line":9996},[49,17620,14828],{"class":59},[49,17622,17623],{"class":55}," x1, y1;\n",[49,17625,17626,17628,17630,17633,17635],{"class":51,"line":10002},[49,17627,2104],{"class":55},[49,17629,1521],{"class":59},[49,17631,17632],{"class":55},"x1",[49,17634,1521],{"class":59},[49,17636,17637],{"class":55},"y1;\n",[49,17639,17640],{"class":51,"line":10010},[49,17641,17642],{"class":55},"    Point p2;\n",[49,17644,17645,17648,17650],{"class":51,"line":10015},[49,17646,17647],{"class":55},"    p2.",[49,17649,17592],{"class":2055},[49,17651,17652],{"class":55},"(x1, y1);\n",[49,17654,17655,17658],{"class":51,"line":16694},[49,17656,17657],{"class":2055},"    isInCircle",[49,17659,17660],{"class":55},"(c1, p2);\n",[49,17662,17663],{"class":51,"line":16700},[49,17664,1657],{"class":55},[14,17666,17667],{},"在类中可以让另一个类作为本来的成员",[14,17669,17670],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17672,17673],{},"创建point.h",[39,17675,17677],{"className":216,"code":17676,"language":218,"meta":44,"style":44},"#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",[46,17678,17679,17690,17696,17706,17712,17716,17721,17725,17729,17749,17753,17761,17769,17773,17777,17783,17789],{"__ignoreMap":44},[49,17680,17681,17684,17687],{"class":51,"line":52},[49,17682,17683],{"class":59},"#pragma",[49,17685,17686],{"class":2055}," once",[49,17688,17689],{"class":283}," \u002F\u002F防止头文件重复包含\n",[49,17691,17692,17694],{"class":51,"line":84},[49,17693,2041],{"class":59},[49,17695,2044],{"class":328},[49,17697,17698,17700,17702,17704],{"class":51,"line":109},[49,17699,2049],{"class":59},[49,17701,2052],{"class":59},[49,17703,2056],{"class":2055},[49,17705,1382],{"class":55},[49,17707,17708,17710],{"class":51,"line":120},[49,17709,14784],{"class":59},[49,17711,17071],{"class":2055},[49,17713,17714],{"class":51,"line":135},[49,17715,1638],{"class":55},[49,17717,17718],{"class":51,"line":1306},[49,17719,17720],{"class":283},"\u002F\u002F做好声明与变量定义就可以\n",[49,17722,17723],{"class":51,"line":1312},[49,17724,14806],{"class":59},[49,17726,17727],{"class":51,"line":1403},[49,17728,17084],{"class":283},[49,17730,17731,17733,17735,17737,17739,17741,17743,17745,17747],{"class":51,"line":1409},[49,17732,14999],{"class":59},[49,17734,17091],{"class":2055},[49,17736,228],{"class":55},[49,17738,14127],{"class":59},[49,17740,17098],{"class":126},[49,17742,12525],{"class":55},[49,17744,14127],{"class":59},[49,17746,17105],{"class":126},[49,17748,2811],{"class":55},[49,17750,17751],{"class":51,"line":1421},[49,17752,17123],{"class":283},[49,17754,17755,17757,17759],{"class":51,"line":1704},[49,17756,14828],{"class":59},[49,17758,17130],{"class":2055},[49,17760,5726],{"class":55},[49,17762,17763,17765,17767],{"class":51,"line":1709},[49,17764,14828],{"class":59},[49,17766,17146],{"class":2055},[49,17768,5726],{"class":55},[49,17770,17771],{"class":51,"line":1715},[49,17772,2492],{"emptyLinePlaceholder":151},[49,17774,17775],{"class":51,"line":1720},[49,17776,15312],{"class":59},[49,17778,17779,17781],{"class":51,"line":1734},[49,17780,14828],{"class":59},[49,17782,17168],{"class":55},[49,17784,17785,17787],{"class":51,"line":1739},[49,17786,14828],{"class":59},[49,17788,17175],{"class":55},[49,17790,17791],{"class":51,"line":1745},[49,17792,4087],{"class":55},[14,17794,17795],{},"创建point.cpp",[39,17797,17799],{"className":216,"code":17798,"language":218,"meta":44,"style":44},"#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",[46,17800,17801,17808,17813,17847,17851,17867],{"__ignoreMap":44},[49,17802,17803,17805],{"class":51,"line":52},[49,17804,2041],{"class":59},[49,17806,17807],{"class":328},"\u003Cpoint.h>\n",[49,17809,17810],{"class":51,"line":84},[49,17811,17812],{"class":283},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[49,17814,17815,17817,17820,17823,17825,17827,17829,17831,17833,17835,17837,17839,17841,17843,17845],{"class":51,"line":109},[49,17816,14999],{"class":59},[49,17818,17819],{"class":2055}," Point",[49,17821,17822],{"class":55},"::",[49,17824,17592],{"class":2055},[49,17826,228],{"class":55},[49,17828,14127],{"class":59},[49,17830,17098],{"class":126},[49,17832,12525],{"class":55},[49,17834,14127],{"class":59},[49,17836,17105],{"class":126},[49,17838,17108],{"class":55},[49,17840,60],{"class":59},[49,17842,17113],{"class":55},[49,17844,60],{"class":59},[49,17846,17118],{"class":55},[49,17848,17849],{"class":51,"line":120},[49,17850,17123],{"class":283},[49,17852,17853,17855,17857,17859,17861,17863,17865],{"class":51,"line":135},[49,17854,14828],{"class":59},[49,17856,17819],{"class":2055},[49,17858,17822],{"class":55},[49,17860,17354],{"class":2055},[49,17862,17133],{"class":55},[49,17864,17136],{"class":59},[49,17866,17139],{"class":55},[49,17868,17869,17871,17873,17875,17877,17879,17881],{"class":51,"line":1306},[49,17870,14828],{"class":59},[49,17872,17819],{"class":2055},[49,17874,17822],{"class":55},[49,17876,17382],{"class":2055},[49,17878,17133],{"class":55},[49,17880,17136],{"class":59},[49,17882,17153],{"class":55},[14,17884,17885],{},"创建circle.h",[39,17887,17889],{"className":216,"code":17888,"language":218,"meta":44,"style":44},"#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",[46,17890,17891,17898,17904,17914,17920,17926,17930,17934,17938,17952,17966,17970,17978,17986,17990,17994,18000,18004,18008],{"__ignoreMap":44},[49,17892,17893,17895],{"class":51,"line":52},[49,17894,17683],{"class":59},[49,17896,17897],{"class":2055}," once\n",[49,17899,17900,17902],{"class":51,"line":84},[49,17901,2041],{"class":59},[49,17903,2044],{"class":328},[49,17905,17906,17908,17910,17912],{"class":51,"line":109},[49,17907,2049],{"class":59},[49,17909,2052],{"class":59},[49,17911,2056],{"class":2055},[49,17913,1382],{"class":55},[49,17915,17916,17918],{"class":51,"line":120},[49,17917,2041],{"class":59},[49,17919,17807],{"class":328},[49,17921,17922,17924],{"class":51,"line":135},[49,17923,14784],{"class":59},[49,17925,14787],{"class":2055},[49,17927,17928],{"class":51,"line":1306},[49,17929,1638],{"class":55},[49,17931,17932],{"class":51,"line":1312},[49,17933,14806],{"class":59},[49,17935,17936],{"class":51,"line":1403},[49,17937,17084],{"class":283},[49,17939,17940,17942,17944,17946,17948,17950],{"class":51,"line":1409},[49,17941,14999],{"class":59},[49,17943,17204],{"class":2055},[49,17945,228],{"class":55},[49,17947,14127],{"class":59},[49,17949,17211],{"class":126},[49,17951,2811],{"class":55},[49,17953,17954,17956,17958,17960,17962,17964],{"class":51,"line":1421},[49,17955,14999],{"class":59},[49,17957,17226],{"class":2055},[49,17959,228],{"class":55},[49,17961,17231],{"class":2055},[49,17963,17234],{"class":126},[49,17965,2811],{"class":55},[49,17967,17968],{"class":51,"line":1704},[49,17969,17247],{"class":283},[49,17971,17972,17974,17976],{"class":51,"line":1709},[49,17973,14828],{"class":59},[49,17975,17254],{"class":2055},[49,17977,5726],{"class":55},[49,17979,17980,17982,17984],{"class":51,"line":1715},[49,17981,17266],{"class":2055},[49,17983,17269],{"class":2055},[49,17985,5726],{"class":55},[49,17987,17988],{"class":51,"line":1720},[49,17989,2492],{"emptyLinePlaceholder":151},[49,17991,17992],{"class":51,"line":1734},[49,17993,15312],{"class":59},[49,17995,17996,17998],{"class":51,"line":1739},[49,17997,14828],{"class":59},[49,17999,14818],{"class":55},[49,18001,18002],{"class":51,"line":1745},[49,18003,17295],{"class":283},[49,18005,18006],{"class":51,"line":1766},[49,18007,17300],{"class":55},[49,18009,18010],{"class":51,"line":1771},[49,18011,4087],{"class":55},[14,18013,18014],{},"创建circle.cpp",[39,18016,18018],{"className":216,"code":18017,"language":218,"meta":44,"style":44},"#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",[46,18019,18020,18027,18050,18072,18077,18093],{"__ignoreMap":44},[49,18021,18022,18024],{"class":51,"line":52},[49,18023,2041],{"class":59},[49,18025,18026],{"class":328},"\u003Ccircle.h>\n",[49,18028,18029,18031,18034,18036,18038,18040,18042,18044,18046,18048],{"class":51,"line":84},[49,18030,5454],{"class":59},[49,18032,18033],{"class":2055}," Circle",[49,18035,17822],{"class":55},[49,18037,17550],{"class":2055},[49,18039,228],{"class":55},[49,18041,14127],{"class":59},[49,18043,17211],{"class":126},[49,18045,17214],{"class":55},[49,18047,60],{"class":59},[49,18049,17219],{"class":55},[49,18051,18052,18054,18056,18058,18060,18062,18064,18066,18068,18070],{"class":51,"line":109},[49,18053,5454],{"class":59},[49,18055,18033],{"class":2055},[49,18057,17822],{"class":55},[49,18059,17602],{"class":2055},[49,18061,228],{"class":55},[49,18063,17231],{"class":2055},[49,18065,17234],{"class":126},[49,18067,17237],{"class":55},[49,18069,60],{"class":59},[49,18071,17242],{"class":55},[49,18073,18074],{"class":51,"line":120},[49,18075,18076],{"class":283},"\u002F\u002F获取属性\n",[49,18078,18079,18081,18083,18085,18087,18089,18091],{"class":51,"line":135},[49,18080,14127],{"class":59},[49,18082,18033],{"class":2055},[49,18084,17822],{"class":55},[49,18086,17434],{"class":2055},[49,18088,17133],{"class":55},[49,18090,17136],{"class":59},[49,18092,17261],{"class":55},[49,18094,18095,18097,18099,18101,18103,18105,18107],{"class":51,"line":1306},[49,18096,17231],{"class":2055},[49,18098,18033],{"class":2055},[49,18100,17822],{"class":55},[49,18102,17348],{"class":2055},[49,18104,17133],{"class":55},[49,18106,17136],{"class":59},[49,18108,17276],{"class":55},[14,18110,18111],{},"使用封装的类",[39,18113,18115],{"className":216,"code":18114,"language":218,"meta":44,"style":44},"#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",[46,18116,18117,18123,18133,18139,18145,18169,18173,18199,18225,18249,18263,18267,18279,18283,18287,18291,18303,18307,18311,18319,18323,18327,18331,18335,18339,18349,18355,18363,18371,18381,18387,18399,18407,18415,18425,18431,18443,18447,18455,18461],{"__ignoreMap":44},[49,18118,18119,18121],{"class":51,"line":52},[49,18120,2041],{"class":59},[49,18122,2044],{"class":328},[49,18124,18125,18127,18129,18131],{"class":51,"line":84},[49,18126,2049],{"class":59},[49,18128,2052],{"class":59},[49,18130,2056],{"class":2055},[49,18132,1382],{"class":55},[49,18134,18135,18137],{"class":51,"line":109},[49,18136,2041],{"class":59},[49,18138,18026],{"class":328},[49,18140,18141,18143],{"class":51,"line":120},[49,18142,2041],{"class":59},[49,18144,17807],{"class":328},[49,18146,18147,18149,18151,18153,18155,18157,18159,18161,18163,18165,18167],{"class":51,"line":135},[49,18148,5454],{"class":59},[49,18150,17311],{"class":2055},[49,18152,228],{"class":55},[49,18154,17316],{"class":2055},[49,18156,10674],{"class":59},[49,18158,510],{"class":126},[49,18160,76],{"class":55},[49,18162,17231],{"class":2055},[49,18164,10674],{"class":59},[49,18166,14],{"class":126},[49,18168,81],{"class":55},[49,18170,18171],{"class":51,"line":1306},[49,18172,1638],{"class":55},[49,18174,18175,18177,18179,18181,18183,18185,18187,18189,18191,18193,18195,18197],{"class":51,"line":1312},[49,18176,14828],{"class":59},[49,18178,17341],{"class":55},[49,18180,60],{"class":59},[49,18182,16432],{"class":55},[49,18184,17348],{"class":2055},[49,18186,17351],{"class":55},[49,18188,17354],{"class":2055},[49,18190,13140],{"class":55},[49,18192,751],{"class":59},[49,18194,15978],{"class":55},[49,18196,17354],{"class":2055},[49,18198,5726],{"class":55},[49,18200,18201,18203,18205,18207,18209,18211,18213,18215,18217,18219,18221,18223],{"class":51,"line":1403},[49,18202,14828],{"class":59},[49,18204,17371],{"class":55},[49,18206,60],{"class":59},[49,18208,16432],{"class":55},[49,18210,17348],{"class":2055},[49,18212,17351],{"class":55},[49,18214,17382],{"class":2055},[49,18216,13140],{"class":55},[49,18218,751],{"class":59},[49,18220,15978],{"class":55},[49,18222,17382],{"class":2055},[49,18224,5726],{"class":55},[49,18226,18227,18229,18231,18233,18235,18237,18239,18241,18243,18245,18247],{"class":51,"line":1409},[49,18228,14828],{"class":59},[49,18230,17399],{"class":55},[49,18232,60],{"class":59},[49,18234,17404],{"class":2055},[49,18236,17407],{"class":55},[49,18238,674],{"class":59},[49,18240,17341],{"class":55},[49,18242,700],{"class":59},[49,18244,17371],{"class":55},[49,18246,674],{"class":59},[49,18248,17420],{"class":55},[49,18250,18251,18253,18255,18257,18259,18261],{"class":51,"line":1421},[49,18252,3193],{"class":59},[49,18254,17427],{"class":55},[49,18256,1129],{"class":59},[49,18258,16432],{"class":55},[49,18260,17434],{"class":2055},[49,18262,17437],{"class":55},[49,18264,18265],{"class":51,"line":1704},[49,18266,2122],{"class":55},[49,18268,18269,18271,18273,18275,18277],{"class":51,"line":1709},[49,18270,9759],{"class":55},[49,18272,1263],{"class":59},[49,18274,17450],{"class":328},[49,18276,1536],{"class":59},[49,18278,8930],{"class":55},[49,18280,18281],{"class":51,"line":1715},[49,18282,2279],{"class":55},[49,18284,18285],{"class":51,"line":1720},[49,18286,16913],{"class":59},[49,18288,18289],{"class":51,"line":1734},[49,18290,2122],{"class":55},[49,18292,18293,18295,18297,18299,18301],{"class":51,"line":1739},[49,18294,9759],{"class":55},[49,18296,1263],{"class":59},[49,18298,17475],{"class":328},[49,18300,1536],{"class":59},[49,18302,8930],{"class":55},[49,18304,18305],{"class":51,"line":1745},[49,18306,2279],{"class":55},[49,18308,18309],{"class":51,"line":1766},[49,18310,1657],{"class":55},[49,18312,18313,18315,18317],{"class":51,"line":1771},[49,18314,231],{"class":59},[49,18316,2065],{"class":2055},[49,18318,2068],{"class":55},[49,18320,18321],{"class":51,"line":1785},[49,18322,1638],{"class":55},[49,18324,18325],{"class":51,"line":1790},[49,18326,15143],{"class":283},[49,18328,18329],{"class":51,"line":1819},[49,18330,14890],{"class":55},[49,18332,18333],{"class":51,"line":1824},[49,18334,17512],{"class":55},[49,18336,18337],{"class":51,"line":1841},[49,18338,17084],{"class":283},[49,18340,18341,18343,18345,18347],{"class":51,"line":1846},[49,18342,1643],{"class":55},[49,18344,1263],{"class":59},[49,18346,17525],{"class":328},[49,18348,1382],{"class":55},[49,18350,18351,18353],{"class":51,"line":1851},[49,18352,14828],{"class":59},[49,18354,17534],{"class":55},[49,18356,18357,18359,18361],{"class":51,"line":1856},[49,18358,2104],{"class":55},[49,18360,1521],{"class":59},[49,18362,17543],{"class":55},[49,18364,18365,18367,18369],{"class":51,"line":1870},[49,18366,16685],{"class":55},[49,18368,17550],{"class":2055},[49,18370,17553],{"class":55},[49,18372,18373,18375,18377,18379],{"class":51,"line":1875},[49,18374,1643],{"class":55},[49,18376,1263],{"class":59},[49,18378,17562],{"class":328},[49,18380,1382],{"class":55},[49,18382,18383,18385],{"class":51,"line":2669},[49,18384,14828],{"class":59},[49,18386,17571],{"class":55},[49,18388,18389,18391,18393,18395,18397],{"class":51,"line":2683},[49,18390,2104],{"class":55},[49,18392,1521],{"class":59},[49,18394,1039],{"class":55},[49,18396,1521],{"class":59},[49,18398,17584],{"class":55},[49,18400,18401,18403,18405],{"class":51,"line":2691},[49,18402,17589],{"class":55},[49,18404,17592],{"class":2055},[49,18406,17595],{"class":55},[49,18408,18409,18411,18413],{"class":51,"line":2696},[49,18410,16685],{"class":55},[49,18412,17602],{"class":2055},[49,18414,17605],{"class":55},[49,18416,18417,18419,18421,18423],{"class":51,"line":2702},[49,18418,1643],{"class":55},[49,18420,1263],{"class":59},[49,18422,17614],{"class":328},[49,18424,1382],{"class":55},[49,18426,18427,18429],{"class":51,"line":2708},[49,18428,14828],{"class":59},[49,18430,17623],{"class":55},[49,18432,18433,18435,18437,18439,18441],{"class":51,"line":2713},[49,18434,2104],{"class":55},[49,18436,1521],{"class":59},[49,18438,17632],{"class":55},[49,18440,1521],{"class":59},[49,18442,17637],{"class":55},[49,18444,18445],{"class":51,"line":8038},[49,18446,17642],{"class":55},[49,18448,18449,18451,18453],{"class":51,"line":8062},[49,18450,17647],{"class":55},[49,18452,17592],{"class":2055},[49,18454,17652],{"class":55},[49,18456,18457,18459],{"class":51,"line":8067},[49,18458,17657],{"class":2055},[49,18460,17660],{"class":55},[49,18462,18463],{"class":51,"line":8073},[49,18464,1657],{"class":55},[166,18466,18468],{"id":18467},"_82对象的初始化清理","8.2对象的初始化清理",[1226,18470,18471,18474],{},[181,18472,18473],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[181,18475,18476],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[195,18478,18480],{"id":18479},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18482,18483,18484,18487],{},"对象的",[373,18485,18486],{},"初始化和清理","也是两个非常重要的安全问题",[14,18489,18490],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18492,18493],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18495,18496,18497,18500,18501,18504],{},"c++利用了",[373,18498,18499],{},"构造函数","和",[373,18502,18503],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18506,18507,18508],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[373,18509,18510],{},"我们不提供构造和析构，编译器会提供",[14,18512,18513],{},[373,18514,18515],{},"编译器提供的构造函数和析构函数是空实现。",[1226,18517,18518,18521],{},[181,18519,18520],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[181,18522,18523,18524,18527],{},"析构函数：主要作用在于对象",[373,18525,18526],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18529,18530,18533],{},[373,18531,18532],{},"构造函数语法：",[46,18534,18535],{},"类名(){}",[178,18537,18538,18541,18544,18547,18550],{},[181,18539,18540],{},"构造函数，没有返回值也不写void",[181,18542,18543],{},"函数名称与类名相同",[181,18545,18546],{},"构造函数可以有参数，因此可以发生重载",[181,18548,18549],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[181,18551,18552,18553,649],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[46,18554,18555],{},"Person(){}",[14,18557,18558,13885,18561],{},[373,18559,18560],{},"析构函数语法：",[46,18562,18563],{},"~类名(){}",[178,18565,18566,18569,18572,18578],{},[181,18567,18568],{},"析构函数，没有返回值也不写void",[181,18570,18571],{},"函数名称与类名相同,在名称前加上符号  ~",[181,18573,18574,18575],{},"析构函数不可以有参数，因此",[373,18576,18577],{},"不可以发生重载",[181,18579,18580],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[39,18582,18584],{"className":216,"code":18583,"language":218,"meta":44,"style":44},"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",[46,18585,18586,18592,18596,18600,18605,18612,18616,18629,18633,18638,18645,18649,18662,18666,18670,18674,18678,18686,18690,18698,18702,18706,18714,18718,18723,18727,18734,18738,18751,18755,18763],{"__ignoreMap":44},[49,18587,18588,18590],{"class":51,"line":52},[49,18589,14784],{"class":59},[49,18591,15261],{"class":2055},[49,18593,18594],{"class":51,"line":84},[49,18595,1638],{"class":55},[49,18597,18598],{"class":51,"line":109},[49,18599,14806],{"class":59},[49,18601,18602],{"class":51,"line":120},[49,18603,18604],{"class":283},"    \u002F\u002F构造函数\n",[49,18606,18607,18610],{"class":51,"line":135},[49,18608,18609],{"class":2055},"    Person",[49,18611,2068],{"class":55},[49,18613,18614],{"class":51,"line":1306},[49,18615,2122],{"class":55},[49,18617,18618,18620,18622,18625,18627],{"class":51,"line":1312},[49,18619,9759],{"class":55},[49,18621,1263],{"class":59},[49,18623,18624],{"class":328}," \"Person的构造函数调用\"",[49,18626,1536],{"class":59},[49,18628,8930],{"class":55},[49,18630,18631],{"class":51,"line":1403},[49,18632,2279],{"class":55},[49,18634,18635],{"class":51,"line":1409},[49,18636,18637],{"class":283},"    \u002F\u002F析构函数\n",[49,18639,18640,18643],{"class":51,"line":1421},[49,18641,18642],{"class":2055},"    ~Person",[49,18644,2068],{"class":55},[49,18646,18647],{"class":51,"line":1704},[49,18648,2122],{"class":55},[49,18650,18651,18653,18655,18658,18660],{"class":51,"line":1709},[49,18652,9759],{"class":55},[49,18654,1263],{"class":59},[49,18656,18657],{"class":328}," \"Person的析构函数调用\"",[49,18659,1536],{"class":59},[49,18661,8930],{"class":55},[49,18663,18664],{"class":51,"line":1715},[49,18665,2279],{"class":55},[49,18667,18668],{"class":51,"line":1720},[49,18669,2492],{"emptyLinePlaceholder":151},[49,18671,18672],{"class":51,"line":1734},[49,18673,4087],{"class":55},[49,18675,18676],{"class":51,"line":1739},[49,18677,2492],{"emptyLinePlaceholder":151},[49,18679,18680,18682,18684],{"class":51,"line":1745},[49,18681,5454],{"class":59},[49,18683,5678],{"class":2055},[49,18685,2068],{"class":55},[49,18687,18688],{"class":51,"line":1766},[49,18689,1638],{"class":55},[49,18691,18692,18695],{"class":51,"line":1771},[49,18693,18694],{"class":55},"    Person p;",[49,18696,18697],{"class":283},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[49,18699,18700],{"class":51,"line":1785},[49,18701,1657],{"class":55},[49,18703,18704],{"class":51,"line":1790},[49,18705,2492],{"emptyLinePlaceholder":151},[49,18707,18708,18710,18712],{"class":51,"line":1819},[49,18709,231],{"class":59},[49,18711,2065],{"class":2055},[49,18713,10943],{"class":55},[49,18715,18716],{"class":51,"line":1824},[49,18717,13300],{"class":55},[49,18719,18720],{"class":51,"line":1841},[49,18721,18722],{"class":283},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[49,18724,18725],{"class":51,"line":1846},[49,18726,2492],{"emptyLinePlaceholder":151},[49,18728,18729,18731],{"class":51,"line":1851},[49,18730,18694],{"class":55},[49,18732,18733],{"class":283},"\u002F\u002F只有构造函数\n",[49,18735,18736],{"class":51,"line":1856},[49,18737,2492],{"emptyLinePlaceholder":151},[49,18739,18740,18742,18744,18746,18748],{"class":51,"line":1870},[49,18741,2395],{"class":2055},[49,18743,228],{"class":55},[49,18745,2400],{"class":328},[49,18747,6056],{"class":55},[49,18749,18750],{"class":283},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[49,18752,18753],{"class":51,"line":1875},[49,18754,2492],{"emptyLinePlaceholder":151},[49,18756,18757,18759,18761],{"class":51,"line":2669},[49,18758,4182],{"class":59},[49,18760,4185],{"class":66},[49,18762,1382],{"class":55},[49,18764,18765],{"class":51,"line":2683},[49,18766,1657],{"class":55},[14,18768,18769],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[195,18771,18773],{"id":18772},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18775,18776],{},"两种分类方式：",[14,18778,18779],{},"​\t按参数分为： 有参构造和无参构造",[14,18781,18782],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18784,18785],{},"三种调用方式：",[14,18787,18788],{},"​\t括号法",[14,18790,18791],{},"​\t显示法",[14,18793,18794],{},"​\t隐式转换法",[39,18796,18798],{"className":216,"code":18797,"language":218,"meta":44,"style":44},"#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",[46,18799,18800,18806,18816,18821,18826,18831,18836,18840,18848,18852,18856,18860,18866,18870,18883,18887,18899,18903,18912,18925,18929,18933,18939,18943,18956,18960,18965,18981,18985,18990,18999,19012,19016,19022,19026,19031,19039,19043,19048,19052,19060,19064,19069,19074,19079,19084,19089,19093,19098,19103,19108,19113,19117,19122,19127,19143,19155,19160,19164,19169,19174,19179,19183,19188,19202,19215,19219,19227,19231,19237,19243,19251],{"__ignoreMap":44},[49,18801,18802,18804],{"class":51,"line":52},[49,18803,2041],{"class":59},[49,18805,2044],{"class":328},[49,18807,18808,18810,18812,18814],{"class":51,"line":84},[49,18809,2049],{"class":59},[49,18811,2052],{"class":59},[49,18813,2056],{"class":2055},[49,18815,1382],{"class":55},[49,18817,18818],{"class":51,"line":109},[49,18819,18820],{"class":283},"\u002F\u002F1.构造函数的分类及调用\n",[49,18822,18823],{"class":51,"line":120},[49,18824,18825],{"class":283},"\u002F\u002F分类\n",[49,18827,18828],{"class":51,"line":135},[49,18829,18830],{"class":283},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[49,18832,18833],{"class":51,"line":1306},[49,18834,18835],{"class":283},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[49,18837,18838],{"class":51,"line":1312},[49,18839,2492],{"emptyLinePlaceholder":151},[49,18841,18842,18844,18846],{"class":51,"line":1403},[49,18843,14784],{"class":59},[49,18845,15659],{"class":2055},[49,18847,2766],{"class":55},[49,18849,18850],{"class":51,"line":1409},[49,18851,1638],{"class":55},[49,18853,18854],{"class":51,"line":1421},[49,18855,14806],{"class":59},[49,18857,18858],{"class":51,"line":1704},[49,18859,18604],{"class":283},[49,18861,18862,18864],{"class":51,"line":1709},[49,18863,18609],{"class":2055},[49,18865,2068],{"class":55},[49,18867,18868],{"class":51,"line":1715},[49,18869,2122],{"class":55},[49,18871,18872,18874,18876,18879,18881],{"class":51,"line":1720},[49,18873,3543],{"class":55},[49,18875,1263],{"class":59},[49,18877,18878],{"class":328},"\"Person构造函数无参构造\"",[49,18880,1263],{"class":59},[49,18882,1285],{"class":55},[49,18884,18885],{"class":51,"line":1734},[49,18886,2279],{"class":55},[49,18888,18889,18891,18893,18895,18897],{"class":51,"line":1739},[49,18890,18609],{"class":2055},[49,18892,228],{"class":55},[49,18894,231],{"class":59},[49,18896,1490],{"class":126},[49,18898,81],{"class":55},[49,18900,18901],{"class":51,"line":1745},[49,18902,2122],{"class":55},[49,18904,18905,18908,18910],{"class":51,"line":1766},[49,18906,18907],{"class":55},"        age",[49,18909,60],{"class":59},[49,18911,6287],{"class":55},[49,18913,18914,18916,18918,18921,18923],{"class":51,"line":1771},[49,18915,3543],{"class":55},[49,18917,1263],{"class":59},[49,18919,18920],{"class":328},"\"Person构造函数有参构造\"",[49,18922,1263],{"class":59},[49,18924,1285],{"class":55},[49,18926,18927],{"class":51,"line":1785},[49,18928,2279],{"class":55},[49,18930,18931],{"class":51,"line":1790},[49,18932,18637],{"class":283},[49,18934,18935,18937],{"class":51,"line":1819},[49,18936,18642],{"class":2055},[49,18938,2068],{"class":55},[49,18940,18941],{"class":51,"line":1824},[49,18942,2122],{"class":55},[49,18944,18945,18947,18949,18952,18954],{"class":51,"line":1841},[49,18946,3543],{"class":55},[49,18948,1263],{"class":59},[49,18950,18951],{"class":328},"\"Person析构函数被调用\"",[49,18953,1263],{"class":59},[49,18955,1285],{"class":55},[49,18957,18958],{"class":51,"line":1846},[49,18959,2279],{"class":55},[49,18961,18962],{"class":51,"line":1851},[49,18963,18964],{"class":283},"    \u002F\u002F拷贝构造函数\n",[49,18966,18967,18969,18971,18973,18975,18977,18979],{"class":51,"line":1856},[49,18968,18609],{"class":2055},[49,18970,228],{"class":55},[49,18972,6882],{"class":59},[49,18974,15659],{"class":2055},[49,18976,10674],{"class":59},[49,18978,14],{"class":126},[49,18980,81],{"class":55},[49,18982,18983],{"class":51,"line":1870},[49,18984,2122],{"class":55},[49,18986,18987],{"class":51,"line":1875},[49,18988,18989],{"class":283},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[49,18991,18992,18994,18996],{"class":51,"line":2669},[49,18993,18907],{"class":55},[49,18995,60],{"class":59},[49,18997,18998],{"class":55},"p.age;\n",[49,19000,19001,19003,19005,19008,19010],{"class":51,"line":2683},[49,19002,3543],{"class":55},[49,19004,1263],{"class":59},[49,19006,19007],{"class":328},"\"Person拷贝构造函数被调用\"",[49,19009,1263],{"class":59},[49,19011,1285],{"class":55},[49,19013,19014],{"class":51,"line":2691},[49,19015,2279],{"class":55},[49,19017,19018,19020],{"class":51,"line":2696},[49,19019,2077],{"class":59},[49,19021,7887],{"class":55},[49,19023,19024],{"class":51,"line":2702},[49,19025,4087],{"class":55},[49,19027,19028],{"class":51,"line":2708},[49,19029,19030],{"class":283},"\u002F\u002F调用\n",[49,19032,19033,19035,19037],{"class":51,"line":2713},[49,19034,5454],{"class":59},[49,19036,5678],{"class":2055},[49,19038,2068],{"class":55},[49,19040,19041],{"class":51,"line":8038},[49,19042,1638],{"class":55},[49,19044,19045],{"class":51,"line":8062},[49,19046,19047],{"class":283},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[49,19049,19050],{"class":51,"line":8067},[49,19051,1657],{"class":55},[49,19053,19054,19056,19058],{"class":51,"line":8073},[49,19055,5454],{"class":59},[49,19057,5747],{"class":2055},[49,19059,2068],{"class":55},[49,19061,19062],{"class":51,"line":8100},[49,19063,1638],{"class":55},[49,19065,19066],{"class":51,"line":8105},[49,19067,19068],{"class":283},"    \u002F\u002F1.括号法\n",[49,19070,19071],{"class":51,"line":8111},[49,19072,19073],{"class":283},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[49,19075,19076],{"class":51,"line":8123},[49,19077,19078],{"class":283},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[49,19080,19081],{"class":51,"line":8135},[49,19082,19083],{"class":283},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[49,19085,19086],{"class":51,"line":8147},[49,19087,19088],{"class":283},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[49,19090,19091],{"class":51,"line":9806},[49,19092,2492],{"emptyLinePlaceholder":151},[49,19094,19095],{"class":51,"line":9831},[49,19096,19097],{"class":283},"    \u002F\u002F注意事项\n",[49,19099,19100],{"class":51,"line":9854},[49,19101,19102],{"class":283},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[49,19104,19105],{"class":51,"line":9878},[49,19106,19107],{"class":283},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[49,19109,19110],{"class":51,"line":9883},[49,19111,19112],{"class":283},"    \u002F\u002F Person p4();\n",[49,19114,19115],{"class":51,"line":9888},[49,19116,2492],{"emptyLinePlaceholder":151},[49,19118,19119],{"class":51,"line":9893},[49,19120,19121],{"class":283},"    \u002F\u002F2.显示法\n",[49,19123,19124],{"class":51,"line":9902},[49,19125,19126],{"class":55},"    Person p1;\n",[49,19128,19129,19132,19134,19137,19139,19141],{"class":51,"line":9907},[49,19130,19131],{"class":55},"    Person p2",[49,19133,60],{"class":59},[49,19135,19136],{"class":2055},"Person",[49,19138,228],{"class":55},[49,19140,95],{"class":66},[49,19142,2811],{"class":55},[49,19144,19145,19148,19150,19152],{"class":51,"line":9913},[49,19146,19147],{"class":55},"    Person p3",[49,19149,60],{"class":59},[49,19151,19136],{"class":2055},[49,19153,19154],{"class":55},"(p2);\n",[49,19156,19157],{"class":51,"line":9934},[49,19158,19159],{"class":283},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[49,19161,19162],{"class":51,"line":9940},[49,19163,2492],{"emptyLinePlaceholder":151},[49,19165,19166],{"class":51,"line":9954},[49,19167,19168],{"class":283},"    \u002F\u002F 注意事项2\n",[49,19170,19171],{"class":51,"line":9960},[49,19172,19173],{"class":283},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[49,19175,19176],{"class":51,"line":9987},[49,19177,19178],{"class":283},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[49,19180,19181],{"class":51,"line":9996},[49,19182,2492],{"emptyLinePlaceholder":151},[49,19184,19185],{"class":51,"line":10002},[49,19186,19187],{"class":283},"    \u002F\u002F3.隐士转换法\n",[49,19189,19190,19193,19195,19197,19199],{"class":51,"line":10010},[49,19191,19192],{"class":55},"    Person p4",[49,19194,60],{"class":59},[49,19196,95],{"class":66},[49,19198,280],{"class":55},[49,19200,19201],{"class":283},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[49,19203,19204,19207,19209,19212],{"class":51,"line":10015},[49,19205,19206],{"class":55},"    Person p5",[49,19208,60],{"class":59},[49,19210,19211],{"class":55},"p4;",[49,19213,19214],{"class":283}," \u002F\u002F 这里会调用拷贝构造函数\n",[49,19216,19217],{"class":51,"line":16694},[49,19218,1657],{"class":55},[49,19220,19221,19223,19225],{"class":51,"line":16700},[49,19222,231],{"class":59},[49,19224,2065],{"class":2055},[49,19226,2068],{"class":55},[49,19228,19229],{"class":51,"line":16723},[49,19230,1638],{"class":55},[49,19232,19233,19235],{"class":51,"line":16729},[49,19234,5723],{"class":2055},[49,19236,5726],{"class":55},[49,19238,19239,19241],{"class":51,"line":16752},[49,19240,5792],{"class":2055},[49,19242,5726],{"class":55},[49,19244,19245,19247,19249],{"class":51,"line":16766},[49,19246,4182],{"class":59},[49,19248,4185],{"class":66},[49,19250,1382],{"class":55},[49,19252,19253],{"class":51,"line":16786},[49,19254,1657],{"class":55},[14,19256,19257,19260],{},[373,19258,19259],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[195,19262,19264],{"id":19263},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19266,19267],{},"C++中拷贝构造函数调用时机通常有三种情况",[1226,19269,19270,19273,19276],{},[181,19271,19272],{},"使用一个已经创建完毕的对象来初始化一个新对象",[181,19274,19275],{},"值传递的方式给函数参数传值",[181,19277,19278],{},"以值方式返回局部对象",[39,19280,19282],{"className":216,"code":19281,"language":218,"meta":44,"style":44},"#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",[46,19283,19284,19290,19300,19304,19309,19313,19318,19323,19328,19334,19338,19342,19348,19352,19365,19369,19374,19386,19390,19398,19411,19415,19419,19435,19439,19448,19461,19465,19471,19475,19487,19491,19497,19501,19505,19513,19517,19530,19538,19556,19560,19565,19570,19585,19589,19602,19606,19614,19618,19622,19630,19634,19639,19648,19652,19656,19681,19691,19695,19703,19707,19718,19743,19747,19751,19755,19763,19767,19772,19777,19784,19789,19794,19799,19804,19808,19813,19817,19822,19826,19831,19836,19840,19844,19849,19854,19862],{"__ignoreMap":44},[49,19285,19286,19288],{"class":51,"line":52},[49,19287,2041],{"class":59},[49,19289,2044],{"class":328},[49,19291,19292,19294,19296,19298],{"class":51,"line":84},[49,19293,2049],{"class":59},[49,19295,2052],{"class":59},[49,19297,2056],{"class":2055},[49,19299,1382],{"class":55},[49,19301,19302],{"class":51,"line":109},[49,19303,2492],{"emptyLinePlaceholder":151},[49,19305,19306],{"class":51,"line":120},[49,19307,19308],{"class":283},"\u002F\u002F拷贝构造函数调用时机\n",[49,19310,19311],{"class":51,"line":135},[49,19312,2492],{"emptyLinePlaceholder":151},[49,19314,19315],{"class":51,"line":1306},[49,19316,19317],{"class":283},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[49,19319,19320],{"class":51,"line":1312},[49,19321,19322],{"class":283},"\u002F\u002F2.值传递的方式给函数参数传值\n",[49,19324,19325],{"class":51,"line":1403},[49,19326,19327],{"class":283},"\u002F\u002F3.以值方式返回局部对象\n",[49,19329,19330,19332],{"class":51,"line":1409},[49,19331,14784],{"class":59},[49,19333,15261],{"class":2055},[49,19335,19336],{"class":51,"line":1421},[49,19337,1638],{"class":55},[49,19339,19340],{"class":51,"line":1704},[49,19341,14806],{"class":59},[49,19343,19344,19346],{"class":51,"line":1709},[49,19345,18609],{"class":2055},[49,19347,2068],{"class":55},[49,19349,19350],{"class":51,"line":1715},[49,19351,2122],{"class":55},[49,19353,19354,19356,19358,19361,19363],{"class":51,"line":1720},[49,19355,9759],{"class":55},[49,19357,1263],{"class":59},[49,19359,19360],{"class":328}," \"Person的默认构造函数调用\"",[49,19362,1536],{"class":59},[49,19364,8930],{"class":55},[49,19366,19367],{"class":51,"line":1734},[49,19368,2279],{"class":55},[49,19370,19371],{"class":51,"line":1739},[49,19372,19373],{"class":283},"    \u002F\u002F有参构造\n",[49,19375,19376,19378,19380,19382,19384],{"class":51,"line":1745},[49,19377,18609],{"class":2055},[49,19379,228],{"class":55},[49,19381,231],{"class":59},[49,19383,15779],{"class":126},[49,19385,81],{"class":55},[49,19387,19388],{"class":51,"line":1766},[49,19389,2122],{"class":55},[49,19391,19392,19394,19396],{"class":51,"line":1771},[49,19393,15833],{"class":55},[49,19395,60],{"class":59},[49,19397,7887],{"class":55},[49,19399,19400,19402,19404,19407,19409],{"class":51,"line":1785},[49,19401,9759],{"class":55},[49,19403,1263],{"class":59},[49,19405,19406],{"class":328}," \"Person的有参构造函数调用\"",[49,19408,1536],{"class":59},[49,19410,8930],{"class":55},[49,19412,19413],{"class":51,"line":1790},[49,19414,2279],{"class":55},[49,19416,19417],{"class":51,"line":1819},[49,19418,18964],{"class":283},[49,19420,19421,19423,19425,19427,19429,19431,19433],{"class":51,"line":1824},[49,19422,18609],{"class":2055},[49,19424,228],{"class":55},[49,19426,6882],{"class":59},[49,19428,15659],{"class":2055},[49,19430,10674],{"class":59},[49,19432,14],{"class":126},[49,19434,81],{"class":55},[49,19436,19437],{"class":51,"line":1841},[49,19438,2122],{"class":55},[49,19440,19441,19443,19445],{"class":51,"line":1846},[49,19442,15833],{"class":55},[49,19444,60],{"class":59},[49,19446,19447],{"class":55}," p.m_Age;\n",[49,19449,19450,19452,19454,19457,19459],{"class":51,"line":1851},[49,19451,9759],{"class":55},[49,19453,1263],{"class":59},[49,19455,19456],{"class":328}," \"Person的拷贝构造函数调用\"",[49,19458,1536],{"class":59},[49,19460,8930],{"class":55},[49,19462,19463],{"class":51,"line":1856},[49,19464,2279],{"class":55},[49,19466,19467,19469],{"class":51,"line":1870},[49,19468,18642],{"class":2055},[49,19470,2068],{"class":55},[49,19472,19473],{"class":51,"line":1875},[49,19474,2122],{"class":55},[49,19476,19477,19479,19481,19483,19485],{"class":51,"line":2669},[49,19478,9759],{"class":55},[49,19480,1263],{"class":59},[49,19482,18657],{"class":328},[49,19484,1536],{"class":59},[49,19486,8930],{"class":55},[49,19488,19489],{"class":51,"line":2683},[49,19490,2279],{"class":55},[49,19492,19493,19495],{"class":51,"line":2691},[49,19494,2077],{"class":59},[49,19496,15756],{"class":55},[49,19498,19499],{"class":51,"line":2696},[49,19500,4087],{"class":55},[49,19502,19503],{"class":51,"line":2702},[49,19504,19317],{"class":283},[49,19506,19507,19509,19511],{"class":51,"line":2708},[49,19508,5454],{"class":59},[49,19510,5678],{"class":2055},[49,19512,2068],{"class":55},[49,19514,19515],{"class":51,"line":2713},[49,19516,1638],{"class":55},[49,19518,19519,19522,19524,19526,19528],{"class":51,"line":8038},[49,19520,19521],{"class":55},"    Person ",[49,19523,7220],{"class":2055},[49,19525,228],{"class":55},[49,19527,919],{"class":66},[49,19529,2811],{"class":55},[49,19531,19532,19534,19536],{"class":51,"line":8062},[49,19533,19521],{"class":55},[49,19535,7123],{"class":2055},[49,19537,17605],{"class":55},[49,19539,19540,19542,19544,19547,19549,19552,19554],{"class":51,"line":8067},[49,19541,1643],{"class":55},[49,19543,1263],{"class":59},[49,19545,19546],{"class":328},"\"P2的年龄为：\"",[49,19548,1263],{"class":59},[49,19550,19551],{"class":55},"p2.m_Age",[49,19553,1263],{"class":59},[49,19555,1285],{"class":55},[49,19557,19558],{"class":51,"line":8073},[49,19559,1657],{"class":55},[49,19561,19562],{"class":51,"line":8100},[49,19563,19564],{"class":283},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[49,19566,19567],{"class":51,"line":8105},[49,19568,19569],{"class":283},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[49,19571,19572,19574,19577,19579,19581,19583],{"class":51,"line":8111},[49,19573,5454],{"class":59},[49,19575,19576],{"class":2055}," doWork",[49,19578,228],{"class":55},[49,19580,19136],{"class":2055},[49,19582,6915],{"class":126},[49,19584,81],{"class":55},[49,19586,19587],{"class":51,"line":8123},[49,19588,1638],{"class":55},[49,19590,19591,19593,19595,19598,19600],{"class":51,"line":8135},[49,19592,6619],{"class":55},[49,19594,1263],{"class":59},[49,19596,19597],{"class":328}," \"doWork函数调用\"",[49,19599,1536],{"class":59},[49,19601,8930],{"class":55},[49,19603,19604],{"class":51,"line":8147},[49,19605,1657],{"class":55},[49,19607,19608,19610,19612],{"class":51,"line":9806},[49,19609,5454],{"class":59},[49,19611,5747],{"class":2055},[49,19613,2068],{"class":55},[49,19615,19616],{"class":51,"line":9831},[49,19617,1638],{"class":55},[49,19619,19620],{"class":51,"line":9854},[49,19621,15403],{"class":55},[49,19623,19624,19627],{"class":51,"line":9878},[49,19625,19626],{"class":2055},"    doWork",[49,19628,19629],{"class":55},"(p);\n",[49,19631,19632],{"class":51,"line":9883},[49,19633,1657],{"class":55},[49,19635,19636],{"class":51,"line":9888},[49,19637,19638],{"class":283},"\u002F\u002F 3.以值方式返回局部对象\n",[49,19640,19641,19643,19646],{"class":51,"line":9893},[49,19642,19136],{"class":2055},[49,19644,19645],{"class":2055}," doWork2",[49,19647,2068],{"class":55},[49,19649,19650],{"class":51,"line":9902},[49,19651,1638],{"class":55},[49,19653,19654],{"class":51,"line":9907},[49,19655,19126],{"class":55},[49,19657,19658,19660,19662,19664,19666,19668,19670,19672,19674,19676,19678],{"class":51,"line":9913},[49,19659,1643],{"class":55},[49,19661,1263],{"class":59},[49,19663,228],{"class":55},[49,19665,231],{"class":59},[49,19667,6608],{"class":59},[49,19669,649],{"class":55},[49,19671,575],{"class":59},[49,19673,7220],{"class":55},[49,19675,1263],{"class":59},[49,19677,1330],{"class":55},[49,19679,19680],{"class":283},"\u002F\u002F打印p1的地址\n",[49,19682,19683,19685,19688],{"class":51,"line":9934},[49,19684,4182],{"class":59},[49,19686,19687],{"class":55}," p1;",[49,19689,19690],{"class":283},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[49,19692,19693],{"class":51,"line":9940},[49,19694,1657],{"class":55},[49,19696,19697,19699,19701],{"class":51,"line":9954},[49,19698,5454],{"class":59},[49,19700,5819],{"class":2055},[49,19702,2068],{"class":55},[49,19704,19705],{"class":51,"line":9960},[49,19706,1638],{"class":55},[49,19708,19709,19712,19714,19716],{"class":51,"line":9987},[49,19710,19711],{"class":55},"    Person p ",[49,19713,60],{"class":59},[49,19715,19645],{"class":2055},[49,19717,5726],{"class":55},[49,19719,19720,19722,19724,19726,19728,19730,19732,19734,19736,19738,19740],{"class":51,"line":9996},[49,19721,1643],{"class":55},[49,19723,1263],{"class":59},[49,19725,228],{"class":55},[49,19727,231],{"class":59},[49,19729,6608],{"class":59},[49,19731,649],{"class":55},[49,19733,575],{"class":59},[49,19735,14],{"class":55},[49,19737,1263],{"class":59},[49,19739,1330],{"class":55},[49,19741,19742],{"class":283},"\u002F\u002F打印p的地址\n",[49,19744,19745],{"class":51,"line":10002},[49,19746,1657],{"class":55},[49,19748,19749],{"class":51,"line":10010},[49,19750,2492],{"emptyLinePlaceholder":151},[49,19752,19753],{"class":51,"line":10015},[49,19754,2492],{"emptyLinePlaceholder":151},[49,19756,19757,19759,19761],{"class":51,"line":16694},[49,19758,231],{"class":59},[49,19760,2065],{"class":2055},[49,19762,2068],{"class":55},[49,19764,19765],{"class":51,"line":16700},[49,19766,1638],{"class":55},[49,19768,19769],{"class":51,"line":16723},[49,19770,19771],{"class":283},"    \u002F\u002F test01();\n",[49,19773,19774],{"class":51,"line":16729},[49,19775,19776],{"class":283},"    \u002F\u002F test02();\n",[49,19778,19779,19782],{"class":51,"line":16752},[49,19780,19781],{"class":2055},"    test03",[49,19783,5726],{"class":55},[49,19785,19786],{"class":51,"line":16766},[49,19787,19788],{"class":283},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[49,19790,19791],{"class":51,"line":16786},[49,19792,19793],{"class":283},"\u002F\u002F 输出结果如下：\n",[49,19795,19796],{"class":51,"line":16792},[49,19797,19798],{"class":283},"\u002F\u002F Person的默认构造函数调用\n",[49,19800,19801],{"class":51,"line":16803},[49,19802,19803],{"class":283},"\u002F\u002F 0x7fffffffceec\n",[49,19805,19806],{"class":51,"line":16826},[49,19807,19803],{"class":283},[49,19809,19810],{"class":51,"line":16848},[49,19811,19812],{"class":283},"\u002F\u002F Person的析构函数调用\n",[49,19814,19815],{"class":51,"line":16853},[49,19816,2492],{"emptyLinePlaceholder":151},[49,19818,19819],{"class":51,"line":16859},[49,19820,19821],{"class":283},"\u002F\u002F 之前的输出结果如下：\n",[49,19823,19824],{"class":51,"line":16873},[49,19825,19798],{"class":283},[49,19827,19828],{"class":51,"line":16886},[49,19829,19830],{"class":283},"\u002F\u002F 地址\n",[49,19832,19833],{"class":51,"line":16891},[49,19834,19835],{"class":283},"\u002F\u002F Person的拷贝构造函数调用\n",[49,19837,19838],{"class":51,"line":16905},[49,19839,19812],{"class":283},[49,19841,19842],{"class":51,"line":16910},[49,19843,19830],{"class":283},[49,19845,19846],{"class":51,"line":16916},[49,19847,19848],{"class":283},"\u002F\u002F (这两次输出的地址也是不同的) \n",[49,19850,19851],{"class":51,"line":16921},[49,19852,19853],{"class":283},"\u002F\u002F Person的析构函数调用     \n",[49,19855,19856,19858,19860],{"class":51,"line":16935},[49,19857,4182],{"class":59},[49,19859,4185],{"class":66},[49,19861,1382],{"class":55},[49,19863,19864],{"class":51,"line":16940},[49,19865,1657],{"class":55},[14,19867,19868],{},"简化版理解",[39,19870,19872],{"className":216,"code":19871,"language":218,"meta":44,"style":44},"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",[46,19873,19874,19882,19886,19892,19905,19916,19920,19932,19945,19953,19957,19973,19986,19995,19999,20004,20010,20023,20027,20031,20038,20042,20046,20051,20059,20063,20079,20092,20105,20109,20114,20122,20126,20130,20135,20140,20156,20164,20171,20177,20181,20185,20190,20198,20202,20206,20229,20236,20240,20244,20252,20256,20266,20288,20292,20296,20300,20308,20312,20317,20322,20328,20332,20342,20346,20354],{"__ignoreMap":44},[49,19875,19876,19878,19880],{"class":51,"line":52},[49,19877,14784],{"class":59},[49,19879,15659],{"class":2055},[49,19881,15662],{"class":55},[49,19883,19884],{"class":51,"line":84},[49,19885,14806],{"class":59},[49,19887,19888,19890],{"class":51,"line":109},[49,19889,18609],{"class":2055},[49,19891,10943],{"class":55},[49,19893,19894,19896,19898,19901,19903],{"class":51,"line":120},[49,19895,9759],{"class":55},[49,19897,1263],{"class":59},[49,19899,19900],{"class":328}," \"无参构造函数!\"",[49,19902,1536],{"class":59},[49,19904,8930],{"class":55},[49,19906,19907,19910,19912,19914],{"class":51,"line":135},[49,19908,19909],{"class":55},"        mAge ",[49,19911,60],{"class":59},[49,19913,4185],{"class":66},[49,19915,1382],{"class":55},[49,19917,19918],{"class":51,"line":1306},[49,19919,2279],{"class":55},[49,19921,19922,19924,19926,19928,19930],{"class":51,"line":1312},[49,19923,18609],{"class":2055},[49,19925,228],{"class":55},[49,19927,231],{"class":59},[49,19929,15779],{"class":126},[49,19931,12532],{"class":55},[49,19933,19934,19936,19938,19941,19943],{"class":51,"line":1403},[49,19935,9759],{"class":55},[49,19937,1263],{"class":59},[49,19939,19940],{"class":328}," \"有参构造函数!\"",[49,19942,1536],{"class":59},[49,19944,8930],{"class":55},[49,19946,19947,19949,19951],{"class":51,"line":1409},[49,19948,19909],{"class":55},[49,19950,60],{"class":59},[49,19952,7887],{"class":55},[49,19954,19955],{"class":51,"line":1421},[49,19956,2279],{"class":55},[49,19958,19959,19961,19963,19965,19967,19969,19971],{"class":51,"line":1704},[49,19960,18609],{"class":2055},[49,19962,228],{"class":55},[49,19964,6882],{"class":59},[49,19966,15659],{"class":2055},[49,19968,575],{"class":59},[49,19970,6915],{"class":126},[49,19972,12532],{"class":55},[49,19974,19975,19977,19979,19982,19984],{"class":51,"line":1709},[49,19976,9759],{"class":55},[49,19978,1263],{"class":59},[49,19980,19981],{"class":328}," \"拷贝构造函数!\"",[49,19983,1536],{"class":59},[49,19985,8930],{"class":55},[49,19987,19988,19990,19992],{"class":51,"line":1715},[49,19989,19909],{"class":55},[49,19991,60],{"class":59},[49,19993,19994],{"class":55}," p.mAge;\n",[49,19996,19997],{"class":51,"line":1720},[49,19998,2279],{"class":55},[49,20000,20001],{"class":51,"line":1734},[49,20002,20003],{"class":283},"    \u002F\u002F析构函数在释放内存之前调用\n",[49,20005,20006,20008],{"class":51,"line":1739},[49,20007,18642],{"class":2055},[49,20009,10943],{"class":55},[49,20011,20012,20014,20016,20019,20021],{"class":51,"line":1745},[49,20013,9759],{"class":55},[49,20015,1263],{"class":59},[49,20017,20018],{"class":328}," \"析构函数!\"",[49,20020,1536],{"class":59},[49,20022,8930],{"class":55},[49,20024,20025],{"class":51,"line":1766},[49,20026,2279],{"class":55},[49,20028,20029],{"class":51,"line":1771},[49,20030,14806],{"class":59},[49,20032,20033,20035],{"class":51,"line":1785},[49,20034,2077],{"class":59},[49,20036,20037],{"class":55}," mAge;\n",[49,20039,20040],{"class":51,"line":1790},[49,20041,4087],{"class":55},[49,20043,20044],{"class":51,"line":1819},[49,20045,2492],{"emptyLinePlaceholder":151},[49,20047,20048],{"class":51,"line":1824},[49,20049,20050],{"class":283},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[49,20052,20053,20055,20057],{"class":51,"line":1841},[49,20054,5454],{"class":59},[49,20056,5678],{"class":2055},[49,20058,10943],{"class":55},[49,20060,20061],{"class":51,"line":1846},[49,20062,2492],{"emptyLinePlaceholder":151},[49,20064,20065,20067,20070,20072,20074,20076],{"class":51,"line":1851},[49,20066,19521],{"class":55},[49,20068,20069],{"class":2055},"man",[49,20071,228],{"class":55},[49,20073,533],{"class":66},[49,20075,6056],{"class":55},[49,20077,20078],{"class":283}," \u002F\u002Fp对象已经创建完毕\n",[49,20080,20081,20083,20086,20089],{"class":51,"line":1856},[49,20082,19521],{"class":55},[49,20084,20085],{"class":2055},"newman",[49,20087,20088],{"class":55},"(man);",[49,20090,20091],{"class":283}," \u002F\u002F调用拷贝构造函数\n",[49,20093,20094,20097,20099,20102],{"class":51,"line":1870},[49,20095,20096],{"class":55},"    Person newman2 ",[49,20098,60],{"class":59},[49,20100,20101],{"class":55}," man;",[49,20103,20104],{"class":283}," \u002F\u002F拷贝构造\n",[49,20106,20107],{"class":51,"line":1875},[49,20108,2492],{"emptyLinePlaceholder":151},[49,20110,20111],{"class":51,"line":2669},[49,20112,20113],{"class":283},"    \u002F\u002FPerson newman3;\n",[49,20115,20116,20119],{"class":51,"line":2683},[49,20117,20118],{"class":283},"    \u002F\u002Fnewman3 = man;",[49,20120,20121],{"class":283}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[49,20123,20124],{"class":51,"line":2691},[49,20125,1657],{"class":55},[49,20127,20128],{"class":51,"line":2696},[49,20129,2492],{"emptyLinePlaceholder":151},[49,20131,20132],{"class":51,"line":2702},[49,20133,20134],{"class":283},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[49,20136,20137],{"class":51,"line":2708},[49,20138,20139],{"class":283},"\u002F\u002F相当于Person p1 = p;\n",[49,20141,20142,20144,20146,20148,20150,20153],{"class":51,"line":2713},[49,20143,5454],{"class":59},[49,20145,19576],{"class":2055},[49,20147,228],{"class":55},[49,20149,19136],{"class":2055},[49,20151,20152],{"class":126}," p1",[49,20154,20155],{"class":55},") {}\n",[49,20157,20158,20160,20162],{"class":51,"line":8038},[49,20159,5454],{"class":59},[49,20161,5747],{"class":2055},[49,20163,10943],{"class":55},[49,20165,20166,20168],{"class":51,"line":8062},[49,20167,18694],{"class":55},[49,20169,20170],{"class":283}," \u002F\u002F无参构造函数\n",[49,20172,20173,20175],{"class":51,"line":8067},[49,20174,19626],{"class":2055},[49,20176,19629],{"class":55},[49,20178,20179],{"class":51,"line":8073},[49,20180,1657],{"class":55},[49,20182,20183],{"class":51,"line":8100},[49,20184,2492],{"emptyLinePlaceholder":151},[49,20186,20187],{"class":51,"line":8105},[49,20188,20189],{"class":283},"\u002F\u002F3. 以值方式返回局部对象\n",[49,20191,20192,20194,20196],{"class":51,"line":8111},[49,20193,19136],{"class":2055},[49,20195,19645],{"class":2055},[49,20197,2068],{"class":55},[49,20199,20200],{"class":51,"line":8123},[49,20201,1638],{"class":55},[49,20203,20204],{"class":51,"line":8135},[49,20205,19126],{"class":55},[49,20207,20208,20210,20212,20214,20216,20218,20220,20222,20225,20227],{"class":51,"line":8147},[49,20209,6619],{"class":55},[49,20211,1263],{"class":59},[49,20213,1750],{"class":55},[49,20215,231],{"class":59},[49,20217,6608],{"class":59},[49,20219,649],{"class":55},[49,20221,575],{"class":59},[49,20223,20224],{"class":55},"p1 ",[49,20226,1263],{"class":59},[49,20228,8930],{"class":55},[49,20230,20231,20233],{"class":51,"line":9806},[49,20232,4182],{"class":59},[49,20234,20235],{"class":55}," p1;\n",[49,20237,20238],{"class":51,"line":9831},[49,20239,1657],{"class":55},[49,20241,20242],{"class":51,"line":9854},[49,20243,2492],{"emptyLinePlaceholder":151},[49,20245,20246,20248,20250],{"class":51,"line":9878},[49,20247,5454],{"class":59},[49,20249,5819],{"class":2055},[49,20251,2068],{"class":55},[49,20253,20254],{"class":51,"line":9883},[49,20255,1638],{"class":55},[49,20257,20258,20260,20262,20264],{"class":51,"line":9888},[49,20259,19711],{"class":55},[49,20261,60],{"class":59},[49,20263,19645],{"class":2055},[49,20265,5726],{"class":55},[49,20267,20268,20270,20272,20274,20276,20278,20280,20282,20284,20286],{"class":51,"line":9893},[49,20269,6619],{"class":55},[49,20271,1263],{"class":59},[49,20273,1750],{"class":55},[49,20275,231],{"class":59},[49,20277,6608],{"class":59},[49,20279,649],{"class":55},[49,20281,575],{"class":59},[49,20283,11538],{"class":55},[49,20285,1263],{"class":59},[49,20287,8930],{"class":55},[49,20289,20290],{"class":51,"line":9902},[49,20291,1657],{"class":55},[49,20293,20294],{"class":51,"line":9907},[49,20295,2492],{"emptyLinePlaceholder":151},[49,20297,20298],{"class":51,"line":9913},[49,20299,2492],{"emptyLinePlaceholder":151},[49,20301,20302,20304,20306],{"class":51,"line":9934},[49,20303,231],{"class":59},[49,20305,2065],{"class":2055},[49,20307,10943],{"class":55},[49,20309,20310],{"class":51,"line":9940},[49,20311,2492],{"emptyLinePlaceholder":151},[49,20313,20314],{"class":51,"line":9954},[49,20315,20316],{"class":283},"    \u002F\u002Ftest01();\n",[49,20318,20319],{"class":51,"line":9960},[49,20320,20321],{"class":283},"    \u002F\u002Ftest02();\n",[49,20323,20324,20326],{"class":51,"line":9987},[49,20325,19781],{"class":2055},[49,20327,5726],{"class":55},[49,20329,20330],{"class":51,"line":9996},[49,20331,2492],{"emptyLinePlaceholder":151},[49,20333,20334,20336,20338,20340],{"class":51,"line":10002},[49,20335,2395],{"class":2055},[49,20337,228],{"class":55},[49,20339,2400],{"class":328},[49,20341,2811],{"class":55},[49,20343,20344],{"class":51,"line":10010},[49,20345,2492],{"emptyLinePlaceholder":151},[49,20347,20348,20350,20352],{"class":51,"line":10015},[49,20349,4182],{"class":59},[49,20351,4185],{"class":66},[49,20353,1382],{"class":55},[49,20355,20356],{"class":51,"line":16694},[49,20357,1657],{"class":55},[195,20359,20361],{"id":20360},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20363,20364],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20366,20367],{},"1．默认构造函数(无参，函数体为空)",[14,20369,20370],{},"2．默认析构函数(无参，函数体为空)",[14,20372,20373],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20375,20376],{},"构造函数调用规则如下：",[1226,20378,20379,20382],{},[181,20380,20381],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[181,20383,20384],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[39,20386,20388],{"className":216,"code":20387,"language":218,"meta":44,"style":44},"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",[46,20389,20390,20398,20402,20407,20413,20425,20429,20434,20446,20455,20467,20471,20475,20491,20500,20512,20516,20520,20526,20538,20542,20546,20552,20556,20560,20568,20572,20584,20589,20597,20601,20619,20623,20627,20635,20639,20644,20652,20667,20680,20684,20689,20696,20712,20725,20729,20733,20741,20745,20751,20755,20765,20769,20777],{"__ignoreMap":44},[49,20391,20392,20394,20396],{"class":51,"line":52},[49,20393,14784],{"class":59},[49,20395,15659],{"class":2055},[49,20397,15662],{"class":55},[49,20399,20400],{"class":51,"line":84},[49,20401,14806],{"class":59},[49,20403,20404],{"class":51,"line":109},[49,20405,20406],{"class":283},"    \u002F\u002F无参（默认）构造函数\n",[49,20408,20409,20411],{"class":51,"line":120},[49,20410,18609],{"class":2055},[49,20412,10943],{"class":55},[49,20414,20415,20417,20419,20421,20423],{"class":51,"line":135},[49,20416,9759],{"class":55},[49,20418,1263],{"class":59},[49,20420,19900],{"class":328},[49,20422,1536],{"class":59},[49,20424,8930],{"class":55},[49,20426,20427],{"class":51,"line":1306},[49,20428,2279],{"class":55},[49,20430,20431],{"class":51,"line":1312},[49,20432,20433],{"class":283},"    \u002F\u002F有参构造函数\n",[49,20435,20436,20438,20440,20442,20444],{"class":51,"line":1403},[49,20437,18609],{"class":2055},[49,20439,228],{"class":55},[49,20441,231],{"class":59},[49,20443,1490],{"class":126},[49,20445,12532],{"class":55},[49,20447,20448,20451,20453],{"class":51,"line":1409},[49,20449,20450],{"class":55},"        age ",[49,20452,60],{"class":59},[49,20454,1524],{"class":55},[49,20456,20457,20459,20461,20463,20465],{"class":51,"line":1421},[49,20458,9759],{"class":55},[49,20460,1263],{"class":59},[49,20462,19940],{"class":328},[49,20464,1536],{"class":59},[49,20466,8930],{"class":55},[49,20468,20469],{"class":51,"line":1704},[49,20470,2279],{"class":55},[49,20472,20473],{"class":51,"line":1709},[49,20474,18964],{"class":283},[49,20476,20477,20479,20481,20483,20485,20487,20489],{"class":51,"line":1715},[49,20478,18609],{"class":2055},[49,20480,228],{"class":55},[49,20482,6882],{"class":59},[49,20484,15659],{"class":2055},[49,20486,575],{"class":59},[49,20488,6915],{"class":126},[49,20490,12532],{"class":55},[49,20492,20493,20495,20497],{"class":51,"line":1720},[49,20494,20450],{"class":55},[49,20496,60],{"class":59},[49,20498,20499],{"class":55}," p.age;\n",[49,20501,20502,20504,20506,20508,20510],{"class":51,"line":1734},[49,20503,9759],{"class":55},[49,20505,1263],{"class":59},[49,20507,19981],{"class":328},[49,20509,1536],{"class":59},[49,20511,8930],{"class":55},[49,20513,20514],{"class":51,"line":1739},[49,20515,2279],{"class":55},[49,20517,20518],{"class":51,"line":1745},[49,20519,18637],{"class":283},[49,20521,20522,20524],{"class":51,"line":1766},[49,20523,18642],{"class":2055},[49,20525,10943],{"class":55},[49,20527,20528,20530,20532,20534,20536],{"class":51,"line":1771},[49,20529,9759],{"class":55},[49,20531,1263],{"class":59},[49,20533,20018],{"class":328},[49,20535,1536],{"class":59},[49,20537,8930],{"class":55},[49,20539,20540],{"class":51,"line":1785},[49,20541,2279],{"class":55},[49,20543,20544],{"class":51,"line":1790},[49,20545,14806],{"class":59},[49,20547,20548,20550],{"class":51,"line":1819},[49,20549,2077],{"class":59},[49,20551,7887],{"class":55},[49,20553,20554],{"class":51,"line":1824},[49,20555,4087],{"class":55},[49,20557,20558],{"class":51,"line":1841},[49,20559,2492],{"emptyLinePlaceholder":151},[49,20561,20562,20564,20566],{"class":51,"line":1846},[49,20563,5454],{"class":59},[49,20565,5678],{"class":2055},[49,20567,2068],{"class":55},[49,20569,20570],{"class":51,"line":1851},[49,20571,1638],{"class":55},[49,20573,20574,20576,20578,20580,20582],{"class":51,"line":1856},[49,20575,19521],{"class":55},[49,20577,7220],{"class":2055},[49,20579,228],{"class":55},[49,20581,869],{"class":66},[49,20583,2811],{"class":55},[49,20585,20586],{"class":51,"line":1870},[49,20587,20588],{"class":283},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[49,20590,20591,20593,20595],{"class":51,"line":1875},[49,20592,19521],{"class":55},[49,20594,7123],{"class":2055},[49,20596,17605],{"class":55},[49,20598,20599],{"class":51,"line":2669},[49,20600,2492],{"emptyLinePlaceholder":151},[49,20602,20603,20605,20607,20610,20612,20615,20617],{"class":51,"line":2683},[49,20604,6619],{"class":55},[49,20606,1263],{"class":59},[49,20608,20609],{"class":328}," \"p2的年龄为： \"",[49,20611,1536],{"class":59},[49,20613,20614],{"class":55}," p2.age ",[49,20616,1263],{"class":59},[49,20618,8930],{"class":55},[49,20620,20621],{"class":51,"line":2691},[49,20622,1657],{"class":55},[49,20624,20625],{"class":51,"line":2696},[49,20626,2492],{"emptyLinePlaceholder":151},[49,20628,20629,20631,20633],{"class":51,"line":2702},[49,20630,5454],{"class":59},[49,20632,5747],{"class":2055},[49,20634,2068],{"class":55},[49,20636,20637],{"class":51,"line":2708},[49,20638,1638],{"class":55},[49,20640,20641],{"class":51,"line":2713},[49,20642,20643],{"class":283},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[49,20645,20646,20649],{"class":51,"line":8038},[49,20647,20648],{"class":55},"    Person p1;",[49,20650,20651],{"class":283}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[49,20653,20654,20656,20658,20660,20662,20664],{"class":51,"line":8062},[49,20655,19521],{"class":55},[49,20657,7123],{"class":2055},[49,20659,228],{"class":55},[49,20661,95],{"class":66},[49,20663,6056],{"class":55},[49,20665,20666],{"class":283}," \u002F\u002F用户提供的有参\n",[49,20668,20669,20671,20674,20677],{"class":51,"line":8067},[49,20670,19521],{"class":55},[49,20672,20673],{"class":2055},"p3",[49,20675,20676],{"class":55},"(p2);",[49,20678,20679],{"class":283}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[49,20681,20682],{"class":51,"line":8073},[49,20683,2492],{"emptyLinePlaceholder":151},[49,20685,20686],{"class":51,"line":8100},[49,20687,20688],{"class":283},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[49,20690,20691,20694],{"class":51,"line":8105},[49,20692,20693],{"class":55},"    Person p4;",[49,20695,20651],{"class":283},[49,20697,20698,20700,20703,20705,20707,20709],{"class":51,"line":8111},[49,20699,19521],{"class":55},[49,20701,20702],{"class":2055},"p5",[49,20704,228],{"class":55},[49,20706,95],{"class":66},[49,20708,6056],{"class":55},[49,20710,20711],{"class":283}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[49,20713,20714,20716,20719,20722],{"class":51,"line":8123},[49,20715,19521],{"class":55},[49,20717,20718],{"class":2055},"p6",[49,20720,20721],{"class":55},"(p5);",[49,20723,20724],{"class":283}," \u002F\u002F用户自己提供拷贝构造\n",[49,20726,20727],{"class":51,"line":8135},[49,20728,1657],{"class":55},[49,20730,20731],{"class":51,"line":8147},[49,20732,2492],{"emptyLinePlaceholder":151},[49,20734,20735,20737,20739],{"class":51,"line":9806},[49,20736,231],{"class":59},[49,20738,2065],{"class":2055},[49,20740,10943],{"class":55},[49,20742,20743],{"class":51,"line":9831},[49,20744,2492],{"emptyLinePlaceholder":151},[49,20746,20747,20749],{"class":51,"line":9854},[49,20748,5723],{"class":2055},[49,20750,5726],{"class":55},[49,20752,20753],{"class":51,"line":9878},[49,20754,2492],{"emptyLinePlaceholder":151},[49,20756,20757,20759,20761,20763],{"class":51,"line":9883},[49,20758,2395],{"class":2055},[49,20760,228],{"class":55},[49,20762,2400],{"class":328},[49,20764,2811],{"class":55},[49,20766,20767],{"class":51,"line":9888},[49,20768,2492],{"emptyLinePlaceholder":151},[49,20770,20771,20773,20775],{"class":51,"line":9893},[49,20772,4182],{"class":59},[49,20774,4185],{"class":66},[49,20776,1382],{"class":55},[49,20778,20779],{"class":51,"line":9902},[49,20780,1657],{"class":55},[195,20782,20784],{"id":20783},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20786,20787],{},"浅拷贝：简单的赋值拷贝操作",[14,20789,20790],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[39,20792,20794],{"className":216,"code":20793,"language":218,"meta":44,"style":44},"#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",[46,20795,20796,20802,20812,20818,20822,20826,20831,20837,20841,20854,20858,20862,20869,20873,20883,20898,20911,20915,20920,20925,20941,20945,20958,20963,20968,20973,20982,20987,21002,21006,21010,21014,21020,21024,21029,21044,21048,21059,21073,21077,21086,21090,21096,21108,21112,21120,21124,21141,21172,21180,21208,21212,21216,21224,21228,21234],{"__ignoreMap":44},[49,20797,20798,20800],{"class":51,"line":52},[49,20799,2041],{"class":59},[49,20801,2044],{"class":328},[49,20803,20804,20806,20808,20810],{"class":51,"line":84},[49,20805,2049],{"class":59},[49,20807,2052],{"class":59},[49,20809,2056],{"class":2055},[49,20811,1382],{"class":55},[49,20813,20814,20816],{"class":51,"line":109},[49,20815,14784],{"class":59},[49,20817,15261],{"class":2055},[49,20819,20820],{"class":51,"line":120},[49,20821,1638],{"class":55},[49,20823,20824],{"class":51,"line":135},[49,20825,14806],{"class":59},[49,20827,20828],{"class":51,"line":1306},[49,20829,20830],{"class":283},"    \u002F\u002F默认构造函数\n",[49,20832,20833,20835],{"class":51,"line":1312},[49,20834,18609],{"class":2055},[49,20836,2068],{"class":55},[49,20838,20839],{"class":51,"line":1403},[49,20840,2122],{"class":55},[49,20842,20843,20845,20847,20850,20852],{"class":51,"line":1409},[49,20844,3543],{"class":55},[49,20846,1263],{"class":59},[49,20848,20849],{"class":328},"\"默认构造函数\"",[49,20851,1263],{"class":59},[49,20853,1285],{"class":55},[49,20855,20856],{"class":51,"line":1421},[49,20857,2279],{"class":55},[49,20859,20860],{"class":51,"line":1704},[49,20861,20433],{"class":283},[49,20863,20864,20866],{"class":51,"line":1709},[49,20865,18642],{"class":2055},[49,20867,20868],{"class":55},"(int age,int height)\n",[49,20870,20871],{"class":51,"line":1715},[49,20872,2122],{"class":55},[49,20874,20875,20878,20880],{"class":51,"line":1720},[49,20876,20877],{"class":55},"        m_Age",[49,20879,60],{"class":59},[49,20881,20882],{"class":55},"age;\n",[49,20884,20885,20888,20890,20892,20895],{"class":51,"line":1734},[49,20886,20887],{"class":55},"        m_Height",[49,20889,11807],{"class":59},[49,20891,2474],{"class":59},[49,20893,20894],{"class":55},"(height);",[49,20896,20897],{"class":283},"\u002F\u002F放到堆区\n",[49,20899,20900,20902,20904,20907,20909],{"class":51,"line":1739},[49,20901,3543],{"class":55},[49,20903,1263],{"class":59},[49,20905,20906],{"class":328},"\"有参构造函数\"",[49,20908,1263],{"class":59},[49,20910,1285],{"class":55},[49,20912,20913],{"class":51,"line":1745},[49,20914,2279],{"class":55},[49,20916,20917],{"class":51,"line":1766},[49,20918,20919],{"class":283},"    \u002F\u002F深拷贝解决上述问题\n",[49,20921,20922],{"class":51,"line":1771},[49,20923,20924],{"class":283},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[49,20926,20927,20929,20931,20933,20935,20937,20939],{"class":51,"line":1785},[49,20928,18609],{"class":2055},[49,20930,228],{"class":55},[49,20932,6882],{"class":59},[49,20934,15659],{"class":2055},[49,20936,10674],{"class":59},[49,20938,14],{"class":126},[49,20940,81],{"class":55},[49,20942,20943],{"class":51,"line":1790},[49,20944,2122],{"class":55},[49,20946,20947,20949,20951,20954,20956],{"class":51,"line":1819},[49,20948,3543],{"class":55},[49,20950,1263],{"class":59},[49,20952,20953],{"class":328},"\"拷贝构造函数\"",[49,20955,1263],{"class":59},[49,20957,1285],{"class":55},[49,20959,20960],{"class":51,"line":1824},[49,20961,20962],{"class":283},"        \u002F\u002F编译器默认的写如下注释部分\n",[49,20964,20965],{"class":51,"line":1841},[49,20966,20967],{"class":283},"        \u002F\u002Fm_Age=p.m_Age;\n",[49,20969,20970],{"class":51,"line":1846},[49,20971,20972],{"class":283},"        \u002F\u002Fm_Height=p.m_Height;\n",[49,20974,20975,20977,20979],{"class":51,"line":1851},[49,20976,20877],{"class":55},[49,20978,60],{"class":59},[49,20980,20981],{"class":55},"p.m_Age;\n",[49,20983,20984],{"class":51,"line":1856},[49,20985,20986],{"class":283},"        \u002F\u002F深拷贝操作\n",[49,20988,20989,20991,20993,20995,20997,20999],{"class":51,"line":1870},[49,20990,20887],{"class":55},[49,20992,11807],{"class":59},[49,20994,2474],{"class":59},[49,20996,228],{"class":55},[49,20998,674],{"class":59},[49,21000,21001],{"class":55},"p.m_Height);\n",[49,21003,21004],{"class":51,"line":1875},[49,21005,2279],{"class":55},[49,21007,21008],{"class":51,"line":2669},[49,21009,2492],{"emptyLinePlaceholder":151},[49,21011,21012],{"class":51,"line":2683},[49,21013,18637],{"class":283},[49,21015,21016,21018],{"class":51,"line":2691},[49,21017,18642],{"class":2055},[49,21019,2068],{"class":55},[49,21021,21022],{"class":51,"line":2696},[49,21023,2122],{"class":55},[49,21025,21026],{"class":51,"line":2702},[49,21027,21028],{"class":283},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[49,21030,21031,21033,21036,21039,21042],{"class":51,"line":2708},[49,21032,2589],{"class":59},[49,21034,21035],{"class":55},"(m_Height ",[49,21037,21038],{"class":59},"!=",[49,21040,21041],{"class":66}," NULL",[49,21043,81],{"class":55},[49,21045,21046],{"class":51,"line":2713},[49,21047,2602],{"class":55},[49,21049,21050,21053,21056],{"class":51,"line":8038},[49,21051,21052],{"class":59},"            delete",[49,21054,21055],{"class":55}," m_Height;",[49,21057,21058],{"class":283}," \u002F\u002F释放堆区内存\n",[49,21060,21061,21064,21066,21068,21070],{"class":51,"line":8062},[49,21062,21063],{"class":55},"            m_Height",[49,21065,60],{"class":59},[49,21067,2484],{"class":66},[49,21069,280],{"class":55},[49,21071,21072],{"class":283}," \u002F\u002F防止野指针\n",[49,21074,21075],{"class":51,"line":8067},[49,21076,2621],{"class":55},[49,21078,21079,21081,21083],{"class":51,"line":8073},[49,21080,3543],{"class":55},[49,21082,1263],{"class":59},[49,21084,21085],{"class":328},"\"Person的析构函数调用\"\n",[49,21087,21088],{"class":51,"line":8100},[49,21089,2279],{"class":55},[49,21091,21092,21094],{"class":51,"line":8105},[49,21093,2077],{"class":59},[49,21095,15756],{"class":55},[49,21097,21098,21100,21102,21105],{"class":51,"line":8111},[49,21099,2077],{"class":59},[49,21101,6608],{"class":59},[49,21103,21104],{"class":55},"m_Height;",[49,21106,21107],{"class":283}," \u002F\u002F定义一个指针，指向身高\n",[49,21109,21110],{"class":51,"line":8123},[49,21111,4087],{"class":55},[49,21113,21114,21116,21118],{"class":51,"line":8135},[49,21115,5454],{"class":59},[49,21117,5678],{"class":2055},[49,21119,2068],{"class":55},[49,21121,21122],{"class":51,"line":8147},[49,21123,1638],{"class":55},[49,21125,21126,21128,21130,21132,21134,21136,21139],{"class":51,"line":9806},[49,21127,19521],{"class":55},[49,21129,7220],{"class":2055},[49,21131,228],{"class":55},[49,21133,869],{"class":66},[49,21135,76],{"class":55},[49,21137,21138],{"class":66},"160",[49,21140,2811],{"class":55},[49,21142,21143,21145,21147,21150,21152,21155,21157,21160,21162,21165,21167,21169],{"class":51,"line":9831},[49,21144,1643],{"class":55},[49,21146,1263],{"class":59},[49,21148,21149],{"class":328},"\"p1的年龄为:\"",[49,21151,1263],{"class":59},[49,21153,21154],{"class":55},"p1.m_Age",[49,21156,1263],{"class":59},[49,21158,21159],{"class":328},"\"身高为：\"",[49,21161,6509],{"class":59},[49,21163,21164],{"class":55},"p1.m_Height",[49,21166,1263],{"class":59},[49,21168,1330],{"class":55},[49,21170,21171],{"class":283},"  \u002F\u002F18\n",[49,21173,21174,21176,21178],{"class":51,"line":9854},[49,21175,19521],{"class":55},[49,21177,7123],{"class":2055},[49,21179,17605],{"class":55},[49,21181,21182,21184,21186,21189,21191,21193,21195,21197,21199,21202,21204,21206],{"class":51,"line":9878},[49,21183,1643],{"class":55},[49,21185,1263],{"class":59},[49,21187,21188],{"class":328},"\"p2的年龄为：\"",[49,21190,1263],{"class":59},[49,21192,19551],{"class":55},[49,21194,1263],{"class":59},[49,21196,21159],{"class":328},[49,21198,6509],{"class":59},[49,21200,21201],{"class":55},"p2.m_Height",[49,21203,1263],{"class":59},[49,21205,1330],{"class":55},[49,21207,21171],{"class":283},[49,21209,21210],{"class":51,"line":9883},[49,21211,13300],{"class":55},[49,21213,21214],{"class":51,"line":9888},[49,21215,1657],{"class":55},[49,21217,21218,21220,21222],{"class":51,"line":9893},[49,21219,231],{"class":59},[49,21221,2065],{"class":2055},[49,21223,2068],{"class":55},[49,21225,21226],{"class":51,"line":9902},[49,21227,1638],{"class":55},[49,21229,21230,21232],{"class":51,"line":9907},[49,21231,5723],{"class":2055},[49,21233,5726],{"class":55},[49,21235,21236],{"class":51,"line":9913},[49,21237,1657],{"class":55},[14,21239,21240],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21242,21243],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21245,21246],{},[1554,21247],{"alt":44,"src":21248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21250,21251],{},"浅拷贝问题要使用深拷贝来解决",[14,21253,21254],{},[1554,21255],{"alt":44,"src":21256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21258,21259],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[195,21261,21263],{"id":21262},"_826初始化列表","8.2.6初始化列表",[14,21265,21266],{},"作用：初始化属性",[14,21268,5272],{},[39,21270,21273],{"className":21271,"code":21272,"language":5278},[5276],"构造函数():属性1(值1),属性2(值2).....{}\n",[46,21274,21272],{"__ignoreMap":44},[14,21276,21277],{},"例子",[39,21279,21281],{"className":216,"code":21280,"language":218,"meta":44,"style":44},"#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",[46,21282,21283,21289,21299,21305,21309,21314,21318,21323,21328,21333,21338,21343,21348,21352,21357,21362,21405,21414,21432,21450,21468,21472,21476,21483,21490,21497,21501,21505,21513,21517,21521,21541,21550,21554,21558,21568,21572,21580],{"__ignoreMap":44},[49,21284,21285,21287],{"class":51,"line":52},[49,21286,2041],{"class":59},[49,21288,2044],{"class":328},[49,21290,21291,21293,21295,21297],{"class":51,"line":84},[49,21292,2049],{"class":59},[49,21294,2052],{"class":59},[49,21296,2056],{"class":2055},[49,21298,1382],{"class":55},[49,21300,21301,21303],{"class":51,"line":109},[49,21302,14784],{"class":59},[49,21304,15261],{"class":2055},[49,21306,21307],{"class":51,"line":120},[49,21308,1638],{"class":55},[49,21310,21311],{"class":51,"line":135},[49,21312,21313],{"class":59},"    public:\n",[49,21315,21316],{"class":51,"line":1306},[49,21317,2492],{"emptyLinePlaceholder":151},[49,21319,21320],{"class":51,"line":1312},[49,21321,21322],{"class":283},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[49,21324,21325],{"class":51,"line":1403},[49,21326,21327],{"class":283},"    \u002F\u002FPerson(int a, int b, int c) {\n",[49,21329,21330],{"class":51,"line":1409},[49,21331,21332],{"class":283},"    \u002F\u002F  m_A = a;\n",[49,21334,21335],{"class":51,"line":1421},[49,21336,21337],{"class":283},"    \u002F\u002F  m_B = b;\n",[49,21339,21340],{"class":51,"line":1704},[49,21341,21342],{"class":283},"    \u002F\u002F  m_C = c;\n",[49,21344,21345],{"class":51,"line":1709},[49,21346,21347],{"class":283},"    \u002F\u002F}\n",[49,21349,21350],{"class":51,"line":1715},[49,21351,2492],{"emptyLinePlaceholder":151},[49,21353,21354],{"class":51,"line":1720},[49,21355,21356],{"class":283},"    \u002F\u002F初始化列表方式初始化\n",[49,21358,21359],{"class":51,"line":1734},[49,21360,21361],{"class":283},"    \u002F\u002F使用有参构造函数\n",[49,21363,21364,21366,21368,21370,21372,21374,21376,21378,21380,21382,21384,21387,21390,21393,21396,21399,21402],{"class":51,"line":1739},[49,21365,18609],{"class":2055},[49,21367,228],{"class":55},[49,21369,231],{"class":59},[49,21371,1490],{"class":126},[49,21373,12525],{"class":55},[49,21375,231],{"class":59},[49,21377,2925],{"class":126},[49,21379,12525],{"class":55},[49,21381,231],{"class":59},[49,21383,2941],{"class":126},[49,21385,21386],{"class":55},") :",[49,21388,21389],{"class":2055},"m_A",[49,21391,21392],{"class":55},"(a), ",[49,21394,21395],{"class":2055},"m_B",[49,21397,21398],{"class":55},"(b), ",[49,21400,21401],{"class":2055},"m_C",[49,21403,21404],{"class":55},"(c) {}\n",[49,21406,21407,21409,21412],{"class":51,"line":1745},[49,21408,14999],{"class":59},[49,21410,21411],{"class":2055}," PrintPerson",[49,21413,10943],{"class":55},[49,21415,21416,21418,21420,21423,21425,21428,21430],{"class":51,"line":1766},[49,21417,9759],{"class":55},[49,21419,1263],{"class":59},[49,21421,21422],{"class":328}," \"mA:\"",[49,21424,1536],{"class":59},[49,21426,21427],{"class":55}," m_A ",[49,21429,1263],{"class":59},[49,21431,8930],{"class":55},[49,21433,21434,21436,21438,21441,21443,21446,21448],{"class":51,"line":1771},[49,21435,9759],{"class":55},[49,21437,1263],{"class":59},[49,21439,21440],{"class":328}," \"mB:\"",[49,21442,1536],{"class":59},[49,21444,21445],{"class":55}," m_B ",[49,21447,1263],{"class":59},[49,21449,8930],{"class":55},[49,21451,21452,21454,21456,21459,21461,21464,21466],{"class":51,"line":1785},[49,21453,9759],{"class":55},[49,21455,1263],{"class":59},[49,21457,21458],{"class":328}," \"mC:\"",[49,21460,1536],{"class":59},[49,21462,21463],{"class":55}," m_C ",[49,21465,1263],{"class":59},[49,21467,8930],{"class":55},[49,21469,21470],{"class":51,"line":1790},[49,21471,2279],{"class":55},[49,21473,21474],{"class":51,"line":1819},[49,21475,15312],{"class":59},[49,21477,21478,21480],{"class":51,"line":1824},[49,21479,2077],{"class":59},[49,21481,21482],{"class":55}," m_A;\n",[49,21484,21485,21487],{"class":51,"line":1841},[49,21486,2077],{"class":59},[49,21488,21489],{"class":55}," m_B;\n",[49,21491,21492,21494],{"class":51,"line":1846},[49,21493,2077],{"class":59},[49,21495,21496],{"class":55}," m_C;\n",[49,21498,21499],{"class":51,"line":1851},[49,21500,4087],{"class":55},[49,21502,21503],{"class":51,"line":1856},[49,21504,2492],{"emptyLinePlaceholder":151},[49,21506,21507,21509,21511],{"class":51,"line":1870},[49,21508,231],{"class":59},[49,21510,2065],{"class":2055},[49,21512,6068],{"class":55},[49,21514,21515],{"class":51,"line":1875},[49,21516,1638],{"class":55},[49,21518,21519],{"class":51,"line":2669},[49,21520,2492],{"emptyLinePlaceholder":151},[49,21522,21523,21525,21527,21529,21531,21533,21535,21537,21539],{"class":51,"line":2683},[49,21524,19521],{"class":55},[49,21526,14],{"class":2055},[49,21528,228],{"class":55},[49,21530,441],{"class":66},[49,21532,12525],{"class":55},[49,21534,301],{"class":66},[49,21536,12525],{"class":55},[49,21538,73],{"class":66},[49,21540,2811],{"class":55},[49,21542,21543,21545,21548],{"class":51,"line":2691},[49,21544,15956],{"class":55},[49,21546,21547],{"class":2055},"PrintPerson",[49,21549,5726],{"class":55},[49,21551,21552],{"class":51,"line":2696},[49,21553,2492],{"emptyLinePlaceholder":151},[49,21555,21556],{"class":51,"line":2702},[49,21557,2492],{"emptyLinePlaceholder":151},[49,21559,21560,21562,21564,21566],{"class":51,"line":2708},[49,21561,2395],{"class":2055},[49,21563,228],{"class":55},[49,21565,2400],{"class":328},[49,21567,2811],{"class":55},[49,21569,21570],{"class":51,"line":2713},[49,21571,2492],{"emptyLinePlaceholder":151},[49,21573,21574,21576,21578],{"class":51,"line":8038},[49,21575,4182],{"class":59},[49,21577,4185],{"class":66},[49,21579,1382],{"class":55},[49,21581,21582],{"class":51,"line":8062},[49,21583,1657],{"class":55},[14,21585,21586,21587,21590,21591],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[373,21588,21589],{},"参数名就是定义的对象属性","，",[373,21592,21593],{},"属性后面的值为有参构造函数的形参",[39,21595,21597],{"className":216,"code":21596,"language":218,"meta":44,"style":44},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[46,21598,21599],{"__ignoreMap":44},[49,21600,21601,21603,21605,21607,21610,21612,21615,21617,21620,21622,21625,21627,21630,21632],{"class":51,"line":52},[49,21602,19136],{"class":2055},[49,21604,228],{"class":55},[49,21606,231],{"class":59},[49,21608,21609],{"class":55}," a.",[49,21611,231],{"class":59},[49,21613,21614],{"class":55}," b,",[49,21616,231],{"class":59},[49,21618,21619],{"class":55}," b):",[49,21621,21389],{"class":2055},[49,21623,21624],{"class":55},"(a),",[49,21626,21395],{"class":2055},[49,21628,21629],{"class":55},"(c),",[49,21631,21401],{"class":2055},[49,21633,21634],{"class":55},"(b) {}\n",[195,21636,21638],{"id":21637},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21640,21641],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21643,14723],{},[39,21645,21647],{"className":216,"code":21646,"language":218,"meta":44,"style":44},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[46,21648,21649,21654,21659,21663,21668,21672],{"__ignoreMap":44},[49,21650,21651],{"class":51,"line":52},[49,21652,21653],{"class":55},"A{};\n",[49,21655,21656],{"class":51,"line":84},[49,21657,21658],{"class":55},"B\n",[49,21660,21661],{"class":51,"line":109},[49,21662,1638],{"class":55},[49,21664,21665],{"class":51,"line":120},[49,21666,21667],{"class":55},"    A a;\n",[49,21669,21670],{"class":51,"line":135},[49,21671,1657],{"class":55},[49,21673,21674],{"class":51,"line":1306},[49,21675,21676],{"class":283},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21678,21679],{},"案例",[39,21681,21683],{"className":216,"code":21682,"language":218,"meta":44,"style":44},"\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",[46,21684,21685,21690,21697,21701,21706,21711,21725,21729,21739,21750,21754,21761,21765,21778,21782,21787,21792,21796,21802,21806,21810,21814,21845,21849,21860,21864,21870,21874,21887,21891,21895,21899,21904,21909,21913,21921,21925,21942,21961,21965,21973,21977,21983],{"__ignoreMap":44},[49,21686,21687],{"class":51,"line":52},[49,21688,21689],{"class":283},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[49,21691,21692,21694],{"class":51,"line":84},[49,21693,14784],{"class":59},[49,21695,21696],{"class":2055}," Phone\n",[49,21698,21699],{"class":51,"line":109},[49,21700,1638],{"class":55},[49,21702,21703],{"class":51,"line":120},[49,21704,21705],{"class":55},"public：\n",[49,21707,21708],{"class":51,"line":135},[49,21709,21710],{"class":283},"    \u002F\u002F 赋值(构造函数)\n",[49,21712,21713,21716,21718,21720,21723],{"class":51,"line":1306},[49,21714,21715],{"class":2055},"    Phone",[49,21717,228],{"class":55},[49,21719,15007],{"class":2055},[49,21721,21722],{"class":126}," pName",[49,21724,81],{"class":55},[49,21726,21727],{"class":51,"line":1312},[49,21728,2122],{"class":55},[49,21730,21731,21734,21736],{"class":51,"line":1403},[49,21732,21733],{"class":55},"        m_pName",[49,21735,60],{"class":59},[49,21737,21738],{"class":55},"pName;\n",[49,21740,21741,21743,21745,21748],{"class":51,"line":1409},[49,21742,3543],{"class":55},[49,21744,1263],{"class":59},[49,21746,21747],{"class":328},"\"Phone的构造函数调用\"",[49,21749,1382],{"class":55},[49,21751,21752],{"class":51,"line":1421},[49,21753,2279],{"class":55},[49,21755,21756,21759],{"class":51,"line":1704},[49,21757,21758],{"class":2055},"    ~Phone",[49,21760,2068],{"class":55},[49,21762,21763],{"class":51,"line":1709},[49,21764,2122],{"class":55},[49,21766,21767,21769,21771,21774,21776],{"class":51,"line":1715},[49,21768,3543],{"class":55},[49,21770,1263],{"class":59},[49,21772,21773],{"class":328},"\"Phone析构函数调用\"",[49,21775,1263],{"class":59},[49,21777,1285],{"class":55},[49,21779,21780],{"class":51,"line":1720},[49,21781,2279],{"class":55},[49,21783,21784],{"class":51,"line":1734},[49,21785,21786],{"class":283},"    \u002F\u002F\n",[49,21788,21789],{"class":51,"line":1739},[49,21790,21791],{"class":55},"    string m_PName;\n",[49,21793,21794],{"class":51,"line":1745},[49,21795,4087],{"class":55},[49,21797,21798,21800],{"class":51,"line":1766},[49,21799,14784],{"class":59},[49,21801,15261],{"class":2055},[49,21803,21804],{"class":51,"line":1771},[49,21805,1638],{"class":55},[49,21807,21808],{"class":51,"line":1785},[49,21809,14806],{"class":59},[49,21811,21812],{"class":51,"line":1790},[49,21813,17084],{"class":283},[49,21815,21816,21818,21820,21822,21824,21826,21828,21831,21834,21836,21839,21842],{"class":51,"line":1819},[49,21817,18609],{"class":2055},[49,21819,228],{"class":55},[49,21821,15007],{"class":2055},[49,21823,15010],{"class":126},[49,21825,76],{"class":55},[49,21827,15007],{"class":2055},[49,21829,21830],{"class":126}," pname",[49,21832,21833],{"class":55},"):",[49,21835,15100],{"class":2055},[49,21837,21838],{"class":55},"(name),m_phone.",[49,21840,21841],{"class":2055},"m_PName",[49,21843,21844],{"class":55},"(pname) \n",[49,21846,21847],{"class":51,"line":1824},[49,21848,2122],{"class":55},[49,21850,21851,21853,21855,21858],{"class":51,"line":1841},[49,21852,3543],{"class":55},[49,21854,1263],{"class":59},[49,21856,21857],{"class":328},"\"Person的构造函数调用\"",[49,21859,1382],{"class":55},[49,21861,21862],{"class":51,"line":1846},[49,21863,2279],{"class":55},[49,21865,21866,21868],{"class":51,"line":1851},[49,21867,18642],{"class":2055},[49,21869,2068],{"class":55},[49,21871,21872],{"class":51,"line":1856},[49,21873,2122],{"class":55},[49,21875,21876,21878,21880,21883,21885],{"class":51,"line":1870},[49,21877,3543],{"class":55},[49,21879,1263],{"class":59},[49,21881,21882],{"class":328},"\"Person析构函数调用\"",[49,21884,1263],{"class":59},[49,21886,1285],{"class":55},[49,21888,21889],{"class":51,"line":1875},[49,21890,2279],{"class":55},[49,21892,21893],{"class":51,"line":2669},[49,21894,7870],{"class":283},[49,21896,21897],{"class":51,"line":2683},[49,21898,14982],{"class":55},[49,21900,21901],{"class":51,"line":2691},[49,21902,21903],{"class":283},"    \u002F\u002F手机\n",[49,21905,21906],{"class":51,"line":2696},[49,21907,21908],{"class":55},"    Phone m_Phone;\n",[49,21910,21911],{"class":51,"line":2702},[49,21912,4087],{"class":55},[49,21914,21915,21917,21919],{"class":51,"line":2708},[49,21916,5454],{"class":59},[49,21918,5678],{"class":2055},[49,21920,2068],{"class":55},[49,21922,21923],{"class":51,"line":2713},[49,21924,1638],{"class":55},[49,21926,21927,21929,21931,21933,21935,21937,21940],{"class":51,"line":8038},[49,21928,19521],{"class":55},[49,21930,14],{"class":2055},[49,21932,228],{"class":55},[49,21934,8006],{"class":328},[49,21936,76],{"class":55},[49,21938,21939],{"class":328},"\"安卓\"",[49,21941,2811],{"class":55},[49,21943,21944,21946,21948,21951,21953,21956,21958],{"class":51,"line":8062},[49,21945,1643],{"class":55},[49,21947,1263],{"class":59},[49,21949,21950],{"class":55},"p.Name",[49,21952,1263],{"class":59},[49,21954,21955],{"class":328},"\"拿着：\"",[49,21957,1263],{"class":59},[49,21959,21960],{"class":55},"p.m_phone.m_PName;\n",[49,21962,21963],{"class":51,"line":8067},[49,21964,1657],{"class":55},[49,21966,21967,21969,21971],{"class":51,"line":8073},[49,21968,231],{"class":59},[49,21970,2065],{"class":2055},[49,21972,2068],{"class":55},[49,21974,21975],{"class":51,"line":8100},[49,21976,1638],{"class":55},[49,21978,21979,21981],{"class":51,"line":8105},[49,21980,5723],{"class":2055},[49,21982,5726],{"class":55},[49,21984,21985],{"class":51,"line":8111},[49,21986,1657],{"class":55},[14,21988,9115],{},[39,21990,21992],{"className":216,"code":21991,"language":218,"meta":44,"style":44},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[46,21993,21994,21999],{"__ignoreMap":44},[49,21995,21996],{"class":51,"line":52},[49,21997,21998],{"class":283},"    \u002F\u002F不需要写这个：\n",[49,22000,22001],{"class":51,"line":84},[49,22002,22003],{"class":283},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22005,22006],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[39,22008,22010],{"className":216,"code":22009,"language":218,"meta":44,"style":44},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[46,22011,22012],{"__ignoreMap":44},[49,22013,22014,22016,22019,22021,22024,22027],{"class":51,"line":52},[49,22015,19136],{"class":2055},[49,22017,22018],{"class":55},"(string name.string pname):",[49,22020,15100],{"class":2055},[49,22022,22023],{"class":55},"(name),",[49,22025,22026],{"class":2055},"m_phone",[49,22028,22029],{"class":55},"(pname) {}\n",[14,22031,22032,22033,60,22036],{},"采用的是隐式转换法，实际为如下：\n",[46,22034,22035],{},"m_phone(pname)",[46,22037,22038],{},"Phone m_phone=pname",[14,22040,22041,22044],{},[373,22042,22043],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22046,22047],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[195,22049,22051],{"id":22050},"_828静态对象","8.2.8静态对象",[14,22053,22054],{},"静态对象在成员对象前static，称为静态对象",[14,22056,22057],{},"静态对象分为两类：",[178,22059,22060],{},[181,22061,22062],{},"静态成员变量",[1226,22064,22065,22068,22071],{},[181,22066,22067],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[181,22069,22070],{},"②在编译阶段分配内存",[181,22072,22073],{},"③类内声明，类外初始化",[178,22075,22076],{"start":84},[181,22077,22078],{},"静态成员函数",[1226,22080,22081,22084],{},[181,22082,22083],{},"①所有对象共享同一个函数",[181,22085,22086],{},"②静态成员函数只能访问静态成员变量",[22088,22089,22091],"h4",{"id":22090},"_8281静态成员变量","8.2.8.1静态成员变量",[39,22093,22095],{"className":216,"code":22094,"language":218,"meta":44,"style":44},"#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",[46,22096,22097,22103,22113,22119,22123,22127,22132,22137,22142,22150,22154,22158,22162,22170,22174,22178,22183,22196,22200,22208,22212,22218],{"__ignoreMap":44},[49,22098,22099,22101],{"class":51,"line":52},[49,22100,2041],{"class":59},[49,22102,2044],{"class":328},[49,22104,22105,22107,22109,22111],{"class":51,"line":84},[49,22106,2049],{"class":59},[49,22108,2052],{"class":59},[49,22110,2056],{"class":2055},[49,22112,1382],{"class":55},[49,22114,22115,22117],{"class":51,"line":109},[49,22116,14784],{"class":59},[49,22118,15261],{"class":2055},[49,22120,22121],{"class":51,"line":120},[49,22122,1638],{"class":55},[49,22124,22125],{"class":51,"line":135},[49,22126,14806],{"class":59},[49,22128,22129],{"class":51,"line":1306},[49,22130,22131],{"class":283},"    \u002F\u002F非静态成员变量\n",[49,22133,22134],{"class":51,"line":1312},[49,22135,22136],{"class":283},"    \u002F\u002F int m_A;\n",[49,22138,22139],{"class":51,"line":1403},[49,22140,22141],{"class":283},"    \u002F\u002F定义静态成员变量\n",[49,22143,22144,22146,22148],{"class":51,"line":1409},[49,22145,11110],{"class":59},[49,22147,2474],{"class":59},[49,22149,21482],{"class":55},[49,22151,22152],{"class":51,"line":1421},[49,22153,2492],{"emptyLinePlaceholder":151},[49,22155,22156],{"class":51,"line":1704},[49,22157,2492],{"emptyLinePlaceholder":151},[49,22159,22160],{"class":51,"line":1709},[49,22161,4087],{"class":55},[49,22163,22164,22166,22168],{"class":51,"line":1715},[49,22165,5454],{"class":59},[49,22167,5678],{"class":2055},[49,22169,2068],{"class":55},[49,22171,22172],{"class":51,"line":1720},[49,22173,1638],{"class":55},[49,22175,22176],{"class":51,"line":1734},[49,22177,15403],{"class":55},[49,22179,22180],{"class":51,"line":1739},[49,22181,22182],{"class":283},"    \u002F\u002F输出类成员变量这块内存\n",[49,22184,22185,22187,22189,22192,22194],{"class":51,"line":1745},[49,22186,1643],{"class":55},[49,22188,1263],{"class":59},[49,22190,22191],{"class":55},"p.m_A",[49,22193,1263],{"class":59},[49,22195,1285],{"class":55},[49,22197,22198],{"class":51,"line":1766},[49,22199,1657],{"class":55},[49,22201,22202,22204,22206],{"class":51,"line":1771},[49,22203,231],{"class":59},[49,22205,2065],{"class":2055},[49,22207,2068],{"class":55},[49,22209,22210],{"class":51,"line":1785},[49,22211,1638],{"class":55},[49,22213,22214,22216],{"class":51,"line":1790},[49,22215,5723],{"class":2055},[49,22217,2068],{"class":55},[49,22219,22220],{"class":51,"line":1819},[49,22221,1657],{"class":55},[14,22223,22224],{},"此时输出是报错的：无法解析外部命令",[14,22226,22227],{},"解决这一问题：必须用到类内声明，类外初始化操作",[39,22229,22231],{"className":216,"code":22230,"language":218,"meta":44,"style":44},"#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",[46,22232,22233,22239,22249,22255,22259,22263,22268,22276,22280,22285,22300,22308,22312,22316,22321,22326,22338,22343,22354,22359,22364,22377,22381,22389,22393,22399],{"__ignoreMap":44},[49,22234,22235,22237],{"class":51,"line":52},[49,22236,2041],{"class":59},[49,22238,2044],{"class":328},[49,22240,22241,22243,22245,22247],{"class":51,"line":84},[49,22242,2049],{"class":59},[49,22244,2052],{"class":59},[49,22246,2056],{"class":2055},[49,22248,1382],{"class":55},[49,22250,22251,22253],{"class":51,"line":109},[49,22252,14784],{"class":59},[49,22254,15261],{"class":2055},[49,22256,22257],{"class":51,"line":120},[49,22258,1638],{"class":55},[49,22260,22261],{"class":51,"line":135},[49,22262,14806],{"class":59},[49,22264,22265],{"class":51,"line":1306},[49,22266,22267],{"class":283},"    \u002F\u002F类内声明\n",[49,22269,22270,22272,22274],{"class":51,"line":1312},[49,22271,11110],{"class":59},[49,22273,2474],{"class":59},[49,22275,21482],{"class":55},[49,22277,22278],{"class":51,"line":1403},[49,22279,4087],{"class":55},[49,22281,22282],{"class":51,"line":1409},[49,22283,22284],{"class":283},"\u002F\u002F类外初始化\n",[49,22286,22287,22289,22291,22294,22296,22298],{"class":51,"line":1421},[49,22288,231],{"class":59},[49,22290,15659],{"class":2055},[49,22292,22293],{"class":55},"::m_A",[49,22295,60],{"class":59},[49,22297,95],{"class":66},[49,22299,1382],{"class":55},[49,22301,22302,22304,22306],{"class":51,"line":1704},[49,22303,5454],{"class":59},[49,22305,5678],{"class":2055},[49,22307,2068],{"class":55},[49,22309,22310],{"class":51,"line":1709},[49,22311,1638],{"class":55},[49,22313,22314],{"class":51,"line":1715},[49,22315,15403],{"class":55},[49,22317,22318],{"class":51,"line":1720},[49,22319,22320],{"class":283},"    \u002F\u002F访问变量的原内存空间\n",[49,22322,22323],{"class":51,"line":1734},[49,22324,22325],{"class":283},"    \u002F\u002F100\n",[49,22327,22328,22330,22332,22334,22336],{"class":51,"line":1739},[49,22329,1643],{"class":55},[49,22331,1263],{"class":59},[49,22333,22191],{"class":55},[49,22335,1263],{"class":59},[49,22337,1285],{"class":55},[49,22339,22340],{"class":51,"line":1745},[49,22341,22342],{"class":55},"    Person p2;\n",[49,22344,22345,22348,22350,22352],{"class":51,"line":1766},[49,22346,22347],{"class":55},"    p2.m_A",[49,22349,60],{"class":59},[49,22351,1814],{"class":66},[49,22353,1382],{"class":55},[49,22355,22356],{"class":51,"line":1771},[49,22357,22358],{"class":283},"    \u002F\u002F继续访问这片空间\n",[49,22360,22361],{"class":51,"line":1785},[49,22362,22363],{"class":283},"    \u002F\u002F200\n",[49,22365,22366,22368,22370,22373,22375],{"class":51,"line":1790},[49,22367,1643],{"class":55},[49,22369,1263],{"class":59},[49,22371,22372],{"class":55},"p2.m_A",[49,22374,1263],{"class":59},[49,22376,1285],{"class":55},[49,22378,22379],{"class":51,"line":1819},[49,22380,1657],{"class":55},[49,22382,22383,22385,22387],{"class":51,"line":1824},[49,22384,231],{"class":59},[49,22386,2065],{"class":2055},[49,22388,2068],{"class":55},[49,22390,22391],{"class":51,"line":1841},[49,22392,1638],{"class":55},[49,22394,22395,22397],{"class":51,"line":1846},[49,22396,5723],{"class":2055},[49,22398,5726],{"class":55},[49,22400,22401],{"class":51,"line":1851},[49,22402,1657],{"class":55},[14,22404,22405],{},[373,22406,22407],{},"静态变量的访问",[39,22409,22411],{"className":216,"code":22410,"language":218,"meta":44,"style":44},"#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",[46,22412,22413,22419,22429,22435,22439,22443,22447,22455,22459,22464,22472,22476,22480,22494,22509,22517,22521,22526,22531,22536,22541,22553,22558,22563,22577,22594,22598,22606,22610,22616],{"__ignoreMap":44},[49,22414,22415,22417],{"class":51,"line":52},[49,22416,2041],{"class":59},[49,22418,2044],{"class":328},[49,22420,22421,22423,22425,22427],{"class":51,"line":84},[49,22422,2049],{"class":59},[49,22424,2052],{"class":59},[49,22426,2056],{"class":2055},[49,22428,1382],{"class":55},[49,22430,22431,22433],{"class":51,"line":109},[49,22432,14784],{"class":59},[49,22434,15261],{"class":2055},[49,22436,22437],{"class":51,"line":120},[49,22438,1638],{"class":55},[49,22440,22441],{"class":51,"line":135},[49,22442,14806],{"class":59},[49,22444,22445],{"class":51,"line":1306},[49,22446,22267],{"class":283},[49,22448,22449,22451,22453],{"class":51,"line":1312},[49,22450,11110],{"class":59},[49,22452,2474],{"class":59},[49,22454,21482],{"class":55},[49,22456,22457],{"class":51,"line":1403},[49,22458,15312],{"class":59},[49,22460,22461],{"class":51,"line":1409},[49,22462,22463],{"class":283},"    \u002F\u002F静态成员变量也是有访问权限的\n",[49,22465,22466,22468,22470],{"class":51,"line":1421},[49,22467,11110],{"class":59},[49,22469,2474],{"class":59},[49,22471,21489],{"class":55},[49,22473,22474],{"class":51,"line":1704},[49,22475,4087],{"class":55},[49,22477,22478],{"class":51,"line":1709},[49,22479,22284],{"class":283},[49,22481,22482,22484,22486,22488,22490,22492],{"class":51,"line":1715},[49,22483,231],{"class":59},[49,22485,15659],{"class":2055},[49,22487,22293],{"class":55},[49,22489,60],{"class":59},[49,22491,95],{"class":66},[49,22493,1382],{"class":55},[49,22495,22496,22498,22500,22503,22505,22507],{"class":51,"line":1720},[49,22497,231],{"class":59},[49,22499,15659],{"class":2055},[49,22501,22502],{"class":55},"::m_B",[49,22504,60],{"class":59},[49,22506,919],{"class":66},[49,22508,1382],{"class":55},[49,22510,22511,22513,22515],{"class":51,"line":1734},[49,22512,5454],{"class":59},[49,22514,5747],{"class":2055},[49,22516,2068],{"class":55},[49,22518,22519],{"class":51,"line":1739},[49,22520,1638],{"class":55},[49,22522,22523],{"class":51,"line":1745},[49,22524,22525],{"class":283},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[49,22527,22528],{"class":51,"line":1766},[49,22529,22530],{"class":283},"    \u002F\u002F静态成员变量有两种访问方式：\n",[49,22532,22533],{"class":51,"line":1771},[49,22534,22535],{"class":283},"    \u002F\u002F1.通过对象进行访问\n",[49,22537,22538],{"class":51,"line":1785},[49,22539,22540],{"class":55},"    Person p;  \n",[49,22542,22543,22545,22547,22549,22551],{"class":51,"line":1790},[49,22544,1643],{"class":55},[49,22546,1263],{"class":59},[49,22548,22191],{"class":55},[49,22550,1263],{"class":59},[49,22552,1285],{"class":55},[49,22554,22555],{"class":51,"line":1819},[49,22556,22557],{"class":283},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[49,22559,22560],{"class":51,"line":1824},[49,22561,22562],{"class":283},"    \u002F\u002F2.通过类名进行访问\n",[49,22564,22565,22567,22569,22571,22573,22575],{"class":51,"line":1841},[49,22566,1643],{"class":55},[49,22568,1263],{"class":59},[49,22570,19136],{"class":2055},[49,22572,22293],{"class":55},[49,22574,1263],{"class":59},[49,22576,1285],{"class":55},[49,22578,22579,22581,22583,22585,22587,22589,22591],{"class":51,"line":1846},[49,22580,1643],{"class":55},[49,22582,1263],{"class":59},[49,22584,19136],{"class":2055},[49,22586,22502],{"class":55},[49,22588,1263],{"class":59},[49,22590,1330],{"class":55},[49,22592,22593],{"class":283}," \u002F\u002F没有访问权限，报错\n",[49,22595,22596],{"class":51,"line":1851},[49,22597,1657],{"class":55},[49,22599,22600,22602,22604],{"class":51,"line":1856},[49,22601,231],{"class":59},[49,22603,2065],{"class":2055},[49,22605,2068],{"class":55},[49,22607,22608],{"class":51,"line":1870},[49,22609,1638],{"class":55},[49,22611,22612,22614],{"class":51,"line":1875},[49,22613,5792],{"class":2055},[49,22615,5726],{"class":55},[49,22617,22618],{"class":51,"line":2669},[49,22619,1657],{"class":55},[22088,22621,22623],{"id":22622},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22625,22626],{},"1.静态成员函数定义与访问",[39,22628,22630],{"className":216,"code":22629,"language":218,"meta":44,"style":44},"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",[46,22631,22632,22638,22642,22646,22651,22662,22666,22680,22684,22688,22696,22700,22705,22710,22714,22722,22727,22737],{"__ignoreMap":44},[49,22633,22634,22636],{"class":51,"line":52},[49,22635,14784],{"class":59},[49,22637,15261],{"class":2055},[49,22639,22640],{"class":51,"line":84},[49,22641,1638],{"class":55},[49,22643,22644],{"class":51,"line":109},[49,22645,14806],{"class":59},[49,22647,22648],{"class":51,"line":120},[49,22649,22650],{"class":283},"    \u002F\u002F在公共权限下定义静态成员函数\n",[49,22652,22653,22655,22658,22660],{"class":51,"line":135},[49,22654,11110],{"class":59},[49,22656,22657],{"class":59}," void",[49,22659,11475],{"class":2055},[49,22661,2068],{"class":55},[49,22663,22664],{"class":51,"line":1306},[49,22665,2122],{"class":55},[49,22667,22668,22671,22673,22676,22678],{"class":51,"line":1312},[49,22669,22670],{"class":55},"        coout",[49,22672,1263],{"class":59},[49,22674,22675],{"class":328},"\"静态成员函数的调用\"",[49,22677,1263],{"class":59},[49,22679,1285],{"class":55},[49,22681,22682],{"class":51,"line":1403},[49,22683,2279],{"class":55},[49,22685,22686],{"class":51,"line":1409},[49,22687,4087],{"class":55},[49,22689,22690,22692,22694],{"class":51,"line":1421},[49,22691,5454],{"class":59},[49,22693,5678],{"class":2055},[49,22695,2068],{"class":55},[49,22697,22698],{"class":51,"line":1704},[49,22699,1638],{"class":55},[49,22701,22702],{"class":51,"line":1709},[49,22703,22704],{"class":283},"    \u002F\u002F静态成员函数的调用方式:\n",[49,22706,22707],{"class":51,"line":1715},[49,22708,22709],{"class":283},"    \u002F\u002F1.通过对象访问\n",[49,22711,22712],{"class":51,"line":1720},[49,22713,15403],{"class":55},[49,22715,22716,22718,22720],{"class":51,"line":1734},[49,22717,15956],{"class":55},[49,22719,11641],{"class":2055},[49,22721,5726],{"class":55},[49,22723,22724],{"class":51,"line":1739},[49,22725,22726],{"class":283},"    \u002F\u002F2.通过类名访问\n",[49,22728,22729,22731,22733,22735],{"class":51,"line":1745},[49,22730,18609],{"class":2055},[49,22732,17822],{"class":55},[49,22734,11641],{"class":2055},[49,22736,5726],{"class":55},[49,22738,22739],{"class":51,"line":1766},[49,22740,1657],{"class":55},[178,22742,22743],{"start":84},[181,22744,22745],{},"静态成员函数只能访问静态成员变量",[39,22747,22749],{"className":216,"code":22748,"language":218,"meta":44,"style":44},"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",[46,22750,22751,22757,22761,22765,22769,22779,22783,22797,22802,22814,22818,22829,22839,22843,22847,22851,22861,22865,22878,22882,22886,22890,22894,22908,22916,22920,22924,22928,22932,22940,22944,22954,22959,22963,22971,22975,22981],{"__ignoreMap":44},[49,22752,22753,22755],{"class":51,"line":52},[49,22754,14784],{"class":59},[49,22756,15261],{"class":2055},[49,22758,22759],{"class":51,"line":84},[49,22760,1638],{"class":55},[49,22762,22763],{"class":51,"line":109},[49,22764,14806],{"class":59},[49,22766,22767],{"class":51,"line":120},[49,22768,22650],{"class":283},[49,22770,22771,22773,22775,22777],{"class":51,"line":135},[49,22772,11110],{"class":59},[49,22774,22657],{"class":59},[49,22776,11475],{"class":2055},[49,22778,2068],{"class":55},[49,22780,22781],{"class":51,"line":1306},[49,22782,2122],{"class":55},[49,22784,22785,22788,22790,22792,22794],{"class":51,"line":1312},[49,22786,22787],{"class":55},"        m_A",[49,22789,60],{"class":59},[49,22791,533],{"class":66},[49,22793,280],{"class":55},[49,22795,22796],{"class":283}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[49,22798,22799],{"class":51,"line":1403},[49,22800,22801],{"class":283},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[49,22803,22804,22806,22808,22810,22812],{"class":51,"line":1409},[49,22805,22670],{"class":55},[49,22807,1263],{"class":59},[49,22809,22675],{"class":328},[49,22811,1263],{"class":59},[49,22813,1285],{"class":55},[49,22815,22816],{"class":51,"line":1421},[49,22817,2279],{"class":55},[49,22819,22820,22822,22824,22826],{"class":51,"line":1704},[49,22821,11110],{"class":59},[49,22823,2474],{"class":59},[49,22825,15538],{"class":55},[49,22827,22828],{"class":283}," \u002F\u002F静态成员变量\n",[49,22830,22831,22833,22836],{"class":51,"line":1709},[49,22832,2077],{"class":59},[49,22834,22835],{"class":55}," m_B;",[49,22837,22838],{"class":283}," \u002F\u002F非静态成员变量\n",[49,22840,22841],{"class":51,"line":1715},[49,22842,2492],{"emptyLinePlaceholder":151},[49,22844,22845],{"class":51,"line":1720},[49,22846,15312],{"class":59},[49,22848,22849],{"class":51,"line":1734},[49,22850,22463],{"class":283},[49,22852,22853,22855,22857,22859],{"class":51,"line":1739},[49,22854,11110],{"class":59},[49,22856,22657],{"class":59},[49,22858,13708],{"class":2055},[49,22860,2068],{"class":55},[49,22862,22863],{"class":51,"line":1745},[49,22864,2122],{"class":55},[49,22866,22867,22869,22871,22874,22876],{"class":51,"line":1766},[49,22868,3543],{"class":55},[49,22870,1263],{"class":59},[49,22872,22873],{"class":328},"\"这是私有权限下的静态函数调用\"",[49,22875,1263],{"class":59},[49,22877,1285],{"class":55},[49,22879,22880],{"class":51,"line":1771},[49,22881,2279],{"class":55},[49,22883,22884],{"class":51,"line":1785},[49,22885,2492],{"emptyLinePlaceholder":151},[49,22887,22888],{"class":51,"line":1790},[49,22889,2492],{"emptyLinePlaceholder":151},[49,22891,22892],{"class":51,"line":1819},[49,22893,4087],{"class":55},[49,22895,22896,22898,22900,22902,22904,22906],{"class":51,"line":1824},[49,22897,231],{"class":59},[49,22899,15659],{"class":2055},[49,22901,22293],{"class":55},[49,22903,60],{"class":59},[49,22905,415],{"class":66},[49,22907,1382],{"class":55},[49,22909,22910,22912,22914],{"class":51,"line":1841},[49,22911,5454],{"class":59},[49,22913,5678],{"class":2055},[49,22915,2068],{"class":55},[49,22917,22918],{"class":51,"line":1846},[49,22919,1638],{"class":55},[49,22921,22922],{"class":51,"line":1851},[49,22923,22704],{"class":283},[49,22925,22926],{"class":51,"line":1856},[49,22927,22709],{"class":283},[49,22929,22930],{"class":51,"line":1870},[49,22931,15403],{"class":55},[49,22933,22934,22936,22938],{"class":51,"line":1875},[49,22935,15956],{"class":55},[49,22937,11641],{"class":2055},[49,22939,5726],{"class":55},[49,22941,22942],{"class":51,"line":2669},[49,22943,22726],{"class":283},[49,22945,22946,22948,22950,22952],{"class":51,"line":2683},[49,22947,18609],{"class":2055},[49,22949,17822],{"class":55},[49,22951,11641],{"class":2055},[49,22953,5726],{"class":55},[49,22955,22956],{"class":51,"line":2691},[49,22957,22958],{"class":283},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[49,22960,22961],{"class":51,"line":2696},[49,22962,1657],{"class":55},[49,22964,22965,22967,22969],{"class":51,"line":2702},[49,22966,231],{"class":59},[49,22968,2065],{"class":2055},[49,22970,2068],{"class":55},[49,22972,22973],{"class":51,"line":2708},[49,22974,1638],{"class":55},[49,22976,22977,22979],{"class":51,"line":2713},[49,22978,5723],{"class":2055},[49,22980,5726],{"class":55},[49,22982,22983],{"class":51,"line":8038},[49,22984,1657],{"class":55},[195,22986,22988],{"id":22987},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22088,22990,22992],{"id":22991},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22994,22995],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22997,22998],{},"只有非静态成员变量才属于类的对象上",[23000,23001,23003],"h5",{"id":23002},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[39,23005,23007],{"className":216,"code":23006,"language":218,"meta":44,"style":44},"#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",[46,23008,23009,23016,23026,23032,23036,23040,23044,23052,23056,23060,23083,23087,23095,23099,23105],{"__ignoreMap":44},[49,23010,23011,23013],{"class":51,"line":52},[49,23012,2041],{"class":59},[49,23014,23015],{"class":328},"\u003Ciostraem>\n",[49,23017,23018,23020,23022,23024],{"class":51,"line":84},[49,23019,2049],{"class":59},[49,23021,2052],{"class":59},[49,23023,2056],{"class":2055},[49,23025,1382],{"class":55},[49,23027,23028,23030],{"class":51,"line":109},[49,23029,14784],{"class":59},[49,23031,15261],{"class":2055},[49,23033,23034],{"class":51,"line":120},[49,23035,1638],{"class":55},[49,23037,23038],{"class":51,"line":135},[49,23039,2492],{"emptyLinePlaceholder":151},[49,23041,23042],{"class":51,"line":1306},[49,23043,4087],{"class":55},[49,23045,23046,23048,23050],{"class":51,"line":1312},[49,23047,5454],{"class":59},[49,23049,5678],{"class":2055},[49,23051,2068],{"class":55},[49,23053,23054],{"class":51,"line":1403},[49,23055,1638],{"class":55},[49,23057,23058],{"class":51,"line":1409},[49,23059,15403],{"class":55},[49,23061,23062,23064,23066,23069,23071,23074,23076,23078,23080],{"class":51,"line":1421},[49,23063,1643],{"class":55},[49,23065,1263],{"class":59},[49,23067,23068],{"class":328},"\"size of p=\"",[49,23070,1263],{"class":59},[49,23072,23073],{"class":2055},"sizeoif",[49,23075,6629],{"class":55},[49,23077,1263],{"class":59},[49,23079,1330],{"class":55},[49,23081,23082],{"class":283}," \u002F\u002F查看这个空类的占用的内存空间\n",[49,23084,23085],{"class":51,"line":1704},[49,23086,1657],{"class":55},[49,23088,23089,23091,23093],{"class":51,"line":1709},[49,23090,231],{"class":59},[49,23092,2065],{"class":2055},[49,23094,2068],{"class":55},[49,23096,23097],{"class":51,"line":1715},[49,23098,1638],{"class":55},[49,23100,23101,23103],{"class":51,"line":1720},[49,23102,5723],{"class":2055},[49,23104,5726],{"class":55},[49,23106,23107],{"class":51,"line":1734},[49,23108,1657],{"class":55},[14,23110,23111],{},"输出结果为：size of p=1",[14,23113,23114],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23116,23117],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23000,23119,23121],{"id":23120},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[39,23123,23125],{"className":216,"code":23124,"language":218,"meta":44,"style":44},"#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",[46,23126,23127,23133,23143,23151,23155,23164,23168,23176,23180,23184,23203,23207,23211,23219,23223,23229],{"__ignoreMap":44},[49,23128,23129,23131],{"class":51,"line":52},[49,23130,2041],{"class":59},[49,23132,2044],{"class":328},[49,23134,23135,23137,23139,23141],{"class":51,"line":84},[49,23136,2049],{"class":59},[49,23138,2052],{"class":59},[49,23140,2056],{"class":2055},[49,23142,1382],{"class":55},[49,23144,23145,23147,23149],{"class":51,"line":109},[49,23146,14784],{"class":59},[49,23148,15659],{"class":2055},[49,23150,2766],{"class":55},[49,23152,23153],{"class":51,"line":120},[49,23154,1638],{"class":55},[49,23156,23157,23159,23161],{"class":51,"line":135},[49,23158,2077],{"class":59},[49,23160,15538],{"class":55},[49,23162,23163],{"class":283},"\u002F\u002F非静态成员变量\n",[49,23165,23166],{"class":51,"line":1306},[49,23167,4087],{"class":55},[49,23169,23170,23172,23174],{"class":51,"line":1312},[49,23171,5454],{"class":59},[49,23173,5678],{"class":2055},[49,23175,2068],{"class":55},[49,23177,23178],{"class":51,"line":1403},[49,23179,1638],{"class":55},[49,23181,23182],{"class":51,"line":1409},[49,23183,15403],{"class":55},[49,23185,23186,23188,23190,23192,23194,23196,23198,23200],{"class":51,"line":1421},[49,23187,1643],{"class":55},[49,23189,1263],{"class":59},[49,23191,23068],{"class":328},[49,23193,1464],{"class":59},[49,23195,6629],{"class":55},[49,23197,1263],{"class":59},[49,23199,1330],{"class":55},[49,23201,23202],{"class":283}," \u002F\u002F查看不是空对象时占用多少内存\n",[49,23204,23205],{"class":51,"line":1704},[49,23206,2492],{"emptyLinePlaceholder":151},[49,23208,23209],{"class":51,"line":1709},[49,23210,1657],{"class":55},[49,23212,23213,23215,23217],{"class":51,"line":1715},[49,23214,231],{"class":59},[49,23216,2065],{"class":2055},[49,23218,2068],{"class":55},[49,23220,23221],{"class":51,"line":1720},[49,23222,1638],{"class":55},[49,23224,23225,23227],{"class":51,"line":1734},[49,23226,5723],{"class":2055},[49,23228,5726],{"class":55},[49,23230,23231],{"class":51,"line":1739},[49,23232,1657],{"class":55},[14,23234,23235],{},"输出结果：size of p=4",[14,23237,23238],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[178,23240,23241],{},[181,23242,23243],{},"如果加上非静态成员变量，Person类修改如下",[39,23245,23247],{"className":216,"code":23246,"language":218,"meta":44,"style":44},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[46,23248,23249,23255,23259,23265,23273,23277,23282],{"__ignoreMap":44},[49,23250,23251,23253],{"class":51,"line":52},[49,23252,14784],{"class":59},[49,23254,15261],{"class":2055},[49,23256,23257],{"class":51,"line":84},[49,23258,1638],{"class":55},[49,23260,23261,23263],{"class":51,"line":109},[49,23262,2077],{"class":59},[49,23264,21482],{"class":55},[49,23266,23267,23269,23271],{"class":51,"line":120},[49,23268,11110],{"class":59},[49,23270,2474],{"class":59},[49,23272,21489],{"class":55},[49,23274,23275],{"class":51,"line":135},[49,23276,4087],{"class":55},[49,23278,23279],{"class":51,"line":1306},[49,23280,23281],{"class":283},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[49,23283,23284,23286,23288,23290,23292,23294],{"class":51,"line":1312},[49,23285,231],{"class":59},[49,23287,15659],{"class":2055},[49,23289,22502],{"class":55},[49,23291,60],{"class":59},[49,23293,415],{"class":66},[49,23295,1382],{"class":55},[14,23297,23298],{},"输出结果：4",[14,23300,23301],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[178,23303,23304],{"start":84},[181,23305,23306],{},"加上非静态成员函数",[39,23308,23310],{"className":216,"code":23309,"language":218,"meta":44,"style":44},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[46,23311,23312,23319,23323,23329,23337,23341,23345,23349],{"__ignoreMap":44},[49,23313,23314,23316],{"class":51,"line":52},[49,23315,14784],{"class":59},[49,23317,23318],{"class":2055},"  Person\n",[49,23320,23321],{"class":51,"line":84},[49,23322,1638],{"class":55},[49,23324,23325,23327],{"class":51,"line":109},[49,23326,2077],{"class":59},[49,23328,21482],{"class":55},[49,23330,23331,23333,23335],{"class":51,"line":120},[49,23332,14999],{"class":59},[49,23334,11475],{"class":2055},[49,23336,2068],{"class":55},[49,23338,23339],{"class":51,"line":135},[49,23340,2122],{"class":55},[49,23342,23343],{"class":51,"line":1306},[49,23344,2492],{"emptyLinePlaceholder":151},[49,23346,23347],{"class":51,"line":1312},[49,23348,2279],{"class":55},[49,23350,23351],{"class":51,"line":1403},[49,23352,4087],{"class":55},[14,23354,23355],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[178,23357,23358],{"start":109},[181,23359,23360],{},"加上静态成员函数",[39,23362,23364],{"className":216,"code":23363,"language":218,"meta":44,"style":44},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[46,23365,23366,23372,23376,23382,23390,23394,23398,23402,23413,23417,23421,23425],{"__ignoreMap":44},[49,23367,23368,23370],{"class":51,"line":52},[49,23369,14784],{"class":59},[49,23371,23318],{"class":2055},[49,23373,23374],{"class":51,"line":84},[49,23375,1638],{"class":55},[49,23377,23378,23380],{"class":51,"line":109},[49,23379,2077],{"class":59},[49,23381,21482],{"class":55},[49,23383,23384,23386,23388],{"class":51,"line":120},[49,23385,14999],{"class":59},[49,23387,11475],{"class":2055},[49,23389,2068],{"class":55},[49,23391,23392],{"class":51,"line":135},[49,23393,2122],{"class":55},[49,23395,23396],{"class":51,"line":1306},[49,23397,2492],{"emptyLinePlaceholder":151},[49,23399,23400],{"class":51,"line":1312},[49,23401,2279],{"class":55},[49,23403,23404,23406,23408,23411],{"class":51,"line":1403},[49,23405,11110],{"class":59},[49,23407,22657],{"class":59},[49,23409,23410],{"class":2055}," func1",[49,23412,2068],{"class":55},[49,23414,23415],{"class":51,"line":1409},[49,23416,2122],{"class":55},[49,23418,23419],{"class":51,"line":1421},[49,23420,2492],{"emptyLinePlaceholder":151},[49,23422,23423],{"class":51,"line":1704},[49,23424,2279],{"class":55},[49,23426,23427],{"class":51,"line":1709},[49,23428,4087],{"class":55},[14,23430,23298],{},[14,23432,23433],{},"解释：静态成员函数也不属于类上",[143,23435,7764],{},{"title":44,"searchDepth":84,"depth":84,"links":23437},[23438,23444],{"id":14735,"depth":84,"text":14736,"children":23439},[23440,23441,23442,23443],{"id":14739,"depth":109,"text":14740},{"id":15464,"depth":109,"text":15465},{"id":15636,"depth":109,"text":15637},{"id":16095,"depth":109,"text":16096},{"id":18467,"depth":84,"text":18468,"children":23445},[23446,23447,23448,23449,23450,23451,23452,23453,23454],{"id":18479,"depth":109,"text":18480},{"id":18772,"depth":109,"text":18773},{"id":19263,"depth":109,"text":19264},{"id":20360,"depth":109,"text":20361},{"id":20783,"depth":109,"text":20784},{"id":21262,"depth":109,"text":21263},{"id":21637,"depth":109,"text":21638},{"id":22050,"depth":109,"text":22051},{"id":22987,"depth":109,"text":22988},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14700,"description":23455},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23462,"title":218,"body":23463,"description":148,"extension":149,"meta":23467,"navigation":151,"path":23469,"seo":23470,"stem":23471,"__hash__":23472},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23464,"toc":23465},[],{"title":44,"searchDepth":84,"depth":84,"links":23466},[],{"category":23468},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":218,"description":148},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23474,"title":23475,"body":23476,"description":44,"extension":149,"meta":24067,"navigation":151,"path":24068,"seo":24069,"stem":24070,"__hash__":24071},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23477,"toc":24049},[23478,23481,23485,23488,23491,23494,23512,23517,23520,23523,23526,23529,23534,23537,23542,23545,23548,23552,23555,23558,23564,23567,23585,23589,23593,23596,23601,23604,23608,23611,23624,23627,23631,23634,23637,23640,23665,23668,23677,23688,23703,23735,23739,23746,23754,23758,23761,23764,23769,23773,23776,23779,23784,23787,23791,23794,23797,23802,23805,23809,23814,23818,23885,23889,23892,23895,23898,23901,23904,23910,23931,23934,23948,23957,23961,23964,23967,23972,23975,23980,23985,23988,23991,23996,24001,24004,24009,24014,24017,24022,24027,24030,24033,24038,24041,24046],[10,23479,23475],{"id":23480},"_1强化学习基本认识",[166,23482,23484],{"id":23483},"_11什么是强化学习","1.1.什么是强化学习",[14,23486,23487],{},"强化学习有两部分组成：智能体和环境；",[14,23489,23490],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23492,23493],{},"强化学习与监督学习的区别:",[178,23495,23496,23499,23502,23505],{},[181,23497,23498],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[181,23500,23501],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[181,23503,23504],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[181,23506,23507,23508,23511],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[373,23509,23510],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23513,23514],{},[1554,23515],{"alt":44,"src":23516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23518,23519],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23521,23522],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23524,23525],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23527,23528],{},"获取奖励",[14,23530,23531],{},[1554,23532],{"alt":44,"src":23533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23535,23536],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23538,23539],{},[1554,23540],{"alt":44,"src":23541},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23543,23544],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23546,23547],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[166,23549,23551],{"id":23550},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23553,23554],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23556,23557],{},"具身智能中的应用",[14,23559,23560,23563],{},[373,23561,23562],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23565,23566],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23568,23569,23570,23573,23574,23577,23578,23581,23582],{},"机器人是",[373,23571,23572],{},"躯体","，深度学习是",[373,23575,23576],{},"神经元****网络","，VLA是",[373,23579,23580],{},"通用的行为逻辑","，而强化学习是",[373,23583,23584],{},"教练",[166,23586,23588],{"id":23587},"_13序列决策","1.3.序列决策",[195,23590,23592],{"id":23591},"_131智能体与环境","1.3.1.智能体与环境",[14,23594,23595],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23597,23598],{},[1554,23599],{"alt":44,"src":23600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23602,23603],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[195,23605,23607],{"id":23606},"_132奖励","1.3.2.奖励",[14,23609,23610],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23612,23613,23614,23623],{},"取某个策略的表现如何。强化学习的目的就是",[373,23615,23616,23617,23622],{},"最大化",[373,23618,23619],{},[373,23620,23621],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23625,23626],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[195,23628,23630],{"id":23629},"_133序列决策","1.3.3.序列决策",[14,23632,23633],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23635,23636],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23638,23639],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23641,23642,23646,23647,23649,23650,23652,23653,23655,23656,13885,23659,13885,23662],{},[23643,23644,23645],"em",{},"Ht"," = ",[23643,23648,815],{},"1*, a",[23643,23651,441],{},", r",[23643,23654,441],{},", . . . ,* ",[23643,23657,23658],{},"ot",[23643,23660,23661],{},", at ,",[23643,23663,23664],{},"rt",[14,23666,23667],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23669,23670,23646,23673,1750,23675,649],{},[23643,23671,23672],{},"st",[23643,23674,277],{},[23643,23676,23645],{},[14,23678,23679,23680,23683,23684,23687],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[373,23681,23682],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[373,23685,23686],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23689,23690,23691,23694,23695,23698,23699,23702],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[373,23692,23693],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[373,23696,23697],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23643,23700,23701],{},"S, A, T, R, Ω, O, γ",")。",[14,23704,23705,23706,23708,23709,23711,23712,228,23714,23717,23718,23720,23721,228,23724,23727,23728,23730,23731,23734],{},"其中 ",[23643,23707,908],{}," 表示状态空间，为隐变量，",[23643,23710,456],{}," 为动作空间，",[23643,23713,933],{},[23643,23715,23716],{},"s ′ |s, a",") 为状态转移概率，",[23643,23719,883],{}," 为奖励函数，",[23643,23722,23723],{},"Ω",[23643,23725,23726],{},"o|s, a",") 为观测概率，",[23643,23729,809],{}," 为观测空间，",[23643,23732,23733],{},"γ"," 为折扣因子。",[166,23736,23738],{"id":23737},"_14动作空间","1.4.动作空间",[14,23740,23741,23742,23745],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[373,23743,23744],{},"动作空间"," ，动作空间分为:",[178,23747,23748,23751],{},[181,23749,23750],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[181,23752,23753],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[166,23755,23757],{"id":23756},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23759,23760],{},"由策略、价值函数、模型三部分组成",[14,23762,23763],{},"这三者组成马尔可夫决策过程",[14,23765,23766],{},[1554,23767],{"alt":44,"src":23768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[195,23770,23772],{"id":23771},"_151策略","1.5.1.策略",[14,23774,23775],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23777,23778],{},"策略可分为两种：",[14,23780,23781],{},[1554,23782],{"alt":44,"src":23783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23785,23786],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[195,23788,23790],{"id":23789},"_152价值函数","1.5.2.价值函数",[14,23792,23793],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23795,23796],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23798,23799],{},[1554,23800],{"alt":44,"src":23801},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23803,23804],{},"进入某个状态采取的最优动作可以通过Q函数得到",[195,23806,23808],{"id":23807},"_153模型","1.5.3.模型",[14,23810,23811],{},[1554,23812],{"alt":44,"src":23813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[166,23815,23817],{"id":23816},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[361,23819,23820,23831],{},[364,23821,23822],{},[367,23823,23824,23828],{},[370,23825,23827],{"align":23826},"left","类型",[370,23829,23830],{"align":23826},"特点",[408,23832,23833,23843,23853,23863,23875],{},[367,23834,23835,23840],{},[413,23836,23837],{"align":23826},[373,23838,23839],{},"基于价值的智能体",[413,23841,23842],{"align":23826},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[367,23844,23845,23850],{},[413,23846,23847],{"align":23826},[373,23848,23849],{},"基于策略的智能体",[413,23851,23852],{"align":23826},"直接学习策略，没有学习价值函数",[367,23854,23855,23860],{},[413,23856,23857],{"align":23826},[373,23858,23859],{},"演员-评论员智能体",[413,23861,23862],{"align":23826},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[367,23864,23865,23870],{},[413,23866,23867],{"align":23826},[373,23868,23869],{},"有模型强化学习智能体",[413,23871,23872],{"align":23826},[1554,23873],{"alt":44,"src":23874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[367,23876,23877,23882],{},[413,23878,23879],{"align":23826},[373,23880,23881],{},"免模型强化学习智能体",[413,23883,23884],{"align":23826},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[166,23886,23888],{"id":23887},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23890,23891],{},"学习和规划是序列决策的两个基本问题",[14,23893,23894],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23896,23897],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23899,23900],{},"强化学习用到的库：Gym",[14,23902,23903],{},"Gym可以检验强化学习算法的优劣",[14,23905,23906,23909],{},[373,23907,23908],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[39,23911,23915],{"className":23912,"code":23913,"language":23914,"meta":44,"style":44},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[46,23916,23917],{"__ignoreMap":44},[49,23918,23919,23922,23925,23928],{"class":51,"line":52},[49,23920,23921],{"class":2055},"pip",[49,23923,23924],{"class":328}," install",[49,23926,23927],{"class":328}," gym==",[49,23929,23930],{"class":66},"0.25.2\n",[14,23932,23933],{},"显示图形界面需要",[39,23935,23937],{"className":23912,"code":23936,"language":23914,"meta":44,"style":44},"pip install pygame\n",[46,23938,23939],{"__ignoreMap":44},[49,23940,23941,23943,23945],{"class":51,"line":52},[49,23942,23921],{"class":2055},[49,23944,23924],{"class":328},[49,23946,23947],{"class":328}," pygame\n",[14,23949,23950,23951],{},"有关Gym库的相关文档介绍：",[56,23952,23956],{"href":23953,"rel":23954},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23955],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[166,23958,23960],{"id":23959},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23962,23963],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23965,23966],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23968,23969],{},[1554,23970],{"alt":44,"src":23971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23973,23974],{},"折扣率需要自己来设定",[14,23976,23977],{},[1554,23978],{"alt":44,"src":23979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[178,23981,23982],{},[181,23983,23984],{},"状态转移函数：",[14,23986,23987],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23989,23990],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23992,23993],{},[1554,23994],{"alt":44,"src":23995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[178,23997,23998],{"start":84},[181,23999,24000],{},"动作价值函数：",[14,24002,24003],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24005,24006],{},[1554,24007],{"alt":44,"src":24008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[178,24010,24011],{"start":109},[181,24012,24013],{},"最优动作价值函数：",[14,24015,24016],{},"这个函数是对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,24018,24019],{},[1554,24020],{"alt":44,"src":24021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[178,24023,24024],{"start":120},[181,24025,24026],{},"状态价值函数:",[14,24028,24029],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24031,24032],{},"它衡量的是“一个具体动作”的长期价值",[14,24034,24035],{},[1554,24036],{"alt":44,"src":24037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24039,24040],{},"几个价值函数之间的比较：",[14,24042,24043],{},[1554,24044],{"alt":44,"src":24045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[143,24047,24048],{},"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":44,"searchDepth":84,"depth":84,"links":24050},[24051,24052,24053,24058,24059,24064,24065,24066],{"id":23483,"depth":84,"text":23484},{"id":23550,"depth":84,"text":23551},{"id":23587,"depth":84,"text":23588,"children":24054},[24055,24056,24057],{"id":23591,"depth":109,"text":23592},{"id":23606,"depth":109,"text":23607},{"id":23629,"depth":109,"text":23630},{"id":23737,"depth":84,"text":23738},{"id":23756,"depth":84,"text":23757,"children":24060},[24061,24062,24063],{"id":23771,"depth":109,"text":23772},{"id":23789,"depth":109,"text":23790},{"id":23807,"depth":109,"text":23808},{"id":23816,"depth":84,"text":23817},{"id":23887,"depth":84,"text":23888},{"id":23959,"depth":84,"text":23960},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23475,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24073,"title":24074,"body":24075,"description":24082,"extension":149,"meta":24093,"navigation":151,"path":24094,"seo":24095,"stem":24096,"__hash__":24097},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24076,"toc":24091},[24077,24080,24083,24088],[10,24078,24074],{"id":24079},"_2马尔可夫决策过程",[14,24081,24082],{},"这是强化学习的基本框架",[14,24084,24085],{},[1554,24086],{"alt":44,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24089,24090],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":44,"searchDepth":84,"depth":84,"links":24092},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24074,"description":24082},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24099,"title":24100,"body":24101,"description":44,"extension":149,"meta":24217,"navigation":151,"path":24218,"seo":24219,"stem":24220,"__hash__":24221},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24102,"toc":24212},[24103,24106,24110,24113,24118,24123,24126,24131,24134,24139,24142,24146,24151,24154,24159,24164,24169,24172,24176,24181,24184,24189,24194,24199,24204,24207],[10,24104,24100],{"id":24105},"_3动作价值函数",[166,24107,24109],{"id":24108},"_31dqn","3.1.DQN",[14,24111,24112],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24114,24115],{},[1554,24116],{"alt":44,"src":24117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24119,24120],{},[1554,24121],{"alt":44,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24124,24125],{},"DQN算法的描述：",[14,24127,24128],{},[1554,24129],{"alt":44,"src":24130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24132,24133],{},"这里的Dense指的是全连接层",[14,24135,24136],{},[1554,24137],{"alt":44,"src":24138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24140,24141],{},"当前观测的状态为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算法",[166,24143,24145],{"id":24144},"_32dqn的举例","3.2.DQN的举例",[14,24147,24148],{},[1554,24149],{"alt":44,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24152,24153],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24155,24156],{},[1554,24157],{"alt":44,"src":24158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24160,24161],{},[1554,24162],{"alt":44,"src":24163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24165,24166],{},[1554,24167],{"alt":44,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24170,24171],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[166,24173,24175],{"id":24174},"_33td算法","3.3.TD算法",[14,24177,24178],{},[1554,24179],{"alt":44,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24182,24183],{},"强化学习TD算法公式的粗略解释：",[14,24185,24186],{},[1554,24187],{"alt":44,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24190,24191],{},[1554,24192],{"alt":44,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24195,24196],{},[1554,24197],{"alt":44,"src":24198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24200,24201],{},[1554,24202],{"alt":44,"src":24203},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24205,24206],{},"TD算法总结：",[14,24208,24209],{},[1554,24210],{"alt":44,"src":24211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":44,"searchDepth":84,"depth":84,"links":24213},[24214,24215,24216],{"id":24108,"depth":84,"text":24109},{"id":24144,"depth":84,"text":24145},{"id":24174,"depth":84,"text":24175},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24100,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24223,"title":24224,"body":24225,"description":44,"extension":149,"meta":24458,"navigation":151,"path":24459,"seo":24460,"stem":24461,"__hash__":24462},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24226,"toc":24454},[24227,24230,24234,24237,24240,24245,24250,24253,24258,24263,24266,24271,24274,24279,24282,24287,24290,24295,24298,24303,24308,24311,24316,24319,24322,24327,24330,24335,24340,24344,24347,24350,24355,24360,24363,24368,24373,24376,24381,24384,24387,24392,24395,24400,24403,24408,24413,24416,24421,24426,24429,24434,24437,24442,24445],[10,24228,24224],{"id":24229},"_4策略学习",[166,24231,24233],{"id":24232},"_41概念描述","4.1.概念描述",[14,24235,24236],{},"用神经网络（策略网络）近似策略函数",[14,24238,24239],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24241,24242],{},[1554,24243],{"alt":44,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24246,24247],{},[1554,24248],{"alt":44,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24251,24252],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24254,24255],{},[1554,24256],{"alt":44,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24259,24260],{},[1554,24261],{"alt":44,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24264,24265],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24267,24268],{},[1554,24269],{"alt":44,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24272,24273],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24275,24276],{},[1554,24277],{"alt":44,"src":24278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24280,24281],{},"改进theta要用到策略梯度算法",[14,24283,24284],{},[1554,24285],{"alt":44,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24288,24289],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24291,24292],{},[1554,24293],{"alt":44,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24296,24297],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24299,24300],{},[1554,24301],{"alt":44,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24304,24305],{},[1554,24306],{"alt":44,"src":24307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24309,24310],{},"梯度公式总结：",[14,24312,24313],{},[1554,24314],{"alt":44,"src":24315},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24317,24318],{},"两个公式的分别应用场景：",[14,24320,24321],{},"对于离散的动作：",[14,24323,24324],{},[1554,24325],{"alt":44,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24328,24329],{},"对于连续的动作：",[14,24331,24332],{},[1554,24333],{"alt":44,"src":24334},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24336,24337],{},[1554,24338],{"alt":44,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[166,24341,24343],{"id":24342},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24345,24346],{},"使用蒙特卡洛来近似计算策略梯度",[14,24348,24349],{},"蒙特卡洛法的解释如下：",[14,24351,24352],{},[1554,24353],{"alt":44,"src":24354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24356,24357],{},[1554,24358],{"alt":44,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24361,24362],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[178,24364,24365],{},[181,24366,24367],{},"方法一：reinforce算法",[14,24369,24370],{},[1554,24371],{"alt":44,"src":24372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24374,24375],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[178,24377,24378],{"start":84},[181,24379,24380],{},"方法二：actor-critic算法",[14,24382,24383],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24385,24386],{},"两个网络的构建：",[14,24388,24389],{},[1554,24390],{"alt":44,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24393,24394],{},"actor网路：",[14,24396,24397],{},[1554,24398],{"alt":44,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24401,24402],{},"critic网络",[14,24404,24405],{},[1554,24406],{"alt":44,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[178,24409,24410],{"start":109},[181,24411,24412],{},"网络的训练",[14,24414,24415],{},"网络描述",[14,24417,24418],{},[1554,24419],{"alt":44,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24422,24423],{},[1554,24424],{"alt":44,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24427,24428],{},"TD算法更新梯度：",[14,24430,24431],{},[1554,24432],{"alt":44,"src":24433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24435,24436],{},"策略网络更新梯度：",[14,24438,24439],{},[1554,24440],{"alt":44,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24443,24444],{},"训练整个流程的具体描述：",[14,24446,24447,24450,24451],{},[1554,24448],{"alt":44,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1554,24452],{"alt":44,"src":24453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":44,"searchDepth":84,"depth":84,"links":24455},[24456,24457],{"id":24232,"depth":84,"text":24233},{"id":24342,"depth":84,"text":24343},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24224,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24464,"title":24465,"body":24466,"description":24473,"extension":149,"meta":24523,"navigation":151,"path":24524,"seo":24525,"stem":24526,"__hash__":24527},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24467,"toc":24519},[24468,24471,24474,24478,24481,24486,24490,24493,24498,24501,24506,24511,24514],[10,24469,24465],{"id":24470},"_5alphago算法",[14,24472,24473],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[166,24475,24477],{"id":24476},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24479,24480],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24482,24483],{},[1554,24484],{"alt":44,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[166,24487,24489],{"id":24488},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24491,24492],{},"采用强化学习的方式训练策略网络",[14,24494,24495],{},[1554,24496],{"alt":44,"src":24497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24499,24500],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24502,24503],{},[1554,24504],{"alt":44,"src":24505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24507,24508],{},[1554,24509],{"alt":44,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24512,24513],{},"强化学习训练策略网络的总结：",[14,24515,24516],{},[1554,24517],{"alt":44,"src":24518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":44,"searchDepth":84,"depth":84,"links":24520},[24521,24522],{"id":24476,"depth":84,"text":24477},{"id":24488,"depth":84,"text":24489},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24465,"description":24473},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24529,"title":24530,"body":24531,"description":24538,"extension":149,"meta":24541,"navigation":151,"path":24542,"seo":24543,"stem":24544,"__hash__":24545},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24532,"toc":24539},[24533,24536],[10,24534,24530],{"id":24535},"_6价值网络",[14,24537,24538],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":44,"searchDepth":84,"depth":84,"links":24540},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24530,"description":24538},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24547,"title":24548,"body":24549,"description":24553,"extension":149,"meta":24554,"navigation":151,"path":24555,"seo":24556,"stem":24557,"__hash__":24558},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24550,"toc":24551},[],{"title":44,"searchDepth":84,"depth":84,"links":24552},[],"记录自己的强化学习笔记。",{"category":23468},"\u002Fwiki\u002F2025-12-04",{"title":24548,"description":24553},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24560,"title":24561,"body":24562,"description":148,"extension":149,"meta":24601,"navigation":151,"path":24602,"seo":24603,"stem":24604,"__hash__":24605},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24563,"toc":24599},[24564,24567,24570,24576,24579,24585,24588,24593,24596],[10,24565,24561],{"id":24566},"_1-项目概览与官方资源",[14,24568,24569],{},"官方文档：",[14,24571,24572],{},[56,24573,24574],{"href":24574,"rel":24575},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23955],[14,24577,24578],{},"官方代码仓库：",[14,24580,24581],{},[56,24582,24583],{"href":24583,"rel":24584},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23955],[14,24586,24587],{},"复现大体流程：",[14,24589,24590],{},[1554,24591],{"alt":44,"src":24592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24594,24595],{},"本教程的目标是打通这条链路：",[14,24597,24598],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":44,"searchDepth":84,"depth":84,"links":24600},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24561,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24607,"title":24608,"body":24609,"description":148,"extension":149,"meta":24725,"navigation":151,"path":24726,"seo":24727,"stem":24728,"__hash__":24729},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24610,"toc":24720},[24611,24614,24618,24621,24628,24632,24635,24644,24654,24658,24688,24691,24717],[10,24612,24608],{"id":24613},"_2-环境准备与设备连接",[166,24615,24617],{"id":24616},"_21-系统与环境","2.1 系统与环境",[14,24619,24620],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24622,24623,24624,24627],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[46,24625,24626],{},"lerobot"," 依赖。",[166,24629,24631],{"id":24630},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24633,24634],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[39,24636,24638],{"className":23912,"code":24637,"language":23914,"meta":44,"style":44},"lerobot-find-out\n",[46,24639,24640],{"__ignoreMap":44},[49,24641,24642],{"class":51,"line":52},[49,24643,24637],{"class":2055},[14,24645,24646,24647,436,24650,24653],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[46,24648,24649],{},"\u002Fdev\u002FttyACM0",[46,24651,24652],{},"\u002Fdev\u002FttyACM1","）。",[166,24655,24657],{"id":24656},"_23-串口授权","2.3 串口授权",[39,24659,24661],{"className":23912,"code":24660,"language":23914,"meta":44,"style":44},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[46,24662,24663,24677],{"__ignoreMap":44},[49,24664,24665,24668,24671,24674],{"class":51,"line":52},[49,24666,24667],{"class":2055},"sudo",[49,24669,24670],{"class":328}," chmod",[49,24672,24673],{"class":66}," 666",[49,24675,24676],{"class":328}," \u002Fdev\u002FttyACM0\n",[49,24678,24679,24681,24683,24685],{"class":51,"line":84},[49,24680,24667],{"class":2055},[49,24682,24670],{"class":328},[49,24684,24673],{"class":66},[49,24686,24687],{"class":328}," \u002Fdev\u002FttyACM1\n",[14,24689,24690],{},"说明：",[1226,24692,24693,24698,24704,24714],{},[181,24694,24695,24697],{},[46,24696,24667],{},"：以 root 权限执行命令。",[181,24699,24700,24703],{},[46,24701,24702],{},"chmod","：修改设备节点权限。",[181,24705,24706,24709,24710,24713],{},[46,24707,24708],{},"666","：",[46,24711,24712],{},"rw-rw-rw-","，所有用户可读写。",[181,24715,24716],{},"串口号必须替换为你机器上的真实端口。",[143,24718,24719],{},"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":44,"searchDepth":84,"depth":84,"links":24721},[24722,24723,24724],{"id":24616,"depth":84,"text":24617},{"id":24630,"depth":84,"text":24631},{"id":24656,"depth":84,"text":24657},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24608,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24731,"title":24732,"body":24733,"description":148,"extension":149,"meta":24894,"navigation":151,"path":24895,"seo":24896,"stem":24897,"__hash__":24898},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24734,"toc":24890},[24735,24739,24743,24749,24752,24809,24812,24816,24819,24887],[10,24736,24738],{"id":24737},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[166,24740,24742],{"id":24741},"_31-配置电机-id","3.1 配置电机 ID",[14,24744,24745,24746,24748],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[46,24747,441],{},"，需要改成机械臂链路里不冲突的编号。",[14,24750,24751],{},"方式一：用 LeRobot 命令逐步写入。",[39,24753,24755],{"className":23912,"code":24754,"language":23914,"meta":44,"style":44},"# 主臂舵机配置 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",[46,24756,24757,24762,24770,24777,24782,24786,24791,24797,24804],{"__ignoreMap":44},[49,24758,24759],{"class":51,"line":52},[49,24760,24761],{"class":283},"# 主臂舵机配置 ID\n",[49,24763,24764,24767],{"class":51,"line":84},[49,24765,24766],{"class":2055},"lerobot-setup-motors",[49,24768,24769],{"class":66}," \\\n",[49,24771,24772,24775],{"class":51,"line":109},[49,24773,24774],{"class":66},"  --teleop.type=so101_leader",[49,24776,24769],{"class":66},[49,24778,24779],{"class":51,"line":120},[49,24780,24781],{"class":66},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[49,24783,24784],{"class":51,"line":135},[49,24785,2492],{"emptyLinePlaceholder":151},[49,24787,24788],{"class":51,"line":1306},[49,24789,24790],{"class":283},"# 从臂舵机配置 ID\n",[49,24792,24793,24795],{"class":51,"line":1312},[49,24794,24766],{"class":2055},[49,24796,24769],{"class":66},[49,24798,24799,24802],{"class":51,"line":1403},[49,24800,24801],{"class":66},"  --robot.type=so101_follower",[49,24803,24769],{"class":66},[49,24805,24806],{"class":51,"line":1409},[49,24807,24808],{"class":66},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24810,24811],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[166,24813,24815],{"id":24814},"_32-机械臂校准","3.2 机械臂校准",[14,24817,24818],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[39,24820,24822],{"className":23912,"code":24821,"language":23914,"meta":44,"style":44},"# 主臂校准\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",[46,24823,24824,24829,24836,24842,24849,24854,24858,24863,24869,24875,24882],{"__ignoreMap":44},[49,24825,24826],{"class":51,"line":52},[49,24827,24828],{"class":283},"# 主臂校准\n",[49,24830,24831,24834],{"class":51,"line":84},[49,24832,24833],{"class":2055},"lerobot-calibrate",[49,24835,24769],{"class":66},[49,24837,24838,24840],{"class":51,"line":109},[49,24839,24774],{"class":66},[49,24841,24769],{"class":66},[49,24843,24844,24847],{"class":51,"line":120},[49,24845,24846],{"class":66},"  --teleop.port=\u002Fdev\u002FttyACM0",[49,24848,24769],{"class":66},[49,24850,24851],{"class":51,"line":135},[49,24852,24853],{"class":66},"  --teleop.id=my_awesome_leader_arm\n",[49,24855,24856],{"class":51,"line":1306},[49,24857,2492],{"emptyLinePlaceholder":151},[49,24859,24860],{"class":51,"line":1312},[49,24861,24862],{"class":283},"# 从臂校准\n",[49,24864,24865,24867],{"class":51,"line":1403},[49,24866,24833],{"class":2055},[49,24868,24769],{"class":66},[49,24870,24871,24873],{"class":51,"line":1409},[49,24872,24801],{"class":66},[49,24874,24769],{"class":66},[49,24876,24877,24880],{"class":51,"line":1421},[49,24878,24879],{"class":66},"  --robot.port=\u002Fdev\u002FttyACM1",[49,24881,24769],{"class":66},[49,24883,24884],{"class":51,"line":1704},[49,24885,24886],{"class":66},"  --robot.id=my_awesome_follower_arm\n",[143,24888,24889],{},"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":44,"searchDepth":84,"depth":84,"links":24891},[24892,24893],{"id":24741,"depth":84,"text":24742},{"id":24814,"depth":84,"text":24815},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24732,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24900,"title":24901,"body":24902,"description":148,"extension":149,"meta":25093,"navigation":151,"path":25094,"seo":25095,"stem":25096,"__hash__":25097},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24903,"toc":25089},[24904,24907,24911,24958,24962,24975,25038,25041,25086],[10,24905,24901],{"id":24906},"_4-遥操与相机接入",[166,24908,24910],{"id":24909},"_41-不带相机遥操","4.1 不带相机遥操",[39,24912,24914],{"className":23912,"code":24913,"language":23914,"meta":44,"style":44},"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",[46,24915,24916,24923,24929,24935,24942,24948,24954],{"__ignoreMap":44},[49,24917,24918,24921],{"class":51,"line":52},[49,24919,24920],{"class":2055},"lerobot-teleoperate",[49,24922,24769],{"class":66},[49,24924,24925,24927],{"class":51,"line":84},[49,24926,24801],{"class":66},[49,24928,24769],{"class":66},[49,24930,24931,24933],{"class":51,"line":109},[49,24932,24879],{"class":66},[49,24934,24769],{"class":66},[49,24936,24937,24940],{"class":51,"line":120},[49,24938,24939],{"class":66},"  --robot.id=my_awesome_follower_arm",[49,24941,24769],{"class":66},[49,24943,24944,24946],{"class":51,"line":135},[49,24945,24774],{"class":66},[49,24947,24769],{"class":66},[49,24949,24950,24952],{"class":51,"line":1306},[49,24951,24846],{"class":66},[49,24953,24769],{"class":66},[49,24955,24956],{"class":51,"line":1312},[49,24957,24853],{"class":66},[166,24959,24961],{"id":24960},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[39,24963,24965],{"className":23912,"code":24964,"language":23914,"meta":44,"style":44},"lerobot-find-cameras opencv\n",[46,24966,24967],{"__ignoreMap":44},[49,24968,24969,24972],{"class":51,"line":52},[49,24970,24971],{"class":2055},"lerobot-find-cameras",[49,24973,24974],{"class":328}," opencv\n",[39,24976,24978],{"className":23912,"code":24977,"language":23914,"meta":44,"style":44},"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",[46,24979,24980,24986,24992,24998,25004,25014,25020,25026,25033],{"__ignoreMap":44},[49,24981,24982,24984],{"class":51,"line":52},[49,24983,24920],{"class":2055},[49,24985,24769],{"class":66},[49,24987,24988,24990],{"class":51,"line":84},[49,24989,24801],{"class":66},[49,24991,24769],{"class":66},[49,24993,24994,24996],{"class":51,"line":109},[49,24995,24879],{"class":66},[49,24997,24769],{"class":66},[49,24999,25000,25002],{"class":51,"line":120},[49,25001,24939],{"class":66},[49,25003,24769],{"class":66},[49,25005,25006,25009,25012],{"class":51,"line":135},[49,25007,25008],{"class":66},"  --robot.cameras=",[49,25010,25011],{"class":328},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[49,25013,24769],{"class":66},[49,25015,25016,25018],{"class":51,"line":1306},[49,25017,24774],{"class":66},[49,25019,24769],{"class":66},[49,25021,25022,25024],{"class":51,"line":1312},[49,25023,24846],{"class":66},[49,25025,24769],{"class":66},[49,25027,25028,25031],{"class":51,"line":1403},[49,25029,25030],{"class":66},"  --teleop.id=my_awesome_leader_arm",[49,25032,24769],{"class":66},[49,25034,25035],{"class":51,"line":1409},[49,25036,25037],{"class":66},"  --display_data=true\n",[14,25039,25040],{},"相机参数说明：",[1226,25042,25043,25049,25055,25064,25074,25080],{},[181,25044,25045,25048],{},[46,25046,25047],{},"front","：相机名称。",[181,25050,25051,25054],{},[46,25052,25053],{},"type: opencv","：相机驱动类型。",[181,25056,25057,25060,25061,24653],{},[46,25058,25059],{},"index_or_path","：设备编号或设备路径（如 ",[46,25062,25063],{},"\u002Fdev\u002Fvideo4",[181,25065,25066,25069,25070,25073],{},[46,25067,25068],{},"width"," \u002F ",[46,25071,25072],{},"height","：图像分辨率。",[181,25075,25076,25079],{},[46,25077,25078],{},"fps","：采样帧率。",[181,25081,25082,25085],{},[46,25083,25084],{},"--display_data=true","：启用实时可视化。",[143,25087,25088],{},"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":44,"searchDepth":84,"depth":84,"links":25090},[25091,25092],{"id":24909,"depth":84,"text":24910},{"id":24960,"depth":84,"text":24961},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24901,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25099,"title":25100,"body":25101,"description":148,"extension":149,"meta":25273,"navigation":151,"path":25274,"seo":25275,"stem":25276,"__hash__":25277},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25102,"toc":25268},[25103,25107,25111,25116,25121,25124,25166,25172,25176,25225,25230,25234,25237,25245,25250,25255,25260,25265],[10,25104,25106],{"id":25105},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[166,25108,25110],{"id":25109},"_51-生成访问令牌","5.1 生成访问令牌",[14,25112,25113],{},[1554,25114],{"alt":44,"src":25115},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25117,25118],{},[1554,25119],{"alt":44,"src":25120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25122,25123],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[39,25125,25127],{"className":23912,"code":25126,"language":23914,"meta":44,"style":44},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[46,25128,25129,25142],{"__ignoreMap":44},[49,25130,25131,25134,25137,25139],{"class":51,"line":52},[49,25132,25133],{"class":59},"export",[49,25135,25136],{"class":55}," HF_TOKEN",[49,25138,60],{"class":59},[49,25140,25141],{"class":328},"\"your_huggingface_token\"\n",[49,25143,25144,25147,25150,25153,25156,25158,25161,25163],{"class":51,"line":84},[49,25145,25146],{"class":2055},"hf",[49,25148,25149],{"class":328}," auth",[49,25151,25152],{"class":328}," login",[49,25154,25155],{"class":66}," --token",[49,25157,9814],{"class":328},[49,25159,25160],{"class":55},"$HF_TOKEN",[49,25162,474],{"class":328},[49,25164,25165],{"class":66}," --add-to-git-credential\n",[14,25167,25168,25171],{},[46,25169,25170],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[166,25173,25175],{"id":25174},"_52-验证登录","5.2 验证登录",[39,25177,25179],{"className":23912,"code":25178,"language":23914,"meta":44,"style":44},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[46,25180,25181,25212],{"__ignoreMap":44},[49,25182,25183,25186,25188,25191,25193,25195,25198,25201,25204,25207,25210],{"class":51,"line":52},[49,25184,25185],{"class":55},"HF_USER",[49,25187,60],{"class":59},[49,25189,25190],{"class":55},"$(",[49,25192,25146],{"class":2055},[49,25194,25149],{"class":328},[49,25196,25197],{"class":328}," whoami",[49,25199,25200],{"class":59}," |",[49,25202,25203],{"class":2055}," head",[49,25205,25206],{"class":66}," -n",[49,25208,25209],{"class":66}," 1",[49,25211,81],{"class":55},[49,25213,25214,25217,25219,25222],{"class":51,"line":84},[49,25215,25216],{"class":66},"echo",[49,25218,9814],{"class":328},[49,25220,25221],{"class":55},"$HF_USER",[49,25223,25224],{"class":328},"\"\n",[14,25226,25227],{},[1554,25228],{"alt":44,"src":25229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[166,25231,25233],{"id":25232},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25235,25236],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1226,25238,25239,25242],{},[181,25240,25241],{},"Dataset Repo（用于上传演示数据）",[181,25243,25244],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25246,25247],{},[1554,25248],{"alt":44,"src":25249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25251,25252],{},[1554,25253],{"alt":44,"src":25254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25256,25257],{},[1554,25258],{"alt":44,"src":25259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25261,25262],{},[1554,25263],{"alt":44,"src":25264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[143,25266,25267],{},"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":44,"searchDepth":84,"depth":84,"links":25269},[25270,25271,25272],{"id":25109,"depth":84,"text":25110},{"id":25174,"depth":84,"text":25175},{"id":25232,"depth":84,"text":25233},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25100,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25279,"title":25280,"body":25281,"description":148,"extension":149,"meta":25478,"navigation":151,"path":25479,"seo":25480,"stem":25481,"__hash__":25482},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25282,"toc":25473},[25283,25287,25291,25387,25395,25400,25404,25420,25423,25427,25470],[10,25284,25286],{"id":25285},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[166,25288,25290],{"id":25289},"_61-录制示教数据","6.1 录制示教数据",[39,25292,25294],{"className":23912,"code":25293,"language":23914,"meta":44,"style":44},"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",[46,25295,25296,25303,25309,25315,25321,25330,25336,25342,25348,25355,25365,25372,25382],{"__ignoreMap":44},[49,25297,25298,25301],{"class":51,"line":52},[49,25299,25300],{"class":2055},"lerobot-record",[49,25302,24769],{"class":66},[49,25304,25305,25307],{"class":51,"line":84},[49,25306,24801],{"class":66},[49,25308,24769],{"class":66},[49,25310,25311,25313],{"class":51,"line":109},[49,25312,24879],{"class":66},[49,25314,24769],{"class":66},[49,25316,25317,25319],{"class":51,"line":120},[49,25318,24939],{"class":66},[49,25320,24769],{"class":66},[49,25322,25323,25325,25328],{"class":51,"line":135},[49,25324,25008],{"class":66},[49,25326,25327],{"class":328},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[49,25329,24769],{"class":66},[49,25331,25332,25334],{"class":51,"line":1306},[49,25333,24774],{"class":66},[49,25335,24769],{"class":66},[49,25337,25338,25340],{"class":51,"line":1312},[49,25339,24846],{"class":66},[49,25341,24769],{"class":66},[49,25343,25344,25346],{"class":51,"line":1403},[49,25345,25030],{"class":66},[49,25347,24769],{"class":66},[49,25349,25350,25353],{"class":51,"line":1409},[49,25351,25352],{"class":66},"  --display_data=true",[49,25354,24769],{"class":66},[49,25356,25357,25360,25363],{"class":51,"line":1421},[49,25358,25359],{"class":66},"  --dataset.repo_id=",[49,25361,25362],{"class":328},"\"Embodied-AI-6\u002Fso101_test\"",[49,25364,24769],{"class":66},[49,25366,25367,25370],{"class":51,"line":1704},[49,25368,25369],{"class":66},"  --dataset.num_episodes=10",[49,25371,24769],{"class":66},[49,25373,25374,25377,25380],{"class":51,"line":1709},[49,25375,25376],{"class":66},"  --dataset.single_task=",[49,25378,25379],{"class":328},"\"Grab the green cube\"",[49,25381,24769],{"class":66},[49,25383,25384],{"class":51,"line":1715},[49,25385,25386],{"class":66},"  --resume=true\n",[1226,25388,25389],{},[181,25390,25391,25394],{},[46,25392,25393],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25396,25397],{},[1554,25398],{"alt":44,"src":25399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[166,25401,25403],{"id":25402},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[39,25405,25407],{"className":23912,"code":25406,"language":23914,"meta":44,"style":44},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[46,25408,25409],{"__ignoreMap":44},[49,25410,25411,25414,25417],{"class":51,"line":52},[49,25412,25413],{"class":2055},"rm",[49,25415,25416],{"class":66}," -rf",[49,25418,25419],{"class":328}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25421,25422],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[166,25424,25426],{"id":25425},"_63-回放指定-episode","6.3 回放指定 episode",[39,25428,25430],{"className":23912,"code":25429,"language":23914,"meta":44,"style":44},"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",[46,25431,25432,25439,25445,25451,25457,25465],{"__ignoreMap":44},[49,25433,25434,25437],{"class":51,"line":52},[49,25435,25436],{"class":2055},"lerobot-replay",[49,25438,24769],{"class":66},[49,25440,25441,25443],{"class":51,"line":84},[49,25442,24801],{"class":66},[49,25444,24769],{"class":66},[49,25446,25447,25449],{"class":51,"line":109},[49,25448,24879],{"class":66},[49,25450,24769],{"class":66},[49,25452,25453,25455],{"class":51,"line":120},[49,25454,24939],{"class":66},[49,25456,24769],{"class":66},[49,25458,25459,25461,25463],{"class":51,"line":135},[49,25460,25359],{"class":66},[49,25462,25362],{"class":328},[49,25464,24769],{"class":66},[49,25466,25467],{"class":51,"line":1306},[49,25468,25469],{"class":66},"  --dataset.episode=0\n",[143,25471,25472],{},"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":44,"searchDepth":84,"depth":84,"links":25474},[25475,25476,25477],{"id":25289,"depth":84,"text":25290},{"id":25402,"depth":84,"text":25403},{"id":25425,"depth":84,"text":25426},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25280,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25484,"title":25485,"body":25486,"description":148,"extension":149,"meta":25614,"navigation":151,"path":25615,"seo":25616,"stem":25617,"__hash__":25618},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25487,"toc":25612},[25488,25492,25555,25558,25605,25610],[10,25489,25491],{"id":25490},"_7-act-模型训练","7. ACT 模型训练",[39,25493,25495],{"className":23912,"code":25494,"language":23914,"meta":44,"style":44},"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",[46,25496,25497,25504,25512,25519,25526,25533,25540,25547],{"__ignoreMap":44},[49,25498,25499,25502],{"class":51,"line":52},[49,25500,25501],{"class":2055},"lerobot-train",[49,25503,24769],{"class":66},[49,25505,25506,25508,25510],{"class":51,"line":84},[49,25507,25359],{"class":66},[49,25509,25362],{"class":328},[49,25511,24769],{"class":66},[49,25513,25514,25517],{"class":51,"line":109},[49,25515,25516],{"class":66},"  --policy.type=act",[49,25518,24769],{"class":66},[49,25520,25521,25524],{"class":51,"line":120},[49,25522,25523],{"class":66},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[49,25525,24769],{"class":66},[49,25527,25528,25531],{"class":51,"line":135},[49,25529,25530],{"class":66},"  --job_name=act_so101_test",[49,25532,24769],{"class":66},[49,25534,25535,25538],{"class":51,"line":1306},[49,25536,25537],{"class":66},"  --policy.device=cuda",[49,25539,24769],{"class":66},[49,25541,25542,25545],{"class":51,"line":1312},[49,25543,25544],{"class":66},"  --wandb.enable=false",[49,25546,24769],{"class":66},[49,25548,25549,25552],{"class":51,"line":1403},[49,25550,25551],{"class":66},"  --policy.repo_id=",[49,25553,25554],{"class":328},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25556,25557],{},"参数说明：",[1226,25559,25560,25566,25572,25578,25584,25593,25599],{},[181,25561,25562,25565],{},[46,25563,25564],{},"--dataset.repo_id","：训练数据集仓库。",[181,25567,25568,25571],{},[46,25569,25570],{},"--policy.type=act","：策略模型类型为 ACT。",[181,25573,25574,25577],{},[46,25575,25576],{},"--output_dir","：本地训练输出目录。",[181,25579,25580,25583],{},[46,25581,25582],{},"--job_name","：训练任务名称。",[181,25585,25586,25589,25590,24653],{},[46,25587,25588],{},"--policy.device","：训练设备（如 ",[46,25591,25592],{},"cuda",[181,25594,25595,25598],{},[46,25596,25597],{},"--wandb.enable","：是否启用 WandB 可视化。",[181,25600,25601,25604],{},[46,25602,25603],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25606,25607],{},[1554,25608],{"alt":44,"src":25609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[143,25611,25472],{},{"title":44,"searchDepth":84,"depth":84,"links":25613},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25485,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25620,"title":25621,"body":25622,"description":148,"extension":149,"meta":25709,"navigation":151,"path":25710,"seo":25711,"stem":25712,"__hash__":25713},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25623,"toc":25707},[25624,25627,25630,25697,25705],[10,25625,25621],{"id":25626},"_8-策略部署与自动采集",[14,25628,25629],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[39,25631,25633],{"className":23912,"code":25632,"language":23914,"meta":44,"style":44},"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",[46,25634,25635,25641,25647,25653,25661,25667,25674,25682,25690],{"__ignoreMap":44},[49,25636,25637,25639],{"class":51,"line":52},[49,25638,25300],{"class":2055},[49,25640,24769],{"class":66},[49,25642,25643,25645],{"class":51,"line":84},[49,25644,24801],{"class":66},[49,25646,24769],{"class":66},[49,25648,25649,25651],{"class":51,"line":109},[49,25650,24879],{"class":66},[49,25652,24769],{"class":66},[49,25654,25655,25657,25659],{"class":51,"line":120},[49,25656,25008],{"class":66},[49,25658,25327],{"class":328},[49,25660,24769],{"class":66},[49,25662,25663,25665],{"class":51,"line":135},[49,25664,24939],{"class":66},[49,25666,24769],{"class":66},[49,25668,25669,25672],{"class":51,"line":1306},[49,25670,25671],{"class":66},"  --display_data=false",[49,25673,24769],{"class":66},[49,25675,25676,25678,25680],{"class":51,"line":1312},[49,25677,25359],{"class":66},[49,25679,25362],{"class":328},[49,25681,24769],{"class":66},[49,25683,25684,25686,25688],{"class":51,"line":1403},[49,25685,25376],{"class":66},[49,25687,25379],{"class":328},[49,25689,24769],{"class":66},[49,25691,25692,25695],{"class":51,"line":1409},[49,25693,25694],{"class":66},"  --policy.path=",[49,25696,25554],{"class":328},[1226,25698,25699],{},[181,25700,25701,25704],{},[46,25702,25703],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[143,25706,25472],{},{"title":44,"searchDepth":84,"depth":84,"links":25708},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25621,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25715,"title":25716,"body":25717,"description":148,"extension":149,"meta":25746,"navigation":151,"path":25747,"seo":25748,"stem":25749,"__hash__":25750},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25718,"toc":25744},[25719,25723,25726,25732,25735,25741],[10,25720,25722],{"id":25721},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25724,25725],{},"项目地址：",[14,25727,25728],{},[56,25729,25730],{"href":25730,"rel":25731},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23955],[14,25733,25734],{},"参考教程：",[14,25736,25737],{},[56,25738,25739],{"href":25739,"rel":25740},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23955],[14,25742,25743],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":44,"searchDepth":84,"depth":84,"links":25745},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25716,"description":148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25752,"title":25753,"body":25754,"description":25758,"extension":149,"meta":25759,"navigation":151,"path":25760,"seo":25761,"stem":25762,"__hash__":25763},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25755,"toc":25756},[],{"title":44,"searchDepth":84,"depth":84,"links":25757},[],"act复现",{"category":23468},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25753,"description":25758},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25765,"title":25766,"body":25767,"description":44,"extension":149,"meta":26069,"navigation":151,"path":26070,"seo":26071,"stem":26072,"__hash__":26073},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25768,"toc":26061},[25769,25772,25776,25786,25793,25800,25803,25810,25813,25816,25820,25832,25836,25882,25885,25888,25891,25894,25897,25901,25939,25945,25949,26003,26008,26011,26014,26019,26022,26027,26030,26033,26037,26040,26043,26047],[10,25770,25766],{"id":25771},"_1简介",[195,25773,25775],{"id":25774},"_11什么是-docker","1.1什么是 Docker？",[14,25777,25778,25779,25782,25783],{},"Docker 是一个开源的 ",[373,25780,25781],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[373,25784,25785],{},"一次构建，到处运行。",[14,25787,25788,25789,25792],{},"“ ",[373,25790,25791],{},"一次构建，到处运行"," ”也就是说：",[178,25794,25795],{},[181,25796,25797],{},[373,25798,25799],{},"之前：",[14,25801,25802],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[178,25804,25805],{},[181,25806,25807],{},[373,25808,25809],{},"使用docker后：",[14,25811,25812],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25814,25815],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[195,25817,25819],{"id":25818},"_12它是怎么工作的","1.2.它是怎么工作的？",[1226,25821,25822,25825],{},[181,25823,25824],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[181,25826,25827,25828,25831],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[373,25829,25830],{},"无论在哪运行都一样稳定"," 。",[195,25833,25835],{"id":25834},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[361,25837,25838,25848],{},[364,25839,25840],{},[367,25841,25842,25845],{},[370,25843,25844],{"align":23826},"概念",[370,25846,25847],{"align":23826},"解释",[408,25849,25850,25858,25866,25874],{},[367,25851,25852,25855],{},[413,25853,25854],{"align":23826},"镜像",[413,25856,25857],{"align":23826},"Image，运行容器的模板，像是一个应用快照",[367,25859,25860,25863],{},[413,25861,25862],{"align":23826},"容器",[413,25864,25865],{"align":23826},"Container，运行中的镜像实例，有自己的文件系统、网络等",[367,25867,25868,25871],{},[413,25869,25870],{"align":23826},"Dockerfile",[413,25872,25873],{"align":23826},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[367,25875,25876,25879],{},[413,25877,25878],{"align":23826},"仓库",[413,25880,25881],{"align":23826},"Registry，存放镜像的地方，比如 Docker Hub",[14,25883,25884],{},"抽象化理解:",[14,25886,25887],{},"Docker镜像≈C++类",[14,25889,25890],{},"Docker容器≈C++类实例(即对象)",[14,25892,25893],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25895,25896],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[195,25898,25900],{"id":25899},"_14类比理解","1.4.类比理解",[361,25902,25903,25913],{},[364,25904,25905],{},[367,25906,25907,25910],{},[370,25908,25909],{"align":23826},"传统部署",[370,25911,25912],{"align":23826},"Docker部署",[408,25914,25915,25923,25931],{},[367,25916,25917,25920],{},[413,25918,25919],{"align":23826},"手动安装依赖、调试版本不一致问题",[413,25921,25922],{"align":23826},"一次打包环境和代码",[367,25924,25925,25928],{},[413,25926,25927],{"align":23826},"程序“裸奔”跑在系统上",[413,25929,25930],{"align":23826},"程序“穿着容器”隔离运行",[367,25932,25933,25936],{},[413,25934,25935],{"align":23826},"容易“在我电脑上能跑”",[413,25937,25938],{"align":23826},"保证“无论在哪都能跑”",[14,25940,25941,25942],{},"就像快递包裹： ",[373,25943,25944],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[195,25946,25948],{"id":25947},"_15docker-的核心优势","1.5.Docker 的核心优势",[361,25950,25951,25961],{},[364,25952,25953],{},[367,25954,25955,25958],{},[370,25956,25957],{"align":23826},"优势",[370,25959,25960],{"align":23826},"说明",[408,25962,25963,25971,25979,25987,25995],{},[367,25964,25965,25968],{},[413,25966,25967],{"align":23826},"轻量级",[413,25969,25970],{"align":23826},"基于系统内核共享，启动速度快，占资源少",[367,25972,25973,25976],{},[413,25974,25975],{"align":23826},"跨平台",[413,25977,25978],{"align":23826},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[367,25980,25981,25984],{},[413,25982,25983],{"align":23826},"易于迁移部署",[413,25985,25986],{"align":23826},"应用和环境一起封装，不怕依赖不一致",[367,25988,25989,25992],{},[413,25990,25991],{"align":23826},"易于版本控制",[413,25993,25994],{"align":23826},"镜像版本可控，支持回滚",[367,25996,25997,26000],{},[413,25998,25999],{"align":23826},"生态丰富",[413,26001,26002],{"align":23826},"Docker Hub 上有成千上万的现成镜像可用",[178,26004,26005],{},[181,26006,26007],{},"在Linux上可以几乎实现无性能损失。",[14,26009,26010],{},"docker里的发行版和本机共用Linux内核。",[14,26012,26013],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[178,26015,26016],{},[181,26017,26018],{},"可以快速部署在绝大多数Linux发行版",[14,26020,26021],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[178,26023,26024],{},[181,26025,26026],{},"配置环境简单",[14,26028,26029],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26031,26032],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[178,26034,26035],{},[181,26036,25999],{},[14,26038,26039],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26041,26042],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[195,26044,26046],{"id":26045},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1226,26048,26049,26052,26055,26058],{},[181,26050,26051],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[181,26053,26054],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[181,26056,26057],{},"微服务架构：每个服务一个容器，灵活组合",[181,26059,26060],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":44,"searchDepth":84,"depth":84,"links":26062},[26063,26064,26065,26066,26067,26068],{"id":25774,"depth":109,"text":25775},{"id":25818,"depth":109,"text":25819},{"id":25834,"depth":109,"text":25835},{"id":25899,"depth":109,"text":25900},{"id":25947,"depth":109,"text":25948},{"id":26045,"depth":109,"text":26046},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25766,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26075,"title":26076,"body":26077,"description":44,"extension":149,"meta":26810,"navigation":151,"path":26811,"seo":26812,"stem":26813,"__hash__":26814},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26078,"toc":26805},[26079,26082,26086,26089,26092,26098,26104,26108,26117,26120,26177,26180,26231,26234,26317,26320,26357,26361,26372,26385,26392,26395,26475,26478,26528,26531,26554,26558,26565,26568,26584,26590,26593,26609,26615,26618,26634,26648,26654,26674,26680,26683,26695,26701,26704,26718,26724,26727,26747,26752,26755,26758,26762,26765,26768,26771,26778,26781,26784,26787,26792,26797,26802],[10,26080,26076],{"id":26081},"_2安装docker",[195,26083,26085],{"id":26084},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26087,26088],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26090,26091],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26093,26094],{},[56,26095,26096],{"href":26096,"rel":26097},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23955],[14,26099,26100],{},[56,26101,26102],{"href":26102,"rel":26103},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23955],[22088,26105,26107],{"id":26106},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26109,26110,26111,26116],{},"以下内容根据 ",[56,26112,26115],{"href":26113,"rel":26114},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23955],"官方文档"," 修改而来。",[14,26118,26119],{},"如果你过去安装过 docker，先删掉：",[39,26121,26123],{"className":23912,"code":26122,"language":23914,"meta":44,"style":44},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[46,26124,26125],{"__ignoreMap":44},[49,26126,26127,26129,26132,26135,26138,26141,26144,26147,26150,26153,26156,26159,26162,26165,26168,26171,26174],{"class":51,"line":52},[49,26128,3117],{"class":59},[49,26130,26131],{"class":55}," pkg ",[49,26133,26134],{"class":59},"in",[49,26136,26137],{"class":328}," docker.io",[49,26139,26140],{"class":328}," docker-doc",[49,26142,26143],{"class":328}," docker-compose",[49,26145,26146],{"class":328}," docker-compose-v2",[49,26148,26149],{"class":328}," podman-docker",[49,26151,26152],{"class":328}," containerd",[49,26154,26155],{"class":328}," runc",[49,26157,26158],{"class":55},"; ",[49,26160,26161],{"class":59},"do",[49,26163,26164],{"class":2055}," sudo",[49,26166,26167],{"class":328}," apt-get",[49,26169,26170],{"class":328}," remove",[49,26172,26173],{"class":55}," $pkg; ",[49,26175,26176],{"class":59},"done\n",[14,26178,26179],{},"首先安装依赖和GPG：",[39,26181,26185],{"className":26182,"code":26183,"language":26184,"meta":44,"style":44},"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",[46,26186,26187,26192,26197,26202,26207,26212,26217,26221,26226],{"__ignoreMap":44},[49,26188,26189],{"class":51,"line":52},[49,26190,26191],{},"# Add Docker's official GPG key:\n",[49,26193,26194],{"class":51,"line":84},[49,26195,26196],{},"sudo apt-get update\n",[49,26198,26199],{"class":51,"line":109},[49,26200,26201],{},"sudo apt-get install ca-certificates curl\n",[49,26203,26204],{"class":51,"line":120},[49,26205,26206],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[49,26208,26209],{"class":51,"line":135},[49,26210,26211],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[49,26213,26214],{"class":51,"line":1306},[49,26215,26216],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[49,26218,26219],{"class":51,"line":1312},[49,26220,2492],{"emptyLinePlaceholder":151},[49,26222,26223],{"class":51,"line":1403},[49,26224,26225],{},"# 如果上面这行报错就弄下面这行\n",[49,26227,26228],{"class":51,"line":1409},[49,26229,26230],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26232,26233],{},"信任 Docker 的 GPG 公钥并添加仓库：",[39,26235,26237],{"className":23912,"code":26236,"language":23914,"meta":44,"style":44},"# 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",[46,26238,26239,26244,26250,26267,26300],{"__ignoreMap":44},[49,26240,26241],{"class":51,"line":52},[49,26242,26243],{"class":283},"# Add the repository to Apt sources:\n",[49,26245,26246,26248],{"class":51,"line":84},[49,26247,25216],{"class":66},[49,26249,24769],{"class":66},[49,26251,26252,26255,26258,26261,26264],{"class":51,"line":109},[49,26253,26254],{"class":328},"  \"deb [arch=$(",[49,26256,26257],{"class":2055},"dpkg",[49,26259,26260],{"class":66}," --print-architecture",[49,26262,26263],{"class":328},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[49,26265,26266],{"class":66},"\\\n",[49,26268,26269,26272,26274,26276,26279,26282,26284,26286,26289,26291,26293,26296,26298],{"class":51,"line":120},[49,26270,26271],{"class":328},"  \"",[49,26273,25190],{"class":55},[49,26275,777],{"class":66},[49,26277,26278],{"class":328}," \u002Fetc\u002Fos-release",[49,26280,26281],{"class":55}," && ",[49,26283,25216],{"class":66},[49,26285,9814],{"class":328},[49,26287,26288],{"class":55},"$VERSION_CODENAME",[49,26290,474],{"class":328},[49,26292,649],{"class":55},[49,26294,26295],{"class":328},"\" stable\"",[49,26297,25200],{"class":59},[49,26299,24769],{"class":66},[49,26301,26302,26305,26308,26311,26314],{"class":51,"line":135},[49,26303,26304],{"class":2055},"  sudo",[49,26306,26307],{"class":328}," tee",[49,26309,26310],{"class":328}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[49,26312,26313],{"class":59}," >",[49,26315,26316],{"class":328}," \u002Fdev\u002Fnull\n",[14,26318,26319],{},"最后安装",[39,26321,26323],{"className":23912,"code":26322,"language":23914,"meta":44,"style":44},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,26324,26325,26334],{"__ignoreMap":44},[49,26326,26327,26329,26331],{"class":51,"line":52},[49,26328,24667],{"class":2055},[49,26330,26167],{"class":328},[49,26332,26333],{"class":328}," update\n",[49,26335,26336,26338,26340,26342,26345,26348,26351,26354],{"class":51,"line":84},[49,26337,24667],{"class":2055},[49,26339,26167],{"class":328},[49,26341,23924],{"class":328},[49,26343,26344],{"class":328}," docker-ce",[49,26346,26347],{"class":328}," docker-ce-cli",[49,26349,26350],{"class":328}," containerd.io",[49,26352,26353],{"class":328}," docker-buildx-plugin",[49,26355,26356],{"class":328}," docker-compose-plugin\n",[22088,26358,26360],{"id":26359},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26362,26363,26364,26367,26368,26371],{},"查看自己自己包管理工具版本（dnf是 ",[373,26365,26366],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[373,26369,26370],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[39,26373,26375],{"className":23912,"code":26374,"language":23914,"meta":44,"style":44},"dnf --version\n",[46,26376,26377],{"__ignoreMap":44},[49,26378,26379,26382],{"class":51,"line":52},[49,26380,26381],{"class":2055},"dnf",[49,26383,26384],{"class":66}," --version\n",[14,26386,26110,26387,26391],{},[56,26388,26115],{"href":26389,"rel":26390},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23955]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26393,26394],{},"如果你之前安装过 docker，请先删掉",[39,26396,26398],{"className":23912,"code":26397,"language":23914,"meta":44,"style":44},"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",[46,26399,26400,26414,26421,26428,26435,26442,26449,26456,26463,26470],{"__ignoreMap":44},[49,26401,26402,26404,26407,26409,26412],{"class":51,"line":52},[49,26403,24667],{"class":2055},[49,26405,26406],{"class":328}," dnf",[49,26408,26170],{"class":328},[49,26410,26411],{"class":328}," docker",[49,26413,24769],{"class":66},[49,26415,26416,26419],{"class":51,"line":84},[49,26417,26418],{"class":328},"                  docker-client",[49,26420,24769],{"class":66},[49,26422,26423,26426],{"class":51,"line":109},[49,26424,26425],{"class":328},"                  docker-client-latest",[49,26427,24769],{"class":66},[49,26429,26430,26433],{"class":51,"line":120},[49,26431,26432],{"class":328},"                  docker-common",[49,26434,24769],{"class":66},[49,26436,26437,26440],{"class":51,"line":135},[49,26438,26439],{"class":328},"                  docker-latest",[49,26441,24769],{"class":66},[49,26443,26444,26447],{"class":51,"line":1306},[49,26445,26446],{"class":328},"                  docker-latest-logrotate",[49,26448,24769],{"class":66},[49,26450,26451,26454],{"class":51,"line":1312},[49,26452,26453],{"class":328},"                  docker-logrotate",[49,26455,24769],{"class":66},[49,26457,26458,26461],{"class":51,"line":1403},[49,26459,26460],{"class":328},"                  docker-selinux",[49,26462,24769],{"class":66},[49,26464,26465,26468],{"class":51,"line":1409},[49,26466,26467],{"class":328},"                  docker-engine-selinux",[49,26469,24769],{"class":66},[49,26471,26472],{"class":51,"line":1421},[49,26473,26474],{"class":328},"                  docker-engine\n",[14,26476,26477],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[39,26479,26481],{"className":23912,"code":26480,"language":23914,"meta":44,"style":44},"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",[46,26482,26483,26497,26512],{"__ignoreMap":44},[49,26484,26485,26487,26489,26492,26494],{"class":51,"line":52},[49,26486,24667],{"class":2055},[49,26488,26406],{"class":328},[49,26490,26491],{"class":66}," -y",[49,26493,23924],{"class":328},[49,26495,26496],{"class":328}," dnf-plugins-core\n",[49,26498,26499,26501,26503,26506,26509],{"class":51,"line":84},[49,26500,24667],{"class":2055},[49,26502,26406],{"class":328},[49,26504,26505],{"class":328}," config-manager",[49,26507,26508],{"class":328}," addrepo",[49,26510,26511],{"class":66}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[49,26513,26514,26516,26519,26522,26525],{"class":51,"line":109},[49,26515,24667],{"class":2055},[49,26517,26518],{"class":328}," sed",[49,26520,26521],{"class":66}," -i",[49,26523,26524],{"class":328}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[49,26526,26527],{"class":328}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26529,26530],{},"最后安装：",[39,26532,26534],{"className":23912,"code":26533,"language":23914,"meta":44,"style":44},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,26535,26536],{"__ignoreMap":44},[49,26537,26538,26540,26542,26544,26546,26548,26550,26552],{"class":51,"line":52},[49,26539,24667],{"class":2055},[49,26541,26406],{"class":328},[49,26543,23924],{"class":328},[49,26545,26344],{"class":328},[49,26547,26347],{"class":328},[49,26549,26350],{"class":328},[49,26551,26353],{"class":328},[49,26553,26356],{"class":328},[195,26555,26557],{"id":26556},"_22配置环境","2.2.配置环境",[22088,26559,26561,26564],{"id":26560},"_221检查-docker-服务状态",[373,26562,26563],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26566,26567],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[39,26569,26571],{"className":23912,"code":26570,"language":23914,"meta":44,"style":44},"systemctl status docker\n",[46,26572,26573],{"__ignoreMap":44},[49,26574,26575,26578,26581],{"class":51,"line":52},[49,26576,26577],{"class":2055},"systemctl",[49,26579,26580],{"class":328}," status",[49,26582,26583],{"class":328}," docker\n",[22088,26585,26587,26564],{"id":26586},"_222启动-docker-服务",[373,26588,26589],{},"2.2.2.启动 Docker 服务",[14,26591,26592],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[39,26594,26596],{"className":23912,"code":26595,"language":23914,"meta":44,"style":44},"sudo systemctl start docker\n",[46,26597,26598],{"__ignoreMap":44},[49,26599,26600,26602,26605,26607],{"class":51,"line":52},[49,26601,24667],{"class":2055},[49,26603,26604],{"class":328}," systemctl",[49,26606,4276],{"class":328},[49,26608,26583],{"class":328},[22088,26610,26612,26564],{"id":26611},"_223设置-docker-开机自启",[373,26613,26614],{},"2.2.3.设置 Docker 开机自启",[14,26616,26617],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[39,26619,26621],{"className":23912,"code":26620,"language":23914,"meta":44,"style":44},"sudo systemctl enable docker\n",[46,26622,26623],{"__ignoreMap":44},[49,26624,26625,26627,26629,26632],{"class":51,"line":52},[49,26626,24667],{"class":2055},[49,26628,26604],{"class":328},[49,26630,26631],{"class":328}," enable",[49,26633,26583],{"class":328},[22088,26635,26637,13885,26640,13885,26645,26564],{"id":26636},"_224将用户添加到-docker-组",[373,26638,26639],{},"2.2.4.将用户添加到",[373,26641,26642],{},[46,26643,26644],{},"docker",[373,26646,26647],{},"组",[14,26649,26650,26651,26653],{},"使用以下命令将当前用户添加到 ",[46,26652,26644],{}," 组：",[39,26655,26657],{"className":23912,"code":26656,"language":23914,"meta":44,"style":44},"sudo usermod -aG docker $USER\n",[46,26658,26659],{"__ignoreMap":44},[49,26660,26661,26663,26666,26669,26671],{"class":51,"line":52},[49,26662,24667],{"class":2055},[49,26664,26665],{"class":328}," usermod",[49,26667,26668],{"class":66}," -aG",[49,26670,26411],{"class":328},[49,26672,26673],{"class":55}," $USER\n",[22088,26675,26677,26564],{"id":26676},"_225退出并重新登录",[373,26678,26679],{},"2.2.5.退出并重新登录",[14,26681,26682],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[39,26684,26686],{"className":23912,"code":26685,"language":23914,"meta":44,"style":44},"newgrp docker\n",[46,26687,26688],{"__ignoreMap":44},[49,26689,26690,26693],{"class":51,"line":52},[49,26691,26692],{"class":2055},"newgrp",[49,26694,26583],{"class":328},[22088,26696,26698,26564],{"id":26697},"_226重新启动-docker-服务如果需要",[373,26699,26700],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26702,26703],{},"确保 Docker 服务正在运行，可以使用以下命令：",[39,26705,26706],{"className":23912,"code":26595,"language":23914,"meta":44,"style":44},[46,26707,26708],{"__ignoreMap":44},[49,26709,26710,26712,26714,26716],{"class":51,"line":52},[49,26711,24667],{"class":2055},[49,26713,26604],{"class":328},[49,26715,4276],{"class":328},[49,26717,26583],{"class":328},[22088,26719,26721,26564],{"id":26720},"_227重启电脑后检查-docker-服务状态",[373,26722,26723],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26725,26726],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[39,26728,26730],{"className":23912,"code":26729,"language":23914,"meta":44,"style":44},"sudo reboot\nsystemctl status docker\n",[46,26731,26732,26739],{"__ignoreMap":44},[49,26733,26734,26736],{"class":51,"line":52},[49,26735,24667],{"class":2055},[49,26737,26738],{"class":328}," reboot\n",[49,26740,26741,26743,26745],{"class":51,"line":84},[49,26742,26577],{"class":2055},[49,26744,26580],{"class":328},[49,26746,26583],{"class":328},[14,26748,26749],{},[1554,26750],{"alt":44,"src":26751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26753,26754],{},"第三行显示enabled说明开机自启动成功",[14,26756,26757],{},"按q退出",[195,26759,26761],{"id":26760},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26763,26764],{},"优先使用linux来使用docker是比较好的",[14,26766,26767],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26769,26770],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26772,26773,26774],{},"官方下载安装:",[56,26775,26776],{"href":26776,"rel":26777},"https:\u002F\u002Fwww.docker.com\u002F",[23955],[14,26779,26780],{},"Windows的Docker显卡直通与USB直通:",[14,26782,26783],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26785,26786],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26788,26789],{},[1554,26790],{"alt":44,"src":26791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26793,26794],{},[1554,26795],{"alt":44,"src":26796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26798,26799],{},[1554,26800],{"alt":44,"src":26801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[143,26803,26804],{},"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":44,"searchDepth":84,"depth":84,"links":26806},[26807,26808,26809],{"id":26084,"depth":109,"text":26085},{"id":26556,"depth":109,"text":26557},{"id":26760,"depth":109,"text":26761},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26076,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26816,"title":26817,"body":26818,"description":26825,"extension":149,"meta":27518,"navigation":151,"path":27519,"seo":27520,"stem":27521,"__hash__":27522},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26819,"toc":27512},[26820,26823,26826,26830,26835,26840,26843,26871,26876,26885,26888,26893,26897,26904,26909,26915,26919,26922,26926,26931,27023,27028,27046,27051,27072,27077,27093,27097,27102,27131,27136,27182,27187,27231,27239,27256,27261,27277,27282,27296,27299,27302,27305,27308,27337,27340,27345,27349,27352,27355,27361,27364,27367,27370,27432,27439,27444,27447,27465,27469,27472,27489,27492,27495,27509],[10,26821,26817],{"id":26822},"_3docker直通",[14,26824,26825],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[195,26827,26829],{"id":26828},"_31usb直通","3.1.USB直通",[14,26831,26832],{},[1554,26833],{"alt":44,"src":26834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[178,26836,26837],{},[181,26838,26839],{},"方法一(不是很推荐新手)：",[14,26841,26842],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[39,26844,26846],{"className":23912,"code":26845,"language":23914,"meta":44,"style":44},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[46,26847,26848,26856,26861],{"__ignoreMap":44},[49,26849,26850,26853],{"class":51,"line":52},[49,26851,26852],{"class":2055},"ls",[49,26854,26855],{"class":328}," \u002Fdev\n",[49,26857,26858],{"class":51,"line":84},[49,26859,26860],{"class":283},"#例如\n",[49,26862,26863,26866,26868],{"class":51,"line":109},[49,26864,26865],{"class":55},"--device",[49,26867,60],{"class":59},[49,26869,26870],{"class":328},"\u002Fdev\u002Ftty_USB0\n",[178,26872,26873],{"start":84},[181,26874,26875],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[39,26877,26879],{"className":23912,"code":26878,"language":23914,"meta":44,"style":44},"--privileged\n",[46,26880,26881],{"__ignoreMap":44},[49,26882,26883],{"class":51,"line":52},[49,26884,26878],{"class":2055},[14,26886,26887],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26889,26890],{},[1554,26891],{"alt":44,"src":26892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[195,26894,26896],{"id":26895},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26898,26899,26900,26903],{},"NVIDIA Container Toolkit使用户 ",[373,26901,26902],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26905,26906],{},[1554,26907],{"alt":44,"src":26908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26910,26911],{},[56,26912,26913],{"href":26913,"rel":26914},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23955],[22088,26916,26918],{"id":26917},"_321安装","3.2.1.安装",[14,26920,26921],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23000,26923,26925],{"id":26924},"_3211ubuntu","3.2.1.1.Ubuntu",[178,26927,26928],{},[181,26929,26930],{},"配置存储库 并更新",[39,26932,26934],{"className":23912,"code":26933,"language":23914,"meta":44,"style":44},"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",[46,26935,26936,26965,26985,26997,27009,27015],{"__ignoreMap":44},[49,26937,26938,26941,26944,26947,26949,26951,26954,26957,26960,26963],{"class":51,"line":52},[49,26939,26940],{"class":2055},"curl",[49,26942,26943],{"class":66}," -fsSL",[49,26945,26946],{"class":328}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[49,26948,25200],{"class":59},[49,26950,26164],{"class":2055},[49,26952,26953],{"class":328}," gpg",[49,26955,26956],{"class":66}," --dearmor",[49,26958,26959],{"class":66}," -o",[49,26961,26962],{"class":328}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[49,26964,24769],{"class":66},[49,26966,26967,26970,26972,26975,26978,26981,26983],{"class":51,"line":84},[49,26968,26969],{"class":55},"  && ",[49,26971,26940],{"class":2055},[49,26973,26974],{"class":66}," -s",[49,26976,26977],{"class":66}," -L",[49,26979,26980],{"class":328}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[49,26982,25200],{"class":59},[49,26984,24769],{"class":66},[49,26986,26987,26990,26993,26995],{"class":51,"line":109},[49,26988,26989],{"class":2055},"    sed",[49,26991,26992],{"class":328}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[49,26994,25200],{"class":59},[49,26996,24769],{"class":66},[49,26998,26999,27002,27004,27007],{"class":51,"line":120},[49,27000,27001],{"class":2055},"    sudo",[49,27003,26307],{"class":328},[49,27005,27006],{"class":328}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[49,27008,24769],{"class":66},[49,27010,27011,27013],{"class":51,"line":135},[49,27012,26969],{"class":55},[49,27014,26266],{"class":66},[49,27016,27017,27019,27021],{"class":51,"line":1306},[49,27018,27001],{"class":2055},[49,27020,26167],{"class":328},[49,27022,26333],{"class":328},[178,27024,27025],{"start":84},[181,27026,27027],{},"安装nvidia-docker2",[39,27029,27031],{"className":23912,"code":27030,"language":23914,"meta":44,"style":44},"sudo apt-get install -y nvidia-docker2\n",[46,27032,27033],{"__ignoreMap":44},[49,27034,27035,27037,27039,27041,27043],{"class":51,"line":52},[49,27036,24667],{"class":2055},[49,27038,26167],{"class":328},[49,27040,23924],{"class":328},[49,27042,26491],{"class":66},[49,27044,27045],{"class":328}," nvidia-docker2\n",[178,27047,27048],{"start":109},[181,27049,27050],{},"使用nvidia-ctk命令配置container runtime",[39,27052,27054],{"className":23912,"code":27053,"language":23914,"meta":44,"style":44},"sudo nvidia-ctk runtime configure --runtime=docker\n",[46,27055,27056],{"__ignoreMap":44},[49,27057,27058,27060,27063,27066,27069],{"class":51,"line":52},[49,27059,24667],{"class":2055},[49,27061,27062],{"class":328}," nvidia-ctk",[49,27064,27065],{"class":328}," runtime",[49,27067,27068],{"class":328}," configure",[49,27070,27071],{"class":66}," --runtime=docker\n",[178,27073,27074],{"start":120},[181,27075,27076],{},"重启docker服务:",[39,27078,27080],{"className":23912,"code":27079,"language":23914,"meta":44,"style":44},"sudo systemctl restart docker\n",[46,27081,27082],{"__ignoreMap":44},[49,27083,27084,27086,27088,27091],{"class":51,"line":52},[49,27085,24667],{"class":2055},[49,27087,26604],{"class":328},[49,27089,27090],{"class":328}," restart",[49,27092,26583],{"class":328},[23000,27094,27096],{"id":27095},"_3212fedora","3.2.1.2.Fedora",[178,27098,27099],{},[181,27100,27101],{},"配置存储库",[39,27103,27105],{"className":23912,"code":27104,"language":23914,"meta":44,"style":44},"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",[46,27106,27107,27122],{"__ignoreMap":44},[49,27108,27109,27111,27113,27115,27118,27120],{"class":51,"line":52},[49,27110,26940],{"class":2055},[49,27112,26974],{"class":66},[49,27114,26977],{"class":66},[49,27116,27117],{"class":328}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[49,27119,25200],{"class":59},[49,27121,24769],{"class":66},[49,27123,27124,27126,27128],{"class":51,"line":84},[49,27125,24667],{"class":2055},[49,27127,26307],{"class":328},[49,27129,27130],{"class":328}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[178,27132,27133],{"start":84},[181,27134,27135],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[39,27137,27139],{"className":23912,"code":27138,"language":23914,"meta":44,"style":44},"# 如果是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",[46,27140,27141,27146,27160,27164,27169],{"__ignoreMap":44},[49,27142,27143],{"class":51,"line":52},[49,27144,27145],{"class":283},"# 如果是RHEL或者Rocky（DNF4）\n",[49,27147,27148,27150,27152,27154,27157],{"class":51,"line":84},[49,27149,24667],{"class":2055},[49,27151,26406],{"class":328},[49,27153,26505],{"class":328},[49,27155,27156],{"class":66}," --add-repo",[49,27158,27159],{"class":328}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[49,27161,27162],{"class":51,"line":109},[49,27163,2492],{"emptyLinePlaceholder":151},[49,27165,27166],{"class":51,"line":120},[49,27167,27168],{"class":283},"# 如果是Feodra41+（DNF5）\n",[49,27170,27171,27173,27175,27177,27179],{"class":51,"line":135},[49,27172,24667],{"class":2055},[49,27174,26406],{"class":328},[49,27176,26505],{"class":328},[49,27178,26508],{"class":328},[49,27180,27181],{"class":66}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[178,27183,27184],{"start":109},[181,27185,27186],{},"安装NVIDIA Container Toolki包",[39,27188,27190],{"className":23912,"code":27189,"language":23914,"meta":44,"style":44},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[46,27191,27192,27197,27210,27214,27219],{"__ignoreMap":44},[49,27193,27194],{"class":51,"line":52},[49,27195,27196],{"class":283},"# 如果是RHEL或者Rocky\n",[49,27198,27199,27201,27203,27205,27207],{"class":51,"line":84},[49,27200,24667],{"class":2055},[49,27202,26406],{"class":328},[49,27204,23924],{"class":328},[49,27206,26491],{"class":66},[49,27208,27209],{"class":328}," nvidia-container-toolkit\n",[49,27211,27212],{"class":51,"line":109},[49,27213,2492],{"emptyLinePlaceholder":151},[49,27215,27216],{"class":51,"line":120},[49,27217,27218],{"class":283},"# 如果是Fedora\n",[49,27220,27221,27223,27225,27227,27229],{"class":51,"line":135},[49,27222,24667],{"class":2055},[49,27224,26406],{"class":328},[49,27226,23924],{"class":328},[49,27228,26491],{"class":66},[49,27230,27209],{"class":328},[178,27232,27233],{"start":120},[181,27234,27235,27236,27238],{},"安装nvidia-docker2 ： 在Fedora上使用",[46,27237,26381],{},"进行安装",[39,27240,27242],{"className":23912,"code":27241,"language":23914,"meta":44,"style":44},"sudo dnf install -y nvidia-docker2\n",[46,27243,27244],{"__ignoreMap":44},[49,27245,27246,27248,27250,27252,27254],{"class":51,"line":52},[49,27247,24667],{"class":2055},[49,27249,26406],{"class":328},[49,27251,23924],{"class":328},[49,27253,26491],{"class":66},[49,27255,27045],{"class":328},[178,27257,27258],{"start":135},[181,27259,27260],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[39,27262,27263],{"className":23912,"code":27053,"language":23914,"meta":44,"style":44},[46,27264,27265],{"__ignoreMap":44},[49,27266,27267,27269,27271,27273,27275],{"class":51,"line":52},[49,27268,24667],{"class":2055},[49,27270,27062],{"class":328},[49,27272,27065],{"class":328},[49,27274,27068],{"class":328},[49,27276,27071],{"class":66},[178,27278,27279],{"start":1306},[181,27280,27281],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[39,27283,27284],{"className":23912,"code":27079,"language":23914,"meta":44,"style":44},[46,27285,27286],{"__ignoreMap":44},[49,27287,27288,27290,27292,27294],{"class":51,"line":52},[49,27289,24667],{"class":2055},[49,27291,26604],{"class":328},[49,27293,27090],{"class":328},[49,27295,26583],{"class":328},[14,27297,27298],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27300,27301],{},"方法：",[14,27303,27304],{},"1️⃣nvidia-smi",[14,27306,27307],{},"2️⃣运行nvidia cuda 容器进行测试",[39,27309,27311],{"className":23912,"code":27310,"language":23914,"meta":44,"style":44},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[46,27312,27313],{"__ignoreMap":44},[49,27314,27315,27317,27319,27322,27325,27328,27331,27334],{"class":51,"line":52},[49,27316,24667],{"class":2055},[49,27318,26411],{"class":328},[49,27320,27321],{"class":328}," run",[49,27323,27324],{"class":66}," --rm",[49,27326,27327],{"class":66}," --gpus",[49,27329,27330],{"class":328}," all",[49,27332,27333],{"class":328}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[49,27335,27336],{"class":328}," nvidia-smi\n",[14,27338,27339],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27341,27342],{},[1554,27343],{"alt":44,"src":27344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[195,27346,27348],{"id":27347},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27350,27351],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27353,27354],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27356,27357],{},[56,27358,27359],{"href":27359,"rel":27360},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23955],[14,27362,27363],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27365,27366],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27368,27369],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[361,27371,27372,27388],{},[364,27373,27374],{},[367,27375,27376,27379,27382,27385],{},[370,27377,27378],{"align":23826},"镜像类型",[370,27380,27381],{"align":23826},"适用场景",[370,27383,27384],{"align":23826},"示例标签",[370,27386,27387],{"align":23826},"大小",[408,27389,27390,27404,27418],{},[367,27391,27392,27395,27398,27401],{},[413,27393,27394],{"align":23826},"base",[413,27396,27397],{"align":23826},"仅需 CUDA 运行时库",[413,27399,27400],{"align":23826},"12.4.0-base-ubuntu22.04",[413,27402,27403],{"align":23826},"~240MB",[367,27405,27406,27409,27412,27415],{},[413,27407,27408],{"align":23826},"runtime",[413,27410,27411],{"align":23826},"部署编译后的应用（含数学库）",[413,27413,27414],{"align":23826},"12.4.0-runtime-ubuntu22.04",[413,27416,27417],{"align":23826},"~2GB",[367,27419,27420,27423,27426,27429],{},[413,27421,27422],{"align":23826},"devel",[413,27424,27425],{"align":23826},"开发环境（含编译工具）",[413,27427,27428],{"align":23826},"12.4.0-devel-ubuntu22.04",[413,27430,27431],{"align":23826},"~3GB",[14,27433,27434,27435,27438],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[46,27436,27437],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27440,27441],{},[1554,27442],{"alt":44,"src":27443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27445,27446],{},"在dockerfile里就可以开头这么写：",[39,27448,27450],{"className":23912,"code":27449,"language":23914,"meta":44,"style":44},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[46,27451,27452,27457],{"__ignoreMap":44},[49,27453,27454],{"class":51,"line":52},[49,27455,27456],{"class":283},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[49,27458,27459,27462],{"class":51,"line":84},[49,27460,27461],{"class":2055},"FROM",[49,27463,27464],{"class":328}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[195,27466,27468],{"id":27467},"_34配置以太网","3.4.配置以太网",[14,27470,27471],{},"指定网络模式",[39,27473,27475],{"className":23912,"code":27474,"language":23914,"meta":44,"style":44},"--net=host \\\n",[46,27476,27477],{"__ignoreMap":44},[49,27478,27479,27482,27484,27487],{"class":51,"line":52},[49,27480,27481],{"class":55},"--net",[49,27483,60],{"class":59},[49,27485,27486],{"class":328},"host",[49,27488,24769],{"class":2055},[14,27490,27491],{},"启动参数里加上这行即可。具体在下方",[14,27493,27494],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1226,27496,27497,27500,27503,27506],{},[181,27498,27499],{},"--net=bridge:默认选项，表示连接到默认的网桥",[181,27501,27502],{},"--net=host:容器使用宿主机的网络",[181,27504,27505],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[181,27507,27508],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[143,27510,27511],{},"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":44,"searchDepth":84,"depth":84,"links":27513},[27514,27515,27516,27517],{"id":26828,"depth":109,"text":26829},{"id":26895,"depth":109,"text":26896},{"id":27347,"depth":109,"text":27348},{"id":27467,"depth":109,"text":27468},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26817,"description":26825},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27524,"title":27525,"body":27526,"description":27533,"extension":149,"meta":27539,"navigation":151,"path":27540,"seo":27541,"stem":27542,"__hash__":27543},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27527,"toc":27537},[27528,27531,27534],[10,27529,27525],{"id":27530},"_4dockerhub换源",[14,27532,27533],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27535,27536],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":44,"searchDepth":84,"depth":84,"links":27538},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27525,"description":27533},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27545,"title":27546,"body":27547,"description":44,"extension":149,"meta":28559,"navigation":151,"path":28560,"seo":28561,"stem":28562,"__hash__":28563},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27548,"toc":28554},[27549,27552,27556,27562,27566,27569,27909,27912,27915,27918,27923,27928,27931,27934,27937,27940,27959,27962,27973,27979,28161,28171,28187,28450,28452,28477,28492,28501,28551],[10,27550,27546],{"id":27551},"_5docker命令学习",[195,27553,27555],{"id":27554},"_51参考文档","5.1.参考文档",[14,27557,27558],{},[56,27559,27560],{"href":27560,"rel":27561},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23955],[195,27563,27565],{"id":27564},"_52常用命令","5.2.常用命令",[14,27567,27568],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[361,27570,27571,27584],{},[364,27572,27573],{},[367,27574,27575,27578,27581],{},[370,27576,27577],{"align":23826},"命令",[370,27579,27580],{"align":23826},"描述",[370,27582,27583],{"align":23826},"示例",[408,27585,27586,27597,27608,27619,27630,27641,27652,27663,27673,27684,27695,27706,27716,27727,27738,27749,27759,27769,27779,27789,27800,27811,27822,27833,27844,27855,27865,27876,27887,27898],{},[367,27587,27588,27591,27594],{},[413,27589,27590],{"align":23826},"docker run",[413,27592,27593],{"align":23826},"创建并启动一个新的容器。",[413,27595,27596],{"align":23826},"docker run -it ubuntu bash",[367,27598,27599,27602,27605],{},[413,27600,27601],{"align":23826},"docker build",[413,27603,27604],{"align":23826},"通过指定的 Dockerfile 创建一个新的镜像。",[413,27606,27607],{"align":23826},"docker build -t myimage .",[367,27609,27610,27613,27616],{},[413,27611,27612],{"align":23826},"docker pull",[413,27614,27615],{"align":23826},"从 Docker 仓库拉取镜像。",[413,27617,27618],{"align":23826},"docker pull ubuntu",[367,27620,27621,27624,27627],{},[413,27622,27623],{"align":23826},"docker push",[413,27625,27626],{"align":23826},"将本地镜像推送到 Docker 仓库。",[413,27628,27629],{"align":23826},"docker push myimage",[367,27631,27632,27635,27638],{},[413,27633,27634],{"align":23826},"docker stop",[413,27636,27637],{"align":23826},"停止一个正在运行的容器。",[413,27639,27640],{"align":23826},"docker stop container_id",[367,27642,27643,27646,27649],{},[413,27644,27645],{"align":23826},"docker start",[413,27647,27648],{"align":23826},"启动一个已经存在的容器。",[413,27650,27651],{"align":23826},"docker start container_id",[367,27653,27654,27657,27660],{},[413,27655,27656],{"align":23826},"docker restart",[413,27658,27659],{"align":23826},"重新启动容器。",[413,27661,27662],{"align":23826},"docker restart container_id",[367,27664,27665,27668,27671],{},[413,27666,27667],{"align":23826},"docker ps",[413,27669,27670],{"align":23826},"列出当前正在运行的容器。",[413,27672,27667],{"align":23826},[367,27674,27675,27678,27681],{},[413,27676,27677],{"align":23826},"docker rm",[413,27679,27680],{"align":23826},"删除一个或多个停止的容器。",[413,27682,27683],{"align":23826},"docker rm container_id",[367,27685,27686,27689,27692],{},[413,27687,27688],{"align":23826},"docker exec",[413,27690,27691],{"align":23826},"在一个正在运行的容器中执行命令。",[413,27693,27694],{"align":23826},"docker exec -it container_id bash",[367,27696,27697,27700,27703],{},[413,27698,27699],{"align":23826},"docker logs",[413,27701,27702],{"align":23826},"查看容器的日志输出。",[413,27704,27705],{"align":23826},"docker logs container_id",[367,27707,27708,27711,27714],{},[413,27709,27710],{"align":23826},"docker images",[413,27712,27713],{"align":23826},"列出本地所有镜像。",[413,27715,27710],{"align":23826},[367,27717,27718,27721,27724],{},[413,27719,27720],{"align":23826},"docker rmi",[413,27722,27723],{"align":23826},"删除一个或多个镜像。",[413,27725,27726],{"align":23826},"docker rmi myimage",[367,27728,27729,27732,27735],{},[413,27730,27731],{"align":23826},"docker network",[413,27733,27734],{"align":23826},"管理 Docker 网络。",[413,27736,27737],{"align":23826},"docker network ls",[367,27739,27740,27743,27746],{},[413,27741,27742],{"align":23826},"docker volume",[413,27744,27745],{"align":23826},"管理 Docker 数据卷。",[413,27747,27748],{"align":23826},"docker volume ls",[367,27750,27751,27754,27757],{},[413,27752,27753],{"align":23826},"docker-compose up",[413,27755,27756],{"align":23826},"启动 docker-compose.yml 中定义的所有服务。",[413,27758,27753],{"align":23826},[367,27760,27761,27764,27767],{},[413,27762,27763],{"align":23826},"docker-compose down",[413,27765,27766],{"align":23826},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[413,27768,27763],{"align":23826},[367,27770,27771,27774,27777],{},[413,27772,27773],{"align":23826},"docker info",[413,27775,27776],{"align":23826},"显示 Docker 系统的详细信息。",[413,27778,27773],{"align":23826},[367,27780,27781,27784,27787],{},[413,27782,27783],{"align":23826},"docker stats",[413,27785,27786],{"align":23826},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[413,27788,27783],{"align":23826},[367,27790,27791,27794,27797],{},[413,27792,27793],{"align":23826},"docker inspect",[413,27795,27796],{"align":23826},"查看容器或镜像的详细信息（JSON 格式）。",[413,27798,27799],{"align":23826},"docker inspect container_id",[367,27801,27802,27805,27808],{},[413,27803,27804],{"align":23826},"docker save",[413,27806,27807],{"align":23826},"将一个镜像保存为 tar 文件。",[413,27809,27810],{"align":23826},"docker save -o myimage.tar myimage",[367,27812,27813,27816,27819],{},[413,27814,27815],{"align":23826},"docker load",[413,27817,27818],{"align":23826},"从 tar 文件中加载镜像。",[413,27820,27821],{"align":23826},"docker load -i myimage.tar",[367,27823,27824,27827,27830],{},[413,27825,27826],{"align":23826},"docker tag",[413,27828,27829],{"align":23826},"为镜像添加标签（tag）。",[413,27831,27832],{"align":23826},"docker tag myimage myimage:v1",[367,27834,27835,27838,27841],{},[413,27836,27837],{"align":23826},"docker buildx build",[413,27839,27840],{"align":23826},"使用 Buildx 构建多架构镜像。",[413,27842,27843],{"align":23826},"docker buildx build -t myimage .",[367,27845,27846,27849,27852],{},[413,27847,27848],{"align":23826},"docker buildx create",[413,27850,27851],{"align":23826},"创建一个新的 Buildx 构建实例。",[413,27853,27854],{"align":23826},"docker buildx create –use",[367,27856,27857,27860,27863],{},[413,27858,27859],{"align":23826},"docker buildx ls",[413,27861,27862],{"align":23826},"列出所有可用的 Buildx 构建实例。",[413,27864,27859],{"align":23826},[367,27866,27867,27870,27873],{},[413,27868,27869],{"align":23826},"docker buildx use",[413,27871,27872],{"align":23826},"设置当前的 Buildx 构建实例。",[413,27874,27875],{"align":23826},"docker buildx use mybuilder",[367,27877,27878,27881,27884],{},[413,27879,27880],{"align":23826},"docker buildx bake",[413,27882,27883],{"align":23826},"使用 Bake 文件批量构建镜像。",[413,27885,27886],{"align":23826},"docker buildx bake -f bake.hcl",[367,27888,27889,27892,27895],{},[413,27890,27891],{"align":23826},"docker buildx build –push",[413,27893,27894],{"align":23826},"构建镜像并推送到镜像仓库。",[413,27896,27897],{"align":23826},"docker buildx build –push -t myimage .",[367,27899,27900,27903,27906],{},[413,27901,27902],{"align":23826},"docker buildx build –platform",[413,27904,27905],{"align":23826},"构建镜像并为多个平台生成支持。",[413,27907,27908],{"align":23826},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27910,27911],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27913,27914],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27916,27917],{},"docker images 可以查看已经下载的镜像",[14,27919,27920],{},[1554,27921],{"alt":44,"src":27922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27924,27925],{},[373,27926,27927],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27929,27930],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27932,27933],{},"docker container logs 查看容器日志",[14,27935,27936],{},"docker top 查看容器里的进程",[14,27938,27939],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[39,27941,27943],{"className":23912,"code":27942,"language":23914,"meta":44,"style":44},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[46,27944,27945],{"__ignoreMap":44},[49,27946,27947,27950,27953,27956],{"class":51,"line":52},[49,27948,27949],{"class":2055},"如：docker",[49,27951,27952],{"class":328}," cp",[49,27954,27955],{"class":328}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[49,27957,27958],{"class":328}," \u002Fmydata\u002Fnginx\n",[14,27960,27961],{},"docker run时在启动容器的时候会有几个常用的选项：",[1226,27963,27964,27967,27970],{},[181,27965,27966],{},"-d选项：表示后台运行",[181,27968,27969],{},"-P选项：随机端口映射",[181,27971,27972],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[195,27974,27976],{"id":27975},"_53run命令的参数非常重要",[373,27977,27978],{},"5.3.run命令的参数（非常重要）",[361,27980,27981,27994],{},[364,27982,27983],{},[367,27984,27985,27988,27991],{},[370,27986,27987],{"align":23826},"参数\u002F配置",[370,27989,27990],{"align":23826},"功能说明",[370,27992,27993],{"align":23826},"重要性与参考依据",[408,27995,27996,28007,28018,28029,28040,28051,28062,28073,28084,28095,28106,28117,28128,28139,28150],{},[367,27997,27998,28001,28004],{},[413,27999,28000],{"align":23826},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[413,28002,28003],{"align":23826},"指定容器名称，便于后续管理",[413,28005,28006],{"align":23826},"替代随机生成的容器名。",[367,28008,28009,28012,28015],{},[413,28010,28011],{"align":23826},"–gpus all",[413,28013,28014],{"align":23826},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[413,28016,28017],{"align":23826},"用于CUDA加速等GPU依赖任务。",[367,28019,28020,28023,28026],{},[413,28021,28022],{"align":23826},"-e NVIDIA_DRIVER_CAPABILITIES=all",[413,28024,28025],{"align":23826},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[413,28027,28028],{"align":23826},"确保容器内GPU功能完整67。",[367,28030,28031,28034,28037],{},[413,28032,28033],{"align":23826},"-dit",[413,28035,28036],{"align":23826},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[413,28038,28039],{"align":23826},"允许容器在后台运行并支持交互操作。",[367,28041,28042,28045,28048],{},[413,28043,28044],{"align":23826},"–privileged",[413,28046,28047],{"align":23826},"赋予容器完全主机权限（可访问设备、内核模块等）",[413,28049,28050],{"align":23826},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[367,28052,28053,28056,28059],{},[413,28054,28055],{"align":23826},"–net=host",[413,28057,28058],{"align":23826},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[413,28060,28061],{"align":23826},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[367,28063,28064,28067,28070],{},[413,28065,28066],{"align":23826},"–group-add audio–group-add video–group-add dialout",[413,28068,28069],{"align":23826},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[413,28071,28072],{"align":23826},"避免权限问题（如避免无法调用摄像头、麦克风）。",[367,28074,28075,28078,28081],{},[413,28076,28077],{"align":23826},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[413,28079,28080],{"align":23826},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[413,28082,28083],{"align":23826},"支持容器内运行图形界面应用（如OpenCV可视化）。",[367,28085,28086,28089,28092],{},[413,28087,28088],{"align":23826},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[413,28090,28091],{"align":23826},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[413,28093,28094],{"align":23826},"实现容器内图形显示。",[367,28096,28097,28100,28103],{},[413,28098,28099],{"align":23826},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[413,28101,28102],{"align":23826},"挂载X11认证文件（只读）",[413,28104,28105],{"align":23826},"确保容器有权连接宿主机显示服务。",[367,28107,28108,28111,28114],{},[413,28109,28110],{"align":23826},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[413,28112,28113],{"align":23826},"挂载Wayland显示协议相关目录",[413,28115,28116],{"align":23826},"支持Wayland协议的图形显示。",[367,28118,28119,28122,28125],{},[413,28120,28121],{"align":23826},"–ulimit nofile=1024:524288",[413,28123,28124],{"align":23826},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[413,28126,28127],{"align":23826},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[367,28129,28130,28133,28136],{},[413,28131,28132],{"align":23826},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[413,28134,28135],{"align":23826},"挂载宿主机用户目录到容器内同名路径",[413,28137,28138],{"align":23826},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[367,28140,28141,28144,28147],{},[413,28142,28143],{"align":23826},"-w \u002Fhome\u002Ftungchiahui",[413,28145,28146],{"align":23826},"设置容器启动后的默认工作目录",[413,28148,28149],{"align":23826},"直接进入项目路径，方便执行命令2324。",[367,28151,28152,28155,28158],{},[413,28153,28154],{"align":23826},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[413,28156,28157],{"align":23826},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[413,28159,28160],{"align":23826},"提供预配置的深度学习与机器人开发环境。",[14,28162,28163,28164,28166,28167,28170],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[46,28165,24667],{},"加不加",[46,28168,28169],{},"sudo -E","都无所谓。",[14,28172,28173,28174,28176,28177,28179,28180,28183,28184,28186],{},"用户已经被加到docker组了，不用",[46,28175,24667],{},"也行跑，其次，",[46,28178,24667],{},"运行的话，你的",[46,28181,28182],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[46,28185,28182],{},"更不可能变了。",[39,28188,28190],{"className":23912,"code":28189,"language":23914,"meta":44,"style":44},"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",[46,28191,28192,28205,28215,28225,28237,28244,28251,28258,28268,28277,28286,28300,28312,28324,28333,28343,28352,28367,28400,28427,28438,28445],{"__ignoreMap":44},[49,28193,28194,28196,28198,28200,28203],{"class":51,"line":52},[49,28195,24667],{"class":2055},[49,28197,26411],{"class":328},[49,28199,27321],{"class":328},[49,28201,28202],{"class":66}," --name=ros_opencv_cuda",[49,28204,24769],{"class":66},[49,28206,28207,28210,28213],{"class":51,"line":84},[49,28208,28209],{"class":55},"--gpus ",[49,28211,28212],{"class":328},"all",[49,28214,24769],{"class":66},[49,28216,28217,28220,28223],{"class":51,"line":109},[49,28218,28219],{"class":55},"-e ",[49,28221,28222],{"class":328},"NVIDIA_DRIVER_CAPABILITIES=all",[49,28224,24769],{"class":66},[49,28226,28227,28229,28232,28235],{"class":51,"line":120},[49,28228,28219],{"class":55},[49,28230,28231],{"class":328},"DISPLAY=",[49,28233,28234],{"class":55},"$DISPLAY ",[49,28236,26266],{"class":66},[49,28238,28239,28242],{"class":51,"line":135},[49,28240,28241],{"class":55},"-dit ",[49,28243,26266],{"class":66},[49,28245,28246,28249],{"class":51,"line":1306},[49,28247,28248],{"class":55},"--privileged ",[49,28250,26266],{"class":66},[49,28252,28253,28256],{"class":51,"line":1312},[49,28254,28255],{"class":55},"--net=host ",[49,28257,26266],{"class":66},[49,28259,28260,28263,28266],{"class":51,"line":1403},[49,28261,28262],{"class":55},"--group-add ",[49,28264,28265],{"class":328},"audio",[49,28267,24769],{"class":66},[49,28269,28270,28272,28275],{"class":51,"line":1409},[49,28271,28262],{"class":55},[49,28273,28274],{"class":328},"video",[49,28276,24769],{"class":66},[49,28278,28279,28281,28284],{"class":51,"line":1421},[49,28280,28262],{"class":55},[49,28282,28283],{"class":328},"dialout",[49,28285,24769],{"class":66},[49,28287,28288,28290,28293,28295,28298],{"class":51,"line":1704},[49,28289,28219],{"class":55},[49,28291,28292],{"class":328},"XAUTHORITY=",[49,28294,28182],{"class":55},[49,28296,28297],{"class":328},"\u002F.Xauthority",[49,28299,24769],{"class":66},[49,28301,28302,28304,28307,28310],{"class":51,"line":1709},[49,28303,28219],{"class":55},[49,28305,28306],{"class":328},"WAYLAND_DISPLAY=",[49,28308,28309],{"class":55},"$WAYLAND_DISPLAY ",[49,28311,26266],{"class":66},[49,28313,28314,28316,28319,28322],{"class":51,"line":1715},[49,28315,28219],{"class":55},[49,28317,28318],{"class":328},"XDG_RUNTIME_DIR=",[49,28320,28321],{"class":55},"$XDG_RUNTIME_DIR ",[49,28323,26266],{"class":66},[49,28325,28326,28328,28331],{"class":51,"line":1720},[49,28327,28219],{"class":55},[49,28329,28330],{"class":328},"QT_QPA_PLATFORM=xcb",[49,28332,24769],{"class":66},[49,28334,28335,28338,28341],{"class":51,"line":1734},[49,28336,28337],{"class":55},"-v ",[49,28339,28340],{"class":328},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[49,28342,24769],{"class":66},[49,28344,28345,28347,28350],{"class":51,"line":1739},[49,28346,28337],{"class":55},[49,28348,28349],{"class":328},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[49,28351,24769],{"class":66},[49,28353,28354,28357,28360,28362,28365],{"class":51,"line":1745},[49,28355,28356],{"class":55},"-v $HOME",[49,28358,28359],{"class":328},"\u002F.Xauthority:",[49,28361,28182],{"class":55},[49,28363,28364],{"class":328},"\u002F.Xauthority:ro",[49,28366,24769],{"class":66},[49,28368,28369,28371,28374,28376,28379,28382,28384,28387,28389,28391,28393,28395,28398],{"class":51,"line":1766},[49,28370,28337],{"class":55},[49,28372,28373],{"class":328},"\u002Frun\u002Fuser\u002F",[49,28375,25190],{"class":55},[49,28377,28378],{"class":2055},"id",[49,28380,28381],{"class":66}," -u",[49,28383,649],{"class":55},[49,28385,28386],{"class":328},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[49,28388,25190],{"class":55},[49,28390,28378],{"class":2055},[49,28392,28381],{"class":66},[49,28394,649],{"class":55},[49,28396,28397],{"class":328},"\u002Fwayland-0",[49,28399,24769],{"class":66},[49,28401,28402,28404,28406,28408,28410,28412,28414,28417,28419,28421,28423,28425],{"class":51,"line":1771},[49,28403,28337],{"class":55},[49,28405,28373],{"class":328},[49,28407,25190],{"class":55},[49,28409,28378],{"class":2055},[49,28411,28381],{"class":66},[49,28413,649],{"class":55},[49,28415,28416],{"class":328},":\u002Frun\u002Fuser\u002F",[49,28418,25190],{"class":55},[49,28420,28378],{"class":2055},[49,28422,28381],{"class":66},[49,28424,13804],{"class":55},[49,28426,26266],{"class":66},[49,28428,28429,28431,28433,28436],{"class":51,"line":1785},[49,28430,28356],{"class":55},[49,28432,1078],{"class":328},[49,28434,28435],{"class":55},"$HOME ",[49,28437,26266],{"class":66},[49,28439,28440,28443],{"class":51,"line":1790},[49,28441,28442],{"class":55},"-w $HOME ",[49,28444,26266],{"class":66},[49,28446,28447],{"class":51,"line":1819},[49,28448,28449],{"class":55},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28451,9115],{},[178,28453,28454,28462,28465,28468],{},[181,28455,28456,13885,28458,28461],{},[46,28457,28222],{},[46,28459,28460],{},"--gpus all","没有英伟达显卡请注释。",[181,28463,28464],{},"--name后面请自己为容器起名。",[181,28466,28467],{},"最后一行仓库名称请你自己找对应的镜像填上。",[181,28469,28470,28471,28476],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23643,28472,28473],{},[373,28474,28475],{},"请不要加","。",[39,28478,28480],{"className":23912,"code":28479,"language":23914,"meta":44,"style":44},"--ulimit nofile=1024:524288 \\\n",[46,28481,28482],{"__ignoreMap":44},[49,28483,28484,28487,28490],{"class":51,"line":52},[49,28485,28486],{"class":2055},"--ulimit",[49,28488,28489],{"class":328}," nofile=1024:524288",[49,28491,24769],{"class":66},[14,28493,28494,28495,28500],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23643,28496,28497],{},[373,28498,28499],{},"不建议","**.**",[39,28502,28504],{"className":23912,"code":28503,"language":23914,"meta":44,"style":44},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[46,28505,28506,28533,28542],{"__ignoreMap":44},[49,28507,28508,28511,28514,28516,28518,28520,28522,28524,28526,28529,28531],{"class":51,"line":52},[49,28509,28510],{"class":2055},"--user",[49,28512,28513],{"class":55}," $(",[49,28515,28378],{"class":2055},[49,28517,28381],{"class":66},[49,28519,649],{"class":55},[49,28521,1078],{"class":328},[49,28523,25190],{"class":55},[49,28525,28378],{"class":2055},[49,28527,28528],{"class":66}," -g",[49,28530,13804],{"class":55},[49,28532,26266],{"class":66},[49,28534,28535,28537,28540],{"class":51,"line":84},[49,28536,28337],{"class":55},[49,28538,28539],{"class":328},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[49,28541,24769],{"class":66},[49,28543,28544,28546,28549],{"class":51,"line":109},[49,28545,28337],{"class":55},[49,28547,28548],{"class":328},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[49,28550,24769],{"class":66},[143,28552,28553],{},"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":44,"searchDepth":84,"depth":84,"links":28555},[28556,28557,28558],{"id":27554,"depth":109,"text":27555},{"id":27564,"depth":109,"text":27565},{"id":27975,"depth":109,"text":27978},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27546,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28565,"title":28566,"body":28567,"description":44,"extension":149,"meta":30190,"navigation":151,"path":30191,"seo":30192,"stem":30193,"__hash__":30194},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28568,"toc":30185},[28569,28572,28576,28579,28801,28805,28809,28812,28918,28923,28926,28931,28934,28939,28942,28947,28950,28962,28965,28970,28977,29005,29012,29088,29093,29096,29119,29121,29196,29201,29204,29208,29216,29221,29226,29230,29241,29247,29250,29253,29277,29280,29283,29311,29314,29317,29782,29785,29790,29795,29799,29822,29827,29831,29835,29838,29841,29844,29871,29874,29877,29895,29898,29901,29923,29931,29936,29941,29945,29948,29951,29954,29957,30002,30005,30023,30026,30031,30034,30055,30058,30114,30117,30122,30126,30129,30136,30139,30142,30147,30150,30166,30169,30182],[10,28570,28566],{"id":28571},"_6手动创建docker镜像",[195,28573,28575],{"id":28574},"_61dockerfile","6.1.DockerFile",[14,28577,28578],{},"常用命令：",[361,28580,28581,28592],{},[364,28582,28583],{},[367,28584,28585,28588,28590],{},[370,28586,28587],{"align":23826},"指令",[370,28589,25960],{"align":23826},[370,28591,27583],{"align":23826},[408,28593,28594,28604,28620,28631,28642,28653,28664,28675,28686,28700,28714,28725,28739,28750,28761,28775,28790],{},[367,28595,28596,28598,28601],{},[413,28597,27461],{"align":23826},[413,28599,28600],{"align":23826},"指定基础镜像，是 Dockerfile 的起点",[413,28602,28603],{"align":23826},"FROM ubuntu:22.04",[367,28605,28606,28609,28612],{},[413,28607,28608],{"align":23826},"LABEL",[413,28610,28611],{"align":23826},"添加元数据（如作者、版本等）",[413,28613,28614,28615,28619],{"align":23826},"LABEL maintainer=”",[56,28616,28618],{"href":28617},"mailto:you@example.com","you@example.com","”",[367,28621,28622,28625,28628],{},[413,28623,28624],{"align":23826},"ENV",[413,28626,28627],{"align":23826},"设置环境变量",[413,28629,28630],{"align":23826},"ENV PORT=8080",[367,28632,28633,28636,28639],{},[413,28634,28635],{"align":23826},"ARG",[413,28637,28638],{"align":23826},"构建参数，只在构建期间可用",[413,28640,28641],{"align":23826},"ARG VERSION=1.0",[367,28643,28644,28647,28650],{},[413,28645,28646],{"align":23826},"RUN",[413,28648,28649],{"align":23826},"构建镜像时运行命令",[413,28651,28652],{"align":23826},"RUN apt-get update && apt-get install -y curl",[367,28654,28655,28658,28661],{},[413,28656,28657],{"align":23826},"COPY",[413,28659,28660],{"align":23826},"复制文件到镜像中",[413,28662,28663],{"align":23826},"COPY . \u002Fapp",[367,28665,28666,28669,28672],{},[413,28667,28668],{"align":23826},"ADD",[413,28670,28671],{"align":23826},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[413,28673,28674],{"align":23826},"ADD archive.tar.gz \u002Fdata\u002F",[367,28676,28677,28680,28683],{},[413,28678,28679],{"align":23826},"WORKDIR",[413,28681,28682],{"align":23826},"设置工作目录",[413,28684,28685],{"align":23826},"WORKDIR \u002Fopt",[367,28687,28688,28691,28694],{},[413,28689,28690],{"align":23826},"CMD",[413,28692,28693],{"align":23826},"设置容器启动时默认命令（可被 docker run 覆盖）",[413,28695,28696,28697],{"align":23826},"CMD ",[49,28698,28699],{},"“node”, “index.js”",[367,28701,28702,28705,28708],{},[413,28703,28704],{"align":23826},"ENTRYPOINT",[413,28706,28707],{"align":23826},"设置容器启动时固定命令（通常用于 CLI 工具等）",[413,28709,28710,28711],{"align":23826},"ENTRYPOINT ",[49,28712,28713],{},"“python3”",[367,28715,28716,28719,28722],{},[413,28717,28718],{"align":23826},"EXPOSE",[413,28720,28721],{"align":23826},"声明镜像内服务监听的端口（不会自动映射）",[413,28723,28724],{"align":23826},"EXPOSE 80",[367,28726,28727,28730,28733],{},[413,28728,28729],{"align":23826},"VOLUME",[413,28731,28732],{"align":23826},"声明数据卷挂载点",[413,28734,28735,28736],{"align":23826},"VOLUME ",[49,28737,28738],{},"“\u002Fdata”",[367,28740,28741,28744,28747],{},[413,28742,28743],{"align":23826},"USER",[413,28745,28746],{"align":23826},"设置后续命令执行的用户",[413,28748,28749],{"align":23826},"USER appuser",[367,28751,28752,28755,28758],{},[413,28753,28754],{"align":23826},"ONBUILD",[413,28756,28757],{"align":23826},"当镜像作为其他镜像基础镜像时触发的构建指令",[413,28759,28760],{"align":23826},"ONBUILD COPY . \u002Fsrc",[367,28762,28763,28766,28769],{},[413,28764,28765],{"align":23826},"SHELL",[413,28767,28768],{"align":23826},"更改默认 shell，比如将 sh -c 改为 bash -c",[413,28770,28771,28772],{"align":23826},"SHELL ",[49,28773,28774],{},"“\u002Fbin\u002Fbash”, “-c”",[367,28776,28777,28780,28783],{},[413,28778,28779],{"align":23826},"HEALTHCHECK",[413,28781,28782],{"align":23826},"定义容器运行时的健康检查命令",[413,28784,28785,28786],{"align":23826},"`HEALTHCHECK CMD curl –fail ",[56,28787,28788],{"href":28788,"rel":28789},"http:\u002F\u002Flocalhost:8080",[23955],[367,28791,28792,28795,28798],{},[413,28793,28794],{"align":23826},"STOPSIGNAL",[413,28796,28797],{"align":23826},"容器停止时发送的信号",[413,28799,28800],{"align":23826},"STOPSIGNAL SIGKILL",[195,28802,28804],{"id":28803},"_62自己创建容器","6.2.自己创建容器",[22088,28806,28808],{"id":28807},"_621手动创建","6.2.1.手动创建",[14,28810,28811],{},"在x86电脑上编译x86的：",[39,28813,28815],{"className":23912,"code":28814,"language":23914,"meta":44,"style":44},"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",[46,28816,28817,28833,28837,28850,28854,28867,28871,28884,28888,28901,28905],{"__ignoreMap":44},[49,28818,28819,28821,28824,28827,28830],{"class":51,"line":52},[49,28820,26644],{"class":2055},[49,28822,28823],{"class":328}," build",[49,28825,28826],{"class":66}," -t",[49,28828,28829],{"class":328}," ros-melodic-cuda118-cudnn8-bionic:latest",[49,28831,28832],{"class":328}," .\n",[49,28834,28835],{"class":51,"line":84},[49,28836,2492],{"emptyLinePlaceholder":151},[49,28838,28839,28841,28843,28845,28848],{"class":51,"line":109},[49,28840,26644],{"class":2055},[49,28842,28823],{"class":328},[49,28844,28826],{"class":66},[49,28846,28847],{"class":328}," ros-noetic-focal:latest",[49,28849,28832],{"class":328},[49,28851,28852],{"class":51,"line":120},[49,28853,2492],{"emptyLinePlaceholder":151},[49,28855,28856,28858,28860,28862,28865],{"class":51,"line":135},[49,28857,26644],{"class":2055},[49,28859,28823],{"class":328},[49,28861,28826],{"class":66},[49,28863,28864],{"class":328}," ros-humble-jammy:latest",[49,28866,28832],{"class":328},[49,28868,28869],{"class":51,"line":1306},[49,28870,2492],{"emptyLinePlaceholder":151},[49,28872,28873,28875,28877,28879,28882],{"class":51,"line":1312},[49,28874,26644],{"class":2055},[49,28876,28823],{"class":328},[49,28878,28826],{"class":66},[49,28880,28881],{"class":328}," ros-jazzy-noble:latest",[49,28883,28832],{"class":328},[49,28885,28886],{"class":51,"line":1403},[49,28887,2492],{"emptyLinePlaceholder":151},[49,28889,28890,28892,28894,28896,28899],{"class":51,"line":1409},[49,28891,26644],{"class":2055},[49,28893,28823],{"class":328},[49,28895,28826],{"class":66},[49,28897,28898],{"class":328}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[49,28900,28832],{"class":328},[49,28902,28903],{"class":51,"line":1421},[49,28904,2492],{"emptyLinePlaceholder":151},[49,28906,28907,28909,28911,28913,28916],{"class":51,"line":1704},[49,28908,26644],{"class":2055},[49,28910,28823],{"class":328},[49,28912,28826],{"class":66},[49,28914,28915],{"class":328}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[49,28917,28832],{"class":328},[14,28919,28920],{},[1554,28921],{"alt":44,"src":28922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28924,28925],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28927,28928],{},[1554,28929],{"alt":44,"src":28930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28932,28933],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[178,28935,28936],{},[181,28937,28938],{},"创建 Docker Hub 账户",[14,28940,28941],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[178,28943,28944],{"start":84},[181,28945,28946],{},"登录 Docker Hub",[14,28948,28949],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[39,28951,28953],{"className":23912,"code":28952,"language":23914,"meta":44,"style":44},"docker login\n",[46,28954,28955],{"__ignoreMap":44},[49,28956,28957,28959],{"class":51,"line":52},[49,28958,26644],{"class":2055},[49,28960,28961],{"class":328}," login\n",[14,28963,28964],{},"输入你的 Docker Hub 用户名和密码进行验证。",[178,28966,28967],{},[181,28968,28969],{},"为你的镜像打标签",[14,28971,28972,28973,28976],{},"Docker Hub 使用 ",[46,28974,28975],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[39,28978,28980],{"className":23912,"code":28979,"language":23914,"meta":44,"style":44},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[46,28981,28982],{"__ignoreMap":44},[49,28983,28984,28986,28989,28991,28994,28997,29000,29002],{"class":51,"line":52},[49,28985,26644],{"class":2055},[49,28987,28988],{"class":328}," tag",[49,28990,28881],{"class":328},[49,28992,28993],{"class":59}," \u003C",[49,28995,28996],{"class":328},"你的用户",[49,28998,28999],{"class":55},"名",[49,29001,1179],{"class":59},[49,29003,29004],{"class":328},"\u002Fros-jazzy-noble:latest\n",[14,29006,29007,29008,29011],{},"例如，如果你的 Docker Hub 用户名是 ",[46,29009,29010],{},"tungchiahui","，你应该执行：",[39,29013,29015],{"className":23912,"code":29014,"language":23914,"meta":44,"style":44},"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",[46,29016,29017,29028,29032,29043,29047,29058,29062,29073,29077],{"__ignoreMap":44},[49,29018,29019,29021,29023,29025],{"class":51,"line":52},[49,29020,26644],{"class":2055},[49,29022,28988],{"class":328},[49,29024,28847],{"class":328},[49,29026,29027],{"class":328}," tungchiahui\u002Fros-noetic-focal:latest\n",[49,29029,29030],{"class":51,"line":84},[49,29031,2492],{"emptyLinePlaceholder":151},[49,29033,29034,29036,29038,29040],{"class":51,"line":109},[49,29035,26644],{"class":2055},[49,29037,28988],{"class":328},[49,29039,28864],{"class":328},[49,29041,29042],{"class":328}," tungchiahui\u002Fros-humble-jammy:latest\n",[49,29044,29045],{"class":51,"line":120},[49,29046,2492],{"emptyLinePlaceholder":151},[49,29048,29049,29051,29053,29055],{"class":51,"line":135},[49,29050,26644],{"class":2055},[49,29052,28988],{"class":328},[49,29054,28881],{"class":328},[49,29056,29057],{"class":328}," tungchiahui\u002Fros-jazzy-noble:latest\n",[49,29059,29060],{"class":51,"line":1306},[49,29061,2492],{"emptyLinePlaceholder":151},[49,29063,29064,29066,29068,29070],{"class":51,"line":1312},[49,29065,26644],{"class":2055},[49,29067,28988],{"class":328},[49,29069,28898],{"class":328},[49,29071,29072],{"class":328}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,29074,29075],{"class":51,"line":1403},[49,29076,2492],{"emptyLinePlaceholder":151},[49,29078,29079,29081,29083,29085],{"class":51,"line":1409},[49,29080,26644],{"class":2055},[49,29082,28988],{"class":328},[49,29084,28915],{"class":328},[49,29086,29087],{"class":328}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[178,29089,29090],{"start":84},[181,29091,29092],{},"推送镜像到 Docker Hub",[14,29094,29095],{},"使用以下命令将镜像推送到 Docker Hub：",[39,29097,29099],{"className":23912,"code":29098,"language":23914,"meta":44,"style":44},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[46,29100,29101],{"__ignoreMap":44},[49,29102,29103,29105,29108,29110,29112,29114,29116],{"class":51,"line":52},[49,29104,26644],{"class":2055},[49,29106,29107],{"class":328}," push",[49,29109,28993],{"class":59},[49,29111,28996],{"class":328},[49,29113,28999],{"class":55},[49,29115,1179],{"class":59},[49,29117,29118],{"class":328},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29120,14723],{},[39,29122,29124],{"className":23912,"code":29123,"language":23914,"meta":44,"style":44},"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",[46,29125,29126,29134,29138,29146,29150,29158,29162,29171,29175,29183,29187],{"__ignoreMap":44},[49,29127,29128,29130,29132],{"class":51,"line":52},[49,29129,26644],{"class":2055},[49,29131,29107],{"class":328},[49,29133,29027],{"class":328},[49,29135,29136],{"class":51,"line":84},[49,29137,2492],{"emptyLinePlaceholder":151},[49,29139,29140,29142,29144],{"class":51,"line":109},[49,29141,26644],{"class":2055},[49,29143,29107],{"class":328},[49,29145,29042],{"class":328},[49,29147,29148],{"class":51,"line":120},[49,29149,2492],{"emptyLinePlaceholder":151},[49,29151,29152,29154,29156],{"class":51,"line":135},[49,29153,26644],{"class":2055},[49,29155,29107],{"class":328},[49,29157,29057],{"class":328},[49,29159,29160],{"class":51,"line":1306},[49,29161,2492],{"emptyLinePlaceholder":151},[49,29163,29164,29166,29168],{"class":51,"line":1312},[49,29165,26644],{"class":2055},[49,29167,29107],{"class":328},[49,29169,29170],{"class":328}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,29172,29173],{"class":51,"line":1403},[49,29174,2492],{"emptyLinePlaceholder":151},[49,29176,29177,29179,29181],{"class":51,"line":1409},[49,29178,26644],{"class":2055},[49,29180,29107],{"class":328},[49,29182,29087],{"class":328},[49,29184,29185],{"class":51,"line":1421},[49,29186,2492],{"emptyLinePlaceholder":151},[49,29188,29189,29191,29193],{"class":51,"line":1704},[49,29190,26644],{"class":2055},[49,29192,29107],{"class":328},[49,29194,29195],{"class":328}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[178,29197,29198],{"start":109},[181,29199,29200],{},"验证推送成功",[14,29202,29203],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29205,29206],{},[373,29207,3876],{},[1226,29209,29210,29213],{},[181,29211,29212],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[181,29214,29215],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29217,29218],{},[1554,29219],{"alt":44,"src":29220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29222,29223],{},[1554,29224],{"alt":44,"src":29225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22088,29227,29229],{"id":29228},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29231,29232,29233,29236,29237,29240],{},"如果您想在 ",[373,29234,29235],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[373,29238,29239],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29242,29243,29244],{},"1. ",[373,29245,29246],{},"启用 Docker 跨平台构建",[14,29248,29249],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29251,29252],{},"第一步：启用 buildx（只需执行一次）",[39,29254,29256],{"className":23912,"code":29255,"language":23914,"meta":44,"style":44},"docker buildx create --name multiarch_builder --use\n",[46,29257,29258],{"__ignoreMap":44},[49,29259,29260,29262,29265,29268,29271,29274],{"class":51,"line":52},[49,29261,26644],{"class":2055},[49,29263,29264],{"class":328}," buildx",[49,29266,29267],{"class":328}," create",[49,29269,29270],{"class":66}," --name",[49,29272,29273],{"class":328}," multiarch_builder",[49,29275,29276],{"class":66}," --use\n",[14,29278,29279],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29281,29282],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[39,29284,29286],{"className":23912,"code":29285,"language":23914,"meta":44,"style":44},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[46,29287,29288],{"__ignoreMap":44},[49,29289,29290,29292,29294,29296,29299,29302,29305,29308],{"class":51,"line":52},[49,29291,26644],{"class":2055},[49,29293,27321],{"class":328},[49,29295,27324],{"class":66},[49,29297,29298],{"class":66}," --privileged",[49,29300,29301],{"class":328}," multiarch\u002Fqemu-user-static",[49,29303,29304],{"class":66}," --reset",[49,29306,29307],{"class":66}," -p",[49,29309,29310],{"class":328}," yes\n",[14,29312,29313],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29315,29316],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[39,29318,29320],{"className":23912,"code":29319,"language":23914,"meta":44,"style":44},"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",[46,29321,29322,29364,29368,29373,29383,29393,29402,29408,29412,29416,29426,29434,29443,29449,29453,29457,29467,29475,29484,29490,29494,29498,29508,29516,29525,29531,29535,29539,29549,29557,29566,29572,29576,29580,29590,29598,29607,29613,29617,29621,29631,29639,29648,29654,29658,29662,29672,29680,29689,29695,29699,29703,29713,29721,29730,29736,29740,29744,29755,29763,29772,29778],{"__ignoreMap":44},[49,29323,29324,29326,29328,29330,29333,29336,29338,29340,29343,29345,29347,29349,29351,29354,29357,29359,29362],{"class":51,"line":52},[49,29325,26644],{"class":2055},[49,29327,29264],{"class":328},[49,29329,28823],{"class":328},[49,29331,29332],{"class":66}," --platform",[49,29334,29335],{"class":328}," linux\u002Famd64,linux\u002Farm64",[49,29337,28826],{"class":66},[49,29339,28993],{"class":59},[49,29341,29342],{"class":328},"你的镜像",[49,29344,28999],{"class":55},[49,29346,1179],{"class":59},[49,29348,1078],{"class":328},[49,29350,1129],{"class":59},[49,29352,29353],{"class":328},"标",[49,29355,29356],{"class":55},"签",[49,29358,1179],{"class":59},[49,29360,29361],{"class":66}," --push",[49,29363,28832],{"class":328},[49,29365,29366],{"class":51,"line":84},[49,29367,2492],{"emptyLinePlaceholder":151},[49,29369,29370],{"class":51,"line":109},[49,29371,29372],{"class":283},"# 例子：\n",[49,29374,29375,29377,29379,29381],{"class":51,"line":120},[49,29376,26644],{"class":2055},[49,29378,29264],{"class":328},[49,29380,28823],{"class":328},[49,29382,24769],{"class":66},[49,29384,29385,29388,29391],{"class":51,"line":135},[49,29386,29387],{"class":55},"--platform ",[49,29389,29390],{"class":328},"linux\u002Famd64,linux\u002Farm64",[49,29392,24769],{"class":66},[49,29394,29395,29397,29400],{"class":51,"line":1306},[49,29396,28826],{"class":66},[49,29398,29399],{"class":328}," tungchiahui\u002Fros:noetic-focal",[49,29401,24769],{"class":66},[49,29403,29404,29406],{"class":51,"line":1312},[49,29405,29361],{"class":66},[49,29407,24769],{"class":66},[49,29409,29410],{"class":51,"line":1403},[49,29411,28832],{"class":328},[49,29413,29414],{"class":51,"line":1409},[49,29415,2492],{"emptyLinePlaceholder":151},[49,29417,29418,29420,29422,29424],{"class":51,"line":1421},[49,29419,26644],{"class":2055},[49,29421,29264],{"class":328},[49,29423,28823],{"class":328},[49,29425,24769],{"class":66},[49,29427,29428,29430,29432],{"class":51,"line":1704},[49,29429,29387],{"class":55},[49,29431,29390],{"class":328},[49,29433,24769],{"class":66},[49,29435,29436,29438,29441],{"class":51,"line":1709},[49,29437,28826],{"class":66},[49,29439,29440],{"class":328}," tungchiahui\u002Fros:humble-jammy",[49,29442,24769],{"class":66},[49,29444,29445,29447],{"class":51,"line":1715},[49,29446,29361],{"class":66},[49,29448,24769],{"class":66},[49,29450,29451],{"class":51,"line":1720},[49,29452,28832],{"class":328},[49,29454,29455],{"class":51,"line":1734},[49,29456,2492],{"emptyLinePlaceholder":151},[49,29458,29459,29461,29463,29465],{"class":51,"line":1739},[49,29460,26644],{"class":2055},[49,29462,29264],{"class":328},[49,29464,28823],{"class":328},[49,29466,24769],{"class":66},[49,29468,29469,29471,29473],{"class":51,"line":1745},[49,29470,29387],{"class":55},[49,29472,29390],{"class":328},[49,29474,24769],{"class":66},[49,29476,29477,29479,29482],{"class":51,"line":1766},[49,29478,28826],{"class":66},[49,29480,29481],{"class":328}," tungchiahui\u002Fros:jazzy-noble",[49,29483,24769],{"class":66},[49,29485,29486,29488],{"class":51,"line":1771},[49,29487,29361],{"class":66},[49,29489,24769],{"class":66},[49,29491,29492],{"class":51,"line":1785},[49,29493,28832],{"class":328},[49,29495,29496],{"class":51,"line":1790},[49,29497,2492],{"emptyLinePlaceholder":151},[49,29499,29500,29502,29504,29506],{"class":51,"line":1819},[49,29501,26411],{"class":2055},[49,29503,29264],{"class":328},[49,29505,28823],{"class":328},[49,29507,24769],{"class":66},[49,29509,29510,29512,29514],{"class":51,"line":1824},[49,29511,29387],{"class":55},[49,29513,29390],{"class":328},[49,29515,24769],{"class":66},[49,29517,29518,29520,29523],{"class":51,"line":1841},[49,29519,28826],{"class":66},[49,29521,29522],{"class":328}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[49,29524,24769],{"class":66},[49,29526,29527,29529],{"class":51,"line":1846},[49,29528,29361],{"class":66},[49,29530,24769],{"class":66},[49,29532,29533],{"class":51,"line":1851},[49,29534,28832],{"class":328},[49,29536,29537],{"class":51,"line":1856},[49,29538,2492],{"emptyLinePlaceholder":151},[49,29540,29541,29543,29545,29547],{"class":51,"line":1870},[49,29542,26644],{"class":2055},[49,29544,29264],{"class":328},[49,29546,28823],{"class":328},[49,29548,24769],{"class":66},[49,29550,29551,29553,29555],{"class":51,"line":1875},[49,29552,29387],{"class":55},[49,29554,29390],{"class":328},[49,29556,24769],{"class":66},[49,29558,29559,29561,29564],{"class":51,"line":2669},[49,29560,28826],{"class":66},[49,29562,29563],{"class":328}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[49,29565,24769],{"class":66},[49,29567,29568,29570],{"class":51,"line":2683},[49,29569,29361],{"class":66},[49,29571,24769],{"class":66},[49,29573,29574],{"class":51,"line":2691},[49,29575,28832],{"class":328},[49,29577,29578],{"class":51,"line":2696},[49,29579,2492],{"emptyLinePlaceholder":151},[49,29581,29582,29584,29586,29588],{"class":51,"line":2702},[49,29583,26411],{"class":2055},[49,29585,29264],{"class":328},[49,29587,28823],{"class":328},[49,29589,24769],{"class":66},[49,29591,29592,29594,29596],{"class":51,"line":2708},[49,29593,29387],{"class":55},[49,29595,29390],{"class":328},[49,29597,24769],{"class":66},[49,29599,29600,29602,29605],{"class":51,"line":2713},[49,29601,28826],{"class":66},[49,29603,29604],{"class":328}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[49,29606,24769],{"class":66},[49,29608,29609,29611],{"class":51,"line":8038},[49,29610,29361],{"class":66},[49,29612,24769],{"class":66},[49,29614,29615],{"class":51,"line":8062},[49,29616,28832],{"class":328},[49,29618,29619],{"class":51,"line":8067},[49,29620,2492],{"emptyLinePlaceholder":151},[49,29622,29623,29625,29627,29629],{"class":51,"line":8073},[49,29624,26644],{"class":2055},[49,29626,29264],{"class":328},[49,29628,28823],{"class":328},[49,29630,24769],{"class":66},[49,29632,29633,29635,29637],{"class":51,"line":8100},[49,29634,29387],{"class":55},[49,29636,29390],{"class":328},[49,29638,24769],{"class":66},[49,29640,29641,29643,29646],{"class":51,"line":8105},[49,29642,28826],{"class":66},[49,29644,29645],{"class":328}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[49,29647,24769],{"class":66},[49,29649,29650,29652],{"class":51,"line":8111},[49,29651,29361],{"class":66},[49,29653,24769],{"class":66},[49,29655,29656],{"class":51,"line":8123},[49,29657,28832],{"class":328},[49,29659,29660],{"class":51,"line":8135},[49,29661,2492],{"emptyLinePlaceholder":151},[49,29663,29664,29666,29668,29670],{"class":51,"line":8147},[49,29665,26644],{"class":2055},[49,29667,29264],{"class":328},[49,29669,28823],{"class":328},[49,29671,24769],{"class":66},[49,29673,29674,29676,29678],{"class":51,"line":9806},[49,29675,29387],{"class":55},[49,29677,29390],{"class":328},[49,29679,24769],{"class":66},[49,29681,29682,29684,29687],{"class":51,"line":9831},[49,29683,28826],{"class":66},[49,29685,29686],{"class":328}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,29688,24769],{"class":66},[49,29690,29691,29693],{"class":51,"line":9854},[49,29692,29361],{"class":66},[49,29694,24769],{"class":66},[49,29696,29697],{"class":51,"line":9878},[49,29698,28832],{"class":328},[49,29700,29701],{"class":51,"line":9883},[49,29702,2492],{"emptyLinePlaceholder":151},[49,29704,29705,29707,29709,29711],{"class":51,"line":9888},[49,29706,26411],{"class":2055},[49,29708,29264],{"class":328},[49,29710,28823],{"class":328},[49,29712,24769],{"class":66},[49,29714,29715,29717,29719],{"class":51,"line":9893},[49,29716,29387],{"class":55},[49,29718,29390],{"class":328},[49,29720,24769],{"class":66},[49,29722,29723,29725,29728],{"class":51,"line":9902},[49,29724,28826],{"class":66},[49,29726,29727],{"class":328}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[49,29729,24769],{"class":66},[49,29731,29732,29734],{"class":51,"line":9907},[49,29733,29361],{"class":66},[49,29735,24769],{"class":66},[49,29737,29738],{"class":51,"line":9913},[49,29739,28832],{"class":328},[49,29741,29742],{"class":51,"line":9934},[49,29743,2492],{"emptyLinePlaceholder":151},[49,29745,29746,29749,29751,29753],{"class":51,"line":9940},[49,29747,29748],{"class":2055},"  docker",[49,29750,29264],{"class":328},[49,29752,28823],{"class":328},[49,29754,24769],{"class":66},[49,29756,29757,29759,29761],{"class":51,"line":9954},[49,29758,29387],{"class":55},[49,29760,29390],{"class":328},[49,29762,24769],{"class":66},[49,29764,29765,29767,29770],{"class":51,"line":9960},[49,29766,28826],{"class":66},[49,29768,29769],{"class":328}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,29771,24769],{"class":66},[49,29773,29774,29776],{"class":51,"line":9987},[49,29775,29361],{"class":66},[49,29777,24769],{"class":66},[49,29779,29780],{"class":51,"line":9996},[49,29781,28832],{"class":328},[14,29783,29784],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29786,29787],{},[1554,29788],{"alt":44,"src":29789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29791,29792],{},[1554,29793],{"alt":44,"src":29794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22088,29796,29798],{"id":29797},"_623清除构建缓存","6.2.3.清除构建缓存",[39,29800,29802],{"className":23912,"code":29801,"language":23914,"meta":44,"style":44},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[46,29803,29804,29809],{"__ignoreMap":44},[49,29805,29806],{"class":51,"line":52},[49,29807,29808],{"class":283},"# 清理BuildKit构建缓存\n",[49,29810,29811,29813,29816,29819],{"class":51,"line":84},[49,29812,26644],{"class":2055},[49,29814,29815],{"class":328}," builder",[49,29817,29818],{"class":328}," prune",[49,29820,29821],{"class":66}," -f\n",[14,29823,29824],{},[1554,29825],{"alt":44,"src":29826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[195,29828,29830],{"id":29829},"_63补充","6.3.补充",[22088,29832,29834],{"id":29833},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29836,29837],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29839,29840],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29842,29843],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[39,29845,29847],{"className":23912,"code":29846,"language":23914,"meta":44,"style":44},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[46,29848,29849,29856],{"__ignoreMap":44},[49,29850,29851,29853],{"class":51,"line":52},[49,29852,27461],{"class":2055},[49,29854,29855],{"class":328}," nginx\n",[49,29857,29858,29860,29863,29866,29868],{"class":51,"line":84},[49,29859,28646],{"class":2055},[49,29861,29862],{"class":328}," echo",[49,29864,29865],{"class":328}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[49,29867,26313],{"class":59},[49,29869,29870],{"class":328}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29872,29873],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29875,29876],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[39,29878,29880],{"className":23912,"code":29879,"language":23914,"meta":44,"style":44},"docker build -t nginx:tuling .\n",[46,29881,29882],{"__ignoreMap":44},[49,29883,29884,29886,29888,29890,29893],{"class":51,"line":52},[49,29885,26644],{"class":2055},[49,29887,28823],{"class":328},[49,29889,28826],{"class":66},[49,29891,29892],{"class":328}," nginx:tuling",[49,29894,28832],{"class":328},[14,29896,29897],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29899,29900],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[39,29902,29904],{"className":23912,"code":29903,"language":23914,"meta":44,"style":44},"docker run -d -p 92:80 nginx:tuling\n",[46,29905,29906],{"__ignoreMap":44},[49,29907,29908,29910,29912,29915,29917,29920],{"class":51,"line":52},[49,29909,26644],{"class":2055},[49,29911,27321],{"class":328},[49,29913,29914],{"class":66}," -d",[49,29916,29307],{"class":66},[49,29918,29919],{"class":328}," 92:80",[49,29921,29922],{"class":328}," nginx:tuling\n",[14,29924,29925,29926],{},"4、访问 ",[56,29927,29930],{"href":29928,"rel":29929},"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",[23955],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29932,29933],{},[1554,29934],{"alt":44,"src":29935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29937,29938],{},[1554,29939],{"alt":44,"src":29940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22088,29942,29944],{"id":29943},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29946,29947],{},"只需要知道大体流程即可",[14,29949,29950],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29952,29953],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29955,29956],{},"2、在Dockerfile中添加以下内容",[39,29958,29960],{"className":26182,"code":29959,"language":26184,"meta":44,"style":44},"# 基于哪个镜像\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",[46,29961,29962,29967,29972,29977,29982,29987,29992,29997],{"__ignoreMap":44},[49,29963,29964],{"class":51,"line":52},[49,29965,29966],{},"# 基于哪个镜像\n",[49,29968,29969],{"class":51,"line":84},[49,29970,29971],{},"From java:8\n",[49,29973,29974],{"class":51,"line":109},[49,29975,29976],{},"# 复制文件到容器\n",[49,29978,29979],{"class":51,"line":120},[49,29980,29981],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[49,29983,29984],{"class":51,"line":135},[49,29985,29986],{},"# 声明需要暴露的端口\n",[49,29988,29989],{"class":51,"line":1306},[49,29990,29991],{},"EXPOSE 8877\n",[49,29993,29994],{"class":51,"line":1312},[49,29995,29996],{},"# 配置容器启动后执行的命令\n",[49,29998,29999],{"class":51,"line":1403},[49,30000,30001],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30003,30004],{},"3、使用docker build命令构建镜像",[39,30006,30008],{"className":23912,"code":30007,"language":23914,"meta":44,"style":44},"docker build -t tulingmall-member:0.0.5 .\n",[46,30009,30010],{"__ignoreMap":44},[49,30011,30012,30014,30016,30018,30021],{"class":51,"line":52},[49,30013,26644],{"class":2055},[49,30015,28823],{"class":328},[49,30017,28826],{"class":66},[49,30019,30020],{"class":328}," tulingmall-member:0.0.5",[49,30022,28832],{"class":328},[14,30024,30025],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30027,30028],{},[1554,30029],{"alt":44,"src":30030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30032,30033],{},"4、启动镜像，加-d可在后台启动",[39,30035,30037],{"className":23912,"code":30036,"language":23914,"meta":44,"style":44},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[46,30038,30039],{"__ignoreMap":44},[49,30040,30041,30043,30045,30047,30049,30052],{"class":51,"line":52},[49,30042,26644],{"class":2055},[49,30044,27321],{"class":328},[49,30046,29914],{"class":66},[49,30048,29307],{"class":66},[49,30050,30051],{"class":328}," 8877:8877",[49,30053,30054],{"class":328}," tulingmall-member:0.0.5\n",[14,30056,30057],{},"加上JVM参数：",[39,30059,30061],{"className":23912,"code":30060,"language":23914,"meta":44,"style":44},"# --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",[46,30062,30063,30068,30083,30093,30102,30109],{"__ignoreMap":44},[49,30064,30065],{"class":51,"line":52},[49,30066,30067],{"class":283},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[49,30069,30070,30072,30074,30077,30079,30081],{"class":51,"line":84},[49,30071,26644],{"class":2055},[49,30073,27321],{"class":328},[49,30075,30076],{"class":66},"  -d",[49,30078,29307],{"class":66},[49,30080,30051],{"class":328},[49,30082,24769],{"class":66},[49,30084,30085,30087,30090],{"class":51,"line":109},[49,30086,28219],{"class":55},[49,30088,30089],{"class":328},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[49,30091,30092],{"class":66},"  \\\n",[49,30094,30095,30097,30100],{"class":51,"line":120},[49,30096,28219],{"class":55},[49,30098,30099],{"class":328},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[49,30101,30092],{"class":66},[49,30103,30104,30107],{"class":51,"line":135},[49,30105,30106],{"class":55},"--cap-add=SYS_PTRACE  ",[49,30108,26266],{"class":66},[49,30110,30111],{"class":51,"line":1306},[49,30112,30113],{"class":55},"tulingmall-member:0.0.5\n",[14,30115,30116],{},"5、访问会员服务接口",[14,30118,30119],{},[1554,30120],{"alt":44,"src":30121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22088,30123,30125],{"id":30124},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30127,30128],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30130,30131,30132],{},"阿里云docker镜像仓库：",[56,30133,30134],{"href":30134,"rel":30135},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23955],[14,30137,30138],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30140,30141],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30143,30144],{},[1554,30145],{"alt":44,"src":30146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30148,30149],{},"要把镜像推送到镜像仓库",[39,30151,30153],{"className":23912,"code":30152,"language":23914,"meta":44,"style":44},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,30154,30155],{"__ignoreMap":44},[49,30156,30157,30159,30161,30163],{"class":51,"line":52},[49,30158,26644],{"class":2055},[49,30160,28988],{"class":328},[49,30162,30020],{"class":328},[49,30164,30165],{"class":328}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30167,30168],{},"最后将镜像推送到远程仓库",[39,30170,30172],{"className":23912,"code":30171,"language":23914,"meta":44,"style":44},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,30173,30174],{"__ignoreMap":44},[49,30175,30176,30178,30180],{"class":51,"line":52},[49,30177,26644],{"class":2055},[49,30179,29107],{"class":328},[49,30181,30165],{"class":328},[143,30183,30184],{},"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":44,"searchDepth":84,"depth":84,"links":30186},[30187,30188,30189],{"id":28574,"depth":109,"text":28575},{"id":28803,"depth":109,"text":28804},{"id":29829,"depth":109,"text":29830},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28566,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30196,"title":30197,"body":30198,"description":44,"extension":149,"meta":30341,"navigation":151,"path":30342,"seo":30343,"stem":30344,"__hash__":30345},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30199,"toc":30339},[30200,30203,30208,30213,30216,30221,30226,30229,30234,30239,30242,30247,30250,30253,30256,30259,30262,30265,30285,30307,30310,30313,30333,30336],[10,30201,30197],{"id":30202},"_7vscode远程开发",[178,30204,30205],{},[181,30206,30207],{},"插件1：微软Docker工具",[14,30209,30210],{},[1554,30211],{"alt":44,"src":30212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30214,30215],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30217,30218],{},[1554,30219],{"alt":44,"src":30220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[178,30222,30223],{"start":84},[181,30224,30225],{},"插件2：微软Docker远程开发工具",[14,30227,30228],{},"下面这是远程开发的插件。",[14,30230,30231],{},[1554,30232],{"alt":44,"src":30233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30235,30236],{},[1554,30237],{"alt":44,"src":30238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30240,30241],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30243,30244],{},[1554,30245],{"alt":44,"src":30246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30248,30249],{},"安装完拓展之后，vscode进行链接：",[14,30251,30252],{},"1.按ctrl+shift+p",[14,30254,30255],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30257,30258],{},"3.选择目前运行的容器",[14,30260,30261],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30263,30264],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[39,30266,30268],{"className":23912,"code":30267,"language":23914,"meta":44,"style":44},"docker run -v 主机目录:容器目录 image-name\n",[46,30269,30270],{"__ignoreMap":44},[49,30271,30272,30274,30276,30279,30282],{"class":51,"line":52},[49,30273,26644],{"class":2055},[49,30275,27321],{"class":328},[49,30277,30278],{"class":66}," -v",[49,30280,30281],{"class":328}," 主机目录:容器目录",[49,30283,30284],{"class":328}," image-name\n",[39,30286,30288],{"className":23912,"code":30287,"language":23914,"meta":44,"style":44},"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",[46,30289,30290],{"__ignoreMap":44},[49,30291,30292,30294,30296,30299,30301,30304],{"class":51,"line":52},[49,30293,26644],{"class":2055},[49,30295,27321],{"class":328},[49,30297,30298],{"class":66}," -it",[49,30300,30278],{"class":66},[49,30302,30303],{"class":328}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[49,30305,30306],{"class":328}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30308,30309],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30311,30312],{},"查看挂载情况：",[39,30314,30316],{"className":23912,"code":30315,"language":23914,"meta":44,"style":44},"mount | grep -i project\n",[46,30317,30318],{"__ignoreMap":44},[49,30319,30320,30323,30325,30328,30330],{"class":51,"line":52},[49,30321,30322],{"class":2055},"mount",[49,30324,25200],{"class":59},[49,30326,30327],{"class":2055}," grep",[49,30329,26521],{"class":66},[49,30331,30332],{"class":328}," project\n",[14,30334,30335],{},"也可以通过ls来进行查看",[143,30337,30338],{},"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":44,"searchDepth":84,"depth":84,"links":30340},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30197,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30347,"title":30348,"body":30349,"description":148,"extension":149,"meta":30353,"navigation":151,"path":30355,"seo":30356,"stem":30357,"__hash__":30358},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30350,"toc":30351},[],{"title":44,"searchDepth":84,"depth":84,"links":30352},[],{"category":30354},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30348,"description":148},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30360,"title":30361,"body":30362,"description":148,"extension":149,"meta":30366,"navigation":151,"path":30367,"seo":30368,"stem":30369,"__hash__":30370},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30363,"toc":30364},[],{"title":44,"searchDepth":84,"depth":84,"links":30365},[],{"category":30354},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30361,"description":148},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30372,"title":30373,"body":30374,"description":148,"extension":149,"meta":30665,"navigation":151,"path":30666,"seo":30667,"stem":30668,"__hash__":30669},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30375,"toc":30663},[30376,30379,30387,30402,30407,30458,30461,30467,30652,30657,30660],[10,30377,30373],{"id":30378},"_1验证深度学习环境",[14,30380,30381,30382],{},"关于环境的安装，看",[56,30383,30386],{"href":30384,"rel":30385},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23955],"Pytorch-->深度学习",[14,30388,30389,30390,30393,30394,30397,30398,30401],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[46,30391,30392],{},"pytorch-cuda=12.4"," 是一个“ ",[373,30395,30396],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[373,30399,30400],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30403,30404],{},[1554,30405],{"alt":44,"src":30406},"\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",[39,30408,30410],{"className":23912,"code":30409,"language":23914,"meta":44,"style":44},"# 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",[46,30411,30412,30417],{"__ignoreMap":44},[49,30413,30414],{"class":51,"line":52},[49,30415,30416],{"class":283},"# CUDA 12.4\n",[49,30418,30419,30422,30424,30427,30430,30433,30436,30439,30441,30444,30447,30450,30453,30455],{"class":51,"line":84},[49,30420,30421],{"class":2055},"conda",[49,30423,23924],{"class":328},[49,30425,30426],{"class":328}," pytorch==",[49,30428,30429],{"class":66},"2.5.1",[49,30431,30432],{"class":328}," torchvision==",[49,30434,30435],{"class":66},"0.20.1",[49,30437,30438],{"class":328}," torchaudio==",[49,30440,30429],{"class":66},[49,30442,30443],{"class":328}," pytorch-cuda=",[49,30445,30446],{"class":66},"12.4",[49,30448,30449],{"class":66}," -c",[49,30451,30452],{"class":328}," pytorch",[49,30454,30449],{"class":66},[49,30456,30457],{"class":328}," nvidia\n",[14,30459,30460],{},"）：",[14,30462,30463],{},[56,30464,30465],{"href":30465,"rel":30466},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23955],[39,30468,30470],{"className":41,"code":30469,"language":43,"meta":44,"style":44},"# 对深度学习环境进行测试\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",[46,30471,30472,30477,30485,30490,30500,30516,30521,30531,30568,30575,30587,30603,30608,30618,30630,30640],{"__ignoreMap":44},[49,30473,30474],{"class":51,"line":52},[49,30475,30476],{"class":283},"# 对深度学习环境进行测试\n",[49,30478,30479,30482],{"class":51,"line":84},[49,30480,30481],{"class":59},"import",[49,30483,30484],{"class":55}," torch\n",[49,30486,30487],{"class":51,"line":109},[49,30488,30489],{"class":283},"# 查看cuda是否被激活\n",[49,30491,30492,30495,30497],{"class":51,"line":120},[49,30493,30494],{"class":55},"flag",[49,30496,60],{"class":59},[49,30498,30499],{"class":55},"torch.cuda.is_available()\n",[49,30501,30502,30505,30507,30510,30513],{"class":51,"line":135},[49,30503,30504],{"class":66},"print",[49,30506,228],{"class":55},[49,30508,30509],{"class":328},"\"cuda:\"",[49,30511,30512],{"class":55},", flag)   ",[49,30514,30515],{"class":283},"#返回true的话说明被激活\n",[49,30517,30518],{"class":51,"line":1306},[49,30519,30520],{"class":283},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[49,30522,30523,30526,30528],{"class":51,"line":1312},[49,30524,30525],{"class":55},"ngpu",[49,30527,60],{"class":59},[49,30529,30530],{"class":66},"1\n",[49,30532,30533,30536,30538,30541,30544,30546,30549,30552,30555,30557,30559,30561,30563,30566],{"class":51,"line":1403},[49,30534,30535],{"class":55},"device",[49,30537,60],{"class":59},[49,30539,30540],{"class":55},"torch.device(",[49,30542,30543],{"class":328},"\"cuda:0\"",[49,30545,1796],{"class":59},[49,30547,30548],{"class":55},"(torch.cuda.is_available() ",[49,30550,30551],{"class":59},"and",[49,30553,30554],{"class":55}," ngpu",[49,30556,1179],{"class":59},[49,30558,415],{"class":66},[49,30560,13804],{"class":55},[49,30562,1793],{"class":59},[49,30564,30565],{"class":328}," \"cpu\"",[49,30567,81],{"class":55},[49,30569,30570,30572],{"class":51,"line":1409},[49,30571,30504],{"class":66},[49,30573,30574],{"class":55},"(device)\n",[49,30576,30577,30579,30582,30584],{"class":51,"line":1421},[49,30578,30504],{"class":66},[49,30580,30581],{"class":55},"(torch.cuda.get_device_name(",[49,30583,415],{"class":66},[49,30585,30586],{"class":55},"))\n",[49,30588,30589,30591,30594,30596,30598,30600],{"class":51,"line":1704},[49,30590,30504],{"class":66},[49,30592,30593],{"class":55},"(torch.rand(",[49,30595,73],{"class":66},[49,30597,76],{"class":55},[49,30599,73],{"class":66},[49,30601,30602],{"class":55},").cuda())\n",[49,30604,30605],{"class":51,"line":1709},[49,30606,30607],{"class":283},"# 查看cuda和cudnn的版本\n",[49,30609,30610,30613,30615],{"class":51,"line":1715},[49,30611,30612],{"class":55},"cuda_version",[49,30614,60],{"class":59},[49,30616,30617],{"class":55},"torch.version.cuda\n",[49,30619,30620,30622,30624,30627],{"class":51,"line":1720},[49,30621,30504],{"class":66},[49,30623,228],{"class":55},[49,30625,30626],{"class":328},"\"cuda version\"",[49,30628,30629],{"class":55},",cuda_version)\n",[49,30631,30632,30635,30637],{"class":51,"line":1734},[49,30633,30634],{"class":55},"cudnn_version",[49,30636,60],{"class":59},[49,30638,30639],{"class":55},"torch.backends.cudnn.version()\n",[49,30641,30642,30644,30646,30649],{"class":51,"line":1739},[49,30643,30504],{"class":66},[49,30645,228],{"class":55},[49,30647,30648],{"class":328},"\"cudnn version\"",[49,30650,30651],{"class":55},",cudnn_version)\n",[14,30653,30654],{},[1554,30655],{"alt":44,"src":30656},"\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,30658,30659],{},"cuda:0 指的是一块显卡",[143,30661,30662],{},"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":44,"searchDepth":84,"depth":84,"links":30664},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30373,"description":148},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30671,"title":30672,"body":30673,"description":148,"extension":149,"meta":50477,"navigation":151,"path":50478,"seo":50479,"stem":50480,"__hash__":50481},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30674,"toc":50471},[30675,30678,30682,30686,30689,30694,30699,30702,30707,30712,30717,30720,30724,30729,30733,30738,30741,30746,30749,30752,30755,30758,30763,30766,30771,30776,30781,30786,30789,30793,30796,30801,31405,31410,31413,31418,31421,31424,31888,31891,31894,31897,31900,33951,33954,33959,33964,34759,34762,34767,35545,35549,37208,37212,37926,37930,37934,37939,37944,37949,37952,37957,37962,37967,37972,37977,37981,37986,39268,39273,39276,39279,39282,39437,39440,39443,40659,40664,41359,41363,41367,41372,41377,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41435,41440,41445,41450,41455,41460,41465,41470,41475,41480,41485,41490,41495,41500,41505,41510,41515,41520,41525,41530,41534,41538,41541,43019,43023,44670,44674,45368,45372,45375,45378,45922,45925,45929,45932,47329,47333,47336,47914,49701,49705,49708,50468],[10,30676,30672],{"id":30677},"_2经典神经网络",[195,30679,30681],{"id":30680},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22088,30683,30685],{"id":30684},"_211原理介绍","2.1.1.原理介绍",[14,30687,30688],{},"LeNet-5",[178,30690,30691],{},[181,30692,30693],{},"原理",[14,30695,30696],{},[1554,30697],{"alt":44,"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-003.png",[14,30700,30701],{},"B是batch批次；C是channel通道",[178,30703,30704],{"start":84},[181,30705,30706],{},"网络参数详细",[14,30708,30709],{},[1554,30710],{"alt":44,"src":30711},"\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,30713,30714],{},[1554,30715],{"alt":44,"src":30716},"\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,30718,30719],{},"AlexNet",[178,30721,30722],{},[181,30723,30693],{},[14,30725,30726],{},[1554,30727],{"alt":44,"src":30728},"\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",[178,30730,30731],{"start":84},[181,30732,30706],{},[14,30734,30735],{},[1554,30736],{"alt":44,"src":30737},"\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,30739,30740],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30742,30743],{},[1554,30744],{"alt":44,"src":30745},"\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,30747,30748],{},"数据处理中的图像增强操作:",[14,30750,30751],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30753,30754],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30756,30757],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30759,30760],{},[1554,30761],{"alt":44,"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-009.png",[14,30764,30765],{},"提升网络精确度的方法：LRN正则化",[14,30767,30768],{},[1554,30769],{"alt":44,"src":30770},"\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,30772,30773],{},[1554,30774],{"alt":44,"src":30775},"\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",[178,30777,30778],{"start":109},[181,30779,30780],{},"AlexNet的总结",[14,30782,30783],{},[1554,30784],{"alt":44,"src":30785},"\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,30787,30788],{},"比LeNet模型要深一丢丢",[22088,30790,30792],{"id":30791},"_212代码实现","2.1.2.代码实现",[14,30794,30795],{},"（1）LeNet",[178,30797,30798],{},[181,30799,30800],{},"模型搭建",[39,30802,30804],{"className":41,"code":30803,"language":43,"meta":44,"style":44},"# 导入库\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",[46,30805,30806,30811,30817,30822,30835,30840,30852,30856,30876,30881,30886,30897,30902,30921,30925,30930,30979,30991,30996,31025,31060,31087,31092,31104,31109,31129,31148,31167,31171,31176,31186,31203,31214,31229,31240,31251,31266,31281,31292,31299,31303,31317,31322,31345,31350,31355,31360,31364,31369,31374,31384],{"__ignoreMap":44},[49,30807,30808],{"class":51,"line":52},[49,30809,30810],{"class":283},"# 导入库\n",[49,30812,30813,30815],{"class":51,"line":84},[49,30814,30481],{"class":59},[49,30816,30484],{"class":55},[49,30818,30819],{"class":51,"line":109},[49,30820,30821],{"class":283},"# 导入神经网络层\n",[49,30823,30824,30827,30830,30832],{"class":51,"line":120},[49,30825,30826],{"class":59},"from",[49,30828,30829],{"class":55}," torch ",[49,30831,30481],{"class":59},[49,30833,30834],{"class":55}," nn\n",[49,30836,30837],{"class":51,"line":135},[49,30838,30839],{"class":283},"# 导入展示神经网络参数的包\n",[49,30841,30842,30844,30847,30849],{"class":51,"line":1306},[49,30843,30826],{"class":59},[49,30845,30846],{"class":55}," torchsummary ",[49,30848,30481],{"class":59},[49,30850,30851],{"class":55}," summary\n",[49,30853,30854],{"class":51,"line":1312},[49,30855,2492],{"emptyLinePlaceholder":151},[49,30857,30858,30860,30863,30865,30868,30870,30873],{"class":51,"line":1403},[49,30859,14784],{"class":59},[49,30861,30862],{"class":2055}," LeNet",[49,30864,228],{"class":55},[49,30866,30867],{"class":2055},"nn",[49,30869,777],{"class":55},[49,30871,30872],{"class":2055},"Module",[49,30874,30875],{"class":55},"):\n",[49,30877,30878],{"class":51,"line":1409},[49,30879,30880],{"class":283},"    # 模型初始化:\n",[49,30882,30883],{"class":51,"line":1421},[49,30884,30885],{"class":283},"    # 定义一些网络层和激活函数\n",[49,30887,30888,30891,30894],{"class":51,"line":1704},[49,30889,30890],{"class":59},"    def",[49,30892,30893],{"class":66}," __init__",[49,30895,30896],{"class":55},"(self):\n",[49,30898,30899],{"class":51,"line":1709},[49,30900,30901],{"class":283},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[49,30903,30904,30907,30910,30913,30916,30919],{"class":51,"line":1715},[49,30905,30906],{"class":66},"        super",[49,30908,30909],{"class":55},"(LeNet,",[49,30911,30912],{"class":66},"self",[49,30914,30915],{"class":55},").",[49,30917,30918],{"class":66},"__init__",[49,30920,2068],{"class":55},[49,30922,30923],{"class":51,"line":1720},[49,30924,2492],{"emptyLinePlaceholder":151},[49,30926,30927],{"class":51,"line":1734},[49,30928,30929],{"class":283},"        # 定义网络层\n",[49,30931,30932,30935,30938,30940,30943,30946,30948,30950,30952,30955,30957,30959,30961,30964,30966,30968,30970,30973,30975,30977],{"class":51,"line":1739},[49,30933,30934],{"class":66},"        self",[49,30936,30937],{"class":55},".c1",[49,30939,60],{"class":59},[49,30941,30942],{"class":55},"nn.Conv2d(",[49,30944,30945],{"class":126},"in_channels",[49,30947,60],{"class":59},[49,30949,441],{"class":66},[49,30951,76],{"class":55},[49,30953,30954],{"class":126},"out_channels",[49,30956,60],{"class":59},[49,30958,566],{"class":66},[49,30960,76],{"class":55},[49,30962,30963],{"class":126},"kernel_size",[49,30965,60],{"class":59},[49,30967,541],{"class":66},[49,30969,76],{"class":55},[49,30971,30972],{"class":126},"padding",[49,30974,60],{"class":59},[49,30976,301],{"class":66},[49,30978,81],{"class":55},[49,30980,30981,30983,30986,30988],{"class":51,"line":1745},[49,30982,30934],{"class":66},[49,30984,30985],{"class":55},".sig",[49,30987,60],{"class":59},[49,30989,30990],{"class":55},"nn.Sigmoid()\n",[49,30992,30993],{"class":51,"line":1766},[49,30994,30995],{"class":283},"        # 定义池化\n",[49,30997,30998,31000,31003,31005,31008,31010,31012,31014,31016,31019,31021,31023],{"class":51,"line":1771},[49,30999,30934],{"class":66},[49,31001,31002],{"class":55},".s2",[49,31004,60],{"class":59},[49,31006,31007],{"class":55},"nn.AvgPool2d(",[49,31009,30963],{"class":126},[49,31011,60],{"class":59},[49,31013,301],{"class":66},[49,31015,76],{"class":55},[49,31017,31018],{"class":126},"stride",[49,31020,60],{"class":59},[49,31022,301],{"class":66},[49,31024,81],{"class":55},[49,31026,31027,31029,31032,31034,31036,31038,31040,31042,31044,31046,31048,31050,31052,31054,31056,31058],{"class":51,"line":1785},[49,31028,30934],{"class":66},[49,31030,31031],{"class":55},".c3",[49,31033,60],{"class":59},[49,31035,30942],{"class":55},[49,31037,30945],{"class":126},[49,31039,60],{"class":59},[49,31041,566],{"class":66},[49,31043,76],{"class":55},[49,31045,30954],{"class":126},[49,31047,60],{"class":59},[49,31049,820],{"class":66},[49,31051,76],{"class":55},[49,31053,30963],{"class":126},[49,31055,60],{"class":59},[49,31057,541],{"class":66},[49,31059,81],{"class":55},[49,31061,31062,31064,31067,31069,31071,31073,31075,31077,31079,31081,31083,31085],{"class":51,"line":1790},[49,31063,30934],{"class":66},[49,31065,31066],{"class":55},".s4",[49,31068,60],{"class":59},[49,31070,31007],{"class":55},[49,31072,30963],{"class":126},[49,31074,60],{"class":59},[49,31076,301],{"class":66},[49,31078,76],{"class":55},[49,31080,31018],{"class":126},[49,31082,60],{"class":59},[49,31084,301],{"class":66},[49,31086,81],{"class":55},[49,31088,31089],{"class":51,"line":1819},[49,31090,31091],{"class":283},"        # 定义平展层\n",[49,31093,31094,31096,31099,31101],{"class":51,"line":1824},[49,31095,30934],{"class":66},[49,31097,31098],{"class":55},".flatten",[49,31100,60],{"class":59},[49,31102,31103],{"class":55},"nn.Flatten()\n",[49,31105,31106],{"class":51,"line":1841},[49,31107,31108],{"class":283},"        # 定义全连接层\n",[49,31110,31111,31113,31116,31118,31121,31123,31125,31127],{"class":51,"line":1846},[49,31112,30934],{"class":66},[49,31114,31115],{"class":55},".f5",[49,31117,60],{"class":59},[49,31119,31120],{"class":55},"nn.Linear(",[49,31122,4079],{"class":66},[49,31124,76],{"class":55},[49,31126,1036],{"class":66},[49,31128,81],{"class":55},[49,31130,31131,31133,31136,31138,31140,31142,31144,31146],{"class":51,"line":1851},[49,31132,30934],{"class":66},[49,31134,31135],{"class":55},".f6",[49,31137,60],{"class":59},[49,31139,31120],{"class":55},[49,31141,1036],{"class":66},[49,31143,76],{"class":55},[49,31145,930],{"class":66},[49,31147,81],{"class":55},[49,31149,31150,31152,31155,31157,31159,31161,31163,31165],{"class":51,"line":1856},[49,31151,30934],{"class":66},[49,31153,31154],{"class":55},".f7",[49,31156,60],{"class":59},[49,31158,31120],{"class":55},[49,31160,930],{"class":66},[49,31162,76],{"class":55},[49,31164,95],{"class":66},[49,31166,81],{"class":55},[49,31168,31169],{"class":51,"line":1870},[49,31170,2492],{"emptyLinePlaceholder":151},[49,31172,31173],{"class":51,"line":1875},[49,31174,31175],{"class":283},"    # 写工具->写前向传播\n",[49,31177,31178,31180,31183],{"class":51,"line":2669},[49,31179,30890],{"class":59},[49,31181,31182],{"class":2055}," forward",[49,31184,31185],{"class":55},"(self,x):\n",[49,31187,31188,31191,31193,31195,31198,31200],{"class":51,"line":2683},[49,31189,31190],{"class":55},"        x",[49,31192,60],{"class":59},[49,31194,30912],{"class":66},[49,31196,31197],{"class":55},".sig(",[49,31199,30912],{"class":66},[49,31201,31202],{"class":55},".c1(x))\n",[49,31204,31205,31207,31209,31211],{"class":51,"line":2691},[49,31206,31190],{"class":55},[49,31208,60],{"class":59},[49,31210,30912],{"class":66},[49,31212,31213],{"class":55},".s2(x)\n",[49,31215,31216,31218,31220,31222,31224,31226],{"class":51,"line":2696},[49,31217,31190],{"class":55},[49,31219,60],{"class":59},[49,31221,30912],{"class":66},[49,31223,31197],{"class":55},[49,31225,30912],{"class":66},[49,31227,31228],{"class":55},".c3(x))\n",[49,31230,31231,31233,31235,31237],{"class":51,"line":2702},[49,31232,31190],{"class":55},[49,31234,60],{"class":59},[49,31236,30912],{"class":66},[49,31238,31239],{"class":55},".s4(x)\n",[49,31241,31242,31244,31246,31248],{"class":51,"line":2708},[49,31243,31190],{"class":55},[49,31245,60],{"class":59},[49,31247,30912],{"class":66},[49,31249,31250],{"class":55},".flatten(x)\n",[49,31252,31253,31255,31257,31259,31261,31263],{"class":51,"line":2713},[49,31254,31190],{"class":55},[49,31256,60],{"class":59},[49,31258,30912],{"class":66},[49,31260,31197],{"class":55},[49,31262,30912],{"class":66},[49,31264,31265],{"class":55},".f5(x))\n",[49,31267,31268,31270,31272,31274,31276,31278],{"class":51,"line":8038},[49,31269,31190],{"class":55},[49,31271,60],{"class":59},[49,31273,30912],{"class":66},[49,31275,31197],{"class":55},[49,31277,30912],{"class":66},[49,31279,31280],{"class":55},".f6(x))\n",[49,31282,31283,31285,31287,31289],{"class":51,"line":8062},[49,31284,31190],{"class":55},[49,31286,60],{"class":59},[49,31288,30912],{"class":66},[49,31290,31291],{"class":55},".f7(x)\n",[49,31293,31294,31296],{"class":51,"line":8067},[49,31295,14842],{"class":59},[49,31297,31298],{"class":55}," x\n",[49,31300,31301],{"class":51,"line":8073},[49,31302,2492],{"emptyLinePlaceholder":151},[49,31304,31305,31307,31310,31312,31315],{"class":51,"line":8100},[49,31306,1623],{"class":59},[49,31308,31309],{"class":66}," __name__",[49,31311,3041],{"class":59},[49,31313,31314],{"class":328},"\"__main__\"",[49,31316,3831],{"class":55},[49,31318,31319],{"class":51,"line":8105},[49,31320,31321],{"class":283},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[49,31323,31324,31327,31329,31331,31334,31336,31339,31341,31343],{"class":51,"line":8111},[49,31325,31326],{"class":55},"    device",[49,31328,60],{"class":59},[49,31330,30540],{"class":55},[49,31332,31333],{"class":328},"\"cuda\"",[49,31335,1796],{"class":59},[49,31337,31338],{"class":55}," torch.cuda.is_available() ",[49,31340,1793],{"class":59},[49,31342,30565],{"class":328},[49,31344,81],{"class":55},[49,31346,31347],{"class":51,"line":8123},[49,31348,31349],{"class":283},"    # 如果就是想指定用cpu用下方代码:\n",[49,31351,31352],{"class":51,"line":8135},[49,31353,31354],{"class":283},"    # device=\"cpu\"\n",[49,31356,31357],{"class":51,"line":8147},[49,31358,31359],{"class":283},"    # print(device)\n",[49,31361,31362],{"class":51,"line":9806},[49,31363,2492],{"emptyLinePlaceholder":151},[49,31365,31366],{"class":51,"line":9831},[49,31367,31368],{"class":283},"    # 实例化模型\n",[49,31370,31371],{"class":51,"line":9854},[49,31372,31373],{"class":283},"    # 将模型放到设备中去运行\n",[49,31375,31376,31379,31381],{"class":51,"line":9878},[49,31377,31378],{"class":55},"    model",[49,31380,60],{"class":59},[49,31382,31383],{"class":55},"LeNet().to(device)\n",[49,31385,31386,31389,31392,31394,31396,31398,31400,31402],{"class":51,"line":9883},[49,31387,31388],{"class":66},"    print",[49,31390,31391],{"class":55},"(summary(model,(",[49,31393,441],{"class":66},[49,31395,76],{"class":55},[49,31397,1120],{"class":66},[49,31399,76],{"class":55},[49,31401,1120],{"class":66},[49,31403,31404],{"class":55},")))\n",[14,31406,31407],{},[1554,31408],{"alt":44,"src":31409},"\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,31411,31412],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[178,31414,31415],{"start":84},[181,31416,31417],{},"训练",[14,31419,31420],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31422,31423],{},"在训练之前可以将数据展示看一下",[39,31425,31427],{"className":41,"code":31426,"language":43,"meta":44,"style":44},"# 建立画图的函数，用于展示数据\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",[46,31428,31429,31434,31439,31451,31463,31476,31481,31493,31498,31510,31515,31527,31531,31535,31556,31568,31573,31594,31605,31609,31614,31632,31643,31648,31659,31664,31675,31679,31684,31699,31712,31717,31722,31735,31748,31761,31766,31770,31775,31795,31812,31832,31845,31858,31868,31883],{"__ignoreMap":44},[49,31430,31431],{"class":51,"line":52},[49,31432,31433],{"class":283},"# 建立画图的函数，用于展示数据\n",[49,31435,31436],{"class":51,"line":84},[49,31437,31438],{"class":283},"# torchvision中包含很多内置的数据集\n",[49,31440,31441,31443,31446,31448],{"class":51,"line":109},[49,31442,30826],{"class":59},[49,31444,31445],{"class":55}," sklearn.externals.array_api_compat.torch ",[49,31447,30481],{"class":59},[49,31449,31450],{"class":55}," squeeze\n",[49,31452,31453,31455,31458,31460],{"class":51,"line":120},[49,31454,30826],{"class":59},[49,31456,31457],{"class":55}," torchvision.datasets ",[49,31459,30481],{"class":59},[49,31461,31462],{"class":55}," FashionMNIST\n",[49,31464,31465,31467,31470,31473],{"class":51,"line":135},[49,31466,30481],{"class":59},[49,31468,31469],{"class":55}," numpy ",[49,31471,31472],{"class":59},"as",[49,31474,31475],{"class":55}," np\n",[49,31477,31478],{"class":51,"line":1306},[49,31479,31480],{"class":283},"# 引入处理数据集的包\n",[49,31482,31483,31485,31488,31490],{"class":51,"line":1312},[49,31484,30826],{"class":59},[49,31486,31487],{"class":55}," torchvision ",[49,31489,30481],{"class":59},[49,31491,31492],{"class":55}," transforms\n",[49,31494,31495],{"class":51,"line":1403},[49,31496,31497],{"class":283},"# 从torch库中引入数据处理的包\n",[49,31499,31500,31502,31505,31507],{"class":51,"line":1409},[49,31501,30481],{"class":59},[49,31503,31504],{"class":55}," torch.utils.data ",[49,31506,31472],{"class":59},[49,31508,31509],{"class":55}," Data\n",[49,31511,31512],{"class":51,"line":1421},[49,31513,31514],{"class":283},"# 导入画图的库\n",[49,31516,31517,31519,31522,31524],{"class":51,"line":1704},[49,31518,30481],{"class":59},[49,31520,31521],{"class":55}," matplotlib.pyplot ",[49,31523,31472],{"class":59},[49,31525,31526],{"class":55}," plt\n",[49,31528,31529],{"class":51,"line":1709},[49,31530,2492],{"emptyLinePlaceholder":151},[49,31532,31533],{"class":51,"line":1715},[49,31534,2492],{"emptyLinePlaceholder":151},[49,31536,31537,31540,31542,31545,31548,31550,31553],{"class":51,"line":1720},[49,31538,31539],{"class":55},"train_data",[49,31541,60],{"class":59},[49,31543,31544],{"class":55},"FashionMNIST(",[49,31546,31547],{"class":126},"root",[49,31549,60],{"class":59},[49,31551,31552],{"class":328},"'.\u002Fdata'",[49,31554,31555],{"class":55},",\n",[49,31557,31558,31561,31563,31566],{"class":51,"line":1734},[49,31559,31560],{"class":126},"                        train",[49,31562,60],{"class":59},[49,31564,31565],{"class":66},"True",[49,31567,31555],{"class":55},[49,31569,31570],{"class":51,"line":1739},[49,31571,31572],{"class":283},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[49,31574,31575,31578,31580,31583,31586,31588,31591],{"class":51,"line":1745},[49,31576,31577],{"class":126},"                        transform",[49,31579,60],{"class":59},[49,31581,31582],{"class":55},"transforms.Compose([transforms.Resize(",[49,31584,31585],{"class":126},"size",[49,31587,60],{"class":59},[49,31589,31590],{"class":66},"224",[49,31592,31593],{"class":55},"),transforms.ToTensor()]),\n",[49,31595,31596,31599,31601,31603],{"class":51,"line":1766},[49,31597,31598],{"class":126},"                        download",[49,31600,60],{"class":59},[49,31602,31565],{"class":66},[49,31604,81],{"class":55},[49,31606,31607],{"class":51,"line":1771},[49,31608,2492],{"emptyLinePlaceholder":151},[49,31610,31611],{"class":51,"line":1785},[49,31612,31613],{"class":283},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[49,31615,31616,31619,31621,31624,31627,31629],{"class":51,"line":1790},[49,31617,31618],{"class":55},"train_loader",[49,31620,60],{"class":59},[49,31622,31623],{"class":55},"Data.DataLoader(",[49,31625,31626],{"class":126},"dataset",[49,31628,60],{"class":59},[49,31630,31631],{"class":55},"train_data,\n",[49,31633,31634,31637,31639,31641],{"class":51,"line":1819},[49,31635,31636],{"class":126},"                             batch_size",[49,31638,60],{"class":59},[49,31640,427],{"class":66},[49,31642,31555],{"class":55},[49,31644,31645],{"class":51,"line":1824},[49,31646,31647],{"class":283},"                             # 数据是否打乱\n",[49,31649,31650,31653,31655,31657],{"class":51,"line":1841},[49,31651,31652],{"class":126},"                             shuffle",[49,31654,60],{"class":59},[49,31656,31565],{"class":66},[49,31658,31555],{"class":55},[49,31660,31661],{"class":51,"line":1846},[49,31662,31663],{"class":283},"                             # 规定加载数据的进程\n",[49,31665,31666,31669,31671,31673],{"class":51,"line":1851},[49,31667,31668],{"class":126},"                             num_workers",[49,31670,60],{"class":59},[49,31672,415],{"class":66},[49,31674,81],{"class":55},[49,31676,31677],{"class":51,"line":1856},[49,31678,2492],{"emptyLinePlaceholder":151},[49,31680,31681],{"class":51,"line":1870},[49,31682,31683],{"class":283},"# 获得一个batch的数据\n",[49,31685,31686,31688,31691,31693,31696],{"class":51,"line":1875},[49,31687,3117],{"class":59},[49,31689,31690],{"class":55}," step,(b_x,b_y) ",[49,31692,26134],{"class":59},[49,31694,31695],{"class":66}," enumerate",[49,31697,31698],{"class":55},"(train_loader):\n",[49,31700,31701,31703,31706,31708,31710],{"class":51,"line":2669},[49,31702,3193],{"class":59},[49,31704,31705],{"class":55}," step ",[49,31707,1179],{"class":59},[49,31709,4185],{"class":66},[49,31711,3831],{"class":55},[49,31713,31714],{"class":51,"line":2683},[49,31715,31716],{"class":59},"        break\n",[49,31718,31719],{"class":51,"line":2691},[49,31720,31721],{"class":283},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[49,31723,31724,31727,31729,31732],{"class":51,"line":2696},[49,31725,31726],{"class":55},"batch_x",[49,31728,60],{"class":59},[49,31730,31731],{"class":55},"b_x.squeeze().numpy()  ",[49,31733,31734],{"class":283},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[49,31736,31737,31740,31742,31745],{"class":51,"line":2702},[49,31738,31739],{"class":55},"batch_y",[49,31741,60],{"class":59},[49,31743,31744],{"class":55},"b_y.numpy()   ",[49,31746,31747],{"class":283},"#将张量转换成功numpy数组\n",[49,31749,31750,31753,31755,31758],{"class":51,"line":2708},[49,31751,31752],{"class":55},"class_label",[49,31754,60],{"class":59},[49,31756,31757],{"class":55},"train_data.classes  ",[49,31759,31760],{"class":283},"#训练集标签\n",[49,31762,31763],{"class":51,"line":2713},[49,31764,31765],{"class":283},"# print(class_label)\n",[49,31767,31768],{"class":51,"line":8038},[49,31769,2492],{"emptyLinePlaceholder":151},[49,31771,31772],{"class":51,"line":8062},[49,31773,31774],{"class":283},"# 可视化一个batch的图像\n",[49,31776,31777,31780,31783,31785,31787,31789,31791,31793],{"class":51,"line":8067},[49,31778,31779],{"class":55},"plt.figure(",[49,31781,31782],{"class":126},"figsize",[49,31784,60],{"class":59},[49,31786,228],{"class":55},[49,31788,717],{"class":66},[49,31790,76],{"class":55},[49,31792,541],{"class":66},[49,31794,30586],{"class":55},[49,31796,31797,31799,31802,31804,31807,31809],{"class":51,"line":8073},[49,31798,3117],{"class":59},[49,31800,31801],{"class":55}," ii ",[49,31803,26134],{"class":59},[49,31805,31806],{"class":55}," np.arange(",[49,31808,7448],{"class":66},[49,31810,31811],{"class":55},"(batch_y)):\n",[49,31813,31814,31817,31819,31821,31823,31826,31828,31830],{"class":51,"line":8100},[49,31815,31816],{"class":55},"    plt.subplot(",[49,31818,515],{"class":66},[49,31820,76],{"class":55},[49,31822,820],{"class":66},[49,31824,31825],{"class":55},",ii ",[49,31827,700],{"class":59},[49,31829,25209],{"class":66},[49,31831,81],{"class":55},[49,31833,31834,31837,31840,31842],{"class":51,"line":8105},[49,31835,31836],{"class":55},"    plt.imshow(batch_x[ii,:,:],",[49,31838,31839],{"class":126},"cmap",[49,31841,60],{"class":59},[49,31843,31844],{"class":55},"plt.cm.gray)\n",[49,31846,31847,31850,31852,31854,31856],{"class":51,"line":8111},[49,31848,31849],{"class":55},"    plt.title(class_label[batch_y[ii]],",[49,31851,31585],{"class":126},[49,31853,60],{"class":59},[49,31855,95],{"class":66},[49,31857,81],{"class":55},[49,31859,31860,31863,31866],{"class":51,"line":8123},[49,31861,31862],{"class":55},"    plt.axis(",[49,31864,31865],{"class":328},"\"off\"",[49,31867,81],{"class":55},[49,31869,31870,31873,31876,31878,31881],{"class":51,"line":8135},[49,31871,31872],{"class":55},"    plt.subplots_adjust(",[49,31874,31875],{"class":126},"wspace",[49,31877,60],{"class":59},[49,31879,31880],{"class":66},"0.05",[49,31882,81],{"class":55},[49,31884,31885],{"class":51,"line":8147},[49,31886,31887],{"class":55},"plt.show()\n",[14,31889,31890],{},"用matplotlib进行展示的过程可以后续再补",[14,31892,31893],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31895,31896],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31898,31899],{},"模型训练：",[39,31901,31903],{"className":41,"code":31902,"language":43,"meta":44,"style":44},"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",[46,31904,31905,31912,31919,31923,31935,31941,31952,31962,31972,31982,31992,31997,32009,32019,32023,32027,32032,32043,32056,32067,32084,32095,32134,32150,32162,32173,32178,32189,32205,32216,32227,32238,32245,32249,32254,32259,32263,32268,32278,32299,32303,32307,32312,32317,32322,32342,32346,32351,32361,32365,32370,32379,32384,32389,32394,32404,32408,32412,32417,32422,32432,32437,32447,32452,32461,32466,32475,32480,32489,32493,32498,32508,32512,32516,32521,32536,32564,32579,32583,32588,32593,32602,32607,32616,32621,32630,32635,32644,32649,32658,32663,32672,32677,32690,32695,32705,32710,32720,32726,32732,32738,32744,32755,32761,32781,32787,32798,32804,32810,32816,32822,32828,32834,32840,32860,32866,32882,32888,32902,32908,32923,32929,32938,32944,32953,32959,32965,32974,32980,32991,32997,33016,33022,33033,33039,33059,33075,33081,33095,33101,33107,33118,33124,33130,33140,33146,33157,33163,33173,33178,33184,33233,33280,33285,33291,33310,33316,33336,33342,33348,33358,33363,33369,33385,33430,33436,33442,33448,33459,33465,33471,33477,33495,33509,33518,33527,33536,33545,33551,33557,33565,33570,33576,33587,33593,33613,33619,33625,33631,33648,33654,33660,33666,33672,33678,33705,33729,33735,33741,33747,33758,33769,33775,33792,33815,33838,33844,33849,33858,33868,33874,33879,33885,33898,33904,33915,33926,33945],{"__ignoreMap":44},[49,31906,31907,31909],{"class":51,"line":52},[49,31908,30481],{"class":59},[49,31910,31911],{"class":55}," copy\n",[49,31913,31914,31916],{"class":51,"line":84},[49,31915,30481],{"class":59},[49,31917,31918],{"class":55}," time\n",[49,31920,31921],{"class":51,"line":109},[49,31922,2492],{"emptyLinePlaceholder":151},[49,31924,31925,31927,31930,31932],{"class":51,"line":120},[49,31926,30481],{"class":59},[49,31928,31929],{"class":55}," pandas ",[49,31931,31472],{"class":59},[49,31933,31934],{"class":55}," pd\n",[49,31936,31937,31939],{"class":51,"line":135},[49,31938,30481],{"class":59},[49,31940,30484],{"class":55},[49,31942,31943,31945,31947,31949],{"class":51,"line":1306},[49,31944,30826],{"class":59},[49,31946,31504],{"class":55},[49,31948,30481],{"class":59},[49,31950,31951],{"class":55}," Dataset\n",[49,31953,31954,31956,31958,31960],{"class":51,"line":1312},[49,31955,30826],{"class":59},[49,31957,31457],{"class":55},[49,31959,30481],{"class":59},[49,31961,31462],{"class":55},[49,31963,31964,31966,31968,31970],{"class":51,"line":1403},[49,31965,30826],{"class":59},[49,31967,31487],{"class":55},[49,31969,30481],{"class":59},[49,31971,31492],{"class":55},[49,31973,31974,31976,31978,31980],{"class":51,"line":1409},[49,31975,30481],{"class":59},[49,31977,31504],{"class":55},[49,31979,31472],{"class":59},[49,31981,31509],{"class":55},[49,31983,31984,31986,31988,31990],{"class":51,"line":1421},[49,31985,30481],{"class":59},[49,31987,31521],{"class":55},[49,31989,31472],{"class":59},[49,31991,31526],{"class":55},[49,31993,31994],{"class":51,"line":1704},[49,31995,31996],{"class":283},"# 导入模型\n",[49,31998,31999,32001,32004,32006],{"class":51,"line":1709},[49,32000,30826],{"class":59},[49,32002,32003],{"class":55}," model ",[49,32005,30481],{"class":59},[49,32007,32008],{"class":55}," LeNet\n",[49,32010,32011,32013,32015,32017],{"class":51,"line":1715},[49,32012,30826],{"class":59},[49,32014,30829],{"class":55},[49,32016,30481],{"class":59},[49,32018,30834],{"class":55},[49,32020,32021],{"class":51,"line":1720},[49,32022,2492],{"emptyLinePlaceholder":151},[49,32024,32025],{"class":51,"line":1734},[49,32026,2492],{"emptyLinePlaceholder":151},[49,32028,32029],{"class":51,"line":1739},[49,32030,32031],{"class":283},"# 处理训练集与验证集函数--->划分数据集\n",[49,32033,32034,32037,32040],{"class":51,"line":1745},[49,32035,32036],{"class":59},"def",[49,32038,32039],{"class":2055}," train_val_data_process",[49,32041,32042],{"class":55},"():\n",[49,32044,32045,32048,32050,32052,32054],{"class":51,"line":1766},[49,32046,32047],{"class":55},"    train_data",[49,32049,60],{"class":59},[49,32051,31544],{"class":55},[49,32053,31552],{"class":328},[49,32055,31555],{"class":55},[49,32057,32058,32061,32063,32065],{"class":51,"line":1771},[49,32059,32060],{"class":126},"                            train",[49,32062,60],{"class":59},[49,32064,31565],{"class":66},[49,32066,31555],{"class":55},[49,32068,32069,32072,32074,32076,32078,32080,32082],{"class":51,"line":1785},[49,32070,32071],{"class":126},"                            transform",[49,32073,60],{"class":59},[49,32075,31582],{"class":55},[49,32077,31585],{"class":126},[49,32079,60],{"class":59},[49,32081,1120],{"class":66},[49,32083,31593],{"class":55},[49,32085,32086,32089,32091,32093],{"class":51,"line":1790},[49,32087,32088],{"class":126},"                            download",[49,32090,60],{"class":59},[49,32092,31565],{"class":66},[49,32094,81],{"class":55},[49,32096,32097,32100,32102,32105,32108,32110,32113,32115,32117,32120,32122,32124,32127,32129,32131],{"class":51,"line":1819},[49,32098,32099],{"class":55},"    train_data,val_data",[49,32101,60],{"class":59},[49,32103,32104],{"class":55},"Data.random_split(train_data,[",[49,32106,32107],{"class":66},"round",[49,32109,228],{"class":55},[49,32111,32112],{"class":66},"0.8",[49,32114,674],{"class":59},[49,32116,7448],{"class":66},[49,32118,32119],{"class":55},"(train_data)),",[49,32121,32107],{"class":66},[49,32123,228],{"class":55},[49,32125,32126],{"class":66},"0.2",[49,32128,674],{"class":59},[49,32130,7448],{"class":66},[49,32132,32133],{"class":55},"(train_data))])\n",[49,32135,32136,32139,32141,32144,32146,32148],{"class":51,"line":1824},[49,32137,32138],{"class":55},"    train_dataloader ",[49,32140,60],{"class":59},[49,32142,32143],{"class":55}," Data.DataLoader(",[49,32145,31626],{"class":126},[49,32147,60],{"class":59},[49,32149,31631],{"class":55},[49,32151,32152,32155,32157,32160],{"class":51,"line":1841},[49,32153,32154],{"class":126},"                                       batch_size",[49,32156,60],{"class":59},[49,32158,32159],{"class":66},"128",[49,32161,31555],{"class":55},[49,32163,32164,32167,32169,32171],{"class":51,"line":1846},[49,32165,32166],{"class":126},"                                       shuffle",[49,32168,60],{"class":59},[49,32170,31565],{"class":66},[49,32172,31555],{"class":55},[49,32174,32175],{"class":51,"line":1851},[49,32176,32177],{"class":283},"                                       # 规定8个进程\n",[49,32179,32180,32183,32185,32187],{"class":51,"line":1856},[49,32181,32182],{"class":126},"                                       num_workers",[49,32184,60],{"class":59},[49,32186,616],{"class":66},[49,32188,81],{"class":55},[49,32190,32191,32194,32196,32198,32200,32202],{"class":51,"line":1870},[49,32192,32193],{"class":55},"    val_dataloader",[49,32195,60],{"class":59},[49,32197,31623],{"class":55},[49,32199,31626],{"class":126},[49,32201,60],{"class":59},[49,32203,32204],{"class":55},"val_data,\n",[49,32206,32207,32210,32212,32214],{"class":51,"line":1875},[49,32208,32209],{"class":126},"                                   batch_size",[49,32211,60],{"class":59},[49,32213,32159],{"class":66},[49,32215,31555],{"class":55},[49,32217,32218,32221,32223,32225],{"class":51,"line":2669},[49,32219,32220],{"class":126},"                                   shuffle",[49,32222,60],{"class":59},[49,32224,31565],{"class":66},[49,32226,31555],{"class":55},[49,32228,32229,32232,32234,32236],{"class":51,"line":2683},[49,32230,32231],{"class":126},"                                   num_workers",[49,32233,60],{"class":59},[49,32235,616],{"class":66},[49,32237,81],{"class":55},[49,32239,32240,32242],{"class":51,"line":2691},[49,32241,4182],{"class":59},[49,32243,32244],{"class":55}," train_dataloader,val_dataloader\n",[49,32246,32247],{"class":51,"line":2696},[49,32248,2492],{"emptyLinePlaceholder":151},[49,32250,32251],{"class":51,"line":2702},[49,32252,32253],{"class":283},"# 验证是否出错\n",[49,32255,32256],{"class":51,"line":2708},[49,32257,32258],{"class":283},"# train_val_data_process()\n",[49,32260,32261],{"class":51,"line":2713},[49,32262,2492],{"emptyLinePlaceholder":151},[49,32264,32265],{"class":51,"line":8038},[49,32266,32267],{"class":283},"# 定义模型训练函数\n",[49,32269,32270,32272,32275],{"class":51,"line":8062},[49,32271,32036],{"class":59},[49,32273,32274],{"class":2055}," train_model_process",[49,32276,32277],{"class":55},"(model,train_dataloader,val_dataloader,num_epochs):\n",[49,32279,32280,32282,32284,32286,32288,32290,32292,32294,32297],{"class":51,"line":8067},[49,32281,31326],{"class":55},[49,32283,60],{"class":59},[49,32285,30540],{"class":55},[49,32287,31333],{"class":328},[49,32289,1796],{"class":59},[49,32291,31338],{"class":55},[49,32293,1793],{"class":59},[49,32295,32296],{"class":328}," 'cpu'",[49,32298,81],{"class":55},[49,32300,32301],{"class":51,"line":8073},[49,32302,2492],{"emptyLinePlaceholder":151},[49,32304,32305],{"class":51,"line":8100},[49,32306,2492],{"emptyLinePlaceholder":151},[49,32308,32309],{"class":51,"line":8105},[49,32310,32311],{"class":283},"    # 定义优化器\n",[49,32313,32314],{"class":51,"line":8111},[49,32315,32316],{"class":283},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[49,32318,32319],{"class":51,"line":8123},[49,32320,32321],{"class":283},"    # lr为学习率\n",[49,32323,32324,32327,32329,32332,32335,32337,32340],{"class":51,"line":8135},[49,32325,32326],{"class":55},"    optimizer",[49,32328,60],{"class":59},[49,32330,32331],{"class":55},"torch.optim.Adam(model.parameters(),",[49,32333,32334],{"class":126},"lr",[49,32336,60],{"class":59},[49,32338,32339],{"class":66},"0.001",[49,32341,81],{"class":55},[49,32343,32344],{"class":51,"line":8147},[49,32345,2492],{"emptyLinePlaceholder":151},[49,32347,32348],{"class":51,"line":9806},[49,32349,32350],{"class":283},"    # 定义损失函数使用交叉熵损失函数\n",[49,32352,32353,32356,32358],{"class":51,"line":9831},[49,32354,32355],{"class":55},"    criterion",[49,32357,60],{"class":59},[49,32359,32360],{"class":55},"nn.CrossEntropyLoss()\n",[49,32362,32363],{"class":51,"line":9854},[49,32364,2492],{"emptyLinePlaceholder":151},[49,32366,32367],{"class":51,"line":9878},[49,32368,32369],{"class":283},"    # 将模型放到GPU中进行训练\n",[49,32371,32372,32374,32376],{"class":51,"line":9883},[49,32373,31378],{"class":55},[49,32375,60],{"class":59},[49,32377,32378],{"class":55},"model.to(device)\n",[49,32380,32381],{"class":51,"line":9888},[49,32382,32383],{"class":283},"    # 复制当前模型的参数\n",[49,32385,32386],{"class":51,"line":9893},[49,32387,32388],{"class":283},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[49,32390,32391],{"class":51,"line":9902},[49,32392,32393],{"class":283},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[49,32395,32396,32399,32401],{"class":51,"line":9907},[49,32397,32398],{"class":55},"    best_model_wts",[49,32400,60],{"class":59},[49,32402,32403],{"class":55},"copy.deepcopy(model.state_dict())\n",[49,32405,32406],{"class":51,"line":9913},[49,32407,2492],{"emptyLinePlaceholder":151},[49,32409,32410],{"class":51,"line":9934},[49,32411,2492],{"emptyLinePlaceholder":151},[49,32413,32414],{"class":51,"line":9940},[49,32415,32416],{"class":283},"    # 初始化参数\n",[49,32418,32419],{"class":51,"line":9954},[49,32420,32421],{"class":283},"    # 最高准确度\n",[49,32423,32424,32427,32429],{"class":51,"line":9960},[49,32425,32426],{"class":55},"    best_acc",[49,32428,60],{"class":59},[49,32430,32431],{"class":66},"0.0\n",[49,32433,32434],{"class":51,"line":9987},[49,32435,32436],{"class":283},"    # 训练集损失列表\n",[49,32438,32439,32442,32444],{"class":51,"line":9996},[49,32440,32441],{"class":55},"    train_loss_all",[49,32443,60],{"class":59},[49,32445,32446],{"class":55},"[]\n",[49,32448,32449],{"class":51,"line":10002},[49,32450,32451],{"class":283},"    # 验证集函数列表\n",[49,32453,32454,32457,32459],{"class":51,"line":10010},[49,32455,32456],{"class":55},"    val_loss_all",[49,32458,60],{"class":59},[49,32460,32446],{"class":55},[49,32462,32463],{"class":51,"line":10015},[49,32464,32465],{"class":283},"    # 训练集准确度列表\n",[49,32467,32468,32471,32473],{"class":51,"line":16694},[49,32469,32470],{"class":55},"    train_acc_all",[49,32472,60],{"class":59},[49,32474,32446],{"class":55},[49,32476,32477],{"class":51,"line":16700},[49,32478,32479],{"class":283},"    # 验证集准确度列表\n",[49,32481,32482,32485,32487],{"class":51,"line":16723},[49,32483,32484],{"class":55},"    val_acc_all",[49,32486,60],{"class":59},[49,32488,32446],{"class":55},[49,32490,32491],{"class":51,"line":16729},[49,32492,2492],{"emptyLinePlaceholder":151},[49,32494,32495],{"class":51,"line":16752},[49,32496,32497],{"class":283},"    # 保存当前时间--->方便看每轮训练的时间\n",[49,32499,32500,32503,32505],{"class":51,"line":16766},[49,32501,32502],{"class":55},"    since",[49,32504,60],{"class":59},[49,32506,32507],{"class":55},"time.time()\n",[49,32509,32510],{"class":51,"line":16786},[49,32511,2492],{"emptyLinePlaceholder":151},[49,32513,32514],{"class":51,"line":16792},[49,32515,2492],{"emptyLinePlaceholder":151},[49,32517,32518],{"class":51,"line":16803},[49,32519,32520],{"class":283},"    # 准备工作完成--->开始训练模型\n",[49,32522,32523,32525,32528,32530,32533],{"class":51,"line":16826},[49,32524,3293],{"class":59},[49,32526,32527],{"class":55}," epoch ",[49,32529,26134],{"class":59},[49,32531,32532],{"class":66}," range",[49,32534,32535],{"class":55},"(num_epochs):\n",[49,32537,32538,32541,32543,32546,32549,32551,32553,32555,32558,32560,32562],{"class":51,"line":16848},[49,32539,32540],{"class":66},"        print",[49,32542,228],{"class":55},[49,32544,32545],{"class":328},"\"Epoch ",[49,32547,32548],{"class":66},"{}",[49,32550,803],{"class":328},[49,32552,32548],{"class":66},[49,32554,474],{"class":328},[49,32556,32557],{"class":55},".format(epoch,num_epochs",[49,32559,751],{"class":59},[49,32561,441],{"class":66},[49,32563,30586],{"class":55},[49,32565,32566,32568,32570,32573,32575,32577],{"class":51,"line":16853},[49,32567,32540],{"class":66},[49,32569,228],{"class":55},[49,32571,32572],{"class":328},"\"-\"",[49,32574,674],{"class":59},[49,32576,95],{"class":66},[49,32578,81],{"class":55},[49,32580,32581],{"class":51,"line":16859},[49,32582,2492],{"emptyLinePlaceholder":151},[49,32584,32585],{"class":51,"line":16873},[49,32586,32587],{"class":283},"        # 初始化参数\n",[49,32589,32590],{"class":51,"line":16886},[49,32591,32592],{"class":283},"        # 训练集损失函数\n",[49,32594,32595,32598,32600],{"class":51,"line":16891},[49,32596,32597],{"class":55},"        train_loss",[49,32599,60],{"class":59},[49,32601,32431],{"class":66},[49,32603,32604],{"class":51,"line":16905},[49,32605,32606],{"class":283},"        # 训练集准确度\n",[49,32608,32609,32612,32614],{"class":51,"line":16910},[49,32610,32611],{"class":55},"        train_corrects",[49,32613,60],{"class":59},[49,32615,3177],{"class":66},[49,32617,32618],{"class":51,"line":16916},[49,32619,32620],{"class":283},"        # 验证集损失函数\n",[49,32622,32623,32626,32628],{"class":51,"line":16921},[49,32624,32625],{"class":55},"        val_loss",[49,32627,60],{"class":59},[49,32629,32431],{"class":66},[49,32631,32632],{"class":51,"line":16935},[49,32633,32634],{"class":283},"        # 验证集准确度\n",[49,32636,32637,32640,32642],{"class":51,"line":16940},[49,32638,32639],{"class":55},"        val_corrects",[49,32641,60],{"class":59},[49,32643,3177],{"class":66},[49,32645,32646],{"class":51,"line":16945},[49,32647,32648],{"class":283},"        # 训练集样本数量\n",[49,32650,32651,32654,32656],{"class":51,"line":16959},[49,32652,32653],{"class":55},"        train_num",[49,32655,60],{"class":59},[49,32657,3177],{"class":66},[49,32659,32660],{"class":51,"line":16971},[49,32661,32662],{"class":283},"        # 验证集样本数量\n",[49,32664,32665,32668,32670],{"class":51,"line":16976},[49,32666,32667],{"class":55},"        val_num",[49,32669,60],{"class":59},[49,32671,3177],{"class":66},[49,32673,32674],{"class":51,"line":16989},[49,32675,32676],{"class":283},"        # 将数据放到设备,并开始训练\n",[49,32678,32679,32681,32683,32685,32687],{"class":51,"line":16994},[49,32680,3495],{"class":59},[49,32682,31690],{"class":55},[49,32684,26134],{"class":59},[49,32686,31695],{"class":66},[49,32688,32689],{"class":55},"(train_dataloader):\n",[49,32691,32692],{"class":51,"line":16999},[49,32693,32694],{"class":283},"            # 将特征放入到训练设备\n",[49,32696,32697,32700,32702],{"class":51,"line":17004},[49,32698,32699],{"class":55},"            b_x",[49,32701,60],{"class":59},[49,32703,32704],{"class":55},"b_x.to(device)\n",[49,32706,32707],{"class":51,"line":17017},[49,32708,32709],{"class":283},"            # 将标签放入到训练设备当中\n",[49,32711,32712,32715,32717],{"class":51,"line":17022},[49,32713,32714],{"class":55},"            b_y",[49,32716,60],{"class":59},[49,32718,32719],{"class":55},"b_y.to(device)\n",[49,32721,32723],{"class":51,"line":32722},98,[49,32724,32725],{"class":283},"            # 设置模型为训练模式\n",[49,32727,32729],{"class":51,"line":32728},99,[49,32730,32731],{"class":55},"            model.train()\n",[49,32733,32735],{"class":51,"line":32734},100,[49,32736,32737],{"class":283},"            # 将数据放到模型当中,开始前向传播\n",[49,32739,32741],{"class":51,"line":32740},101,[49,32742,32743],{"class":283},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[49,32745,32747,32750,32752],{"class":51,"line":32746},102,[49,32748,32749],{"class":55},"            output",[49,32751,60],{"class":59},[49,32753,32754],{"class":55},"model(b_x)\n",[49,32756,32758],{"class":51,"line":32757},103,[49,32759,32760],{"class":283},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[49,32762,32764,32767,32769,32772,32775,32777,32779],{"class":51,"line":32763},104,[49,32765,32766],{"class":55},"            pre_lab",[49,32768,60],{"class":59},[49,32770,32771],{"class":55},"torch.argmax(output,",[49,32773,32774],{"class":126},"dim",[49,32776,60],{"class":59},[49,32778,441],{"class":66},[49,32780,81],{"class":55},[49,32782,32784],{"class":51,"line":32783},105,[49,32785,32786],{"class":283},"            # 计算每一个batch的损失函数\n",[49,32788,32790,32793,32795],{"class":51,"line":32789},106,[49,32791,32792],{"class":55},"            loss",[49,32794,60],{"class":59},[49,32796,32797],{"class":55},"criterion(output,b_y)\n",[49,32799,32801],{"class":51,"line":32800},107,[49,32802,32803],{"class":283},"            # 将梯度初始化为0\n",[49,32805,32807],{"class":51,"line":32806},108,[49,32808,32809],{"class":55},"            optimizer.zero_grad()\n",[49,32811,32813],{"class":51,"line":32812},109,[49,32814,32815],{"class":283},"            # 梯度置为0后再进行反向传播\n",[49,32817,32819],{"class":51,"line":32818},110,[49,32820,32821],{"class":55},"            loss.backward()\n",[49,32823,32825],{"class":51,"line":32824},111,[49,32826,32827],{"class":283},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[49,32829,32831],{"class":51,"line":32830},112,[49,32832,32833],{"class":55},"            optimizer.step()\n",[49,32835,32837],{"class":51,"line":32836},113,[49,32838,32839],{"class":283},"            # loss.item()指的是batch的平均损失\n",[49,32841,32843,32846,32848,32851,32853,32856,32858],{"class":51,"line":32842},114,[49,32844,32845],{"class":55},"            train_loss",[49,32847,9567],{"class":59},[49,32849,32850],{"class":55},"loss.item()",[49,32852,674],{"class":59},[49,32854,32855],{"class":55},"b_x.size(",[49,32857,415],{"class":66},[49,32859,81],{"class":55},[49,32861,32863],{"class":51,"line":32862},115,[49,32864,32865],{"class":283},"            # 计算每个批次中正确预测的数量\n",[49,32867,32869,32872,32874,32877,32879],{"class":51,"line":32868},116,[49,32870,32871],{"class":55},"            train_corrects",[49,32873,9567],{"class":59},[49,32875,32876],{"class":55},"torch.sum(pre_lab",[49,32878,3041],{"class":59},[49,32880,32881],{"class":55},"b_y.data)\n",[49,32883,32885],{"class":51,"line":32884},117,[49,32886,32887],{"class":283},"            # 计算目前为止一共处理了多少样本\n",[49,32889,32891,32894,32896,32898,32900],{"class":51,"line":32890},118,[49,32892,32893],{"class":55},"            train_num",[49,32895,9567],{"class":59},[49,32897,32855],{"class":55},[49,32899,415],{"class":66},[49,32901,81],{"class":55},[49,32903,32905],{"class":51,"line":32904},119,[49,32906,32907],{"class":283},"        # 验证数据\n",[49,32909,32911,32913,32916,32918,32920],{"class":51,"line":32910},120,[49,32912,3495],{"class":59},[49,32914,32915],{"class":55}," step ,(b_x,b_y) ",[49,32917,26134],{"class":59},[49,32919,31695],{"class":66},[49,32921,32922],{"class":55},"(val_dataloader):\n",[49,32924,32926],{"class":51,"line":32925},121,[49,32927,32928],{"class":283},"            # 将特征放到验证设备当中\n",[49,32930,32932,32934,32936],{"class":51,"line":32931},122,[49,32933,32699],{"class":55},[49,32935,60],{"class":59},[49,32937,32704],{"class":55},[49,32939,32941],{"class":51,"line":32940},123,[49,32942,32943],{"class":283},"            # 将标签放到放到训练设备当中\n",[49,32945,32947,32949,32951],{"class":51,"line":32946},124,[49,32948,32714],{"class":55},[49,32950,60],{"class":59},[49,32952,32719],{"class":55},[49,32954,32956],{"class":51,"line":32955},125,[49,32957,32958],{"class":283},"            # 开启验证模式，设置模型为评估模式\n",[49,32960,32962],{"class":51,"line":32961},126,[49,32963,32964],{"class":55},"            model.eval()\n",[49,32966,32968,32971],{"class":51,"line":32967},127,[49,32969,32970],{"class":59},"            with",[49,32972,32973],{"class":55}," torch.no_grad():\n",[49,32975,32977],{"class":51,"line":32976},128,[49,32978,32979],{"class":283},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[49,32981,32983,32986,32988],{"class":51,"line":32982},129,[49,32984,32985],{"class":55},"                output ",[49,32987,60],{"class":59},[49,32989,32990],{"class":55}," model(b_x)\n",[49,32992,32994],{"class":51,"line":32993},130,[49,32995,32996],{"class":283},"                # 查找每一行中最大值对应的下标\n",[49,32998,33000,33003,33005,33008,33010,33012,33014],{"class":51,"line":32999},131,[49,33001,33002],{"class":55},"                pre_lab ",[49,33004,60],{"class":59},[49,33006,33007],{"class":55}," torch.argmax(output, ",[49,33009,32774],{"class":126},[49,33011,60],{"class":59},[49,33013,441],{"class":66},[49,33015,81],{"class":55},[49,33017,33019],{"class":51,"line":33018},132,[49,33020,33021],{"class":283},"                # 计算验证集上的当前 batch 损失\n",[49,33023,33025,33028,33030],{"class":51,"line":33024},133,[49,33026,33027],{"class":55},"                val_batch_loss ",[49,33029,60],{"class":59},[49,33031,33032],{"class":55}," criterion(output, b_y)\n",[49,33034,33036],{"class":51,"line":33035},134,[49,33037,33038],{"class":283},"                # 对损失函数进行累加（按样本数加权）\n",[49,33040,33042,33045,33047,33050,33052,33055,33057],{"class":51,"line":33041},135,[49,33043,33044],{"class":55},"                val_loss ",[49,33046,9567],{"class":59},[49,33048,33049],{"class":55}," val_batch_loss.item() ",[49,33051,674],{"class":59},[49,33053,33054],{"class":55}," b_x.size(",[49,33056,415],{"class":66},[49,33058,81],{"class":55},[49,33060,33062,33065,33067,33070,33072],{"class":51,"line":33061},136,[49,33063,33064],{"class":55},"                val_corrects ",[49,33066,9567],{"class":59},[49,33068,33069],{"class":55}," torch.sum(pre_lab ",[49,33071,3041],{"class":59},[49,33073,33074],{"class":55}," b_y.data)\n",[49,33076,33078],{"class":51,"line":33077},137,[49,33079,33080],{"class":283},"                # 当前用于验证的样本数量\n",[49,33082,33084,33087,33089,33091,33093],{"class":51,"line":33083},138,[49,33085,33086],{"class":55},"            val_num ",[49,33088,9567],{"class":59},[49,33090,33054],{"class":55},[49,33092,415],{"class":66},[49,33094,81],{"class":55},[49,33096,33098],{"class":51,"line":33097},139,[49,33099,33100],{"class":283},"        # 计算并保存每一次迭代的loss值和准确率\n",[49,33102,33104],{"class":51,"line":33103},140,[49,33105,33106],{"class":283},"        # 计算并保存训练集的loss值\n",[49,33108,33110,33113,33115],{"class":51,"line":33109},141,[49,33111,33112],{"class":55},"        train_loss_all.append(train_loss",[49,33114,803],{"class":59},[49,33116,33117],{"class":55},"train_num)\n",[49,33119,33121],{"class":51,"line":33120},142,[49,33122,33123],{"class":283},"        # 取双精度\n",[49,33125,33127],{"class":51,"line":33126},143,[49,33128,33129],{"class":283},"        # 计算并保存训练集的准确率\n",[49,33131,33133,33136,33138],{"class":51,"line":33132},144,[49,33134,33135],{"class":55},"        train_acc_all.append(train_corrects.double().item()",[49,33137,803],{"class":59},[49,33139,33117],{"class":55},[49,33141,33143],{"class":51,"line":33142},145,[49,33144,33145],{"class":283},"        # 计算并保存验证集的loss值\n",[49,33147,33149,33152,33154],{"class":51,"line":33148},146,[49,33150,33151],{"class":55},"        val_loss_all.append(val_loss",[49,33153,803],{"class":59},[49,33155,33156],{"class":55},"val_num)\n",[49,33158,33160],{"class":51,"line":33159},147,[49,33161,33162],{"class":283},"        # 计算并保存验证集的准确率\n",[49,33164,33166,33169,33171],{"class":51,"line":33165},148,[49,33167,33168],{"class":55},"        val_acc_all.append(val_corrects.double().item()",[49,33170,803],{"class":59},[49,33172,33156],{"class":55},[49,33174,33176],{"class":51,"line":33175},149,[49,33177,2492],{"emptyLinePlaceholder":151},[49,33179,33181],{"class":51,"line":33180},150,[49,33182,33183],{"class":283},"        # 打印训练一轮的loss值和准确率\n",[49,33185,33187,33189,33191,33193,33195,33198,33200,33203,33205,33208,33210,33212,33214,33216,33219,33221,33223,33226,33228,33230],{"class":51,"line":33186},151,[49,33188,32540],{"class":66},[49,33190,228],{"class":55},[49,33192,3684],{"class":328},[49,33194,32548],{"class":66},[49,33196,33197],{"class":328},"train loss:",[49,33199,1115],{"class":66},[49,33201,33202],{"class":59},":.4f",[49,33204,1165],{"class":66},[49,33206,33207],{"class":328}," train acc:",[49,33209,1115],{"class":66},[49,33211,33202],{"class":59},[49,33213,1165],{"class":66},[49,33215,3684],{"class":328},[49,33217,33218],{"class":55},".format(epoch,train_loss_all[",[49,33220,751],{"class":59},[49,33222,441],{"class":66},[49,33224,33225],{"class":55},"],train_acc_all[",[49,33227,751],{"class":59},[49,33229,441],{"class":66},[49,33231,33232],{"class":55},"]))\n",[49,33234,33236,33238,33240,33242,33244,33247,33249,33251,33253,33256,33258,33260,33262,33264,33267,33269,33271,33274,33276,33278],{"class":51,"line":33235},152,[49,33237,32540],{"class":66},[49,33239,228],{"class":55},[49,33241,3684],{"class":328},[49,33243,32548],{"class":66},[49,33245,33246],{"class":328},"val loss:",[49,33248,1115],{"class":66},[49,33250,33202],{"class":59},[49,33252,1165],{"class":66},[49,33254,33255],{"class":328}," val acc:",[49,33257,1115],{"class":66},[49,33259,33202],{"class":59},[49,33261,1165],{"class":66},[49,33263,3684],{"class":328},[49,33265,33266],{"class":55},".format(epoch,val_loss_all[",[49,33268,751],{"class":59},[49,33270,441],{"class":66},[49,33272,33273],{"class":55},"],val_acc_all[",[49,33275,751],{"class":59},[49,33277,441],{"class":66},[49,33279,33232],{"class":55},[49,33281,33283],{"class":51,"line":33282},153,[49,33284,2492],{"emptyLinePlaceholder":151},[49,33286,33288],{"class":51,"line":33287},154,[49,33289,33290],{"class":283},"        # 判断准确度--->保存最优模型\n",[49,33292,33294,33296,33299,33301,33303,33305,33307],{"class":51,"line":33293},155,[49,33295,2589],{"class":59},[49,33297,33298],{"class":55}," val_acc_all[",[49,33300,751],{"class":59},[49,33302,441],{"class":66},[49,33304,1159],{"class":55},[49,33306,1179],{"class":59},[49,33308,33309],{"class":55},"best_acc:\n",[49,33311,33313],{"class":51,"line":33312},156,[49,33314,33315],{"class":283},"            # 保存当前模型准确度\n",[49,33317,33319,33322,33324,33326,33329,33331,33333],{"class":51,"line":33318},157,[49,33320,33321],{"class":55},"            best_acc:",[49,33323,266],{"class":66},[49,33325,60],{"class":59},[49,33327,33328],{"class":55},"val_acc_all[",[49,33330,751],{"class":59},[49,33332,441],{"class":66},[49,33334,33335],{"class":55},"]\n",[49,33337,33339],{"class":51,"line":33338},158,[49,33340,33341],{"class":283},"            # 保存当前的准确度\n",[49,33343,33345],{"class":51,"line":33344},159,[49,33346,33347],{"class":283},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[49,33349,33351,33354,33356],{"class":51,"line":33350},160,[49,33352,33353],{"class":55},"            best_model_wts",[49,33355,60],{"class":59},[49,33357,32403],{"class":55},[49,33359,33361],{"class":51,"line":33360},161,[49,33362,2492],{"emptyLinePlaceholder":151},[49,33364,33366],{"class":51,"line":33365},162,[49,33367,33368],{"class":283},"        # 计算耗时\n",[49,33370,33372,33375,33377,33380,33382],{"class":51,"line":33371},163,[49,33373,33374],{"class":55},"        time_use",[49,33376,60],{"class":59},[49,33378,33379],{"class":55},"time.time()",[49,33381,751],{"class":59},[49,33383,33384],{"class":55},"since\n",[49,33386,33388,33390,33392,33395,33397,33400,33402,33404,33406,33408,33410,33413,33416,33419,33421,33424,33426,33428],{"class":51,"line":33387},164,[49,33389,32540],{"class":66},[49,33391,228],{"class":55},[49,33393,33394],{"class":328},"'训练和验证耗费的时间",[49,33396,1115],{"class":66},[49,33398,33399],{"class":59},":.0f",[49,33401,1165],{"class":66},[49,33403,763],{"class":328},[49,33405,1115],{"class":66},[49,33407,33399],{"class":59},[49,33409,1165],{"class":66},[49,33411,33412],{"class":328},"s'",[49,33414,33415],{"class":55},".format(time_use",[49,33417,33418],{"class":59},"\u002F\u002F",[49,33420,1126],{"class":66},[49,33422,33423],{"class":55},",time_use",[49,33425,550],{"class":59},[49,33427,1126],{"class":66},[49,33429,30586],{"class":55},[49,33431,33433],{"class":51,"line":33432},165,[49,33434,33435],{"class":283},"    # 选择最优参数\n",[49,33437,33439],{"class":51,"line":33438},166,[49,33440,33441],{"class":283},"    # 加载最高准确率下的模型参数\n",[49,33443,33445],{"class":51,"line":33444},167,[49,33446,33447],{"class":283},"    # model.load_state_dict(best_model_wts)\n",[49,33449,33451,33454,33457],{"class":51,"line":33450},168,[49,33452,33453],{"class":55},"    torch.save(model.state_dict(best_model_wts), ",[49,33455,33456],{"class":328},"'.\u002Fbest_model.pth'",[49,33458,81],{"class":55},[49,33460,33462],{"class":51,"line":33461},169,[49,33463,33464],{"class":283},"    # 或者写成\n",[49,33466,33468],{"class":51,"line":33467},170,[49,33469,33470],{"class":283},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[49,33472,33474],{"class":51,"line":33473},171,[49,33475,33476],{"class":283},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[49,33478,33480,33483,33485,33488,33491,33493],{"class":51,"line":33479},172,[49,33481,33482],{"class":55},"    train_process",[49,33484,60],{"class":59},[49,33486,33487],{"class":55},"pd.DataFrame(",[49,33489,33490],{"class":126},"data",[49,33492,60],{"class":59},[49,33494,1638],{"class":55},[49,33496,33498,33501,33503,33506],{"class":51,"line":33497},173,[49,33499,33500],{"class":328},"        \"epoch\"",[49,33502,1078],{"class":55},[49,33504,33505],{"class":66},"range",[49,33507,33508],{"class":55},"(num_epochs),\n",[49,33510,33512,33515],{"class":51,"line":33511},174,[49,33513,33514],{"class":328},"        \"train_loss_all\"",[49,33516,33517],{"class":55},":train_loss_all,\n",[49,33519,33521,33524],{"class":51,"line":33520},175,[49,33522,33523],{"class":328},"        \"val_loss_all\"",[49,33525,33526],{"class":55},":val_loss_all,\n",[49,33528,33530,33533],{"class":51,"line":33529},176,[49,33531,33532],{"class":328},"        \"train_acc_all\"",[49,33534,33535],{"class":55},":train_acc_all,\n",[49,33537,33539,33542],{"class":51,"line":33538},177,[49,33540,33541],{"class":328},"        \"val_acc_all\"",[49,33543,33544],{"class":55},":val_acc_all\n",[49,33546,33548],{"class":51,"line":33547},178,[49,33549,33550],{"class":55},"    })\n",[49,33552,33554],{"class":51,"line":33553},179,[49,33555,33556],{"class":283},"    # 返回训练保存的过程\n",[49,33558,33560,33562],{"class":51,"line":33559},180,[49,33561,4182],{"class":59},[49,33563,33564],{"class":55}," train_process\n",[49,33566,33568],{"class":51,"line":33567},181,[49,33569,2492],{"emptyLinePlaceholder":151},[49,33571,33573],{"class":51,"line":33572},182,[49,33574,33575],{"class":283},"# 将loss值和精度按照图片的形式展示出来\n",[49,33577,33579,33581,33584],{"class":51,"line":33578},183,[49,33580,32036],{"class":59},[49,33582,33583],{"class":2055}," matplot_acc_loss",[49,33585,33586],{"class":55},"(train_process):\n",[49,33588,33590],{"class":51,"line":33589},184,[49,33591,33592],{"class":283},"    # 设置图的大小\n",[49,33594,33596,33599,33601,33603,33605,33607,33609,33611],{"class":51,"line":33595},185,[49,33597,33598],{"class":55},"    plt.figure(",[49,33600,31782],{"class":126},[49,33602,60],{"class":59},[49,33604,228],{"class":55},[49,33606,717],{"class":66},[49,33608,76],{"class":55},[49,33610,515],{"class":66},[49,33612,30586],{"class":55},[49,33614,33616],{"class":51,"line":33615},186,[49,33617,33618],{"class":283},"    # 设置图中有几张图\n",[49,33620,33622],{"class":51,"line":33621},187,[49,33623,33624],{"class":283},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[49,33626,33628],{"class":51,"line":33627},188,[49,33629,33630],{"class":283},"    # ①loss图\n",[49,33632,33634,33636,33638,33640,33642,33644,33646],{"class":51,"line":33633},189,[49,33635,31816],{"class":55},[49,33637,441],{"class":66},[49,33639,76],{"class":55},[49,33641,301],{"class":66},[49,33643,76],{"class":55},[49,33645,441],{"class":66},[49,33647,81],{"class":55},[49,33649,33651],{"class":51,"line":33650},190,[49,33652,33653],{"class":283},"    # 补充:\n",[49,33655,33657],{"class":51,"line":33656},191,[49,33658,33659],{"class":283},"    # plt.subplot(nrows, ncols, index)\n",[49,33661,33663],{"class":51,"line":33662},192,[49,33664,33665],{"class":283},"    # nrows：行数\n",[49,33667,33669],{"class":51,"line":33668},193,[49,33670,33671],{"class":283},"    # ncols：列数\n",[49,33673,33675],{"class":51,"line":33674},194,[49,33676,33677],{"class":283},"    # index：目前选中第几个子图（从1开始）\n",[49,33679,33681,33684,33687,33690,33693,33695,33698,33700,33703],{"class":51,"line":33680},195,[49,33682,33683],{"class":55},"    plt.plot(train_process[",[49,33685,33686],{"class":328},"\"epoch\"",[49,33688,33689],{"class":55},"],train_process.train_loss_all,",[49,33691,33692],{"class":328},"'ro-'",[49,33694,76],{"class":55},[49,33696,33697],{"class":126},"label",[49,33699,60],{"class":59},[49,33701,33702],{"class":328},"'train loss'",[49,33704,81],{"class":55},[49,33706,33708,33710,33712,33715,33718,33720,33722,33724,33727],{"class":51,"line":33707},196,[49,33709,33683],{"class":55},[49,33711,33686],{"class":328},[49,33713,33714],{"class":55},"],train_process.val_loss_all,",[49,33716,33717],{"class":328},"'bs--'",[49,33719,76],{"class":55},[49,33721,33697],{"class":126},[49,33723,60],{"class":59},[49,33725,33726],{"class":328},"'val loss'",[49,33728,81],{"class":55},[49,33730,33732],{"class":51,"line":33731},197,[49,33733,33734],{"class":283},"    # 添加一个图例\n",[49,33736,33738],{"class":51,"line":33737},198,[49,33739,33740],{"class":55},"    plt.legend()\n",[49,33742,33744],{"class":51,"line":33743},199,[49,33745,33746],{"class":283},"    # 给轴添加标签\n",[49,33748,33750,33753,33756],{"class":51,"line":33749},200,[49,33751,33752],{"class":55},"    plt.xlabel(",[49,33754,33755],{"class":328},"'epoch'",[49,33757,81],{"class":55},[49,33759,33761,33764,33767],{"class":51,"line":33760},201,[49,33762,33763],{"class":55},"    plt.ylabel(",[49,33765,33766],{"class":328},"'loss'",[49,33768,81],{"class":55},[49,33770,33772],{"class":51,"line":33771},202,[49,33773,33774],{"class":283},"    # ②准确度图\n",[49,33776,33778,33780,33782,33784,33786,33788,33790],{"class":51,"line":33777},203,[49,33779,31816],{"class":55},[49,33781,441],{"class":66},[49,33783,76],{"class":55},[49,33785,301],{"class":66},[49,33787,76],{"class":55},[49,33789,301],{"class":66},[49,33791,81],{"class":55},[49,33793,33795,33797,33799,33802,33804,33806,33808,33810,33813],{"class":51,"line":33794},204,[49,33796,33683],{"class":55},[49,33798,33686],{"class":328},[49,33800,33801],{"class":55},"],train_process.train_acc_all,",[49,33803,33692],{"class":328},[49,33805,76],{"class":55},[49,33807,33697],{"class":126},[49,33809,60],{"class":59},[49,33811,33812],{"class":328},"'train acc'",[49,33814,81],{"class":55},[49,33816,33818,33820,33822,33825,33827,33829,33831,33833,33836],{"class":51,"line":33817},205,[49,33819,33683],{"class":55},[49,33821,33686],{"class":328},[49,33823,33824],{"class":55},"],train_process.val_acc_all,",[49,33826,33717],{"class":328},[49,33828,76],{"class":55},[49,33830,33697],{"class":126},[49,33832,60],{"class":59},[49,33834,33835],{"class":328},"'val acc'",[49,33837,81],{"class":55},[49,33839,33841],{"class":51,"line":33840},206,[49,33842,33843],{"class":283},"    # 添加图例\n",[49,33845,33847],{"class":51,"line":33846},207,[49,33848,33740],{"class":55},[49,33850,33852,33854,33856],{"class":51,"line":33851},208,[49,33853,33752],{"class":55},[49,33855,33686],{"class":328},[49,33857,81],{"class":55},[49,33859,33861,33863,33866],{"class":51,"line":33860},209,[49,33862,33763],{"class":55},[49,33864,33865],{"class":328},"\"acc\"",[49,33867,81],{"class":55},[49,33869,33871],{"class":51,"line":33870},210,[49,33872,33873],{"class":55},"    plt.show()\n",[49,33875,33877],{"class":51,"line":33876},211,[49,33878,2492],{"emptyLinePlaceholder":151},[49,33880,33882],{"class":51,"line":33881},212,[49,33883,33884],{"class":283},"# 正式开始训练:\n",[49,33886,33888,33890,33892,33894,33896],{"class":51,"line":33887},213,[49,33889,1623],{"class":59},[49,33891,31309],{"class":66},[49,33893,3041],{"class":59},[49,33895,31314],{"class":328},[49,33897,3831],{"class":55},[49,33899,33901],{"class":51,"line":33900},214,[49,33902,33903],{"class":283},"    # 将模型实例化\n",[49,33905,33907,33910,33912],{"class":51,"line":33906},215,[49,33908,33909],{"class":55},"    LeNet",[49,33911,60],{"class":59},[49,33913,33914],{"class":55},"LeNet()\n",[49,33916,33918,33921,33923],{"class":51,"line":33917},216,[49,33919,33920],{"class":55},"    train_dataloader,val_dataloader",[49,33922,60],{"class":59},[49,33924,33925],{"class":55},"train_val_data_process()\n",[49,33927,33929,33931,33933,33936,33939,33941,33943],{"class":51,"line":33928},217,[49,33930,33482],{"class":55},[49,33932,60],{"class":59},[49,33934,33935],{"class":55},"train_model_process(LeNet,train_dataloader,val_dataloader,",[49,33937,33938],{"class":126},"num_epochs",[49,33940,60],{"class":59},[49,33942,919],{"class":66},[49,33944,81],{"class":55},[49,33946,33948],{"class":51,"line":33947},218,[49,33949,33950],{"class":55},"    matplot_acc_loss(train_process)\n",[14,33952,33953],{},"画图的补充点学习：",[14,33955,33956],{},[1554,33957],{"alt":44,"src":33958},"\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",[178,33960,33961],{"start":109},[181,33962,33963],{},"测试",[39,33965,33967],{"className":41,"code":33966,"language":43,"meta":44,"style":44},"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",[46,33968,33969,33975,33985,33997,34007,34012,34022,34032,34036,34041,34050,34067,34079,34096,34107,34123,34128,34139,34150,34161,34168,34172,34177,34187,34192,34209,34217,34221,34226,34235,34244,34248,34253,34258,34263,34270,34275,34287,34297,34307,34312,34316,34321,34330,34335,34351,34356,34361,34366,34380,34385,34399,34403,34408,34423,34428,34440,34444,34449,34461,34466,34474,34479,34484,34494,34499,34508,34513,34518,34522,34527,34532,34548,34556,34561,34566,34625,34631,34636,34647,34655,34663,34667,34672,34676,34681,34689,34694,34710,34715,34725,34735],{"__ignoreMap":44},[49,33970,33971,33973],{"class":51,"line":52},[49,33972,30481],{"class":59},[49,33974,30484],{"class":55},[49,33976,33977,33979,33981,33983],{"class":51,"line":84},[49,33978,30481],{"class":59},[49,33980,31504],{"class":55},[49,33982,31472],{"class":59},[49,33984,31509],{"class":55},[49,33986,33987,33989,33992,33994],{"class":51,"line":109},[49,33988,30826],{"class":59},[49,33990,33991],{"class":55}," jupyter_client.consoleapp ",[49,33993,30481],{"class":59},[49,33995,33996],{"class":55}," classes\n",[49,33998,33999,34001,34003,34005],{"class":51,"line":120},[49,34000,30826],{"class":59},[49,34002,31487],{"class":55},[49,34004,30481],{"class":59},[49,34006,31492],{"class":55},[49,34008,34009],{"class":51,"line":135},[49,34010,34011],{"class":283},"# 导入数据集\n",[49,34013,34014,34016,34018,34020],{"class":51,"line":1306},[49,34015,30826],{"class":59},[49,34017,31457],{"class":55},[49,34019,30481],{"class":59},[49,34021,31462],{"class":55},[49,34023,34024,34026,34028,34030],{"class":51,"line":1312},[49,34025,30826],{"class":59},[49,34027,32003],{"class":55},[49,34029,30481],{"class":59},[49,34031,32008],{"class":55},[49,34033,34034],{"class":51,"line":1403},[49,34035,2492],{"emptyLinePlaceholder":151},[49,34037,34038],{"class":51,"line":1409},[49,34039,34040],{"class":283},"# 测试数据处理\n",[49,34042,34043,34045,34048],{"class":51,"line":1421},[49,34044,32036],{"class":59},[49,34046,34047],{"class":2055}," test_data_process",[49,34049,32042],{"class":55},[49,34051,34052,34055,34057,34059,34061,34063,34065],{"class":51,"line":1704},[49,34053,34054],{"class":55},"    test_data",[49,34056,60],{"class":59},[49,34058,31544],{"class":55},[49,34060,31547],{"class":126},[49,34062,60],{"class":59},[49,34064,31552],{"class":328},[49,34066,31555],{"class":55},[49,34068,34069,34072,34074,34077],{"class":51,"line":1709},[49,34070,34071],{"class":126},"                           train",[49,34073,60],{"class":59},[49,34075,34076],{"class":66},"False",[49,34078,31555],{"class":55},[49,34080,34081,34084,34086,34088,34090,34092,34094],{"class":51,"line":1715},[49,34082,34083],{"class":126},"                           transform",[49,34085,60],{"class":59},[49,34087,31582],{"class":55},[49,34089,31585],{"class":126},[49,34091,60],{"class":59},[49,34093,1120],{"class":66},[49,34095,31593],{"class":55},[49,34097,34098,34101,34103,34105],{"class":51,"line":1720},[49,34099,34100],{"class":126},"                           download",[49,34102,60],{"class":59},[49,34104,31565],{"class":66},[49,34106,81],{"class":55},[49,34108,34109,34112,34114,34116,34118,34120],{"class":51,"line":1734},[49,34110,34111],{"class":55},"    test_dataloader",[49,34113,60],{"class":59},[49,34115,31623],{"class":55},[49,34117,31626],{"class":126},[49,34119,60],{"class":59},[49,34121,34122],{"class":55},"test_data,\n",[49,34124,34125],{"class":51,"line":1739},[49,34126,34127],{"class":283},"                                    # 这里是一张一张进行测试\n",[49,34129,34130,34133,34135,34137],{"class":51,"line":1745},[49,34131,34132],{"class":126},"                                    batch_size",[49,34134,60],{"class":59},[49,34136,441],{"class":66},[49,34138,31555],{"class":55},[49,34140,34141,34144,34146,34148],{"class":51,"line":1766},[49,34142,34143],{"class":126},"                                    shuffle",[49,34145,60],{"class":59},[49,34147,31565],{"class":66},[49,34149,31555],{"class":55},[49,34151,34152,34155,34157,34159],{"class":51,"line":1771},[49,34153,34154],{"class":126},"                                    num_workers",[49,34156,60],{"class":59},[49,34158,415],{"class":66},[49,34160,81],{"class":55},[49,34162,34163,34165],{"class":51,"line":1785},[49,34164,4182],{"class":59},[49,34166,34167],{"class":55}," test_dataloader\n",[49,34169,34170],{"class":51,"line":1790},[49,34171,2492],{"emptyLinePlaceholder":151},[49,34173,34174],{"class":51,"line":1819},[49,34175,34176],{"class":283},"# 定义模型测试函数\n",[49,34178,34179,34181,34184],{"class":51,"line":1824},[49,34180,32036],{"class":59},[49,34182,34183],{"class":2055}," test_model_process",[49,34185,34186],{"class":55},"(model,test_dataloader):\n",[49,34188,34189],{"class":51,"line":1841},[49,34190,34191],{"class":283},"    # 将模型放到设备当中，先进行判断\n",[49,34193,34194,34196,34198,34200,34202,34204,34206],{"class":51,"line":1846},[49,34195,31326],{"class":55},[49,34197,60],{"class":59},[49,34199,31333],{"class":328},[49,34201,1796],{"class":59},[49,34203,31338],{"class":55},[49,34205,1793],{"class":59},[49,34207,34208],{"class":328}," \"cpu\"\n",[49,34210,34211,34213,34215],{"class":51,"line":1851},[49,34212,31378],{"class":55},[49,34214,60],{"class":59},[49,34216,32378],{"class":55},[49,34218,34219],{"class":51,"line":1856},[49,34220,2492],{"emptyLinePlaceholder":151},[49,34222,34223],{"class":51,"line":1870},[49,34224,34225],{"class":283},"    # 设置初始化参数\n",[49,34227,34228,34231,34233],{"class":51,"line":1875},[49,34229,34230],{"class":55},"    test_corrects",[49,34232,60],{"class":59},[49,34234,32431],{"class":66},[49,34236,34237,34240,34242],{"class":51,"line":2669},[49,34238,34239],{"class":55},"    test_num",[49,34241,60],{"class":59},[49,34243,3177],{"class":66},[49,34245,34246],{"class":51,"line":2683},[49,34247,2492],{"emptyLinePlaceholder":151},[49,34249,34250],{"class":51,"line":2691},[49,34251,34252],{"class":283},"    # 进行模型测试\n",[49,34254,34255],{"class":51,"line":2696},[49,34256,34257],{"class":283},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[49,34259,34260],{"class":51,"line":2702},[49,34261,34262],{"class":283},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[49,34264,34265,34268],{"class":51,"line":2708},[49,34266,34267],{"class":59},"    with",[49,34269,32973],{"class":55},[49,34271,34272],{"class":51,"line":2713},[49,34273,34274],{"class":283},"        # 从数据中进行\n",[49,34276,34277,34279,34282,34284],{"class":51,"line":8038},[49,34278,3495],{"class":59},[49,34280,34281],{"class":55}," test_data_x,test_data_y ",[49,34283,26134],{"class":59},[49,34285,34286],{"class":55}," test_dataloader:\n",[49,34288,34289,34292,34294],{"class":51,"line":8062},[49,34290,34291],{"class":55},"            test_data_x",[49,34293,60],{"class":59},[49,34295,34296],{"class":55},"test_data_x.to(device)\n",[49,34298,34299,34302,34304],{"class":51,"line":8067},[49,34300,34301],{"class":55},"            test_data_y",[49,34303,60],{"class":59},[49,34305,34306],{"class":55},"test_data_y.to(device)\n",[49,34308,34309],{"class":51,"line":8073},[49,34310,34311],{"class":283},"            # 设置为验证模式\n",[49,34313,34314],{"class":51,"line":8100},[49,34315,32964],{"class":55},[49,34317,34318],{"class":51,"line":8105},[49,34319,34320],{"class":283},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[49,34322,34323,34325,34327],{"class":51,"line":8111},[49,34324,32749],{"class":55},[49,34326,60],{"class":59},[49,34328,34329],{"class":55},"model(test_data_x)\n",[49,34331,34332],{"class":51,"line":8123},[49,34333,34334],{"class":283},"            # 查找每一行中最大值对应的下标\n",[49,34336,34337,34339,34341,34343,34345,34347,34349],{"class":51,"line":8135},[49,34338,32766],{"class":55},[49,34340,60],{"class":59},[49,34342,32771],{"class":55},[49,34344,32774],{"class":126},[49,34346,60],{"class":59},[49,34348,441],{"class":66},[49,34350,81],{"class":55},[49,34352,34353],{"class":51,"line":8147},[49,34354,34355],{"class":283},"            # 计算正确率\n",[49,34357,34358],{"class":51,"line":9806},[49,34359,34360],{"class":283},"            # .data表示是一个不带梯度信息的tensor\n",[49,34362,34363],{"class":51,"line":9831},[49,34364,34365],{"class":283},"            # 如果预测正确，则准确度test_corrects加1\n",[49,34367,34368,34371,34373,34375,34377],{"class":51,"line":9854},[49,34369,34370],{"class":55},"            test_corrects",[49,34372,9567],{"class":59},[49,34374,32876],{"class":55},[49,34376,3041],{"class":59},[49,34378,34379],{"class":55},"test_data_y.data)\n",[49,34381,34382],{"class":51,"line":9878},[49,34383,34384],{"class":283},"            # 将所有的测试样本进行累计\n",[49,34386,34387,34390,34392,34395,34397],{"class":51,"line":9883},[49,34388,34389],{"class":55},"            test_num",[49,34391,9567],{"class":59},[49,34393,34394],{"class":55},"test_data_x.size(",[49,34396,415],{"class":66},[49,34398,81],{"class":55},[49,34400,34401],{"class":51,"line":9888},[49,34402,2492],{"emptyLinePlaceholder":151},[49,34404,34405],{"class":51,"line":9893},[49,34406,34407],{"class":283},"        # 计算准确度\n",[49,34409,34410,34413,34415,34418,34420],{"class":51,"line":9902},[49,34411,34412],{"class":55},"        test_acc",[49,34414,60],{"class":59},[49,34416,34417],{"class":55},"test_corrects.double().item()",[49,34419,803],{"class":59},[49,34421,34422],{"class":55},"test_num\n",[49,34424,34425],{"class":51,"line":9907},[49,34426,34427],{"class":283},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[49,34429,34430,34432,34434,34437],{"class":51,"line":9913},[49,34431,32540],{"class":66},[49,34433,228],{"class":55},[49,34435,34436],{"class":328},"\"测试的准确率：\"",[49,34438,34439],{"class":55},",test_acc)\n",[49,34441,34442],{"class":51,"line":9934},[49,34443,2492],{"emptyLinePlaceholder":151},[49,34445,34446],{"class":51,"line":9940},[49,34447,34448],{"class":283},"# 实现模型的测试功能\n",[49,34450,34451,34453,34455,34457,34459],{"class":51,"line":9954},[49,34452,1623],{"class":59},[49,34454,31309],{"class":66},[49,34456,3041],{"class":59},[49,34458,31314],{"class":328},[49,34460,3831],{"class":55},[49,34462,34463],{"class":51,"line":9960},[49,34464,34465],{"class":283},"    # 加载模型\n",[49,34467,34468,34470,34472],{"class":51,"line":9987},[49,34469,31378],{"class":55},[49,34471,60],{"class":59},[49,34473,33914],{"class":55},[49,34475,34476],{"class":51,"line":9996},[49,34477,34478],{"class":283},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[49,34480,34481],{"class":51,"line":10002},[49,34482,34483],{"class":283},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[49,34485,34486,34489,34492],{"class":51,"line":10010},[49,34487,34488],{"class":55},"    model.load_state_dict(torch.load(",[49,34490,34491],{"class":328},"'best_model.pth'",[49,34493,30586],{"class":55},[49,34495,34496],{"class":51,"line":10015},[49,34497,34498],{"class":283},"    # 数据加载\n",[49,34500,34501,34503,34505],{"class":51,"line":16694},[49,34502,34111],{"class":55},[49,34504,60],{"class":59},[49,34506,34507],{"class":55},"test_data_process()\n",[49,34509,34510],{"class":51,"line":16700},[49,34511,34512],{"class":283},"    # 加载模型测试的函数\n",[49,34514,34515],{"class":51,"line":16723},[49,34516,34517],{"class":55},"    test_model_process(model,test_dataloader)\n",[49,34519,34520],{"class":51,"line":16729},[49,34521,2492],{"emptyLinePlaceholder":151},[49,34523,34524],{"class":51,"line":16752},[49,34525,34526],{"class":283},"    # 验证集推理实现：\n",[49,34528,34529],{"class":51,"line":16766},[49,34530,34531],{"class":283},"    # 加载数据加载的更详细一些\n",[49,34533,34534,34536,34538,34540,34542,34544,34546],{"class":51,"line":16786},[49,34535,31326],{"class":55},[49,34537,60],{"class":59},[49,34539,31333],{"class":328},[49,34541,1796],{"class":59},[49,34543,31338],{"class":55},[49,34545,1793],{"class":59},[49,34547,34208],{"class":328},[49,34549,34550,34552,34554],{"class":51,"line":16792},[49,34551,31378],{"class":55},[49,34553,60],{"class":59},[49,34555,32378],{"class":55},[49,34557,34558],{"class":51,"line":16803},[49,34559,34560],{"class":283},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[49,34562,34563],{"class":51,"line":16826},[49,34564,34565],{"class":283},"    # 顺序不可改变\n",[49,34567,34568,34571,34573,34575,34578,34580,34583,34585,34588,34590,34593,34595,34598,34600,34603,34605,34608,34610,34613,34615,34618,34620,34623],{"class":51,"line":16848},[49,34569,34570],{"class":55},"    classes",[49,34572,60],{"class":59},[49,34574,1109],{"class":55},[49,34576,34577],{"class":328},"'T-shirt\u002Ftop'",[49,34579,76],{"class":55},[49,34581,34582],{"class":328},"'Trouser'",[49,34584,76],{"class":55},[49,34586,34587],{"class":328},"'Pullover'",[49,34589,76],{"class":55},[49,34591,34592],{"class":328},"'Dress'",[49,34594,76],{"class":55},[49,34596,34597],{"class":328},"'Coat'",[49,34599,76],{"class":55},[49,34601,34602],{"class":328},"'Sandal'",[49,34604,76],{"class":55},[49,34606,34607],{"class":328},"'Shirt'",[49,34609,76],{"class":55},[49,34611,34612],{"class":328},"'Sneaker'",[49,34614,76],{"class":55},[49,34616,34617],{"class":328},"'Bag'",[49,34619,76],{"class":55},[49,34621,34622],{"class":328},"'Ankle boot'",[49,34624,33335],{"class":55},[49,34626,34627,34629],{"class":51,"line":16853},[49,34628,34267],{"class":59},[49,34630,32973],{"class":55},[49,34632,34633],{"class":51,"line":16859},[49,34634,34635],{"class":283},"        # 将数据和标签都放到设备当中\n",[49,34637,34638,34640,34643,34645],{"class":51,"line":16873},[49,34639,3495],{"class":59},[49,34641,34642],{"class":55}," b_x,b_y ",[49,34644,26134],{"class":59},[49,34646,34286],{"class":55},[49,34648,34649,34651,34653],{"class":51,"line":16886},[49,34650,32699],{"class":55},[49,34652,60],{"class":59},[49,34654,32704],{"class":55},[49,34656,34657,34659,34661],{"class":51,"line":16891},[49,34658,32714],{"class":55},[49,34660,60],{"class":59},[49,34662,32719],{"class":55},[49,34664,34665],{"class":51,"line":16905},[49,34666,2492],{"emptyLinePlaceholder":151},[49,34668,34669],{"class":51,"line":16910},[49,34670,34671],{"class":283},"            # 设置模型为验证模式\n",[49,34673,34674],{"class":51,"line":16916},[49,34675,32964],{"class":55},[49,34677,34678],{"class":51,"line":16921},[49,34679,34680],{"class":283},"            # 模型推理结果\n",[49,34682,34683,34685,34687],{"class":51,"line":16935},[49,34684,32749],{"class":55},[49,34686,60],{"class":59},[49,34688,32754],{"class":55},[49,34690,34691],{"class":51,"line":16940},[49,34692,34693],{"class":283},"            # 获取最大下标，最大下标就是类别号\n",[49,34695,34696,34698,34700,34702,34704,34706,34708],{"class":51,"line":16945},[49,34697,32766],{"class":55},[49,34699,60],{"class":59},[49,34701,32771],{"class":55},[49,34703,32774],{"class":126},[49,34705,60],{"class":59},[49,34707,441],{"class":66},[49,34709,81],{"class":55},[49,34711,34712],{"class":51,"line":16959},[49,34713,34714],{"class":283},"            # 取出张量中的数值\n",[49,34716,34717,34720,34722],{"class":51,"line":16971},[49,34718,34719],{"class":55},"            result",[49,34721,60],{"class":59},[49,34723,34724],{"class":55},"pre_lab.item()\n",[49,34726,34727,34730,34732],{"class":51,"line":16976},[49,34728,34729],{"class":55},"            label",[49,34731,60],{"class":59},[49,34733,34734],{"class":55},"b_y.item()\n",[49,34736,34737,34740,34742,34745,34748,34751,34753,34756],{"class":51,"line":16989},[49,34738,34739],{"class":66},"            print",[49,34741,228],{"class":55},[49,34743,34744],{"class":328},"\"预测值：\"",[49,34746,34747],{"class":55},",classes[result],",[49,34749,34750],{"class":328},"\"------\"",[49,34752,76],{"class":55},[49,34754,34755],{"class":328},"\"真实值：\"",[49,34757,34758],{"class":55},",classes[label])\n",[14,34760,34761],{},"（2）AlexNet",[178,34763,34764],{},[181,34765,34766],{},"神经网络构建",[39,34768,34770],{"className":41,"code":34769,"language":43,"meta":44,"style":44},"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",[46,34771,34772,34778,34788,34798,34810,34814,34831,34839,34854,34866,34908,34935,34978,35004,35048,35091,35134,35161,35165,35175,35180,35208,35227,35246,35250,35255,35263,35278,35288,35302,35312,35327,35342,35357,35368,35372,35377,35387,35402,35407,35421,35436,35448,35453,35464,35469,35475,35480,35492,35512,35517,35526],{"__ignoreMap":44},[49,34773,34774,34776],{"class":51,"line":52},[49,34775,30481],{"class":59},[49,34777,30484],{"class":55},[49,34779,34780,34782,34784,34786],{"class":51,"line":84},[49,34781,30826],{"class":59},[49,34783,30829],{"class":55},[49,34785,30481],{"class":59},[49,34787,30834],{"class":55},[49,34789,34790,34792,34794,34796],{"class":51,"line":109},[49,34791,30826],{"class":59},[49,34793,30846],{"class":55},[49,34795,30481],{"class":59},[49,34797,30851],{"class":55},[49,34799,34800,34802,34805,34807],{"class":51,"line":120},[49,34801,30481],{"class":59},[49,34803,34804],{"class":55}," torch.nn.functional ",[49,34806,31472],{"class":59},[49,34808,34809],{"class":55}," F\n",[49,34811,34812],{"class":51,"line":135},[49,34813,2492],{"emptyLinePlaceholder":151},[49,34815,34816,34818,34821,34823,34825,34827,34829],{"class":51,"line":1306},[49,34817,14784],{"class":59},[49,34819,34820],{"class":2055}," AlexNet",[49,34822,228],{"class":55},[49,34824,30867],{"class":2055},[49,34826,777],{"class":55},[49,34828,30872],{"class":2055},[49,34830,30875],{"class":55},[49,34832,34833,34835,34837],{"class":51,"line":1312},[49,34834,30890],{"class":59},[49,34836,30893],{"class":66},[49,34838,30896],{"class":55},[49,34840,34841,34843,34846,34848,34850,34852],{"class":51,"line":1403},[49,34842,30906],{"class":66},[49,34844,34845],{"class":55},"(AlexNet,",[49,34847,30912],{"class":66},[49,34849,30915],{"class":55},[49,34851,30918],{"class":66},[49,34853,2068],{"class":55},[49,34855,34856,34858,34861,34863],{"class":51,"line":1409},[49,34857,30934],{"class":66},[49,34859,34860],{"class":55},".ReLu",[49,34862,60],{"class":59},[49,34864,34865],{"class":55},"nn.ReLU()\n",[49,34867,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898,34900,34902,34904,34906],{"class":51,"line":1421},[49,34869,30934],{"class":66},[49,34871,30937],{"class":55},[49,34873,60],{"class":59},[49,34875,30942],{"class":55},[49,34877,30945],{"class":126},[49,34879,60],{"class":59},[49,34881,441],{"class":66},[49,34883,76],{"class":55},[49,34885,30954],{"class":126},[49,34887,60],{"class":59},[49,34889,433],{"class":66},[49,34891,76],{"class":55},[49,34893,30963],{"class":126},[49,34895,60],{"class":59},[49,34897,691],{"class":66},[49,34899,76],{"class":55},[49,34901,31018],{"class":126},[49,34903,60],{"class":59},[49,34905,515],{"class":66},[49,34907,81],{"class":55},[49,34909,34910,34912,34914,34916,34919,34921,34923,34925,34927,34929,34931,34933],{"class":51,"line":1704},[49,34911,30934],{"class":66},[49,34913,31002],{"class":55},[49,34915,60],{"class":59},[49,34917,34918],{"class":55},"nn.MaxPool2d(",[49,34920,30963],{"class":126},[49,34922,60],{"class":59},[49,34924,73],{"class":66},[49,34926,76],{"class":55},[49,34928,31018],{"class":126},[49,34930,60],{"class":59},[49,34932,301],{"class":66},[49,34934,81],{"class":55},[49,34936,34937,34939,34941,34943,34945,34947,34949,34951,34953,34955,34957,34960,34962,34964,34966,34968,34970,34972,34974,34976],{"class":51,"line":1709},[49,34938,30934],{"class":66},[49,34940,31031],{"class":55},[49,34942,60],{"class":59},[49,34944,30942],{"class":55},[49,34946,30945],{"class":126},[49,34948,60],{"class":59},[49,34950,433],{"class":66},[49,34952,76],{"class":55},[49,34954,30954],{"class":126},[49,34956,60],{"class":59},[49,34958,34959],{"class":66},"256",[49,34961,76],{"class":55},[49,34963,30963],{"class":126},[49,34965,60],{"class":59},[49,34967,541],{"class":66},[49,34969,76],{"class":55},[49,34971,30972],{"class":126},[49,34973,60],{"class":59},[49,34975,301],{"class":66},[49,34977,81],{"class":55},[49,34979,34980,34982,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002],{"class":51,"line":1715},[49,34981,30934],{"class":66},[49,34983,31066],{"class":55},[49,34985,60],{"class":59},[49,34987,34918],{"class":55},[49,34989,30963],{"class":126},[49,34991,60],{"class":59},[49,34993,73],{"class":66},[49,34995,76],{"class":55},[49,34997,31018],{"class":126},[49,34999,60],{"class":59},[49,35001,301],{"class":66},[49,35003,81],{"class":55},[49,35005,35006,35008,35011,35013,35015,35017,35019,35021,35023,35025,35027,35030,35032,35034,35036,35038,35040,35042,35044,35046],{"class":51,"line":1720},[49,35007,30934],{"class":66},[49,35009,35010],{"class":55},".c5",[49,35012,60],{"class":59},[49,35014,30942],{"class":55},[49,35016,30945],{"class":126},[49,35018,60],{"class":59},[49,35020,34959],{"class":66},[49,35022,76],{"class":55},[49,35024,30954],{"class":126},[49,35026,60],{"class":59},[49,35028,35029],{"class":66},"384",[49,35031,76],{"class":55},[49,35033,30963],{"class":126},[49,35035,60],{"class":59},[49,35037,73],{"class":66},[49,35039,76],{"class":55},[49,35041,30972],{"class":126},[49,35043,60],{"class":59},[49,35045,441],{"class":66},[49,35047,81],{"class":55},[49,35049,35050,35052,35055,35057,35059,35061,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081,35083,35085,35087,35089],{"class":51,"line":1734},[49,35051,30934],{"class":66},[49,35053,35054],{"class":55},".c6",[49,35056,60],{"class":59},[49,35058,30942],{"class":55},[49,35060,30945],{"class":126},[49,35062,60],{"class":59},[49,35064,35029],{"class":66},[49,35066,76],{"class":55},[49,35068,30954],{"class":126},[49,35070,60],{"class":59},[49,35072,35029],{"class":66},[49,35074,76],{"class":55},[49,35076,30963],{"class":126},[49,35078,60],{"class":59},[49,35080,73],{"class":66},[49,35082,76],{"class":55},[49,35084,30972],{"class":126},[49,35086,60],{"class":59},[49,35088,441],{"class":66},[49,35090,81],{"class":55},[49,35092,35093,35095,35098,35100,35102,35104,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124,35126,35128,35130,35132],{"class":51,"line":1739},[49,35094,30934],{"class":66},[49,35096,35097],{"class":55},".c7",[49,35099,60],{"class":59},[49,35101,30942],{"class":55},[49,35103,30945],{"class":126},[49,35105,60],{"class":59},[49,35107,35029],{"class":66},[49,35109,76],{"class":55},[49,35111,30954],{"class":126},[49,35113,60],{"class":59},[49,35115,34959],{"class":66},[49,35117,76],{"class":55},[49,35119,30963],{"class":126},[49,35121,60],{"class":59},[49,35123,73],{"class":66},[49,35125,76],{"class":55},[49,35127,30972],{"class":126},[49,35129,60],{"class":59},[49,35131,441],{"class":66},[49,35133,81],{"class":55},[49,35135,35136,35138,35141,35143,35145,35147,35149,35151,35153,35155,35157,35159],{"class":51,"line":1745},[49,35137,30934],{"class":66},[49,35139,35140],{"class":55},".s8",[49,35142,60],{"class":59},[49,35144,34918],{"class":55},[49,35146,30963],{"class":126},[49,35148,60],{"class":59},[49,35150,73],{"class":66},[49,35152,76],{"class":55},[49,35154,31018],{"class":126},[49,35156,60],{"class":59},[49,35158,301],{"class":66},[49,35160,81],{"class":55},[49,35162,35163],{"class":51,"line":1766},[49,35164,31091],{"class":283},[49,35166,35167,35169,35171,35173],{"class":51,"line":1771},[49,35168,30934],{"class":66},[49,35170,31098],{"class":55},[49,35172,60],{"class":59},[49,35174,31103],{"class":55},[49,35176,35177],{"class":51,"line":1785},[49,35178,35179],{"class":283},"       # 定义全连接层\n",[49,35181,35182,35184,35187,35189,35191,35193,35195,35197,35199,35201,35203,35206],{"class":51,"line":1790},[49,35183,30934],{"class":66},[49,35185,35186],{"class":55},".f1",[49,35188,60],{"class":59},[49,35190,31120],{"class":55},[49,35192,566],{"class":66},[49,35194,674],{"class":59},[49,35196,566],{"class":66},[49,35198,674],{"class":59},[49,35200,34959],{"class":66},[49,35202,76],{"class":55},[49,35204,35205],{"class":66},"4096",[49,35207,81],{"class":55},[49,35209,35210,35212,35215,35217,35219,35221,35223,35225],{"class":51,"line":1819},[49,35211,30934],{"class":66},[49,35213,35214],{"class":55},".f2",[49,35216,60],{"class":59},[49,35218,31120],{"class":55},[49,35220,35205],{"class":66},[49,35222,76],{"class":55},[49,35224,35205],{"class":66},[49,35226,81],{"class":55},[49,35228,35229,35231,35234,35236,35238,35240,35242,35244],{"class":51,"line":1824},[49,35230,30934],{"class":66},[49,35232,35233],{"class":55},".f3",[49,35235,60],{"class":59},[49,35237,31120],{"class":55},[49,35239,35205],{"class":66},[49,35241,76],{"class":55},[49,35243,95],{"class":66},[49,35245,81],{"class":55},[49,35247,35248],{"class":51,"line":1841},[49,35249,2492],{"emptyLinePlaceholder":151},[49,35251,35252],{"class":51,"line":1846},[49,35253,35254],{"class":283},"    # 定义前向传播\n",[49,35256,35257,35259,35261],{"class":51,"line":1851},[49,35258,30890],{"class":59},[49,35260,31182],{"class":2055},[49,35262,31185],{"class":55},[49,35264,35265,35267,35269,35271,35274,35276],{"class":51,"line":1856},[49,35266,31190],{"class":55},[49,35268,60],{"class":59},[49,35270,30912],{"class":66},[49,35272,35273],{"class":55},".ReLu(",[49,35275,30912],{"class":66},[49,35277,31202],{"class":55},[49,35279,35280,35282,35284,35286],{"class":51,"line":1870},[49,35281,31190],{"class":55},[49,35283,60],{"class":59},[49,35285,30912],{"class":66},[49,35287,31213],{"class":55},[49,35289,35290,35292,35294,35296,35298,35300],{"class":51,"line":1875},[49,35291,31190],{"class":55},[49,35293,60],{"class":59},[49,35295,30912],{"class":66},[49,35297,35273],{"class":55},[49,35299,30912],{"class":66},[49,35301,31228],{"class":55},[49,35303,35304,35306,35308,35310],{"class":51,"line":2669},[49,35305,31190],{"class":55},[49,35307,60],{"class":59},[49,35309,30912],{"class":66},[49,35311,31239],{"class":55},[49,35313,35314,35316,35318,35320,35322,35324],{"class":51,"line":2683},[49,35315,31190],{"class":55},[49,35317,60],{"class":59},[49,35319,30912],{"class":66},[49,35321,35273],{"class":55},[49,35323,30912],{"class":66},[49,35325,35326],{"class":55},".c5(x))\n",[49,35328,35329,35331,35333,35335,35337,35339],{"class":51,"line":2691},[49,35330,31190],{"class":55},[49,35332,60],{"class":59},[49,35334,30912],{"class":66},[49,35336,35273],{"class":55},[49,35338,30912],{"class":66},[49,35340,35341],{"class":55},".c6(x))\n",[49,35343,35344,35346,35348,35350,35352,35354],{"class":51,"line":2696},[49,35345,31190],{"class":55},[49,35347,60],{"class":59},[49,35349,30912],{"class":66},[49,35351,35273],{"class":55},[49,35353,30912],{"class":66},[49,35355,35356],{"class":55},".c7(x))\n",[49,35358,35359,35361,35363,35365],{"class":51,"line":2702},[49,35360,31190],{"class":55},[49,35362,60],{"class":59},[49,35364,30912],{"class":66},[49,35366,35367],{"class":55},".s8(x)\n",[49,35369,35370],{"class":51,"line":2708},[49,35371,2492],{"emptyLinePlaceholder":151},[49,35373,35374],{"class":51,"line":2713},[49,35375,35376],{"class":283},"        # 展平加线性全连接层\n",[49,35378,35379,35381,35383,35385],{"class":51,"line":8038},[49,35380,31190],{"class":55},[49,35382,60],{"class":59},[49,35384,30912],{"class":66},[49,35386,31250],{"class":55},[49,35388,35389,35391,35393,35395,35397,35399],{"class":51,"line":8062},[49,35390,31190],{"class":55},[49,35392,60],{"class":59},[49,35394,30912],{"class":66},[49,35396,35273],{"class":55},[49,35398,30912],{"class":66},[49,35400,35401],{"class":55},".f1(x))\n",[49,35403,35404],{"class":51,"line":8067},[49,35405,35406],{"class":283},"        # 还需要dropout对神经元随机进行失活\n",[49,35408,35409,35411,35413,35416,35419],{"class":51,"line":8073},[49,35410,31190],{"class":55},[49,35412,60],{"class":59},[49,35414,35415],{"class":55},"F.dropout(x,",[49,35417,35418],{"class":66},"0.5",[49,35420,81],{"class":55},[49,35422,35423,35425,35427,35429,35431,35433],{"class":51,"line":8100},[49,35424,31190],{"class":55},[49,35426,60],{"class":59},[49,35428,30912],{"class":66},[49,35430,35273],{"class":55},[49,35432,30912],{"class":66},[49,35434,35435],{"class":55},".f2(x))\n",[49,35437,35438,35440,35442,35444,35446],{"class":51,"line":8105},[49,35439,31190],{"class":55},[49,35441,60],{"class":59},[49,35443,35415],{"class":55},[49,35445,35418],{"class":66},[49,35447,81],{"class":55},[49,35449,35450],{"class":51,"line":8111},[49,35451,35452],{"class":283},"        # 直接输出\n",[49,35454,35455,35457,35459,35461],{"class":51,"line":8123},[49,35456,31190],{"class":55},[49,35458,60],{"class":59},[49,35460,30912],{"class":66},[49,35462,35463],{"class":55},".f3(x)\n",[49,35465,35466],{"class":51,"line":8135},[49,35467,35468],{"class":283},"        # 前向传播输出\n",[49,35470,35471,35473],{"class":51,"line":8147},[49,35472,14842],{"class":59},[49,35474,31298],{"class":55},[49,35476,35477],{"class":51,"line":9806},[49,35478,35479],{"class":283},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[49,35481,35482,35484,35486,35488,35490],{"class":51,"line":9831},[49,35483,1623],{"class":59},[49,35485,31309],{"class":66},[49,35487,3041],{"class":59},[49,35489,31314],{"class":328},[49,35491,3831],{"class":55},[49,35493,35494,35496,35498,35500,35502,35504,35506,35508,35510],{"class":51,"line":9854},[49,35495,31326],{"class":55},[49,35497,60],{"class":59},[49,35499,30540],{"class":55},[49,35501,31333],{"class":328},[49,35503,1796],{"class":59},[49,35505,31338],{"class":55},[49,35507,1793],{"class":59},[49,35509,30565],{"class":328},[49,35511,81],{"class":55},[49,35513,35514],{"class":51,"line":9878},[49,35515,35516],{"class":283},"    # 模型实例化，然后将实例化的模型放到设备中\n",[49,35518,35519,35521,35523],{"class":51,"line":9883},[49,35520,31378],{"class":55},[49,35522,60],{"class":59},[49,35524,35525],{"class":55},"AlexNet().to(device)\n",[49,35527,35528,35530,35532,35534,35536,35539,35541,35543],{"class":51,"line":9888},[49,35529,31388],{"class":66},[49,35531,31391],{"class":55},[49,35533,441],{"class":66},[49,35535,76],{"class":55},[49,35537,35538],{"class":66},"227",[49,35540,76],{"class":55},[49,35542,35538],{"class":66},[49,35544,31404],{"class":55},[178,35546,35547],{"start":84},[181,35548,31417],{},[39,35550,35552],{"className":41,"code":35551,"language":43,"meta":44,"style":44},"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",[46,35553,35554,35560,35566,35576,35582,35592,35602,35612,35622,35632,35636,35647,35657,35661,35665,35669,35677,35689,35699,35715,35725,35757,35771,35781,35791,35795,35805,35819,35829,35839,35849,35855,35859,35863,35867,35871,35875,35883,35903,35907,35911,35915,35919,35923,35939,35943,35947,35955,35959,35963,35971,35975,35979,35983,35991,35995,35999,36003,36007,36015,36019,36027,36031,36039,36043,36051,36055,36063,36067,36071,36079,36083,36087,36091,36103,36127,36141,36145,36149,36153,36161,36165,36173,36177,36185,36189,36197,36201,36209,36213,36221,36225,36237,36241,36249,36253,36261,36265,36269,36273,36277,36285,36289,36305,36309,36317,36321,36325,36329,36333,36337,36341,36345,36361,36365,36377,36381,36393,36397,36409,36413,36421,36425,36433,36437,36441,36446,36452,36456,36465,36469,36486,36490,36499,36503,36521,36534,36539,36552,36556,36560,36568,36572,36576,36584,36588,36596,36600,36608,36612,36616,36658,36700,36704,36708,36724,36728,36744,36748,36752,36760,36764,36768,36780,36818,36823,36828,36837,36841,36855,36865,36871,36877,36883,36889,36893,36897,36903,36907,36911,36919,36923,36941,36945,36949,36953,36969,36973,36977,36981,36985,36989,37009,37029,37033,37037,37041,37049,37057,37061,37077,37097,37117,37121,37125,37133,37141,37145,37149,37153,37165,37169,37179,37187,37204],{"__ignoreMap":44},[49,35555,35556,35558],{"class":51,"line":52},[49,35557,30481],{"class":59},[49,35559,31911],{"class":55},[49,35561,35562,35564],{"class":51,"line":84},[49,35563,30481],{"class":59},[49,35565,31918],{"class":55},[49,35567,35568,35570,35572,35574],{"class":51,"line":109},[49,35569,30481],{"class":59},[49,35571,31929],{"class":55},[49,35573,31472],{"class":59},[49,35575,31934],{"class":55},[49,35577,35578,35580],{"class":51,"line":120},[49,35579,30481],{"class":59},[49,35581,30484],{"class":55},[49,35583,35584,35586,35588,35590],{"class":51,"line":135},[49,35585,30826],{"class":59},[49,35587,31504],{"class":55},[49,35589,30481],{"class":59},[49,35591,31951],{"class":55},[49,35593,35594,35596,35598,35600],{"class":51,"line":1306},[49,35595,30826],{"class":59},[49,35597,31457],{"class":55},[49,35599,30481],{"class":59},[49,35601,31462],{"class":55},[49,35603,35604,35606,35608,35610],{"class":51,"line":1312},[49,35605,30826],{"class":59},[49,35607,31487],{"class":55},[49,35609,30481],{"class":59},[49,35611,31492],{"class":55},[49,35613,35614,35616,35618,35620],{"class":51,"line":1403},[49,35615,30481],{"class":59},[49,35617,31504],{"class":55},[49,35619,31472],{"class":59},[49,35621,31509],{"class":55},[49,35623,35624,35626,35628,35630],{"class":51,"line":1409},[49,35625,30481],{"class":59},[49,35627,31521],{"class":55},[49,35629,31472],{"class":59},[49,35631,31526],{"class":55},[49,35633,35634],{"class":51,"line":1421},[49,35635,31996],{"class":283},[49,35637,35638,35640,35642,35644],{"class":51,"line":1704},[49,35639,30826],{"class":59},[49,35641,32003],{"class":55},[49,35643,30481],{"class":59},[49,35645,35646],{"class":55}," AlexNet\n",[49,35648,35649,35651,35653,35655],{"class":51,"line":1709},[49,35650,30826],{"class":59},[49,35652,30829],{"class":55},[49,35654,30481],{"class":59},[49,35656,30834],{"class":55},[49,35658,35659],{"class":51,"line":1715},[49,35660,2492],{"emptyLinePlaceholder":151},[49,35662,35663],{"class":51,"line":1720},[49,35664,2492],{"emptyLinePlaceholder":151},[49,35666,35667],{"class":51,"line":1734},[49,35668,32031],{"class":283},[49,35670,35671,35673,35675],{"class":51,"line":1739},[49,35672,32036],{"class":59},[49,35674,32039],{"class":2055},[49,35676,32042],{"class":55},[49,35678,35679,35681,35683,35685,35687],{"class":51,"line":1745},[49,35680,32047],{"class":55},[49,35682,60],{"class":59},[49,35684,31544],{"class":55},[49,35686,31552],{"class":328},[49,35688,31555],{"class":55},[49,35690,35691,35693,35695,35697],{"class":51,"line":1766},[49,35692,32060],{"class":126},[49,35694,60],{"class":59},[49,35696,31565],{"class":66},[49,35698,31555],{"class":55},[49,35700,35701,35703,35705,35707,35709,35711,35713],{"class":51,"line":1771},[49,35702,32071],{"class":126},[49,35704,60],{"class":59},[49,35706,31582],{"class":55},[49,35708,31585],{"class":126},[49,35710,60],{"class":59},[49,35712,35538],{"class":66},[49,35714,31593],{"class":55},[49,35716,35717,35719,35721,35723],{"class":51,"line":1785},[49,35718,32088],{"class":126},[49,35720,60],{"class":59},[49,35722,31565],{"class":66},[49,35724,81],{"class":55},[49,35726,35727,35729,35731,35733,35735,35737,35739,35741,35743,35745,35747,35749,35751,35753,35755],{"class":51,"line":1790},[49,35728,32099],{"class":55},[49,35730,60],{"class":59},[49,35732,32104],{"class":55},[49,35734,32107],{"class":66},[49,35736,228],{"class":55},[49,35738,32112],{"class":66},[49,35740,674],{"class":59},[49,35742,7448],{"class":66},[49,35744,32119],{"class":55},[49,35746,32107],{"class":66},[49,35748,228],{"class":55},[49,35750,32126],{"class":66},[49,35752,674],{"class":59},[49,35754,7448],{"class":66},[49,35756,32133],{"class":55},[49,35758,35759,35761,35763,35765,35767,35769],{"class":51,"line":1819},[49,35760,32138],{"class":55},[49,35762,60],{"class":59},[49,35764,32143],{"class":55},[49,35766,31626],{"class":126},[49,35768,60],{"class":59},[49,35770,31631],{"class":55},[49,35772,35773,35775,35777,35779],{"class":51,"line":1824},[49,35774,32154],{"class":126},[49,35776,60],{"class":59},[49,35778,32159],{"class":66},[49,35780,31555],{"class":55},[49,35782,35783,35785,35787,35789],{"class":51,"line":1841},[49,35784,32166],{"class":126},[49,35786,60],{"class":59},[49,35788,31565],{"class":66},[49,35790,31555],{"class":55},[49,35792,35793],{"class":51,"line":1846},[49,35794,32177],{"class":283},[49,35796,35797,35799,35801,35803],{"class":51,"line":1851},[49,35798,32182],{"class":126},[49,35800,60],{"class":59},[49,35802,616],{"class":66},[49,35804,81],{"class":55},[49,35806,35807,35809,35811,35813,35815,35817],{"class":51,"line":1856},[49,35808,32193],{"class":55},[49,35810,60],{"class":59},[49,35812,31623],{"class":55},[49,35814,31626],{"class":126},[49,35816,60],{"class":59},[49,35818,32204],{"class":55},[49,35820,35821,35823,35825,35827],{"class":51,"line":1870},[49,35822,32209],{"class":126},[49,35824,60],{"class":59},[49,35826,32159],{"class":66},[49,35828,31555],{"class":55},[49,35830,35831,35833,35835,35837],{"class":51,"line":1875},[49,35832,32220],{"class":126},[49,35834,60],{"class":59},[49,35836,31565],{"class":66},[49,35838,31555],{"class":55},[49,35840,35841,35843,35845,35847],{"class":51,"line":2669},[49,35842,32231],{"class":126},[49,35844,60],{"class":59},[49,35846,616],{"class":66},[49,35848,81],{"class":55},[49,35850,35851,35853],{"class":51,"line":2683},[49,35852,4182],{"class":59},[49,35854,32244],{"class":55},[49,35856,35857],{"class":51,"line":2691},[49,35858,2492],{"emptyLinePlaceholder":151},[49,35860,35861],{"class":51,"line":2696},[49,35862,32253],{"class":283},[49,35864,35865],{"class":51,"line":2702},[49,35866,32258],{"class":283},[49,35868,35869],{"class":51,"line":2708},[49,35870,2492],{"emptyLinePlaceholder":151},[49,35872,35873],{"class":51,"line":2713},[49,35874,32267],{"class":283},[49,35876,35877,35879,35881],{"class":51,"line":8038},[49,35878,32036],{"class":59},[49,35880,32274],{"class":2055},[49,35882,32277],{"class":55},[49,35884,35885,35887,35889,35891,35893,35895,35897,35899,35901],{"class":51,"line":8062},[49,35886,31326],{"class":55},[49,35888,60],{"class":59},[49,35890,30540],{"class":55},[49,35892,31333],{"class":328},[49,35894,1796],{"class":59},[49,35896,31338],{"class":55},[49,35898,1793],{"class":59},[49,35900,32296],{"class":328},[49,35902,81],{"class":55},[49,35904,35905],{"class":51,"line":8067},[49,35906,2492],{"emptyLinePlaceholder":151},[49,35908,35909],{"class":51,"line":8073},[49,35910,2492],{"emptyLinePlaceholder":151},[49,35912,35913],{"class":51,"line":8100},[49,35914,32311],{"class":283},[49,35916,35917],{"class":51,"line":8105},[49,35918,32316],{"class":283},[49,35920,35921],{"class":51,"line":8111},[49,35922,32321],{"class":283},[49,35924,35925,35927,35929,35931,35933,35935,35937],{"class":51,"line":8123},[49,35926,32326],{"class":55},[49,35928,60],{"class":59},[49,35930,32331],{"class":55},[49,35932,32334],{"class":126},[49,35934,60],{"class":59},[49,35936,32339],{"class":66},[49,35938,81],{"class":55},[49,35940,35941],{"class":51,"line":8135},[49,35942,2492],{"emptyLinePlaceholder":151},[49,35944,35945],{"class":51,"line":8147},[49,35946,32350],{"class":283},[49,35948,35949,35951,35953],{"class":51,"line":9806},[49,35950,32355],{"class":55},[49,35952,60],{"class":59},[49,35954,32360],{"class":55},[49,35956,35957],{"class":51,"line":9831},[49,35958,2492],{"emptyLinePlaceholder":151},[49,35960,35961],{"class":51,"line":9854},[49,35962,32369],{"class":283},[49,35964,35965,35967,35969],{"class":51,"line":9878},[49,35966,31378],{"class":55},[49,35968,60],{"class":59},[49,35970,32378],{"class":55},[49,35972,35973],{"class":51,"line":9883},[49,35974,32383],{"class":283},[49,35976,35977],{"class":51,"line":9888},[49,35978,32388],{"class":283},[49,35980,35981],{"class":51,"line":9893},[49,35982,32393],{"class":283},[49,35984,35985,35987,35989],{"class":51,"line":9902},[49,35986,32398],{"class":55},[49,35988,60],{"class":59},[49,35990,32403],{"class":55},[49,35992,35993],{"class":51,"line":9907},[49,35994,2492],{"emptyLinePlaceholder":151},[49,35996,35997],{"class":51,"line":9913},[49,35998,2492],{"emptyLinePlaceholder":151},[49,36000,36001],{"class":51,"line":9934},[49,36002,32416],{"class":283},[49,36004,36005],{"class":51,"line":9940},[49,36006,32421],{"class":283},[49,36008,36009,36011,36013],{"class":51,"line":9954},[49,36010,32426],{"class":55},[49,36012,60],{"class":59},[49,36014,32431],{"class":66},[49,36016,36017],{"class":51,"line":9960},[49,36018,32436],{"class":283},[49,36020,36021,36023,36025],{"class":51,"line":9987},[49,36022,32441],{"class":55},[49,36024,60],{"class":59},[49,36026,32446],{"class":55},[49,36028,36029],{"class":51,"line":9996},[49,36030,32451],{"class":283},[49,36032,36033,36035,36037],{"class":51,"line":10002},[49,36034,32456],{"class":55},[49,36036,60],{"class":59},[49,36038,32446],{"class":55},[49,36040,36041],{"class":51,"line":10010},[49,36042,32465],{"class":283},[49,36044,36045,36047,36049],{"class":51,"line":10015},[49,36046,32470],{"class":55},[49,36048,60],{"class":59},[49,36050,32446],{"class":55},[49,36052,36053],{"class":51,"line":16694},[49,36054,32479],{"class":283},[49,36056,36057,36059,36061],{"class":51,"line":16700},[49,36058,32484],{"class":55},[49,36060,60],{"class":59},[49,36062,32446],{"class":55},[49,36064,36065],{"class":51,"line":16723},[49,36066,2492],{"emptyLinePlaceholder":151},[49,36068,36069],{"class":51,"line":16729},[49,36070,32497],{"class":283},[49,36072,36073,36075,36077],{"class":51,"line":16752},[49,36074,32502],{"class":55},[49,36076,60],{"class":59},[49,36078,32507],{"class":55},[49,36080,36081],{"class":51,"line":16766},[49,36082,2492],{"emptyLinePlaceholder":151},[49,36084,36085],{"class":51,"line":16786},[49,36086,2492],{"emptyLinePlaceholder":151},[49,36088,36089],{"class":51,"line":16792},[49,36090,32520],{"class":283},[49,36092,36093,36095,36097,36099,36101],{"class":51,"line":16803},[49,36094,3293],{"class":59},[49,36096,32527],{"class":55},[49,36098,26134],{"class":59},[49,36100,32532],{"class":66},[49,36102,32535],{"class":55},[49,36104,36105,36107,36109,36111,36113,36115,36117,36119,36121,36123,36125],{"class":51,"line":16826},[49,36106,32540],{"class":66},[49,36108,228],{"class":55},[49,36110,32545],{"class":328},[49,36112,32548],{"class":66},[49,36114,803],{"class":328},[49,36116,32548],{"class":66},[49,36118,474],{"class":328},[49,36120,32557],{"class":55},[49,36122,751],{"class":59},[49,36124,441],{"class":66},[49,36126,30586],{"class":55},[49,36128,36129,36131,36133,36135,36137,36139],{"class":51,"line":16848},[49,36130,32540],{"class":66},[49,36132,228],{"class":55},[49,36134,32572],{"class":328},[49,36136,674],{"class":59},[49,36138,95],{"class":66},[49,36140,81],{"class":55},[49,36142,36143],{"class":51,"line":16853},[49,36144,2492],{"emptyLinePlaceholder":151},[49,36146,36147],{"class":51,"line":16859},[49,36148,32587],{"class":283},[49,36150,36151],{"class":51,"line":16873},[49,36152,32592],{"class":283},[49,36154,36155,36157,36159],{"class":51,"line":16886},[49,36156,32597],{"class":55},[49,36158,60],{"class":59},[49,36160,32431],{"class":66},[49,36162,36163],{"class":51,"line":16891},[49,36164,32606],{"class":283},[49,36166,36167,36169,36171],{"class":51,"line":16905},[49,36168,32611],{"class":55},[49,36170,60],{"class":59},[49,36172,3177],{"class":66},[49,36174,36175],{"class":51,"line":16910},[49,36176,32620],{"class":283},[49,36178,36179,36181,36183],{"class":51,"line":16916},[49,36180,32625],{"class":55},[49,36182,60],{"class":59},[49,36184,32431],{"class":66},[49,36186,36187],{"class":51,"line":16921},[49,36188,32634],{"class":283},[49,36190,36191,36193,36195],{"class":51,"line":16935},[49,36192,32639],{"class":55},[49,36194,60],{"class":59},[49,36196,3177],{"class":66},[49,36198,36199],{"class":51,"line":16940},[49,36200,32648],{"class":283},[49,36202,36203,36205,36207],{"class":51,"line":16945},[49,36204,32653],{"class":55},[49,36206,60],{"class":59},[49,36208,3177],{"class":66},[49,36210,36211],{"class":51,"line":16959},[49,36212,32662],{"class":283},[49,36214,36215,36217,36219],{"class":51,"line":16971},[49,36216,32667],{"class":55},[49,36218,60],{"class":59},[49,36220,3177],{"class":66},[49,36222,36223],{"class":51,"line":16976},[49,36224,32676],{"class":283},[49,36226,36227,36229,36231,36233,36235],{"class":51,"line":16989},[49,36228,3495],{"class":59},[49,36230,31690],{"class":55},[49,36232,26134],{"class":59},[49,36234,31695],{"class":66},[49,36236,32689],{"class":55},[49,36238,36239],{"class":51,"line":16994},[49,36240,32694],{"class":283},[49,36242,36243,36245,36247],{"class":51,"line":16999},[49,36244,32699],{"class":55},[49,36246,60],{"class":59},[49,36248,32704],{"class":55},[49,36250,36251],{"class":51,"line":17004},[49,36252,32709],{"class":283},[49,36254,36255,36257,36259],{"class":51,"line":17017},[49,36256,32714],{"class":55},[49,36258,60],{"class":59},[49,36260,32719],{"class":55},[49,36262,36263],{"class":51,"line":17022},[49,36264,32725],{"class":283},[49,36266,36267],{"class":51,"line":32722},[49,36268,32731],{"class":55},[49,36270,36271],{"class":51,"line":32728},[49,36272,32737],{"class":283},[49,36274,36275],{"class":51,"line":32734},[49,36276,32743],{"class":283},[49,36278,36279,36281,36283],{"class":51,"line":32740},[49,36280,32749],{"class":55},[49,36282,60],{"class":59},[49,36284,32754],{"class":55},[49,36286,36287],{"class":51,"line":32746},[49,36288,32760],{"class":283},[49,36290,36291,36293,36295,36297,36299,36301,36303],{"class":51,"line":32757},[49,36292,32766],{"class":55},[49,36294,60],{"class":59},[49,36296,32771],{"class":55},[49,36298,32774],{"class":126},[49,36300,60],{"class":59},[49,36302,441],{"class":66},[49,36304,81],{"class":55},[49,36306,36307],{"class":51,"line":32763},[49,36308,32786],{"class":283},[49,36310,36311,36313,36315],{"class":51,"line":32783},[49,36312,32792],{"class":55},[49,36314,60],{"class":59},[49,36316,32797],{"class":55},[49,36318,36319],{"class":51,"line":32789},[49,36320,32803],{"class":283},[49,36322,36323],{"class":51,"line":32800},[49,36324,32809],{"class":55},[49,36326,36327],{"class":51,"line":32806},[49,36328,32815],{"class":283},[49,36330,36331],{"class":51,"line":32812},[49,36332,32821],{"class":55},[49,36334,36335],{"class":51,"line":32818},[49,36336,32827],{"class":283},[49,36338,36339],{"class":51,"line":32824},[49,36340,32833],{"class":55},[49,36342,36343],{"class":51,"line":32830},[49,36344,32839],{"class":283},[49,36346,36347,36349,36351,36353,36355,36357,36359],{"class":51,"line":32836},[49,36348,32845],{"class":55},[49,36350,9567],{"class":59},[49,36352,32850],{"class":55},[49,36354,674],{"class":59},[49,36356,32855],{"class":55},[49,36358,415],{"class":66},[49,36360,81],{"class":55},[49,36362,36363],{"class":51,"line":32842},[49,36364,32865],{"class":283},[49,36366,36367,36369,36371,36373,36375],{"class":51,"line":32862},[49,36368,32871],{"class":55},[49,36370,9567],{"class":59},[49,36372,32876],{"class":55},[49,36374,3041],{"class":59},[49,36376,32881],{"class":55},[49,36378,36379],{"class":51,"line":32868},[49,36380,32887],{"class":283},[49,36382,36383,36385,36387,36389,36391],{"class":51,"line":32884},[49,36384,32893],{"class":55},[49,36386,9567],{"class":59},[49,36388,32855],{"class":55},[49,36390,415],{"class":66},[49,36392,81],{"class":55},[49,36394,36395],{"class":51,"line":32890},[49,36396,32907],{"class":283},[49,36398,36399,36401,36403,36405,36407],{"class":51,"line":32904},[49,36400,3495],{"class":59},[49,36402,32915],{"class":55},[49,36404,26134],{"class":59},[49,36406,31695],{"class":66},[49,36408,32922],{"class":55},[49,36410,36411],{"class":51,"line":32910},[49,36412,32928],{"class":283},[49,36414,36415,36417,36419],{"class":51,"line":32925},[49,36416,32699],{"class":55},[49,36418,60],{"class":59},[49,36420,32704],{"class":55},[49,36422,36423],{"class":51,"line":32931},[49,36424,32943],{"class":283},[49,36426,36427,36429,36431],{"class":51,"line":32940},[49,36428,32714],{"class":55},[49,36430,60],{"class":59},[49,36432,32719],{"class":55},[49,36434,36435],{"class":51,"line":32946},[49,36436,32958],{"class":283},[49,36438,36439],{"class":51,"line":32955},[49,36440,32964],{"class":55},[49,36442,36443],{"class":51,"line":32961},[49,36444,36445],{"class":283},"            # 验证时不计算梯度以节省内存\u002F计算\n",[49,36447,36448,36450],{"class":51,"line":32967},[49,36449,32970],{"class":59},[49,36451,32973],{"class":55},[49,36453,36454],{"class":51,"line":32976},[49,36455,32979],{"class":283},[49,36457,36458,36461,36463],{"class":51,"line":32982},[49,36459,36460],{"class":55},"                output",[49,36462,60],{"class":59},[49,36464,32754],{"class":55},[49,36466,36467],{"class":51,"line":32993},[49,36468,32996],{"class":283},[49,36470,36471,36474,36476,36478,36480,36482,36484],{"class":51,"line":32999},[49,36472,36473],{"class":55},"                pre_lab",[49,36475,60],{"class":59},[49,36477,32771],{"class":55},[49,36479,32774],{"class":126},[49,36481,60],{"class":59},[49,36483,441],{"class":66},[49,36485,81],{"class":55},[49,36487,36488],{"class":51,"line":33018},[49,36489,33021],{"class":283},[49,36491,36492,36495,36497],{"class":51,"line":33024},[49,36493,36494],{"class":55},"                val_batch_loss",[49,36496,60],{"class":59},[49,36498,32797],{"class":55},[49,36500,36501],{"class":51,"line":33035},[49,36502,33038],{"class":283},[49,36504,36505,36508,36510,36513,36515,36517,36519],{"class":51,"line":33041},[49,36506,36507],{"class":55},"                val_loss",[49,36509,9567],{"class":59},[49,36511,36512],{"class":55},"val_batch_loss.item()",[49,36514,674],{"class":59},[49,36516,32855],{"class":55},[49,36518,415],{"class":66},[49,36520,81],{"class":55},[49,36522,36523,36526,36528,36530,36532],{"class":51,"line":33061},[49,36524,36525],{"class":55},"                val_corrects",[49,36527,9567],{"class":59},[49,36529,32876],{"class":55},[49,36531,3041],{"class":59},[49,36533,32881],{"class":55},[49,36535,36536],{"class":51,"line":33077},[49,36537,36538],{"class":283},"            # 当前用于验证的样本数量\n",[49,36540,36541,36544,36546,36548,36550],{"class":51,"line":33083},[49,36542,36543],{"class":55},"            val_num",[49,36545,9567],{"class":59},[49,36547,32855],{"class":55},[49,36549,415],{"class":66},[49,36551,81],{"class":55},[49,36553,36554],{"class":51,"line":33097},[49,36555,33100],{"class":283},[49,36557,36558],{"class":51,"line":33103},[49,36559,33106],{"class":283},[49,36561,36562,36564,36566],{"class":51,"line":33109},[49,36563,33112],{"class":55},[49,36565,803],{"class":59},[49,36567,33117],{"class":55},[49,36569,36570],{"class":51,"line":33120},[49,36571,33123],{"class":283},[49,36573,36574],{"class":51,"line":33126},[49,36575,33129],{"class":283},[49,36577,36578,36580,36582],{"class":51,"line":33132},[49,36579,33135],{"class":55},[49,36581,803],{"class":59},[49,36583,33117],{"class":55},[49,36585,36586],{"class":51,"line":33142},[49,36587,33145],{"class":283},[49,36589,36590,36592,36594],{"class":51,"line":33148},[49,36591,33151],{"class":55},[49,36593,803],{"class":59},[49,36595,33156],{"class":55},[49,36597,36598],{"class":51,"line":33159},[49,36599,33162],{"class":283},[49,36601,36602,36604,36606],{"class":51,"line":33165},[49,36603,33168],{"class":55},[49,36605,803],{"class":59},[49,36607,33156],{"class":55},[49,36609,36610],{"class":51,"line":33175},[49,36611,2492],{"emptyLinePlaceholder":151},[49,36613,36614],{"class":51,"line":33180},[49,36615,33183],{"class":283},[49,36617,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636,36638,36640,36642,36644,36646,36648,36650,36652,36654,36656],{"class":51,"line":33186},[49,36619,32540],{"class":66},[49,36621,228],{"class":55},[49,36623,3684],{"class":328},[49,36625,32548],{"class":66},[49,36627,33197],{"class":328},[49,36629,1115],{"class":66},[49,36631,33202],{"class":59},[49,36633,1165],{"class":66},[49,36635,33207],{"class":328},[49,36637,1115],{"class":66},[49,36639,33202],{"class":59},[49,36641,1165],{"class":66},[49,36643,3684],{"class":328},[49,36645,33218],{"class":55},[49,36647,751],{"class":59},[49,36649,441],{"class":66},[49,36651,33225],{"class":55},[49,36653,751],{"class":59},[49,36655,441],{"class":66},[49,36657,33232],{"class":55},[49,36659,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698],{"class":51,"line":33235},[49,36661,32540],{"class":66},[49,36663,228],{"class":55},[49,36665,3684],{"class":328},[49,36667,32548],{"class":66},[49,36669,33246],{"class":328},[49,36671,1115],{"class":66},[49,36673,33202],{"class":59},[49,36675,1165],{"class":66},[49,36677,33255],{"class":328},[49,36679,1115],{"class":66},[49,36681,33202],{"class":59},[49,36683,1165],{"class":66},[49,36685,3684],{"class":328},[49,36687,33266],{"class":55},[49,36689,751],{"class":59},[49,36691,441],{"class":66},[49,36693,33273],{"class":55},[49,36695,751],{"class":59},[49,36697,441],{"class":66},[49,36699,33232],{"class":55},[49,36701,36702],{"class":51,"line":33282},[49,36703,2492],{"emptyLinePlaceholder":151},[49,36705,36706],{"class":51,"line":33287},[49,36707,33290],{"class":283},[49,36709,36710,36712,36714,36716,36718,36720,36722],{"class":51,"line":33293},[49,36711,2589],{"class":59},[49,36713,33298],{"class":55},[49,36715,751],{"class":59},[49,36717,441],{"class":66},[49,36719,1159],{"class":55},[49,36721,1179],{"class":59},[49,36723,33309],{"class":55},[49,36725,36726],{"class":51,"line":33312},[49,36727,33315],{"class":283},[49,36729,36730,36732,36734,36736,36738,36740,36742],{"class":51,"line":33318},[49,36731,33321],{"class":55},[49,36733,266],{"class":66},[49,36735,60],{"class":59},[49,36737,33328],{"class":55},[49,36739,751],{"class":59},[49,36741,441],{"class":66},[49,36743,33335],{"class":55},[49,36745,36746],{"class":51,"line":33338},[49,36747,33341],{"class":283},[49,36749,36750],{"class":51,"line":33344},[49,36751,33347],{"class":283},[49,36753,36754,36756,36758],{"class":51,"line":33350},[49,36755,33353],{"class":55},[49,36757,60],{"class":59},[49,36759,32403],{"class":55},[49,36761,36762],{"class":51,"line":33360},[49,36763,2492],{"emptyLinePlaceholder":151},[49,36765,36766],{"class":51,"line":33365},[49,36767,33368],{"class":283},[49,36769,36770,36772,36774,36776,36778],{"class":51,"line":33371},[49,36771,33374],{"class":55},[49,36773,60],{"class":59},[49,36775,33379],{"class":55},[49,36777,751],{"class":59},[49,36779,33384],{"class":55},[49,36781,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808,36810,36812,36814,36816],{"class":51,"line":33387},[49,36783,32540],{"class":66},[49,36785,228],{"class":55},[49,36787,33394],{"class":328},[49,36789,1115],{"class":66},[49,36791,33399],{"class":59},[49,36793,1165],{"class":66},[49,36795,763],{"class":328},[49,36797,1115],{"class":66},[49,36799,33399],{"class":59},[49,36801,1165],{"class":66},[49,36803,33412],{"class":328},[49,36805,33415],{"class":55},[49,36807,33418],{"class":59},[49,36809,1126],{"class":66},[49,36811,33423],{"class":55},[49,36813,550],{"class":59},[49,36815,1126],{"class":66},[49,36817,30586],{"class":55},[49,36819,36820],{"class":51,"line":33432},[49,36821,36822],{"class":283},"    # 选择最优参数并保存\n",[49,36824,36825],{"class":51,"line":33438},[49,36826,36827],{"class":283},"    # 保存最佳模型权重字典\n",[49,36829,36830,36833,36835],{"class":51,"line":33444},[49,36831,36832],{"class":55},"    torch.save(best_model_wts,",[49,36834,33456],{"class":328},[49,36836,81],{"class":55},[49,36838,36839],{"class":51,"line":33450},[49,36840,33476],{"class":283},[49,36842,36843,36845,36847,36849,36851,36853],{"class":51,"line":33461},[49,36844,33482],{"class":55},[49,36846,60],{"class":59},[49,36848,33487],{"class":55},[49,36850,33490],{"class":126},[49,36852,60],{"class":59},[49,36854,1638],{"class":55},[49,36856,36857,36859,36861,36863],{"class":51,"line":33467},[49,36858,33500],{"class":328},[49,36860,1078],{"class":55},[49,36862,33505],{"class":66},[49,36864,33508],{"class":55},[49,36866,36867,36869],{"class":51,"line":33473},[49,36868,33514],{"class":328},[49,36870,33517],{"class":55},[49,36872,36873,36875],{"class":51,"line":33479},[49,36874,33523],{"class":328},[49,36876,33526],{"class":55},[49,36878,36879,36881],{"class":51,"line":33497},[49,36880,33532],{"class":328},[49,36882,33535],{"class":55},[49,36884,36885,36887],{"class":51,"line":33511},[49,36886,33541],{"class":328},[49,36888,33544],{"class":55},[49,36890,36891],{"class":51,"line":33520},[49,36892,33550],{"class":55},[49,36894,36895],{"class":51,"line":33529},[49,36896,33556],{"class":283},[49,36898,36899,36901],{"class":51,"line":33538},[49,36900,4182],{"class":59},[49,36902,33564],{"class":55},[49,36904,36905],{"class":51,"line":33547},[49,36906,2492],{"emptyLinePlaceholder":151},[49,36908,36909],{"class":51,"line":33553},[49,36910,33575],{"class":283},[49,36912,36913,36915,36917],{"class":51,"line":33559},[49,36914,32036],{"class":59},[49,36916,33583],{"class":2055},[49,36918,33586],{"class":55},[49,36920,36921],{"class":51,"line":33567},[49,36922,33592],{"class":283},[49,36924,36925,36927,36929,36931,36933,36935,36937,36939],{"class":51,"line":33572},[49,36926,33598],{"class":55},[49,36928,31782],{"class":126},[49,36930,60],{"class":59},[49,36932,228],{"class":55},[49,36934,717],{"class":66},[49,36936,76],{"class":55},[49,36938,515],{"class":66},[49,36940,30586],{"class":55},[49,36942,36943],{"class":51,"line":33578},[49,36944,33618],{"class":283},[49,36946,36947],{"class":51,"line":33589},[49,36948,33624],{"class":283},[49,36950,36951],{"class":51,"line":33595},[49,36952,33630],{"class":283},[49,36954,36955,36957,36959,36961,36963,36965,36967],{"class":51,"line":33615},[49,36956,31816],{"class":55},[49,36958,441],{"class":66},[49,36960,76],{"class":55},[49,36962,301],{"class":66},[49,36964,76],{"class":55},[49,36966,441],{"class":66},[49,36968,81],{"class":55},[49,36970,36971],{"class":51,"line":33621},[49,36972,33653],{"class":283},[49,36974,36975],{"class":51,"line":33627},[49,36976,33659],{"class":283},[49,36978,36979],{"class":51,"line":33633},[49,36980,33665],{"class":283},[49,36982,36983],{"class":51,"line":33650},[49,36984,33671],{"class":283},[49,36986,36987],{"class":51,"line":33656},[49,36988,33677],{"class":283},[49,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":51,"line":33662},[49,36992,33683],{"class":55},[49,36994,33686],{"class":328},[49,36996,33689],{"class":55},[49,36998,33692],{"class":328},[49,37000,76],{"class":55},[49,37002,33697],{"class":126},[49,37004,60],{"class":59},[49,37006,33702],{"class":328},[49,37008,81],{"class":55},[49,37010,37011,37013,37015,37017,37019,37021,37023,37025,37027],{"class":51,"line":33668},[49,37012,33683],{"class":55},[49,37014,33686],{"class":328},[49,37016,33714],{"class":55},[49,37018,33717],{"class":328},[49,37020,76],{"class":55},[49,37022,33697],{"class":126},[49,37024,60],{"class":59},[49,37026,33726],{"class":328},[49,37028,81],{"class":55},[49,37030,37031],{"class":51,"line":33674},[49,37032,33734],{"class":283},[49,37034,37035],{"class":51,"line":33680},[49,37036,33740],{"class":55},[49,37038,37039],{"class":51,"line":33707},[49,37040,33746],{"class":283},[49,37042,37043,37045,37047],{"class":51,"line":33731},[49,37044,33752],{"class":55},[49,37046,33755],{"class":328},[49,37048,81],{"class":55},[49,37050,37051,37053,37055],{"class":51,"line":33737},[49,37052,33763],{"class":55},[49,37054,33766],{"class":328},[49,37056,81],{"class":55},[49,37058,37059],{"class":51,"line":33743},[49,37060,33774],{"class":283},[49,37062,37063,37065,37067,37069,37071,37073,37075],{"class":51,"line":33749},[49,37064,31816],{"class":55},[49,37066,441],{"class":66},[49,37068,76],{"class":55},[49,37070,301],{"class":66},[49,37072,76],{"class":55},[49,37074,301],{"class":66},[49,37076,81],{"class":55},[49,37078,37079,37081,37083,37085,37087,37089,37091,37093,37095],{"class":51,"line":33760},[49,37080,33683],{"class":55},[49,37082,33686],{"class":328},[49,37084,33801],{"class":55},[49,37086,33692],{"class":328},[49,37088,76],{"class":55},[49,37090,33697],{"class":126},[49,37092,60],{"class":59},[49,37094,33812],{"class":328},[49,37096,81],{"class":55},[49,37098,37099,37101,37103,37105,37107,37109,37111,37113,37115],{"class":51,"line":33771},[49,37100,33683],{"class":55},[49,37102,33686],{"class":328},[49,37104,33824],{"class":55},[49,37106,33717],{"class":328},[49,37108,76],{"class":55},[49,37110,33697],{"class":126},[49,37112,60],{"class":59},[49,37114,33835],{"class":328},[49,37116,81],{"class":55},[49,37118,37119],{"class":51,"line":33777},[49,37120,33843],{"class":283},[49,37122,37123],{"class":51,"line":33794},[49,37124,33740],{"class":55},[49,37126,37127,37129,37131],{"class":51,"line":33817},[49,37128,33752],{"class":55},[49,37130,33686],{"class":328},[49,37132,81],{"class":55},[49,37134,37135,37137,37139],{"class":51,"line":33840},[49,37136,33763],{"class":55},[49,37138,33865],{"class":328},[49,37140,81],{"class":55},[49,37142,37143],{"class":51,"line":33846},[49,37144,33873],{"class":55},[49,37146,37147],{"class":51,"line":33851},[49,37148,2492],{"emptyLinePlaceholder":151},[49,37150,37151],{"class":51,"line":33860},[49,37152,33884],{"class":283},[49,37154,37155,37157,37159,37161,37163],{"class":51,"line":33870},[49,37156,1623],{"class":59},[49,37158,31309],{"class":66},[49,37160,3041],{"class":59},[49,37162,31314],{"class":328},[49,37164,3831],{"class":55},[49,37166,37167],{"class":51,"line":33876},[49,37168,33903],{"class":283},[49,37170,37171,37174,37176],{"class":51,"line":33881},[49,37172,37173],{"class":55},"    AlexNet",[49,37175,60],{"class":59},[49,37177,37178],{"class":55},"AlexNet()\n",[49,37180,37181,37183,37185],{"class":51,"line":33887},[49,37182,33920],{"class":55},[49,37184,60],{"class":59},[49,37186,33925],{"class":55},[49,37188,37189,37191,37193,37196,37198,37200,37202],{"class":51,"line":33900},[49,37190,33482],{"class":55},[49,37192,60],{"class":59},[49,37194,37195],{"class":55},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[49,37197,33938],{"class":126},[49,37199,60],{"class":59},[49,37201,919],{"class":66},[49,37203,81],{"class":55},[49,37205,37206],{"class":51,"line":33906},[49,37207,33950],{"class":55},[178,37209,37210],{"start":109},[181,37211,33963],{},[39,37213,37215],{"className":41,"code":37214,"language":43,"meta":44,"style":44},"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",[46,37216,37217,37223,37233,37243,37253,37257,37267,37277,37288,37292,37296,37300,37308,37324,37334,37350,37360,37374,37378,37388,37398,37408,37414,37418,37422,37430,37434,37450,37458,37462,37466,37474,37482,37486,37490,37494,37498,37504,37508,37518,37526,37534,37538,37542,37546,37554,37558,37574,37578,37582,37586,37598,37602,37614,37618,37622,37634,37638,37648,37652,37656,37668,37672,37680,37684,37688,37696,37700,37708,37712,37716,37720,37724,37728,37744,37752,37756,37760,37808,37814,37818,37828,37836,37844,37848,37852,37856,37860,37868,37872,37888,37892,37900,37908],{"__ignoreMap":44},[49,37218,37219,37221],{"class":51,"line":52},[49,37220,30481],{"class":59},[49,37222,30484],{"class":55},[49,37224,37225,37227,37229,37231],{"class":51,"line":84},[49,37226,30481],{"class":59},[49,37228,31504],{"class":55},[49,37230,31472],{"class":59},[49,37232,31509],{"class":55},[49,37234,37235,37237,37239,37241],{"class":51,"line":109},[49,37236,30826],{"class":59},[49,37238,33991],{"class":55},[49,37240,30481],{"class":59},[49,37242,33996],{"class":55},[49,37244,37245,37247,37249,37251],{"class":51,"line":120},[49,37246,30826],{"class":59},[49,37248,31487],{"class":55},[49,37250,30481],{"class":59},[49,37252,31492],{"class":55},[49,37254,37255],{"class":51,"line":135},[49,37256,34011],{"class":283},[49,37258,37259,37261,37263,37265],{"class":51,"line":1306},[49,37260,30826],{"class":59},[49,37262,31457],{"class":55},[49,37264,30481],{"class":59},[49,37266,31462],{"class":55},[49,37268,37269,37271,37273,37275],{"class":51,"line":1312},[49,37270,30826],{"class":59},[49,37272,32003],{"class":55},[49,37274,30481],{"class":59},[49,37276,35646],{"class":55},[49,37278,37279,37281,37284,37286],{"class":51,"line":1403},[49,37280,30826],{"class":59},[49,37282,37283],{"class":55}," 练习.AlexNet.model ",[49,37285,30481],{"class":59},[49,37287,35646],{"class":55},[49,37289,37290],{"class":51,"line":1409},[49,37291,2492],{"emptyLinePlaceholder":151},[49,37293,37294],{"class":51,"line":1421},[49,37295,2492],{"emptyLinePlaceholder":151},[49,37297,37298],{"class":51,"line":1704},[49,37299,34040],{"class":283},[49,37301,37302,37304,37306],{"class":51,"line":1709},[49,37303,32036],{"class":59},[49,37305,34047],{"class":2055},[49,37307,32042],{"class":55},[49,37309,37310,37312,37314,37316,37318,37320,37322],{"class":51,"line":1715},[49,37311,34054],{"class":55},[49,37313,60],{"class":59},[49,37315,31544],{"class":55},[49,37317,31547],{"class":126},[49,37319,60],{"class":59},[49,37321,31552],{"class":328},[49,37323,31555],{"class":55},[49,37325,37326,37328,37330,37332],{"class":51,"line":1720},[49,37327,34071],{"class":126},[49,37329,60],{"class":59},[49,37331,34076],{"class":66},[49,37333,31555],{"class":55},[49,37335,37336,37338,37340,37342,37344,37346,37348],{"class":51,"line":1734},[49,37337,34083],{"class":126},[49,37339,60],{"class":59},[49,37341,31582],{"class":55},[49,37343,31585],{"class":126},[49,37345,60],{"class":59},[49,37347,35538],{"class":66},[49,37349,31593],{"class":55},[49,37351,37352,37354,37356,37358],{"class":51,"line":1739},[49,37353,34100],{"class":126},[49,37355,60],{"class":59},[49,37357,31565],{"class":66},[49,37359,81],{"class":55},[49,37361,37362,37364,37366,37368,37370,37372],{"class":51,"line":1745},[49,37363,34111],{"class":55},[49,37365,60],{"class":59},[49,37367,31623],{"class":55},[49,37369,31626],{"class":126},[49,37371,60],{"class":59},[49,37373,34122],{"class":55},[49,37375,37376],{"class":51,"line":1766},[49,37377,34127],{"class":283},[49,37379,37380,37382,37384,37386],{"class":51,"line":1771},[49,37381,34132],{"class":126},[49,37383,60],{"class":59},[49,37385,441],{"class":66},[49,37387,31555],{"class":55},[49,37389,37390,37392,37394,37396],{"class":51,"line":1785},[49,37391,34143],{"class":126},[49,37393,60],{"class":59},[49,37395,31565],{"class":66},[49,37397,31555],{"class":55},[49,37399,37400,37402,37404,37406],{"class":51,"line":1790},[49,37401,34154],{"class":126},[49,37403,60],{"class":59},[49,37405,415],{"class":66},[49,37407,81],{"class":55},[49,37409,37410,37412],{"class":51,"line":1819},[49,37411,4182],{"class":59},[49,37413,34167],{"class":55},[49,37415,37416],{"class":51,"line":1824},[49,37417,2492],{"emptyLinePlaceholder":151},[49,37419,37420],{"class":51,"line":1841},[49,37421,34176],{"class":283},[49,37423,37424,37426,37428],{"class":51,"line":1846},[49,37425,32036],{"class":59},[49,37427,34183],{"class":2055},[49,37429,34186],{"class":55},[49,37431,37432],{"class":51,"line":1851},[49,37433,34191],{"class":283},[49,37435,37436,37438,37440,37442,37444,37446,37448],{"class":51,"line":1856},[49,37437,31326],{"class":55},[49,37439,60],{"class":59},[49,37441,31333],{"class":328},[49,37443,1796],{"class":59},[49,37445,31338],{"class":55},[49,37447,1793],{"class":59},[49,37449,34208],{"class":328},[49,37451,37452,37454,37456],{"class":51,"line":1870},[49,37453,31378],{"class":55},[49,37455,60],{"class":59},[49,37457,32378],{"class":55},[49,37459,37460],{"class":51,"line":1875},[49,37461,2492],{"emptyLinePlaceholder":151},[49,37463,37464],{"class":51,"line":2669},[49,37465,34225],{"class":283},[49,37467,37468,37470,37472],{"class":51,"line":2683},[49,37469,34230],{"class":55},[49,37471,60],{"class":59},[49,37473,32431],{"class":66},[49,37475,37476,37478,37480],{"class":51,"line":2691},[49,37477,34239],{"class":55},[49,37479,60],{"class":59},[49,37481,3177],{"class":66},[49,37483,37484],{"class":51,"line":2696},[49,37485,2492],{"emptyLinePlaceholder":151},[49,37487,37488],{"class":51,"line":2702},[49,37489,34252],{"class":283},[49,37491,37492],{"class":51,"line":2708},[49,37493,34257],{"class":283},[49,37495,37496],{"class":51,"line":2713},[49,37497,34262],{"class":283},[49,37499,37500,37502],{"class":51,"line":8038},[49,37501,34267],{"class":59},[49,37503,32973],{"class":55},[49,37505,37506],{"class":51,"line":8062},[49,37507,34274],{"class":283},[49,37509,37510,37512,37514,37516],{"class":51,"line":8067},[49,37511,3495],{"class":59},[49,37513,34281],{"class":55},[49,37515,26134],{"class":59},[49,37517,34286],{"class":55},[49,37519,37520,37522,37524],{"class":51,"line":8073},[49,37521,34291],{"class":55},[49,37523,60],{"class":59},[49,37525,34296],{"class":55},[49,37527,37528,37530,37532],{"class":51,"line":8100},[49,37529,34301],{"class":55},[49,37531,60],{"class":59},[49,37533,34306],{"class":55},[49,37535,37536],{"class":51,"line":8105},[49,37537,34311],{"class":283},[49,37539,37540],{"class":51,"line":8111},[49,37541,32964],{"class":55},[49,37543,37544],{"class":51,"line":8123},[49,37545,34320],{"class":283},[49,37547,37548,37550,37552],{"class":51,"line":8135},[49,37549,32749],{"class":55},[49,37551,60],{"class":59},[49,37553,34329],{"class":55},[49,37555,37556],{"class":51,"line":8147},[49,37557,34334],{"class":283},[49,37559,37560,37562,37564,37566,37568,37570,37572],{"class":51,"line":9806},[49,37561,32766],{"class":55},[49,37563,60],{"class":59},[49,37565,32771],{"class":55},[49,37567,32774],{"class":126},[49,37569,60],{"class":59},[49,37571,441],{"class":66},[49,37573,81],{"class":55},[49,37575,37576],{"class":51,"line":9831},[49,37577,34355],{"class":283},[49,37579,37580],{"class":51,"line":9854},[49,37581,34360],{"class":283},[49,37583,37584],{"class":51,"line":9878},[49,37585,34365],{"class":283},[49,37587,37588,37590,37592,37594,37596],{"class":51,"line":9883},[49,37589,34370],{"class":55},[49,37591,9567],{"class":59},[49,37593,32876],{"class":55},[49,37595,3041],{"class":59},[49,37597,34379],{"class":55},[49,37599,37600],{"class":51,"line":9888},[49,37601,34384],{"class":283},[49,37603,37604,37606,37608,37610,37612],{"class":51,"line":9893},[49,37605,34389],{"class":55},[49,37607,9567],{"class":59},[49,37609,34394],{"class":55},[49,37611,415],{"class":66},[49,37613,81],{"class":55},[49,37615,37616],{"class":51,"line":9902},[49,37617,2492],{"emptyLinePlaceholder":151},[49,37619,37620],{"class":51,"line":9907},[49,37621,34407],{"class":283},[49,37623,37624,37626,37628,37630,37632],{"class":51,"line":9913},[49,37625,34412],{"class":55},[49,37627,60],{"class":59},[49,37629,34417],{"class":55},[49,37631,803],{"class":59},[49,37633,34422],{"class":55},[49,37635,37636],{"class":51,"line":9934},[49,37637,34427],{"class":283},[49,37639,37640,37642,37644,37646],{"class":51,"line":9940},[49,37641,32540],{"class":66},[49,37643,228],{"class":55},[49,37645,34436],{"class":328},[49,37647,34439],{"class":55},[49,37649,37650],{"class":51,"line":9954},[49,37651,2492],{"emptyLinePlaceholder":151},[49,37653,37654],{"class":51,"line":9960},[49,37655,34448],{"class":283},[49,37657,37658,37660,37662,37664,37666],{"class":51,"line":9987},[49,37659,1623],{"class":59},[49,37661,31309],{"class":66},[49,37663,3041],{"class":59},[49,37665,31314],{"class":328},[49,37667,3831],{"class":55},[49,37669,37670],{"class":51,"line":9996},[49,37671,34465],{"class":283},[49,37673,37674,37676,37678],{"class":51,"line":10002},[49,37675,31378],{"class":55},[49,37677,60],{"class":59},[49,37679,37178],{"class":55},[49,37681,37682],{"class":51,"line":10010},[49,37683,34478],{"class":283},[49,37685,37686],{"class":51,"line":10015},[49,37687,34483],{"class":283},[49,37689,37690,37692,37694],{"class":51,"line":16694},[49,37691,34488],{"class":55},[49,37693,34491],{"class":328},[49,37695,30586],{"class":55},[49,37697,37698],{"class":51,"line":16700},[49,37699,34498],{"class":283},[49,37701,37702,37704,37706],{"class":51,"line":16723},[49,37703,34111],{"class":55},[49,37705,60],{"class":59},[49,37707,34507],{"class":55},[49,37709,37710],{"class":51,"line":16729},[49,37711,34512],{"class":283},[49,37713,37714],{"class":51,"line":16752},[49,37715,34517],{"class":55},[49,37717,37718],{"class":51,"line":16766},[49,37719,2492],{"emptyLinePlaceholder":151},[49,37721,37722],{"class":51,"line":16786},[49,37723,34526],{"class":283},[49,37725,37726],{"class":51,"line":16792},[49,37727,34531],{"class":283},[49,37729,37730,37732,37734,37736,37738,37740,37742],{"class":51,"line":16803},[49,37731,31326],{"class":55},[49,37733,60],{"class":59},[49,37735,31333],{"class":328},[49,37737,1796],{"class":59},[49,37739,31338],{"class":55},[49,37741,1793],{"class":59},[49,37743,34208],{"class":328},[49,37745,37746,37748,37750],{"class":51,"line":16826},[49,37747,31378],{"class":55},[49,37749,60],{"class":59},[49,37751,32378],{"class":55},[49,37753,37754],{"class":51,"line":16848},[49,37755,34560],{"class":283},[49,37757,37758],{"class":51,"line":16853},[49,37759,34565],{"class":283},[49,37761,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784,37786,37788,37790,37792,37794,37796,37798,37800,37802,37804,37806],{"class":51,"line":16859},[49,37763,34570],{"class":55},[49,37765,60],{"class":59},[49,37767,1109],{"class":55},[49,37769,34577],{"class":328},[49,37771,76],{"class":55},[49,37773,34582],{"class":328},[49,37775,76],{"class":55},[49,37777,34587],{"class":328},[49,37779,76],{"class":55},[49,37781,34592],{"class":328},[49,37783,76],{"class":55},[49,37785,34597],{"class":328},[49,37787,76],{"class":55},[49,37789,34602],{"class":328},[49,37791,76],{"class":55},[49,37793,34607],{"class":328},[49,37795,76],{"class":55},[49,37797,34612],{"class":328},[49,37799,76],{"class":55},[49,37801,34617],{"class":328},[49,37803,76],{"class":55},[49,37805,34622],{"class":328},[49,37807,33335],{"class":55},[49,37809,37810,37812],{"class":51,"line":16873},[49,37811,34267],{"class":59},[49,37813,32973],{"class":55},[49,37815,37816],{"class":51,"line":16886},[49,37817,34635],{"class":283},[49,37819,37820,37822,37824,37826],{"class":51,"line":16891},[49,37821,3495],{"class":59},[49,37823,34642],{"class":55},[49,37825,26134],{"class":59},[49,37827,34286],{"class":55},[49,37829,37830,37832,37834],{"class":51,"line":16905},[49,37831,32699],{"class":55},[49,37833,60],{"class":59},[49,37835,32704],{"class":55},[49,37837,37838,37840,37842],{"class":51,"line":16910},[49,37839,32714],{"class":55},[49,37841,60],{"class":59},[49,37843,32719],{"class":55},[49,37845,37846],{"class":51,"line":16916},[49,37847,2492],{"emptyLinePlaceholder":151},[49,37849,37850],{"class":51,"line":16921},[49,37851,34671],{"class":283},[49,37853,37854],{"class":51,"line":16935},[49,37855,32964],{"class":55},[49,37857,37858],{"class":51,"line":16940},[49,37859,34680],{"class":283},[49,37861,37862,37864,37866],{"class":51,"line":16945},[49,37863,32749],{"class":55},[49,37865,60],{"class":59},[49,37867,32754],{"class":55},[49,37869,37870],{"class":51,"line":16959},[49,37871,34693],{"class":283},[49,37873,37874,37876,37878,37880,37882,37884,37886],{"class":51,"line":16971},[49,37875,32766],{"class":55},[49,37877,60],{"class":59},[49,37879,32771],{"class":55},[49,37881,32774],{"class":126},[49,37883,60],{"class":59},[49,37885,441],{"class":66},[49,37887,81],{"class":55},[49,37889,37890],{"class":51,"line":16976},[49,37891,34714],{"class":283},[49,37893,37894,37896,37898],{"class":51,"line":16989},[49,37895,34719],{"class":55},[49,37897,60],{"class":59},[49,37899,34724],{"class":55},[49,37901,37902,37904,37906],{"class":51,"line":16994},[49,37903,34729],{"class":55},[49,37905,60],{"class":59},[49,37907,34734],{"class":55},[49,37909,37910,37912,37914,37916,37918,37920,37922,37924],{"class":51,"line":16999},[49,37911,34739],{"class":66},[49,37913,228],{"class":55},[49,37915,34744],{"class":328},[49,37917,34747],{"class":55},[49,37919,34750],{"class":328},[49,37921,76],{"class":55},[49,37923,34755],{"class":328},[49,37925,34758],{"class":55},[195,37927,37929],{"id":37928},"_22vgg","2.2.VGG",[22088,37931,37933],{"id":37932},"_221原理","2.2.1.原理",[14,37935,37936],{},[1554,37937],{"alt":44,"src":37938},"\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,37940,37941],{},[1554,37942],{"alt":44,"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-016.png",[14,37945,37946],{},[1554,37947],{"alt":44,"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-017.png",[14,37950,37951],{},"参数详细描述：",[14,37953,37954],{},[1554,37955],{"alt":44,"src":37956},"\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,37958,37959],{},[1554,37960],{"alt":44,"src":37961},"\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,37963,37964],{},[1554,37965],{"alt":44,"src":37966},"\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,37968,37969],{},[1554,37970],{"alt":44,"src":37971},"\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,37973,37974],{},[1554,37975],{"alt":44,"src":37976},"\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",[22088,37978,37980],{"id":37979},"_222代码实现","2.2.2.代码实现",[178,37982,37983],{},[181,37984,37985],{},"网络搭建",[39,37987,37989],{"className":41,"code":37988,"language":43,"meta":44,"style":44},"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",[46,37990,37991,37997,38009,38019,38029,38033,38050,38058,38077,38082,38087,38099,38137,38142,38178,38182,38211,38216,38221,38232,38268,38272,38308,38312,38340,38344,38349,38360,38396,38400,38436,38440,38476,38480,38508,38512,38517,38528,38565,38569,38605,38609,38645,38649,38677,38681,38686,38697,38733,38737,38773,38777,38813,38817,38845,38849,38854,38865,38870,38875,38880,38901,38905,38917,38921,38933,38937,38941,38946,38951,38966,38971,38981,38986,39001,39006,39025,39030,39039,39044,39054,39059,39064,39078,39083,39097,39105,39109,39113,39121,39132,39143,39154,39165,39176,39187,39193,39197,39202,39215,39235,39241,39250],{"__ignoreMap":44},[49,37992,37993,37995],{"class":51,"line":52},[49,37994,30481],{"class":59},[49,37996,30484],{"class":55},[49,37998,37999,38001,38004,38006],{"class":51,"line":84},[49,38000,30826],{"class":59},[49,38002,38003],{"class":55}," sympy.core.sympify ",[49,38005,30481],{"class":59},[49,38007,38008],{"class":55}," kernS\n",[49,38010,38011,38013,38015,38017],{"class":51,"line":109},[49,38012,30826],{"class":59},[49,38014,30829],{"class":55},[49,38016,30481],{"class":59},[49,38018,30834],{"class":55},[49,38020,38021,38023,38025,38027],{"class":51,"line":120},[49,38022,30826],{"class":59},[49,38024,30846],{"class":55},[49,38026,30481],{"class":59},[49,38028,30851],{"class":55},[49,38030,38031],{"class":51,"line":135},[49,38032,2492],{"emptyLinePlaceholder":151},[49,38034,38035,38037,38040,38042,38044,38046,38048],{"class":51,"line":1306},[49,38036,14784],{"class":59},[49,38038,38039],{"class":2055}," VGG16",[49,38041,228],{"class":55},[49,38043,30867],{"class":2055},[49,38045,777],{"class":55},[49,38047,30872],{"class":2055},[49,38049,30875],{"class":55},[49,38051,38052,38054,38056],{"class":51,"line":1312},[49,38053,30890],{"class":59},[49,38055,30893],{"class":66},[49,38057,30896],{"class":55},[49,38059,38060,38062,38064,38067,38069,38071,38073,38075],{"class":51,"line":1403},[49,38061,30906],{"class":66},[49,38063,228],{"class":55},[49,38065,38066],{"class":66},"VGG16",[49,38068,12525],{"class":55},[49,38070,30912],{"class":66},[49,38072,30915],{"class":55},[49,38074,30918],{"class":66},[49,38076,2068],{"class":55},[49,38078,38079],{"class":51,"line":1409},[49,38080,38081],{"class":283},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[49,38083,38084],{"class":51,"line":1421},[49,38085,38086],{"class":283},"        # 这里用的是灰度图\n",[49,38088,38089,38091,38094,38096],{"class":51,"line":1704},[49,38090,30934],{"class":66},[49,38092,38093],{"class":55},".block1",[49,38095,60],{"class":59},[49,38097,38098],{"class":55},"nn.Sequential(\n",[49,38100,38101,38104,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126,38128,38130,38132,38134],{"class":51,"line":1709},[49,38102,38103],{"class":55},"            nn.Conv2d(",[49,38105,30945],{"class":126},[49,38107,60],{"class":59},[49,38109,441],{"class":66},[49,38111,76],{"class":55},[49,38113,30954],{"class":126},[49,38115,60],{"class":59},[49,38117,427],{"class":66},[49,38119,76],{"class":55},[49,38121,30963],{"class":126},[49,38123,60],{"class":59},[49,38125,73],{"class":66},[49,38127,76],{"class":55},[49,38129,30972],{"class":126},[49,38131,60],{"class":59},[49,38133,441],{"class":66},[49,38135,38136],{"class":55},"),\n",[49,38138,38139],{"class":51,"line":1715},[49,38140,38141],{"class":55},"            nn.ReLU(),\n",[49,38143,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176],{"class":51,"line":1720},[49,38145,38103],{"class":55},[49,38147,30945],{"class":126},[49,38149,60],{"class":59},[49,38151,427],{"class":66},[49,38153,76],{"class":55},[49,38155,30954],{"class":126},[49,38157,60],{"class":59},[49,38159,427],{"class":66},[49,38161,76],{"class":55},[49,38163,30963],{"class":126},[49,38165,60],{"class":59},[49,38167,73],{"class":66},[49,38169,76],{"class":55},[49,38171,30972],{"class":126},[49,38173,60],{"class":59},[49,38175,441],{"class":66},[49,38177,38136],{"class":55},[49,38179,38180],{"class":51,"line":1734},[49,38181,38141],{"class":55},[49,38183,38184,38187,38189,38191,38193,38195,38197,38199,38201,38203,38205,38207,38209],{"class":51,"line":1739},[49,38185,38186],{"class":55},"            nn.MaxPool2d(",[49,38188,30963],{"class":126},[49,38190,60],{"class":59},[49,38192,301],{"class":66},[49,38194,76],{"class":55},[49,38196,31018],{"class":126},[49,38198,60],{"class":59},[49,38200,301],{"class":66},[49,38202,76],{"class":55},[49,38204,30972],{"class":126},[49,38206,60],{"class":59},[49,38208,415],{"class":66},[49,38210,81],{"class":55},[49,38212,38213],{"class":51,"line":1745},[49,38214,38215],{"class":55},"        )\n",[49,38217,38218],{"class":51,"line":1766},[49,38219,38220],{"class":283},"        # 第二层\n",[49,38222,38223,38225,38228,38230],{"class":51,"line":1771},[49,38224,30934],{"class":66},[49,38226,38227],{"class":55},".block2",[49,38229,60],{"class":59},[49,38231,38098],{"class":55},[49,38233,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266],{"class":51,"line":1785},[49,38235,38103],{"class":55},[49,38237,30945],{"class":126},[49,38239,60],{"class":59},[49,38241,427],{"class":66},[49,38243,76],{"class":55},[49,38245,30954],{"class":126},[49,38247,60],{"class":59},[49,38249,32159],{"class":66},[49,38251,76],{"class":55},[49,38253,30963],{"class":126},[49,38255,60],{"class":59},[49,38257,73],{"class":66},[49,38259,76],{"class":55},[49,38261,30972],{"class":126},[49,38263,60],{"class":59},[49,38265,441],{"class":66},[49,38267,38136],{"class":55},[49,38269,38270],{"class":51,"line":1790},[49,38271,38141],{"class":55},[49,38273,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306],{"class":51,"line":1819},[49,38275,38103],{"class":55},[49,38277,30945],{"class":126},[49,38279,60],{"class":59},[49,38281,32159],{"class":66},[49,38283,76],{"class":55},[49,38285,30954],{"class":126},[49,38287,60],{"class":59},[49,38289,32159],{"class":66},[49,38291,76],{"class":55},[49,38293,30963],{"class":126},[49,38295,60],{"class":59},[49,38297,73],{"class":66},[49,38299,76],{"class":55},[49,38301,30972],{"class":126},[49,38303,60],{"class":59},[49,38305,441],{"class":66},[49,38307,38136],{"class":55},[49,38309,38310],{"class":51,"line":1824},[49,38311,38141],{"class":55},[49,38313,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338],{"class":51,"line":1841},[49,38315,38186],{"class":55},[49,38317,30963],{"class":126},[49,38319,60],{"class":59},[49,38321,301],{"class":66},[49,38323,76],{"class":55},[49,38325,31018],{"class":126},[49,38327,60],{"class":59},[49,38329,301],{"class":66},[49,38331,76],{"class":55},[49,38333,30972],{"class":126},[49,38335,60],{"class":59},[49,38337,415],{"class":66},[49,38339,81],{"class":55},[49,38341,38342],{"class":51,"line":1846},[49,38343,38215],{"class":55},[49,38345,38346],{"class":51,"line":1851},[49,38347,38348],{"class":283},"        # 第三层\n",[49,38350,38351,38353,38356,38358],{"class":51,"line":1856},[49,38352,30934],{"class":66},[49,38354,38355],{"class":55},".block3",[49,38357,60],{"class":59},[49,38359,38098],{"class":55},[49,38361,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394],{"class":51,"line":1870},[49,38363,38103],{"class":55},[49,38365,30945],{"class":126},[49,38367,60],{"class":59},[49,38369,32159],{"class":66},[49,38371,76],{"class":55},[49,38373,30954],{"class":126},[49,38375,60],{"class":59},[49,38377,34959],{"class":66},[49,38379,76],{"class":55},[49,38381,30963],{"class":126},[49,38383,60],{"class":59},[49,38385,73],{"class":66},[49,38387,76],{"class":55},[49,38389,30972],{"class":126},[49,38391,60],{"class":59},[49,38393,441],{"class":66},[49,38395,38136],{"class":55},[49,38397,38398],{"class":51,"line":1875},[49,38399,38141],{"class":55},[49,38401,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428,38430,38432,38434],{"class":51,"line":2669},[49,38403,38103],{"class":55},[49,38405,30945],{"class":126},[49,38407,60],{"class":59},[49,38409,34959],{"class":66},[49,38411,76],{"class":55},[49,38413,30954],{"class":126},[49,38415,60],{"class":59},[49,38417,34959],{"class":66},[49,38419,76],{"class":55},[49,38421,30963],{"class":126},[49,38423,60],{"class":59},[49,38425,73],{"class":66},[49,38427,76],{"class":55},[49,38429,30972],{"class":126},[49,38431,60],{"class":59},[49,38433,441],{"class":66},[49,38435,38136],{"class":55},[49,38437,38438],{"class":51,"line":2683},[49,38439,38141],{"class":55},[49,38441,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474],{"class":51,"line":2691},[49,38443,38103],{"class":55},[49,38445,30945],{"class":126},[49,38447,60],{"class":59},[49,38449,34959],{"class":66},[49,38451,76],{"class":55},[49,38453,30954],{"class":126},[49,38455,60],{"class":59},[49,38457,34959],{"class":66},[49,38459,76],{"class":55},[49,38461,30963],{"class":126},[49,38463,60],{"class":59},[49,38465,73],{"class":66},[49,38467,76],{"class":55},[49,38469,30972],{"class":126},[49,38471,60],{"class":59},[49,38473,441],{"class":66},[49,38475,38136],{"class":55},[49,38477,38478],{"class":51,"line":2696},[49,38479,38141],{"class":55},[49,38481,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506],{"class":51,"line":2702},[49,38483,38186],{"class":55},[49,38485,30963],{"class":126},[49,38487,60],{"class":59},[49,38489,301],{"class":66},[49,38491,76],{"class":55},[49,38493,31018],{"class":126},[49,38495,60],{"class":59},[49,38497,301],{"class":66},[49,38499,76],{"class":55},[49,38501,30972],{"class":126},[49,38503,60],{"class":59},[49,38505,415],{"class":66},[49,38507,81],{"class":55},[49,38509,38510],{"class":51,"line":2708},[49,38511,38215],{"class":55},[49,38513,38514],{"class":51,"line":2713},[49,38515,38516],{"class":283},"        # 第四层\n",[49,38518,38519,38521,38524,38526],{"class":51,"line":8038},[49,38520,30934],{"class":66},[49,38522,38523],{"class":55},".block4",[49,38525,60],{"class":59},[49,38527,38098],{"class":55},[49,38529,38530,38532,38534,38536,38538,38540,38542,38544,38547,38549,38551,38553,38555,38557,38559,38561,38563],{"class":51,"line":8062},[49,38531,38103],{"class":55},[49,38533,30945],{"class":126},[49,38535,60],{"class":59},[49,38537,34959],{"class":66},[49,38539,76],{"class":55},[49,38541,30954],{"class":126},[49,38543,60],{"class":59},[49,38545,38546],{"class":66},"512",[49,38548,76],{"class":55},[49,38550,30963],{"class":126},[49,38552,60],{"class":59},[49,38554,73],{"class":66},[49,38556,76],{"class":55},[49,38558,30972],{"class":126},[49,38560,60],{"class":59},[49,38562,441],{"class":66},[49,38564,38136],{"class":55},[49,38566,38567],{"class":51,"line":8067},[49,38568,38141],{"class":55},[49,38570,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603],{"class":51,"line":8073},[49,38572,38103],{"class":55},[49,38574,30945],{"class":126},[49,38576,60],{"class":59},[49,38578,38546],{"class":66},[49,38580,76],{"class":55},[49,38582,30954],{"class":126},[49,38584,60],{"class":59},[49,38586,38546],{"class":66},[49,38588,76],{"class":55},[49,38590,30963],{"class":126},[49,38592,60],{"class":59},[49,38594,73],{"class":66},[49,38596,76],{"class":55},[49,38598,30972],{"class":126},[49,38600,60],{"class":59},[49,38602,441],{"class":66},[49,38604,38136],{"class":55},[49,38606,38607],{"class":51,"line":8100},[49,38608,38141],{"class":55},[49,38610,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643],{"class":51,"line":8105},[49,38612,38103],{"class":55},[49,38614,30945],{"class":126},[49,38616,60],{"class":59},[49,38618,38546],{"class":66},[49,38620,76],{"class":55},[49,38622,30954],{"class":126},[49,38624,60],{"class":59},[49,38626,38546],{"class":66},[49,38628,76],{"class":55},[49,38630,30963],{"class":126},[49,38632,60],{"class":59},[49,38634,73],{"class":66},[49,38636,76],{"class":55},[49,38638,30972],{"class":126},[49,38640,60],{"class":59},[49,38642,441],{"class":66},[49,38644,38136],{"class":55},[49,38646,38647],{"class":51,"line":8111},[49,38648,38141],{"class":55},[49,38650,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675],{"class":51,"line":8123},[49,38652,38186],{"class":55},[49,38654,30963],{"class":126},[49,38656,60],{"class":59},[49,38658,301],{"class":66},[49,38660,76],{"class":55},[49,38662,31018],{"class":126},[49,38664,60],{"class":59},[49,38666,301],{"class":66},[49,38668,76],{"class":55},[49,38670,30972],{"class":126},[49,38672,60],{"class":59},[49,38674,415],{"class":66},[49,38676,81],{"class":55},[49,38678,38679],{"class":51,"line":8135},[49,38680,38215],{"class":55},[49,38682,38683],{"class":51,"line":8147},[49,38684,38685],{"class":283},"        # 第五层\n",[49,38687,38688,38690,38693,38695],{"class":51,"line":9806},[49,38689,30934],{"class":66},[49,38691,38692],{"class":55},".block5",[49,38694,60],{"class":59},[49,38696,38098],{"class":55},[49,38698,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731],{"class":51,"line":9831},[49,38700,38103],{"class":55},[49,38702,30945],{"class":126},[49,38704,60],{"class":59},[49,38706,38546],{"class":66},[49,38708,76],{"class":55},[49,38710,30954],{"class":126},[49,38712,60],{"class":59},[49,38714,38546],{"class":66},[49,38716,76],{"class":55},[49,38718,30963],{"class":126},[49,38720,60],{"class":59},[49,38722,73],{"class":66},[49,38724,76],{"class":55},[49,38726,30972],{"class":126},[49,38728,60],{"class":59},[49,38730,441],{"class":66},[49,38732,38136],{"class":55},[49,38734,38735],{"class":51,"line":9854},[49,38736,38141],{"class":55},[49,38738,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771],{"class":51,"line":9878},[49,38740,38103],{"class":55},[49,38742,30945],{"class":126},[49,38744,60],{"class":59},[49,38746,38546],{"class":66},[49,38748,76],{"class":55},[49,38750,30954],{"class":126},[49,38752,60],{"class":59},[49,38754,38546],{"class":66},[49,38756,76],{"class":55},[49,38758,30963],{"class":126},[49,38760,60],{"class":59},[49,38762,73],{"class":66},[49,38764,76],{"class":55},[49,38766,30972],{"class":126},[49,38768,60],{"class":59},[49,38770,441],{"class":66},[49,38772,38136],{"class":55},[49,38774,38775],{"class":51,"line":9883},[49,38776,38141],{"class":55},[49,38778,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811],{"class":51,"line":9888},[49,38780,38103],{"class":55},[49,38782,30945],{"class":126},[49,38784,60],{"class":59},[49,38786,38546],{"class":66},[49,38788,76],{"class":55},[49,38790,30954],{"class":126},[49,38792,60],{"class":59},[49,38794,38546],{"class":66},[49,38796,76],{"class":55},[49,38798,30963],{"class":126},[49,38800,60],{"class":59},[49,38802,73],{"class":66},[49,38804,76],{"class":55},[49,38806,30972],{"class":126},[49,38808,60],{"class":59},[49,38810,441],{"class":66},[49,38812,38136],{"class":55},[49,38814,38815],{"class":51,"line":9893},[49,38816,38141],{"class":55},[49,38818,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843],{"class":51,"line":9902},[49,38820,38186],{"class":55},[49,38822,30963],{"class":126},[49,38824,60],{"class":59},[49,38826,301],{"class":66},[49,38828,76],{"class":55},[49,38830,31018],{"class":126},[49,38832,60],{"class":59},[49,38834,301],{"class":66},[49,38836,76],{"class":55},[49,38838,30972],{"class":126},[49,38840,60],{"class":59},[49,38842,415],{"class":66},[49,38844,81],{"class":55},[49,38846,38847],{"class":51,"line":9907},[49,38848,38215],{"class":55},[49,38850,38851],{"class":51,"line":9913},[49,38852,38853],{"class":283},"        # 全连接层\n",[49,38855,38856,38858,38861,38863],{"class":51,"line":9934},[49,38857,30934],{"class":66},[49,38859,38860],{"class":55},".block6",[49,38862,60],{"class":59},[49,38864,38098],{"class":55},[49,38866,38867],{"class":51,"line":9940},[49,38868,38869],{"class":283},"            # 平展操作\n",[49,38871,38872],{"class":51,"line":9954},[49,38873,38874],{"class":283},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[49,38876,38877],{"class":51,"line":9960},[49,38878,38879],{"class":55},"            nn.Flatten(),\n",[49,38881,38882,38885,38887,38889,38891,38893,38895,38897,38899],{"class":51,"line":9987},[49,38883,38884],{"class":55},"            nn.Linear(",[49,38886,591],{"class":66},[49,38888,674],{"class":59},[49,38890,591],{"class":66},[49,38892,674],{"class":59},[49,38894,38546],{"class":66},[49,38896,76],{"class":55},[49,38898,34959],{"class":66},[49,38900,38136],{"class":55},[49,38902,38903],{"class":51,"line":9996},[49,38904,38141],{"class":55},[49,38906,38907,38909,38911,38913,38915],{"class":51,"line":10002},[49,38908,38884],{"class":55},[49,38910,34959],{"class":66},[49,38912,76],{"class":55},[49,38914,32159],{"class":66},[49,38916,38136],{"class":55},[49,38918,38919],{"class":51,"line":10010},[49,38920,38141],{"class":55},[49,38922,38923,38925,38927,38929,38931],{"class":51,"line":10015},[49,38924,38884],{"class":55},[49,38926,32159],{"class":66},[49,38928,76],{"class":55},[49,38930,95],{"class":66},[49,38932,81],{"class":55},[49,38934,38935],{"class":51,"line":16694},[49,38936,38215],{"class":55},[49,38938,38939],{"class":51,"line":16700},[49,38940,2492],{"emptyLinePlaceholder":151},[49,38942,38943],{"class":51,"line":16723},[49,38944,38945],{"class":283},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,38947,38948],{"class":51,"line":16729},[49,38949,38950],{"class":283},"        # 循环遍历模型\n",[49,38952,38953,38955,38958,38960,38963],{"class":51,"line":16752},[49,38954,3495],{"class":59},[49,38956,38957],{"class":55}," m ",[49,38959,26134],{"class":59},[49,38961,38962],{"class":66}," self",[49,38964,38965],{"class":55},".modules():\n",[49,38967,38968],{"class":51,"line":16766},[49,38969,38970],{"class":283},"            # print(m)\n",[49,38972,38973,38975,38978],{"class":51,"line":16786},[49,38974,4734],{"class":59},[49,38976,38977],{"class":66}," isinstance",[49,38979,38980],{"class":55},"(m,nn.Conv2d):\n",[49,38982,38983],{"class":51,"line":16792},[49,38984,38985],{"class":283},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,38987,38988,38991,38994,38996,38999],{"class":51,"line":16803},[49,38989,38990],{"class":55},"                nn.init.kaiming_normal_(m.weight,",[49,38992,38993],{"class":126},"nonlinearity",[49,38995,60],{"class":59},[49,38997,38998],{"class":328},"'relu'",[49,39000,81],{"class":55},[49,39002,39003],{"class":51,"line":16826},[49,39004,39005],{"class":283},"                # 判断b参数是否存在\n",[49,39007,39008,39011,39014,39017,39020,39023],{"class":51,"line":16848},[49,39009,39010],{"class":59},"                if",[49,39012,39013],{"class":55}," m.bias ",[49,39015,39016],{"class":59},"is",[49,39018,39019],{"class":59}," not",[49,39021,39022],{"class":66}," None",[49,39024,3831],{"class":55},[49,39026,39027],{"class":51,"line":16853},[49,39028,39029],{"class":283},"                    # 如果参数不存在的化初始化b=0\n",[49,39031,39032,39035,39037],{"class":51,"line":16859},[49,39033,39034],{"class":55},"                    nn.init.constant_(m.bias,",[49,39036,415],{"class":66},[49,39038,81],{"class":55},[49,39040,39041],{"class":51,"line":16873},[49,39042,39043],{"class":283},"            # 全连接层初始化\n",[49,39045,39046,39049,39051],{"class":51,"line":16886},[49,39047,39048],{"class":59},"            elif",[49,39050,38977],{"class":66},[49,39052,39053],{"class":55},"(m,nn.Linear):\n",[49,39055,39056],{"class":51,"line":16891},[49,39057,39058],{"class":283},"                # 这个初始化方法是利用的是正太分布的方式\n",[49,39060,39061],{"class":51,"line":16905},[49,39062,39063],{"class":283},"                # 均值为0，方差为0.01\n",[49,39065,39066,39069,39071,39073,39076],{"class":51,"line":16910},[49,39067,39068],{"class":55},"                nn.init.normal_(m.weight,",[49,39070,415],{"class":66},[49,39072,76],{"class":55},[49,39074,39075],{"class":66},"0.01",[49,39077,81],{"class":55},[49,39079,39080],{"class":51,"line":16916},[49,39081,39082],{"class":283},"                # 初始化b参数\n",[49,39084,39085,39087,39089,39091,39093,39095],{"class":51,"line":16921},[49,39086,39010],{"class":59},[49,39088,39013],{"class":55},[49,39090,39016],{"class":59},[49,39092,39019],{"class":59},[49,39094,39022],{"class":66},[49,39096,3831],{"class":55},[49,39098,39099,39101,39103],{"class":51,"line":16935},[49,39100,39034],{"class":55},[49,39102,415],{"class":66},[49,39104,81],{"class":55},[49,39106,39107],{"class":51,"line":16940},[49,39108,2492],{"emptyLinePlaceholder":151},[49,39110,39111],{"class":51,"line":16945},[49,39112,35254],{"class":283},[49,39114,39115,39117,39119],{"class":51,"line":16959},[49,39116,30890],{"class":59},[49,39118,31182],{"class":2055},[49,39120,31185],{"class":55},[49,39122,39123,39125,39127,39129],{"class":51,"line":16971},[49,39124,31190],{"class":55},[49,39126,60],{"class":59},[49,39128,30912],{"class":66},[49,39130,39131],{"class":55},".block1(x)\n",[49,39133,39134,39136,39138,39140],{"class":51,"line":16976},[49,39135,31190],{"class":55},[49,39137,60],{"class":59},[49,39139,30912],{"class":66},[49,39141,39142],{"class":55},".block2(x)\n",[49,39144,39145,39147,39149,39151],{"class":51,"line":16989},[49,39146,31190],{"class":55},[49,39148,60],{"class":59},[49,39150,30912],{"class":66},[49,39152,39153],{"class":55},".block3(x)\n",[49,39155,39156,39158,39160,39162],{"class":51,"line":16994},[49,39157,31190],{"class":55},[49,39159,60],{"class":59},[49,39161,30912],{"class":66},[49,39163,39164],{"class":55},".block4(x)\n",[49,39166,39167,39169,39171,39173],{"class":51,"line":16999},[49,39168,31190],{"class":55},[49,39170,60],{"class":59},[49,39172,30912],{"class":66},[49,39174,39175],{"class":55},".block5(x)\n",[49,39177,39178,39180,39182,39184],{"class":51,"line":17004},[49,39179,31190],{"class":55},[49,39181,60],{"class":59},[49,39183,30912],{"class":66},[49,39185,39186],{"class":55},".block6(x)\n",[49,39188,39189,39191],{"class":51,"line":17017},[49,39190,14842],{"class":59},[49,39192,31298],{"class":55},[49,39194,39195],{"class":51,"line":17022},[49,39196,2492],{"emptyLinePlaceholder":151},[49,39198,39199],{"class":51,"line":32722},[49,39200,39201],{"class":283},"# 验证模型\n",[49,39203,39204,39206,39208,39210,39213],{"class":51,"line":32728},[49,39205,1623],{"class":59},[49,39207,31309],{"class":66},[49,39209,3041],{"class":59},[49,39211,39212],{"class":328},"'__main__'",[49,39214,3831],{"class":55},[49,39216,39217,39219,39221,39223,39225,39227,39229,39231,39233],{"class":51,"line":32734},[49,39218,31326],{"class":55},[49,39220,60],{"class":59},[49,39222,30540],{"class":55},[49,39224,31333],{"class":328},[49,39226,1796],{"class":59},[49,39228,31338],{"class":55},[49,39230,1793],{"class":59},[49,39232,30565],{"class":328},[49,39234,81],{"class":55},[49,39236,39237,39239],{"class":51,"line":32740},[49,39238,31388],{"class":66},[49,39240,30574],{"class":55},[49,39242,39243,39245,39247],{"class":51,"line":32746},[49,39244,31378],{"class":55},[49,39246,60],{"class":59},[49,39248,39249],{"class":55},"VGG16().to(device)\n",[49,39251,39252,39254,39256,39258,39260,39262,39264,39266],{"class":51,"line":32757},[49,39253,31388],{"class":66},[49,39255,31391],{"class":55},[49,39257,441],{"class":66},[49,39259,76],{"class":55},[49,39261,31590],{"class":66},[49,39263,76],{"class":55},[49,39265,31590],{"class":66},[49,39267,31404],{"class":55},[178,39269,39270],{"start":84},[181,39271,39272],{},"训练代码",[14,39274,39275],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39277,39278],{},"解决方式:",[14,39280,39281],{},"①权重初始化",[39,39283,39285],{"className":41,"code":39284,"language":43,"meta":44,"style":44},"# 权重初始化,保证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",[46,39286,39287,39292,39297,39309,39314,39322,39327,39340,39345,39359,39364,39373,39378,39387,39392,39397,39410,39415,39429],{"__ignoreMap":44},[49,39288,39289],{"class":51,"line":52},[49,39290,39291],{"class":283},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,39293,39294],{"class":51,"line":84},[49,39295,39296],{"class":283},"# 循环遍历模型\n",[49,39298,39299,39301,39303,39305,39307],{"class":51,"line":109},[49,39300,3117],{"class":59},[49,39302,38957],{"class":55},[49,39304,26134],{"class":59},[49,39306,38962],{"class":66},[49,39308,38965],{"class":55},[49,39310,39311],{"class":51,"line":120},[49,39312,39313],{"class":283},"    # print(m)\n",[49,39315,39316,39318,39320],{"class":51,"line":135},[49,39317,3193],{"class":59},[49,39319,38977],{"class":66},[49,39321,38980],{"class":55},[49,39323,39324],{"class":51,"line":1306},[49,39325,39326],{"class":283},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,39328,39329,39332,39334,39336,39338],{"class":51,"line":1312},[49,39330,39331],{"class":55},"        nn.init.kaiming_normal_(m.weight,",[49,39333,38993],{"class":126},[49,39335,60],{"class":59},[49,39337,38998],{"class":328},[49,39339,81],{"class":55},[49,39341,39342],{"class":51,"line":1403},[49,39343,39344],{"class":283},"        # 判断b参数是否存在\n",[49,39346,39347,39349,39351,39353,39355,39357],{"class":51,"line":1409},[49,39348,2589],{"class":59},[49,39350,39013],{"class":55},[49,39352,39016],{"class":59},[49,39354,39019],{"class":59},[49,39356,39022],{"class":66},[49,39358,3831],{"class":55},[49,39360,39361],{"class":51,"line":1421},[49,39362,39363],{"class":283},"            # 如果参数不存在的化初始化b=0\n",[49,39365,39366,39369,39371],{"class":51,"line":1704},[49,39367,39368],{"class":55},"            nn.init.constant_(m.bias,",[49,39370,415],{"class":66},[49,39372,81],{"class":55},[49,39374,39375],{"class":51,"line":1709},[49,39376,39377],{"class":283},"    # 全连接层初始化\n",[49,39379,39380,39383,39385],{"class":51,"line":1715},[49,39381,39382],{"class":59},"    elif",[49,39384,38977],{"class":66},[49,39386,39053],{"class":55},[49,39388,39389],{"class":51,"line":1720},[49,39390,39391],{"class":283},"        # 这个初始化方法是利用的是正太分布的方式\n",[49,39393,39394],{"class":51,"line":1734},[49,39395,39396],{"class":283},"        # 均值为0，方差为0.01\n",[49,39398,39399,39402,39404,39406,39408],{"class":51,"line":1739},[49,39400,39401],{"class":55},"        nn.init.normal_(m.weight,",[49,39403,415],{"class":66},[49,39405,76],{"class":55},[49,39407,39075],{"class":66},[49,39409,81],{"class":55},[49,39411,39412],{"class":51,"line":1745},[49,39413,39414],{"class":283},"        # 初始化b参数\n",[49,39416,39417,39419,39421,39423,39425,39427],{"class":51,"line":1766},[49,39418,2589],{"class":59},[49,39420,39013],{"class":55},[49,39422,39016],{"class":59},[49,39424,39019],{"class":59},[49,39426,39022],{"class":66},[49,39428,3831],{"class":55},[49,39430,39431,39433,39435],{"class":51,"line":1771},[49,39432,39368],{"class":55},[49,39434,415],{"class":66},[49,39436,81],{"class":55},[14,39438,39439],{},"②尽可能地增加批次",[14,39441,39442],{},"训练完整代码：",[39,39444,39445],{"className":41,"code":37988,"language":43,"meta":44,"style":44},[46,39446,39447,39453,39463,39473,39483,39487,39503,39511,39529,39533,39537,39547,39583,39587,39623,39627,39655,39659,39663,39673,39709,39713,39749,39753,39781,39785,39789,39799,39835,39839,39875,39879,39915,39919,39947,39951,39955,39965,40001,40005,40041,40045,40081,40085,40113,40117,40121,40131,40167,40171,40207,40211,40247,40251,40279,40283,40287,40297,40301,40305,40309,40329,40333,40345,40349,40361,40365,40369,40373,40377,40389,40393,40401,40405,40417,40421,40435,40439,40447,40451,40459,40463,40467,40479,40483,40497,40505,40509,40513,40521,40531,40541,40551,40561,40571,40581,40587,40591,40595,40607,40627,40633,40641],{"__ignoreMap":44},[49,39448,39449,39451],{"class":51,"line":52},[49,39450,30481],{"class":59},[49,39452,30484],{"class":55},[49,39454,39455,39457,39459,39461],{"class":51,"line":84},[49,39456,30826],{"class":59},[49,39458,38003],{"class":55},[49,39460,30481],{"class":59},[49,39462,38008],{"class":55},[49,39464,39465,39467,39469,39471],{"class":51,"line":109},[49,39466,30826],{"class":59},[49,39468,30829],{"class":55},[49,39470,30481],{"class":59},[49,39472,30834],{"class":55},[49,39474,39475,39477,39479,39481],{"class":51,"line":120},[49,39476,30826],{"class":59},[49,39478,30846],{"class":55},[49,39480,30481],{"class":59},[49,39482,30851],{"class":55},[49,39484,39485],{"class":51,"line":135},[49,39486,2492],{"emptyLinePlaceholder":151},[49,39488,39489,39491,39493,39495,39497,39499,39501],{"class":51,"line":1306},[49,39490,14784],{"class":59},[49,39492,38039],{"class":2055},[49,39494,228],{"class":55},[49,39496,30867],{"class":2055},[49,39498,777],{"class":55},[49,39500,30872],{"class":2055},[49,39502,30875],{"class":55},[49,39504,39505,39507,39509],{"class":51,"line":1312},[49,39506,30890],{"class":59},[49,39508,30893],{"class":66},[49,39510,30896],{"class":55},[49,39512,39513,39515,39517,39519,39521,39523,39525,39527],{"class":51,"line":1403},[49,39514,30906],{"class":66},[49,39516,228],{"class":55},[49,39518,38066],{"class":66},[49,39520,12525],{"class":55},[49,39522,30912],{"class":66},[49,39524,30915],{"class":55},[49,39526,30918],{"class":66},[49,39528,2068],{"class":55},[49,39530,39531],{"class":51,"line":1409},[49,39532,38081],{"class":283},[49,39534,39535],{"class":51,"line":1421},[49,39536,38086],{"class":283},[49,39538,39539,39541,39543,39545],{"class":51,"line":1704},[49,39540,30934],{"class":66},[49,39542,38093],{"class":55},[49,39544,60],{"class":59},[49,39546,38098],{"class":55},[49,39548,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581],{"class":51,"line":1709},[49,39550,38103],{"class":55},[49,39552,30945],{"class":126},[49,39554,60],{"class":59},[49,39556,441],{"class":66},[49,39558,76],{"class":55},[49,39560,30954],{"class":126},[49,39562,60],{"class":59},[49,39564,427],{"class":66},[49,39566,76],{"class":55},[49,39568,30963],{"class":126},[49,39570,60],{"class":59},[49,39572,73],{"class":66},[49,39574,76],{"class":55},[49,39576,30972],{"class":126},[49,39578,60],{"class":59},[49,39580,441],{"class":66},[49,39582,38136],{"class":55},[49,39584,39585],{"class":51,"line":1715},[49,39586,38141],{"class":55},[49,39588,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621],{"class":51,"line":1720},[49,39590,38103],{"class":55},[49,39592,30945],{"class":126},[49,39594,60],{"class":59},[49,39596,427],{"class":66},[49,39598,76],{"class":55},[49,39600,30954],{"class":126},[49,39602,60],{"class":59},[49,39604,427],{"class":66},[49,39606,76],{"class":55},[49,39608,30963],{"class":126},[49,39610,60],{"class":59},[49,39612,73],{"class":66},[49,39614,76],{"class":55},[49,39616,30972],{"class":126},[49,39618,60],{"class":59},[49,39620,441],{"class":66},[49,39622,38136],{"class":55},[49,39624,39625],{"class":51,"line":1734},[49,39626,38141],{"class":55},[49,39628,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653],{"class":51,"line":1739},[49,39630,38186],{"class":55},[49,39632,30963],{"class":126},[49,39634,60],{"class":59},[49,39636,301],{"class":66},[49,39638,76],{"class":55},[49,39640,31018],{"class":126},[49,39642,60],{"class":59},[49,39644,301],{"class":66},[49,39646,76],{"class":55},[49,39648,30972],{"class":126},[49,39650,60],{"class":59},[49,39652,415],{"class":66},[49,39654,81],{"class":55},[49,39656,39657],{"class":51,"line":1745},[49,39658,38215],{"class":55},[49,39660,39661],{"class":51,"line":1766},[49,39662,38220],{"class":283},[49,39664,39665,39667,39669,39671],{"class":51,"line":1771},[49,39666,30934],{"class":66},[49,39668,38227],{"class":55},[49,39670,60],{"class":59},[49,39672,38098],{"class":55},[49,39674,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707],{"class":51,"line":1785},[49,39676,38103],{"class":55},[49,39678,30945],{"class":126},[49,39680,60],{"class":59},[49,39682,427],{"class":66},[49,39684,76],{"class":55},[49,39686,30954],{"class":126},[49,39688,60],{"class":59},[49,39690,32159],{"class":66},[49,39692,76],{"class":55},[49,39694,30963],{"class":126},[49,39696,60],{"class":59},[49,39698,73],{"class":66},[49,39700,76],{"class":55},[49,39702,30972],{"class":126},[49,39704,60],{"class":59},[49,39706,441],{"class":66},[49,39708,38136],{"class":55},[49,39710,39711],{"class":51,"line":1790},[49,39712,38141],{"class":55},[49,39714,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747],{"class":51,"line":1819},[49,39716,38103],{"class":55},[49,39718,30945],{"class":126},[49,39720,60],{"class":59},[49,39722,32159],{"class":66},[49,39724,76],{"class":55},[49,39726,30954],{"class":126},[49,39728,60],{"class":59},[49,39730,32159],{"class":66},[49,39732,76],{"class":55},[49,39734,30963],{"class":126},[49,39736,60],{"class":59},[49,39738,73],{"class":66},[49,39740,76],{"class":55},[49,39742,30972],{"class":126},[49,39744,60],{"class":59},[49,39746,441],{"class":66},[49,39748,38136],{"class":55},[49,39750,39751],{"class":51,"line":1824},[49,39752,38141],{"class":55},[49,39754,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779],{"class":51,"line":1841},[49,39756,38186],{"class":55},[49,39758,30963],{"class":126},[49,39760,60],{"class":59},[49,39762,301],{"class":66},[49,39764,76],{"class":55},[49,39766,31018],{"class":126},[49,39768,60],{"class":59},[49,39770,301],{"class":66},[49,39772,76],{"class":55},[49,39774,30972],{"class":126},[49,39776,60],{"class":59},[49,39778,415],{"class":66},[49,39780,81],{"class":55},[49,39782,39783],{"class":51,"line":1846},[49,39784,38215],{"class":55},[49,39786,39787],{"class":51,"line":1851},[49,39788,38348],{"class":283},[49,39790,39791,39793,39795,39797],{"class":51,"line":1856},[49,39792,30934],{"class":66},[49,39794,38355],{"class":55},[49,39796,60],{"class":59},[49,39798,38098],{"class":55},[49,39800,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833],{"class":51,"line":1870},[49,39802,38103],{"class":55},[49,39804,30945],{"class":126},[49,39806,60],{"class":59},[49,39808,32159],{"class":66},[49,39810,76],{"class":55},[49,39812,30954],{"class":126},[49,39814,60],{"class":59},[49,39816,34959],{"class":66},[49,39818,76],{"class":55},[49,39820,30963],{"class":126},[49,39822,60],{"class":59},[49,39824,73],{"class":66},[49,39826,76],{"class":55},[49,39828,30972],{"class":126},[49,39830,60],{"class":59},[49,39832,441],{"class":66},[49,39834,38136],{"class":55},[49,39836,39837],{"class":51,"line":1875},[49,39838,38141],{"class":55},[49,39840,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873],{"class":51,"line":2669},[49,39842,38103],{"class":55},[49,39844,30945],{"class":126},[49,39846,60],{"class":59},[49,39848,34959],{"class":66},[49,39850,76],{"class":55},[49,39852,30954],{"class":126},[49,39854,60],{"class":59},[49,39856,34959],{"class":66},[49,39858,76],{"class":55},[49,39860,30963],{"class":126},[49,39862,60],{"class":59},[49,39864,73],{"class":66},[49,39866,76],{"class":55},[49,39868,30972],{"class":126},[49,39870,60],{"class":59},[49,39872,441],{"class":66},[49,39874,38136],{"class":55},[49,39876,39877],{"class":51,"line":2683},[49,39878,38141],{"class":55},[49,39880,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913],{"class":51,"line":2691},[49,39882,38103],{"class":55},[49,39884,30945],{"class":126},[49,39886,60],{"class":59},[49,39888,34959],{"class":66},[49,39890,76],{"class":55},[49,39892,30954],{"class":126},[49,39894,60],{"class":59},[49,39896,34959],{"class":66},[49,39898,76],{"class":55},[49,39900,30963],{"class":126},[49,39902,60],{"class":59},[49,39904,73],{"class":66},[49,39906,76],{"class":55},[49,39908,30972],{"class":126},[49,39910,60],{"class":59},[49,39912,441],{"class":66},[49,39914,38136],{"class":55},[49,39916,39917],{"class":51,"line":2696},[49,39918,38141],{"class":55},[49,39920,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945],{"class":51,"line":2702},[49,39922,38186],{"class":55},[49,39924,30963],{"class":126},[49,39926,60],{"class":59},[49,39928,301],{"class":66},[49,39930,76],{"class":55},[49,39932,31018],{"class":126},[49,39934,60],{"class":59},[49,39936,301],{"class":66},[49,39938,76],{"class":55},[49,39940,30972],{"class":126},[49,39942,60],{"class":59},[49,39944,415],{"class":66},[49,39946,81],{"class":55},[49,39948,39949],{"class":51,"line":2708},[49,39950,38215],{"class":55},[49,39952,39953],{"class":51,"line":2713},[49,39954,38516],{"class":283},[49,39956,39957,39959,39961,39963],{"class":51,"line":8038},[49,39958,30934],{"class":66},[49,39960,38523],{"class":55},[49,39962,60],{"class":59},[49,39964,38098],{"class":55},[49,39966,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999],{"class":51,"line":8062},[49,39968,38103],{"class":55},[49,39970,30945],{"class":126},[49,39972,60],{"class":59},[49,39974,34959],{"class":66},[49,39976,76],{"class":55},[49,39978,30954],{"class":126},[49,39980,60],{"class":59},[49,39982,38546],{"class":66},[49,39984,76],{"class":55},[49,39986,30963],{"class":126},[49,39988,60],{"class":59},[49,39990,73],{"class":66},[49,39992,76],{"class":55},[49,39994,30972],{"class":126},[49,39996,60],{"class":59},[49,39998,441],{"class":66},[49,40000,38136],{"class":55},[49,40002,40003],{"class":51,"line":8067},[49,40004,38141],{"class":55},[49,40006,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039],{"class":51,"line":8073},[49,40008,38103],{"class":55},[49,40010,30945],{"class":126},[49,40012,60],{"class":59},[49,40014,38546],{"class":66},[49,40016,76],{"class":55},[49,40018,30954],{"class":126},[49,40020,60],{"class":59},[49,40022,38546],{"class":66},[49,40024,76],{"class":55},[49,40026,30963],{"class":126},[49,40028,60],{"class":59},[49,40030,73],{"class":66},[49,40032,76],{"class":55},[49,40034,30972],{"class":126},[49,40036,60],{"class":59},[49,40038,441],{"class":66},[49,40040,38136],{"class":55},[49,40042,40043],{"class":51,"line":8100},[49,40044,38141],{"class":55},[49,40046,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079],{"class":51,"line":8105},[49,40048,38103],{"class":55},[49,40050,30945],{"class":126},[49,40052,60],{"class":59},[49,40054,38546],{"class":66},[49,40056,76],{"class":55},[49,40058,30954],{"class":126},[49,40060,60],{"class":59},[49,40062,38546],{"class":66},[49,40064,76],{"class":55},[49,40066,30963],{"class":126},[49,40068,60],{"class":59},[49,40070,73],{"class":66},[49,40072,76],{"class":55},[49,40074,30972],{"class":126},[49,40076,60],{"class":59},[49,40078,441],{"class":66},[49,40080,38136],{"class":55},[49,40082,40083],{"class":51,"line":8111},[49,40084,38141],{"class":55},[49,40086,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111],{"class":51,"line":8123},[49,40088,38186],{"class":55},[49,40090,30963],{"class":126},[49,40092,60],{"class":59},[49,40094,301],{"class":66},[49,40096,76],{"class":55},[49,40098,31018],{"class":126},[49,40100,60],{"class":59},[49,40102,301],{"class":66},[49,40104,76],{"class":55},[49,40106,30972],{"class":126},[49,40108,60],{"class":59},[49,40110,415],{"class":66},[49,40112,81],{"class":55},[49,40114,40115],{"class":51,"line":8135},[49,40116,38215],{"class":55},[49,40118,40119],{"class":51,"line":8147},[49,40120,38685],{"class":283},[49,40122,40123,40125,40127,40129],{"class":51,"line":9806},[49,40124,30934],{"class":66},[49,40126,38692],{"class":55},[49,40128,60],{"class":59},[49,40130,38098],{"class":55},[49,40132,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165],{"class":51,"line":9831},[49,40134,38103],{"class":55},[49,40136,30945],{"class":126},[49,40138,60],{"class":59},[49,40140,38546],{"class":66},[49,40142,76],{"class":55},[49,40144,30954],{"class":126},[49,40146,60],{"class":59},[49,40148,38546],{"class":66},[49,40150,76],{"class":55},[49,40152,30963],{"class":126},[49,40154,60],{"class":59},[49,40156,73],{"class":66},[49,40158,76],{"class":55},[49,40160,30972],{"class":126},[49,40162,60],{"class":59},[49,40164,441],{"class":66},[49,40166,38136],{"class":55},[49,40168,40169],{"class":51,"line":9854},[49,40170,38141],{"class":55},[49,40172,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205],{"class":51,"line":9878},[49,40174,38103],{"class":55},[49,40176,30945],{"class":126},[49,40178,60],{"class":59},[49,40180,38546],{"class":66},[49,40182,76],{"class":55},[49,40184,30954],{"class":126},[49,40186,60],{"class":59},[49,40188,38546],{"class":66},[49,40190,76],{"class":55},[49,40192,30963],{"class":126},[49,40194,60],{"class":59},[49,40196,73],{"class":66},[49,40198,76],{"class":55},[49,40200,30972],{"class":126},[49,40202,60],{"class":59},[49,40204,441],{"class":66},[49,40206,38136],{"class":55},[49,40208,40209],{"class":51,"line":9883},[49,40210,38141],{"class":55},[49,40212,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245],{"class":51,"line":9888},[49,40214,38103],{"class":55},[49,40216,30945],{"class":126},[49,40218,60],{"class":59},[49,40220,38546],{"class":66},[49,40222,76],{"class":55},[49,40224,30954],{"class":126},[49,40226,60],{"class":59},[49,40228,38546],{"class":66},[49,40230,76],{"class":55},[49,40232,30963],{"class":126},[49,40234,60],{"class":59},[49,40236,73],{"class":66},[49,40238,76],{"class":55},[49,40240,30972],{"class":126},[49,40242,60],{"class":59},[49,40244,441],{"class":66},[49,40246,38136],{"class":55},[49,40248,40249],{"class":51,"line":9893},[49,40250,38141],{"class":55},[49,40252,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277],{"class":51,"line":9902},[49,40254,38186],{"class":55},[49,40256,30963],{"class":126},[49,40258,60],{"class":59},[49,40260,301],{"class":66},[49,40262,76],{"class":55},[49,40264,31018],{"class":126},[49,40266,60],{"class":59},[49,40268,301],{"class":66},[49,40270,76],{"class":55},[49,40272,30972],{"class":126},[49,40274,60],{"class":59},[49,40276,415],{"class":66},[49,40278,81],{"class":55},[49,40280,40281],{"class":51,"line":9907},[49,40282,38215],{"class":55},[49,40284,40285],{"class":51,"line":9913},[49,40286,38853],{"class":283},[49,40288,40289,40291,40293,40295],{"class":51,"line":9934},[49,40290,30934],{"class":66},[49,40292,38860],{"class":55},[49,40294,60],{"class":59},[49,40296,38098],{"class":55},[49,40298,40299],{"class":51,"line":9940},[49,40300,38869],{"class":283},[49,40302,40303],{"class":51,"line":9954},[49,40304,38874],{"class":283},[49,40306,40307],{"class":51,"line":9960},[49,40308,38879],{"class":55},[49,40310,40311,40313,40315,40317,40319,40321,40323,40325,40327],{"class":51,"line":9987},[49,40312,38884],{"class":55},[49,40314,591],{"class":66},[49,40316,674],{"class":59},[49,40318,591],{"class":66},[49,40320,674],{"class":59},[49,40322,38546],{"class":66},[49,40324,76],{"class":55},[49,40326,34959],{"class":66},[49,40328,38136],{"class":55},[49,40330,40331],{"class":51,"line":9996},[49,40332,38141],{"class":55},[49,40334,40335,40337,40339,40341,40343],{"class":51,"line":10002},[49,40336,38884],{"class":55},[49,40338,34959],{"class":66},[49,40340,76],{"class":55},[49,40342,32159],{"class":66},[49,40344,38136],{"class":55},[49,40346,40347],{"class":51,"line":10010},[49,40348,38141],{"class":55},[49,40350,40351,40353,40355,40357,40359],{"class":51,"line":10015},[49,40352,38884],{"class":55},[49,40354,32159],{"class":66},[49,40356,76],{"class":55},[49,40358,95],{"class":66},[49,40360,81],{"class":55},[49,40362,40363],{"class":51,"line":16694},[49,40364,38215],{"class":55},[49,40366,40367],{"class":51,"line":16700},[49,40368,2492],{"emptyLinePlaceholder":151},[49,40370,40371],{"class":51,"line":16723},[49,40372,38945],{"class":283},[49,40374,40375],{"class":51,"line":16729},[49,40376,38950],{"class":283},[49,40378,40379,40381,40383,40385,40387],{"class":51,"line":16752},[49,40380,3495],{"class":59},[49,40382,38957],{"class":55},[49,40384,26134],{"class":59},[49,40386,38962],{"class":66},[49,40388,38965],{"class":55},[49,40390,40391],{"class":51,"line":16766},[49,40392,38970],{"class":283},[49,40394,40395,40397,40399],{"class":51,"line":16786},[49,40396,4734],{"class":59},[49,40398,38977],{"class":66},[49,40400,38980],{"class":55},[49,40402,40403],{"class":51,"line":16792},[49,40404,38985],{"class":283},[49,40406,40407,40409,40411,40413,40415],{"class":51,"line":16803},[49,40408,38990],{"class":55},[49,40410,38993],{"class":126},[49,40412,60],{"class":59},[49,40414,38998],{"class":328},[49,40416,81],{"class":55},[49,40418,40419],{"class":51,"line":16826},[49,40420,39005],{"class":283},[49,40422,40423,40425,40427,40429,40431,40433],{"class":51,"line":16848},[49,40424,39010],{"class":59},[49,40426,39013],{"class":55},[49,40428,39016],{"class":59},[49,40430,39019],{"class":59},[49,40432,39022],{"class":66},[49,40434,3831],{"class":55},[49,40436,40437],{"class":51,"line":16853},[49,40438,39029],{"class":283},[49,40440,40441,40443,40445],{"class":51,"line":16859},[49,40442,39034],{"class":55},[49,40444,415],{"class":66},[49,40446,81],{"class":55},[49,40448,40449],{"class":51,"line":16873},[49,40450,39043],{"class":283},[49,40452,40453,40455,40457],{"class":51,"line":16886},[49,40454,39048],{"class":59},[49,40456,38977],{"class":66},[49,40458,39053],{"class":55},[49,40460,40461],{"class":51,"line":16891},[49,40462,39058],{"class":283},[49,40464,40465],{"class":51,"line":16905},[49,40466,39063],{"class":283},[49,40468,40469,40471,40473,40475,40477],{"class":51,"line":16910},[49,40470,39068],{"class":55},[49,40472,415],{"class":66},[49,40474,76],{"class":55},[49,40476,39075],{"class":66},[49,40478,81],{"class":55},[49,40480,40481],{"class":51,"line":16916},[49,40482,39082],{"class":283},[49,40484,40485,40487,40489,40491,40493,40495],{"class":51,"line":16921},[49,40486,39010],{"class":59},[49,40488,39013],{"class":55},[49,40490,39016],{"class":59},[49,40492,39019],{"class":59},[49,40494,39022],{"class":66},[49,40496,3831],{"class":55},[49,40498,40499,40501,40503],{"class":51,"line":16935},[49,40500,39034],{"class":55},[49,40502,415],{"class":66},[49,40504,81],{"class":55},[49,40506,40507],{"class":51,"line":16940},[49,40508,2492],{"emptyLinePlaceholder":151},[49,40510,40511],{"class":51,"line":16945},[49,40512,35254],{"class":283},[49,40514,40515,40517,40519],{"class":51,"line":16959},[49,40516,30890],{"class":59},[49,40518,31182],{"class":2055},[49,40520,31185],{"class":55},[49,40522,40523,40525,40527,40529],{"class":51,"line":16971},[49,40524,31190],{"class":55},[49,40526,60],{"class":59},[49,40528,30912],{"class":66},[49,40530,39131],{"class":55},[49,40532,40533,40535,40537,40539],{"class":51,"line":16976},[49,40534,31190],{"class":55},[49,40536,60],{"class":59},[49,40538,30912],{"class":66},[49,40540,39142],{"class":55},[49,40542,40543,40545,40547,40549],{"class":51,"line":16989},[49,40544,31190],{"class":55},[49,40546,60],{"class":59},[49,40548,30912],{"class":66},[49,40550,39153],{"class":55},[49,40552,40553,40555,40557,40559],{"class":51,"line":16994},[49,40554,31190],{"class":55},[49,40556,60],{"class":59},[49,40558,30912],{"class":66},[49,40560,39164],{"class":55},[49,40562,40563,40565,40567,40569],{"class":51,"line":16999},[49,40564,31190],{"class":55},[49,40566,60],{"class":59},[49,40568,30912],{"class":66},[49,40570,39175],{"class":55},[49,40572,40573,40575,40577,40579],{"class":51,"line":17004},[49,40574,31190],{"class":55},[49,40576,60],{"class":59},[49,40578,30912],{"class":66},[49,40580,39186],{"class":55},[49,40582,40583,40585],{"class":51,"line":17017},[49,40584,14842],{"class":59},[49,40586,31298],{"class":55},[49,40588,40589],{"class":51,"line":17022},[49,40590,2492],{"emptyLinePlaceholder":151},[49,40592,40593],{"class":51,"line":32722},[49,40594,39201],{"class":283},[49,40596,40597,40599,40601,40603,40605],{"class":51,"line":32728},[49,40598,1623],{"class":59},[49,40600,31309],{"class":66},[49,40602,3041],{"class":59},[49,40604,39212],{"class":328},[49,40606,3831],{"class":55},[49,40608,40609,40611,40613,40615,40617,40619,40621,40623,40625],{"class":51,"line":32734},[49,40610,31326],{"class":55},[49,40612,60],{"class":59},[49,40614,30540],{"class":55},[49,40616,31333],{"class":328},[49,40618,1796],{"class":59},[49,40620,31338],{"class":55},[49,40622,1793],{"class":59},[49,40624,30565],{"class":328},[49,40626,81],{"class":55},[49,40628,40629,40631],{"class":51,"line":32740},[49,40630,31388],{"class":66},[49,40632,30574],{"class":55},[49,40634,40635,40637,40639],{"class":51,"line":32746},[49,40636,31378],{"class":55},[49,40638,60],{"class":59},[49,40640,39249],{"class":55},[49,40642,40643,40645,40647,40649,40651,40653,40655,40657],{"class":51,"line":32757},[49,40644,31388],{"class":66},[49,40646,31391],{"class":55},[49,40648,441],{"class":66},[49,40650,76],{"class":55},[49,40652,31590],{"class":66},[49,40654,76],{"class":55},[49,40656,31590],{"class":66},[49,40658,31404],{"class":55},[178,40660,40661],{"start":109},[181,40662,40663],{},"测试代码",[39,40665,40667],{"className":41,"code":40666,"language":43,"meta":44,"style":44},"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",[46,40668,40669,40675,40685,40695,40699,40709,40720,40724,40728,40732,40740,40756,40766,40782,40792,40806,40810,40820,40830,40840,40846,40850,40854,40862,40866,40882,40890,40894,40898,40906,40914,40918,40922,40926,40930,40936,40940,40950,40958,40966,40970,40974,40978,40986,40990,41006,41010,41014,41018,41030,41034,41046,41050,41054,41066,41070,41080,41084,41088,41100,41104,41113,41117,41121,41129,41133,41141,41145,41149,41153,41157,41161,41177,41185,41189,41193,41241,41247,41251,41261,41269,41277,41281,41285,41289,41293,41301,41305,41321,41325,41333,41341],{"__ignoreMap":44},[49,40670,40671,40673],{"class":51,"line":52},[49,40672,30481],{"class":59},[49,40674,30484],{"class":55},[49,40676,40677,40679,40681,40683],{"class":51,"line":84},[49,40678,30481],{"class":59},[49,40680,31504],{"class":55},[49,40682,31472],{"class":59},[49,40684,31509],{"class":55},[49,40686,40687,40689,40691,40693],{"class":51,"line":109},[49,40688,30826],{"class":59},[49,40690,31487],{"class":55},[49,40692,30481],{"class":59},[49,40694,31492],{"class":55},[49,40696,40697],{"class":51,"line":120},[49,40698,34011],{"class":283},[49,40700,40701,40703,40705,40707],{"class":51,"line":135},[49,40702,30826],{"class":59},[49,40704,31457],{"class":55},[49,40706,30481],{"class":59},[49,40708,31462],{"class":55},[49,40710,40711,40713,40715,40717],{"class":51,"line":1306},[49,40712,30826],{"class":59},[49,40714,32003],{"class":55},[49,40716,30481],{"class":59},[49,40718,40719],{"class":66}," VGG16\n",[49,40721,40722],{"class":51,"line":1312},[49,40723,2492],{"emptyLinePlaceholder":151},[49,40725,40726],{"class":51,"line":1403},[49,40727,2492],{"emptyLinePlaceholder":151},[49,40729,40730],{"class":51,"line":1409},[49,40731,34040],{"class":283},[49,40733,40734,40736,40738],{"class":51,"line":1421},[49,40735,32036],{"class":59},[49,40737,34047],{"class":2055},[49,40739,32042],{"class":55},[49,40741,40742,40744,40746,40748,40750,40752,40754],{"class":51,"line":1704},[49,40743,34054],{"class":55},[49,40745,60],{"class":59},[49,40747,31544],{"class":55},[49,40749,31547],{"class":126},[49,40751,60],{"class":59},[49,40753,31552],{"class":328},[49,40755,31555],{"class":55},[49,40757,40758,40760,40762,40764],{"class":51,"line":1709},[49,40759,34071],{"class":126},[49,40761,60],{"class":59},[49,40763,34076],{"class":66},[49,40765,31555],{"class":55},[49,40767,40768,40770,40772,40774,40776,40778,40780],{"class":51,"line":1715},[49,40769,34083],{"class":126},[49,40771,60],{"class":59},[49,40773,31582],{"class":55},[49,40775,31585],{"class":126},[49,40777,60],{"class":59},[49,40779,31590],{"class":66},[49,40781,31593],{"class":55},[49,40783,40784,40786,40788,40790],{"class":51,"line":1720},[49,40785,34100],{"class":126},[49,40787,60],{"class":59},[49,40789,31565],{"class":66},[49,40791,81],{"class":55},[49,40793,40794,40796,40798,40800,40802,40804],{"class":51,"line":1734},[49,40795,34111],{"class":55},[49,40797,60],{"class":59},[49,40799,31623],{"class":55},[49,40801,31626],{"class":126},[49,40803,60],{"class":59},[49,40805,34122],{"class":55},[49,40807,40808],{"class":51,"line":1739},[49,40809,34127],{"class":283},[49,40811,40812,40814,40816,40818],{"class":51,"line":1745},[49,40813,34132],{"class":126},[49,40815,60],{"class":59},[49,40817,441],{"class":66},[49,40819,31555],{"class":55},[49,40821,40822,40824,40826,40828],{"class":51,"line":1766},[49,40823,34143],{"class":126},[49,40825,60],{"class":59},[49,40827,31565],{"class":66},[49,40829,31555],{"class":55},[49,40831,40832,40834,40836,40838],{"class":51,"line":1771},[49,40833,34154],{"class":126},[49,40835,60],{"class":59},[49,40837,415],{"class":66},[49,40839,81],{"class":55},[49,40841,40842,40844],{"class":51,"line":1785},[49,40843,4182],{"class":59},[49,40845,34167],{"class":55},[49,40847,40848],{"class":51,"line":1790},[49,40849,2492],{"emptyLinePlaceholder":151},[49,40851,40852],{"class":51,"line":1819},[49,40853,34176],{"class":283},[49,40855,40856,40858,40860],{"class":51,"line":1824},[49,40857,32036],{"class":59},[49,40859,34183],{"class":2055},[49,40861,34186],{"class":55},[49,40863,40864],{"class":51,"line":1841},[49,40865,34191],{"class":283},[49,40867,40868,40870,40872,40874,40876,40878,40880],{"class":51,"line":1846},[49,40869,31326],{"class":55},[49,40871,60],{"class":59},[49,40873,31333],{"class":328},[49,40875,1796],{"class":59},[49,40877,31338],{"class":55},[49,40879,1793],{"class":59},[49,40881,34208],{"class":328},[49,40883,40884,40886,40888],{"class":51,"line":1851},[49,40885,31378],{"class":55},[49,40887,60],{"class":59},[49,40889,32378],{"class":55},[49,40891,40892],{"class":51,"line":1856},[49,40893,2492],{"emptyLinePlaceholder":151},[49,40895,40896],{"class":51,"line":1870},[49,40897,34225],{"class":283},[49,40899,40900,40902,40904],{"class":51,"line":1875},[49,40901,34230],{"class":55},[49,40903,60],{"class":59},[49,40905,32431],{"class":66},[49,40907,40908,40910,40912],{"class":51,"line":2669},[49,40909,34239],{"class":55},[49,40911,60],{"class":59},[49,40913,3177],{"class":66},[49,40915,40916],{"class":51,"line":2683},[49,40917,2492],{"emptyLinePlaceholder":151},[49,40919,40920],{"class":51,"line":2691},[49,40921,34252],{"class":283},[49,40923,40924],{"class":51,"line":2696},[49,40925,34257],{"class":283},[49,40927,40928],{"class":51,"line":2702},[49,40929,34262],{"class":283},[49,40931,40932,40934],{"class":51,"line":2708},[49,40933,34267],{"class":59},[49,40935,32973],{"class":55},[49,40937,40938],{"class":51,"line":2713},[49,40939,34274],{"class":283},[49,40941,40942,40944,40946,40948],{"class":51,"line":8038},[49,40943,3495],{"class":59},[49,40945,34281],{"class":55},[49,40947,26134],{"class":59},[49,40949,34286],{"class":55},[49,40951,40952,40954,40956],{"class":51,"line":8062},[49,40953,34291],{"class":55},[49,40955,60],{"class":59},[49,40957,34296],{"class":55},[49,40959,40960,40962,40964],{"class":51,"line":8067},[49,40961,34301],{"class":55},[49,40963,60],{"class":59},[49,40965,34306],{"class":55},[49,40967,40968],{"class":51,"line":8073},[49,40969,34311],{"class":283},[49,40971,40972],{"class":51,"line":8100},[49,40973,32964],{"class":55},[49,40975,40976],{"class":51,"line":8105},[49,40977,34320],{"class":283},[49,40979,40980,40982,40984],{"class":51,"line":8111},[49,40981,32749],{"class":55},[49,40983,60],{"class":59},[49,40985,34329],{"class":55},[49,40987,40988],{"class":51,"line":8123},[49,40989,34334],{"class":283},[49,40991,40992,40994,40996,40998,41000,41002,41004],{"class":51,"line":8135},[49,40993,32766],{"class":55},[49,40995,60],{"class":59},[49,40997,32771],{"class":55},[49,40999,32774],{"class":126},[49,41001,60],{"class":59},[49,41003,441],{"class":66},[49,41005,81],{"class":55},[49,41007,41008],{"class":51,"line":8147},[49,41009,34355],{"class":283},[49,41011,41012],{"class":51,"line":9806},[49,41013,34360],{"class":283},[49,41015,41016],{"class":51,"line":9831},[49,41017,34365],{"class":283},[49,41019,41020,41022,41024,41026,41028],{"class":51,"line":9854},[49,41021,34370],{"class":55},[49,41023,9567],{"class":59},[49,41025,32876],{"class":55},[49,41027,3041],{"class":59},[49,41029,34379],{"class":55},[49,41031,41032],{"class":51,"line":9878},[49,41033,34384],{"class":283},[49,41035,41036,41038,41040,41042,41044],{"class":51,"line":9883},[49,41037,34389],{"class":55},[49,41039,9567],{"class":59},[49,41041,34394],{"class":55},[49,41043,415],{"class":66},[49,41045,81],{"class":55},[49,41047,41048],{"class":51,"line":9888},[49,41049,2492],{"emptyLinePlaceholder":151},[49,41051,41052],{"class":51,"line":9893},[49,41053,34407],{"class":283},[49,41055,41056,41058,41060,41062,41064],{"class":51,"line":9902},[49,41057,34412],{"class":55},[49,41059,60],{"class":59},[49,41061,34417],{"class":55},[49,41063,803],{"class":59},[49,41065,34422],{"class":55},[49,41067,41068],{"class":51,"line":9907},[49,41069,34427],{"class":283},[49,41071,41072,41074,41076,41078],{"class":51,"line":9913},[49,41073,32540],{"class":66},[49,41075,228],{"class":55},[49,41077,34436],{"class":328},[49,41079,34439],{"class":55},[49,41081,41082],{"class":51,"line":9934},[49,41083,2492],{"emptyLinePlaceholder":151},[49,41085,41086],{"class":51,"line":9940},[49,41087,34448],{"class":283},[49,41089,41090,41092,41094,41096,41098],{"class":51,"line":9954},[49,41091,1623],{"class":59},[49,41093,31309],{"class":66},[49,41095,3041],{"class":59},[49,41097,31314],{"class":328},[49,41099,3831],{"class":55},[49,41101,41102],{"class":51,"line":9960},[49,41103,34465],{"class":283},[49,41105,41106,41108,41110],{"class":51,"line":9987},[49,41107,31378],{"class":55},[49,41109,60],{"class":59},[49,41111,41112],{"class":55},"VGG16()\n",[49,41114,41115],{"class":51,"line":9996},[49,41116,34478],{"class":283},[49,41118,41119],{"class":51,"line":10002},[49,41120,34483],{"class":283},[49,41122,41123,41125,41127],{"class":51,"line":10010},[49,41124,34488],{"class":55},[49,41126,34491],{"class":328},[49,41128,30586],{"class":55},[49,41130,41131],{"class":51,"line":10015},[49,41132,34498],{"class":283},[49,41134,41135,41137,41139],{"class":51,"line":16694},[49,41136,34111],{"class":55},[49,41138,60],{"class":59},[49,41140,34507],{"class":55},[49,41142,41143],{"class":51,"line":16700},[49,41144,34512],{"class":283},[49,41146,41147],{"class":51,"line":16723},[49,41148,34517],{"class":55},[49,41150,41151],{"class":51,"line":16729},[49,41152,2492],{"emptyLinePlaceholder":151},[49,41154,41155],{"class":51,"line":16752},[49,41156,34526],{"class":283},[49,41158,41159],{"class":51,"line":16766},[49,41160,34531],{"class":283},[49,41162,41163,41165,41167,41169,41171,41173,41175],{"class":51,"line":16786},[49,41164,31326],{"class":55},[49,41166,60],{"class":59},[49,41168,31333],{"class":328},[49,41170,1796],{"class":59},[49,41172,31338],{"class":55},[49,41174,1793],{"class":59},[49,41176,34208],{"class":328},[49,41178,41179,41181,41183],{"class":51,"line":16792},[49,41180,31378],{"class":55},[49,41182,60],{"class":59},[49,41184,32378],{"class":55},[49,41186,41187],{"class":51,"line":16803},[49,41188,34560],{"class":283},[49,41190,41191],{"class":51,"line":16826},[49,41192,34565],{"class":283},[49,41194,41195,41197,41199,41201,41203,41205,41207,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239],{"class":51,"line":16848},[49,41196,34570],{"class":55},[49,41198,60],{"class":59},[49,41200,1109],{"class":55},[49,41202,34577],{"class":328},[49,41204,76],{"class":55},[49,41206,34582],{"class":328},[49,41208,76],{"class":55},[49,41210,34587],{"class":328},[49,41212,76],{"class":55},[49,41214,34592],{"class":328},[49,41216,76],{"class":55},[49,41218,34597],{"class":328},[49,41220,76],{"class":55},[49,41222,34602],{"class":328},[49,41224,76],{"class":55},[49,41226,34607],{"class":328},[49,41228,76],{"class":55},[49,41230,34612],{"class":328},[49,41232,76],{"class":55},[49,41234,34617],{"class":328},[49,41236,76],{"class":55},[49,41238,34622],{"class":328},[49,41240,33335],{"class":55},[49,41242,41243,41245],{"class":51,"line":16853},[49,41244,34267],{"class":59},[49,41246,32973],{"class":55},[49,41248,41249],{"class":51,"line":16859},[49,41250,34635],{"class":283},[49,41252,41253,41255,41257,41259],{"class":51,"line":16873},[49,41254,3495],{"class":59},[49,41256,34642],{"class":55},[49,41258,26134],{"class":59},[49,41260,34286],{"class":55},[49,41262,41263,41265,41267],{"class":51,"line":16886},[49,41264,32699],{"class":55},[49,41266,60],{"class":59},[49,41268,32704],{"class":55},[49,41270,41271,41273,41275],{"class":51,"line":16891},[49,41272,32714],{"class":55},[49,41274,60],{"class":59},[49,41276,32719],{"class":55},[49,41278,41279],{"class":51,"line":16905},[49,41280,2492],{"emptyLinePlaceholder":151},[49,41282,41283],{"class":51,"line":16910},[49,41284,34671],{"class":283},[49,41286,41287],{"class":51,"line":16916},[49,41288,32964],{"class":55},[49,41290,41291],{"class":51,"line":16921},[49,41292,34680],{"class":283},[49,41294,41295,41297,41299],{"class":51,"line":16935},[49,41296,32749],{"class":55},[49,41298,60],{"class":59},[49,41300,32754],{"class":55},[49,41302,41303],{"class":51,"line":16940},[49,41304,34693],{"class":283},[49,41306,41307,41309,41311,41313,41315,41317,41319],{"class":51,"line":16945},[49,41308,32766],{"class":55},[49,41310,60],{"class":59},[49,41312,32771],{"class":55},[49,41314,32774],{"class":126},[49,41316,60],{"class":59},[49,41318,441],{"class":66},[49,41320,81],{"class":55},[49,41322,41323],{"class":51,"line":16959},[49,41324,34714],{"class":283},[49,41326,41327,41329,41331],{"class":51,"line":16971},[49,41328,34719],{"class":55},[49,41330,60],{"class":59},[49,41332,34724],{"class":55},[49,41334,41335,41337,41339],{"class":51,"line":16976},[49,41336,34729],{"class":55},[49,41338,60],{"class":59},[49,41340,34734],{"class":55},[49,41342,41343,41345,41347,41349,41351,41353,41355,41357],{"class":51,"line":16989},[49,41344,34739],{"class":66},[49,41346,228],{"class":55},[49,41348,34744],{"class":328},[49,41350,34747],{"class":55},[49,41352,34750],{"class":328},[49,41354,76],{"class":55},[49,41356,34755],{"class":328},[49,41358,34758],{"class":55},[195,41360,41362],{"id":41361},"_23googlenet","2.3.GoogLeNet",[22088,41364,41366],{"id":41365},"_231原理","2.3.1.原理",[178,41368,41369],{},[181,41370,41371],{},"网络结构",[14,41373,41374],{},[1554,41375],{"alt":44,"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-023.png",[14,41378,41379],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41381,41382],{},[1554,41383],{"alt":44,"src":41384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41386,41387],{},[1554,41388],{"alt":44,"src":41389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41391,41392],{},[1554,41393],{"alt":44,"src":41394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[178,41396,41397],{"start":84},[181,41398,41399],{},"1x1卷积的优点",[14,41401,41402],{},[1554,41403],{"alt":44,"src":41404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[178,41406,41407],{"start":109},[181,41408,41409],{},"全局平均池化层优点",[14,41411,41412],{},[1554,41413],{"alt":44,"src":41414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41416,41417],{},[1554,41418],{"alt":44,"src":41419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[178,41421,41422],{"start":120},[181,41423,41424],{},"参数详细描述",[14,41426,41427],{},[1554,41428],{"alt":44,"src":41429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41431,41432],{},[1554,41433],{"alt":44,"src":41434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41436,41437],{},[1554,41438],{"alt":44,"src":41439},"\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,41441,41442],{},[1554,41443],{"alt":44,"src":41444},"\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,41446,41447],{},[1554,41448],{"alt":44,"src":41449},"\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,41451,41452],{},[1554,41453],{"alt":44,"src":41454},"\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,41456,41457],{},[1554,41458],{"alt":44,"src":41459},"\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,41461,41462],{},[1554,41463],{"alt":44,"src":41464},"\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,41466,41467],{},[1554,41468],{"alt":44,"src":41469},"\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,41471,41472],{},[1554,41473],{"alt":44,"src":41474},"\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,41476,41477],{},[1554,41478],{"alt":44,"src":41479},"\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,41481,41482],{},[1554,41483],{"alt":44,"src":41484},"\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,41486,41487],{},[1554,41488],{"alt":44,"src":41489},"\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,41491,41492],{},[1554,41493],{"alt":44,"src":41494},"\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,41496,41497],{},[1554,41498],{"alt":44,"src":41499},"\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,41501,41502],{},[1554,41503],{"alt":44,"src":41504},"\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,41506,41507],{},[1554,41508],{"alt":44,"src":41509},"\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,41511,41512],{},[1554,41513],{"alt":44,"src":41514},"\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,41516,41517],{},[1554,41518],{"alt":44,"src":41519},"\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,41521,41522],{},[1554,41523],{"alt":44,"src":41524},"\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,41526,41527],{},[1554,41528],{"alt":44,"src":41529},"\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",[22088,41531,41533],{"id":41532},"_232代码实现","2.3.2.代码实现",[178,41535,41536],{},[181,41537,30800],{},[14,41539,41540],{},"根据原理一步一步搭建即可",[39,41542,41544],{"className":41,"code":41543,"language":43,"meta":44,"style":44},"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",[46,41545,41546,41552,41562,41572,41576,41593,41602,41617,41627,41632,41665,41670,41707,41754,41759,41795,41842,41847,41852,41887,41919,41923,41931,41947,41971,41996,42017,42022,42037,42041,42045,42050,42067,42072,42081,42096,42107,42151,42155,42183,42187,42198,42226,42230,42267,42271,42299,42303,42314,42350,42382,42410,42414,42425,42459,42491,42523,42556,42590,42618,42622,42633,42666,42698,42712,42716,42729,42733,42738,42750,42758,42780,42785,42790,42795,42800,42805,42810,42824,42832,42841,42854,42869,42878,42882,42890,42901,42912,42923,42934,42945,42951,42955,42960,42972,42992,43001],{"__ignoreMap":44},[49,41547,41548,41550],{"class":51,"line":52},[49,41549,30481],{"class":59},[49,41551,30484],{"class":55},[49,41553,41554,41556,41558,41560],{"class":51,"line":84},[49,41555,30826],{"class":59},[49,41557,30829],{"class":55},[49,41559,30481],{"class":59},[49,41561,30834],{"class":55},[49,41563,41564,41566,41568,41570],{"class":51,"line":109},[49,41565,30826],{"class":59},[49,41567,30846],{"class":55},[49,41569,30481],{"class":59},[49,41571,30851],{"class":55},[49,41573,41574],{"class":51,"line":120},[49,41575,2492],{"emptyLinePlaceholder":151},[49,41577,41578,41580,41583,41585,41587,41589,41591],{"class":51,"line":135},[49,41579,14784],{"class":59},[49,41581,41582],{"class":2055}," Inception",[49,41584,228],{"class":55},[49,41586,30867],{"class":2055},[49,41588,777],{"class":55},[49,41590,30872],{"class":2055},[49,41592,30875],{"class":55},[49,41594,41595,41597,41599],{"class":51,"line":1306},[49,41596,30890],{"class":59},[49,41598,30893],{"class":66},[49,41600,41601],{"class":55},"(self,in_channels,c1,c2,c3,c4):\n",[49,41603,41604,41606,41609,41611,41613,41615],{"class":51,"line":1312},[49,41605,30906],{"class":66},[49,41607,41608],{"class":55},"(Inception,",[49,41610,30912],{"class":66},[49,41612,30915],{"class":55},[49,41614,30918],{"class":66},[49,41616,2068],{"class":55},[49,41618,41619,41621,41623,41625],{"class":51,"line":1403},[49,41620,30934],{"class":66},[49,41622,34860],{"class":55},[49,41624,60],{"class":59},[49,41626,34865],{"class":55},[49,41628,41629],{"class":51,"line":1409},[49,41630,41631],{"class":283},"        # 路线1：定义1*1卷积\n",[49,41633,41634,41636,41639,41641,41643,41645,41647,41650,41652,41654,41657,41659,41661,41663],{"class":51,"line":1421},[49,41635,30934],{"class":66},[49,41637,41638],{"class":55},".p1_1",[49,41640,60],{"class":59},[49,41642,30942],{"class":55},[49,41644,30945],{"class":126},[49,41646,60],{"class":59},[49,41648,41649],{"class":55},"in_channels,",[49,41651,30954],{"class":126},[49,41653,60],{"class":59},[49,41655,41656],{"class":55},"c1,",[49,41658,30963],{"class":126},[49,41660,60],{"class":59},[49,41662,441],{"class":66},[49,41664,81],{"class":55},[49,41666,41667],{"class":51,"line":1704},[49,41668,41669],{"class":283},"        # 路线2：定义1*1卷积和3*3\n",[49,41671,41672,41674,41677,41679,41681,41683,41685,41687,41689,41691,41694,41696,41699,41701,41703,41705],{"class":51,"line":1709},[49,41673,30934],{"class":66},[49,41675,41676],{"class":55},".p2_1",[49,41678,60],{"class":59},[49,41680,30942],{"class":55},[49,41682,30945],{"class":126},[49,41684,60],{"class":59},[49,41686,41649],{"class":55},[49,41688,30954],{"class":126},[49,41690,60],{"class":59},[49,41692,41693],{"class":55},"c2[",[49,41695,415],{"class":66},[49,41697,41698],{"class":55},"],",[49,41700,30963],{"class":126},[49,41702,60],{"class":59},[49,41704,441],{"class":66},[49,41706,81],{"class":55},[49,41708,41709,41711,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752],{"class":51,"line":1715},[49,41710,30934],{"class":66},[49,41712,41713],{"class":55},".p2_2",[49,41715,60],{"class":59},[49,41717,30942],{"class":55},[49,41719,30945],{"class":126},[49,41721,60],{"class":59},[49,41723,41693],{"class":55},[49,41725,415],{"class":66},[49,41727,41698],{"class":55},[49,41729,30954],{"class":126},[49,41731,60],{"class":59},[49,41733,41693],{"class":55},[49,41735,441],{"class":66},[49,41737,41698],{"class":55},[49,41739,30963],{"class":126},[49,41741,60],{"class":59},[49,41743,73],{"class":66},[49,41745,76],{"class":55},[49,41747,30972],{"class":126},[49,41749,60],{"class":59},[49,41751,441],{"class":66},[49,41753,81],{"class":55},[49,41755,41756],{"class":51,"line":1720},[49,41757,41758],{"class":283},"        # 路线3：定义1*1卷积和5*5\n",[49,41760,41761,41763,41766,41768,41770,41772,41774,41776,41778,41780,41783,41785,41787,41789,41791,41793],{"class":51,"line":1734},[49,41762,30934],{"class":66},[49,41764,41765],{"class":55},".p3_1",[49,41767,60],{"class":59},[49,41769,30942],{"class":55},[49,41771,30945],{"class":126},[49,41773,60],{"class":59},[49,41775,41649],{"class":55},[49,41777,30954],{"class":126},[49,41779,60],{"class":59},[49,41781,41782],{"class":55},"c3[",[49,41784,415],{"class":66},[49,41786,41698],{"class":55},[49,41788,30963],{"class":126},[49,41790,60],{"class":59},[49,41792,441],{"class":66},[49,41794,81],{"class":55},[49,41796,41797,41799,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840],{"class":51,"line":1739},[49,41798,30934],{"class":66},[49,41800,41801],{"class":55},".p3_2",[49,41803,60],{"class":59},[49,41805,30942],{"class":55},[49,41807,30945],{"class":126},[49,41809,60],{"class":59},[49,41811,41782],{"class":55},[49,41813,415],{"class":66},[49,41815,41698],{"class":55},[49,41817,30954],{"class":126},[49,41819,60],{"class":59},[49,41821,41782],{"class":55},[49,41823,441],{"class":66},[49,41825,41698],{"class":55},[49,41827,30963],{"class":126},[49,41829,60],{"class":59},[49,41831,541],{"class":66},[49,41833,76],{"class":55},[49,41835,30972],{"class":126},[49,41837,60],{"class":59},[49,41839,301],{"class":66},[49,41841,81],{"class":55},[49,41843,41844],{"class":51,"line":1745},[49,41845,41846],{"class":283},"        # 路线4：定义3*3最大池化和1*1卷积\n",[49,41848,41849],{"class":51,"line":1766},[49,41850,41851],{"class":283},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[49,41853,41854,41856,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881,41883,41885],{"class":51,"line":1771},[49,41855,30934],{"class":66},[49,41857,41858],{"class":55},".p4_1",[49,41860,60],{"class":59},[49,41862,34918],{"class":55},[49,41864,30963],{"class":126},[49,41866,60],{"class":59},[49,41868,73],{"class":66},[49,41870,76],{"class":55},[49,41872,31018],{"class":126},[49,41874,60],{"class":59},[49,41876,441],{"class":66},[49,41878,76],{"class":55},[49,41880,30972],{"class":126},[49,41882,60],{"class":59},[49,41884,441],{"class":66},[49,41886,81],{"class":55},[49,41888,41889,41891,41894,41896,41898,41900,41902,41904,41906,41908,41911,41913,41915,41917],{"class":51,"line":1785},[49,41890,30934],{"class":66},[49,41892,41893],{"class":55},".p4_2",[49,41895,60],{"class":59},[49,41897,30942],{"class":55},[49,41899,30945],{"class":126},[49,41901,60],{"class":59},[49,41903,41649],{"class":55},[49,41905,30954],{"class":126},[49,41907,60],{"class":59},[49,41909,41910],{"class":55},"c4,",[49,41912,30963],{"class":126},[49,41914,60],{"class":59},[49,41916,441],{"class":66},[49,41918,81],{"class":55},[49,41920,41921],{"class":51,"line":1790},[49,41922,2492],{"emptyLinePlaceholder":151},[49,41924,41925,41927,41929],{"class":51,"line":1819},[49,41926,30890],{"class":59},[49,41928,31182],{"class":2055},[49,41930,31185],{"class":55},[49,41932,41933,41936,41938,41940,41942,41944],{"class":51,"line":1824},[49,41934,41935],{"class":55},"        p1",[49,41937,60],{"class":59},[49,41939,30912],{"class":66},[49,41941,35273],{"class":55},[49,41943,30912],{"class":66},[49,41945,41946],{"class":55},".p1_1(x))\n",[49,41948,41949,41951,41953,41955,41957,41959,41962,41964,41966,41968],{"class":51,"line":1841},[49,41950,7175],{"class":55},[49,41952,60],{"class":59},[49,41954,30912],{"class":66},[49,41956,35273],{"class":55},[49,41958,30912],{"class":66},[49,41960,41961],{"class":55},".p2_2(",[49,41963,30912],{"class":66},[49,41965,35273],{"class":55},[49,41967,30912],{"class":66},[49,41969,41970],{"class":55},".p2_1(x))))\n",[49,41972,41973,41976,41978,41980,41982,41984,41987,41989,41991,41993],{"class":51,"line":1846},[49,41974,41975],{"class":55},"        p3",[49,41977,60],{"class":59},[49,41979,30912],{"class":66},[49,41981,35273],{"class":55},[49,41983,30912],{"class":66},[49,41985,41986],{"class":55},".p3_2(",[49,41988,30912],{"class":66},[49,41990,35273],{"class":55},[49,41992,30912],{"class":66},[49,41994,41995],{"class":55},".p3_1(x))))\n",[49,41997,41998,42001,42003,42005,42007,42009,42012,42014],{"class":51,"line":1851},[49,41999,42000],{"class":55},"        p4",[49,42002,60],{"class":59},[49,42004,30912],{"class":66},[49,42006,35273],{"class":55},[49,42008,30912],{"class":66},[49,42010,42011],{"class":55},".p4_2(",[49,42013,30912],{"class":66},[49,42015,42016],{"class":55},".p4_1(x)))\n",[49,42018,42019],{"class":51,"line":1856},[49,42020,42021],{"class":283},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[49,42023,42024,42026,42029,42031,42033,42035],{"class":51,"line":1870},[49,42025,14842],{"class":59},[49,42027,42028],{"class":55}," torch.cat((p1,p2,p3,p4),",[49,42030,32774],{"class":126},[49,42032,60],{"class":59},[49,42034,441],{"class":66},[49,42036,81],{"class":55},[49,42038,42039],{"class":51,"line":1875},[49,42040,2492],{"emptyLinePlaceholder":151},[49,42042,42043],{"class":51,"line":2669},[49,42044,2492],{"emptyLinePlaceholder":151},[49,42046,42047],{"class":51,"line":2683},[49,42048,42049],{"class":283},"# 搭建GoogLeNet网络\n",[49,42051,42052,42054,42057,42059,42061,42063,42065],{"class":51,"line":2691},[49,42053,14784],{"class":59},[49,42055,42056],{"class":2055}," GoogLeNet",[49,42058,228],{"class":55},[49,42060,30867],{"class":2055},[49,42062,777],{"class":55},[49,42064,30872],{"class":2055},[49,42066,30875],{"class":55},[49,42068,42069],{"class":51,"line":2696},[49,42070,42071],{"class":283},"    # 必须把Inception导入到里边\n",[49,42073,42074,42076,42078],{"class":51,"line":2702},[49,42075,30890],{"class":59},[49,42077,30893],{"class":66},[49,42079,42080],{"class":55},"(self,Inception):\n",[49,42082,42083,42085,42088,42090,42092,42094],{"class":51,"line":2708},[49,42084,30906],{"class":66},[49,42086,42087],{"class":55},"(GoogLeNet,",[49,42089,30912],{"class":66},[49,42091,30915],{"class":55},[49,42093,30918],{"class":66},[49,42095,2068],{"class":55},[49,42097,42098,42100,42103,42105],{"class":51,"line":2713},[49,42099,30934],{"class":66},[49,42101,42102],{"class":55},".b1",[49,42104,60],{"class":59},[49,42106,38098],{"class":55},[49,42108,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141,42143,42145,42147,42149],{"class":51,"line":8038},[49,42110,38103],{"class":55},[49,42112,30945],{"class":126},[49,42114,60],{"class":59},[49,42116,441],{"class":66},[49,42118,76],{"class":55},[49,42120,30954],{"class":126},[49,42122,60],{"class":59},[49,42124,427],{"class":66},[49,42126,76],{"class":55},[49,42128,30963],{"class":126},[49,42130,60],{"class":59},[49,42132,591],{"class":66},[49,42134,76],{"class":55},[49,42136,31018],{"class":126},[49,42138,60],{"class":59},[49,42140,301],{"class":66},[49,42142,76],{"class":55},[49,42144,30972],{"class":126},[49,42146,60],{"class":59},[49,42148,73],{"class":66},[49,42150,38136],{"class":55},[49,42152,42153],{"class":51,"line":8062},[49,42154,38141],{"class":55},[49,42156,42157,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181],{"class":51,"line":8067},[49,42158,38186],{"class":55},[49,42160,30963],{"class":126},[49,42162,60],{"class":59},[49,42164,73],{"class":66},[49,42166,76],{"class":55},[49,42168,31018],{"class":126},[49,42170,60],{"class":59},[49,42172,301],{"class":66},[49,42174,76],{"class":55},[49,42176,30972],{"class":126},[49,42178,60],{"class":59},[49,42180,441],{"class":66},[49,42182,81],{"class":55},[49,42184,42185],{"class":51,"line":8073},[49,42186,38215],{"class":55},[49,42188,42189,42191,42194,42196],{"class":51,"line":8100},[49,42190,30934],{"class":66},[49,42192,42193],{"class":55},".b2",[49,42195,60],{"class":59},[49,42197,38098],{"class":55},[49,42199,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224],{"class":51,"line":8105},[49,42201,38103],{"class":55},[49,42203,30945],{"class":126},[49,42205,60],{"class":59},[49,42207,427],{"class":66},[49,42209,76],{"class":55},[49,42211,30954],{"class":126},[49,42213,60],{"class":59},[49,42215,427],{"class":66},[49,42217,76],{"class":55},[49,42219,30963],{"class":126},[49,42221,60],{"class":59},[49,42223,441],{"class":66},[49,42225,38136],{"class":55},[49,42227,42228],{"class":51,"line":8111},[49,42229,38141],{"class":55},[49,42231,42232,42234,42236,42238,42240,42242,42244,42246,42249,42251,42253,42255,42257,42259,42261,42263,42265],{"class":51,"line":8123},[49,42233,38103],{"class":55},[49,42235,30945],{"class":126},[49,42237,60],{"class":59},[49,42239,427],{"class":66},[49,42241,76],{"class":55},[49,42243,30954],{"class":126},[49,42245,60],{"class":59},[49,42247,42248],{"class":66},"192",[49,42250,76],{"class":55},[49,42252,30963],{"class":126},[49,42254,60],{"class":59},[49,42256,73],{"class":66},[49,42258,76],{"class":55},[49,42260,30972],{"class":126},[49,42262,60],{"class":59},[49,42264,441],{"class":66},[49,42266,38136],{"class":55},[49,42268,42269],{"class":51,"line":8135},[49,42270,38141],{"class":55},[49,42272,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297],{"class":51,"line":8147},[49,42274,38186],{"class":55},[49,42276,30963],{"class":126},[49,42278,60],{"class":59},[49,42280,73],{"class":66},[49,42282,76],{"class":55},[49,42284,31018],{"class":126},[49,42286,60],{"class":59},[49,42288,301],{"class":66},[49,42290,76],{"class":55},[49,42292,30972],{"class":126},[49,42294,60],{"class":59},[49,42296,441],{"class":66},[49,42298,81],{"class":55},[49,42300,42301],{"class":51,"line":9806},[49,42302,38215],{"class":55},[49,42304,42305,42307,42310,42312],{"class":51,"line":9831},[49,42306,30934],{"class":66},[49,42308,42309],{"class":55},".b3",[49,42311,60],{"class":59},[49,42313,38098],{"class":55},[49,42315,42316,42319,42321,42323,42325,42328,42330,42332,42334,42337,42339,42341,42343,42346,42348],{"class":51,"line":9854},[49,42317,42318],{"class":55},"            Inception(",[49,42320,42248],{"class":66},[49,42322,76],{"class":55},[49,42324,427],{"class":66},[49,42326,42327],{"class":55},",(",[49,42329,433],{"class":66},[49,42331,76],{"class":55},[49,42333,32159],{"class":66},[49,42335,42336],{"class":55},"),(",[49,42338,820],{"class":66},[49,42340,76],{"class":55},[49,42342,421],{"class":66},[49,42344,42345],{"class":55},"),",[49,42347,421],{"class":66},[49,42349,38136],{"class":55},[49,42351,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380],{"class":51,"line":9878},[49,42353,42318],{"class":55},[49,42355,34959],{"class":66},[49,42357,76],{"class":55},[49,42359,32159],{"class":66},[49,42361,42327],{"class":55},[49,42363,32159],{"class":66},[49,42365,76],{"class":55},[49,42367,42248],{"class":66},[49,42369,42336],{"class":55},[49,42371,421],{"class":66},[49,42373,76],{"class":55},[49,42375,433],{"class":66},[49,42377,42345],{"class":55},[49,42379,427],{"class":66},[49,42381,38136],{"class":55},[49,42383,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406,42408],{"class":51,"line":9883},[49,42385,38186],{"class":55},[49,42387,30963],{"class":126},[49,42389,60],{"class":59},[49,42391,73],{"class":66},[49,42393,76],{"class":55},[49,42395,31018],{"class":126},[49,42397,60],{"class":59},[49,42399,301],{"class":66},[49,42401,76],{"class":55},[49,42403,30972],{"class":126},[49,42405,60],{"class":59},[49,42407,441],{"class":66},[49,42409,81],{"class":55},[49,42411,42412],{"class":51,"line":9888},[49,42413,38215],{"class":55},[49,42415,42416,42418,42421,42423],{"class":51,"line":9893},[49,42417,30934],{"class":66},[49,42419,42420],{"class":55},".b4",[49,42422,60],{"class":59},[49,42424,38098],{"class":55},[49,42426,42427,42429,42432,42434,42436,42438,42440,42442,42445,42447,42449,42451,42453,42455,42457],{"class":51,"line":9902},[49,42428,42318],{"class":55},[49,42430,42431],{"class":66},"480",[49,42433,76],{"class":55},[49,42435,42248],{"class":66},[49,42437,42327],{"class":55},[49,42439,433],{"class":66},[49,42441,76],{"class":55},[49,42443,42444],{"class":66},"208",[49,42446,42336],{"class":55},[49,42448,820],{"class":66},[49,42450,76],{"class":55},[49,42452,826],{"class":66},[49,42454,42345],{"class":55},[49,42456,427],{"class":66},[49,42458,38136],{"class":55},[49,42460,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481,42483,42485,42487,42489],{"class":51,"line":9907},[49,42462,42318],{"class":55},[49,42464,38546],{"class":66},[49,42466,76],{"class":55},[49,42468,21138],{"class":66},[49,42470,42327],{"class":55},[49,42472,837],{"class":66},[49,42474,76],{"class":55},[49,42476,31590],{"class":66},[49,42478,42336],{"class":55},[49,42480,1019],{"class":66},[49,42482,76],{"class":55},[49,42484,427],{"class":66},[49,42486,42345],{"class":55},[49,42488,427],{"class":66},[49,42490,38136],{"class":55},[49,42492,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521],{"class":51,"line":9913},[49,42494,42318],{"class":55},[49,42496,38546],{"class":66},[49,42498,76],{"class":55},[49,42500,32159],{"class":66},[49,42502,42327],{"class":55},[49,42504,32159],{"class":66},[49,42506,76],{"class":55},[49,42508,34959],{"class":66},[49,42510,42336],{"class":55},[49,42512,1019],{"class":66},[49,42514,76],{"class":55},[49,42516,427],{"class":66},[49,42518,42345],{"class":55},[49,42520,427],{"class":66},[49,42522,38136],{"class":55},[49,42524,42525,42527,42529,42531,42533,42535,42537,42539,42542,42544,42546,42548,42550,42552,42554],{"class":51,"line":9934},[49,42526,42318],{"class":55},[49,42528,38546],{"class":66},[49,42530,76],{"class":55},[49,42532,837],{"class":66},[49,42534,42327],{"class":55},[49,42536,32159],{"class":66},[49,42538,76],{"class":55},[49,42540,42541],{"class":66},"288",[49,42543,42336],{"class":55},[49,42545,421],{"class":66},[49,42547,76],{"class":55},[49,42549,427],{"class":66},[49,42551,42345],{"class":55},[49,42553,427],{"class":66},[49,42555,38136],{"class":55},[49,42557,42558,42560,42563,42565,42567,42569,42571,42573,42576,42578,42580,42582,42584,42586,42588],{"class":51,"line":9940},[49,42559,42318],{"class":55},[49,42561,42562],{"class":66},"528",[49,42564,76],{"class":55},[49,42566,34959],{"class":66},[49,42568,42327],{"class":55},[49,42570,21138],{"class":66},[49,42572,76],{"class":55},[49,42574,42575],{"class":66},"320",[49,42577,42336],{"class":55},[49,42579,421],{"class":66},[49,42581,76],{"class":55},[49,42583,32159],{"class":66},[49,42585,42345],{"class":55},[49,42587,32159],{"class":66},[49,42589,38136],{"class":55},[49,42591,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616],{"class":51,"line":9954},[49,42593,38186],{"class":55},[49,42595,30963],{"class":126},[49,42597,60],{"class":59},[49,42599,73],{"class":66},[49,42601,76],{"class":55},[49,42603,31018],{"class":126},[49,42605,60],{"class":59},[49,42607,301],{"class":66},[49,42609,76],{"class":55},[49,42611,30972],{"class":126},[49,42613,60],{"class":59},[49,42615,441],{"class":66},[49,42617,81],{"class":55},[49,42619,42620],{"class":51,"line":9960},[49,42621,38215],{"class":55},[49,42623,42624,42626,42629,42631],{"class":51,"line":9987},[49,42625,30934],{"class":66},[49,42627,42628],{"class":55},".b5",[49,42630,60],{"class":59},[49,42632,38098],{"class":55},[49,42634,42635,42637,42640,42642,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664],{"class":51,"line":9996},[49,42636,42318],{"class":55},[49,42638,42639],{"class":66},"832",[49,42641,76],{"class":55},[49,42643,34959],{"class":66},[49,42645,42327],{"class":55},[49,42647,21138],{"class":66},[49,42649,76],{"class":55},[49,42651,42575],{"class":66},[49,42653,42336],{"class":55},[49,42655,421],{"class":66},[49,42657,76],{"class":55},[49,42659,32159],{"class":66},[49,42661,42345],{"class":55},[49,42663,32159],{"class":66},[49,42665,38136],{"class":55},[49,42667,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696],{"class":51,"line":10002},[49,42669,42318],{"class":55},[49,42671,42639],{"class":66},[49,42673,76],{"class":55},[49,42675,35029],{"class":66},[49,42677,42327],{"class":55},[49,42679,42248],{"class":66},[49,42681,76],{"class":55},[49,42683,35029],{"class":66},[49,42685,42336],{"class":55},[49,42687,826],{"class":66},[49,42689,76],{"class":55},[49,42691,32159],{"class":66},[49,42693,42345],{"class":55},[49,42695,32159],{"class":66},[49,42697,38136],{"class":55},[49,42699,42700,42703,42705,42707,42709],{"class":51,"line":10010},[49,42701,42702],{"class":55},"            nn.AdaptiveAvgPool2d((",[49,42704,441],{"class":66},[49,42706,76],{"class":55},[49,42708,441],{"class":66},[49,42710,42711],{"class":55},")),\n",[49,42713,42714],{"class":51,"line":10015},[49,42715,38879],{"class":55},[49,42717,42718,42720,42723,42725,42727],{"class":51,"line":16694},[49,42719,38884],{"class":55},[49,42721,42722],{"class":66},"1024",[49,42724,76],{"class":55},[49,42726,95],{"class":66},[49,42728,81],{"class":55},[49,42730,42731],{"class":51,"line":16700},[49,42732,38215],{"class":55},[49,42734,42735],{"class":51,"line":16723},[49,42736,42737],{"class":283},"        # 对模型参数初始化\n",[49,42739,42740,42742,42744,42746,42748],{"class":51,"line":16729},[49,42741,3495],{"class":59},[49,42743,38957],{"class":55},[49,42745,26134],{"class":59},[49,42747,38962],{"class":66},[49,42749,38965],{"class":55},[49,42751,42752,42754,42756],{"class":51,"line":16752},[49,42753,4734],{"class":59},[49,42755,38977],{"class":66},[49,42757,38980],{"class":55},[49,42759,42760,42762,42765,42767,42770,42772,42774,42776,42778],{"class":51,"line":16766},[49,42761,38990],{"class":55},[49,42763,42764],{"class":126},"mode",[49,42766,60],{"class":59},[49,42768,42769],{"class":328},"'fan_out'",[49,42771,76],{"class":55},[49,42773,38993],{"class":126},[49,42775,60],{"class":59},[49,42777,38998],{"class":328},[49,42779,81],{"class":55},[49,42781,42782],{"class":51,"line":16786},[49,42783,42784],{"class":283},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[49,42786,42787],{"class":51,"line":16792},[49,42788,42789],{"class":283},"                # ② mode = 'fan_out'决定使用的fan值：\n",[49,42791,42792],{"class":51,"line":16803},[49,42793,42794],{"class":283},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[49,42796,42797],{"class":51,"line":16826},[49,42798,42799],{"class":283},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[49,42801,42802],{"class":51,"line":16848},[49,42803,42804],{"class":283},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[49,42806,42807],{"class":51,"line":16853},[49,42808,42809],{"class":283},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[49,42811,42812,42814,42816,42818,42820,42822],{"class":51,"line":16859},[49,42813,39010],{"class":59},[49,42815,39013],{"class":55},[49,42817,39016],{"class":59},[49,42819,39019],{"class":59},[49,42821,39022],{"class":66},[49,42823,3831],{"class":55},[49,42825,42826,42828,42830],{"class":51,"line":16873},[49,42827,39034],{"class":55},[49,42829,415],{"class":66},[49,42831,81],{"class":55},[49,42833,42834,42837,42839],{"class":51,"line":16886},[49,42835,42836],{"class":59},"                elif",[49,42838,38977],{"class":66},[49,42840,39053],{"class":55},[49,42842,42843,42846,42848,42850,42852],{"class":51,"line":16891},[49,42844,42845],{"class":55},"                    nn.init.normal_(m.weight,",[49,42847,415],{"class":66},[49,42849,76],{"class":55},[49,42851,39075],{"class":66},[49,42853,81],{"class":55},[49,42855,42856,42859,42861,42863,42865,42867],{"class":51,"line":16905},[49,42857,42858],{"class":59},"                    if",[49,42860,39013],{"class":55},[49,42862,39016],{"class":59},[49,42864,39019],{"class":59},[49,42866,39022],{"class":66},[49,42868,3831],{"class":55},[49,42870,42871,42874,42876],{"class":51,"line":16910},[49,42872,42873],{"class":55},"                        nn.init.constant_(m.bias,",[49,42875,415],{"class":66},[49,42877,81],{"class":55},[49,42879,42880],{"class":51,"line":16916},[49,42881,35254],{"class":283},[49,42883,42884,42886,42888],{"class":51,"line":16921},[49,42885,30890],{"class":59},[49,42887,31182],{"class":2055},[49,42889,31185],{"class":55},[49,42891,42892,42894,42896,42898],{"class":51,"line":16935},[49,42893,31190],{"class":55},[49,42895,60],{"class":59},[49,42897,30912],{"class":66},[49,42899,42900],{"class":55},".b1(x)\n",[49,42902,42903,42905,42907,42909],{"class":51,"line":16940},[49,42904,31190],{"class":55},[49,42906,60],{"class":59},[49,42908,30912],{"class":66},[49,42910,42911],{"class":55},".b2(x)\n",[49,42913,42914,42916,42918,42920],{"class":51,"line":16945},[49,42915,31190],{"class":55},[49,42917,60],{"class":59},[49,42919,30912],{"class":66},[49,42921,42922],{"class":55},".b3(x)\n",[49,42924,42925,42927,42929,42931],{"class":51,"line":16959},[49,42926,31190],{"class":55},[49,42928,60],{"class":59},[49,42930,30912],{"class":66},[49,42932,42933],{"class":55},".b4(x)\n",[49,42935,42936,42938,42940,42942],{"class":51,"line":16971},[49,42937,31190],{"class":55},[49,42939,60],{"class":59},[49,42941,30912],{"class":66},[49,42943,42944],{"class":55},".b5(x)\n",[49,42946,42947,42949],{"class":51,"line":16976},[49,42948,14842],{"class":59},[49,42950,31298],{"class":55},[49,42952,42953],{"class":51,"line":16989},[49,42954,2492],{"emptyLinePlaceholder":151},[49,42956,42957],{"class":51,"line":16994},[49,42958,42959],{"class":283},"# 模型展示\n",[49,42961,42962,42964,42966,42968,42970],{"class":51,"line":16999},[49,42963,1623],{"class":59},[49,42965,31309],{"class":66},[49,42967,3041],{"class":59},[49,42969,31314],{"class":328},[49,42971,3831],{"class":55},[49,42973,42974,42976,42978,42980,42982,42984,42986,42988,42990],{"class":51,"line":17004},[49,42975,31326],{"class":55},[49,42977,60],{"class":59},[49,42979,30540],{"class":55},[49,42981,31333],{"class":328},[49,42983,1796],{"class":59},[49,42985,31338],{"class":55},[49,42987,1793],{"class":59},[49,42989,30565],{"class":328},[49,42991,81],{"class":55},[49,42993,42994,42996,42998],{"class":51,"line":17017},[49,42995,31378],{"class":55},[49,42997,60],{"class":59},[49,42999,43000],{"class":55},"GoogLeNet(Inception).to(device)\n",[49,43002,43003,43005,43007,43009,43011,43013,43015,43017],{"class":51,"line":17022},[49,43004,31388],{"class":66},[49,43006,31391],{"class":55},[49,43008,441],{"class":66},[49,43010,76],{"class":55},[49,43012,31590],{"class":66},[49,43014,76],{"class":55},[49,43016,31590],{"class":66},[49,43018,31404],{"class":55},[178,43020,43021],{"start":84},[181,43022,39272],{},[39,43024,43026],{"className":41,"code":43025,"language":43,"meta":44,"style":44},"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",[46,43027,43028,43034,43040,43050,43056,43066,43076,43086,43096,43106,43110,43121,43131,43135,43139,43143,43151,43163,43173,43189,43199,43231,43245,43255,43265,43269,43279,43293,43303,43313,43323,43329,43333,43337,43341,43345,43349,43357,43377,43381,43385,43389,43393,43397,43413,43417,43421,43429,43433,43437,43445,43449,43453,43457,43465,43469,43473,43477,43481,43489,43493,43501,43505,43513,43517,43525,43529,43537,43541,43545,43553,43557,43561,43565,43577,43601,43615,43619,43623,43627,43635,43639,43647,43651,43659,43663,43671,43675,43683,43687,43695,43699,43711,43715,43723,43727,43735,43739,43743,43747,43751,43759,43763,43779,43783,43791,43795,43799,43803,43807,43811,43815,43819,43835,43839,43851,43855,43867,43871,43883,43887,43895,43899,43907,43911,43915,43919,43925,43929,43937,43941,43957,43961,43969,43973,43989,44001,44005,44017,44021,44025,44033,44037,44041,44049,44053,44061,44065,44073,44077,44081,44123,44165,44169,44173,44189,44193,44209,44213,44217,44225,44229,44233,44245,44283,44287,44291,44299,44303,44317,44327,44333,44339,44345,44351,44355,44359,44365,44369,44373,44381,44385,44403,44407,44411,44415,44431,44435,44439,44443,44447,44451,44471,44491,44495,44499,44503,44511,44519,44523,44539,44559,44579,44583,44587,44595,44603,44607,44611,44615,44627,44631,44641,44649,44666],{"__ignoreMap":44},[49,43029,43030,43032],{"class":51,"line":52},[49,43031,30481],{"class":59},[49,43033,31911],{"class":55},[49,43035,43036,43038],{"class":51,"line":84},[49,43037,30481],{"class":59},[49,43039,31918],{"class":55},[49,43041,43042,43044,43046,43048],{"class":51,"line":109},[49,43043,30481],{"class":59},[49,43045,31929],{"class":55},[49,43047,31472],{"class":59},[49,43049,31934],{"class":55},[49,43051,43052,43054],{"class":51,"line":120},[49,43053,30481],{"class":59},[49,43055,30484],{"class":55},[49,43057,43058,43060,43062,43064],{"class":51,"line":135},[49,43059,30826],{"class":59},[49,43061,31504],{"class":55},[49,43063,30481],{"class":59},[49,43065,31951],{"class":55},[49,43067,43068,43070,43072,43074],{"class":51,"line":1306},[49,43069,30826],{"class":59},[49,43071,31457],{"class":55},[49,43073,30481],{"class":59},[49,43075,31462],{"class":55},[49,43077,43078,43080,43082,43084],{"class":51,"line":1312},[49,43079,30826],{"class":59},[49,43081,31487],{"class":55},[49,43083,30481],{"class":59},[49,43085,31492],{"class":55},[49,43087,43088,43090,43092,43094],{"class":51,"line":1403},[49,43089,30481],{"class":59},[49,43091,31504],{"class":55},[49,43093,31472],{"class":59},[49,43095,31509],{"class":55},[49,43097,43098,43100,43102,43104],{"class":51,"line":1409},[49,43099,30481],{"class":59},[49,43101,31521],{"class":55},[49,43103,31472],{"class":59},[49,43105,31526],{"class":55},[49,43107,43108],{"class":51,"line":1421},[49,43109,31996],{"class":283},[49,43111,43112,43114,43116,43118],{"class":51,"line":1704},[49,43113,30826],{"class":59},[49,43115,32003],{"class":55},[49,43117,30481],{"class":59},[49,43119,43120],{"class":55}," GoogLeNet, Inception\n",[49,43122,43123,43125,43127,43129],{"class":51,"line":1709},[49,43124,30826],{"class":59},[49,43126,30829],{"class":55},[49,43128,30481],{"class":59},[49,43130,30834],{"class":55},[49,43132,43133],{"class":51,"line":1715},[49,43134,2492],{"emptyLinePlaceholder":151},[49,43136,43137],{"class":51,"line":1720},[49,43138,2492],{"emptyLinePlaceholder":151},[49,43140,43141],{"class":51,"line":1734},[49,43142,32031],{"class":283},[49,43144,43145,43147,43149],{"class":51,"line":1739},[49,43146,32036],{"class":59},[49,43148,32039],{"class":2055},[49,43150,32042],{"class":55},[49,43152,43153,43155,43157,43159,43161],{"class":51,"line":1745},[49,43154,32047],{"class":55},[49,43156,60],{"class":59},[49,43158,31544],{"class":55},[49,43160,31552],{"class":328},[49,43162,31555],{"class":55},[49,43164,43165,43167,43169,43171],{"class":51,"line":1766},[49,43166,32060],{"class":126},[49,43168,60],{"class":59},[49,43170,31565],{"class":66},[49,43172,31555],{"class":55},[49,43174,43175,43177,43179,43181,43183,43185,43187],{"class":51,"line":1771},[49,43176,32071],{"class":126},[49,43178,60],{"class":59},[49,43180,31582],{"class":55},[49,43182,31585],{"class":126},[49,43184,60],{"class":59},[49,43186,35538],{"class":66},[49,43188,31593],{"class":55},[49,43190,43191,43193,43195,43197],{"class":51,"line":1785},[49,43192,32088],{"class":126},[49,43194,60],{"class":59},[49,43196,31565],{"class":66},[49,43198,81],{"class":55},[49,43200,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221,43223,43225,43227,43229],{"class":51,"line":1790},[49,43202,32099],{"class":55},[49,43204,60],{"class":59},[49,43206,32104],{"class":55},[49,43208,32107],{"class":66},[49,43210,228],{"class":55},[49,43212,32112],{"class":66},[49,43214,674],{"class":59},[49,43216,7448],{"class":66},[49,43218,32119],{"class":55},[49,43220,32107],{"class":66},[49,43222,228],{"class":55},[49,43224,32126],{"class":66},[49,43226,674],{"class":59},[49,43228,7448],{"class":66},[49,43230,32133],{"class":55},[49,43232,43233,43235,43237,43239,43241,43243],{"class":51,"line":1819},[49,43234,32138],{"class":55},[49,43236,60],{"class":59},[49,43238,32143],{"class":55},[49,43240,31626],{"class":126},[49,43242,60],{"class":59},[49,43244,31631],{"class":55},[49,43246,43247,43249,43251,43253],{"class":51,"line":1824},[49,43248,32154],{"class":126},[49,43250,60],{"class":59},[49,43252,421],{"class":66},[49,43254,31555],{"class":55},[49,43256,43257,43259,43261,43263],{"class":51,"line":1841},[49,43258,32166],{"class":126},[49,43260,60],{"class":59},[49,43262,31565],{"class":66},[49,43264,31555],{"class":55},[49,43266,43267],{"class":51,"line":1846},[49,43268,32177],{"class":283},[49,43270,43271,43273,43275,43277],{"class":51,"line":1851},[49,43272,32182],{"class":126},[49,43274,60],{"class":59},[49,43276,616],{"class":66},[49,43278,81],{"class":55},[49,43280,43281,43283,43285,43287,43289,43291],{"class":51,"line":1856},[49,43282,32193],{"class":55},[49,43284,60],{"class":59},[49,43286,31623],{"class":55},[49,43288,31626],{"class":126},[49,43290,60],{"class":59},[49,43292,32204],{"class":55},[49,43294,43295,43297,43299,43301],{"class":51,"line":1870},[49,43296,32209],{"class":126},[49,43298,60],{"class":59},[49,43300,421],{"class":66},[49,43302,31555],{"class":55},[49,43304,43305,43307,43309,43311],{"class":51,"line":1875},[49,43306,32220],{"class":126},[49,43308,60],{"class":59},[49,43310,31565],{"class":66},[49,43312,31555],{"class":55},[49,43314,43315,43317,43319,43321],{"class":51,"line":2669},[49,43316,32231],{"class":126},[49,43318,60],{"class":59},[49,43320,616],{"class":66},[49,43322,81],{"class":55},[49,43324,43325,43327],{"class":51,"line":2683},[49,43326,4182],{"class":59},[49,43328,32244],{"class":55},[49,43330,43331],{"class":51,"line":2691},[49,43332,2492],{"emptyLinePlaceholder":151},[49,43334,43335],{"class":51,"line":2696},[49,43336,32253],{"class":283},[49,43338,43339],{"class":51,"line":2702},[49,43340,32258],{"class":283},[49,43342,43343],{"class":51,"line":2708},[49,43344,2492],{"emptyLinePlaceholder":151},[49,43346,43347],{"class":51,"line":2713},[49,43348,32267],{"class":283},[49,43350,43351,43353,43355],{"class":51,"line":8038},[49,43352,32036],{"class":59},[49,43354,32274],{"class":2055},[49,43356,32277],{"class":55},[49,43358,43359,43361,43363,43365,43367,43369,43371,43373,43375],{"class":51,"line":8062},[49,43360,31326],{"class":55},[49,43362,60],{"class":59},[49,43364,30540],{"class":55},[49,43366,31333],{"class":328},[49,43368,1796],{"class":59},[49,43370,31338],{"class":55},[49,43372,1793],{"class":59},[49,43374,32296],{"class":328},[49,43376,81],{"class":55},[49,43378,43379],{"class":51,"line":8067},[49,43380,2492],{"emptyLinePlaceholder":151},[49,43382,43383],{"class":51,"line":8073},[49,43384,2492],{"emptyLinePlaceholder":151},[49,43386,43387],{"class":51,"line":8100},[49,43388,32311],{"class":283},[49,43390,43391],{"class":51,"line":8105},[49,43392,32316],{"class":283},[49,43394,43395],{"class":51,"line":8111},[49,43396,32321],{"class":283},[49,43398,43399,43401,43403,43405,43407,43409,43411],{"class":51,"line":8123},[49,43400,32326],{"class":55},[49,43402,60],{"class":59},[49,43404,32331],{"class":55},[49,43406,32334],{"class":126},[49,43408,60],{"class":59},[49,43410,32339],{"class":66},[49,43412,81],{"class":55},[49,43414,43415],{"class":51,"line":8135},[49,43416,2492],{"emptyLinePlaceholder":151},[49,43418,43419],{"class":51,"line":8147},[49,43420,32350],{"class":283},[49,43422,43423,43425,43427],{"class":51,"line":9806},[49,43424,32355],{"class":55},[49,43426,60],{"class":59},[49,43428,32360],{"class":55},[49,43430,43431],{"class":51,"line":9831},[49,43432,2492],{"emptyLinePlaceholder":151},[49,43434,43435],{"class":51,"line":9854},[49,43436,32369],{"class":283},[49,43438,43439,43441,43443],{"class":51,"line":9878},[49,43440,31378],{"class":55},[49,43442,60],{"class":59},[49,43444,32378],{"class":55},[49,43446,43447],{"class":51,"line":9883},[49,43448,32383],{"class":283},[49,43450,43451],{"class":51,"line":9888},[49,43452,32388],{"class":283},[49,43454,43455],{"class":51,"line":9893},[49,43456,32393],{"class":283},[49,43458,43459,43461,43463],{"class":51,"line":9902},[49,43460,32398],{"class":55},[49,43462,60],{"class":59},[49,43464,32403],{"class":55},[49,43466,43467],{"class":51,"line":9907},[49,43468,2492],{"emptyLinePlaceholder":151},[49,43470,43471],{"class":51,"line":9913},[49,43472,2492],{"emptyLinePlaceholder":151},[49,43474,43475],{"class":51,"line":9934},[49,43476,32416],{"class":283},[49,43478,43479],{"class":51,"line":9940},[49,43480,32421],{"class":283},[49,43482,43483,43485,43487],{"class":51,"line":9954},[49,43484,32426],{"class":55},[49,43486,60],{"class":59},[49,43488,32431],{"class":66},[49,43490,43491],{"class":51,"line":9960},[49,43492,32436],{"class":283},[49,43494,43495,43497,43499],{"class":51,"line":9987},[49,43496,32441],{"class":55},[49,43498,60],{"class":59},[49,43500,32446],{"class":55},[49,43502,43503],{"class":51,"line":9996},[49,43504,32451],{"class":283},[49,43506,43507,43509,43511],{"class":51,"line":10002},[49,43508,32456],{"class":55},[49,43510,60],{"class":59},[49,43512,32446],{"class":55},[49,43514,43515],{"class":51,"line":10010},[49,43516,32465],{"class":283},[49,43518,43519,43521,43523],{"class":51,"line":10015},[49,43520,32470],{"class":55},[49,43522,60],{"class":59},[49,43524,32446],{"class":55},[49,43526,43527],{"class":51,"line":16694},[49,43528,32479],{"class":283},[49,43530,43531,43533,43535],{"class":51,"line":16700},[49,43532,32484],{"class":55},[49,43534,60],{"class":59},[49,43536,32446],{"class":55},[49,43538,43539],{"class":51,"line":16723},[49,43540,2492],{"emptyLinePlaceholder":151},[49,43542,43543],{"class":51,"line":16729},[49,43544,32497],{"class":283},[49,43546,43547,43549,43551],{"class":51,"line":16752},[49,43548,32502],{"class":55},[49,43550,60],{"class":59},[49,43552,32507],{"class":55},[49,43554,43555],{"class":51,"line":16766},[49,43556,2492],{"emptyLinePlaceholder":151},[49,43558,43559],{"class":51,"line":16786},[49,43560,2492],{"emptyLinePlaceholder":151},[49,43562,43563],{"class":51,"line":16792},[49,43564,32520],{"class":283},[49,43566,43567,43569,43571,43573,43575],{"class":51,"line":16803},[49,43568,3293],{"class":59},[49,43570,32527],{"class":55},[49,43572,26134],{"class":59},[49,43574,32532],{"class":66},[49,43576,32535],{"class":55},[49,43578,43579,43581,43583,43585,43587,43589,43591,43593,43595,43597,43599],{"class":51,"line":16826},[49,43580,32540],{"class":66},[49,43582,228],{"class":55},[49,43584,32545],{"class":328},[49,43586,32548],{"class":66},[49,43588,803],{"class":328},[49,43590,32548],{"class":66},[49,43592,474],{"class":328},[49,43594,32557],{"class":55},[49,43596,751],{"class":59},[49,43598,441],{"class":66},[49,43600,30586],{"class":55},[49,43602,43603,43605,43607,43609,43611,43613],{"class":51,"line":16848},[49,43604,32540],{"class":66},[49,43606,228],{"class":55},[49,43608,32572],{"class":328},[49,43610,674],{"class":59},[49,43612,95],{"class":66},[49,43614,81],{"class":55},[49,43616,43617],{"class":51,"line":16853},[49,43618,2492],{"emptyLinePlaceholder":151},[49,43620,43621],{"class":51,"line":16859},[49,43622,32587],{"class":283},[49,43624,43625],{"class":51,"line":16873},[49,43626,32592],{"class":283},[49,43628,43629,43631,43633],{"class":51,"line":16886},[49,43630,32597],{"class":55},[49,43632,60],{"class":59},[49,43634,32431],{"class":66},[49,43636,43637],{"class":51,"line":16891},[49,43638,32606],{"class":283},[49,43640,43641,43643,43645],{"class":51,"line":16905},[49,43642,32611],{"class":55},[49,43644,60],{"class":59},[49,43646,3177],{"class":66},[49,43648,43649],{"class":51,"line":16910},[49,43650,32620],{"class":283},[49,43652,43653,43655,43657],{"class":51,"line":16916},[49,43654,32625],{"class":55},[49,43656,60],{"class":59},[49,43658,32431],{"class":66},[49,43660,43661],{"class":51,"line":16921},[49,43662,32634],{"class":283},[49,43664,43665,43667,43669],{"class":51,"line":16935},[49,43666,32639],{"class":55},[49,43668,60],{"class":59},[49,43670,3177],{"class":66},[49,43672,43673],{"class":51,"line":16940},[49,43674,32648],{"class":283},[49,43676,43677,43679,43681],{"class":51,"line":16945},[49,43678,32653],{"class":55},[49,43680,60],{"class":59},[49,43682,3177],{"class":66},[49,43684,43685],{"class":51,"line":16959},[49,43686,32662],{"class":283},[49,43688,43689,43691,43693],{"class":51,"line":16971},[49,43690,32667],{"class":55},[49,43692,60],{"class":59},[49,43694,3177],{"class":66},[49,43696,43697],{"class":51,"line":16976},[49,43698,32676],{"class":283},[49,43700,43701,43703,43705,43707,43709],{"class":51,"line":16989},[49,43702,3495],{"class":59},[49,43704,31690],{"class":55},[49,43706,26134],{"class":59},[49,43708,31695],{"class":66},[49,43710,32689],{"class":55},[49,43712,43713],{"class":51,"line":16994},[49,43714,32694],{"class":283},[49,43716,43717,43719,43721],{"class":51,"line":16999},[49,43718,32699],{"class":55},[49,43720,60],{"class":59},[49,43722,32704],{"class":55},[49,43724,43725],{"class":51,"line":17004},[49,43726,32709],{"class":283},[49,43728,43729,43731,43733],{"class":51,"line":17017},[49,43730,32714],{"class":55},[49,43732,60],{"class":59},[49,43734,32719],{"class":55},[49,43736,43737],{"class":51,"line":17022},[49,43738,32725],{"class":283},[49,43740,43741],{"class":51,"line":32722},[49,43742,32731],{"class":55},[49,43744,43745],{"class":51,"line":32728},[49,43746,32737],{"class":283},[49,43748,43749],{"class":51,"line":32734},[49,43750,32743],{"class":283},[49,43752,43753,43755,43757],{"class":51,"line":32740},[49,43754,32749],{"class":55},[49,43756,60],{"class":59},[49,43758,32754],{"class":55},[49,43760,43761],{"class":51,"line":32746},[49,43762,32760],{"class":283},[49,43764,43765,43767,43769,43771,43773,43775,43777],{"class":51,"line":32757},[49,43766,32766],{"class":55},[49,43768,60],{"class":59},[49,43770,32771],{"class":55},[49,43772,32774],{"class":126},[49,43774,60],{"class":59},[49,43776,441],{"class":66},[49,43778,81],{"class":55},[49,43780,43781],{"class":51,"line":32763},[49,43782,32786],{"class":283},[49,43784,43785,43787,43789],{"class":51,"line":32783},[49,43786,32792],{"class":55},[49,43788,60],{"class":59},[49,43790,32797],{"class":55},[49,43792,43793],{"class":51,"line":32789},[49,43794,32803],{"class":283},[49,43796,43797],{"class":51,"line":32800},[49,43798,32809],{"class":55},[49,43800,43801],{"class":51,"line":32806},[49,43802,32815],{"class":283},[49,43804,43805],{"class":51,"line":32812},[49,43806,32821],{"class":55},[49,43808,43809],{"class":51,"line":32818},[49,43810,32827],{"class":283},[49,43812,43813],{"class":51,"line":32824},[49,43814,32833],{"class":55},[49,43816,43817],{"class":51,"line":32830},[49,43818,32839],{"class":283},[49,43820,43821,43823,43825,43827,43829,43831,43833],{"class":51,"line":32836},[49,43822,32845],{"class":55},[49,43824,9567],{"class":59},[49,43826,32850],{"class":55},[49,43828,674],{"class":59},[49,43830,32855],{"class":55},[49,43832,415],{"class":66},[49,43834,81],{"class":55},[49,43836,43837],{"class":51,"line":32842},[49,43838,32865],{"class":283},[49,43840,43841,43843,43845,43847,43849],{"class":51,"line":32862},[49,43842,32871],{"class":55},[49,43844,9567],{"class":59},[49,43846,32876],{"class":55},[49,43848,3041],{"class":59},[49,43850,32881],{"class":55},[49,43852,43853],{"class":51,"line":32868},[49,43854,32887],{"class":283},[49,43856,43857,43859,43861,43863,43865],{"class":51,"line":32884},[49,43858,32893],{"class":55},[49,43860,9567],{"class":59},[49,43862,32855],{"class":55},[49,43864,415],{"class":66},[49,43866,81],{"class":55},[49,43868,43869],{"class":51,"line":32890},[49,43870,32907],{"class":283},[49,43872,43873,43875,43877,43879,43881],{"class":51,"line":32904},[49,43874,3495],{"class":59},[49,43876,32915],{"class":55},[49,43878,26134],{"class":59},[49,43880,31695],{"class":66},[49,43882,32922],{"class":55},[49,43884,43885],{"class":51,"line":32910},[49,43886,32928],{"class":283},[49,43888,43889,43891,43893],{"class":51,"line":32925},[49,43890,32699],{"class":55},[49,43892,60],{"class":59},[49,43894,32704],{"class":55},[49,43896,43897],{"class":51,"line":32931},[49,43898,32943],{"class":283},[49,43900,43901,43903,43905],{"class":51,"line":32940},[49,43902,32714],{"class":55},[49,43904,60],{"class":59},[49,43906,32719],{"class":55},[49,43908,43909],{"class":51,"line":32946},[49,43910,32958],{"class":283},[49,43912,43913],{"class":51,"line":32955},[49,43914,32964],{"class":55},[49,43916,43917],{"class":51,"line":32961},[49,43918,36445],{"class":283},[49,43920,43921,43923],{"class":51,"line":32967},[49,43922,32970],{"class":59},[49,43924,32973],{"class":55},[49,43926,43927],{"class":51,"line":32976},[49,43928,32979],{"class":283},[49,43930,43931,43933,43935],{"class":51,"line":32982},[49,43932,36460],{"class":55},[49,43934,60],{"class":59},[49,43936,32754],{"class":55},[49,43938,43939],{"class":51,"line":32993},[49,43940,32996],{"class":283},[49,43942,43943,43945,43947,43949,43951,43953,43955],{"class":51,"line":32999},[49,43944,36473],{"class":55},[49,43946,60],{"class":59},[49,43948,32771],{"class":55},[49,43950,32774],{"class":126},[49,43952,60],{"class":59},[49,43954,441],{"class":66},[49,43956,81],{"class":55},[49,43958,43959],{"class":51,"line":33018},[49,43960,33021],{"class":283},[49,43962,43963,43965,43967],{"class":51,"line":33024},[49,43964,36494],{"class":55},[49,43966,60],{"class":59},[49,43968,32797],{"class":55},[49,43970,43971],{"class":51,"line":33035},[49,43972,33038],{"class":283},[49,43974,43975,43977,43979,43981,43983,43985,43987],{"class":51,"line":33041},[49,43976,36507],{"class":55},[49,43978,9567],{"class":59},[49,43980,36512],{"class":55},[49,43982,674],{"class":59},[49,43984,32855],{"class":55},[49,43986,415],{"class":66},[49,43988,81],{"class":55},[49,43990,43991,43993,43995,43997,43999],{"class":51,"line":33061},[49,43992,36525],{"class":55},[49,43994,9567],{"class":59},[49,43996,32876],{"class":55},[49,43998,3041],{"class":59},[49,44000,32881],{"class":55},[49,44002,44003],{"class":51,"line":33077},[49,44004,36538],{"class":283},[49,44006,44007,44009,44011,44013,44015],{"class":51,"line":33083},[49,44008,36543],{"class":55},[49,44010,9567],{"class":59},[49,44012,32855],{"class":55},[49,44014,415],{"class":66},[49,44016,81],{"class":55},[49,44018,44019],{"class":51,"line":33097},[49,44020,33100],{"class":283},[49,44022,44023],{"class":51,"line":33103},[49,44024,33106],{"class":283},[49,44026,44027,44029,44031],{"class":51,"line":33109},[49,44028,33112],{"class":55},[49,44030,803],{"class":59},[49,44032,33117],{"class":55},[49,44034,44035],{"class":51,"line":33120},[49,44036,33123],{"class":283},[49,44038,44039],{"class":51,"line":33126},[49,44040,33129],{"class":283},[49,44042,44043,44045,44047],{"class":51,"line":33132},[49,44044,33135],{"class":55},[49,44046,803],{"class":59},[49,44048,33117],{"class":55},[49,44050,44051],{"class":51,"line":33142},[49,44052,33145],{"class":283},[49,44054,44055,44057,44059],{"class":51,"line":33148},[49,44056,33151],{"class":55},[49,44058,803],{"class":59},[49,44060,33156],{"class":55},[49,44062,44063],{"class":51,"line":33159},[49,44064,33162],{"class":283},[49,44066,44067,44069,44071],{"class":51,"line":33165},[49,44068,33168],{"class":55},[49,44070,803],{"class":59},[49,44072,33156],{"class":55},[49,44074,44075],{"class":51,"line":33175},[49,44076,2492],{"emptyLinePlaceholder":151},[49,44078,44079],{"class":51,"line":33180},[49,44080,33183],{"class":283},[49,44082,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113,44115,44117,44119,44121],{"class":51,"line":33186},[49,44084,32540],{"class":66},[49,44086,228],{"class":55},[49,44088,3684],{"class":328},[49,44090,32548],{"class":66},[49,44092,33197],{"class":328},[49,44094,1115],{"class":66},[49,44096,33202],{"class":59},[49,44098,1165],{"class":66},[49,44100,33207],{"class":328},[49,44102,1115],{"class":66},[49,44104,33202],{"class":59},[49,44106,1165],{"class":66},[49,44108,3684],{"class":328},[49,44110,33218],{"class":55},[49,44112,751],{"class":59},[49,44114,441],{"class":66},[49,44116,33225],{"class":55},[49,44118,751],{"class":59},[49,44120,441],{"class":66},[49,44122,33232],{"class":55},[49,44124,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163],{"class":51,"line":33235},[49,44126,32540],{"class":66},[49,44128,228],{"class":55},[49,44130,3684],{"class":328},[49,44132,32548],{"class":66},[49,44134,33246],{"class":328},[49,44136,1115],{"class":66},[49,44138,33202],{"class":59},[49,44140,1165],{"class":66},[49,44142,33255],{"class":328},[49,44144,1115],{"class":66},[49,44146,33202],{"class":59},[49,44148,1165],{"class":66},[49,44150,3684],{"class":328},[49,44152,33266],{"class":55},[49,44154,751],{"class":59},[49,44156,441],{"class":66},[49,44158,33273],{"class":55},[49,44160,751],{"class":59},[49,44162,441],{"class":66},[49,44164,33232],{"class":55},[49,44166,44167],{"class":51,"line":33282},[49,44168,2492],{"emptyLinePlaceholder":151},[49,44170,44171],{"class":51,"line":33287},[49,44172,33290],{"class":283},[49,44174,44175,44177,44179,44181,44183,44185,44187],{"class":51,"line":33293},[49,44176,2589],{"class":59},[49,44178,33298],{"class":55},[49,44180,751],{"class":59},[49,44182,441],{"class":66},[49,44184,1159],{"class":55},[49,44186,1179],{"class":59},[49,44188,33309],{"class":55},[49,44190,44191],{"class":51,"line":33312},[49,44192,33315],{"class":283},[49,44194,44195,44197,44199,44201,44203,44205,44207],{"class":51,"line":33318},[49,44196,33321],{"class":55},[49,44198,266],{"class":66},[49,44200,60],{"class":59},[49,44202,33328],{"class":55},[49,44204,751],{"class":59},[49,44206,441],{"class":66},[49,44208,33335],{"class":55},[49,44210,44211],{"class":51,"line":33338},[49,44212,33341],{"class":283},[49,44214,44215],{"class":51,"line":33344},[49,44216,33347],{"class":283},[49,44218,44219,44221,44223],{"class":51,"line":33350},[49,44220,33353],{"class":55},[49,44222,60],{"class":59},[49,44224,32403],{"class":55},[49,44226,44227],{"class":51,"line":33360},[49,44228,2492],{"emptyLinePlaceholder":151},[49,44230,44231],{"class":51,"line":33365},[49,44232,33368],{"class":283},[49,44234,44235,44237,44239,44241,44243],{"class":51,"line":33371},[49,44236,33374],{"class":55},[49,44238,60],{"class":59},[49,44240,33379],{"class":55},[49,44242,751],{"class":59},[49,44244,33384],{"class":55},[49,44246,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271,44273,44275,44277,44279,44281],{"class":51,"line":33387},[49,44248,32540],{"class":66},[49,44250,228],{"class":55},[49,44252,33394],{"class":328},[49,44254,1115],{"class":66},[49,44256,33399],{"class":59},[49,44258,1165],{"class":66},[49,44260,763],{"class":328},[49,44262,1115],{"class":66},[49,44264,33399],{"class":59},[49,44266,1165],{"class":66},[49,44268,33412],{"class":328},[49,44270,33415],{"class":55},[49,44272,33418],{"class":59},[49,44274,1126],{"class":66},[49,44276,33423],{"class":55},[49,44278,550],{"class":59},[49,44280,1126],{"class":66},[49,44282,30586],{"class":55},[49,44284,44285],{"class":51,"line":33432},[49,44286,36822],{"class":283},[49,44288,44289],{"class":51,"line":33438},[49,44290,36827],{"class":283},[49,44292,44293,44295,44297],{"class":51,"line":33444},[49,44294,36832],{"class":55},[49,44296,33456],{"class":328},[49,44298,81],{"class":55},[49,44300,44301],{"class":51,"line":33450},[49,44302,33476],{"class":283},[49,44304,44305,44307,44309,44311,44313,44315],{"class":51,"line":33461},[49,44306,33482],{"class":55},[49,44308,60],{"class":59},[49,44310,33487],{"class":55},[49,44312,33490],{"class":126},[49,44314,60],{"class":59},[49,44316,1638],{"class":55},[49,44318,44319,44321,44323,44325],{"class":51,"line":33467},[49,44320,33500],{"class":328},[49,44322,1078],{"class":55},[49,44324,33505],{"class":66},[49,44326,33508],{"class":55},[49,44328,44329,44331],{"class":51,"line":33473},[49,44330,33514],{"class":328},[49,44332,33517],{"class":55},[49,44334,44335,44337],{"class":51,"line":33479},[49,44336,33523],{"class":328},[49,44338,33526],{"class":55},[49,44340,44341,44343],{"class":51,"line":33497},[49,44342,33532],{"class":328},[49,44344,33535],{"class":55},[49,44346,44347,44349],{"class":51,"line":33511},[49,44348,33541],{"class":328},[49,44350,33544],{"class":55},[49,44352,44353],{"class":51,"line":33520},[49,44354,33550],{"class":55},[49,44356,44357],{"class":51,"line":33529},[49,44358,33556],{"class":283},[49,44360,44361,44363],{"class":51,"line":33538},[49,44362,4182],{"class":59},[49,44364,33564],{"class":55},[49,44366,44367],{"class":51,"line":33547},[49,44368,2492],{"emptyLinePlaceholder":151},[49,44370,44371],{"class":51,"line":33553},[49,44372,33575],{"class":283},[49,44374,44375,44377,44379],{"class":51,"line":33559},[49,44376,32036],{"class":59},[49,44378,33583],{"class":2055},[49,44380,33586],{"class":55},[49,44382,44383],{"class":51,"line":33567},[49,44384,33592],{"class":283},[49,44386,44387,44389,44391,44393,44395,44397,44399,44401],{"class":51,"line":33572},[49,44388,33598],{"class":55},[49,44390,31782],{"class":126},[49,44392,60],{"class":59},[49,44394,228],{"class":55},[49,44396,717],{"class":66},[49,44398,76],{"class":55},[49,44400,515],{"class":66},[49,44402,30586],{"class":55},[49,44404,44405],{"class":51,"line":33578},[49,44406,33618],{"class":283},[49,44408,44409],{"class":51,"line":33589},[49,44410,33624],{"class":283},[49,44412,44413],{"class":51,"line":33595},[49,44414,33630],{"class":283},[49,44416,44417,44419,44421,44423,44425,44427,44429],{"class":51,"line":33615},[49,44418,31816],{"class":55},[49,44420,441],{"class":66},[49,44422,76],{"class":55},[49,44424,301],{"class":66},[49,44426,76],{"class":55},[49,44428,441],{"class":66},[49,44430,81],{"class":55},[49,44432,44433],{"class":51,"line":33621},[49,44434,33653],{"class":283},[49,44436,44437],{"class":51,"line":33627},[49,44438,33659],{"class":283},[49,44440,44441],{"class":51,"line":33633},[49,44442,33665],{"class":283},[49,44444,44445],{"class":51,"line":33650},[49,44446,33671],{"class":283},[49,44448,44449],{"class":51,"line":33656},[49,44450,33677],{"class":283},[49,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":51,"line":33662},[49,44454,33683],{"class":55},[49,44456,33686],{"class":328},[49,44458,33689],{"class":55},[49,44460,33692],{"class":328},[49,44462,76],{"class":55},[49,44464,33697],{"class":126},[49,44466,60],{"class":59},[49,44468,33702],{"class":328},[49,44470,81],{"class":55},[49,44472,44473,44475,44477,44479,44481,44483,44485,44487,44489],{"class":51,"line":33668},[49,44474,33683],{"class":55},[49,44476,33686],{"class":328},[49,44478,33714],{"class":55},[49,44480,33717],{"class":328},[49,44482,76],{"class":55},[49,44484,33697],{"class":126},[49,44486,60],{"class":59},[49,44488,33726],{"class":328},[49,44490,81],{"class":55},[49,44492,44493],{"class":51,"line":33674},[49,44494,33734],{"class":283},[49,44496,44497],{"class":51,"line":33680},[49,44498,33740],{"class":55},[49,44500,44501],{"class":51,"line":33707},[49,44502,33746],{"class":283},[49,44504,44505,44507,44509],{"class":51,"line":33731},[49,44506,33752],{"class":55},[49,44508,33755],{"class":328},[49,44510,81],{"class":55},[49,44512,44513,44515,44517],{"class":51,"line":33737},[49,44514,33763],{"class":55},[49,44516,33766],{"class":328},[49,44518,81],{"class":55},[49,44520,44521],{"class":51,"line":33743},[49,44522,33774],{"class":283},[49,44524,44525,44527,44529,44531,44533,44535,44537],{"class":51,"line":33749},[49,44526,31816],{"class":55},[49,44528,441],{"class":66},[49,44530,76],{"class":55},[49,44532,301],{"class":66},[49,44534,76],{"class":55},[49,44536,301],{"class":66},[49,44538,81],{"class":55},[49,44540,44541,44543,44545,44547,44549,44551,44553,44555,44557],{"class":51,"line":33760},[49,44542,33683],{"class":55},[49,44544,33686],{"class":328},[49,44546,33801],{"class":55},[49,44548,33692],{"class":328},[49,44550,76],{"class":55},[49,44552,33697],{"class":126},[49,44554,60],{"class":59},[49,44556,33812],{"class":328},[49,44558,81],{"class":55},[49,44560,44561,44563,44565,44567,44569,44571,44573,44575,44577],{"class":51,"line":33771},[49,44562,33683],{"class":55},[49,44564,33686],{"class":328},[49,44566,33824],{"class":55},[49,44568,33717],{"class":328},[49,44570,76],{"class":55},[49,44572,33697],{"class":126},[49,44574,60],{"class":59},[49,44576,33835],{"class":328},[49,44578,81],{"class":55},[49,44580,44581],{"class":51,"line":33777},[49,44582,33843],{"class":283},[49,44584,44585],{"class":51,"line":33794},[49,44586,33740],{"class":55},[49,44588,44589,44591,44593],{"class":51,"line":33817},[49,44590,33752],{"class":55},[49,44592,33686],{"class":328},[49,44594,81],{"class":55},[49,44596,44597,44599,44601],{"class":51,"line":33840},[49,44598,33763],{"class":55},[49,44600,33865],{"class":328},[49,44602,81],{"class":55},[49,44604,44605],{"class":51,"line":33846},[49,44606,33873],{"class":55},[49,44608,44609],{"class":51,"line":33851},[49,44610,2492],{"emptyLinePlaceholder":151},[49,44612,44613],{"class":51,"line":33860},[49,44614,33884],{"class":283},[49,44616,44617,44619,44621,44623,44625],{"class":51,"line":33870},[49,44618,1623],{"class":59},[49,44620,31309],{"class":66},[49,44622,3041],{"class":59},[49,44624,31314],{"class":328},[49,44626,3831],{"class":55},[49,44628,44629],{"class":51,"line":33876},[49,44630,33903],{"class":283},[49,44632,44633,44636,44638],{"class":51,"line":33881},[49,44634,44635],{"class":55},"    GoogLeNet",[49,44637,60],{"class":59},[49,44639,44640],{"class":55},"GoogLeNet(Inception)\n",[49,44642,44643,44645,44647],{"class":51,"line":33887},[49,44644,33920],{"class":55},[49,44646,60],{"class":59},[49,44648,33925],{"class":55},[49,44650,44651,44653,44655,44658,44660,44662,44664],{"class":51,"line":33900},[49,44652,33482],{"class":55},[49,44654,60],{"class":59},[49,44656,44657],{"class":55},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[49,44659,33938],{"class":126},[49,44661,60],{"class":59},[49,44663,1170],{"class":66},[49,44665,81],{"class":55},[49,44667,44668],{"class":51,"line":33906},[49,44669,33950],{"class":55},[178,44671,44672],{"start":109},[181,44673,40663],{},[39,44675,44677],{"className":41,"code":44676,"language":43,"meta":44,"style":44},"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",[46,44678,44679,44685,44695,44705,44709,44719,44730,44734,44738,44742,44750,44766,44776,44792,44802,44816,44820,44830,44840,44850,44856,44860,44864,44872,44876,44892,44900,44904,44908,44916,44924,44928,44932,44936,44940,44946,44950,44960,44968,44976,44980,44984,44988,44996,45000,45016,45020,45024,45028,45040,45044,45056,45060,45064,45076,45080,45090,45094,45098,45110,45114,45122,45126,45130,45138,45142,45150,45154,45158,45162,45166,45170,45186,45194,45198,45202,45250,45256,45260,45270,45278,45286,45290,45294,45298,45302,45310,45314,45330,45334,45342,45350],{"__ignoreMap":44},[49,44680,44681,44683],{"class":51,"line":52},[49,44682,30481],{"class":59},[49,44684,30484],{"class":55},[49,44686,44687,44689,44691,44693],{"class":51,"line":84},[49,44688,30481],{"class":59},[49,44690,31504],{"class":55},[49,44692,31472],{"class":59},[49,44694,31509],{"class":55},[49,44696,44697,44699,44701,44703],{"class":51,"line":109},[49,44698,30826],{"class":59},[49,44700,31487],{"class":55},[49,44702,30481],{"class":59},[49,44704,31492],{"class":55},[49,44706,44707],{"class":51,"line":120},[49,44708,34011],{"class":283},[49,44710,44711,44713,44715,44717],{"class":51,"line":135},[49,44712,30826],{"class":59},[49,44714,31457],{"class":55},[49,44716,30481],{"class":59},[49,44718,31462],{"class":55},[49,44720,44721,44723,44725,44727],{"class":51,"line":1306},[49,44722,30826],{"class":59},[49,44724,32003],{"class":55},[49,44726,30481],{"class":59},[49,44728,44729],{"class":55}," GoogLeNet,Inception\n",[49,44731,44732],{"class":51,"line":1312},[49,44733,2492],{"emptyLinePlaceholder":151},[49,44735,44736],{"class":51,"line":1403},[49,44737,2492],{"emptyLinePlaceholder":151},[49,44739,44740],{"class":51,"line":1409},[49,44741,34040],{"class":283},[49,44743,44744,44746,44748],{"class":51,"line":1421},[49,44745,32036],{"class":59},[49,44747,34047],{"class":2055},[49,44749,32042],{"class":55},[49,44751,44752,44754,44756,44758,44760,44762,44764],{"class":51,"line":1704},[49,44753,34054],{"class":55},[49,44755,60],{"class":59},[49,44757,31544],{"class":55},[49,44759,31547],{"class":126},[49,44761,60],{"class":59},[49,44763,31552],{"class":328},[49,44765,31555],{"class":55},[49,44767,44768,44770,44772,44774],{"class":51,"line":1709},[49,44769,34071],{"class":126},[49,44771,60],{"class":59},[49,44773,34076],{"class":66},[49,44775,31555],{"class":55},[49,44777,44778,44780,44782,44784,44786,44788,44790],{"class":51,"line":1715},[49,44779,34083],{"class":126},[49,44781,60],{"class":59},[49,44783,31582],{"class":55},[49,44785,31585],{"class":126},[49,44787,60],{"class":59},[49,44789,35538],{"class":66},[49,44791,31593],{"class":55},[49,44793,44794,44796,44798,44800],{"class":51,"line":1720},[49,44795,34100],{"class":126},[49,44797,60],{"class":59},[49,44799,31565],{"class":66},[49,44801,81],{"class":55},[49,44803,44804,44806,44808,44810,44812,44814],{"class":51,"line":1734},[49,44805,34111],{"class":55},[49,44807,60],{"class":59},[49,44809,31623],{"class":55},[49,44811,31626],{"class":126},[49,44813,60],{"class":59},[49,44815,34122],{"class":55},[49,44817,44818],{"class":51,"line":1739},[49,44819,34127],{"class":283},[49,44821,44822,44824,44826,44828],{"class":51,"line":1745},[49,44823,34132],{"class":126},[49,44825,60],{"class":59},[49,44827,441],{"class":66},[49,44829,31555],{"class":55},[49,44831,44832,44834,44836,44838],{"class":51,"line":1766},[49,44833,34143],{"class":126},[49,44835,60],{"class":59},[49,44837,31565],{"class":66},[49,44839,31555],{"class":55},[49,44841,44842,44844,44846,44848],{"class":51,"line":1771},[49,44843,34154],{"class":126},[49,44845,60],{"class":59},[49,44847,415],{"class":66},[49,44849,81],{"class":55},[49,44851,44852,44854],{"class":51,"line":1785},[49,44853,4182],{"class":59},[49,44855,34167],{"class":55},[49,44857,44858],{"class":51,"line":1790},[49,44859,2492],{"emptyLinePlaceholder":151},[49,44861,44862],{"class":51,"line":1819},[49,44863,34176],{"class":283},[49,44865,44866,44868,44870],{"class":51,"line":1824},[49,44867,32036],{"class":59},[49,44869,34183],{"class":2055},[49,44871,34186],{"class":55},[49,44873,44874],{"class":51,"line":1841},[49,44875,34191],{"class":283},[49,44877,44878,44880,44882,44884,44886,44888,44890],{"class":51,"line":1846},[49,44879,31326],{"class":55},[49,44881,60],{"class":59},[49,44883,31333],{"class":328},[49,44885,1796],{"class":59},[49,44887,31338],{"class":55},[49,44889,1793],{"class":59},[49,44891,34208],{"class":328},[49,44893,44894,44896,44898],{"class":51,"line":1851},[49,44895,31378],{"class":55},[49,44897,60],{"class":59},[49,44899,32378],{"class":55},[49,44901,44902],{"class":51,"line":1856},[49,44903,2492],{"emptyLinePlaceholder":151},[49,44905,44906],{"class":51,"line":1870},[49,44907,34225],{"class":283},[49,44909,44910,44912,44914],{"class":51,"line":1875},[49,44911,34230],{"class":55},[49,44913,60],{"class":59},[49,44915,32431],{"class":66},[49,44917,44918,44920,44922],{"class":51,"line":2669},[49,44919,34239],{"class":55},[49,44921,60],{"class":59},[49,44923,3177],{"class":66},[49,44925,44926],{"class":51,"line":2683},[49,44927,2492],{"emptyLinePlaceholder":151},[49,44929,44930],{"class":51,"line":2691},[49,44931,34252],{"class":283},[49,44933,44934],{"class":51,"line":2696},[49,44935,34257],{"class":283},[49,44937,44938],{"class":51,"line":2702},[49,44939,34262],{"class":283},[49,44941,44942,44944],{"class":51,"line":2708},[49,44943,34267],{"class":59},[49,44945,32973],{"class":55},[49,44947,44948],{"class":51,"line":2713},[49,44949,34274],{"class":283},[49,44951,44952,44954,44956,44958],{"class":51,"line":8038},[49,44953,3495],{"class":59},[49,44955,34281],{"class":55},[49,44957,26134],{"class":59},[49,44959,34286],{"class":55},[49,44961,44962,44964,44966],{"class":51,"line":8062},[49,44963,34291],{"class":55},[49,44965,60],{"class":59},[49,44967,34296],{"class":55},[49,44969,44970,44972,44974],{"class":51,"line":8067},[49,44971,34301],{"class":55},[49,44973,60],{"class":59},[49,44975,34306],{"class":55},[49,44977,44978],{"class":51,"line":8073},[49,44979,34311],{"class":283},[49,44981,44982],{"class":51,"line":8100},[49,44983,32964],{"class":55},[49,44985,44986],{"class":51,"line":8105},[49,44987,34320],{"class":283},[49,44989,44990,44992,44994],{"class":51,"line":8111},[49,44991,32749],{"class":55},[49,44993,60],{"class":59},[49,44995,34329],{"class":55},[49,44997,44998],{"class":51,"line":8123},[49,44999,34334],{"class":283},[49,45001,45002,45004,45006,45008,45010,45012,45014],{"class":51,"line":8135},[49,45003,32766],{"class":55},[49,45005,60],{"class":59},[49,45007,32771],{"class":55},[49,45009,32774],{"class":126},[49,45011,60],{"class":59},[49,45013,441],{"class":66},[49,45015,81],{"class":55},[49,45017,45018],{"class":51,"line":8147},[49,45019,34355],{"class":283},[49,45021,45022],{"class":51,"line":9806},[49,45023,34360],{"class":283},[49,45025,45026],{"class":51,"line":9831},[49,45027,34365],{"class":283},[49,45029,45030,45032,45034,45036,45038],{"class":51,"line":9854},[49,45031,34370],{"class":55},[49,45033,9567],{"class":59},[49,45035,32876],{"class":55},[49,45037,3041],{"class":59},[49,45039,34379],{"class":55},[49,45041,45042],{"class":51,"line":9878},[49,45043,34384],{"class":283},[49,45045,45046,45048,45050,45052,45054],{"class":51,"line":9883},[49,45047,34389],{"class":55},[49,45049,9567],{"class":59},[49,45051,34394],{"class":55},[49,45053,415],{"class":66},[49,45055,81],{"class":55},[49,45057,45058],{"class":51,"line":9888},[49,45059,2492],{"emptyLinePlaceholder":151},[49,45061,45062],{"class":51,"line":9893},[49,45063,34407],{"class":283},[49,45065,45066,45068,45070,45072,45074],{"class":51,"line":9902},[49,45067,34412],{"class":55},[49,45069,60],{"class":59},[49,45071,34417],{"class":55},[49,45073,803],{"class":59},[49,45075,34422],{"class":55},[49,45077,45078],{"class":51,"line":9907},[49,45079,34427],{"class":283},[49,45081,45082,45084,45086,45088],{"class":51,"line":9913},[49,45083,32540],{"class":66},[49,45085,228],{"class":55},[49,45087,34436],{"class":328},[49,45089,34439],{"class":55},[49,45091,45092],{"class":51,"line":9934},[49,45093,2492],{"emptyLinePlaceholder":151},[49,45095,45096],{"class":51,"line":9940},[49,45097,34448],{"class":283},[49,45099,45100,45102,45104,45106,45108],{"class":51,"line":9954},[49,45101,1623],{"class":59},[49,45103,31309],{"class":66},[49,45105,3041],{"class":59},[49,45107,31314],{"class":328},[49,45109,3831],{"class":55},[49,45111,45112],{"class":51,"line":9960},[49,45113,34465],{"class":283},[49,45115,45116,45118,45120],{"class":51,"line":9987},[49,45117,31378],{"class":55},[49,45119,60],{"class":59},[49,45121,44640],{"class":55},[49,45123,45124],{"class":51,"line":9996},[49,45125,34478],{"class":283},[49,45127,45128],{"class":51,"line":10002},[49,45129,34483],{"class":283},[49,45131,45132,45134,45136],{"class":51,"line":10010},[49,45133,34488],{"class":55},[49,45135,34491],{"class":328},[49,45137,30586],{"class":55},[49,45139,45140],{"class":51,"line":10015},[49,45141,34498],{"class":283},[49,45143,45144,45146,45148],{"class":51,"line":16694},[49,45145,34111],{"class":55},[49,45147,60],{"class":59},[49,45149,34507],{"class":55},[49,45151,45152],{"class":51,"line":16700},[49,45153,34512],{"class":283},[49,45155,45156],{"class":51,"line":16723},[49,45157,34517],{"class":55},[49,45159,45160],{"class":51,"line":16729},[49,45161,2492],{"emptyLinePlaceholder":151},[49,45163,45164],{"class":51,"line":16752},[49,45165,34526],{"class":283},[49,45167,45168],{"class":51,"line":16766},[49,45169,34531],{"class":283},[49,45171,45172,45174,45176,45178,45180,45182,45184],{"class":51,"line":16786},[49,45173,31326],{"class":55},[49,45175,60],{"class":59},[49,45177,31333],{"class":328},[49,45179,1796],{"class":59},[49,45181,31338],{"class":55},[49,45183,1793],{"class":59},[49,45185,34208],{"class":328},[49,45187,45188,45190,45192],{"class":51,"line":16792},[49,45189,31378],{"class":55},[49,45191,60],{"class":59},[49,45193,32378],{"class":55},[49,45195,45196],{"class":51,"line":16803},[49,45197,34560],{"class":283},[49,45199,45200],{"class":51,"line":16826},[49,45201,34565],{"class":283},[49,45203,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226,45228,45230,45232,45234,45236,45238,45240,45242,45244,45246,45248],{"class":51,"line":16848},[49,45205,34570],{"class":55},[49,45207,60],{"class":59},[49,45209,1109],{"class":55},[49,45211,34577],{"class":328},[49,45213,76],{"class":55},[49,45215,34582],{"class":328},[49,45217,76],{"class":55},[49,45219,34587],{"class":328},[49,45221,76],{"class":55},[49,45223,34592],{"class":328},[49,45225,76],{"class":55},[49,45227,34597],{"class":328},[49,45229,76],{"class":55},[49,45231,34602],{"class":328},[49,45233,76],{"class":55},[49,45235,34607],{"class":328},[49,45237,76],{"class":55},[49,45239,34612],{"class":328},[49,45241,76],{"class":55},[49,45243,34617],{"class":328},[49,45245,76],{"class":55},[49,45247,34622],{"class":328},[49,45249,33335],{"class":55},[49,45251,45252,45254],{"class":51,"line":16853},[49,45253,34267],{"class":59},[49,45255,32973],{"class":55},[49,45257,45258],{"class":51,"line":16859},[49,45259,34635],{"class":283},[49,45261,45262,45264,45266,45268],{"class":51,"line":16873},[49,45263,3495],{"class":59},[49,45265,34642],{"class":55},[49,45267,26134],{"class":59},[49,45269,34286],{"class":55},[49,45271,45272,45274,45276],{"class":51,"line":16886},[49,45273,32699],{"class":55},[49,45275,60],{"class":59},[49,45277,32704],{"class":55},[49,45279,45280,45282,45284],{"class":51,"line":16891},[49,45281,32714],{"class":55},[49,45283,60],{"class":59},[49,45285,32719],{"class":55},[49,45287,45288],{"class":51,"line":16905},[49,45289,2492],{"emptyLinePlaceholder":151},[49,45291,45292],{"class":51,"line":16910},[49,45293,34671],{"class":283},[49,45295,45296],{"class":51,"line":16916},[49,45297,32964],{"class":55},[49,45299,45300],{"class":51,"line":16921},[49,45301,34680],{"class":283},[49,45303,45304,45306,45308],{"class":51,"line":16935},[49,45305,32749],{"class":55},[49,45307,60],{"class":59},[49,45309,32754],{"class":55},[49,45311,45312],{"class":51,"line":16940},[49,45313,34693],{"class":283},[49,45315,45316,45318,45320,45322,45324,45326,45328],{"class":51,"line":16945},[49,45317,32766],{"class":55},[49,45319,60],{"class":59},[49,45321,32771],{"class":55},[49,45323,32774],{"class":126},[49,45325,60],{"class":59},[49,45327,441],{"class":66},[49,45329,81],{"class":55},[49,45331,45332],{"class":51,"line":16959},[49,45333,34714],{"class":283},[49,45335,45336,45338,45340],{"class":51,"line":16971},[49,45337,34719],{"class":55},[49,45339,60],{"class":59},[49,45341,34724],{"class":55},[49,45343,45344,45346,45348],{"class":51,"line":16976},[49,45345,34729],{"class":55},[49,45347,60],{"class":59},[49,45349,34734],{"class":55},[49,45351,45352,45354,45356,45358,45360,45362,45364,45366],{"class":51,"line":16989},[49,45353,34739],{"class":66},[49,45355,228],{"class":55},[49,45357,34744],{"class":328},[49,45359,34747],{"class":55},[49,45361,34750],{"class":328},[49,45363,76],{"class":55},[49,45365,34755],{"class":328},[49,45367,34758],{"class":55},[195,45369,45371],{"id":45370},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45373,45374],{},"猫狗分类任务",[14,45376,45377],{},"划分数据集和验证集",[39,45379,45381],{"className":41,"code":45380,"language":43,"meta":44,"style":44},"# 创建脚本，用于划分数据集和验证集\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",[46,45382,45383,45388,45395,45400,45411,45418,45422,45432,45446,45455,45459,45464,45474,45494,45498,45503,45513,45524,45537,45541,45546,45555,45565,45576,45580,45585,45595,45599,45604,45609,45614,45619,45624,45628,45638,45665,45678,45690,45717,45722,45727,45741,45746,45758,45773,45788,45796,45800,45805,45811,45823,45836,45841,45846,45851,45901,45907,45911],{"__ignoreMap":44},[49,45384,45385],{"class":51,"line":52},[49,45386,45387],{"class":283},"# 创建脚本，用于划分数据集和验证集\n",[49,45389,45390,45392],{"class":51,"line":84},[49,45391,30481],{"class":59},[49,45393,45394],{"class":55}," os\n",[49,45396,45397],{"class":51,"line":109},[49,45398,45399],{"class":283},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[49,45401,45402,45404,45407,45409],{"class":51,"line":120},[49,45403,30826],{"class":59},[49,45405,45406],{"class":55}," shutil ",[49,45408,30481],{"class":59},[49,45410,31911],{"class":55},[49,45412,45413,45415],{"class":51,"line":135},[49,45414,30481],{"class":59},[49,45416,45417],{"class":55}," random\n",[49,45419,45420],{"class":51,"line":1306},[49,45421,2492],{"emptyLinePlaceholder":151},[49,45423,45424,45426,45429],{"class":51,"line":1312},[49,45425,32036],{"class":59},[49,45427,45428],{"class":2055}," mkfile",[49,45430,45431],{"class":55},"(file):\n",[49,45433,45434,45436,45438,45441,45444],{"class":51,"line":1403},[49,45435,3193],{"class":59},[49,45437,39019],{"class":59},[49,45439,45440],{"class":55}," os.path.exists(",[49,45442,45443],{"class":126},"file",[49,45445,30875],{"class":55},[49,45447,45448,45451,45453],{"class":51,"line":1409},[49,45449,45450],{"class":55},"        os.makedirs(",[49,45452,45443],{"class":126},[49,45454,81],{"class":55},[49,45456,45457],{"class":51,"line":1421},[49,45458,2492],{"emptyLinePlaceholder":151},[49,45460,45461],{"class":51,"line":1704},[49,45462,45463],{"class":283},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[49,45465,45466,45469,45471],{"class":51,"line":1709},[49,45467,45468],{"class":55},"file_path",[49,45470,60],{"class":59},[49,45472,45473],{"class":328},"'data_cat_dog'\n",[49,45475,45476,45479,45481,45484,45486,45489,45491],{"class":51,"line":1715},[49,45477,45478],{"class":55},"flower_class",[49,45480,60],{"class":59},[49,45482,45483],{"class":55},"[cla ",[49,45485,3117],{"class":59},[49,45487,45488],{"class":55}," cla ",[49,45490,26134],{"class":59},[49,45492,45493],{"class":55}," os.listdir(file_path)]\n",[49,45495,45496],{"class":51,"line":1720},[49,45497,2492],{"emptyLinePlaceholder":151},[49,45499,45500],{"class":51,"line":1734},[49,45501,45502],{"class":283},"# 创建训练集train文件夹\n",[49,45504,45505,45508,45511],{"class":51,"line":1739},[49,45506,45507],{"class":55},"mkfile(",[49,45509,45510],{"class":328},"'data\u002Ftrain'",[49,45512,81],{"class":55},[49,45514,45515,45517,45519,45521],{"class":51,"line":1745},[49,45516,3117],{"class":59},[49,45518,45488],{"class":55},[49,45520,26134],{"class":59},[49,45522,45523],{"class":55}," flower_class:\n",[49,45525,45526,45529,45532,45534],{"class":51,"line":1766},[49,45527,45528],{"class":55},"    mkfile(",[49,45530,45531],{"class":328},"'data\u002Ftrain\u002F'",[49,45533,700],{"class":59},[49,45535,45536],{"class":55},"cla)\n",[49,45538,45539],{"class":51,"line":1771},[49,45540,2492],{"emptyLinePlaceholder":151},[49,45542,45543],{"class":51,"line":1785},[49,45544,45545],{"class":283},"# 创建验证集val文件夹\n",[49,45547,45548,45550,45553],{"class":51,"line":1790},[49,45549,45507],{"class":55},[49,45551,45552],{"class":328},"'data\u002Ftest'",[49,45554,81],{"class":55},[49,45556,45557,45559,45561,45563],{"class":51,"line":1819},[49,45558,3117],{"class":59},[49,45560,45488],{"class":55},[49,45562,26134],{"class":59},[49,45564,45523],{"class":55},[49,45566,45567,45569,45572,45574],{"class":51,"line":1824},[49,45568,45528],{"class":55},[49,45570,45571],{"class":328},"'data\u002Ftest\u002F'",[49,45573,700],{"class":59},[49,45575,45536],{"class":55},[49,45577,45578],{"class":51,"line":1841},[49,45579,2492],{"emptyLinePlaceholder":151},[49,45581,45582],{"class":51,"line":1846},[49,45583,45584],{"class":283},"# 划分比例，训练集：测试集=9：1\n",[49,45586,45587,45590,45592],{"class":51,"line":1851},[49,45588,45589],{"class":55},"split_rate",[49,45591,60],{"class":59},[49,45593,45594],{"class":66},"0.1\n",[49,45596,45597],{"class":51,"line":1856},[49,45598,2492],{"emptyLinePlaceholder":151},[49,45600,45601],{"class":51,"line":1870},[49,45602,45603],{"class":283},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[49,45605,45606],{"class":51,"line":1875},[49,45607,45608],{"class":283},"# cla_path：当前类别的原始图片路径\n",[49,45610,45611],{"class":51,"line":2669},[49,45612,45613],{"class":283},"# images：当前类别下所有图片的文件名列表\n",[49,45615,45616],{"class":51,"line":2683},[49,45617,45618],{"class":283},"# num：该类别图片总数\n",[49,45620,45621],{"class":51,"line":2691},[49,45622,45623],{"class":283},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[49,45625,45626],{"class":51,"line":2696},[49,45627,2492],{"emptyLinePlaceholder":151},[49,45629,45630,45632,45634,45636],{"class":51,"line":2702},[49,45631,3117],{"class":59},[49,45633,45488],{"class":55},[49,45635,26134],{"class":59},[49,45637,45523],{"class":55},[49,45639,45640,45643,45645,45648,45650,45653,45656,45658,45660,45662],{"class":51,"line":2708},[49,45641,45642],{"class":55},"    cla_path ",[49,45644,60],{"class":59},[49,45646,45647],{"class":55}," file_path ",[49,45649,700],{"class":59},[49,45651,45652],{"class":328}," '\u002F'",[49,45654,45655],{"class":59}," +",[49,45657,45488],{"class":55},[49,45659,700],{"class":59},[49,45661,45652],{"class":328},[49,45663,45664],{"class":283},"  # 某一类别的子目录\n",[49,45666,45667,45670,45672,45675],{"class":51,"line":2713},[49,45668,45669],{"class":55},"    images ",[49,45671,60],{"class":59},[49,45673,45674],{"class":55}," os.listdir(cla_path)  ",[49,45676,45677],{"class":283},"# iamges 列表存储了该目录下所有图像的名称\n",[49,45679,45680,45683,45685,45687],{"class":51,"line":8038},[49,45681,45682],{"class":55},"    num ",[49,45684,60],{"class":59},[49,45686,7421],{"class":66},[49,45688,45689],{"class":55},"(images)\n",[49,45691,45692,45695,45697,45700,45702,45704,45706,45709,45711,45714],{"class":51,"line":8062},[49,45693,45694],{"class":55},"    eval_index ",[49,45696,60],{"class":59},[49,45698,45699],{"class":55}," random.sample(images, ",[49,45701,712],{"class":126},[49,45703,60],{"class":59},[49,45705,231],{"class":66},[49,45707,45708],{"class":55},"(num ",[49,45710,674],{"class":59},[49,45712,45713],{"class":55}," split_rate))  ",[49,45715,45716],{"class":283},"# 从images列表中随机抽取 k 个图像名称\n",[49,45718,45719],{"class":51,"line":8067},[49,45720,45721],{"class":283},"    # 遍历该类别下的所有图片\n",[49,45723,45724],{"class":51,"line":8073},[49,45725,45726],{"class":283},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[49,45728,45729,45731,45734,45736,45738],{"class":51,"line":8100},[49,45730,3293],{"class":59},[49,45732,45733],{"class":55}," index, image ",[49,45735,26134],{"class":59},[49,45737,31695],{"class":66},[49,45739,45740],{"class":55},"(images):\n",[49,45742,45743],{"class":51,"line":8105},[49,45744,45745],{"class":283},"        # eval_index 中保存验证集val的图像名称\n",[49,45747,45748,45750,45753,45755],{"class":51,"line":8111},[49,45749,2589],{"class":59},[49,45751,45752],{"class":55}," image ",[49,45754,26134],{"class":59},[49,45756,45757],{"class":55}," eval_index:\n",[49,45759,45760,45763,45765,45768,45770],{"class":51,"line":8123},[49,45761,45762],{"class":55},"            image_path ",[49,45764,60],{"class":59},[49,45766,45767],{"class":55}," cla_path ",[49,45769,700],{"class":59},[49,45771,45772],{"class":55}," image\n",[49,45774,45775,45778,45780,45783,45785],{"class":51,"line":8135},[49,45776,45777],{"class":55},"            new_path ",[49,45779,60],{"class":59},[49,45781,45782],{"class":328}," 'data\u002Ftest\u002F'",[49,45784,45655],{"class":59},[49,45786,45787],{"class":55}," cla\n",[49,45789,45790,45793],{"class":51,"line":8147},[49,45791,45792],{"class":55},"            copy(image_path, new_path)  ",[49,45794,45795],{"class":283},"# 将选中的图像复制到新路径\n",[49,45797,45798],{"class":51,"line":9806},[49,45799,2492],{"emptyLinePlaceholder":151},[49,45801,45802],{"class":51,"line":9831},[49,45803,45804],{"class":283},"        # 其余的图像保存在训练集train中\n",[49,45806,45807,45809],{"class":51,"line":9854},[49,45808,2626],{"class":59},[49,45810,3831],{"class":55},[49,45812,45813,45815,45817,45819,45821],{"class":51,"line":9878},[49,45814,45762],{"class":55},[49,45816,60],{"class":59},[49,45818,45767],{"class":55},[49,45820,700],{"class":59},[49,45822,45772],{"class":55},[49,45824,45825,45827,45829,45832,45834],{"class":51,"line":9883},[49,45826,45777],{"class":55},[49,45828,60],{"class":59},[49,45830,45831],{"class":328}," 'data\u002Ftrain\u002F'",[49,45833,45655],{"class":59},[49,45835,45787],{"class":55},[49,45837,45838],{"class":51,"line":9888},[49,45839,45840],{"class":55},"            copy(image_path, new_path)\n",[49,45842,45843],{"class":51,"line":9893},[49,45844,45845],{"class":283},"            # 打印进度条信息\n",[49,45847,45848],{"class":51,"line":9902},[49,45849,45850],{"class":283},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[49,45852,45853,45855,45857,45859,45862,45864,45866,45869,45871,45873,45875,45878,45881,45883,45885,45888,45891,45893,45895,45898],{"class":51,"line":9907},[49,45854,32540],{"class":66},[49,45856,228],{"class":55},[49,45858,474],{"class":328},[49,45860,45861],{"class":66},"\\r",[49,45863,1109],{"class":328},[49,45865,32548],{"class":66},[49,45867,45868],{"class":328},"] processing [",[49,45870,32548],{"class":66},[49,45872,803],{"class":328},[49,45874,32548],{"class":66},[49,45876,45877],{"class":328},"]\"",[49,45879,45880],{"class":55},".format(cla, index ",[49,45882,700],{"class":59},[49,45884,25209],{"class":66},[49,45886,45887],{"class":55},", num), ",[49,45889,45890],{"class":126},"end",[49,45892,60],{"class":59},[49,45894,7742],{"class":328},[49,45896,45897],{"class":55},")  ",[49,45899,45900],{"class":283},"# processing bar\n",[49,45902,45903,45905],{"class":51,"line":9913},[49,45904,31388],{"class":66},[49,45906,2068],{"class":55},[49,45908,45909],{"class":51,"line":9934},[49,45910,2492],{"emptyLinePlaceholder":151},[49,45912,45913,45915,45917,45920],{"class":51,"line":9940},[49,45914,30504],{"class":66},[49,45916,228],{"class":55},[49,45918,45919],{"class":328},"\"processing done!\"",[49,45921,81],{"class":55},[14,45923,45924],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22088,45926,45928],{"id":45927},"_242模型代码","2.4.2.模型代码",[14,45930,45931],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[39,45933,45935],{"className":41,"code":45934,"language":43,"meta":44,"style":44},"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",[46,45936,45937,45943,45953,45963,45967,45983,45991,46005,46015,46019,46049,46053,46087,46133,46137,46171,46217,46221,46225,46259,46289,46293,46301,46315,46337,46359,46377,46381,46395,46399,46403,46419,46423,46431,46445,46455,46499,46503,46531,46535,46545,46573,46577,46613,46617,46645,46649,46659,46691,46723,46751,46755,46765,46797,46829,46861,46893,46925,46953,46957,46967,46999,47031,47043,47047,47059,47063,47067,47079,47087,47107,47111,47115,47119,47123,47127,47131,47145,47153,47161,47173,47187,47195,47199,47207,47217,47227,47237,47247,47257,47263,47267,47271,47283,47303,47311],{"__ignoreMap":44},[49,45938,45939,45941],{"class":51,"line":52},[49,45940,30481],{"class":59},[49,45942,30484],{"class":55},[49,45944,45945,45947,45949,45951],{"class":51,"line":84},[49,45946,30826],{"class":59},[49,45948,30829],{"class":55},[49,45950,30481],{"class":59},[49,45952,30834],{"class":55},[49,45954,45955,45957,45959,45961],{"class":51,"line":109},[49,45956,30826],{"class":59},[49,45958,30846],{"class":55},[49,45960,30481],{"class":59},[49,45962,30851],{"class":55},[49,45964,45965],{"class":51,"line":120},[49,45966,2492],{"emptyLinePlaceholder":151},[49,45968,45969,45971,45973,45975,45977,45979,45981],{"class":51,"line":135},[49,45970,14784],{"class":59},[49,45972,41582],{"class":2055},[49,45974,228],{"class":55},[49,45976,30867],{"class":2055},[49,45978,777],{"class":55},[49,45980,30872],{"class":2055},[49,45982,30875],{"class":55},[49,45984,45985,45987,45989],{"class":51,"line":1306},[49,45986,30890],{"class":59},[49,45988,30893],{"class":66},[49,45990,41601],{"class":55},[49,45992,45993,45995,45997,45999,46001,46003],{"class":51,"line":1312},[49,45994,30906],{"class":66},[49,45996,41608],{"class":55},[49,45998,30912],{"class":66},[49,46000,30915],{"class":55},[49,46002,30918],{"class":66},[49,46004,2068],{"class":55},[49,46006,46007,46009,46011,46013],{"class":51,"line":1403},[49,46008,30934],{"class":66},[49,46010,34860],{"class":55},[49,46012,60],{"class":59},[49,46014,34865],{"class":55},[49,46016,46017],{"class":51,"line":1409},[49,46018,41631],{"class":283},[49,46020,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047],{"class":51,"line":1421},[49,46022,30934],{"class":66},[49,46024,41638],{"class":55},[49,46026,60],{"class":59},[49,46028,30942],{"class":55},[49,46030,30945],{"class":126},[49,46032,60],{"class":59},[49,46034,41649],{"class":55},[49,46036,30954],{"class":126},[49,46038,60],{"class":59},[49,46040,41656],{"class":55},[49,46042,30963],{"class":126},[49,46044,60],{"class":59},[49,46046,441],{"class":66},[49,46048,81],{"class":55},[49,46050,46051],{"class":51,"line":1704},[49,46052,41669],{"class":283},[49,46054,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085],{"class":51,"line":1709},[49,46056,30934],{"class":66},[49,46058,41676],{"class":55},[49,46060,60],{"class":59},[49,46062,30942],{"class":55},[49,46064,30945],{"class":126},[49,46066,60],{"class":59},[49,46068,41649],{"class":55},[49,46070,30954],{"class":126},[49,46072,60],{"class":59},[49,46074,41693],{"class":55},[49,46076,415],{"class":66},[49,46078,41698],{"class":55},[49,46080,30963],{"class":126},[49,46082,60],{"class":59},[49,46084,441],{"class":66},[49,46086,81],{"class":55},[49,46088,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131],{"class":51,"line":1715},[49,46090,30934],{"class":66},[49,46092,41713],{"class":55},[49,46094,60],{"class":59},[49,46096,30942],{"class":55},[49,46098,30945],{"class":126},[49,46100,60],{"class":59},[49,46102,41693],{"class":55},[49,46104,415],{"class":66},[49,46106,41698],{"class":55},[49,46108,30954],{"class":126},[49,46110,60],{"class":59},[49,46112,41693],{"class":55},[49,46114,441],{"class":66},[49,46116,41698],{"class":55},[49,46118,30963],{"class":126},[49,46120,60],{"class":59},[49,46122,73],{"class":66},[49,46124,76],{"class":55},[49,46126,30972],{"class":126},[49,46128,60],{"class":59},[49,46130,441],{"class":66},[49,46132,81],{"class":55},[49,46134,46135],{"class":51,"line":1720},[49,46136,41758],{"class":283},[49,46138,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169],{"class":51,"line":1734},[49,46140,30934],{"class":66},[49,46142,41765],{"class":55},[49,46144,60],{"class":59},[49,46146,30942],{"class":55},[49,46148,30945],{"class":126},[49,46150,60],{"class":59},[49,46152,41649],{"class":55},[49,46154,30954],{"class":126},[49,46156,60],{"class":59},[49,46158,41782],{"class":55},[49,46160,415],{"class":66},[49,46162,41698],{"class":55},[49,46164,30963],{"class":126},[49,46166,60],{"class":59},[49,46168,441],{"class":66},[49,46170,81],{"class":55},[49,46172,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215],{"class":51,"line":1739},[49,46174,30934],{"class":66},[49,46176,41801],{"class":55},[49,46178,60],{"class":59},[49,46180,30942],{"class":55},[49,46182,30945],{"class":126},[49,46184,60],{"class":59},[49,46186,41782],{"class":55},[49,46188,415],{"class":66},[49,46190,41698],{"class":55},[49,46192,30954],{"class":126},[49,46194,60],{"class":59},[49,46196,41782],{"class":55},[49,46198,441],{"class":66},[49,46200,41698],{"class":55},[49,46202,30963],{"class":126},[49,46204,60],{"class":59},[49,46206,541],{"class":66},[49,46208,76],{"class":55},[49,46210,30972],{"class":126},[49,46212,60],{"class":59},[49,46214,301],{"class":66},[49,46216,81],{"class":55},[49,46218,46219],{"class":51,"line":1745},[49,46220,41846],{"class":283},[49,46222,46223],{"class":51,"line":1766},[49,46224,41851],{"class":283},[49,46226,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253,46255,46257],{"class":51,"line":1771},[49,46228,30934],{"class":66},[49,46230,41858],{"class":55},[49,46232,60],{"class":59},[49,46234,34918],{"class":55},[49,46236,30963],{"class":126},[49,46238,60],{"class":59},[49,46240,73],{"class":66},[49,46242,76],{"class":55},[49,46244,31018],{"class":126},[49,46246,60],{"class":59},[49,46248,441],{"class":66},[49,46250,76],{"class":55},[49,46252,30972],{"class":126},[49,46254,60],{"class":59},[49,46256,441],{"class":66},[49,46258,81],{"class":55},[49,46260,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287],{"class":51,"line":1785},[49,46262,30934],{"class":66},[49,46264,41893],{"class":55},[49,46266,60],{"class":59},[49,46268,30942],{"class":55},[49,46270,30945],{"class":126},[49,46272,60],{"class":59},[49,46274,41649],{"class":55},[49,46276,30954],{"class":126},[49,46278,60],{"class":59},[49,46280,41910],{"class":55},[49,46282,30963],{"class":126},[49,46284,60],{"class":59},[49,46286,441],{"class":66},[49,46288,81],{"class":55},[49,46290,46291],{"class":51,"line":1790},[49,46292,2492],{"emptyLinePlaceholder":151},[49,46294,46295,46297,46299],{"class":51,"line":1819},[49,46296,30890],{"class":59},[49,46298,31182],{"class":2055},[49,46300,31185],{"class":55},[49,46302,46303,46305,46307,46309,46311,46313],{"class":51,"line":1824},[49,46304,41935],{"class":55},[49,46306,60],{"class":59},[49,46308,30912],{"class":66},[49,46310,35273],{"class":55},[49,46312,30912],{"class":66},[49,46314,41946],{"class":55},[49,46316,46317,46319,46321,46323,46325,46327,46329,46331,46333,46335],{"class":51,"line":1841},[49,46318,7175],{"class":55},[49,46320,60],{"class":59},[49,46322,30912],{"class":66},[49,46324,35273],{"class":55},[49,46326,30912],{"class":66},[49,46328,41961],{"class":55},[49,46330,30912],{"class":66},[49,46332,35273],{"class":55},[49,46334,30912],{"class":66},[49,46336,41970],{"class":55},[49,46338,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357],{"class":51,"line":1846},[49,46340,41975],{"class":55},[49,46342,60],{"class":59},[49,46344,30912],{"class":66},[49,46346,35273],{"class":55},[49,46348,30912],{"class":66},[49,46350,41986],{"class":55},[49,46352,30912],{"class":66},[49,46354,35273],{"class":55},[49,46356,30912],{"class":66},[49,46358,41995],{"class":55},[49,46360,46361,46363,46365,46367,46369,46371,46373,46375],{"class":51,"line":1851},[49,46362,42000],{"class":55},[49,46364,60],{"class":59},[49,46366,30912],{"class":66},[49,46368,35273],{"class":55},[49,46370,30912],{"class":66},[49,46372,42011],{"class":55},[49,46374,30912],{"class":66},[49,46376,42016],{"class":55},[49,46378,46379],{"class":51,"line":1856},[49,46380,42021],{"class":283},[49,46382,46383,46385,46387,46389,46391,46393],{"class":51,"line":1870},[49,46384,14842],{"class":59},[49,46386,42028],{"class":55},[49,46388,32774],{"class":126},[49,46390,60],{"class":59},[49,46392,441],{"class":66},[49,46394,81],{"class":55},[49,46396,46397],{"class":51,"line":1875},[49,46398,2492],{"emptyLinePlaceholder":151},[49,46400,46401],{"class":51,"line":2669},[49,46402,42049],{"class":283},[49,46404,46405,46407,46409,46411,46413,46415,46417],{"class":51,"line":2683},[49,46406,14784],{"class":59},[49,46408,42056],{"class":2055},[49,46410,228],{"class":55},[49,46412,30867],{"class":2055},[49,46414,777],{"class":55},[49,46416,30872],{"class":2055},[49,46418,30875],{"class":55},[49,46420,46421],{"class":51,"line":2691},[49,46422,42071],{"class":283},[49,46424,46425,46427,46429],{"class":51,"line":2696},[49,46426,30890],{"class":59},[49,46428,30893],{"class":66},[49,46430,42080],{"class":55},[49,46432,46433,46435,46437,46439,46441,46443],{"class":51,"line":2702},[49,46434,30906],{"class":66},[49,46436,42087],{"class":55},[49,46438,30912],{"class":66},[49,46440,30915],{"class":55},[49,46442,30918],{"class":66},[49,46444,2068],{"class":55},[49,46446,46447,46449,46451,46453],{"class":51,"line":2708},[49,46448,30934],{"class":66},[49,46450,42102],{"class":55},[49,46452,60],{"class":59},[49,46454,38098],{"class":55},[49,46456,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497],{"class":51,"line":2713},[49,46458,38103],{"class":55},[49,46460,30945],{"class":126},[49,46462,60],{"class":59},[49,46464,73],{"class":66},[49,46466,76],{"class":55},[49,46468,30954],{"class":126},[49,46470,60],{"class":59},[49,46472,427],{"class":66},[49,46474,76],{"class":55},[49,46476,30963],{"class":126},[49,46478,60],{"class":59},[49,46480,591],{"class":66},[49,46482,76],{"class":55},[49,46484,31018],{"class":126},[49,46486,60],{"class":59},[49,46488,301],{"class":66},[49,46490,76],{"class":55},[49,46492,30972],{"class":126},[49,46494,60],{"class":59},[49,46496,73],{"class":66},[49,46498,38136],{"class":55},[49,46500,46501],{"class":51,"line":8038},[49,46502,38141],{"class":55},[49,46504,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529],{"class":51,"line":8062},[49,46506,38186],{"class":55},[49,46508,30963],{"class":126},[49,46510,60],{"class":59},[49,46512,73],{"class":66},[49,46514,76],{"class":55},[49,46516,31018],{"class":126},[49,46518,60],{"class":59},[49,46520,301],{"class":66},[49,46522,76],{"class":55},[49,46524,30972],{"class":126},[49,46526,60],{"class":59},[49,46528,441],{"class":66},[49,46530,81],{"class":55},[49,46532,46533],{"class":51,"line":8067},[49,46534,38215],{"class":55},[49,46536,46537,46539,46541,46543],{"class":51,"line":8073},[49,46538,30934],{"class":66},[49,46540,42193],{"class":55},[49,46542,60],{"class":59},[49,46544,38098],{"class":55},[49,46546,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571],{"class":51,"line":8100},[49,46548,38103],{"class":55},[49,46550,30945],{"class":126},[49,46552,60],{"class":59},[49,46554,427],{"class":66},[49,46556,76],{"class":55},[49,46558,30954],{"class":126},[49,46560,60],{"class":59},[49,46562,427],{"class":66},[49,46564,76],{"class":55},[49,46566,30963],{"class":126},[49,46568,60],{"class":59},[49,46570,441],{"class":66},[49,46572,38136],{"class":55},[49,46574,46575],{"class":51,"line":8105},[49,46576,38141],{"class":55},[49,46578,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611],{"class":51,"line":8111},[49,46580,38103],{"class":55},[49,46582,30945],{"class":126},[49,46584,60],{"class":59},[49,46586,427],{"class":66},[49,46588,76],{"class":55},[49,46590,30954],{"class":126},[49,46592,60],{"class":59},[49,46594,42248],{"class":66},[49,46596,76],{"class":55},[49,46598,30963],{"class":126},[49,46600,60],{"class":59},[49,46602,73],{"class":66},[49,46604,76],{"class":55},[49,46606,30972],{"class":126},[49,46608,60],{"class":59},[49,46610,441],{"class":66},[49,46612,38136],{"class":55},[49,46614,46615],{"class":51,"line":8123},[49,46616,38141],{"class":55},[49,46618,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643],{"class":51,"line":8135},[49,46620,38186],{"class":55},[49,46622,30963],{"class":126},[49,46624,60],{"class":59},[49,46626,73],{"class":66},[49,46628,76],{"class":55},[49,46630,31018],{"class":126},[49,46632,60],{"class":59},[49,46634,301],{"class":66},[49,46636,76],{"class":55},[49,46638,30972],{"class":126},[49,46640,60],{"class":59},[49,46642,441],{"class":66},[49,46644,81],{"class":55},[49,46646,46647],{"class":51,"line":8147},[49,46648,38215],{"class":55},[49,46650,46651,46653,46655,46657],{"class":51,"line":9806},[49,46652,30934],{"class":66},[49,46654,42309],{"class":55},[49,46656,60],{"class":59},[49,46658,38098],{"class":55},[49,46660,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689],{"class":51,"line":9831},[49,46662,42318],{"class":55},[49,46664,42248],{"class":66},[49,46666,76],{"class":55},[49,46668,427],{"class":66},[49,46670,42327],{"class":55},[49,46672,433],{"class":66},[49,46674,76],{"class":55},[49,46676,32159],{"class":66},[49,46678,42336],{"class":55},[49,46680,820],{"class":66},[49,46682,76],{"class":55},[49,46684,421],{"class":66},[49,46686,42345],{"class":55},[49,46688,421],{"class":66},[49,46690,38136],{"class":55},[49,46692,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721],{"class":51,"line":9854},[49,46694,42318],{"class":55},[49,46696,34959],{"class":66},[49,46698,76],{"class":55},[49,46700,32159],{"class":66},[49,46702,42327],{"class":55},[49,46704,32159],{"class":66},[49,46706,76],{"class":55},[49,46708,42248],{"class":66},[49,46710,42336],{"class":55},[49,46712,421],{"class":66},[49,46714,76],{"class":55},[49,46716,433],{"class":66},[49,46718,42345],{"class":55},[49,46720,427],{"class":66},[49,46722,38136],{"class":55},[49,46724,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749],{"class":51,"line":9878},[49,46726,38186],{"class":55},[49,46728,30963],{"class":126},[49,46730,60],{"class":59},[49,46732,73],{"class":66},[49,46734,76],{"class":55},[49,46736,31018],{"class":126},[49,46738,60],{"class":59},[49,46740,301],{"class":66},[49,46742,76],{"class":55},[49,46744,30972],{"class":126},[49,46746,60],{"class":59},[49,46748,441],{"class":66},[49,46750,81],{"class":55},[49,46752,46753],{"class":51,"line":9883},[49,46754,38215],{"class":55},[49,46756,46757,46759,46761,46763],{"class":51,"line":9888},[49,46758,30934],{"class":66},[49,46760,42420],{"class":55},[49,46762,60],{"class":59},[49,46764,38098],{"class":55},[49,46766,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795],{"class":51,"line":9893},[49,46768,42318],{"class":55},[49,46770,42431],{"class":66},[49,46772,76],{"class":55},[49,46774,42248],{"class":66},[49,46776,42327],{"class":55},[49,46778,433],{"class":66},[49,46780,76],{"class":55},[49,46782,42444],{"class":66},[49,46784,42336],{"class":55},[49,46786,820],{"class":66},[49,46788,76],{"class":55},[49,46790,826],{"class":66},[49,46792,42345],{"class":55},[49,46794,427],{"class":66},[49,46796,38136],{"class":55},[49,46798,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827],{"class":51,"line":9902},[49,46800,42318],{"class":55},[49,46802,38546],{"class":66},[49,46804,76],{"class":55},[49,46806,21138],{"class":66},[49,46808,42327],{"class":55},[49,46810,837],{"class":66},[49,46812,76],{"class":55},[49,46814,31590],{"class":66},[49,46816,42336],{"class":55},[49,46818,1019],{"class":66},[49,46820,76],{"class":55},[49,46822,427],{"class":66},[49,46824,42345],{"class":55},[49,46826,427],{"class":66},[49,46828,38136],{"class":55},[49,46830,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859],{"class":51,"line":9907},[49,46832,42318],{"class":55},[49,46834,38546],{"class":66},[49,46836,76],{"class":55},[49,46838,32159],{"class":66},[49,46840,42327],{"class":55},[49,46842,32159],{"class":66},[49,46844,76],{"class":55},[49,46846,34959],{"class":66},[49,46848,42336],{"class":55},[49,46850,1019],{"class":66},[49,46852,76],{"class":55},[49,46854,427],{"class":66},[49,46856,42345],{"class":55},[49,46858,427],{"class":66},[49,46860,38136],{"class":55},[49,46862,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891],{"class":51,"line":9913},[49,46864,42318],{"class":55},[49,46866,38546],{"class":66},[49,46868,76],{"class":55},[49,46870,837],{"class":66},[49,46872,42327],{"class":55},[49,46874,32159],{"class":66},[49,46876,76],{"class":55},[49,46878,42541],{"class":66},[49,46880,42336],{"class":55},[49,46882,421],{"class":66},[49,46884,76],{"class":55},[49,46886,427],{"class":66},[49,46888,42345],{"class":55},[49,46890,427],{"class":66},[49,46892,38136],{"class":55},[49,46894,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923],{"class":51,"line":9934},[49,46896,42318],{"class":55},[49,46898,42562],{"class":66},[49,46900,76],{"class":55},[49,46902,34959],{"class":66},[49,46904,42327],{"class":55},[49,46906,21138],{"class":66},[49,46908,76],{"class":55},[49,46910,42575],{"class":66},[49,46912,42336],{"class":55},[49,46914,421],{"class":66},[49,46916,76],{"class":55},[49,46918,32159],{"class":66},[49,46920,42345],{"class":55},[49,46922,32159],{"class":66},[49,46924,38136],{"class":55},[49,46926,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951],{"class":51,"line":9940},[49,46928,38186],{"class":55},[49,46930,30963],{"class":126},[49,46932,60],{"class":59},[49,46934,73],{"class":66},[49,46936,76],{"class":55},[49,46938,31018],{"class":126},[49,46940,60],{"class":59},[49,46942,301],{"class":66},[49,46944,76],{"class":55},[49,46946,30972],{"class":126},[49,46948,60],{"class":59},[49,46950,441],{"class":66},[49,46952,81],{"class":55},[49,46954,46955],{"class":51,"line":9954},[49,46956,38215],{"class":55},[49,46958,46959,46961,46963,46965],{"class":51,"line":9960},[49,46960,30934],{"class":66},[49,46962,42628],{"class":55},[49,46964,60],{"class":59},[49,46966,38098],{"class":55},[49,46968,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997],{"class":51,"line":9987},[49,46970,42318],{"class":55},[49,46972,42639],{"class":66},[49,46974,76],{"class":55},[49,46976,34959],{"class":66},[49,46978,42327],{"class":55},[49,46980,21138],{"class":66},[49,46982,76],{"class":55},[49,46984,42575],{"class":66},[49,46986,42336],{"class":55},[49,46988,421],{"class":66},[49,46990,76],{"class":55},[49,46992,32159],{"class":66},[49,46994,42345],{"class":55},[49,46996,32159],{"class":66},[49,46998,38136],{"class":55},[49,47000,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029],{"class":51,"line":9996},[49,47002,42318],{"class":55},[49,47004,42639],{"class":66},[49,47006,76],{"class":55},[49,47008,35029],{"class":66},[49,47010,42327],{"class":55},[49,47012,42248],{"class":66},[49,47014,76],{"class":55},[49,47016,35029],{"class":66},[49,47018,42336],{"class":55},[49,47020,826],{"class":66},[49,47022,76],{"class":55},[49,47024,32159],{"class":66},[49,47026,42345],{"class":55},[49,47028,32159],{"class":66},[49,47030,38136],{"class":55},[49,47032,47033,47035,47037,47039,47041],{"class":51,"line":10002},[49,47034,42702],{"class":55},[49,47036,441],{"class":66},[49,47038,76],{"class":55},[49,47040,441],{"class":66},[49,47042,42711],{"class":55},[49,47044,47045],{"class":51,"line":10010},[49,47046,38879],{"class":55},[49,47048,47049,47051,47053,47055,47057],{"class":51,"line":10015},[49,47050,38884],{"class":55},[49,47052,42722],{"class":66},[49,47054,76],{"class":55},[49,47056,301],{"class":66},[49,47058,81],{"class":55},[49,47060,47061],{"class":51,"line":16694},[49,47062,38215],{"class":55},[49,47064,47065],{"class":51,"line":16700},[49,47066,42737],{"class":283},[49,47068,47069,47071,47073,47075,47077],{"class":51,"line":16723},[49,47070,3495],{"class":59},[49,47072,38957],{"class":55},[49,47074,26134],{"class":59},[49,47076,38962],{"class":66},[49,47078,38965],{"class":55},[49,47080,47081,47083,47085],{"class":51,"line":16729},[49,47082,4734],{"class":59},[49,47084,38977],{"class":66},[49,47086,38980],{"class":55},[49,47088,47089,47091,47093,47095,47097,47099,47101,47103,47105],{"class":51,"line":16752},[49,47090,38990],{"class":55},[49,47092,42764],{"class":126},[49,47094,60],{"class":59},[49,47096,42769],{"class":328},[49,47098,76],{"class":55},[49,47100,38993],{"class":126},[49,47102,60],{"class":59},[49,47104,38998],{"class":328},[49,47106,81],{"class":55},[49,47108,47109],{"class":51,"line":16766},[49,47110,42784],{"class":283},[49,47112,47113],{"class":51,"line":16786},[49,47114,42789],{"class":283},[49,47116,47117],{"class":51,"line":16792},[49,47118,42794],{"class":283},[49,47120,47121],{"class":51,"line":16803},[49,47122,42799],{"class":283},[49,47124,47125],{"class":51,"line":16826},[49,47126,42804],{"class":283},[49,47128,47129],{"class":51,"line":16848},[49,47130,42809],{"class":283},[49,47132,47133,47135,47137,47139,47141,47143],{"class":51,"line":16853},[49,47134,39010],{"class":59},[49,47136,39013],{"class":55},[49,47138,39016],{"class":59},[49,47140,39019],{"class":59},[49,47142,39022],{"class":66},[49,47144,3831],{"class":55},[49,47146,47147,47149,47151],{"class":51,"line":16859},[49,47148,39034],{"class":55},[49,47150,415],{"class":66},[49,47152,81],{"class":55},[49,47154,47155,47157,47159],{"class":51,"line":16873},[49,47156,42836],{"class":59},[49,47158,38977],{"class":66},[49,47160,39053],{"class":55},[49,47162,47163,47165,47167,47169,47171],{"class":51,"line":16886},[49,47164,42845],{"class":55},[49,47166,415],{"class":66},[49,47168,76],{"class":55},[49,47170,39075],{"class":66},[49,47172,81],{"class":55},[49,47174,47175,47177,47179,47181,47183,47185],{"class":51,"line":16891},[49,47176,42858],{"class":59},[49,47178,39013],{"class":55},[49,47180,39016],{"class":59},[49,47182,39019],{"class":59},[49,47184,39022],{"class":66},[49,47186,3831],{"class":55},[49,47188,47189,47191,47193],{"class":51,"line":16905},[49,47190,42873],{"class":55},[49,47192,415],{"class":66},[49,47194,81],{"class":55},[49,47196,47197],{"class":51,"line":16910},[49,47198,35254],{"class":283},[49,47200,47201,47203,47205],{"class":51,"line":16916},[49,47202,30890],{"class":59},[49,47204,31182],{"class":2055},[49,47206,31185],{"class":55},[49,47208,47209,47211,47213,47215],{"class":51,"line":16921},[49,47210,31190],{"class":55},[49,47212,60],{"class":59},[49,47214,30912],{"class":66},[49,47216,42900],{"class":55},[49,47218,47219,47221,47223,47225],{"class":51,"line":16935},[49,47220,31190],{"class":55},[49,47222,60],{"class":59},[49,47224,30912],{"class":66},[49,47226,42911],{"class":55},[49,47228,47229,47231,47233,47235],{"class":51,"line":16940},[49,47230,31190],{"class":55},[49,47232,60],{"class":59},[49,47234,30912],{"class":66},[49,47236,42922],{"class":55},[49,47238,47239,47241,47243,47245],{"class":51,"line":16945},[49,47240,31190],{"class":55},[49,47242,60],{"class":59},[49,47244,30912],{"class":66},[49,47246,42933],{"class":55},[49,47248,47249,47251,47253,47255],{"class":51,"line":16959},[49,47250,31190],{"class":55},[49,47252,60],{"class":59},[49,47254,30912],{"class":66},[49,47256,42944],{"class":55},[49,47258,47259,47261],{"class":51,"line":16971},[49,47260,14842],{"class":59},[49,47262,31298],{"class":55},[49,47264,47265],{"class":51,"line":16976},[49,47266,2492],{"emptyLinePlaceholder":151},[49,47268,47269],{"class":51,"line":16989},[49,47270,42959],{"class":283},[49,47272,47273,47275,47277,47279,47281],{"class":51,"line":16994},[49,47274,1623],{"class":59},[49,47276,31309],{"class":66},[49,47278,3041],{"class":59},[49,47280,31314],{"class":328},[49,47282,3831],{"class":55},[49,47284,47285,47287,47289,47291,47293,47295,47297,47299,47301],{"class":51,"line":16999},[49,47286,31326],{"class":55},[49,47288,60],{"class":59},[49,47290,30540],{"class":55},[49,47292,31333],{"class":328},[49,47294,1796],{"class":59},[49,47296,31338],{"class":55},[49,47298,1793],{"class":59},[49,47300,30565],{"class":328},[49,47302,81],{"class":55},[49,47304,47305,47307,47309],{"class":51,"line":17004},[49,47306,31378],{"class":55},[49,47308,60],{"class":59},[49,47310,43000],{"class":55},[49,47312,47313,47315,47317,47319,47321,47323,47325,47327],{"class":51,"line":17017},[49,47314,31388],{"class":66},[49,47316,31391],{"class":55},[49,47318,441],{"class":66},[49,47320,76],{"class":55},[49,47322,31590],{"class":66},[49,47324,76],{"class":55},[49,47326,31590],{"class":66},[49,47328,31404],{"class":55},[22088,47330,47332],{"id":47331},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47334,47335],{},"计算图片的均值与方差，用于训练中归一化处理操作",[39,47337,47339],{"className":41,"code":47338,"language":43,"meta":44,"style":44},"# 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",[46,47340,47341,47346,47359,47364,47370,47375,47385,47389,47394,47404,47408,47413,47423,47440,47444,47449,47461,47473,47504,47513,47523,47533,47537,47542,47557,47561,47566,47571,47576,47586,47591,47616,47620,47625,47640,47644,47657,47661,47666,47671,47676,47681,47686,47696,47706,47729,47737,47745,47753,47757,47769,47773,47778,47782,47786,47793,47813,47837,47844,47858,47863,47868,47872,47886,47890,47902],{"__ignoreMap":44},[49,47342,47343],{"class":51,"line":52},[49,47344,47345],{"class":283},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[49,47347,47348,47350,47353,47356],{"class":51,"line":84},[49,47349,30826],{"class":59},[49,47351,47352],{"class":66}," PIL",[49,47354,47355],{"class":59}," import",[49,47357,47358],{"class":55}," Image\n",[49,47360,47361],{"class":51,"line":109},[49,47362,47363],{"class":283},"# os 用来处理文件夹和文件路径\n",[49,47365,47366,47368],{"class":51,"line":120},[49,47367,30481],{"class":59},[49,47369,45394],{"class":55},[49,47371,47372],{"class":51,"line":135},[49,47373,47374],{"class":283},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[49,47376,47377,47379,47381,47383],{"class":51,"line":1306},[49,47378,30481],{"class":59},[49,47380,31469],{"class":55},[49,47382,31472],{"class":59},[49,47384,31475],{"class":55},[49,47386,47387],{"class":51,"line":1312},[49,47388,2492],{"emptyLinePlaceholder":151},[49,47390,47391],{"class":51,"line":1403},[49,47392,47393],{"class":283},"# 文件夹路径，包含所有图片文件\n",[49,47395,47396,47399,47401],{"class":51,"line":1409},[49,47397,47398],{"class":55},"folder_path ",[49,47400,60],{"class":59},[49,47402,47403],{"class":328}," 'data_cat_dog'\n",[49,47405,47406],{"class":51,"line":1421},[49,47407,2492],{"emptyLinePlaceholder":151},[49,47409,47410],{"class":51,"line":1704},[49,47411,47412],{"class":283},"# 初始化累积变量\n",[49,47414,47415,47418,47420],{"class":51,"line":1709},[49,47416,47417],{"class":55},"total_pixels ",[49,47419,60],{"class":59},[49,47421,47422],{"class":66}," 0\n",[49,47424,47425,47428,47430,47433,47435,47437],{"class":51,"line":1715},[49,47426,47427],{"class":55},"sum_normalized_pixel_values ",[49,47429,60],{"class":59},[49,47431,47432],{"class":55}," np.zeros(",[49,47434,73],{"class":66},[49,47436,45897],{"class":55},[49,47438,47439],{"class":283},"# 如果是RGB图像，需要三个通道的均值和方差\n",[49,47441,47442],{"class":51,"line":1720},[49,47443,2492],{"emptyLinePlaceholder":151},[49,47445,47446],{"class":51,"line":1734},[49,47447,47448],{"class":283},"# 遍历文件夹中的图片文件\n",[49,47450,47451,47453,47456,47458],{"class":51,"line":1739},[49,47452,3117],{"class":59},[49,47454,47455],{"class":55}," root, dirs, files ",[49,47457,26134],{"class":59},[49,47459,47460],{"class":55}," os.walk(folder_path):\n",[49,47462,47463,47465,47468,47470],{"class":51,"line":1745},[49,47464,3293],{"class":59},[49,47466,47467],{"class":55}," filename ",[49,47469,26134],{"class":59},[49,47471,47472],{"class":55}," files:\n",[49,47474,47475,47477,47480,47483,47485,47488,47490,47493,47495,47498,47501],{"class":51,"line":1766},[49,47476,2589],{"class":59},[49,47478,47479],{"class":55}," filename.endswith((",[49,47481,47482],{"class":328},"'.jpg'",[49,47484,12525],{"class":55},[49,47486,47487],{"class":328},"'.jpeg'",[49,47489,12525],{"class":55},[49,47491,47492],{"class":328},"'.png'",[49,47494,12525],{"class":55},[49,47496,47497],{"class":328},"'.bmp'",[49,47499,47500],{"class":55},")):  ",[49,47502,47503],{"class":283},"# 可根据实际情况添加其他格式\n",[49,47505,47506,47508,47510],{"class":51,"line":1771},[49,47507,45762],{"class":55},[49,47509,60],{"class":59},[49,47511,47512],{"class":55}," os.path.join(root, filename)\n",[49,47514,47515,47518,47520],{"class":51,"line":1785},[49,47516,47517],{"class":55},"            image ",[49,47519,60],{"class":59},[49,47521,47522],{"class":55}," Image.open(image_path)\n",[49,47524,47525,47528,47530],{"class":51,"line":1790},[49,47526,47527],{"class":55},"            image_array ",[49,47529,60],{"class":59},[49,47531,47532],{"class":55}," np.array(image)\n",[49,47534,47535],{"class":51,"line":1819},[49,47536,2492],{"emptyLinePlaceholder":151},[49,47538,47539],{"class":51,"line":1824},[49,47540,47541],{"class":283},"            # 归一化像素值到0-1之间\n",[49,47543,47544,47547,47549,47552,47554],{"class":51,"line":1841},[49,47545,47546],{"class":55},"            normalized_image_array ",[49,47548,60],{"class":59},[49,47550,47551],{"class":55}," image_array ",[49,47553,803],{"class":59},[49,47555,47556],{"class":66}," 255.0\n",[49,47558,47559],{"class":51,"line":1846},[49,47560,2492],{"emptyLinePlaceholder":151},[49,47562,47563],{"class":51,"line":1851},[49,47564,47565],{"class":283},"            # print(image_path)\n",[49,47567,47568],{"class":51,"line":1856},[49,47569,47570],{"class":283},"            # print(normalized_image_array.shape)\n",[49,47572,47573],{"class":51,"line":1870},[49,47574,47575],{"class":283},"            # 累积归一化后的像素值和像素数量\n",[49,47577,47578,47581,47583],{"class":51,"line":1875},[49,47579,47580],{"class":55},"            total_pixels ",[49,47582,9567],{"class":59},[49,47584,47585],{"class":55}," normalized_image_array.size\n",[49,47587,47588],{"class":51,"line":2669},[49,47589,47590],{"class":283},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[49,47592,47593,47596,47598,47601,47604,47606,47608,47610,47612,47614],{"class":51,"line":2683},[49,47594,47595],{"class":55},"            sum_normalized_pixel_values ",[49,47597,9567],{"class":59},[49,47599,47600],{"class":55}," np.sum(normalized_image_array, ",[49,47602,47603],{"class":126},"axis",[49,47605,60],{"class":59},[49,47607,228],{"class":55},[49,47609,415],{"class":66},[49,47611,12525],{"class":55},[49,47613,441],{"class":66},[49,47615,30586],{"class":55},[49,47617,47618],{"class":51,"line":2691},[49,47619,2492],{"emptyLinePlaceholder":151},[49,47621,47622],{"class":51,"line":2696},[49,47623,47624],{"class":283},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[49,47626,47627,47630,47632,47635,47637],{"class":51,"line":2702},[49,47628,47629],{"class":55},"mean ",[49,47631,60],{"class":59},[49,47633,47634],{"class":55}," sum_normalized_pixel_values ",[49,47636,803],{"class":59},[49,47638,47639],{"class":55}," total_pixels\n",[49,47641,47642],{"class":51,"line":2708},[49,47643,2492],{"emptyLinePlaceholder":151},[49,47645,47646,47649,47651,47653,47655],{"class":51,"line":2713},[49,47647,47648],{"class":55},"sum_squared_diff ",[49,47650,60],{"class":59},[49,47652,47432],{"class":55},[49,47654,73],{"class":66},[49,47656,81],{"class":55},[49,47658,47659],{"class":51,"line":8038},[49,47660,2492],{"emptyLinePlaceholder":151},[49,47662,47663],{"class":51,"line":8062},[49,47664,47665],{"class":283},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[49,47667,47668],{"class":51,"line":8067},[49,47669,47670],{"class":283},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[49,47672,47673],{"class":51,"line":8073},[49,47674,47675],{"class":283},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[49,47677,47678],{"class":51,"line":8100},[49,47679,47680],{"class":283},"# Image.open(image_path)：打开图片\n",[49,47682,47683],{"class":51,"line":8105},[49,47684,47685],{"class":283},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[49,47687,47688,47690,47692,47694],{"class":51,"line":8111},[49,47689,3117],{"class":59},[49,47691,47455],{"class":55},[49,47693,26134],{"class":59},[49,47695,47460],{"class":55},[49,47697,47698,47700,47702,47704],{"class":51,"line":8123},[49,47699,3293],{"class":59},[49,47701,47467],{"class":55},[49,47703,26134],{"class":59},[49,47705,47472],{"class":55},[49,47707,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726],{"class":51,"line":8135},[49,47709,2589],{"class":59},[49,47711,47479],{"class":55},[49,47713,47482],{"class":328},[49,47715,12525],{"class":55},[49,47717,47487],{"class":328},[49,47719,12525],{"class":55},[49,47721,47492],{"class":328},[49,47723,12525],{"class":55},[49,47725,47497],{"class":328},[49,47727,47728],{"class":55},")):\n",[49,47730,47731,47733,47735],{"class":51,"line":8147},[49,47732,45762],{"class":55},[49,47734,60],{"class":59},[49,47736,47512],{"class":55},[49,47738,47739,47741,47743],{"class":51,"line":9806},[49,47740,47517],{"class":55},[49,47742,60],{"class":59},[49,47744,47522],{"class":55},[49,47746,47747,47749,47751],{"class":51,"line":9831},[49,47748,47527],{"class":55},[49,47750,60],{"class":59},[49,47752,47532],{"class":55},[49,47754,47755],{"class":51,"line":9854},[49,47756,47541],{"class":283},[49,47758,47759,47761,47763,47765,47767],{"class":51,"line":9878},[49,47760,47546],{"class":55},[49,47762,60],{"class":59},[49,47764,47551],{"class":55},[49,47766,803],{"class":59},[49,47768,47556],{"class":66},[49,47770,47771],{"class":51,"line":9883},[49,47772,47570],{"class":283},[49,47774,47775],{"class":51,"line":9888},[49,47776,47777],{"class":283},"            # print(mean.shape)\n",[49,47779,47780],{"class":51,"line":9893},[49,47781,47565],{"class":283},[49,47783,47784],{"class":51,"line":9902},[49,47785,2492],{"emptyLinePlaceholder":151},[49,47787,47788,47791],{"class":51,"line":9907},[49,47789,47790],{"class":59},"            try",[49,47792,3831],{"class":55},[49,47794,47795,47798,47800,47803,47805,47808,47810],{"class":51,"line":9913},[49,47796,47797],{"class":55},"                diff ",[49,47799,60],{"class":59},[49,47801,47802],{"class":55}," (normalized_image_array ",[49,47804,751],{"class":59},[49,47806,47807],{"class":55}," mean) ",[49,47809,10751],{"class":59},[49,47811,47812],{"class":66}," 2\n",[49,47814,47815,47818,47820,47823,47825,47827,47829,47831,47833,47835],{"class":51,"line":9934},[49,47816,47817],{"class":55},"                sum_squared_diff ",[49,47819,9567],{"class":59},[49,47821,47822],{"class":55}," np.sum(diff, ",[49,47824,47603],{"class":126},[49,47826,60],{"class":59},[49,47828,228],{"class":55},[49,47830,415],{"class":66},[49,47832,12525],{"class":55},[49,47834,441],{"class":66},[49,47836,30586],{"class":55},[49,47838,47839,47842],{"class":51,"line":9940},[49,47840,47841],{"class":59},"            except",[49,47843,3831],{"class":55},[49,47845,47846,47849,47851,47853,47856],{"class":51,"line":9954},[49,47847,47848],{"class":66},"                print",[49,47850,228],{"class":55},[49,47852,277],{"class":59},[49,47854,47855],{"class":328},"\"捕获到自定义异常\"",[49,47857,81],{"class":55},[49,47859,47860],{"class":51,"line":9960},[49,47861,47862],{"class":283},"            # diff = (normalized_image_array - mean) ** 2\n",[49,47864,47865],{"class":51,"line":9987},[49,47866,47867],{"class":283},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[49,47869,47870],{"class":51,"line":9996},[49,47871,2492],{"emptyLinePlaceholder":151},[49,47873,47874,47877,47879,47882,47884],{"class":51,"line":10002},[49,47875,47876],{"class":55},"variance ",[49,47878,60],{"class":59},[49,47880,47881],{"class":55}," sum_squared_diff ",[49,47883,803],{"class":59},[49,47885,47639],{"class":55},[49,47887,47888],{"class":51,"line":10010},[49,47889,2492],{"emptyLinePlaceholder":151},[49,47891,47892,47894,47896,47899],{"class":51,"line":10015},[49,47893,30504],{"class":66},[49,47895,228],{"class":55},[49,47897,47898],{"class":328},"\"Mean:\"",[49,47900,47901],{"class":55},", mean)\n",[49,47903,47904,47906,47908,47911],{"class":51,"line":16694},[49,47905,30504],{"class":66},[49,47907,228],{"class":55},[49,47909,47910],{"class":328},"\"Variance:\"",[49,47912,47913],{"class":55},", variance)\n",[39,47915,47917],{"className":41,"code":47916,"language":43,"meta":44,"style":44},"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",[46,47918,47919,47925,47931,47941,47947,47957,47971,47981,47991,48001,48005,48015,48025,48029,48033,48041,48046,48051,48070,48074,48079,48084,48089,48094,48135,48140,48150,48155,48168,48173,48178,48183,48188,48193,48197,48202,48207,48229,48233,48265,48279,48289,48299,48303,48313,48327,48337,48347,48357,48363,48367,48371,48375,48379,48383,48391,48411,48415,48419,48423,48427,48443,48447,48451,48459,48463,48467,48475,48479,48483,48487,48495,48499,48503,48507,48515,48519,48527,48531,48539,48543,48551,48555,48563,48567,48571,48579,48583,48587,48599,48623,48637,48641,48645,48649,48657,48661,48669,48673,48681,48685,48693,48697,48705,48709,48717,48721,48733,48737,48745,48749,48757,48761,48765,48769,48773,48781,48785,48801,48805,48813,48817,48821,48825,48829,48833,48837,48841,48857,48861,48873,48877,48889,48893,48905,48909,48917,48921,48929,48933,48937,48941,48947,48951,48959,48963,48979,48983,48991,48995,49011,49023,49027,49039,49043,49047,49055,49059,49063,49071,49075,49083,49087,49095,49099,49103,49145,49187,49191,49195,49211,49215,49231,49235,49239,49247,49251,49255,49267,49305,49309,49313,49321,49325,49339,49349,49355,49361,49367,49373,49377,49381,49387,49391,49395,49403,49407,49425,49429,49433,49437,49453,49457,49461,49465,49469,49473,49493,49513,49517,49521,49525,49533,49541,49545,49561,49581,49601,49605,49610,49619,49628,49633,49638,49643,49656,49661,49670,49679,49696],{"__ignoreMap":44},[49,47920,47921,47923],{"class":51,"line":52},[49,47922,30481],{"class":59},[49,47924,31911],{"class":55},[49,47926,47927,47929],{"class":51,"line":84},[49,47928,30481],{"class":59},[49,47930,31918],{"class":55},[49,47932,47933,47935,47937,47939],{"class":51,"line":109},[49,47934,30481],{"class":59},[49,47936,31929],{"class":55},[49,47938,31472],{"class":59},[49,47940,31934],{"class":55},[49,47942,47943,47945],{"class":51,"line":120},[49,47944,30481],{"class":59},[49,47946,30484],{"class":55},[49,47948,47949,47951,47953,47955],{"class":51,"line":135},[49,47950,30826],{"class":59},[49,47952,31504],{"class":55},[49,47954,30481],{"class":59},[49,47956,31951],{"class":55},[49,47958,47959,47961,47963,47965,47968],{"class":51,"line":1306},[49,47960,30826],{"class":59},[49,47962,31457],{"class":55},[49,47964,30481],{"class":59},[49,47966,47967],{"class":55}," ImageFolder ",[49,47969,47970],{"class":283},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[49,47972,47973,47975,47977,47979],{"class":51,"line":1312},[49,47974,30826],{"class":59},[49,47976,31487],{"class":55},[49,47978,30481],{"class":59},[49,47980,31492],{"class":55},[49,47982,47983,47985,47987,47989],{"class":51,"line":1403},[49,47984,30481],{"class":59},[49,47986,31504],{"class":55},[49,47988,31472],{"class":59},[49,47990,31509],{"class":55},[49,47992,47993,47995,47997,47999],{"class":51,"line":1409},[49,47994,30481],{"class":59},[49,47996,31521],{"class":55},[49,47998,31472],{"class":59},[49,48000,31526],{"class":55},[49,48002,48003],{"class":51,"line":1421},[49,48004,31996],{"class":283},[49,48006,48007,48009,48011,48013],{"class":51,"line":1704},[49,48008,30826],{"class":59},[49,48010,32003],{"class":55},[49,48012,30481],{"class":59},[49,48014,43120],{"class":55},[49,48016,48017,48019,48021,48023],{"class":51,"line":1709},[49,48018,30826],{"class":59},[49,48020,30829],{"class":55},[49,48022,30481],{"class":59},[49,48024,30834],{"class":55},[49,48026,48027],{"class":51,"line":1715},[49,48028,2492],{"emptyLinePlaceholder":151},[49,48030,48031],{"class":51,"line":1720},[49,48032,32031],{"class":283},[49,48034,48035,48037,48039],{"class":51,"line":1734},[49,48036,32036],{"class":59},[49,48038,32039],{"class":2055},[49,48040,32042],{"class":55},[49,48042,48043],{"class":51,"line":1739},[49,48044,48045],{"class":283},"    # 导入自己的数据集，并进行数据处理\n",[49,48047,48048],{"class":51,"line":1745},[49,48049,48050],{"class":283},"    # 定义数据集的路径\n",[49,48052,48053,48056,48058,48060,48062,48064,48068],{"class":51,"line":1766},[49,48054,48055],{"class":66},"    ROOT_PATH",[49,48057,60],{"class":59},[49,48059,889],{"class":59},[49,48061,474],{"class":328},[49,48063,777],{"class":66},[49,48065,48067],{"class":48066},"sA_wV","\u002Fdata\u002Ftrain",[49,48069,25224],{"class":328},[49,48071,48072],{"class":51,"line":1771},[49,48073,2492],{"emptyLinePlaceholder":151},[49,48075,48076],{"class":51,"line":1785},[49,48077,48078],{"class":283},"    # 定义归一化方法\n",[49,48080,48081],{"class":51,"line":1790},[49,48082,48083],{"class":283},"    # 这里需要先计算一下数据集的均值和方差\n",[49,48085,48086],{"class":51,"line":1819},[49,48087,48088],{"class":283},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[49,48090,48091],{"class":51,"line":1824},[49,48092,48093],{"class":283},"    # 第一个参数是均值，第二个参数是方差\n",[49,48095,48096,48099,48101,48104,48107,48109,48112,48114,48117,48120,48123,48125,48128,48130,48133],{"class":51,"line":1841},[49,48097,48098],{"class":55},"    normalize",[49,48100,60],{"class":59},[49,48102,48103],{"class":55},"transforms.Normalize([",[49,48105,48106],{"class":66},"0.162",[49,48108,76],{"class":55},[49,48110,48111],{"class":66},"0.151",[49,48113,76],{"class":55},[49,48115,48116],{"class":66},"0.138",[49,48118,48119],{"class":55},"],[",[49,48121,48122],{"class":66},"0.058",[49,48124,76],{"class":55},[49,48126,48127],{"class":66},"0.052",[49,48129,76],{"class":55},[49,48131,48132],{"class":66},"0.048",[49,48134,106],{"class":55},[49,48136,48137],{"class":51,"line":1846},[49,48138,48139],{"class":283},"    # 定义数据集处理方法变量\n",[49,48141,48142,48145,48147],{"class":51,"line":1851},[49,48143,48144],{"class":55},"    train_transform",[49,48146,60],{"class":59},[49,48148,48149],{"class":55},"transforms.Compose([\n",[49,48151,48152],{"class":51,"line":1856},[49,48153,48154],{"class":283},"        # 调整图像大小为224*224\n",[49,48156,48157,48160,48162,48164,48166],{"class":51,"line":1870},[49,48158,48159],{"class":55},"        transforms.Resize((",[49,48161,31590],{"class":66},[49,48163,76],{"class":55},[49,48165,31590],{"class":66},[49,48167,42711],{"class":55},[49,48169,48170],{"class":51,"line":1875},[49,48171,48172],{"class":283},"        # 将图像转换为张量\n",[49,48174,48175],{"class":51,"line":2669},[49,48176,48177],{"class":55},"        transforms.ToTensor(),\n",[49,48179,48180],{"class":51,"line":2683},[49,48181,48182],{"class":55},"        normalize])\n",[49,48184,48185],{"class":51,"line":2691},[49,48186,48187],{"class":283},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[49,48189,48190],{"class":51,"line":2696},[49,48191,48192],{"class":283},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[49,48194,48195],{"class":51,"line":2702},[49,48196,2492],{"emptyLinePlaceholder":151},[49,48198,48199],{"class":51,"line":2708},[49,48200,48201],{"class":283},"    # 加载数据集\n",[49,48203,48204],{"class":51,"line":2713},[49,48205,48206],{"class":283},"    # 传入数据集路径与处理方法\n",[49,48208,48209,48211,48213,48216,48219,48221,48224,48226],{"class":51,"line":8038},[49,48210,32047],{"class":55},[49,48212,60],{"class":59},[49,48214,48215],{"class":55},"ImageFolder(",[49,48217,48218],{"class":66},"ROOT_PATH",[49,48220,76],{"class":55},[49,48222,48223],{"class":126},"transform",[49,48225,60],{"class":59},[49,48227,48228],{"class":55},"train_transform)\n",[49,48230,48231],{"class":51,"line":8062},[49,48232,2492],{"emptyLinePlaceholder":151},[49,48234,48235,48237,48239,48241,48243,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263],{"class":51,"line":8067},[49,48236,32099],{"class":55},[49,48238,60],{"class":59},[49,48240,32104],{"class":55},[49,48242,32107],{"class":66},[49,48244,228],{"class":55},[49,48246,32112],{"class":66},[49,48248,674],{"class":59},[49,48250,7448],{"class":66},[49,48252,32119],{"class":55},[49,48254,32107],{"class":66},[49,48256,228],{"class":55},[49,48258,32126],{"class":66},[49,48260,674],{"class":59},[49,48262,7448],{"class":66},[49,48264,32133],{"class":55},[49,48266,48267,48269,48271,48273,48275,48277],{"class":51,"line":8073},[49,48268,32138],{"class":55},[49,48270,60],{"class":59},[49,48272,32143],{"class":55},[49,48274,31626],{"class":126},[49,48276,60],{"class":59},[49,48278,31631],{"class":55},[49,48280,48281,48283,48285,48287],{"class":51,"line":8100},[49,48282,32154],{"class":126},[49,48284,60],{"class":59},[49,48286,421],{"class":66},[49,48288,31555],{"class":55},[49,48290,48291,48293,48295,48297],{"class":51,"line":8105},[49,48292,32166],{"class":126},[49,48294,60],{"class":59},[49,48296,31565],{"class":66},[49,48298,31555],{"class":55},[49,48300,48301],{"class":51,"line":8111},[49,48302,32177],{"class":283},[49,48304,48305,48307,48309,48311],{"class":51,"line":8123},[49,48306,32182],{"class":126},[49,48308,60],{"class":59},[49,48310,616],{"class":66},[49,48312,81],{"class":55},[49,48314,48315,48317,48319,48321,48323,48325],{"class":51,"line":8135},[49,48316,32193],{"class":55},[49,48318,60],{"class":59},[49,48320,31623],{"class":55},[49,48322,31626],{"class":126},[49,48324,60],{"class":59},[49,48326,32204],{"class":55},[49,48328,48329,48331,48333,48335],{"class":51,"line":8147},[49,48330,32209],{"class":126},[49,48332,60],{"class":59},[49,48334,421],{"class":66},[49,48336,31555],{"class":55},[49,48338,48339,48341,48343,48345],{"class":51,"line":9806},[49,48340,32220],{"class":126},[49,48342,60],{"class":59},[49,48344,31565],{"class":66},[49,48346,31555],{"class":55},[49,48348,48349,48351,48353,48355],{"class":51,"line":9831},[49,48350,32231],{"class":126},[49,48352,60],{"class":59},[49,48354,616],{"class":66},[49,48356,81],{"class":55},[49,48358,48359,48361],{"class":51,"line":9854},[49,48360,4182],{"class":59},[49,48362,32244],{"class":55},[49,48364,48365],{"class":51,"line":9878},[49,48366,2492],{"emptyLinePlaceholder":151},[49,48368,48369],{"class":51,"line":9883},[49,48370,32253],{"class":283},[49,48372,48373],{"class":51,"line":9888},[49,48374,32258],{"class":283},[49,48376,48377],{"class":51,"line":9893},[49,48378,2492],{"emptyLinePlaceholder":151},[49,48380,48381],{"class":51,"line":9902},[49,48382,32267],{"class":283},[49,48384,48385,48387,48389],{"class":51,"line":9907},[49,48386,32036],{"class":59},[49,48388,32274],{"class":2055},[49,48390,32277],{"class":55},[49,48392,48393,48395,48397,48399,48401,48403,48405,48407,48409],{"class":51,"line":9913},[49,48394,31326],{"class":55},[49,48396,60],{"class":59},[49,48398,30540],{"class":55},[49,48400,31333],{"class":328},[49,48402,1796],{"class":59},[49,48404,31338],{"class":55},[49,48406,1793],{"class":59},[49,48408,32296],{"class":328},[49,48410,81],{"class":55},[49,48412,48413],{"class":51,"line":9934},[49,48414,2492],{"emptyLinePlaceholder":151},[49,48416,48417],{"class":51,"line":9940},[49,48418,32311],{"class":283},[49,48420,48421],{"class":51,"line":9954},[49,48422,32316],{"class":283},[49,48424,48425],{"class":51,"line":9960},[49,48426,32321],{"class":283},[49,48428,48429,48431,48433,48435,48437,48439,48441],{"class":51,"line":9987},[49,48430,32326],{"class":55},[49,48432,60],{"class":59},[49,48434,32331],{"class":55},[49,48436,32334],{"class":126},[49,48438,60],{"class":59},[49,48440,32339],{"class":66},[49,48442,81],{"class":55},[49,48444,48445],{"class":51,"line":9996},[49,48446,2492],{"emptyLinePlaceholder":151},[49,48448,48449],{"class":51,"line":10002},[49,48450,32350],{"class":283},[49,48452,48453,48455,48457],{"class":51,"line":10010},[49,48454,32355],{"class":55},[49,48456,60],{"class":59},[49,48458,32360],{"class":55},[49,48460,48461],{"class":51,"line":10015},[49,48462,2492],{"emptyLinePlaceholder":151},[49,48464,48465],{"class":51,"line":16694},[49,48466,32369],{"class":283},[49,48468,48469,48471,48473],{"class":51,"line":16700},[49,48470,31378],{"class":55},[49,48472,60],{"class":59},[49,48474,32378],{"class":55},[49,48476,48477],{"class":51,"line":16723},[49,48478,32383],{"class":283},[49,48480,48481],{"class":51,"line":16729},[49,48482,32388],{"class":283},[49,48484,48485],{"class":51,"line":16752},[49,48486,32393],{"class":283},[49,48488,48489,48491,48493],{"class":51,"line":16766},[49,48490,32398],{"class":55},[49,48492,60],{"class":59},[49,48494,32403],{"class":55},[49,48496,48497],{"class":51,"line":16786},[49,48498,2492],{"emptyLinePlaceholder":151},[49,48500,48501],{"class":51,"line":16792},[49,48502,32416],{"class":283},[49,48504,48505],{"class":51,"line":16803},[49,48506,32421],{"class":283},[49,48508,48509,48511,48513],{"class":51,"line":16826},[49,48510,32426],{"class":55},[49,48512,60],{"class":59},[49,48514,32431],{"class":66},[49,48516,48517],{"class":51,"line":16848},[49,48518,32436],{"class":283},[49,48520,48521,48523,48525],{"class":51,"line":16853},[49,48522,32441],{"class":55},[49,48524,60],{"class":59},[49,48526,32446],{"class":55},[49,48528,48529],{"class":51,"line":16859},[49,48530,32451],{"class":283},[49,48532,48533,48535,48537],{"class":51,"line":16873},[49,48534,32456],{"class":55},[49,48536,60],{"class":59},[49,48538,32446],{"class":55},[49,48540,48541],{"class":51,"line":16886},[49,48542,32465],{"class":283},[49,48544,48545,48547,48549],{"class":51,"line":16891},[49,48546,32470],{"class":55},[49,48548,60],{"class":59},[49,48550,32446],{"class":55},[49,48552,48553],{"class":51,"line":16905},[49,48554,32479],{"class":283},[49,48556,48557,48559,48561],{"class":51,"line":16910},[49,48558,32484],{"class":55},[49,48560,60],{"class":59},[49,48562,32446],{"class":55},[49,48564,48565],{"class":51,"line":16916},[49,48566,2492],{"emptyLinePlaceholder":151},[49,48568,48569],{"class":51,"line":16921},[49,48570,32497],{"class":283},[49,48572,48573,48575,48577],{"class":51,"line":16935},[49,48574,32502],{"class":55},[49,48576,60],{"class":59},[49,48578,32507],{"class":55},[49,48580,48581],{"class":51,"line":16940},[49,48582,2492],{"emptyLinePlaceholder":151},[49,48584,48585],{"class":51,"line":16945},[49,48586,32520],{"class":283},[49,48588,48589,48591,48593,48595,48597],{"class":51,"line":16959},[49,48590,3293],{"class":59},[49,48592,32527],{"class":55},[49,48594,26134],{"class":59},[49,48596,32532],{"class":66},[49,48598,32535],{"class":55},[49,48600,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619,48621],{"class":51,"line":16971},[49,48602,32540],{"class":66},[49,48604,228],{"class":55},[49,48606,32545],{"class":328},[49,48608,32548],{"class":66},[49,48610,803],{"class":328},[49,48612,32548],{"class":66},[49,48614,474],{"class":328},[49,48616,32557],{"class":55},[49,48618,751],{"class":59},[49,48620,441],{"class":66},[49,48622,30586],{"class":55},[49,48624,48625,48627,48629,48631,48633,48635],{"class":51,"line":16976},[49,48626,32540],{"class":66},[49,48628,228],{"class":55},[49,48630,32572],{"class":328},[49,48632,674],{"class":59},[49,48634,95],{"class":66},[49,48636,81],{"class":55},[49,48638,48639],{"class":51,"line":16989},[49,48640,2492],{"emptyLinePlaceholder":151},[49,48642,48643],{"class":51,"line":16994},[49,48644,32587],{"class":283},[49,48646,48647],{"class":51,"line":16999},[49,48648,32592],{"class":283},[49,48650,48651,48653,48655],{"class":51,"line":17004},[49,48652,32597],{"class":55},[49,48654,60],{"class":59},[49,48656,32431],{"class":66},[49,48658,48659],{"class":51,"line":17017},[49,48660,32606],{"class":283},[49,48662,48663,48665,48667],{"class":51,"line":17022},[49,48664,32611],{"class":55},[49,48666,60],{"class":59},[49,48668,3177],{"class":66},[49,48670,48671],{"class":51,"line":32722},[49,48672,32620],{"class":283},[49,48674,48675,48677,48679],{"class":51,"line":32728},[49,48676,32625],{"class":55},[49,48678,60],{"class":59},[49,48680,32431],{"class":66},[49,48682,48683],{"class":51,"line":32734},[49,48684,32634],{"class":283},[49,48686,48687,48689,48691],{"class":51,"line":32740},[49,48688,32639],{"class":55},[49,48690,60],{"class":59},[49,48692,3177],{"class":66},[49,48694,48695],{"class":51,"line":32746},[49,48696,32648],{"class":283},[49,48698,48699,48701,48703],{"class":51,"line":32757},[49,48700,32653],{"class":55},[49,48702,60],{"class":59},[49,48704,3177],{"class":66},[49,48706,48707],{"class":51,"line":32763},[49,48708,32662],{"class":283},[49,48710,48711,48713,48715],{"class":51,"line":32783},[49,48712,32667],{"class":55},[49,48714,60],{"class":59},[49,48716,3177],{"class":66},[49,48718,48719],{"class":51,"line":32789},[49,48720,32676],{"class":283},[49,48722,48723,48725,48727,48729,48731],{"class":51,"line":32800},[49,48724,3495],{"class":59},[49,48726,31690],{"class":55},[49,48728,26134],{"class":59},[49,48730,31695],{"class":66},[49,48732,32689],{"class":55},[49,48734,48735],{"class":51,"line":32806},[49,48736,32694],{"class":283},[49,48738,48739,48741,48743],{"class":51,"line":32812},[49,48740,32699],{"class":55},[49,48742,60],{"class":59},[49,48744,32704],{"class":55},[49,48746,48747],{"class":51,"line":32818},[49,48748,32709],{"class":283},[49,48750,48751,48753,48755],{"class":51,"line":32824},[49,48752,32714],{"class":55},[49,48754,60],{"class":59},[49,48756,32719],{"class":55},[49,48758,48759],{"class":51,"line":32830},[49,48760,32725],{"class":283},[49,48762,48763],{"class":51,"line":32836},[49,48764,32731],{"class":55},[49,48766,48767],{"class":51,"line":32842},[49,48768,32737],{"class":283},[49,48770,48771],{"class":51,"line":32862},[49,48772,32743],{"class":283},[49,48774,48775,48777,48779],{"class":51,"line":32868},[49,48776,32749],{"class":55},[49,48778,60],{"class":59},[49,48780,32754],{"class":55},[49,48782,48783],{"class":51,"line":32884},[49,48784,32760],{"class":283},[49,48786,48787,48789,48791,48793,48795,48797,48799],{"class":51,"line":32890},[49,48788,32766],{"class":55},[49,48790,60],{"class":59},[49,48792,32771],{"class":55},[49,48794,32774],{"class":126},[49,48796,60],{"class":59},[49,48798,441],{"class":66},[49,48800,81],{"class":55},[49,48802,48803],{"class":51,"line":32904},[49,48804,32786],{"class":283},[49,48806,48807,48809,48811],{"class":51,"line":32910},[49,48808,32792],{"class":55},[49,48810,60],{"class":59},[49,48812,32797],{"class":55},[49,48814,48815],{"class":51,"line":32925},[49,48816,32803],{"class":283},[49,48818,48819],{"class":51,"line":32931},[49,48820,32809],{"class":55},[49,48822,48823],{"class":51,"line":32940},[49,48824,32815],{"class":283},[49,48826,48827],{"class":51,"line":32946},[49,48828,32821],{"class":55},[49,48830,48831],{"class":51,"line":32955},[49,48832,32827],{"class":283},[49,48834,48835],{"class":51,"line":32961},[49,48836,32833],{"class":55},[49,48838,48839],{"class":51,"line":32967},[49,48840,32839],{"class":283},[49,48842,48843,48845,48847,48849,48851,48853,48855],{"class":51,"line":32976},[49,48844,32845],{"class":55},[49,48846,9567],{"class":59},[49,48848,32850],{"class":55},[49,48850,674],{"class":59},[49,48852,32855],{"class":55},[49,48854,415],{"class":66},[49,48856,81],{"class":55},[49,48858,48859],{"class":51,"line":32982},[49,48860,32865],{"class":283},[49,48862,48863,48865,48867,48869,48871],{"class":51,"line":32993},[49,48864,32871],{"class":55},[49,48866,9567],{"class":59},[49,48868,32876],{"class":55},[49,48870,3041],{"class":59},[49,48872,32881],{"class":55},[49,48874,48875],{"class":51,"line":32999},[49,48876,32887],{"class":283},[49,48878,48879,48881,48883,48885,48887],{"class":51,"line":33018},[49,48880,32893],{"class":55},[49,48882,9567],{"class":59},[49,48884,32855],{"class":55},[49,48886,415],{"class":66},[49,48888,81],{"class":55},[49,48890,48891],{"class":51,"line":33024},[49,48892,32907],{"class":283},[49,48894,48895,48897,48899,48901,48903],{"class":51,"line":33035},[49,48896,3495],{"class":59},[49,48898,32915],{"class":55},[49,48900,26134],{"class":59},[49,48902,31695],{"class":66},[49,48904,32922],{"class":55},[49,48906,48907],{"class":51,"line":33041},[49,48908,32928],{"class":283},[49,48910,48911,48913,48915],{"class":51,"line":33061},[49,48912,32699],{"class":55},[49,48914,60],{"class":59},[49,48916,32704],{"class":55},[49,48918,48919],{"class":51,"line":33077},[49,48920,32943],{"class":283},[49,48922,48923,48925,48927],{"class":51,"line":33083},[49,48924,32714],{"class":55},[49,48926,60],{"class":59},[49,48928,32719],{"class":55},[49,48930,48931],{"class":51,"line":33097},[49,48932,32958],{"class":283},[49,48934,48935],{"class":51,"line":33103},[49,48936,32964],{"class":55},[49,48938,48939],{"class":51,"line":33109},[49,48940,36445],{"class":283},[49,48942,48943,48945],{"class":51,"line":33120},[49,48944,32970],{"class":59},[49,48946,32973],{"class":55},[49,48948,48949],{"class":51,"line":33126},[49,48950,32979],{"class":283},[49,48952,48953,48955,48957],{"class":51,"line":33132},[49,48954,36460],{"class":55},[49,48956,60],{"class":59},[49,48958,32754],{"class":55},[49,48960,48961],{"class":51,"line":33142},[49,48962,32996],{"class":283},[49,48964,48965,48967,48969,48971,48973,48975,48977],{"class":51,"line":33148},[49,48966,36473],{"class":55},[49,48968,60],{"class":59},[49,48970,32771],{"class":55},[49,48972,32774],{"class":126},[49,48974,60],{"class":59},[49,48976,441],{"class":66},[49,48978,81],{"class":55},[49,48980,48981],{"class":51,"line":33159},[49,48982,33021],{"class":283},[49,48984,48985,48987,48989],{"class":51,"line":33165},[49,48986,36494],{"class":55},[49,48988,60],{"class":59},[49,48990,32797],{"class":55},[49,48992,48993],{"class":51,"line":33175},[49,48994,33038],{"class":283},[49,48996,48997,48999,49001,49003,49005,49007,49009],{"class":51,"line":33180},[49,48998,36507],{"class":55},[49,49000,9567],{"class":59},[49,49002,36512],{"class":55},[49,49004,674],{"class":59},[49,49006,32855],{"class":55},[49,49008,415],{"class":66},[49,49010,81],{"class":55},[49,49012,49013,49015,49017,49019,49021],{"class":51,"line":33186},[49,49014,36525],{"class":55},[49,49016,9567],{"class":59},[49,49018,32876],{"class":55},[49,49020,3041],{"class":59},[49,49022,32881],{"class":55},[49,49024,49025],{"class":51,"line":33235},[49,49026,36538],{"class":283},[49,49028,49029,49031,49033,49035,49037],{"class":51,"line":33282},[49,49030,36543],{"class":55},[49,49032,9567],{"class":59},[49,49034,32855],{"class":55},[49,49036,415],{"class":66},[49,49038,81],{"class":55},[49,49040,49041],{"class":51,"line":33287},[49,49042,33100],{"class":283},[49,49044,49045],{"class":51,"line":33293},[49,49046,33106],{"class":283},[49,49048,49049,49051,49053],{"class":51,"line":33312},[49,49050,33112],{"class":55},[49,49052,803],{"class":59},[49,49054,33117],{"class":55},[49,49056,49057],{"class":51,"line":33318},[49,49058,33123],{"class":283},[49,49060,49061],{"class":51,"line":33338},[49,49062,33129],{"class":283},[49,49064,49065,49067,49069],{"class":51,"line":33344},[49,49066,33135],{"class":55},[49,49068,803],{"class":59},[49,49070,33117],{"class":55},[49,49072,49073],{"class":51,"line":33350},[49,49074,33145],{"class":283},[49,49076,49077,49079,49081],{"class":51,"line":33360},[49,49078,33151],{"class":55},[49,49080,803],{"class":59},[49,49082,33156],{"class":55},[49,49084,49085],{"class":51,"line":33365},[49,49086,33162],{"class":283},[49,49088,49089,49091,49093],{"class":51,"line":33371},[49,49090,33168],{"class":55},[49,49092,803],{"class":59},[49,49094,33156],{"class":55},[49,49096,49097],{"class":51,"line":33387},[49,49098,2492],{"emptyLinePlaceholder":151},[49,49100,49101],{"class":51,"line":33432},[49,49102,33183],{"class":283},[49,49104,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143],{"class":51,"line":33438},[49,49106,32540],{"class":66},[49,49108,228],{"class":55},[49,49110,3684],{"class":328},[49,49112,32548],{"class":66},[49,49114,33197],{"class":328},[49,49116,1115],{"class":66},[49,49118,33202],{"class":59},[49,49120,1165],{"class":66},[49,49122,33207],{"class":328},[49,49124,1115],{"class":66},[49,49126,33202],{"class":59},[49,49128,1165],{"class":66},[49,49130,3684],{"class":328},[49,49132,33218],{"class":55},[49,49134,751],{"class":59},[49,49136,441],{"class":66},[49,49138,33225],{"class":55},[49,49140,751],{"class":59},[49,49142,441],{"class":66},[49,49144,33232],{"class":55},[49,49146,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185],{"class":51,"line":33444},[49,49148,32540],{"class":66},[49,49150,228],{"class":55},[49,49152,3684],{"class":328},[49,49154,32548],{"class":66},[49,49156,33246],{"class":328},[49,49158,1115],{"class":66},[49,49160,33202],{"class":59},[49,49162,1165],{"class":66},[49,49164,33255],{"class":328},[49,49166,1115],{"class":66},[49,49168,33202],{"class":59},[49,49170,1165],{"class":66},[49,49172,3684],{"class":328},[49,49174,33266],{"class":55},[49,49176,751],{"class":59},[49,49178,441],{"class":66},[49,49180,33273],{"class":55},[49,49182,751],{"class":59},[49,49184,441],{"class":66},[49,49186,33232],{"class":55},[49,49188,49189],{"class":51,"line":33450},[49,49190,2492],{"emptyLinePlaceholder":151},[49,49192,49193],{"class":51,"line":33461},[49,49194,33290],{"class":283},[49,49196,49197,49199,49201,49203,49205,49207,49209],{"class":51,"line":33467},[49,49198,2589],{"class":59},[49,49200,33298],{"class":55},[49,49202,751],{"class":59},[49,49204,441],{"class":66},[49,49206,1159],{"class":55},[49,49208,1179],{"class":59},[49,49210,33309],{"class":55},[49,49212,49213],{"class":51,"line":33473},[49,49214,33315],{"class":283},[49,49216,49217,49219,49221,49223,49225,49227,49229],{"class":51,"line":33479},[49,49218,33321],{"class":55},[49,49220,266],{"class":66},[49,49222,60],{"class":59},[49,49224,33328],{"class":55},[49,49226,751],{"class":59},[49,49228,441],{"class":66},[49,49230,33335],{"class":55},[49,49232,49233],{"class":51,"line":33497},[49,49234,33341],{"class":283},[49,49236,49237],{"class":51,"line":33511},[49,49238,33347],{"class":283},[49,49240,49241,49243,49245],{"class":51,"line":33520},[49,49242,33353],{"class":55},[49,49244,60],{"class":59},[49,49246,32403],{"class":55},[49,49248,49249],{"class":51,"line":33529},[49,49250,2492],{"emptyLinePlaceholder":151},[49,49252,49253],{"class":51,"line":33538},[49,49254,33368],{"class":283},[49,49256,49257,49259,49261,49263,49265],{"class":51,"line":33547},[49,49258,33374],{"class":55},[49,49260,60],{"class":59},[49,49262,33379],{"class":55},[49,49264,751],{"class":59},[49,49266,33384],{"class":55},[49,49268,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293,49295,49297,49299,49301,49303],{"class":51,"line":33553},[49,49270,32540],{"class":66},[49,49272,228],{"class":55},[49,49274,33394],{"class":328},[49,49276,1115],{"class":66},[49,49278,33399],{"class":59},[49,49280,1165],{"class":66},[49,49282,763],{"class":328},[49,49284,1115],{"class":66},[49,49286,33399],{"class":59},[49,49288,1165],{"class":66},[49,49290,33412],{"class":328},[49,49292,33415],{"class":55},[49,49294,33418],{"class":59},[49,49296,1126],{"class":66},[49,49298,33423],{"class":55},[49,49300,550],{"class":59},[49,49302,1126],{"class":66},[49,49304,30586],{"class":55},[49,49306,49307],{"class":51,"line":33559},[49,49308,36822],{"class":283},[49,49310,49311],{"class":51,"line":33567},[49,49312,36827],{"class":283},[49,49314,49315,49317,49319],{"class":51,"line":33572},[49,49316,36832],{"class":55},[49,49318,33456],{"class":328},[49,49320,81],{"class":55},[49,49322,49323],{"class":51,"line":33578},[49,49324,33476],{"class":283},[49,49326,49327,49329,49331,49333,49335,49337],{"class":51,"line":33589},[49,49328,33482],{"class":55},[49,49330,60],{"class":59},[49,49332,33487],{"class":55},[49,49334,33490],{"class":126},[49,49336,60],{"class":59},[49,49338,1638],{"class":55},[49,49340,49341,49343,49345,49347],{"class":51,"line":33595},[49,49342,33500],{"class":328},[49,49344,1078],{"class":55},[49,49346,33505],{"class":66},[49,49348,33508],{"class":55},[49,49350,49351,49353],{"class":51,"line":33615},[49,49352,33514],{"class":328},[49,49354,33517],{"class":55},[49,49356,49357,49359],{"class":51,"line":33621},[49,49358,33523],{"class":328},[49,49360,33526],{"class":55},[49,49362,49363,49365],{"class":51,"line":33627},[49,49364,33532],{"class":328},[49,49366,33535],{"class":55},[49,49368,49369,49371],{"class":51,"line":33633},[49,49370,33541],{"class":328},[49,49372,33544],{"class":55},[49,49374,49375],{"class":51,"line":33650},[49,49376,33550],{"class":55},[49,49378,49379],{"class":51,"line":33656},[49,49380,33556],{"class":283},[49,49382,49383,49385],{"class":51,"line":33662},[49,49384,4182],{"class":59},[49,49386,33564],{"class":55},[49,49388,49389],{"class":51,"line":33668},[49,49390,2492],{"emptyLinePlaceholder":151},[49,49392,49393],{"class":51,"line":33674},[49,49394,33575],{"class":283},[49,49396,49397,49399,49401],{"class":51,"line":33680},[49,49398,32036],{"class":59},[49,49400,33583],{"class":2055},[49,49402,33586],{"class":55},[49,49404,49405],{"class":51,"line":33707},[49,49406,33592],{"class":283},[49,49408,49409,49411,49413,49415,49417,49419,49421,49423],{"class":51,"line":33731},[49,49410,33598],{"class":55},[49,49412,31782],{"class":126},[49,49414,60],{"class":59},[49,49416,228],{"class":55},[49,49418,717],{"class":66},[49,49420,76],{"class":55},[49,49422,515],{"class":66},[49,49424,30586],{"class":55},[49,49426,49427],{"class":51,"line":33737},[49,49428,33618],{"class":283},[49,49430,49431],{"class":51,"line":33743},[49,49432,33624],{"class":283},[49,49434,49435],{"class":51,"line":33749},[49,49436,33630],{"class":283},[49,49438,49439,49441,49443,49445,49447,49449,49451],{"class":51,"line":33760},[49,49440,31816],{"class":55},[49,49442,441],{"class":66},[49,49444,76],{"class":55},[49,49446,301],{"class":66},[49,49448,76],{"class":55},[49,49450,441],{"class":66},[49,49452,81],{"class":55},[49,49454,49455],{"class":51,"line":33771},[49,49456,33653],{"class":283},[49,49458,49459],{"class":51,"line":33777},[49,49460,33659],{"class":283},[49,49462,49463],{"class":51,"line":33794},[49,49464,33665],{"class":283},[49,49466,49467],{"class":51,"line":33817},[49,49468,33671],{"class":283},[49,49470,49471],{"class":51,"line":33840},[49,49472,33677],{"class":283},[49,49474,49475,49477,49479,49481,49483,49485,49487,49489,49491],{"class":51,"line":33846},[49,49476,33683],{"class":55},[49,49478,33686],{"class":328},[49,49480,33689],{"class":55},[49,49482,33692],{"class":328},[49,49484,76],{"class":55},[49,49486,33697],{"class":126},[49,49488,60],{"class":59},[49,49490,33702],{"class":328},[49,49492,81],{"class":55},[49,49494,49495,49497,49499,49501,49503,49505,49507,49509,49511],{"class":51,"line":33851},[49,49496,33683],{"class":55},[49,49498,33686],{"class":328},[49,49500,33714],{"class":55},[49,49502,33717],{"class":328},[49,49504,76],{"class":55},[49,49506,33697],{"class":126},[49,49508,60],{"class":59},[49,49510,33726],{"class":328},[49,49512,81],{"class":55},[49,49514,49515],{"class":51,"line":33860},[49,49516,33734],{"class":283},[49,49518,49519],{"class":51,"line":33870},[49,49520,33740],{"class":55},[49,49522,49523],{"class":51,"line":33876},[49,49524,33746],{"class":283},[49,49526,49527,49529,49531],{"class":51,"line":33881},[49,49528,33752],{"class":55},[49,49530,33755],{"class":328},[49,49532,81],{"class":55},[49,49534,49535,49537,49539],{"class":51,"line":33887},[49,49536,33763],{"class":55},[49,49538,33766],{"class":328},[49,49540,81],{"class":55},[49,49542,49543],{"class":51,"line":33900},[49,49544,33774],{"class":283},[49,49546,49547,49549,49551,49553,49555,49557,49559],{"class":51,"line":33906},[49,49548,31816],{"class":55},[49,49550,441],{"class":66},[49,49552,76],{"class":55},[49,49554,301],{"class":66},[49,49556,76],{"class":55},[49,49558,301],{"class":66},[49,49560,81],{"class":55},[49,49562,49563,49565,49567,49569,49571,49573,49575,49577,49579],{"class":51,"line":33917},[49,49564,33683],{"class":55},[49,49566,33686],{"class":328},[49,49568,33801],{"class":55},[49,49570,33692],{"class":328},[49,49572,76],{"class":55},[49,49574,33697],{"class":126},[49,49576,60],{"class":59},[49,49578,33812],{"class":328},[49,49580,81],{"class":55},[49,49582,49583,49585,49587,49589,49591,49593,49595,49597,49599],{"class":51,"line":33928},[49,49584,33683],{"class":55},[49,49586,33686],{"class":328},[49,49588,33824],{"class":55},[49,49590,33717],{"class":328},[49,49592,76],{"class":55},[49,49594,33697],{"class":126},[49,49596,60],{"class":59},[49,49598,33835],{"class":328},[49,49600,81],{"class":55},[49,49602,49603],{"class":51,"line":33947},[49,49604,33843],{"class":283},[49,49606,49608],{"class":51,"line":49607},219,[49,49609,33740],{"class":55},[49,49611,49613,49615,49617],{"class":51,"line":49612},220,[49,49614,33752],{"class":55},[49,49616,33686],{"class":328},[49,49618,81],{"class":55},[49,49620,49622,49624,49626],{"class":51,"line":49621},221,[49,49623,33763],{"class":55},[49,49625,33865],{"class":328},[49,49627,81],{"class":55},[49,49629,49631],{"class":51,"line":49630},222,[49,49632,33873],{"class":55},[49,49634,49636],{"class":51,"line":49635},223,[49,49637,2492],{"emptyLinePlaceholder":151},[49,49639,49641],{"class":51,"line":49640},224,[49,49642,33884],{"class":283},[49,49644,49646,49648,49650,49652,49654],{"class":51,"line":49645},225,[49,49647,1623],{"class":59},[49,49649,31309],{"class":66},[49,49651,3041],{"class":59},[49,49653,31314],{"class":328},[49,49655,3831],{"class":55},[49,49657,49659],{"class":51,"line":49658},226,[49,49660,33903],{"class":283},[49,49662,49664,49666,49668],{"class":51,"line":49663},227,[49,49665,44635],{"class":55},[49,49667,60],{"class":59},[49,49669,44640],{"class":55},[49,49671,49673,49675,49677],{"class":51,"line":49672},228,[49,49674,33920],{"class":55},[49,49676,60],{"class":59},[49,49678,33925],{"class":55},[49,49680,49682,49684,49686,49688,49690,49692,49694],{"class":51,"line":49681},229,[49,49683,33482],{"class":55},[49,49685,60],{"class":59},[49,49687,44657],{"class":55},[49,49689,33938],{"class":126},[49,49691,60],{"class":59},[49,49693,1126],{"class":66},[49,49695,81],{"class":55},[49,49697,49699],{"class":51,"line":49698},230,[49,49700,33950],{"class":55},[22088,49702,49704],{"id":49703},"_242测试代码","2.4.2.测试代码",[14,49706,49707],{},"使用测试集进行测试与推理",[39,49709,49711],{"className":41,"code":49710,"language":43,"meta":44,"style":44},"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",[46,49712,49713,49719,49729,49739,49750,49760,49764,49768,49776,49781,49785,49802,49806,49810,49814,49818,49822,49854,49858,49866,49870,49882,49886,49890,49894,49898,49902,49906,49910,49914,49932,49946,49950,49960,49970,49980,49986,49990,49994,50002,50006,50022,50030,50034,50038,50046,50054,50058,50062,50066,50070,50076,50080,50090,50098,50106,50110,50114,50118,50126,50130,50146,50150,50154,50158,50170,50174,50186,50190,50194,50206,50210,50220,50224,50228,50240,50244,50252,50256,50260,50268,50272,50280,50284,50288,50292,50296,50300,50316,50324,50328,50332,50350,50356,50360,50370,50378,50386,50390,50394,50398,50402,50410,50414,50430,50434,50442,50450],{"__ignoreMap":44},[49,49714,49715,49717],{"class":51,"line":52},[49,49716,30481],{"class":59},[49,49718,30484],{"class":55},[49,49720,49721,49723,49725,49727],{"class":51,"line":84},[49,49722,30481],{"class":59},[49,49724,31504],{"class":55},[49,49726,31472],{"class":59},[49,49728,31509],{"class":55},[49,49730,49731,49733,49735,49737],{"class":51,"line":109},[49,49732,30826],{"class":59},[49,49734,31487],{"class":55},[49,49736,30481],{"class":59},[49,49738,31492],{"class":55},[49,49740,49741,49743,49745,49747],{"class":51,"line":120},[49,49742,30826],{"class":59},[49,49744,31457],{"class":55},[49,49746,30481],{"class":59},[49,49748,49749],{"class":55}," ImageFolder\n",[49,49751,49752,49754,49756,49758],{"class":51,"line":135},[49,49753,30826],{"class":59},[49,49755,32003],{"class":55},[49,49757,30481],{"class":59},[49,49759,44729],{"class":55},[49,49761,49762],{"class":51,"line":1306},[49,49763,2492],{"emptyLinePlaceholder":151},[49,49765,49766],{"class":51,"line":1312},[49,49767,34040],{"class":283},[49,49769,49770,49772,49774],{"class":51,"line":1403},[49,49771,32036],{"class":59},[49,49773,34047],{"class":2055},[49,49775,32042],{"class":55},[49,49777,49778],{"class":51,"line":1409},[49,49779,49780],{"class":283},"   # 导入自己的数据集，并进行数据处理\n",[49,49782,49783],{"class":51,"line":1421},[49,49784,48050],{"class":283},[49,49786,49787,49789,49791,49793,49795,49797,49800],{"class":51,"line":1704},[49,49788,48055],{"class":66},[49,49790,60],{"class":59},[49,49792,889],{"class":59},[49,49794,474],{"class":328},[49,49796,777],{"class":66},[49,49798,49799],{"class":48066},"\u002Fdata\u002Ftest",[49,49801,25224],{"class":328},[49,49803,49804],{"class":51,"line":1709},[49,49805,2492],{"emptyLinePlaceholder":151},[49,49807,49808],{"class":51,"line":1715},[49,49809,48078],{"class":283},[49,49811,49812],{"class":51,"line":1720},[49,49813,48083],{"class":283},[49,49815,49816],{"class":51,"line":1734},[49,49817,48088],{"class":283},[49,49819,49820],{"class":51,"line":1739},[49,49821,48093],{"class":283},[49,49823,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844,49846,49848,49850,49852],{"class":51,"line":1745},[49,49825,48098],{"class":55},[49,49827,60],{"class":59},[49,49829,48103],{"class":55},[49,49831,48106],{"class":66},[49,49833,76],{"class":55},[49,49835,48111],{"class":66},[49,49837,76],{"class":55},[49,49839,48116],{"class":66},[49,49841,48119],{"class":55},[49,49843,48122],{"class":66},[49,49845,76],{"class":55},[49,49847,48127],{"class":66},[49,49849,76],{"class":55},[49,49851,48132],{"class":66},[49,49853,106],{"class":55},[49,49855,49856],{"class":51,"line":1766},[49,49857,48139],{"class":283},[49,49859,49860,49862,49864],{"class":51,"line":1771},[49,49861,48144],{"class":55},[49,49863,60],{"class":59},[49,49865,48149],{"class":55},[49,49867,49868],{"class":51,"line":1785},[49,49869,48154],{"class":283},[49,49871,49872,49874,49876,49878,49880],{"class":51,"line":1790},[49,49873,48159],{"class":55},[49,49875,31590],{"class":66},[49,49877,76],{"class":55},[49,49879,31590],{"class":66},[49,49881,42711],{"class":55},[49,49883,49884],{"class":51,"line":1819},[49,49885,48172],{"class":283},[49,49887,49888],{"class":51,"line":1824},[49,49889,48177],{"class":55},[49,49891,49892],{"class":51,"line":1841},[49,49893,48182],{"class":55},[49,49895,49896],{"class":51,"line":1846},[49,49897,48187],{"class":283},[49,49899,49900],{"class":51,"line":1851},[49,49901,48192],{"class":283},[49,49903,49904],{"class":51,"line":1856},[49,49905,2492],{"emptyLinePlaceholder":151},[49,49907,49908],{"class":51,"line":1870},[49,49909,48201],{"class":283},[49,49911,49912],{"class":51,"line":1875},[49,49913,48206],{"class":283},[49,49915,49916,49918,49920,49922,49924,49926,49928,49930],{"class":51,"line":2669},[49,49917,34054],{"class":55},[49,49919,60],{"class":59},[49,49921,48215],{"class":55},[49,49923,48218],{"class":66},[49,49925,76],{"class":55},[49,49927,48223],{"class":126},[49,49929,60],{"class":59},[49,49931,48228],{"class":55},[49,49933,49934,49936,49938,49940,49942,49944],{"class":51,"line":2683},[49,49935,34111],{"class":55},[49,49937,60],{"class":59},[49,49939,31623],{"class":55},[49,49941,31626],{"class":126},[49,49943,60],{"class":59},[49,49945,34122],{"class":55},[49,49947,49948],{"class":51,"line":2691},[49,49949,34127],{"class":283},[49,49951,49952,49954,49956,49958],{"class":51,"line":2696},[49,49953,34132],{"class":126},[49,49955,60],{"class":59},[49,49957,441],{"class":66},[49,49959,31555],{"class":55},[49,49961,49962,49964,49966,49968],{"class":51,"line":2702},[49,49963,34143],{"class":126},[49,49965,60],{"class":59},[49,49967,31565],{"class":66},[49,49969,31555],{"class":55},[49,49971,49972,49974,49976,49978],{"class":51,"line":2708},[49,49973,34154],{"class":126},[49,49975,60],{"class":59},[49,49977,415],{"class":66},[49,49979,81],{"class":55},[49,49981,49982,49984],{"class":51,"line":2713},[49,49983,4182],{"class":59},[49,49985,34167],{"class":55},[49,49987,49988],{"class":51,"line":8038},[49,49989,2492],{"emptyLinePlaceholder":151},[49,49991,49992],{"class":51,"line":8062},[49,49993,34176],{"class":283},[49,49995,49996,49998,50000],{"class":51,"line":8067},[49,49997,32036],{"class":59},[49,49999,34183],{"class":2055},[49,50001,34186],{"class":55},[49,50003,50004],{"class":51,"line":8073},[49,50005,34191],{"class":283},[49,50007,50008,50010,50012,50014,50016,50018,50020],{"class":51,"line":8100},[49,50009,31326],{"class":55},[49,50011,60],{"class":59},[49,50013,31333],{"class":328},[49,50015,1796],{"class":59},[49,50017,31338],{"class":55},[49,50019,1793],{"class":59},[49,50021,34208],{"class":328},[49,50023,50024,50026,50028],{"class":51,"line":8105},[49,50025,31378],{"class":55},[49,50027,60],{"class":59},[49,50029,32378],{"class":55},[49,50031,50032],{"class":51,"line":8111},[49,50033,2492],{"emptyLinePlaceholder":151},[49,50035,50036],{"class":51,"line":8123},[49,50037,34225],{"class":283},[49,50039,50040,50042,50044],{"class":51,"line":8135},[49,50041,34230],{"class":55},[49,50043,60],{"class":59},[49,50045,32431],{"class":66},[49,50047,50048,50050,50052],{"class":51,"line":8147},[49,50049,34239],{"class":55},[49,50051,60],{"class":59},[49,50053,3177],{"class":66},[49,50055,50056],{"class":51,"line":9806},[49,50057,2492],{"emptyLinePlaceholder":151},[49,50059,50060],{"class":51,"line":9831},[49,50061,34252],{"class":283},[49,50063,50064],{"class":51,"line":9854},[49,50065,34257],{"class":283},[49,50067,50068],{"class":51,"line":9878},[49,50069,34262],{"class":283},[49,50071,50072,50074],{"class":51,"line":9883},[49,50073,34267],{"class":59},[49,50075,32973],{"class":55},[49,50077,50078],{"class":51,"line":9888},[49,50079,34274],{"class":283},[49,50081,50082,50084,50086,50088],{"class":51,"line":9893},[49,50083,3495],{"class":59},[49,50085,34281],{"class":55},[49,50087,26134],{"class":59},[49,50089,34286],{"class":55},[49,50091,50092,50094,50096],{"class":51,"line":9902},[49,50093,34291],{"class":55},[49,50095,60],{"class":59},[49,50097,34296],{"class":55},[49,50099,50100,50102,50104],{"class":51,"line":9907},[49,50101,34301],{"class":55},[49,50103,60],{"class":59},[49,50105,34306],{"class":55},[49,50107,50108],{"class":51,"line":9913},[49,50109,34311],{"class":283},[49,50111,50112],{"class":51,"line":9934},[49,50113,32964],{"class":55},[49,50115,50116],{"class":51,"line":9940},[49,50117,34320],{"class":283},[49,50119,50120,50122,50124],{"class":51,"line":9954},[49,50121,32749],{"class":55},[49,50123,60],{"class":59},[49,50125,34329],{"class":55},[49,50127,50128],{"class":51,"line":9960},[49,50129,34334],{"class":283},[49,50131,50132,50134,50136,50138,50140,50142,50144],{"class":51,"line":9987},[49,50133,32766],{"class":55},[49,50135,60],{"class":59},[49,50137,32771],{"class":55},[49,50139,32774],{"class":126},[49,50141,60],{"class":59},[49,50143,441],{"class":66},[49,50145,81],{"class":55},[49,50147,50148],{"class":51,"line":9996},[49,50149,34355],{"class":283},[49,50151,50152],{"class":51,"line":10002},[49,50153,34360],{"class":283},[49,50155,50156],{"class":51,"line":10010},[49,50157,34365],{"class":283},[49,50159,50160,50162,50164,50166,50168],{"class":51,"line":10015},[49,50161,34370],{"class":55},[49,50163,9567],{"class":59},[49,50165,32876],{"class":55},[49,50167,3041],{"class":59},[49,50169,34379],{"class":55},[49,50171,50172],{"class":51,"line":16694},[49,50173,34384],{"class":283},[49,50175,50176,50178,50180,50182,50184],{"class":51,"line":16700},[49,50177,34389],{"class":55},[49,50179,9567],{"class":59},[49,50181,34394],{"class":55},[49,50183,415],{"class":66},[49,50185,81],{"class":55},[49,50187,50188],{"class":51,"line":16723},[49,50189,2492],{"emptyLinePlaceholder":151},[49,50191,50192],{"class":51,"line":16729},[49,50193,34407],{"class":283},[49,50195,50196,50198,50200,50202,50204],{"class":51,"line":16752},[49,50197,34412],{"class":55},[49,50199,60],{"class":59},[49,50201,34417],{"class":55},[49,50203,803],{"class":59},[49,50205,34422],{"class":55},[49,50207,50208],{"class":51,"line":16766},[49,50209,34427],{"class":283},[49,50211,50212,50214,50216,50218],{"class":51,"line":16786},[49,50213,32540],{"class":66},[49,50215,228],{"class":55},[49,50217,34436],{"class":328},[49,50219,34439],{"class":55},[49,50221,50222],{"class":51,"line":16792},[49,50223,2492],{"emptyLinePlaceholder":151},[49,50225,50226],{"class":51,"line":16803},[49,50227,34448],{"class":283},[49,50229,50230,50232,50234,50236,50238],{"class":51,"line":16826},[49,50231,1623],{"class":59},[49,50233,31309],{"class":66},[49,50235,3041],{"class":59},[49,50237,31314],{"class":328},[49,50239,3831],{"class":55},[49,50241,50242],{"class":51,"line":16848},[49,50243,34465],{"class":283},[49,50245,50246,50248,50250],{"class":51,"line":16853},[49,50247,31378],{"class":55},[49,50249,60],{"class":59},[49,50251,44640],{"class":55},[49,50253,50254],{"class":51,"line":16859},[49,50255,34478],{"class":283},[49,50257,50258],{"class":51,"line":16873},[49,50259,34483],{"class":283},[49,50261,50262,50264,50266],{"class":51,"line":16886},[49,50263,34488],{"class":55},[49,50265,34491],{"class":328},[49,50267,30586],{"class":55},[49,50269,50270],{"class":51,"line":16891},[49,50271,34498],{"class":283},[49,50273,50274,50276,50278],{"class":51,"line":16905},[49,50275,34111],{"class":55},[49,50277,60],{"class":59},[49,50279,34507],{"class":55},[49,50281,50282],{"class":51,"line":16910},[49,50283,34512],{"class":283},[49,50285,50286],{"class":51,"line":16916},[49,50287,34517],{"class":55},[49,50289,50290],{"class":51,"line":16921},[49,50291,2492],{"emptyLinePlaceholder":151},[49,50293,50294],{"class":51,"line":16935},[49,50295,34526],{"class":283},[49,50297,50298],{"class":51,"line":16940},[49,50299,34531],{"class":283},[49,50301,50302,50304,50306,50308,50310,50312,50314],{"class":51,"line":16945},[49,50303,31326],{"class":55},[49,50305,60],{"class":59},[49,50307,31333],{"class":328},[49,50309,1796],{"class":59},[49,50311,31338],{"class":55},[49,50313,1793],{"class":59},[49,50315,34208],{"class":328},[49,50317,50318,50320,50322],{"class":51,"line":16959},[49,50319,31378],{"class":55},[49,50321,60],{"class":59},[49,50323,32378],{"class":55},[49,50325,50326],{"class":51,"line":16971},[49,50327,34560],{"class":283},[49,50329,50330],{"class":51,"line":16976},[49,50331,34565],{"class":283},[49,50333,50334,50336,50338,50340,50343,50345,50348],{"class":51,"line":16989},[49,50335,34570],{"class":55},[49,50337,60],{"class":59},[49,50339,1109],{"class":55},[49,50341,50342],{"class":328},"'猫'",[49,50344,76],{"class":55},[49,50346,50347],{"class":328},"'狗'",[49,50349,33335],{"class":55},[49,50351,50352,50354],{"class":51,"line":16994},[49,50353,34267],{"class":59},[49,50355,32973],{"class":55},[49,50357,50358],{"class":51,"line":16999},[49,50359,34635],{"class":283},[49,50361,50362,50364,50366,50368],{"class":51,"line":17004},[49,50363,3495],{"class":59},[49,50365,34642],{"class":55},[49,50367,26134],{"class":59},[49,50369,34286],{"class":55},[49,50371,50372,50374,50376],{"class":51,"line":17017},[49,50373,32699],{"class":55},[49,50375,60],{"class":59},[49,50377,32704],{"class":55},[49,50379,50380,50382,50384],{"class":51,"line":17022},[49,50381,32714],{"class":55},[49,50383,60],{"class":59},[49,50385,32719],{"class":55},[49,50387,50388],{"class":51,"line":32722},[49,50389,2492],{"emptyLinePlaceholder":151},[49,50391,50392],{"class":51,"line":32728},[49,50393,34671],{"class":283},[49,50395,50396],{"class":51,"line":32734},[49,50397,32964],{"class":55},[49,50399,50400],{"class":51,"line":32740},[49,50401,34680],{"class":283},[49,50403,50404,50406,50408],{"class":51,"line":32746},[49,50405,32749],{"class":55},[49,50407,60],{"class":59},[49,50409,32754],{"class":55},[49,50411,50412],{"class":51,"line":32757},[49,50413,34693],{"class":283},[49,50415,50416,50418,50420,50422,50424,50426,50428],{"class":51,"line":32763},[49,50417,32766],{"class":55},[49,50419,60],{"class":59},[49,50421,32771],{"class":55},[49,50423,32774],{"class":126},[49,50425,60],{"class":59},[49,50427,441],{"class":66},[49,50429,81],{"class":55},[49,50431,50432],{"class":51,"line":32783},[49,50433,34714],{"class":283},[49,50435,50436,50438,50440],{"class":51,"line":32789},[49,50437,34719],{"class":55},[49,50439,60],{"class":59},[49,50441,34724],{"class":55},[49,50443,50444,50446,50448],{"class":51,"line":32800},[49,50445,34729],{"class":55},[49,50447,60],{"class":59},[49,50449,34734],{"class":55},[49,50451,50452,50454,50456,50458,50460,50462,50464,50466],{"class":51,"line":32806},[49,50453,34739],{"class":66},[49,50455,228],{"class":55},[49,50457,34744],{"class":328},[49,50459,34747],{"class":55},[49,50461,34750],{"class":328},[49,50463,76],{"class":55},[49,50465,34755],{"class":328},[49,50467,34758],{"class":55},[143,50469,50470],{},"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":44,"searchDepth":84,"depth":84,"links":50472},[50473,50474,50475,50476],{"id":30680,"depth":109,"text":30681},{"id":37928,"depth":109,"text":37929},{"id":41361,"depth":109,"text":41362},{"id":45370,"depth":109,"text":45371},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30672,"description":148},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50483,"title":50484,"body":50485,"description":148,"extension":149,"meta":50492,"navigation":151,"path":50493,"seo":50494,"stem":50495,"__hash__":50496},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50486,"toc":50490},[50487],[10,50488,50484],{"id":50489},"_3yolo模型学习",{"title":44,"searchDepth":84,"depth":84,"links":50491},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50484,"description":148},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50498,"title":50499,"body":50500,"description":50507,"extension":149,"meta":50508,"navigation":151,"path":50510,"seo":50511,"stem":50512,"__hash__":50513},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50501,"toc":50505},[50502],[14,50503,50504],{},"yolo模型还未补充",{"title":44,"searchDepth":84,"depth":84,"links":50506},[],"深度学习学习",{"category":50509},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50499,"description":50507},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50515,"title":50516,"body":50517,"description":148,"extension":149,"meta":50542,"navigation":151,"path":50543,"seo":50544,"stem":50545,"__hash__":50546},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50518,"toc":50540},[50519,50522,50525,50530,50537],[10,50520,50516],{"id":50521},"_1工具",[14,50523,50524],{},"提示错误插件：有问题会提前报错",[14,50526,50527],{},[1554,50528],{"alt":44,"src":50529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50531,50532],{},[56,50533,50536],{"href":50534,"rel":50535},"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",[23955],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50538,50539],{},"alt键加上下箭头可以实现语句的移动",{"title":44,"searchDepth":84,"depth":84,"links":50541},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50516,"description":148},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50548,"title":50549,"body":50550,"description":148,"extension":149,"meta":53414,"navigation":151,"path":53415,"seo":53416,"stem":53417,"__hash__":53418},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50551,"toc":53365},[50552,50555,50559,50563,50568,50571,50576,50580,50587,50592,50599,50604,50611,50616,50620,50625,50628,50632,50637,50641,50646,50649,50652,50655,50658,50661,50664,50667,50670,50675,50680,50685,50689,50692,50695,50699,50704,50707,50715,50720,50737,50745,50750,50755,50760,50765,50770,50773,50778,50783,50787,50796,50801,50806,50810,50815,50818,50822,50827,50835,50840,50845,50848,50853,50858,50863,50866,50869,50872,50877,50882,50885,50890,50893,50898,50901,50904,50907,50912,50915,50918,50933,50938,50943,50948,50951,50954,50957,50971,50974,50979,50984,50987,50990,50993,50996,50999,51002,51005,51009,51013,51018,51022,51025,51030,51035,51038,51043,51046,51050,51055,51058,51061,51064,51067,51070,51073,51076,51079,51082,51086,51091,51096,51101,51104,51107,51111,51116,51119,51123,51126,51129,51134,51137,51140,51144,51148,51151,51156,51161,51164,51193,51198,51203,51208,51213,51217,51222,51226,51231,51234,51238,51242,51247,51251,51256,51261,51265,51270,51273,51275,51278,51283,51287,51292,51296,51300,51305,51310,51315,51320,51324,51329,51334,51339,51342,51345,51350,51353,51358,51363,51368,51373,51377,52184,52188,52531,52536,52539,52542,52545,52548,52551,52554,52557,52560,52562,52565,52567,52570,52574,52579,52582,52585,52588,52592,52597,52602,52622,52625,52629,52634,52639,52656,52660,52689,52693,52715,52717,52756,52764,52770,52774,52777,52780,52785,52790,52793,52796,52799,52804,52809,52812,52815,52818,52821,52824,52827,52830,52833,52836,52839,52842,52844,52847,52850,52853,52856,52859,52862,52865,52868,52872,52877,52880,52885,52888,52891,52894,52897,52900,52903,52906,52908,52911,52914,52917,52920,52923,52926,52930,52933,52942,52945,52950,52953,52958,52961,52964,52967,52970,52973,52976,52979,52983,52987,52990,52993,52998,53003,53008,53012,53017,53022,53025,53028,53031,53034,53037,53042,53045,53050,53052,53057,53060,53064,53069,53072,53075,53080,53084,53087,53092,53095,53098,53127,53132,53135,53138,53141,53144,53147,53151,53154,53240,53244,53247,53252,53257,53264,53267,53270,53273,53276,53279,53284,53289,53292,53295,53298,53301,53304,53307,53310,53313,53316,53318,53321,53325,53330,53335,53340,53343,53348,53353,53356,53359,53362],[10,50553,50549],{"id":50554},"_2基础语法",[166,50556,50558],{"id":50557},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[195,50560,50562],{"id":50561},"_211-js组成","2.1.1 js组成",[178,50564,50565],{},[181,50566,50567],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50569,50570],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[178,50572,50573],{"start":84},[181,50574,50575],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[195,50577,50579],{"id":50578},"_212-js书写位置","2.1.2 js书写位置",[178,50581,50582],{},[181,50583,50584],{},[373,50585,50586],{},"内部 JavaScript",[14,50588,50589],{},[1554,50590],{"alt":44,"src":50591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[178,50593,50594],{"start":84},[181,50595,50596],{},[373,50597,50598],{},"外部 JavaScript",[14,50600,50601],{},[1554,50602],{"alt":44,"src":50603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[178,50605,50606],{"start":109},[181,50607,50608],{},[373,50609,50610],{},"内联 JavaScript",[14,50612,50613],{},[1554,50614],{"alt":44,"src":50615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[195,50617,50619],{"id":50618},"_213-javascript注释","2.1.3 JavaScript注释",[14,50621,50622],{},[1554,50623],{"alt":44,"src":50624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50626,50627],{},"alt+shift+a一定要记住！",[195,50629,50631],{"id":50630},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50633,50634],{},[1554,50635],{"alt":44,"src":50636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[195,50638,50640],{"id":50639},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[178,50642,50643],{},[181,50644,50645],{},"输出语法：",[14,50647,50648],{},"①document.write('要出的内容')",[14,50650,50651],{},"向body内输出内容；",[14,50653,50654],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50656,50657],{},"②alert('要出的内容')",[14,50659,50660],{},"页面弹出警告对话框",[14,50662,50663],{},"③console.log('控制台打印')",[14,50665,50666],{},"控制台输出语法，程序员调试使用",[14,50668,50669],{},"输入log就行，自动生成：",[14,50671,50672],{},[1554,50673],{"alt":44,"src":50674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[178,50676,50677],{"start":84},[181,50678,50679],{},"输入语法：",[14,50681,50682],{},[1554,50683],{"alt":44,"src":50684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[195,50686,50688],{"id":50687},"_2116-字面量","21.1.6 字面量",[14,50690,50691],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50693,50694],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[166,50696,50698],{"id":50697},"_22-变量","2.2 变量",[178,50700,50701],{},[181,50702,50703],{},"变量声明",[14,50705,50706],{},"let 变量名",[1226,50708,50709,50712],{},[181,50710,50711],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[181,50713,50714],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[178,50716,50717],{"start":84},[181,50718,50719],{},"变量赋值",[39,50721,50725],{"className":50722,"code":50723,"language":50724,"meta":44,"style":44},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[46,50726,50727,50732],{"__ignoreMap":44},[49,50728,50729],{"class":51,"line":52},[49,50730,50731],{"class":55},"let age\n",[49,50733,50734],{"class":51,"line":84},[49,50735,50736],{"class":55},"age=18\n",[178,50738,50739,50742],{"start":109},[181,50740,50741],{},"连这些（变量的初始化）：let age=18",[181,50743,50744],{},"更新变量",[14,50746,50747],{},[1554,50748],{"alt":44,"src":50749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[178,50751,50752],{"start":135},[181,50753,50754],{},"声明多个变量",[14,50756,50757],{},[1554,50758],{"alt":44,"src":50759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[178,50761,50762],{"start":1306},[181,50763,50764],{},"变量命名规则与规范",[14,50766,50767],{},[1554,50768],{"alt":44,"src":50769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50771,50772],{},"遵守小驼峰！",[178,50774,50775],{"start":1312},[181,50776,50777],{},"变量拓展-let和var的区别",[14,50779,50780],{},[1554,50781],{"alt":44,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[166,50784,50786],{"id":50785},"_23-数组","2.3 数组",[39,50788,50790],{"className":50722,"code":50789,"language":50724,"meta":44,"style":44},"let arr = []\n",[46,50791,50792],{"__ignoreMap":44},[49,50793,50794],{"class":51,"line":52},[49,50795,50789],{"class":55},[14,50797,50798],{},[1554,50799],{"alt":44,"src":50800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50802,50803],{},[1554,50804],{"alt":44,"src":50805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[166,50807,50809],{"id":50808},"_24-常量","2.4 常量",[14,50811,50812],{},[1554,50813],{"alt":44,"src":50814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50816,50817],{},"const — 类似于 let ，但是变量的值无法被修改",[166,50819,50821],{"id":50820},"_25-数据类型","2.5 数据类型",[14,50823,50824],{},[1554,50825],{"alt":44,"src":50826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[178,50828,50829,50832],{},[181,50830,50831],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[181,50833,50834],{},"算数运算符：",[14,50836,50837],{},[1554,50838],{"alt":44,"src":50839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[178,50841,50842],{"start":109},[181,50843,50844],{},"数字类型（Number）",[14,50846,50847],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50849,50850],{},[1554,50851],{"alt":44,"src":50852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[178,50854,50855],{"start":120},[181,50856,50857],{},"字符串类型（string）",[14,50859,50860],{},[1554,50861],{"alt":44,"src":50862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50864,50865],{},"反引号也是可以使用的",[14,50867,50868],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50870,50871],{},"例如：document.write(\"我今年\"+age+\"岁\")",[178,50873,50874],{"start":135},[181,50875,50876],{},"模板字符串",[14,50878,50879],{},[1554,50880],{"alt":44,"src":50881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50883,50884],{},"类似于python的字符串格式化",[178,50886,50887],{"start":1306},[181,50888,50889],{},"布尔类型",[14,50891,50892],{},"true 和 false",[178,50894,50895],{"start":1312},[181,50896,50897],{},"未定义类型（underfined）",[14,50899,50900],{},"表示没有赋值",[14,50902,50903],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50905,50906],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[178,50908,50909],{"start":1403},[181,50910,50911],{},"null（空类型）",[14,50913,50914],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50916,50917],{},"赋值了，但是内容为空",[39,50919,50921],{"className":50722,"code":50920,"language":50724,"meta":44,"style":44},"typeof null\n输出的是'object'，是一个对象数据类型\n",[46,50922,50923,50928],{"__ignoreMap":44},[49,50924,50925],{"class":51,"line":52},[49,50926,50927],{"class":55},"typeof null\n",[49,50929,50930],{"class":51,"line":84},[49,50931,50932],{"class":55},"输出的是'object'，是一个对象数据类型\n",[178,50934,50935],{"start":1409},[181,50936,50937],{},"控制台检测数据类型",[14,50939,50940],{},[1554,50941],{"alt":44,"src":50942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[178,50944,50945],{"start":1421},[181,50946,50947],{},"类型转换",[14,50949,50950],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50952,50953],{},"转换方式：隐式转换和显示转换",[14,50955,50956],{},"①隐式转换",[1226,50958,50959,50962,50965,50968],{},[181,50960,50961],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[181,50963,50964],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[181,50966,50967],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[181,50969,50970],{},"任何数据和字符串相加结果都是字符串",[14,50972,50973],{},"②显示转换",[14,50975,50976],{},[1554,50977],{"alt":44,"src":50978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50980,50981],{},[1554,50982],{"alt":44,"src":50983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50985,50986],{},"在输入的时候要用好隐式转换，简单写起来",[14,50988,50989],{},"let num = +prompt(’请输入数字：‘)",[14,50991,50992],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50994,50995],{},"console.log(parseInt('12.333px'))",[14,50997,50998],{},"输出为：12",[14,51000,51001],{},"console.log(parseInt('a'a'a12.333px'))",[14,51003,51004],{},"输出：NaN",[166,51006,51008],{"id":51007},"_26-运算符","2.6 运算符",[195,51010,51012],{"id":51011},"_261-赋值运算符","2.6.1 赋值运算符",[14,51014,51015],{},[1554,51016],{"alt":44,"src":51017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[195,51019,51021],{"id":51020},"_262-一元运算符","2.6.2 一元运算符",[14,51023,51024],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51026,51027],{},[1554,51028],{"alt":44,"src":51029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51031,51032],{},[1554,51033],{"alt":44,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51036,51037],{},"两者的区别：",[14,51039,51040],{},[1554,51041],{"alt":44,"src":51042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51044,51045],{},"前置先自加；后置后加，代码执行完之后再加",[195,51047,51049],{"id":51048},"_263-比较运算符","2.6.3 比较运算符",[14,51051,51052],{},[1554,51053],{"alt":44,"src":51054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51056,51057],{},"比较运算符也有隐式转换",[14,51059,51060],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51062,51063],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51065,51066],{},"要使用三等，开发的时候",[14,51068,51069],{},"NaN不等于任何人，包括它自己",[14,51071,51072],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51074,51075],{},"7\u002F10=0.7",[14,51077,51078],{},"最后：0.5+0.2=0.7",[14,51080,51081],{},"字符串比较，比较的是字符对应的ASCII码",[195,51083,51085],{"id":51084},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51087,51088],{},[1554,51089],{"alt":44,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51092,51093],{},[1554,51094],{"alt":44,"src":51095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51097,51098],{},[1554,51099],{"alt":44,"src":51100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51102,51103],{},"上述题目选D",[14,51105,51106],{},"与真2假1；或真1假2",[195,51108,51110],{"id":51109},"_265-运算符优先级","2.6.5 运算符优先级",[14,51112,51113],{},[1554,51114],{"alt":44,"src":51115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51117,51118],{},"先算逻辑与，后算逻辑或",[166,51120,51122],{"id":51121},"_27-语句","2.7 语句",[14,51124,51125],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51127,51128],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51130,51131],{},[1554,51132],{"alt":44,"src":51133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51135,51136],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51138,51139],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[195,51141,51143],{"id":51142},"_271-分支语句","2.7.1 分支语句",[22088,51145,51147],{"id":51146},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51149,51150],{},"if语句单行简单的话，可以不写{}，写在一行就行",[178,51152,51153],{},[181,51154,51155],{},"单分支语句",[14,51157,51158],{},[1554,51159],{"alt":44,"src":51160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51162,51163],{},"除了0，所有数字都为真",[39,51165,51167],{"className":50722,"code":51166,"language":50724,"meta":44,"style":44},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[46,51168,51169,51174,51179,51184,51188],{"__ignoreMap":44},[49,51170,51171],{"class":51,"line":52},[49,51172,51173],{"class":55},"if（0) {\n",[49,51175,51176],{"class":51,"line":84},[49,51177,51178],{"class":55},"    let a=1\n",[49,51180,51181],{"class":51,"line":109},[49,51182,51183],{"class":55},"    alert(typeof a)\n",[49,51185,51186],{"class":51,"line":120},[49,51187,1657],{"class":55},[49,51189,51190],{"class":51,"line":135},[49,51191,51192],{"class":55},"不输出，括号为假\n",[178,51194,51195],{"start":84},[181,51196,51197],{},"双分支语句",[14,51199,51200],{},[1554,51201],{"alt":44,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[178,51204,51205],{"start":109},[181,51206,51207],{},"多分支语句",[14,51209,51210],{},[1554,51211],{"alt":44,"src":51212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22088,51214,51216],{"id":51215},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51218,51219],{},[1554,51220],{"alt":44,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22088,51223,51225],{"id":51224},"_2713-switch语句","2.7.1.3 switch语句",[14,51227,51228],{},[1554,51229],{"alt":44,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51232,51233],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[195,51235,51237],{"id":51236},"_272-循环语句","2.7.2 循环语句",[22088,51239,51241],{"id":51240},"_2721-断点演示","2.7.2.1 断点演示",[14,51243,51244],{},[1554,51245],{"alt":44,"src":51246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22088,51248,51250],{"id":51249},"_2722-while循环","2.7.2.2 while循环",[14,51252,51253],{},[1554,51254],{"alt":44,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51257,51258],{},[1554,51259],{"alt":44,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22088,51262,51264],{"id":51263},"_2723-for循环","2.7.2.3 for循环",[14,51266,51267],{},[1554,51268],{"alt":44,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51271,51272],{},"for(;;) {",[14,51274,1165],{},[14,51276,51277],{},"表示无限循环",[14,51279,51280],{},[1554,51281],{"alt":44,"src":51282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22088,51284,51286],{"id":51285},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51288,51289],{},[1554,51290],{"alt":44,"src":51291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[166,51293,51295],{"id":51294},"_28-数组","2.8 数组",[195,51297,51299],{"id":51298},"_281-基础认识","2.8.1 基础认识",[14,51301,51302],{},[1554,51303],{"alt":44,"src":51304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51306,51307],{},[1554,51308],{"alt":44,"src":51309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51311,51312],{},[1554,51313],{"alt":44,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51316,51317],{},[1554,51318],{"alt":44,"src":51319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[195,51321,51323],{"id":51322},"_282-操作数组","2.8.2 操作数组",[14,51325,51326],{},[1554,51327],{"alt":44,"src":51328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[178,51330,51331],{},[181,51332,51333],{},"添加元素",[14,51335,51336],{},[1554,51337],{"alt":44,"src":51338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51340,51341],{},"console.log(arr.push('green'))",[14,51343,51344],{},"输出结果：为新数组的长度",[14,51346,51347],{},[1554,51348],{"alt":44,"src":51349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51351,51352],{},"push用的非常多，一定要记住",[178,51354,51355],{},[181,51356,51357],{},"删除元素",[14,51359,51360],{},[1554,51361],{"alt":44,"src":51362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51364,51365],{},[1554,51366],{"alt":44,"src":51367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51369,51370],{},[1554,51371],{"alt":44,"src":51372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[195,51374,51376],{"id":51375},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[39,51378,51380],{"className":50722,"code":51379,"language":50724,"meta":44,"style":44},"\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",[46,51381,51382,51397,51413,51417,51426,51444,51468,51490,51504,51512,51519,51531,51542,51546,51550,51557,51569,51584,51597,51616,51633,51648,51660,51672,51684,51688,51692,51703,51713,51725,51737,51749,51760,51764,51768,51780,51784,51798,51802,51806,51817,51831,51843,51857,51861,51870,51879,51883,51892,51896,51905,51910,51915,51928,51956,51961,51966,51991,51996,52000,52005,52010,52025,52029,52034,52064,52076,52092,52108,52122,52127,52134,52138,52143,52156,52164,52172,52176],{"__ignoreMap":44},[49,51383,51384,51387,51391,51394],{"class":51,"line":52},[49,51385,51386],{"class":55},"\u003C!",[49,51388,51390],{"class":51389},"s9eBZ","DOCTYPE",[49,51392,51393],{"class":2055}," html",[49,51395,51396],{"class":55},">\n",[49,51398,51399,51401,51403,51406,51408,51411],{"class":51,"line":84},[49,51400,1129],{"class":55},[49,51402,50724],{"class":51389},[49,51404,51405],{"class":2055}," lang",[49,51407,60],{"class":55},[49,51409,51410],{"class":328},"\"en\"",[49,51412,51396],{"class":55},[49,51414,51415],{"class":51,"line":109},[49,51416,2492],{"emptyLinePlaceholder":151},[49,51418,51419,51421,51424],{"class":51,"line":120},[49,51420,1129],{"class":55},[49,51422,51423],{"class":51389},"head",[49,51425,51396],{"class":55},[49,51427,51428,51431,51434,51437,51439,51442],{"class":51,"line":135},[49,51429,51430],{"class":55},"    \u003C",[49,51432,51433],{"class":51389},"meta",[49,51435,51436],{"class":2055}," charset",[49,51438,60],{"class":55},[49,51440,51441],{"class":328},"\"UTF-8\"",[49,51443,51396],{"class":55},[49,51445,51446,51448,51450,51453,51455,51458,51461,51463,51466],{"class":51,"line":1306},[49,51447,51430],{"class":55},[49,51449,51433],{"class":51389},[49,51451,51452],{"class":2055}," http-equiv",[49,51454,60],{"class":55},[49,51456,51457],{"class":328},"\"X-UA-Compatible\"",[49,51459,51460],{"class":2055}," content",[49,51462,60],{"class":55},[49,51464,51465],{"class":328},"\"IE=edge\"",[49,51467,51396],{"class":55},[49,51469,51470,51472,51474,51476,51478,51481,51483,51485,51488],{"class":51,"line":1312},[49,51471,51430],{"class":55},[49,51473,51433],{"class":51389},[49,51475,15010],{"class":2055},[49,51477,60],{"class":55},[49,51479,51480],{"class":328},"\"viewport\"",[49,51482,51460],{"class":2055},[49,51484,60],{"class":55},[49,51486,51487],{"class":328},"\"width=device-width, initial-scale=1.0\"",[49,51489,51396],{"class":55},[49,51491,51492,51494,51497,51500,51502],{"class":51,"line":1403},[49,51493,51430],{"class":55},[49,51495,51496],{"class":51389},"title",[49,51498,51499],{"class":55},">Document\u003C\u002F",[49,51501,51496],{"class":51389},[49,51503,51396],{"class":55},[49,51505,51506,51508,51510],{"class":51,"line":1409},[49,51507,51430],{"class":55},[49,51509,143],{"class":51389},[49,51511,51396],{"class":55},[49,51513,51514,51517],{"class":51,"line":1421},[49,51515,51516],{"class":51389},"        *",[49,51518,15662],{"class":55},[49,51520,51521,51524,51527,51529],{"class":51,"line":1704},[49,51522,51523],{"class":66},"            margin",[49,51525,51526],{"class":55},": ",[49,51528,415],{"class":66},[49,51530,1382],{"class":55},[49,51532,51533,51536,51538,51540],{"class":51,"line":1709},[49,51534,51535],{"class":66},"            padding",[49,51537,51526],{"class":55},[49,51539,415],{"class":66},[49,51541,1382],{"class":55},[49,51543,51544],{"class":51,"line":1715},[49,51545,2621],{"class":55},[49,51547,51548],{"class":51,"line":1720},[49,51549,2492],{"emptyLinePlaceholder":151},[49,51551,51552,51555],{"class":51,"line":1734},[49,51553,51554],{"class":2055},"        .box",[49,51556,15662],{"class":55},[49,51558,51559,51562,51564,51567],{"class":51,"line":1739},[49,51560,51561],{"class":66},"            display",[49,51563,51526],{"class":55},[49,51565,51566],{"class":66},"flex",[49,51568,1382],{"class":55},[49,51570,51571,51574,51576,51579,51582],{"class":51,"line":1745},[49,51572,51573],{"class":66},"            width",[49,51575,51526],{"class":55},[49,51577,51578],{"class":66},"700",[49,51580,51581],{"class":59},"px",[49,51583,1382],{"class":55},[49,51585,51586,51589,51591,51593,51595],{"class":51,"line":1766},[49,51587,51588],{"class":66},"            height",[49,51590,51526],{"class":55},[49,51592,4065],{"class":66},[49,51594,51581],{"class":59},[49,51596,1382],{"class":55},[49,51598,51599,51602,51604,51606,51608,51611,51614],{"class":51,"line":1771},[49,51600,51601],{"class":66},"            border-left",[49,51603,51526],{"class":55},[49,51605,441],{"class":66},[49,51607,51581],{"class":59},[49,51609,51610],{"class":66}," solid",[49,51612,51613],{"class":66}," pink",[49,51615,1382],{"class":55},[49,51617,51618,51621,51623,51625,51627,51629,51631],{"class":51,"line":1785},[49,51619,51620],{"class":66},"            border-bottom",[49,51622,51526],{"class":55},[49,51624,441],{"class":66},[49,51626,51581],{"class":59},[49,51628,51610],{"class":66},[49,51630,51613],{"class":66},[49,51632,1382],{"class":55},[49,51634,51635,51637,51639,51641,51643,51646],{"class":51,"line":1790},[49,51636,51523],{"class":66},[49,51638,51526],{"class":55},[49,51640,875],{"class":66},[49,51642,51581],{"class":59},[49,51644,51645],{"class":66}," auto",[49,51647,1382],{"class":55},[49,51649,51650,51653,51655,51658],{"class":51,"line":1819},[49,51651,51652],{"class":66},"            justify-content",[49,51654,51526],{"class":55},[49,51656,51657],{"class":66},"space-around",[49,51659,1382],{"class":55},[49,51661,51662,51665,51667,51670],{"class":51,"line":1824},[49,51663,51664],{"class":66},"            align-items",[49,51666,51526],{"class":55},[49,51668,51669],{"class":66},"flex-end",[49,51671,1382],{"class":55},[49,51673,51674,51677,51679,51682],{"class":51,"line":1841},[49,51675,51676],{"class":66},"            text-align",[49,51678,51526],{"class":55},[49,51680,51681],{"class":66},"center",[49,51683,1382],{"class":55},[49,51685,51686],{"class":51,"line":1846},[49,51687,2621],{"class":55},[49,51689,51690],{"class":51,"line":1851},[49,51691,2492],{"emptyLinePlaceholder":151},[49,51693,51694,51696,51698,51701],{"class":51,"line":1856},[49,51695,51554],{"class":2055},[49,51697,1179],{"class":59},[49,51699,51700],{"class":51389},"div",[49,51702,15662],{"class":55},[49,51704,51705,51707,51709,51711],{"class":51,"line":1870},[49,51706,51561],{"class":66},[49,51708,51526],{"class":55},[49,51710,51566],{"class":66},[49,51712,1382],{"class":55},[49,51714,51715,51717,51719,51721,51723],{"class":51,"line":1875},[49,51716,51573],{"class":66},[49,51718,51526],{"class":55},[49,51720,875],{"class":66},[49,51722,51581],{"class":59},[49,51724,1382],{"class":55},[49,51726,51727,51730,51732,51735],{"class":51,"line":2669},[49,51728,51729],{"class":66},"            background-color",[49,51731,51526],{"class":55},[49,51733,51734],{"class":66},"pink",[49,51736,1382],{"class":55},[49,51738,51739,51742,51744,51747],{"class":51,"line":2683},[49,51740,51741],{"class":66},"            flex-direction",[49,51743,51526],{"class":55},[49,51745,51746],{"class":66},"column",[49,51748,1382],{"class":55},[49,51750,51751,51753,51755,51758],{"class":51,"line":2691},[49,51752,51652],{"class":66},[49,51754,51526],{"class":55},[49,51756,51757],{"class":66},"space-between",[49,51759,1382],{"class":55},[49,51761,51762],{"class":51,"line":2696},[49,51763,2621],{"class":55},[49,51765,51766],{"class":51,"line":2702},[49,51767,2492],{"emptyLinePlaceholder":151},[49,51769,51770,51772,51775,51778],{"class":51,"line":2708},[49,51771,51554],{"class":2055},[49,51773,51774],{"class":51389}," div",[49,51776,51777],{"class":51389}," span",[49,51779,15662],{"class":55},[49,51781,51782],{"class":51,"line":2713},[49,51783,2492],{"emptyLinePlaceholder":151},[49,51785,51786,51789,51791,51794,51796],{"class":51,"line":8038},[49,51787,51788],{"class":66},"            margin-top",[49,51790,51526],{"class":55},[49,51792,51793],{"class":66},"-20",[49,51795,51581],{"class":59},[49,51797,1382],{"class":55},[49,51799,51800],{"class":51,"line":8062},[49,51801,2621],{"class":55},[49,51803,51804],{"class":51,"line":8067},[49,51805,2492],{"emptyLinePlaceholder":151},[49,51807,51808,51810,51812,51815],{"class":51,"line":8073},[49,51809,51554],{"class":2055},[49,51811,51774],{"class":51389},[49,51813,51814],{"class":51389}," h4",[49,51816,15662],{"class":55},[49,51818,51819,51822,51824,51827,51829],{"class":51,"line":8100},[49,51820,51821],{"class":66},"            margin-bottom",[49,51823,51526],{"class":55},[49,51825,51826],{"class":66},"-35",[49,51828,51581],{"class":59},[49,51830,1382],{"class":55},[49,51832,51833,51835,51837,51839,51841],{"class":51,"line":8105},[49,51834,51573],{"class":66},[49,51836,51526],{"class":55},[49,51838,578],{"class":66},[49,51840,51581],{"class":59},[49,51842,1382],{"class":55},[49,51844,51845,51848,51850,51853,51855],{"class":51,"line":8111},[49,51846,51847],{"class":66},"            margin-left",[49,51849,51526],{"class":55},[49,51851,51852],{"class":66},"-10",[49,51854,51581],{"class":59},[49,51856,1382],{"class":55},[49,51858,51859],{"class":51,"line":8123},[49,51860,2621],{"class":55},[49,51862,51863,51866,51868],{"class":51,"line":8135},[49,51864,51865],{"class":55},"    \u003C\u002F",[49,51867,143],{"class":51389},[49,51869,51396],{"class":55},[49,51871,51872,51875,51877],{"class":51,"line":8147},[49,51873,51874],{"class":55},"\u003C\u002F",[49,51876,51423],{"class":51389},[49,51878,51396],{"class":55},[49,51880,51881],{"class":51,"line":9806},[49,51882,2492],{"emptyLinePlaceholder":151},[49,51884,51885,51887,51890],{"class":51,"line":9831},[49,51886,1129],{"class":55},[49,51888,51889],{"class":51389},"body",[49,51891,51396],{"class":55},[49,51893,51894],{"class":51,"line":9854},[49,51895,2492],{"emptyLinePlaceholder":151},[49,51897,51898,51900,51903],{"class":51,"line":9878},[49,51899,51430],{"class":55},[49,51901,51902],{"class":51389},"script",[49,51904,51396],{"class":55},[49,51906,51907],{"class":51,"line":9883},[49,51908,51909],{"class":283},"        \u002F\u002F 1. 四次弹框效果\n",[49,51911,51912],{"class":51,"line":9888},[49,51913,51914],{"class":283},"        \u002F\u002F 声明一个新的数组\n",[49,51916,51917,51920,51923,51925],{"class":51,"line":9893},[49,51918,51919],{"class":59},"        let",[49,51921,51922],{"class":55}," arr ",[49,51924,60],{"class":59},[49,51926,51927],{"class":55}," []\n",[49,51929,51930,51932,51934,51937,51939,51941,51943,51945,51947,51950,51952,51954],{"class":51,"line":9902},[49,51931,3495],{"class":59},[49,51933,1750],{"class":55},[49,51935,51936],{"class":59},"let",[49,51938,9528],{"class":55},[49,51940,60],{"class":59},[49,51942,25209],{"class":66},[49,51944,9535],{"class":55},[49,51946,1680],{"class":59},[49,51948,51949],{"class":66}," 4",[49,51951,3306],{"class":55},[49,51953,2384],{"class":59},[49,51955,12532],{"class":55},[49,51957,51958],{"class":51,"line":9907},[49,51959,51960],{"class":283},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[49,51962,51963],{"class":51,"line":9913},[49,51964,51965],{"class":283},"            \u002F\u002F arr.push(num)\n",[49,51967,51968,51971,51974,51976,51979,51981,51984,51986,51989],{"class":51,"line":9934},[49,51969,51970],{"class":55},"            arr.",[49,51972,51973],{"class":2055},"push",[49,51975,228],{"class":55},[49,51977,51978],{"class":2055},"prompt",[49,51980,228],{"class":55},[49,51982,51983],{"class":328},"`请输入第${",[49,51985,661],{"class":55},[49,51987,51988],{"class":328},"}季度的数据:`",[49,51990,30586],{"class":55},[49,51992,51993],{"class":51,"line":9940},[49,51994,51995],{"class":283},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[49,51997,51998],{"class":51,"line":9954},[49,51999,2621],{"class":55},[49,52001,52002],{"class":51,"line":9960},[49,52003,52004],{"class":283},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[49,52006,52007],{"class":51,"line":9987},[49,52008,52009],{"class":283},"        \u002F\u002F 盒子开头\n",[49,52011,52012,52015,52018,52020,52023],{"class":51,"line":9996},[49,52013,52014],{"class":55},"        document.",[49,52016,52017],{"class":2055},"write",[49,52019,228],{"class":55},[49,52021,52022],{"class":328},"` \u003Cdiv class=\"box\">`",[49,52024,81],{"class":55},[49,52026,52027],{"class":51,"line":10002},[49,52028,2492],{"emptyLinePlaceholder":151},[49,52030,52031],{"class":51,"line":10010},[49,52032,52033],{"class":283},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[49,52035,52036,52038,52040,52042,52044,52046,52048,52050,52052,52055,52058,52060,52062],{"class":51,"line":10015},[49,52037,3495],{"class":59},[49,52039,1750],{"class":55},[49,52041,51936],{"class":59},[49,52043,9528],{"class":55},[49,52045,60],{"class":59},[49,52047,4185],{"class":66},[49,52049,9535],{"class":55},[49,52051,1129],{"class":59},[49,52053,52054],{"class":55}," arr.",[49,52056,52057],{"class":66},"length",[49,52059,3306],{"class":55},[49,52061,2384],{"class":59},[49,52063,12532],{"class":55},[49,52065,52066,52069,52071,52073],{"class":51,"line":16694},[49,52067,52068],{"class":55},"            document.",[49,52070,52017],{"class":2055},[49,52072,228],{"class":55},[49,52074,52075],{"class":328},"`\n",[49,52077,52078,52081,52083,52085,52087,52089],{"class":51,"line":16700},[49,52079,52080],{"class":328},"              \u003Cdiv style=\"height: ${",[49,52082,3972],{"class":55},[49,52084,1109],{"class":328},[49,52086,661],{"class":55},[49,52088,1159],{"class":328},[49,52090,52091],{"class":328},"}px;\">\n",[49,52093,52094,52097,52099,52101,52103,52105],{"class":51,"line":16723},[49,52095,52096],{"class":328},"                \u003Cspan>${",[49,52098,3972],{"class":55},[49,52100,1109],{"class":328},[49,52102,661],{"class":55},[49,52104,1159],{"class":328},[49,52106,52107],{"class":328},"}\u003C\u002Fspan>\n",[49,52109,52110,52113,52115,52117,52119],{"class":51,"line":16729},[49,52111,52112],{"class":328},"                \u003Ch4>第${",[49,52114,661],{"class":55},[49,52116,45655],{"class":59},[49,52118,25209],{"class":66},[49,52120,52121],{"class":328},"}季度\u003C\u002Fh4>\n",[49,52123,52124],{"class":51,"line":16752},[49,52125,52126],{"class":328},"              \u003C\u002Fdiv>          \n",[49,52128,52129,52132],{"class":51,"line":16766},[49,52130,52131],{"class":328},"            `",[49,52133,81],{"class":55},[49,52135,52136],{"class":51,"line":16786},[49,52137,2621],{"class":55},[49,52139,52140],{"class":51,"line":16792},[49,52141,52142],{"class":283},"        \u002F\u002F 盒子结尾\n",[49,52144,52145,52147,52149,52151,52154],{"class":51,"line":16803},[49,52146,52014],{"class":55},[49,52148,52017],{"class":2055},[49,52150,228],{"class":55},[49,52152,52153],{"class":328},"` \u003C\u002Fdiv>`",[49,52155,81],{"class":55},[49,52157,52158,52160,52162],{"class":51,"line":16826},[49,52159,51865],{"class":55},[49,52161,51902],{"class":51389},[49,52163,51396],{"class":55},[49,52165,52166,52168,52170],{"class":51,"line":16848},[49,52167,51874],{"class":55},[49,52169,51889],{"class":51389},[49,52171,51396],{"class":55},[49,52173,52174],{"class":51,"line":16853},[49,52175,2492],{"emptyLinePlaceholder":151},[49,52177,52178,52180,52182],{"class":51,"line":16859},[49,52179,51874],{"class":55},[49,52181,50724],{"class":51389},[49,52183,51396],{"class":55},[195,52185,52187],{"id":52186},"_284-冒泡排序","2.8.4 冒泡排序",[39,52189,52191],{"className":50722,"code":52190,"language":50724,"meta":44,"style":44},"\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",[46,52192,52193,52203,52217,52221,52229,52244,52264,52276,52284,52288,52296,52304,52336,52369,52406,52411,52430,52435,52448,52463,52479,52483,52488,52492,52502,52511,52519,52523],{"__ignoreMap":44},[49,52194,52195,52197,52199,52201],{"class":51,"line":52},[49,52196,51386],{"class":55},[49,52198,51390],{"class":51389},[49,52200,51393],{"class":2055},[49,52202,51396],{"class":55},[49,52204,52205,52207,52209,52211,52213,52215],{"class":51,"line":84},[49,52206,1129],{"class":55},[49,52208,50724],{"class":51389},[49,52210,51405],{"class":2055},[49,52212,60],{"class":55},[49,52214,51410],{"class":328},[49,52216,51396],{"class":55},[49,52218,52219],{"class":51,"line":109},[49,52220,2492],{"emptyLinePlaceholder":151},[49,52222,52223,52225,52227],{"class":51,"line":120},[49,52224,1129],{"class":55},[49,52226,51423],{"class":51389},[49,52228,51396],{"class":55},[49,52230,52231,52234,52236,52238,52240,52242],{"class":51,"line":135},[49,52232,52233],{"class":55},"  \u003C",[49,52235,51433],{"class":51389},[49,52237,51436],{"class":2055},[49,52239,60],{"class":55},[49,52241,51441],{"class":328},[49,52243,51396],{"class":55},[49,52245,52246,52248,52250,52252,52254,52256,52258,52260,52262],{"class":51,"line":1306},[49,52247,52233],{"class":55},[49,52249,51433],{"class":51389},[49,52251,15010],{"class":2055},[49,52253,60],{"class":55},[49,52255,51480],{"class":328},[49,52257,51460],{"class":2055},[49,52259,60],{"class":55},[49,52261,51487],{"class":328},[49,52263,51396],{"class":55},[49,52265,52266,52268,52270,52272,52274],{"class":51,"line":1312},[49,52267,52233],{"class":55},[49,52269,51496],{"class":51389},[49,52271,51499],{"class":55},[49,52273,51496],{"class":51389},[49,52275,51396],{"class":55},[49,52277,52278,52280,52282],{"class":51,"line":1403},[49,52279,51874],{"class":55},[49,52281,51423],{"class":51389},[49,52283,51396],{"class":55},[49,52285,52286],{"class":51,"line":1409},[49,52287,2492],{"emptyLinePlaceholder":151},[49,52289,52290,52292,52294],{"class":51,"line":1421},[49,52291,1129],{"class":55},[49,52293,51889],{"class":51389},[49,52295,51396],{"class":55},[49,52297,52298,52300,52302],{"class":51,"line":1704},[49,52299,52233],{"class":55},[49,52301,51902],{"class":51389},[49,52303,51396],{"class":55},[49,52305,52306,52309,52311,52313,52316,52318,52320,52322,52324,52326,52328,52330,52332,52334],{"class":51,"line":1709},[49,52307,52308],{"class":59},"    let",[49,52310,51922],{"class":55},[49,52312,60],{"class":59},[49,52314,52315],{"class":55}," [",[49,52317,541],{"class":66},[49,52319,12525],{"class":55},[49,52321,515],{"class":66},[49,52323,12525],{"class":55},[49,52325,73],{"class":66},[49,52327,12525],{"class":55},[49,52329,301],{"class":66},[49,52331,12525],{"class":55},[49,52333,441],{"class":66},[49,52335,33335],{"class":55},[49,52337,52338,52340,52342,52344,52346,52348,52350,52352,52354,52356,52358,52361,52363,52365,52367],{"class":51,"line":1715},[49,52339,3293],{"class":59},[49,52341,1750],{"class":55},[49,52343,51936],{"class":59},[49,52345,9528],{"class":55},[49,52347,60],{"class":59},[49,52349,4185],{"class":66},[49,52351,9535],{"class":55},[49,52353,1129],{"class":59},[49,52355,52054],{"class":55},[49,52357,52057],{"class":66},[49,52359,52360],{"class":59}," -",[49,52362,25209],{"class":66},[49,52364,3306],{"class":55},[49,52366,2384],{"class":59},[49,52368,12532],{"class":55},[49,52370,52371,52374,52376,52378,52380,52382,52384,52386,52388,52390,52392,52394,52396,52398,52400,52402,52404],{"class":51,"line":1720},[49,52372,52373],{"class":59},"      for",[49,52375,1750],{"class":55},[49,52377,51936],{"class":59},[49,52379,9590],{"class":55},[49,52381,60],{"class":59},[49,52383,4185],{"class":66},[49,52385,9597],{"class":55},[49,52387,1129],{"class":59},[49,52389,52054],{"class":55},[49,52391,52057],{"class":66},[49,52393,52360],{"class":59},[49,52395,9528],{"class":55},[49,52397,751],{"class":59},[49,52399,25209],{"class":66},[49,52401,9604],{"class":55},[49,52403,2384],{"class":59},[49,52405,12532],{"class":55},[49,52407,52408],{"class":51,"line":1734},[49,52409,52410],{"class":283},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[49,52412,52413,52415,52418,52420,52423,52425,52427],{"class":51,"line":1739},[49,52414,2589],{"class":59},[49,52416,52417],{"class":55}," (arr[j] ",[49,52419,1179],{"class":59},[49,52421,52422],{"class":55}," arr[j ",[49,52424,700],{"class":59},[49,52426,25209],{"class":66},[49,52428,52429],{"class":55},"]) {\n",[49,52431,52432],{"class":51,"line":1745},[49,52433,52434],{"class":283},"          \u002F\u002F 交换两个变量\n",[49,52436,52437,52440,52443,52445],{"class":51,"line":1766},[49,52438,52439],{"class":59},"          let",[49,52441,52442],{"class":55}," tmp ",[49,52444,60],{"class":59},[49,52446,52447],{"class":55}," arr[j]\n",[49,52449,52450,52453,52455,52457,52459,52461],{"class":51,"line":1771},[49,52451,52452],{"class":55},"          arr[j] ",[49,52454,60],{"class":59},[49,52456,52422],{"class":55},[49,52458,700],{"class":59},[49,52460,25209],{"class":66},[49,52462,33335],{"class":55},[49,52464,52465,52468,52470,52472,52474,52476],{"class":51,"line":1785},[49,52466,52467],{"class":55},"          arr[j ",[49,52469,700],{"class":59},[49,52471,25209],{"class":66},[49,52473,4535],{"class":55},[49,52475,60],{"class":59},[49,52477,52478],{"class":55}," tmp\n",[49,52480,52481],{"class":51,"line":1790},[49,52482,2621],{"class":55},[49,52484,52485],{"class":51,"line":1819},[49,52486,52487],{"class":55},"      }\n",[49,52489,52490],{"class":51,"line":1824},[49,52491,2279],{"class":55},[49,52493,52494,52497,52499],{"class":51,"line":1841},[49,52495,52496],{"class":55},"    document.",[49,52498,52017],{"class":2055},[49,52500,52501],{"class":55},"(arr)\n",[49,52503,52504,52507,52509],{"class":51,"line":1846},[49,52505,52506],{"class":55},"  \u003C\u002F",[49,52508,51902],{"class":51389},[49,52510,51396],{"class":55},[49,52512,52513,52515,52517],{"class":51,"line":1851},[49,52514,51874],{"class":55},[49,52516,51889],{"class":51389},[49,52518,51396],{"class":55},[49,52520,52521],{"class":51,"line":1856},[49,52522,2492],{"emptyLinePlaceholder":151},[49,52524,52525,52527,52529],{"class":51,"line":1870},[49,52526,51874],{"class":55},[49,52528,50724],{"class":51389},[49,52530,51396],{"class":55},[14,52532,52533],{},[1554,52534],{"alt":44,"src":52535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52537,52538],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52540,52541],{},"let arr = [4, 2, 5, 1, 3]",[14,52543,52544],{},"\u002F\u002F 1.升序排列写法",[14,52546,52547],{},"arr.sort(function (a, b) {",[14,52549,52550],{},"return a - b",[14,52552,52553],{},"})",[14,52555,52556],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52558,52559],{},"\u002F\u002F 降序排列写法",[14,52561,52547],{},[14,52563,52564],{},"return b - a",[14,52566,52553],{},[14,52568,52569],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[166,52571,52573],{"id":52572},"_29-函数","2.9 函数",[14,52575,52576],{},[1554,52577],{"alt":44,"src":52578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52580,52581],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52583,52584],{},"函数的声明用function",[14,52586,52587],{},"函数里边可以嵌套函数",[195,52589,52591],{"id":52590},"_291-函数传参","2.9.1 函数传参",[14,52593,52594],{},[1554,52595],{"alt":44,"src":52596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52598,52599],{},[1554,52600],{"alt":44,"src":52601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1226,52603,52604,52607,52610,52613,52616,52619],{},[181,52605,52606],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[181,52608,52609],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[181,52611,52612],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[181,52614,52615],{},"开发中尽量保持形参和实参个数一致",[181,52617,52618],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[181,52620,52621],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52623,52624],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[195,52626,52628],{"id":52627},"_292-函数的返回值","2.9.2 函数的返回值",[14,52630,52631],{},[1554,52632],{"alt":44,"src":52633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52635,52636],{},[1554,52637],{"alt":44,"src":52638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1226,52640,52641,52644,52647,52650,52653],{},[181,52642,52643],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[181,52645,52646],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[181,52648,52649],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[181,52651,52652],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[181,52654,52655],{},"断点调试:进入函数内部看执行过程F11",[195,52657,52659],{"id":52658},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[39,52661,52663],{"className":50722,"code":52662,"language":50724,"meta":44,"style":44},"    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",[46,52664,52665,52670,52675,52679,52684],{"__ignoreMap":44},[49,52666,52667],{"class":51,"line":52},[49,52668,52669],{"class":55},"    function fn(a, b) {\n",[49,52671,52672],{"class":51,"line":84},[49,52673,52674],{"class":55},"      console.log(a + b);\n",[49,52676,52677],{"class":51,"line":109},[49,52678,2279],{"class":55},[49,52680,52681],{"class":51,"line":120},[49,52682,52683],{"class":55},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[49,52685,52686],{"class":51,"line":135},[49,52687,52688],{"class":55},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[195,52690,52692],{"id":52691},"_294-作用域","2.9.4 作用域",[1226,52694,52695,52701,52706,52709,52712],{},[181,52696,52697,52698],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[373,52699,52700],{},"作用域",[181,52702,52703],{},[373,52704,52705],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[181,52707,52708],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[181,52710,52711],{},"函数内部可以直接所使用全局变量",[181,52713,52714],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52716,14723],{},[39,52718,52720],{"className":50722,"code":52719,"language":50724,"meta":44,"style":44},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[46,52721,52722,52727,52732,52736,52741,52746,52751],{"__ignoreMap":44},[49,52723,52724],{"class":51,"line":52},[49,52725,52726],{"class":55},"    function fun() {\n",[49,52728,52729],{"class":51,"line":84},[49,52730,52731],{"class":55},"      num = 10\n",[49,52733,52734],{"class":51,"line":109},[49,52735,2279],{"class":55},[49,52737,52738],{"class":51,"line":120},[49,52739,52740],{"class":55},"    fun()\n",[49,52742,52743],{"class":51,"line":135},[49,52744,52745],{"class":55},"    console.log(num)\n",[49,52747,52748],{"class":51,"line":1306},[49,52749,52750],{"class":55},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[49,52752,52753],{"class":51,"line":1312},[49,52754,52755],{"class":55},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1226,52757,52758,52761],{},[181,52759,52760],{},"函数内部的形参可以看做是局部变量",[181,52762,52763],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52765,52766,52767],{},"变量访问原则： ",[373,52768,52769],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[195,52771,52773],{"id":52772},"_295-匿名函数","2.9.5 匿名函数",[14,52775,52776],{},"函数可以分为具名函数和匿名函数",[14,52778,52779],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[178,52781,52782],{},[181,52783,52784],{},"函数表达式",[14,52786,52787],{},[1554,52788],{"alt":44,"src":52789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52791,52792],{},"里边也可以写参数",[14,52794,52795],{},"具名函数调用位置可以随意调整；",[14,52797,52798],{},"匿名函数函数表达式形式只能在声明后才可以使用",[178,52800,52801],{"start":84},[181,52802,52803],{},"立即执行函数",[14,52805,52806],{},[1554,52807],{"alt":44,"src":52808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52810,52811],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52813,52814],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52816,52817],{},"(function () {})();",[14,52819,52820],{},"不要落下最后的;",[14,52822,52823],{},"立即执行函数必须要加;",[14,52825,52826],{},"分号写前写后都没问题",[14,52828,52829],{},"写前：",[14,52831,52832],{},"(function() {})()",[14,52834,52835],{},";(function () {})();",[14,52837,52838],{},"写后:",[14,52840,52841],{},"(function() {})();",[14,52843,52817],{},[14,52845,52846],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52848,52849],{},"还有一种写法：",[14,52851,52852],{},"(function(){}());",[14,52854,52855],{},"或者:",[14,52857,52858],{},"!function(){}();",[14,52860,52861],{},"立即执行函数有时候也是可以加名字的：",[14,52863,52864],{},"(function flexible(window,document) {}(window,document));",[14,52866,52867],{},"省一些调用方法",[195,52869,52871],{"id":52870},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52873,52874],{},[1554,52875],{"alt":44,"src":52876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52878,52879],{},"这样就不用非得给x,y初始化了",[14,52881,52882],{},[1554,52883],{"alt":44,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52886,52887],{},"代码执行时先看左边",[14,52889,52890],{},"例如：console.log(false && 3+5)",[14,52892,52893],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52895,52896],{},"&&都是真时，就返回最后一个真值",[14,52898,52899],{},"console.log(11 && 22)",[14,52901,52902],{},"输出22",[14,52904,52905],{},"逻辑与：遇真则真",[14,52907,14723],{},[14,52909,52910],{},"let age=1",[14,52912,52913],{},"console.log(11 || age++)",[14,52915,52916],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52918,52919],{},"console.log(11 || 22)",[14,52921,52922],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52924,52925],{},"||如果都是假的话，就取最后一个假的值了",[195,52927,52929],{"id":52928},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52931,52932],{},"显示转换：",[14,52934,52935,52938,52939],{},[373,52936,52937],{},"记忆","： ",[373,52940,52941],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52943,52944],{},"空字符串为假，其他字符串全为真",[14,52946,52947],{},[1554,52948],{"alt":44,"src":52949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52951,52952],{},"隐式转换：",[14,52954,52955],{},[1554,52956],{"alt":44,"src":52957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52959,52960],{},"隐式转换:",[14,52962,52963],{},"null+3=3",[14,52965,52966],{},"undefined+3=NaN",[14,52968,52969],{},"null==undefined 输出true,他两个都当0看",[14,52971,52972],{},"null===undefined 输出false",[14,52974,52975],{},"undefined做任何操作都是NaN",[14,52977,52978],{},"NaN不等于NaN，NaN表示计算错误",[166,52980,52982],{"id":52981},"_210-对象","2.10 对象",[195,52984,52986],{"id":52985},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52988,52989],{},"对象也是一种数据类型，里边的数据是无序的",[14,52991,52992],{},"对象由属性和方法组成",[14,52994,52995],{},[1554,52996],{"alt":44,"src":52997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52999,53000],{},[1554,53001],{"alt":44,"src":53002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53004,53005],{},[1554,53006],{"alt":44,"src":53007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[195,53009,53011],{"id":53010},"_2102-对象属性","2.10.2 对象属性",[14,53013,53014],{},[1554,53015],{"alt":44,"src":53016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[178,53018,53019],{},[181,53020,53021],{},"查询对象",[14,53023,53024],{},"对象名.属性 goods.uname",[14,53026,53027],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53029,53030],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53032,53033],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53035,53036],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[178,53038,53039],{"start":84},[181,53040,53041],{},"重新赋值",[14,53043,53044],{},"对象名.属性=新值",[178,53046,53047],{"start":109},[181,53048,53049],{},"增加新数据",[14,53051,53044],{},[178,53053,53054],{"start":120},[181,53055,53056],{},"删除对象中的属性",[14,53058,53059],{},"delete 对象名.属性",[195,53061,53063],{"id":53062},"_2103-对象方法","2.10.3 对象方法",[14,53065,53066],{},[1554,53067],{"alt":44,"src":53068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53070,53071],{},"后边跟的是匿名函数",[14,53073,53074],{},"对象外面的叫函数；对象内部的叫方法",[14,53076,53077],{},[1554,53078],{"alt":44,"src":53079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[195,53081,53083],{"id":53082},"_2104-遍历对象","2.10.4 遍历对象",[14,53085,53086],{},"理解为加括号的python字典遍历",[14,53088,53089],{},[1554,53090],{"alt":44,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53093,53094],{},"k是字符串类型",[14,53096,53097],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[39,53099,53101],{"className":50722,"code":53100,"language":50724,"meta":44,"style":44},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[46,53102,53103,53108,53113,53118,53123],{"__ignoreMap":44},[49,53104,53105],{"class":51,"line":52},[49,53106,53107],{"class":55},"   let arr = [1, 2, 3]\n",[49,53109,53110],{"class":51,"line":84},[49,53111,53112],{"class":55},"    for (let k in arr) {\n",[49,53114,53115],{"class":51,"line":109},[49,53116,53117],{"class":55},"      console.log(k)\n",[49,53119,53120],{"class":51,"line":120},[49,53121,53122],{"class":55},"      console.log(arr[k])\n",[49,53124,53125],{"class":51,"line":135},[49,53126,2279],{"class":55},[14,53128,53129],{},[1554,53130],{"alt":44,"src":53131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53133,53134],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53136,53137],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53139,53140],{},"for in 得到的k是属性名",[51902,53142,53143],{},"\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,53145,53146],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[195,53148,53150],{"id":53149},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53152,53153],{},"数组中放对象信息",[39,53155,53159],{"className":53156,"code":53157,"language":53158,"meta":44,"style":44},"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",[46,53160,53161,53169,53174,53179,53184,53189,53194,53199,53204,53209,53214,53219,53224,53228,53232],{"__ignoreMap":44},[49,53162,53163,53165,53167],{"class":51,"line":52},[49,53164,1129],{"class":55},[49,53166,51902],{"class":51389},[49,53168,51396],{"class":55},[49,53170,53171],{"class":51,"line":84},[49,53172,53173],{"class":55},"    let students = [\n",[49,53175,53176],{"class":51,"line":109},[49,53177,53178],{"class":55},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[49,53180,53181],{"class":51,"line":120},[49,53182,53183],{"class":55},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[49,53185,53186],{"class":51,"line":135},[49,53187,53188],{"class":55},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[49,53190,53191],{"class":51,"line":1306},[49,53192,53193],{"class":55},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[49,53195,53196],{"class":51,"line":1312},[49,53197,53198],{"class":55},"    ]\n",[49,53200,53201],{"class":51,"line":1403},[49,53202,53203],{"class":55},"    for (let i = 0; i \u003C students.length; i++) {\n",[49,53205,53206],{"class":51,"line":1409},[49,53207,53208],{"class":55},"      for (let k in students[i]) {\n",[49,53210,53211],{"class":51,"line":1421},[49,53212,53213],{"class":55},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[49,53215,53216],{"class":51,"line":1704},[49,53217,53218],{"class":55},"        \u002F\u002F输出每个人的名字：\n",[49,53220,53221],{"class":51,"line":1709},[49,53222,53223],{"class":55},"        \u002F\u002Fconsole.log(students[i].name)\n",[49,53225,53226],{"class":51,"line":1715},[49,53227,52487],{"class":55},[49,53229,53230],{"class":51,"line":1720},[49,53231,2279],{"class":55},[49,53233,53234,53236,53238],{"class":51,"line":1734},[49,53235,52506],{"class":55},[49,53237,51902],{"class":51389},[49,53239,51396],{"class":55},[195,53241,53243],{"id":53242},"_2106-内置对象","2.10.6 内置对象",[14,53245,53246],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[178,53248,53249],{},[181,53250,53251],{},"数学对象Math",[14,53253,53254],{},[1554,53255],{"alt":44,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53258,53259],{},[56,53260,53263],{"href":53261,"rel":53262},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23955],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53265,53266],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53268,53269],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53271,53272],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53274,53275],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53277,53278],{},"null属于对象数据类型",[178,53280,53281],{"start":84},[181,53282,53283],{},"生成任意范围随机数",[14,53285,53286],{},[1554,53287],{"alt":44,"src":53288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53290,53291],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53293,53294],{},"乘以几就取不到几",[14,53296,53297],{},"取数组中的随机元素：",[14,53299,53300],{},"let arr = ['red', 'green', 'blue']",[14,53302,53303],{},"let random = Math.floor(Math.random() * arr.length)",[14,53305,53306],{},"console.log(arr[random])",[14,53308,53309],{},"这个函数得到的是全闭区间",[14,53311,53312],{},"function getRandom(N, M) {",[14,53314,53315],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53317,1165],{},[14,53319,53320],{},"console.log(getRandom(4, 8))",[195,53322,53324],{"id":53323},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53326,53327],{},[1554,53328],{"alt":44,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53331,53332],{},[1554,53333],{"alt":44,"src":53334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53336,53337],{},[1554,53338],{"alt":44,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53341,53342],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53344,53345],{},[1554,53346],{"alt":44,"src":53347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53349,53350],{},[1554,53351],{"alt":44,"src":53352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53354,53355],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53357,53358],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53360,53361],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[143,53363,53364],{},"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":44,"searchDepth":84,"depth":84,"links":53366},[53367,53375,53376,53377,53378,53379,53386,53390,53396,53405],{"id":50557,"depth":84,"text":50558,"children":53368},[53369,53370,53371,53372,53373,53374],{"id":50561,"depth":109,"text":50562},{"id":50578,"depth":109,"text":50579},{"id":50618,"depth":109,"text":50619},{"id":50630,"depth":109,"text":50631},{"id":50639,"depth":109,"text":50640},{"id":50687,"depth":109,"text":50688},{"id":50697,"depth":84,"text":50698},{"id":50785,"depth":84,"text":50786},{"id":50808,"depth":84,"text":50809},{"id":50820,"depth":84,"text":50821},{"id":51007,"depth":84,"text":51008,"children":53380},[53381,53382,53383,53384,53385],{"id":51011,"depth":109,"text":51012},{"id":51020,"depth":109,"text":51021},{"id":51048,"depth":109,"text":51049},{"id":51084,"depth":109,"text":51085},{"id":51109,"depth":109,"text":51110},{"id":51121,"depth":84,"text":51122,"children":53387},[53388,53389],{"id":51142,"depth":109,"text":51143},{"id":51236,"depth":109,"text":51237},{"id":51294,"depth":84,"text":51295,"children":53391},[53392,53393,53394,53395],{"id":51298,"depth":109,"text":51299},{"id":51322,"depth":109,"text":51323},{"id":51375,"depth":109,"text":51376},{"id":52186,"depth":109,"text":52187},{"id":52572,"depth":84,"text":52573,"children":53397},[53398,53399,53400,53401,53402,53403,53404],{"id":52590,"depth":109,"text":52591},{"id":52627,"depth":109,"text":52628},{"id":52658,"depth":109,"text":52659},{"id":52691,"depth":109,"text":52692},{"id":52772,"depth":109,"text":52773},{"id":52870,"depth":109,"text":52871},{"id":52928,"depth":109,"text":52929},{"id":52981,"depth":84,"text":52982,"children":53406},[53407,53408,53409,53410,53411,53412,53413],{"id":52985,"depth":109,"text":52986},{"id":53010,"depth":109,"text":53011},{"id":53062,"depth":109,"text":53063},{"id":53082,"depth":109,"text":53083},{"id":53149,"depth":109,"text":53150},{"id":53242,"depth":109,"text":53243},{"id":53323,"depth":109,"text":53324},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50549,"description":148},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53420,"title":53421,"body":53422,"description":148,"extension":149,"meta":76762,"navigation":151,"path":76763,"seo":76764,"stem":76765,"__hash__":76766},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53423,"toc":76702},[53424,53427,53430,53433,53438,53441,53444,53447,53451,53455,53461,53466,53474,53481,53484,53488,53493,53498,53503,53506,53509,53520,53523,53527,53530,53533,53538,53543,53548,53551,53554,53646,53649,53654,53657,53662,53665,53668,53673,53676,53681,53685,53688,53702,53706,53711,53714,53717,53721,53726,53729,53733,53737,53742,53746,53751,53754,53757,53760,53763,53766,53769,53774,53779,53807,53810,53813,53816,53821,53824,53827,53830,53833,53837,53866,53870,53875,53880,53883,53886,53889,53894,54009,54014,54019,54180,54185,54188,54192,54197,54202,54205,54208,54211,54214,54217,54220,54223,54226,54229,54232,54235,54238,54241,54244,54246,54249,54252,54255,54260,54264,54661,54664,54670,54674,54679,55961,55966,55969,55972,55975,55980,57176,57180,57186,57191,57194,57199,57204,57208,57212,57217,57220,57225,57228,57231,57235,58143,58146,58150,58371,58374,58377,58380,58606,58609,58833,58836,58840,58845,58848,58851,59079,59082,59115,59118,59122,59127,59131,59134,59137,59140,59143,59146,59149,59152,59157,60437,60441,60444,61537,61541,61544,61547,61550,61553,61557,61560,61563,61565,61573,63054,63058,63061,63064,63067,63276,63279,63283,63287,63292,63297,63300,63303,63308,63312,63317,63320,63429,63433,63438,63443,63446,63449,63453,63458,63463,63468,63471,63474,63485,63488,63493,63498,63501,63504,63577,63581,63586,63589,63591,63602,63606,63611,64937,64940,64943,64946,64948,64951,64954,64957,64960,64963,64966,64969,64972,64975,64978,64981,64984,64986,64988,64991,64995,66089,66092,66095,66111,66125,66128,66133,66139,66144,66148,66152,66157,66161,66166,66608,66613,66616,66620,66625,66628,66631,66635,66640,66644,66649,66654,66658,66663,66668,66671,66676,66681,66685,66690,66695,66799,66802,66806,66811,67177,67180,67183,67186,67189,67192,67195,67198,67201,68497,68501,68506,68511,68514,68517,68520,68523,68525,68530,68535,68538,68542,68547,68552,68557,68560,68563,68566,68569,68572,68577,68580,68584,68589,68594,68598,68603,68606,68611,68614,68617,68620,68623,68626,68631,68634,68637,68640,68643,68647,68652,68655,68659,68664,68667,68670,68674,68703,68706,68710,68714,68719,68723,68728,68731,68734,68737,68740,68743,68746,68749,68752,68755,68758,68761,68764,68767,68770,68774,68779,68784,68787,68791,68795,68800,68803,68807,68810,68813,68818,68823,68828,68833,68838,68841,68844,68849,68854,68858,68863,68866,68871,68874,68877,68880,68883,68888,68891,68900,68904,68909,68912,68915,68919,68922,68927,68931,68934,68940,68946,68950,68976,68979,70540,70543,71039,71042,71047,71052,71057,71061,71066,71071,71076,71080,71085,71088,71091,71094,71097,71101,71104,71109,71112,71117,71121,71126,71129,71134,71139,71144,71147,71150,71155,71160,71163,71166,71170,71173,71178,71181,71186,71189,71194,71199,71204,71207,71212,71277,71280,71291,71295,71300,71472,71476,71481,71484,71487,71490,71494,71505,71509,71512,71517,71522,71525,71528,71531,71534,71537,71539,71542,71545,71548,71553,71556,71561,71564,71568,71571,71574,71588,71592,71595,71650,71655,71658,71661,71666,71669,71673,71678,71808,71812,71817,71822,71903,71908,71912,71915,71920,71925,71931,71934,71937,71940,71944,71949,71952,71963,71967,71984,75031,75035,75038,75041,75044,75065,75069,75072,75080,75083,75088,75091,75094,75099,75104,75108,75129,75133,75138,75141,75144,75147,75150,75154,75159,75162,75166,75171,75174,75179,75182,75187,75190,75195,76398,76402,76407,76410,76415,76699],[10,53425,53421],{"id":53426},"_3web-apis",[14,53428,53429],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53431,53432],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53434,53435],{},[1554,53436],{"alt":44,"src":53437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53439,53440],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53442,53443],{},"建议数组和对象使用 const 来声明",[14,53445,53446],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[166,53448,53450],{"id":53449},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[195,53452,53454],{"id":53453},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53456,53457,53460],{},[46,53458,53459],{},"document"," = HTML 文件解析后的对象化表示；",[14,53462,53463,53465],{},[46,53464,53459],{}," ≠ HTML 文件本身",[14,53467,53468,53473],{},[373,53469,53470],{},[46,53471,53472],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53475,53476,53480],{},[373,53477,53478],{},[46,53479,53459],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53482,53483],{},"document实际上为window.document的简写",[195,53485,53487],{"id":53486},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53489,53490],{},[1554,53491],{"alt":44,"src":53492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53494,53495],{},[1554,53496],{"alt":44,"src":53497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53499,53500],{},[1554,53501],{"alt":44,"src":53502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53504,53505],{},"console.dir()",[14,53507,53508],{},"dir用来打印对象",[1226,53510,53511,53514,53517],{},[181,53512,53513],{},"任何一个标签，都是一个对象",[181,53515,53516],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[181,53518,53519],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53521,53522],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[195,53524,53526],{"id":53525},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53528,53529],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53531,53532],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53534,53535],{},[373,53536,53537],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[178,53539,53540],{},[181,53541,53542],{},"利用CSS选择器来获取标签元素",[14,53544,53545],{},[1554,53546],{"alt":44,"src":53547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53549,53550],{},"里边的选择器必须必须加引号！！！",[14,53552,53553],{},"只选择第一个元素",[39,53555,53557],{"className":53156,"code":53556,"language":53158,"meta":44,"style":44},"\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",[46,53558,53559,53567,53588,53607,53615,53620,53625,53630,53638],{"__ignoreMap":44},[49,53560,53561,53563,53565],{"class":51,"line":52},[49,53562,1129],{"class":55},[49,53564,51889],{"class":51389},[49,53566,51396],{"class":55},[49,53568,53569,53571,53573,53576,53578,53581,53584,53586],{"class":51,"line":84},[49,53570,52233],{"class":55},[49,53572,51700],{"class":51389},[49,53574,53575],{"class":2055}," class",[49,53577,60],{"class":55},[49,53579,53580],{"class":328},"\"box\"",[49,53582,53583],{"class":55},">123\u003C\u002F",[49,53585,51700],{"class":51389},[49,53587,51396],{"class":55},[49,53589,53590,53592,53594,53596,53598,53600,53603,53605],{"class":51,"line":109},[49,53591,52233],{"class":55},[49,53593,51700],{"class":51389},[49,53595,53575],{"class":2055},[49,53597,60],{"class":55},[49,53599,53580],{"class":328},[49,53601,53602],{"class":55},">456\u003C\u002F",[49,53604,51700],{"class":51389},[49,53606,51396],{"class":55},[49,53608,53609,53611,53613],{"class":51,"line":120},[49,53610,52233],{"class":55},[49,53612,51902],{"class":51389},[49,53614,51396],{"class":55},[49,53616,53617],{"class":51,"line":135},[49,53618,53619],{"class":55},"    \u002F\u002F 1.获取匹配的第一个元素\n",[49,53621,53622],{"class":51,"line":1306},[49,53623,53624],{"class":55},"    const box = document.querySelector('div')\n",[49,53626,53627],{"class":51,"line":1312},[49,53628,53629],{"class":55},"    console.dir(box)\n",[49,53631,53632,53634,53636],{"class":51,"line":1403},[49,53633,52506],{"class":55},[49,53635,51902],{"class":51389},[49,53637,51396],{"class":55},[49,53639,53640,53642,53644],{"class":51,"line":1409},[49,53641,51874],{"class":55},[49,53643,51889],{"class":51389},[49,53645,51396],{"class":55},[14,53647,53648],{},"只选123，不选456",[14,53650,53651],{},[1554,53652],{"alt":44,"src":53653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53655,53656],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53658,53659],{},[1554,53660],{"alt":44,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53663,53664],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53666,53667],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[178,53669,53670],{"start":84},[181,53671,53672],{},"其他方法来获取标签元素",[14,53674,53675],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53677,53678],{},[1554,53679],{"alt":44,"src":53680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[195,53682,53684],{"id":53683},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53686,53687],{},"设置修改DOM元素内容有两种方式：",[1226,53689,53690,53693,53696,53699],{},[181,53691,53692],{},"元素.innerText=''",[181,53694,53695],{},"元素.innerHTML=''",[181,53697,53698],{},"不写字符串输出数字也是可以的",[181,53700,53701],{},"元素.innerHtml=1",[22088,53703,53705],{"id":53704},"_3131-innertext","3.1.3.1 innerText",[14,53707,53708],{},[1554,53709],{"alt":44,"src":53710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53712,53713],{},"思路：实现了修改盒子中的内容！",[14,53715,53716],{},"它只显示纯文本，不解析标签",[22088,53718,53720],{"id":53719},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53722,53723],{},[1554,53724],{"alt":44,"src":53725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53727,53728],{},"相比于innerText，他的强大之处在于可以解析标签",[195,53730,53732],{"id":53731},"_314-操作元素属性","3.1.4 操作元素属性",[22088,53734,53736],{"id":53735},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53738,53739],{},[1554,53740],{"alt":44,"src":53741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22088,53743,53745],{"id":53744},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53747,53748],{},[1554,53749],{"alt":44,"src":53750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53752,53753],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53755,53756],{},"div.style.backgroundColor = 'hotpink'",[14,53758,53759],{},"如果按照css的写法，-表示减，就会出错",[14,53761,53762],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53764,53765],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53767,53768],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53770,53771],{},[1554,53772],{"alt":44,"src":53773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53775,53776],{},[1554,53777],{"alt":44,"src":53778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[178,53780,53781,53784,53787,53790,53793,53796],{},[181,53782,53783],{},"className这个方式就是修改很多样式的时候来使用的！",[181,53785,53786],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[181,53788,53789],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[181,53791,53792],{},"className为属性名，如果还用class的话就导致与关键字冲突",[181,53794,53795],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[181,53797,53798,53799,53804],{},"解析标签的时候就变为了",[51700,53800],{"className":53801},[53802,53803],"nav","box",[53805,53806],"br",{},[14,53808,53809],{},"例子：",[51700,53811],{"className":53812},[53802],[51902,53814,53815],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53817,53818],{},[1554,53819],{"alt":44,"src":53820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53822,53823],{},"追加和删除类名用classList",[14,53825,53826],{},"常用于类似于开关的操作",[14,53828,53829],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53831,53832],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22088,53834,53836],{"id":53835},"_3143-牢记点","3.1.4.3 牢记点",[178,53838,53839,53842,53845,53848,53851,53854,53857,53860,53863],{},[181,53840,53841],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[181,53843,53844],{},"使用style属性操作css时不要忘记引号",[181,53846,53847],{},"使用className或者classList时也不要忘记引号",[181,53849,53850],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[181,53852,53853],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[181,53855,53856],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[181,53858,53859],{},"若： let arr=['1','2',3] arr[0]=1",[181,53861,53862],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[181,53864,53865],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[195,53867,53869],{"id":53868},"_315-操作表单元素","3.1.5 操作表单元素",[178,53871,53872],{},[181,53873,53874],{},"天生的属性",[14,53876,53877],{},[1554,53878],{"alt":44,"src":53879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53881,53882],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53884,53885],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53887,53888],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53890,53891],{},[1554,53892],{"alt":44,"src":53893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[39,53895,53897],{"className":50722,"code":53896,"language":50724,"meta":44,"style":44},"在复选框中如果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",[46,53898,53899,53904,53936,53941,53946,53951,53956,53960,53965,53970,53987,53999,54004],{"__ignoreMap":44},[49,53900,53901],{"class":51,"line":52},[49,53902,53903],{"class":55},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[49,53905,53906,53908,53911,53914,53916,53919,53921,53923,53925,53927,53929,53931,53934],{"class":51,"line":84},[49,53907,1129],{"class":55},[49,53909,53910],{"class":51389},"input",[49,53912,53913],{"class":2055}," type",[49,53915,60],{"class":55},[49,53917,53918],{"class":328},"\"checkbox\"",[49,53920,15010],{"class":2055},[49,53922,60],{"class":55},[49,53924,7742],{"class":328},[49,53926,15049],{"class":2055},[49,53928,60],{"class":55},[49,53930,7742],{"class":328},[49,53932,53933],{"class":2055}," checked",[49,53935,51396],{"class":55},[49,53937,53938],{"class":51,"line":109},[49,53939,53940],{"class":55},"不选的话：\n",[49,53942,53943],{"class":51,"line":120},[49,53944,53945],{"class":55},"const input = document.querySelector('input')\n",[49,53947,53948],{"class":51,"line":135},[49,53949,53950],{"class":55},"input.checked=false\n",[49,53952,53953],{"class":51,"line":1306},[49,53954,53955],{"class":55},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[49,53957,53958],{"class":51,"line":1312},[49,53959,2492],{"emptyLinePlaceholder":151},[49,53961,53962],{"class":51,"line":1403},[49,53963,53964],{"class":55},"禁用按钮：\n",[49,53966,53967],{"class":51,"line":1409},[49,53968,53969],{"class":55},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[49,53971,53972,53974,53977,53980,53983,53985],{"class":51,"line":1421},[49,53973,1129],{"class":55},[49,53975,53976],{"class":51389},"button",[49,53978,53979],{"class":2055}," disabled",[49,53981,53982],{"class":55},">点击\u003C\u002F",[49,53984,53976],{"class":51389},[49,53986,51396],{"class":55},[49,53988,53989,53991,53993,53995,53997],{"class":51,"line":1704},[49,53990,1129],{"class":55},[49,53992,53976],{"class":51389},[49,53994,53982],{"class":55},[49,53996,53976],{"class":51389},[49,53998,51396],{"class":55},[49,54000,54001],{"class":51,"line":1709},[49,54002,54003],{"class":55},"const bt = document.querySelector('button')\n",[49,54005,54006],{"class":51,"line":1715},[49,54007,54008],{"class":55},"bt.disabled = false\n",[178,54010,54011],{"start":84},[181,54012,54013],{},"自定义属性",[14,54015,54016],{},[1554,54017],{"alt":44,"src":54018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[39,54020,54022],{"className":53156,"code":54021,"language":53158,"meta":44,"style":44},"\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",[46,54023,54024,54032,54060,54079,54098,54117,54136,54144,54149,54154,54159,54164,54172],{"__ignoreMap":44},[49,54025,54026,54028,54030],{"class":51,"line":52},[49,54027,1129],{"class":55},[49,54029,51889],{"class":51389},[49,54031,51396],{"class":55},[49,54033,54034,54036,54038,54041,54043,54045,54048,54050,54053,54056,54058],{"class":51,"line":84},[49,54035,52233],{"class":55},[49,54037,51700],{"class":51389},[49,54039,54040],{"class":2055}," data-id",[49,54042,60],{"class":55},[49,54044,3770],{"class":328},[49,54046,54047],{"class":2055}," data-spm",[49,54049,60],{"class":55},[49,54051,54052],{"class":328},"\"我不知道\"",[49,54054,54055],{"class":55},">1\u003C\u002F",[49,54057,51700],{"class":51389},[49,54059,51396],{"class":55},[49,54061,54062,54064,54066,54068,54070,54072,54075,54077],{"class":51,"line":109},[49,54063,52233],{"class":55},[49,54065,51700],{"class":51389},[49,54067,54040],{"class":2055},[49,54069,60],{"class":55},[49,54071,3793],{"class":328},[49,54073,54074],{"class":55},">2\u003C\u002F",[49,54076,51700],{"class":51389},[49,54078,51396],{"class":55},[49,54080,54081,54083,54085,54087,54089,54091,54094,54096],{"class":51,"line":120},[49,54082,52233],{"class":55},[49,54084,51700],{"class":51389},[49,54086,54040],{"class":2055},[49,54088,60],{"class":55},[49,54090,3806],{"class":328},[49,54092,54093],{"class":55},">3\u003C\u002F",[49,54095,51700],{"class":51389},[49,54097,51396],{"class":55},[49,54099,54100,54102,54104,54106,54108,54110,54113,54115],{"class":51,"line":135},[49,54101,52233],{"class":55},[49,54103,51700],{"class":51389},[49,54105,54040],{"class":2055},[49,54107,60],{"class":55},[49,54109,3819],{"class":328},[49,54111,54112],{"class":55},">4\u003C\u002F",[49,54114,51700],{"class":51389},[49,54116,51396],{"class":55},[49,54118,54119,54121,54123,54125,54127,54129,54132,54134],{"class":51,"line":1306},[49,54120,52233],{"class":55},[49,54122,51700],{"class":51389},[49,54124,54040],{"class":2055},[49,54126,60],{"class":55},[49,54128,3840],{"class":328},[49,54130,54131],{"class":55},">5\u003C\u002F",[49,54133,51700],{"class":51389},[49,54135,51396],{"class":55},[49,54137,54138,54140,54142],{"class":51,"line":1312},[49,54139,52233],{"class":55},[49,54141,51902],{"class":51389},[49,54143,51396],{"class":55},[49,54145,54146],{"class":51,"line":1403},[49,54147,54148],{"class":55},"    const one = document.querySelector('div')\n",[49,54150,54151],{"class":51,"line":1409},[49,54152,54153],{"class":55},"    console.log(one.dataset)\n",[49,54155,54156],{"class":51,"line":1421},[49,54157,54158],{"class":55},"    console.log(one.dataset.id)\n",[49,54160,54161],{"class":51,"line":1704},[49,54162,54163],{"class":55},"    console.log(one.dataset.spm)\n",[49,54165,54166,54168,54170],{"class":51,"line":1709},[49,54167,52506],{"class":55},[49,54169,51902],{"class":51389},[49,54171,51396],{"class":55},[49,54173,54174,54176,54178],{"class":51,"line":1715},[49,54175,51874],{"class":55},[49,54177,51889],{"class":51389},[49,54179,51396],{"class":55},[14,54181,54182],{},[1554,54183],{"alt":44,"src":54184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54186,54187],{},"document.querySelector选择的是第一个对象（元素）",[195,54189,54191],{"id":54190},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54193,54194],{},[1554,54195],{"alt":44,"src":54196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54198,54199],{},[1554,54200],{"alt":44,"src":54201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54203,54204],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51902,54206,54207],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54209,54210],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51902,54212,54213],{},"\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,54215,54216],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54218,54219],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54221,54222],{},"单位为毫秒！！！",[14,54224,54225],{},"可以搭配匿名函数来用！！！",[14,54227,54228],{},"setInterval(function () {",[14,54230,54231],{},"alert('两秒执行一次')",[14,54233,54234],{},"}, 2000)",[14,54236,54237],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54239,54240],{},"function fn() {",[14,54242,54243],{},"document.write(1)",[14,54245,1165],{},[14,54247,54248],{},"setInterval(fn, 1000)",[14,54250,54251],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54253,54254],{},"setInterval('fn()', 1000)",[14,54256,54257],{},[1554,54258],{"alt":44,"src":54259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22088,54261,54263],{"id":54262},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[39,54265,54267],{"className":50722,"code":54266,"language":50724,"meta":44,"style":44},"\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",[46,54268,54269,54279,54293,54297,54305,54319,54339,54351,54359,54363,54371,54408,54413,54418,54423,54431,54439,54461,54469,54474,54496,54501,54506,54517,54522,54542,54550,54565,54580,54591,54596,54606,54616,54620,54629,54633,54641,54649,54653],{"__ignoreMap":44},[49,54270,54271,54273,54275,54277],{"class":51,"line":52},[49,54272,51386],{"class":55},[49,54274,51390],{"class":51389},[49,54276,51393],{"class":2055},[49,54278,51396],{"class":55},[49,54280,54281,54283,54285,54287,54289,54291],{"class":51,"line":84},[49,54282,1129],{"class":55},[49,54284,50724],{"class":51389},[49,54286,51405],{"class":2055},[49,54288,60],{"class":55},[49,54290,51410],{"class":328},[49,54292,51396],{"class":55},[49,54294,54295],{"class":51,"line":109},[49,54296,2492],{"emptyLinePlaceholder":151},[49,54298,54299,54301,54303],{"class":51,"line":120},[49,54300,1129],{"class":55},[49,54302,51423],{"class":51389},[49,54304,51396],{"class":55},[49,54306,54307,54309,54311,54313,54315,54317],{"class":51,"line":135},[49,54308,52233],{"class":55},[49,54310,51433],{"class":51389},[49,54312,51436],{"class":2055},[49,54314,60],{"class":55},[49,54316,51441],{"class":328},[49,54318,51396],{"class":55},[49,54320,54321,54323,54325,54327,54329,54331,54333,54335,54337],{"class":51,"line":1306},[49,54322,52233],{"class":55},[49,54324,51433],{"class":51389},[49,54326,15010],{"class":2055},[49,54328,60],{"class":55},[49,54330,51480],{"class":328},[49,54332,51460],{"class":2055},[49,54334,60],{"class":55},[49,54336,51487],{"class":328},[49,54338,51396],{"class":55},[49,54340,54341,54343,54345,54347,54349],{"class":51,"line":1312},[49,54342,52233],{"class":55},[49,54344,51496],{"class":51389},[49,54346,51499],{"class":55},[49,54348,51496],{"class":51389},[49,54350,51396],{"class":55},[49,54352,54353,54355,54357],{"class":51,"line":1403},[49,54354,51874],{"class":55},[49,54356,51423],{"class":51389},[49,54358,51396],{"class":55},[49,54360,54361],{"class":51,"line":1409},[49,54362,2492],{"emptyLinePlaceholder":151},[49,54364,54365,54367,54369],{"class":51,"line":1421},[49,54366,1129],{"class":55},[49,54368,51889],{"class":51389},[49,54370,51396],{"class":55},[49,54372,54373,54375,54378,54380,54382,54384,54386,54388,54390,54393,54395,54398,54401,54403,54406],{"class":51,"line":1704},[49,54374,52233],{"class":55},[49,54376,54377],{"class":51389},"textarea",[49,54379,15010],{"class":2055},[49,54381,60],{"class":55},[49,54383,7742],{"class":328},[49,54385,15049],{"class":2055},[49,54387,60],{"class":55},[49,54389,7742],{"class":328},[49,54391,54392],{"class":2055}," cols",[49,54394,60],{"class":55},[49,54396,54397],{"class":328},"\"30\"",[49,54399,54400],{"class":2055}," rows",[49,54402,60],{"class":55},[49,54404,54405],{"class":328},"\"10\"",[49,54407,51396],{"class":55},[49,54409,54410],{"class":51,"line":1709},[49,54411,54412],{"class":55},"        用户注册协议\n",[49,54414,54415],{"class":51,"line":1715},[49,54416,54417],{"class":55},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[49,54419,54420],{"class":51,"line":1720},[49,54421,54422],{"class":55},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[49,54424,54425,54427,54429],{"class":51,"line":1734},[49,54426,51865],{"class":55},[49,54428,54377],{"class":51389},[49,54430,51396],{"class":55},[49,54432,54433,54435,54437],{"class":51,"line":1739},[49,54434,52233],{"class":55},[49,54436,53805],{"class":51389},[49,54438,51396],{"class":55},[49,54440,54441,54443,54445,54447,54449,54452,54454,54457,54459],{"class":51,"line":1745},[49,54442,52233],{"class":55},[49,54444,53976],{"class":51389},[49,54446,53575],{"class":2055},[49,54448,60],{"class":55},[49,54450,54451],{"class":328},"\"btn\"",[49,54453,53979],{"class":2055},[49,54455,54456],{"class":55},">我已经阅读用户协议(5)\u003C\u002F",[49,54458,53976],{"class":51389},[49,54460,51396],{"class":55},[49,54462,54463,54465,54467],{"class":51,"line":1766},[49,54464,52233],{"class":55},[49,54466,51902],{"class":51389},[49,54468,51396],{"class":55},[49,54470,54471],{"class":51,"line":1771},[49,54472,54473],{"class":283},"    \u002F\u002F 1. 获取元素\n",[49,54475,54476,54478,54481,54483,54486,54489,54491,54494],{"class":51,"line":1785},[49,54477,11311],{"class":59},[49,54479,54480],{"class":66}," btn",[49,54482,13654],{"class":59},[49,54484,54485],{"class":55}," document.",[49,54487,54488],{"class":2055},"querySelector",[49,54490,228],{"class":55},[49,54492,54493],{"class":328},"'.btn'",[49,54495,81],{"class":55},[49,54497,54498],{"class":51,"line":1790},[49,54499,54500],{"class":283},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[49,54502,54503],{"class":51,"line":1819},[49,54504,54505],{"class":283},"    \u002F\u002F 2. 倒计时\n",[49,54507,54508,54510,54512,54514],{"class":51,"line":1824},[49,54509,52308],{"class":59},[49,54511,9528],{"class":55},[49,54513,60],{"class":59},[49,54515,54516],{"class":66}," 5\n",[49,54518,54519],{"class":51,"line":1841},[49,54520,54521],{"class":283},"    \u002F\u002F 2.1 开启定时器\n",[49,54523,54524,54526,54529,54531,54534,54536,54539],{"class":51,"line":1846},[49,54525,52308],{"class":59},[49,54527,54528],{"class":55}," n ",[49,54530,60],{"class":59},[49,54532,54533],{"class":2055}," setInterval",[49,54535,228],{"class":55},[49,54537,54538],{"class":59},"function",[49,54540,54541],{"class":55}," () {\n",[49,54543,54544,54547],{"class":51,"line":1851},[49,54545,54546],{"class":55},"      i",[49,54548,54549],{"class":59},"--\n",[49,54551,54552,54555,54557,54560,54562],{"class":51,"line":1856},[49,54553,54554],{"class":55},"      btn.innerHTML ",[49,54556,60],{"class":59},[49,54558,54559],{"class":328}," `我已经阅读用户协议(${",[49,54561,661],{"class":55},[49,54563,54564],{"class":328},"})`\n",[49,54566,54567,54570,54573,54576,54578],{"class":51,"line":1870},[49,54568,54569],{"class":59},"      if",[49,54571,54572],{"class":55}," (i ",[49,54574,54575],{"class":59},"===",[49,54577,4185],{"class":66},[49,54579,12532],{"class":55},[49,54581,54582,54585,54588],{"class":51,"line":1875},[49,54583,54584],{"class":2055},"        clearInterval",[49,54586,54587],{"class":55},"(n)  ",[49,54589,54590],{"class":283},"\u002F\u002F 关闭定时器\n",[49,54592,54593],{"class":51,"line":2669},[49,54594,54595],{"class":283},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[49,54597,54598,54601,54603],{"class":51,"line":2683},[49,54599,54600],{"class":55},"        btn.disabled ",[49,54602,60],{"class":59},[49,54604,54605],{"class":66}," false\n",[49,54607,54608,54611,54613],{"class":51,"line":2691},[49,54609,54610],{"class":55},"        btn.innerHTML ",[49,54612,60],{"class":59},[49,54614,54615],{"class":328}," '同意'\n",[49,54617,54618],{"class":51,"line":2696},[49,54619,52487],{"class":55},[49,54621,54622,54625,54627],{"class":51,"line":2702},[49,54623,54624],{"class":55},"    }, ",[49,54626,6500],{"class":66},[49,54628,81],{"class":55},[49,54630,54631],{"class":51,"line":2708},[49,54632,2492],{"emptyLinePlaceholder":151},[49,54634,54635,54637,54639],{"class":51,"line":2713},[49,54636,52506],{"class":55},[49,54638,51902],{"class":51389},[49,54640,51396],{"class":55},[49,54642,54643,54645,54647],{"class":51,"line":8038},[49,54644,51874],{"class":55},[49,54646,51889],{"class":51389},[49,54648,51396],{"class":55},[49,54650,54651],{"class":51,"line":8062},[49,54652,2492],{"emptyLinePlaceholder":151},[49,54654,54655,54657,54659],{"class":51,"line":8067},[49,54656,51874],{"class":55},[49,54658,50724],{"class":51389},[49,54660,51396],{"class":55},[14,54662,54663],{},"不要一直想着用死循环,避免死循环",[14,54665,54666,54669],{},[46,54667,54668],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22088,54671,54673],{"id":54672},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[178,54675,54676],{},[181,54677,54678],{},"法1",[39,54680,54682],{"className":50722,"code":54681,"language":50724,"meta":44,"style":44},"\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",[46,54683,54684,54694,54708,54712,54720,54734,54754,54766,54774,54780,54791,54802,54806,54810,54817,54829,54833,54837,54844,54856,54870,54883,54897,54901,54905,54912,54923,54934,54945,54957,54969,54981,54985,54989,54997,55007,55020,55032,55045,55049,55053,55060,55070,55082,55094,55105,55116,55126,55138,55150,55154,55158,55167,55179,55191,55219,55232,55236,55240,55247,55258,55262,55270,55278,55282,55290,55304,55319,55343,55351,55366,55379,55387,55408,55420,55432,55444,55456,55468,55480,55492,55501,55509,55517,55525,55537,55560,55579,55598,55617,55636,55655,55674,55694,55698,55718,55737,55757,55778,55789,55806,55816,55826,55836,55841,55846,55851,55856,55881,55894,55898,55921,55925,55933,55941,55949,55953],{"__ignoreMap":44},[49,54685,54686,54688,54690,54692],{"class":51,"line":52},[49,54687,51386],{"class":55},[49,54689,51390],{"class":51389},[49,54691,51393],{"class":2055},[49,54693,51396],{"class":55},[49,54695,54696,54698,54700,54702,54704,54706],{"class":51,"line":84},[49,54697,1129],{"class":55},[49,54699,50724],{"class":51389},[49,54701,51405],{"class":2055},[49,54703,60],{"class":55},[49,54705,51410],{"class":328},[49,54707,51396],{"class":55},[49,54709,54710],{"class":51,"line":109},[49,54711,2492],{"emptyLinePlaceholder":151},[49,54713,54714,54716,54718],{"class":51,"line":120},[49,54715,1129],{"class":55},[49,54717,51423],{"class":51389},[49,54719,51396],{"class":55},[49,54721,54722,54724,54726,54728,54730,54732],{"class":51,"line":135},[49,54723,52233],{"class":55},[49,54725,51433],{"class":51389},[49,54727,51436],{"class":2055},[49,54729,60],{"class":55},[49,54731,51441],{"class":328},[49,54733,51396],{"class":55},[49,54735,54736,54738,54740,54742,54744,54746,54748,54750,54752],{"class":51,"line":1306},[49,54737,52233],{"class":55},[49,54739,51433],{"class":51389},[49,54741,15010],{"class":2055},[49,54743,60],{"class":55},[49,54745,51480],{"class":328},[49,54747,51460],{"class":2055},[49,54749,60],{"class":55},[49,54751,51487],{"class":328},[49,54753,51396],{"class":55},[49,54755,54756,54758,54760,54762,54764],{"class":51,"line":1312},[49,54757,52233],{"class":55},[49,54759,51496],{"class":51389},[49,54761,51499],{"class":55},[49,54763,51496],{"class":51389},[49,54765,51396],{"class":55},[49,54767,54768,54770,54772],{"class":51,"line":1403},[49,54769,52233],{"class":55},[49,54771,143],{"class":51389},[49,54773,51396],{"class":55},[49,54775,54776,54778],{"class":51,"line":1409},[49,54777,6493],{"class":51389},[49,54779,15662],{"class":55},[49,54781,54782,54785,54787,54789],{"class":51,"line":1421},[49,54783,54784],{"class":66},"      padding",[49,54786,51526],{"class":55},[49,54788,415],{"class":66},[49,54790,1382],{"class":55},[49,54792,54793,54796,54798,54800],{"class":51,"line":1704},[49,54794,54795],{"class":66},"      margin",[49,54797,51526],{"class":55},[49,54799,415],{"class":66},[49,54801,1382],{"class":55},[49,54803,54804],{"class":51,"line":1709},[49,54805,2279],{"class":55},[49,54807,54808],{"class":51,"line":1715},[49,54809,2492],{"emptyLinePlaceholder":151},[49,54811,54812,54815],{"class":51,"line":1720},[49,54813,54814],{"class":51389},"    li",[49,54816,15662],{"class":55},[49,54818,54819,54822,54824,54827],{"class":51,"line":1734},[49,54820,54821],{"class":66},"      list-style",[49,54823,51526],{"class":55},[49,54825,54826],{"class":66},"none",[49,54828,1382],{"class":55},[49,54830,54831],{"class":51,"line":1739},[49,54832,2279],{"class":55},[49,54834,54835],{"class":51,"line":1745},[49,54836,2492],{"emptyLinePlaceholder":151},[49,54838,54839,54842],{"class":51,"line":1766},[49,54840,54841],{"class":2055},"    .box",[49,54843,15662],{"class":55},[49,54845,54846,54849,54851,54854],{"class":51,"line":1771},[49,54847,54848],{"class":66},"      position",[49,54850,51526],{"class":55},[49,54852,54853],{"class":66},"relative",[49,54855,1382],{"class":55},[49,54857,54858,54861,54863,54866,54868],{"class":51,"line":1785},[49,54859,54860],{"class":66},"      width",[49,54862,51526],{"class":55},[49,54864,54865],{"class":66},"976",[49,54867,51581],{"class":59},[49,54869,1382],{"class":55},[49,54871,54872,54875,54877,54879,54881],{"class":51,"line":1790},[49,54873,54874],{"class":66},"      height",[49,54876,51526],{"class":55},[49,54878,1631],{"class":66},[49,54880,51581],{"class":59},[49,54882,1382],{"class":55},[49,54884,54885,54887,54889,54891,54893,54895],{"class":51,"line":1819},[49,54886,54795],{"class":66},[49,54888,51526],{"class":55},[49,54890,533],{"class":66},[49,54892,51581],{"class":59},[49,54894,51645],{"class":66},[49,54896,1382],{"class":55},[49,54898,54899],{"class":51,"line":1824},[49,54900,2279],{"class":55},[49,54902,54903],{"class":51,"line":1841},[49,54904,2492],{"emptyLinePlaceholder":151},[49,54906,54907,54910],{"class":51,"line":1846},[49,54908,54909],{"class":2055},"    .slider-footer",[49,54911,15662],{"class":55},[49,54913,54914,54916,54918,54921],{"class":51,"line":1851},[49,54915,54848],{"class":66},[49,54917,51526],{"class":55},[49,54919,54920],{"class":66},"absolute",[49,54922,1382],{"class":55},[49,54924,54925,54928,54930,54932],{"class":51,"line":1856},[49,54926,54927],{"class":66},"      left",[49,54929,51526],{"class":55},[49,54931,415],{"class":66},[49,54933,1382],{"class":55},[49,54935,54936,54939,54941,54943],{"class":51,"line":1870},[49,54937,54938],{"class":66},"      bottom",[49,54940,51526],{"class":55},[49,54942,415],{"class":66},[49,54944,1382],{"class":55},[49,54946,54947,54949,54951,54953,54955],{"class":51,"line":1875},[49,54948,54860],{"class":66},[49,54950,51526],{"class":55},[49,54952,533],{"class":66},[49,54954,550],{"class":59},[49,54956,1382],{"class":55},[49,54958,54959,54961,54963,54965,54967],{"class":51,"line":2669},[49,54960,54874],{"class":66},[49,54962,51526],{"class":55},[49,54964,794],{"class":66},[49,54966,550],{"class":59},[49,54968,1382],{"class":55},[49,54970,54971,54974,54976,54979],{"class":51,"line":2683},[49,54972,54973],{"class":66},"      background-color",[49,54975,51526],{"class":55},[49,54977,54978],{"class":66},"skyblue",[49,54980,1382],{"class":55},[49,54982,54983],{"class":51,"line":2691},[49,54984,2279],{"class":55},[49,54986,54987],{"class":51,"line":2696},[49,54988,2492],{"emptyLinePlaceholder":151},[49,54990,54991,54993,54995],{"class":51,"line":2702},[49,54992,54909],{"class":2055},[49,54994,6915],{"class":51389},[49,54996,15662],{"class":55},[49,54998,54999,55001,55003,55005],{"class":51,"line":2708},[49,55000,54848],{"class":66},[49,55002,51526],{"class":55},[49,55004,54920],{"class":66},[49,55006,1382],{"class":55},[49,55008,55009,55012,55014,55016,55018],{"class":51,"line":2713},[49,55010,55011],{"class":66},"      font-size",[49,55013,51526],{"class":55},[49,55015,1120],{"class":66},[49,55017,51581],{"class":59},[49,55019,1382],{"class":55},[49,55021,55022,55024,55026,55028,55030],{"class":51,"line":8038},[49,55023,54927],{"class":66},[49,55025,51526],{"class":55},[49,55027,919],{"class":66},[49,55029,51581],{"class":59},[49,55031,1382],{"class":55},[49,55033,55034,55037,55039,55041,55043],{"class":51,"line":8062},[49,55035,55036],{"class":66},"      top",[49,55038,51526],{"class":55},[49,55040,541],{"class":66},[49,55042,51581],{"class":59},[49,55044,1382],{"class":55},[49,55046,55047],{"class":51,"line":8067},[49,55048,2279],{"class":55},[49,55050,55051],{"class":51,"line":8073},[49,55052,2492],{"emptyLinePlaceholder":151},[49,55054,55055,55058],{"class":51,"line":8100},[49,55056,55057],{"class":51389},"    ul",[49,55059,15662],{"class":55},[49,55061,55062,55064,55066,55068],{"class":51,"line":8105},[49,55063,54848],{"class":66},[49,55065,51526],{"class":55},[49,55067,54920],{"class":66},[49,55069,1382],{"class":55},[49,55071,55072,55074,55076,55078,55080],{"class":51,"line":8111},[49,55073,55036],{"class":66},[49,55075,51526],{"class":55},[49,55077,1000],{"class":66},[49,55079,51581],{"class":59},[49,55081,1382],{"class":55},[49,55083,55084,55086,55088,55090,55092],{"class":51,"line":8123},[49,55085,54927],{"class":66},[49,55087,51526],{"class":55},[49,55089,919],{"class":66},[49,55091,51581],{"class":59},[49,55093,1382],{"class":55},[49,55095,55096,55099,55101,55103],{"class":51,"line":8135},[49,55097,55098],{"class":66},"      display",[49,55100,51526],{"class":55},[49,55102,51566],{"class":66},[49,55104,1382],{"class":55},[49,55106,55107,55110,55112,55114],{"class":51,"line":8147},[49,55108,55109],{"class":66},"      justify-content",[49,55111,51526],{"class":55},[49,55113,51757],{"class":66},[49,55115,1382],{"class":55},[49,55117,55118,55120,55122,55124],{"class":51,"line":9806},[49,55119,54848],{"class":66},[49,55121,51526],{"class":55},[49,55123,54920],{"class":66},[49,55125,1382],{"class":55},[49,55127,55128,55130,55132,55134,55136],{"class":51,"line":9831},[49,55129,54860],{"class":66},[49,55131,51526],{"class":55},[49,55133,4084],{"class":66},[49,55135,51581],{"class":59},[49,55137,1382],{"class":55},[49,55139,55140,55142,55144,55146,55148],{"class":51,"line":9854},[49,55141,54874],{"class":66},[49,55143,51526],{"class":55},[49,55145,919],{"class":66},[49,55147,51581],{"class":59},[49,55149,1382],{"class":55},[49,55151,55152],{"class":51,"line":9878},[49,55153,2279],{"class":55},[49,55155,55156],{"class":51,"line":9883},[49,55157,2492],{"emptyLinePlaceholder":151},[49,55159,55160,55162,55165],{"class":51,"line":9888},[49,55161,55057],{"class":51389},[49,55163,55164],{"class":51389}," li",[49,55166,15662],{"class":55},[49,55168,55169,55171,55173,55175,55177],{"class":51,"line":9893},[49,55170,54860],{"class":66},[49,55172,51526],{"class":55},[49,55174,919],{"class":66},[49,55176,51581],{"class":59},[49,55178,1382],{"class":55},[49,55180,55181,55183,55185,55187,55189],{"class":51,"line":9902},[49,55182,54874],{"class":66},[49,55184,51526],{"class":55},[49,55186,919],{"class":66},[49,55188,51581],{"class":59},[49,55190,1382],{"class":55},[49,55192,55193,55195,55197,55200,55202,55204,55206,55208,55210,55212,55214,55217],{"class":51,"line":9907},[49,55194,54973],{"class":66},[49,55196,51526],{"class":55},[49,55198,55199],{"class":66},"rgba",[49,55201,228],{"class":55},[49,55203,415],{"class":66},[49,55205,12525],{"class":55},[49,55207,415],{"class":66},[49,55209,12525],{"class":55},[49,55211,415],{"class":66},[49,55213,12525],{"class":55},[49,55215,55216],{"class":66},".4",[49,55218,2811],{"class":55},[49,55220,55221,55224,55226,55228,55230],{"class":51,"line":9913},[49,55222,55223],{"class":66},"      border-radius",[49,55225,51526],{"class":55},[49,55227,95],{"class":66},[49,55229,51581],{"class":59},[49,55231,1382],{"class":55},[49,55233,55234],{"class":51,"line":9934},[49,55235,2279],{"class":55},[49,55237,55238],{"class":51,"line":9940},[49,55239,2492],{"emptyLinePlaceholder":151},[49,55241,55242,55245],{"class":51,"line":9954},[49,55243,55244],{"class":2055},"    .activate",[49,55246,15662],{"class":55},[49,55248,55249,55251,55253,55256],{"class":51,"line":9960},[49,55250,54973],{"class":66},[49,55252,51526],{"class":55},[49,55254,55255],{"class":66},"#f7f7f7",[49,55257,1382],{"class":55},[49,55259,55260],{"class":51,"line":9987},[49,55261,2279],{"class":55},[49,55263,55264,55266,55268],{"class":51,"line":9996},[49,55265,52506],{"class":55},[49,55267,143],{"class":51389},[49,55269,51396],{"class":55},[49,55271,55272,55274,55276],{"class":51,"line":10002},[49,55273,51874],{"class":55},[49,55275,51423],{"class":51389},[49,55277,51396],{"class":55},[49,55279,55280],{"class":51,"line":10010},[49,55281,2492],{"emptyLinePlaceholder":151},[49,55283,55284,55286,55288],{"class":51,"line":10015},[49,55285,1129],{"class":55},[49,55287,51889],{"class":51389},[49,55289,51396],{"class":55},[49,55291,55292,55294,55296,55298,55300,55302],{"class":51,"line":16694},[49,55293,52233],{"class":55},[49,55295,51700],{"class":51389},[49,55297,53575],{"class":2055},[49,55299,60],{"class":55},[49,55301,53580],{"class":328},[49,55303,51396],{"class":55},[49,55305,55306,55308,55310,55312,55314,55317],{"class":51,"line":16700},[49,55307,51430],{"class":55},[49,55309,51700],{"class":51389},[49,55311,53575],{"class":2055},[49,55313,60],{"class":55},[49,55315,55316],{"class":328},"\"slider-wrapper\"",[49,55318,51396],{"class":55},[49,55320,55321,55324,55326,55329,55331,55334,55337,55339,55341],{"class":51,"line":16723},[49,55322,55323],{"class":55},"      \u003C",[49,55325,1554],{"class":51389},[49,55327,55328],{"class":2055}," src",[49,55330,60],{"class":55},[49,55332,55333],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,55335,55336],{"class":2055}," alt",[49,55338,60],{"class":55},[49,55340,7742],{"class":328},[49,55342,51396],{"class":55},[49,55344,55345,55347,55349],{"class":51,"line":16729},[49,55346,51865],{"class":55},[49,55348,51700],{"class":51389},[49,55350,51396],{"class":55},[49,55352,55353,55355,55357,55359,55361,55364],{"class":51,"line":16752},[49,55354,51430],{"class":55},[49,55356,51700],{"class":51389},[49,55358,53575],{"class":2055},[49,55360,60],{"class":55},[49,55362,55363],{"class":328},"\"slider-footer\"",[49,55365,51396],{"class":55},[49,55367,55368,55370,55372,55375,55377],{"class":51,"line":16766},[49,55369,55323],{"class":55},[49,55371,14],{"class":51389},[49,55373,55374],{"class":55},">对人类来说会不会太超前了?\u003C\u002F",[49,55376,14],{"class":51389},[49,55378,51396],{"class":55},[49,55380,55381,55383,55385],{"class":51,"line":16786},[49,55382,55323],{"class":55},[49,55384,1226],{"class":51389},[49,55386,51396],{"class":55},[49,55388,55389,55392,55394,55396,55398,55401,55404,55406],{"class":51,"line":16792},[49,55390,55391],{"class":55},"        \u003C",[49,55393,181],{"class":51389},[49,55395,53575],{"class":2055},[49,55397,60],{"class":55},[49,55399,55400],{"class":328},"\"activate\"",[49,55402,55403],{"class":55},">\u003C\u002F",[49,55405,181],{"class":51389},[49,55407,51396],{"class":55},[49,55409,55410,55412,55414,55416,55418],{"class":51,"line":16803},[49,55411,55391],{"class":55},[49,55413,181],{"class":51389},[49,55415,55403],{"class":55},[49,55417,181],{"class":51389},[49,55419,51396],{"class":55},[49,55421,55422,55424,55426,55428,55430],{"class":51,"line":16826},[49,55423,55391],{"class":55},[49,55425,181],{"class":51389},[49,55427,55403],{"class":55},[49,55429,181],{"class":51389},[49,55431,51396],{"class":55},[49,55433,55434,55436,55438,55440,55442],{"class":51,"line":16848},[49,55435,55391],{"class":55},[49,55437,181],{"class":51389},[49,55439,55403],{"class":55},[49,55441,181],{"class":51389},[49,55443,51396],{"class":55},[49,55445,55446,55448,55450,55452,55454],{"class":51,"line":16853},[49,55447,55391],{"class":55},[49,55449,181],{"class":51389},[49,55451,55403],{"class":55},[49,55453,181],{"class":51389},[49,55455,51396],{"class":55},[49,55457,55458,55460,55462,55464,55466],{"class":51,"line":16859},[49,55459,55391],{"class":55},[49,55461,181],{"class":51389},[49,55463,55403],{"class":55},[49,55465,181],{"class":51389},[49,55467,51396],{"class":55},[49,55469,55470,55472,55474,55476,55478],{"class":51,"line":16873},[49,55471,55391],{"class":55},[49,55473,181],{"class":51389},[49,55475,55403],{"class":55},[49,55477,181],{"class":51389},[49,55479,51396],{"class":55},[49,55481,55482,55484,55486,55488,55490],{"class":51,"line":16886},[49,55483,55391],{"class":55},[49,55485,181],{"class":51389},[49,55487,55403],{"class":55},[49,55489,181],{"class":51389},[49,55491,51396],{"class":55},[49,55493,55494,55497,55499],{"class":51,"line":16891},[49,55495,55496],{"class":55},"      \u003C\u002F",[49,55498,1226],{"class":51389},[49,55500,51396],{"class":55},[49,55502,55503,55505,55507],{"class":51,"line":16905},[49,55504,51865],{"class":55},[49,55506,51700],{"class":51389},[49,55508,51396],{"class":55},[49,55510,55511,55513,55515],{"class":51,"line":16910},[49,55512,52506],{"class":55},[49,55514,51700],{"class":51389},[49,55516,51396],{"class":55},[49,55518,55519,55521,55523],{"class":51,"line":16916},[49,55520,52233],{"class":55},[49,55522,51902],{"class":51389},[49,55524,51396],{"class":55},[49,55526,55527,55529,55532,55534],{"class":51,"line":16921},[49,55528,11311],{"class":59},[49,55530,55531],{"class":66}," arrImage",[49,55533,13654],{"class":59},[49,55535,55536],{"class":55}," [\n",[49,55538,55539,55542,55545,55548,55551,55554,55557],{"class":51,"line":16935},[49,55540,55541],{"class":55},"      { url: ",[49,55543,55544],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[49,55546,55547],{"class":55},", title: ",[49,55549,55550],{"class":328},"'对人类来说会不会太超前了?'",[49,55552,55553],{"class":55},", color: ",[49,55555,55556],{"class":328},"'rgba(100,67,68)'",[49,55558,55559],{"class":55}," },\n",[49,55561,55562,55564,55567,55569,55572,55574,55577],{"class":51,"line":16940},[49,55563,55541],{"class":55},[49,55565,55566],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[49,55568,55547],{"class":55},[49,55570,55571],{"class":328},"'开启剑与雪的黑暗传说!'",[49,55573,55553],{"class":55},[49,55575,55576],{"class":328},"'rgba(43,35,26)'",[49,55578,55559],{"class":55},[49,55580,55581,55583,55586,55588,55591,55593,55596],{"class":51,"line":16945},[49,55582,55541],{"class":55},[49,55584,55585],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[49,55587,55547],{"class":55},[49,55589,55590],{"class":328},"'真正的jo厨出现了!'",[49,55592,55553],{"class":55},[49,55594,55595],{"class":328},"'rgba(36,31,33)'",[49,55597,55559],{"class":55},[49,55599,55600,55602,55605,55607,55610,55612,55615],{"class":51,"line":16959},[49,55601,55541],{"class":55},[49,55603,55604],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[49,55606,55547],{"class":55},[49,55608,55609],{"class":328},"'李玉刚:让世界通过b站看到东方大国文化'",[49,55611,55553],{"class":55},[49,55613,55614],{"class":328},"'rgba(139,98,66)'",[49,55616,55559],{"class":55},[49,55618,55619,55621,55624,55626,55629,55631,55634],{"class":51,"line":16971},[49,55620,55541],{"class":55},[49,55622,55623],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[49,55625,55547],{"class":55},[49,55627,55628],{"class":328},"'快来分享你的寒假日常吧'",[49,55630,55553],{"class":55},[49,55632,55633],{"class":328},"'rgba(67,90,92)'",[49,55635,55559],{"class":55},[49,55637,55638,55640,55643,55645,55648,55650,55653],{"class":51,"line":16976},[49,55639,55541],{"class":55},[49,55641,55642],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[49,55644,55547],{"class":55},[49,55646,55647],{"class":328},"'哔哩哔哩小年YEAR'",[49,55649,55553],{"class":55},[49,55651,55652],{"class":328},"'rgba(166,131,143)'",[49,55654,55559],{"class":55},[49,55656,55657,55659,55662,55664,55667,55669,55672],{"class":51,"line":16989},[49,55658,55541],{"class":55},[49,55660,55661],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[49,55663,55547],{"class":55},[49,55665,55666],{"class":328},"'一站式解决你的电脑配置问题'",[49,55668,55553],{"class":55},[49,55670,55671],{"class":328},"'rgba(53,29,25)'",[49,55673,55559],{"class":55},[49,55675,55676,55678,55681,55683,55686,55688,55691],{"class":51,"line":16994},[49,55677,55541],{"class":55},[49,55679,55680],{"class":328},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[49,55682,55547],{"class":55},[49,55684,55685],{"class":328},"'谁不想和小猫咪贴贴呢?'",[49,55687,55553],{"class":55},[49,55689,55690],{"class":328},"'rgba(99,72,114)'",[49,55692,55693],{"class":55}," }\n",[49,55695,55696],{"class":51,"line":16999},[49,55697,53198],{"class":55},[49,55699,55700,55702,55705,55707,55709,55711,55713,55716],{"class":51,"line":17004},[49,55701,11311],{"class":59},[49,55703,55704],{"class":66}," img",[49,55706,13654],{"class":59},[49,55708,54485],{"class":55},[49,55710,54488],{"class":2055},[49,55712,228],{"class":55},[49,55714,55715],{"class":328},"'.slider-wrapper img'",[49,55717,81],{"class":55},[49,55719,55720,55722,55724,55726,55728,55730,55732,55735],{"class":51,"line":17017},[49,55721,11311],{"class":59},[49,55723,6915],{"class":66},[49,55725,13654],{"class":59},[49,55727,54485],{"class":55},[49,55729,54488],{"class":2055},[49,55731,228],{"class":55},[49,55733,55734],{"class":328},"'.slider-footer p'",[49,55736,81],{"class":55},[49,55738,55739,55741,55744,55746,55748,55750,55752,55755],{"class":51,"line":17022},[49,55740,11311],{"class":59},[49,55742,55743],{"class":66}," color",[49,55745,13654],{"class":59},[49,55747,54485],{"class":55},[49,55749,54488],{"class":2055},[49,55751,228],{"class":55},[49,55753,55754],{"class":328},"'.slider-footer'",[49,55756,81],{"class":55},[49,55758,55759,55761,55764,55766,55768,55771,55773,55776],{"class":51,"line":32722},[49,55760,11311],{"class":59},[49,55762,55763],{"class":66}," lis",[49,55765,13654],{"class":59},[49,55767,54485],{"class":55},[49,55769,55770],{"class":2055},"querySelectorAll",[49,55772,228],{"class":55},[49,55774,55775],{"class":328},"'.slider-footer ul li'",[49,55777,81],{"class":55},[49,55779,55780,55782,55784,55786],{"class":51,"line":32728},[49,55781,52308],{"class":59},[49,55783,9528],{"class":55},[49,55785,60],{"class":59},[49,55787,55788],{"class":66}," 1\n",[49,55790,55791,55793,55796,55798,55800,55802,55804],{"class":51,"line":32734},[49,55792,52308],{"class":59},[49,55794,55795],{"class":55}," timer ",[49,55797,60],{"class":59},[49,55799,54533],{"class":2055},[49,55801,228],{"class":55},[49,55803,54538],{"class":59},[49,55805,54541],{"class":55},[49,55807,55808,55811,55813],{"class":51,"line":32740},[49,55809,55810],{"class":55},"      img.src ",[49,55812,60],{"class":59},[49,55814,55815],{"class":55}," arrImage[i].url\n",[49,55817,55818,55821,55823],{"class":51,"line":32746},[49,55819,55820],{"class":55},"      p.innerHTML ",[49,55822,60],{"class":59},[49,55824,55825],{"class":55}," arrImage[i].title\n",[49,55827,55828,55831,55833],{"class":51,"line":32757},[49,55829,55830],{"class":55},"      color.style.backgroundColor ",[49,55832,60],{"class":59},[49,55834,55835],{"class":55}," arrImage[i].color\n",[49,55837,55838],{"class":51,"line":32763},[49,55839,55840],{"class":283},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[49,55842,55843],{"class":51,"line":32783},[49,55844,55845],{"class":283},"      \u002F\u002F li.classList.add('activate')\n",[49,55847,55848],{"class":51,"line":32789},[49,55849,55850],{"class":283},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[49,55852,55853],{"class":51,"line":32800},[49,55854,55855],{"class":283},"      \u002F\u002F lis[i].classList.remove('activate')\n",[49,55857,55858,55861,55863,55865,55868,55871,55874,55876,55879],{"class":51,"line":32806},[49,55859,55860],{"class":55},"      document.",[49,55862,54488],{"class":2055},[49,55864,228],{"class":55},[49,55866,55867],{"class":328},"'.activate'",[49,55869,55870],{"class":55},")?.classList.",[49,55872,55873],{"class":2055},"toggle",[49,55875,228],{"class":55},[49,55877,55878],{"class":328},"'activate'",[49,55880,81],{"class":55},[49,55882,55883,55886,55888,55890,55892],{"class":51,"line":32812},[49,55884,55885],{"class":55},"      lis[i].classList.",[49,55887,5424],{"class":2055},[49,55889,228],{"class":55},[49,55891,55878],{"class":328},[49,55893,81],{"class":55},[49,55895,55896],{"class":51,"line":32818},[49,55897,2492],{"emptyLinePlaceholder":151},[49,55899,55900,55903,55905,55907,55909,55911,55913,55915,55918],{"class":51,"line":32824},[49,55901,55902],{"class":55},"      i ",[49,55904,60],{"class":59},[49,55906,54572],{"class":55},[49,55908,700],{"class":59},[49,55910,25209],{"class":66},[49,55912,13804],{"class":55},[49,55914,550],{"class":59},[49,55916,55917],{"class":55}," arrImage.",[49,55919,55920],{"class":66},"length\n",[49,55922,55923],{"class":51,"line":32830},[49,55924,2492],{"emptyLinePlaceholder":151},[49,55926,55927,55929,55931],{"class":51,"line":32836},[49,55928,54624],{"class":55},[49,55930,6500],{"class":66},[49,55932,81],{"class":55},[49,55934,55935,55937,55939],{"class":51,"line":32842},[49,55936,52506],{"class":55},[49,55938,51902],{"class":51389},[49,55940,51396],{"class":55},[49,55942,55943,55945,55947],{"class":51,"line":32862},[49,55944,51874],{"class":55},[49,55946,51889],{"class":51389},[49,55948,51396],{"class":55},[49,55950,55951],{"class":51,"line":32868},[49,55952,2492],{"emptyLinePlaceholder":151},[49,55954,55955,55957,55959],{"class":51,"line":32884},[49,55956,51874],{"class":55},[49,55958,50724],{"class":51389},[49,55960,51396],{"class":55},[14,55962,55963],{},[1554,55964],{"alt":44,"src":55965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55967,55968],{},"?.就是短路保护,确保输出正常进行",[14,55970,55971],{},"不要忘记取余%,有时候可以用",[14,55973,55974],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[178,55976,55977],{"start":84},[181,55978,55979],{},"法2",[39,55981,55983],{"className":50722,"code":55982,"language":50724,"meta":44,"style":44},"\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",[46,55984,55985,55995,56009,56013,56021,56035,56055,56067,56075,56081,56091,56101,56105,56109,56115,56125,56129,56133,56139,56149,56161,56173,56187,56191,56195,56201,56211,56221,56231,56243,56255,56265,56269,56273,56281,56291,56303,56315,56327,56331,56335,56341,56351,56363,56375,56385,56395,56405,56417,56429,56433,56437,56445,56457,56469,56495,56507,56511,56515,56521,56531,56535,56543,56551,56555,56563,56577,56591,56611,56619,56633,56645,56653,56671,56683,56695,56707,56719,56731,56743,56755,56763,56771,56779,56787,56798,56814,56830,56846,56862,56878,56894,56910,56926,56930,56935,56953,56971,56981,56986,56991,57002,57008,57023,57032,57036,57041,57050,57055,57064,57069,57074,57079,57102,57132,57136,57144,57148,57156,57164,57168],{"__ignoreMap":44},[49,55986,55987,55989,55991,55993],{"class":51,"line":52},[49,55988,51386],{"class":55},[49,55990,51390],{"class":51389},[49,55992,51393],{"class":2055},[49,55994,51396],{"class":55},[49,55996,55997,55999,56001,56003,56005,56007],{"class":51,"line":84},[49,55998,1129],{"class":55},[49,56000,50724],{"class":51389},[49,56002,51405],{"class":2055},[49,56004,60],{"class":55},[49,56006,51410],{"class":328},[49,56008,51396],{"class":55},[49,56010,56011],{"class":51,"line":109},[49,56012,2492],{"emptyLinePlaceholder":151},[49,56014,56015,56017,56019],{"class":51,"line":120},[49,56016,1129],{"class":55},[49,56018,51423],{"class":51389},[49,56020,51396],{"class":55},[49,56022,56023,56025,56027,56029,56031,56033],{"class":51,"line":135},[49,56024,52233],{"class":55},[49,56026,51433],{"class":51389},[49,56028,51436],{"class":2055},[49,56030,60],{"class":55},[49,56032,51441],{"class":328},[49,56034,51396],{"class":55},[49,56036,56037,56039,56041,56043,56045,56047,56049,56051,56053],{"class":51,"line":1306},[49,56038,52233],{"class":55},[49,56040,51433],{"class":51389},[49,56042,15010],{"class":2055},[49,56044,60],{"class":55},[49,56046,51480],{"class":328},[49,56048,51460],{"class":2055},[49,56050,60],{"class":55},[49,56052,51487],{"class":328},[49,56054,51396],{"class":55},[49,56056,56057,56059,56061,56063,56065],{"class":51,"line":1312},[49,56058,52233],{"class":55},[49,56060,51496],{"class":51389},[49,56062,51499],{"class":55},[49,56064,51496],{"class":51389},[49,56066,51396],{"class":55},[49,56068,56069,56071,56073],{"class":51,"line":1403},[49,56070,52233],{"class":55},[49,56072,143],{"class":51389},[49,56074,51396],{"class":55},[49,56076,56077,56079],{"class":51,"line":1409},[49,56078,6493],{"class":51389},[49,56080,15662],{"class":55},[49,56082,56083,56085,56087,56089],{"class":51,"line":1421},[49,56084,54784],{"class":66},[49,56086,51526],{"class":55},[49,56088,415],{"class":66},[49,56090,1382],{"class":55},[49,56092,56093,56095,56097,56099],{"class":51,"line":1704},[49,56094,54795],{"class":66},[49,56096,51526],{"class":55},[49,56098,415],{"class":66},[49,56100,1382],{"class":55},[49,56102,56103],{"class":51,"line":1709},[49,56104,2279],{"class":55},[49,56106,56107],{"class":51,"line":1715},[49,56108,2492],{"emptyLinePlaceholder":151},[49,56110,56111,56113],{"class":51,"line":1720},[49,56112,54814],{"class":51389},[49,56114,15662],{"class":55},[49,56116,56117,56119,56121,56123],{"class":51,"line":1734},[49,56118,54821],{"class":66},[49,56120,51526],{"class":55},[49,56122,54826],{"class":66},[49,56124,1382],{"class":55},[49,56126,56127],{"class":51,"line":1739},[49,56128,2279],{"class":55},[49,56130,56131],{"class":51,"line":1745},[49,56132,2492],{"emptyLinePlaceholder":151},[49,56134,56135,56137],{"class":51,"line":1766},[49,56136,54841],{"class":2055},[49,56138,15662],{"class":55},[49,56140,56141,56143,56145,56147],{"class":51,"line":1771},[49,56142,54848],{"class":66},[49,56144,51526],{"class":55},[49,56146,54853],{"class":66},[49,56148,1382],{"class":55},[49,56150,56151,56153,56155,56157,56159],{"class":51,"line":1785},[49,56152,54860],{"class":66},[49,56154,51526],{"class":55},[49,56156,54865],{"class":66},[49,56158,51581],{"class":59},[49,56160,1382],{"class":55},[49,56162,56163,56165,56167,56169,56171],{"class":51,"line":1790},[49,56164,54874],{"class":66},[49,56166,51526],{"class":55},[49,56168,1631],{"class":66},[49,56170,51581],{"class":59},[49,56172,1382],{"class":55},[49,56174,56175,56177,56179,56181,56183,56185],{"class":51,"line":1819},[49,56176,54795],{"class":66},[49,56178,51526],{"class":55},[49,56180,533],{"class":66},[49,56182,51581],{"class":59},[49,56184,51645],{"class":66},[49,56186,1382],{"class":55},[49,56188,56189],{"class":51,"line":1824},[49,56190,2279],{"class":55},[49,56192,56193],{"class":51,"line":1841},[49,56194,2492],{"emptyLinePlaceholder":151},[49,56196,56197,56199],{"class":51,"line":1846},[49,56198,54909],{"class":2055},[49,56200,15662],{"class":55},[49,56202,56203,56205,56207,56209],{"class":51,"line":1851},[49,56204,54848],{"class":66},[49,56206,51526],{"class":55},[49,56208,54920],{"class":66},[49,56210,1382],{"class":55},[49,56212,56213,56215,56217,56219],{"class":51,"line":1856},[49,56214,54927],{"class":66},[49,56216,51526],{"class":55},[49,56218,415],{"class":66},[49,56220,1382],{"class":55},[49,56222,56223,56225,56227,56229],{"class":51,"line":1870},[49,56224,54938],{"class":66},[49,56226,51526],{"class":55},[49,56228,415],{"class":66},[49,56230,1382],{"class":55},[49,56232,56233,56235,56237,56239,56241],{"class":51,"line":1875},[49,56234,54860],{"class":66},[49,56236,51526],{"class":55},[49,56238,533],{"class":66},[49,56240,550],{"class":59},[49,56242,1382],{"class":55},[49,56244,56245,56247,56249,56251,56253],{"class":51,"line":2669},[49,56246,54874],{"class":66},[49,56248,51526],{"class":55},[49,56250,794],{"class":66},[49,56252,550],{"class":59},[49,56254,1382],{"class":55},[49,56256,56257,56259,56261,56263],{"class":51,"line":2683},[49,56258,54973],{"class":66},[49,56260,51526],{"class":55},[49,56262,54978],{"class":66},[49,56264,1382],{"class":55},[49,56266,56267],{"class":51,"line":2691},[49,56268,2279],{"class":55},[49,56270,56271],{"class":51,"line":2696},[49,56272,2492],{"emptyLinePlaceholder":151},[49,56274,56275,56277,56279],{"class":51,"line":2702},[49,56276,54909],{"class":2055},[49,56278,6915],{"class":51389},[49,56280,15662],{"class":55},[49,56282,56283,56285,56287,56289],{"class":51,"line":2708},[49,56284,54848],{"class":66},[49,56286,51526],{"class":55},[49,56288,54920],{"class":66},[49,56290,1382],{"class":55},[49,56292,56293,56295,56297,56299,56301],{"class":51,"line":2713},[49,56294,55011],{"class":66},[49,56296,51526],{"class":55},[49,56298,1120],{"class":66},[49,56300,51581],{"class":59},[49,56302,1382],{"class":55},[49,56304,56305,56307,56309,56311,56313],{"class":51,"line":8038},[49,56306,54927],{"class":66},[49,56308,51526],{"class":55},[49,56310,919],{"class":66},[49,56312,51581],{"class":59},[49,56314,1382],{"class":55},[49,56316,56317,56319,56321,56323,56325],{"class":51,"line":8062},[49,56318,55036],{"class":66},[49,56320,51526],{"class":55},[49,56322,541],{"class":66},[49,56324,51581],{"class":59},[49,56326,1382],{"class":55},[49,56328,56329],{"class":51,"line":8067},[49,56330,2279],{"class":55},[49,56332,56333],{"class":51,"line":8073},[49,56334,2492],{"emptyLinePlaceholder":151},[49,56336,56337,56339],{"class":51,"line":8100},[49,56338,55057],{"class":51389},[49,56340,15662],{"class":55},[49,56342,56343,56345,56347,56349],{"class":51,"line":8105},[49,56344,54848],{"class":66},[49,56346,51526],{"class":55},[49,56348,54920],{"class":66},[49,56350,1382],{"class":55},[49,56352,56353,56355,56357,56359,56361],{"class":51,"line":8111},[49,56354,55036],{"class":66},[49,56356,51526],{"class":55},[49,56358,1000],{"class":66},[49,56360,51581],{"class":59},[49,56362,1382],{"class":55},[49,56364,56365,56367,56369,56371,56373],{"class":51,"line":8123},[49,56366,54927],{"class":66},[49,56368,51526],{"class":55},[49,56370,919],{"class":66},[49,56372,51581],{"class":59},[49,56374,1382],{"class":55},[49,56376,56377,56379,56381,56383],{"class":51,"line":8135},[49,56378,55098],{"class":66},[49,56380,51526],{"class":55},[49,56382,51566],{"class":66},[49,56384,1382],{"class":55},[49,56386,56387,56389,56391,56393],{"class":51,"line":8147},[49,56388,55109],{"class":66},[49,56390,51526],{"class":55},[49,56392,51757],{"class":66},[49,56394,1382],{"class":55},[49,56396,56397,56399,56401,56403],{"class":51,"line":9806},[49,56398,54848],{"class":66},[49,56400,51526],{"class":55},[49,56402,54920],{"class":66},[49,56404,1382],{"class":55},[49,56406,56407,56409,56411,56413,56415],{"class":51,"line":9831},[49,56408,54860],{"class":66},[49,56410,51526],{"class":55},[49,56412,4084],{"class":66},[49,56414,51581],{"class":59},[49,56416,1382],{"class":55},[49,56418,56419,56421,56423,56425,56427],{"class":51,"line":9854},[49,56420,54874],{"class":66},[49,56422,51526],{"class":55},[49,56424,919],{"class":66},[49,56426,51581],{"class":59},[49,56428,1382],{"class":55},[49,56430,56431],{"class":51,"line":9878},[49,56432,2279],{"class":55},[49,56434,56435],{"class":51,"line":9883},[49,56436,2492],{"emptyLinePlaceholder":151},[49,56438,56439,56441,56443],{"class":51,"line":9888},[49,56440,55057],{"class":51389},[49,56442,55164],{"class":51389},[49,56444,15662],{"class":55},[49,56446,56447,56449,56451,56453,56455],{"class":51,"line":9893},[49,56448,54860],{"class":66},[49,56450,51526],{"class":55},[49,56452,919],{"class":66},[49,56454,51581],{"class":59},[49,56456,1382],{"class":55},[49,56458,56459,56461,56463,56465,56467],{"class":51,"line":9902},[49,56460,54874],{"class":66},[49,56462,51526],{"class":55},[49,56464,919],{"class":66},[49,56466,51581],{"class":59},[49,56468,1382],{"class":55},[49,56470,56471,56473,56475,56477,56479,56481,56483,56485,56487,56489,56491,56493],{"class":51,"line":9907},[49,56472,54973],{"class":66},[49,56474,51526],{"class":55},[49,56476,55199],{"class":66},[49,56478,228],{"class":55},[49,56480,415],{"class":66},[49,56482,12525],{"class":55},[49,56484,415],{"class":66},[49,56486,12525],{"class":55},[49,56488,415],{"class":66},[49,56490,12525],{"class":55},[49,56492,55216],{"class":66},[49,56494,2811],{"class":55},[49,56496,56497,56499,56501,56503,56505],{"class":51,"line":9913},[49,56498,55223],{"class":66},[49,56500,51526],{"class":55},[49,56502,95],{"class":66},[49,56504,51581],{"class":59},[49,56506,1382],{"class":55},[49,56508,56509],{"class":51,"line":9934},[49,56510,2279],{"class":55},[49,56512,56513],{"class":51,"line":9940},[49,56514,2492],{"emptyLinePlaceholder":151},[49,56516,56517,56519],{"class":51,"line":9954},[49,56518,55244],{"class":2055},[49,56520,15662],{"class":55},[49,56522,56523,56525,56527,56529],{"class":51,"line":9960},[49,56524,54973],{"class":66},[49,56526,51526],{"class":55},[49,56528,55255],{"class":66},[49,56530,1382],{"class":55},[49,56532,56533],{"class":51,"line":9987},[49,56534,2279],{"class":55},[49,56536,56537,56539,56541],{"class":51,"line":9996},[49,56538,52506],{"class":55},[49,56540,143],{"class":51389},[49,56542,51396],{"class":55},[49,56544,56545,56547,56549],{"class":51,"line":10002},[49,56546,51874],{"class":55},[49,56548,51423],{"class":51389},[49,56550,51396],{"class":55},[49,56552,56553],{"class":51,"line":10010},[49,56554,2492],{"emptyLinePlaceholder":151},[49,56556,56557,56559,56561],{"class":51,"line":10015},[49,56558,1129],{"class":55},[49,56560,51889],{"class":51389},[49,56562,51396],{"class":55},[49,56564,56565,56567,56569,56571,56573,56575],{"class":51,"line":16694},[49,56566,52233],{"class":55},[49,56568,51700],{"class":51389},[49,56570,53575],{"class":2055},[49,56572,60],{"class":55},[49,56574,53580],{"class":328},[49,56576,51396],{"class":55},[49,56578,56579,56581,56583,56585,56587,56589],{"class":51,"line":16700},[49,56580,51430],{"class":55},[49,56582,51700],{"class":51389},[49,56584,53575],{"class":2055},[49,56586,60],{"class":55},[49,56588,55316],{"class":328},[49,56590,51396],{"class":55},[49,56592,56593,56595,56597,56599,56601,56603,56605,56607,56609],{"class":51,"line":16723},[49,56594,55323],{"class":55},[49,56596,1554],{"class":51389},[49,56598,55328],{"class":2055},[49,56600,60],{"class":55},[49,56602,55333],{"class":328},[49,56604,55336],{"class":2055},[49,56606,60],{"class":55},[49,56608,7742],{"class":328},[49,56610,51396],{"class":55},[49,56612,56613,56615,56617],{"class":51,"line":16729},[49,56614,51865],{"class":55},[49,56616,51700],{"class":51389},[49,56618,51396],{"class":55},[49,56620,56621,56623,56625,56627,56629,56631],{"class":51,"line":16752},[49,56622,51430],{"class":55},[49,56624,51700],{"class":51389},[49,56626,53575],{"class":2055},[49,56628,60],{"class":55},[49,56630,55363],{"class":328},[49,56632,51396],{"class":55},[49,56634,56635,56637,56639,56641,56643],{"class":51,"line":16766},[49,56636,55323],{"class":55},[49,56638,14],{"class":51389},[49,56640,55374],{"class":55},[49,56642,14],{"class":51389},[49,56644,51396],{"class":55},[49,56646,56647,56649,56651],{"class":51,"line":16786},[49,56648,55323],{"class":55},[49,56650,1226],{"class":51389},[49,56652,51396],{"class":55},[49,56654,56655,56657,56659,56661,56663,56665,56667,56669],{"class":51,"line":16792},[49,56656,55391],{"class":55},[49,56658,181],{"class":51389},[49,56660,53575],{"class":2055},[49,56662,60],{"class":55},[49,56664,55400],{"class":328},[49,56666,55403],{"class":55},[49,56668,181],{"class":51389},[49,56670,51396],{"class":55},[49,56672,56673,56675,56677,56679,56681],{"class":51,"line":16803},[49,56674,55391],{"class":55},[49,56676,181],{"class":51389},[49,56678,55403],{"class":55},[49,56680,181],{"class":51389},[49,56682,51396],{"class":55},[49,56684,56685,56687,56689,56691,56693],{"class":51,"line":16826},[49,56686,55391],{"class":55},[49,56688,181],{"class":51389},[49,56690,55403],{"class":55},[49,56692,181],{"class":51389},[49,56694,51396],{"class":55},[49,56696,56697,56699,56701,56703,56705],{"class":51,"line":16848},[49,56698,55391],{"class":55},[49,56700,181],{"class":51389},[49,56702,55403],{"class":55},[49,56704,181],{"class":51389},[49,56706,51396],{"class":55},[49,56708,56709,56711,56713,56715,56717],{"class":51,"line":16853},[49,56710,55391],{"class":55},[49,56712,181],{"class":51389},[49,56714,55403],{"class":55},[49,56716,181],{"class":51389},[49,56718,51396],{"class":55},[49,56720,56721,56723,56725,56727,56729],{"class":51,"line":16859},[49,56722,55391],{"class":55},[49,56724,181],{"class":51389},[49,56726,55403],{"class":55},[49,56728,181],{"class":51389},[49,56730,51396],{"class":55},[49,56732,56733,56735,56737,56739,56741],{"class":51,"line":16873},[49,56734,55391],{"class":55},[49,56736,181],{"class":51389},[49,56738,55403],{"class":55},[49,56740,181],{"class":51389},[49,56742,51396],{"class":55},[49,56744,56745,56747,56749,56751,56753],{"class":51,"line":16886},[49,56746,55391],{"class":55},[49,56748,181],{"class":51389},[49,56750,55403],{"class":55},[49,56752,181],{"class":51389},[49,56754,51396],{"class":55},[49,56756,56757,56759,56761],{"class":51,"line":16891},[49,56758,55496],{"class":55},[49,56760,1226],{"class":51389},[49,56762,51396],{"class":55},[49,56764,56765,56767,56769],{"class":51,"line":16905},[49,56766,51865],{"class":55},[49,56768,51700],{"class":51389},[49,56770,51396],{"class":55},[49,56772,56773,56775,56777],{"class":51,"line":16910},[49,56774,52506],{"class":55},[49,56776,51700],{"class":51389},[49,56778,51396],{"class":55},[49,56780,56781,56783,56785],{"class":51,"line":16916},[49,56782,52233],{"class":55},[49,56784,51902],{"class":51389},[49,56786,51396],{"class":55},[49,56788,56789,56791,56794,56796],{"class":51,"line":16921},[49,56790,11311],{"class":59},[49,56792,56793],{"class":66}," sliderData",[49,56795,13654],{"class":59},[49,56797,55536],{"class":55},[49,56799,56800,56802,56804,56806,56808,56810,56812],{"class":51,"line":16935},[49,56801,55541],{"class":55},[49,56803,55544],{"class":328},[49,56805,55547],{"class":55},[49,56807,55550],{"class":328},[49,56809,55553],{"class":55},[49,56811,55556],{"class":328},[49,56813,55559],{"class":55},[49,56815,56816,56818,56820,56822,56824,56826,56828],{"class":51,"line":16940},[49,56817,55541],{"class":55},[49,56819,55566],{"class":328},[49,56821,55547],{"class":55},[49,56823,55571],{"class":328},[49,56825,55553],{"class":55},[49,56827,55576],{"class":328},[49,56829,55559],{"class":55},[49,56831,56832,56834,56836,56838,56840,56842,56844],{"class":51,"line":16945},[49,56833,55541],{"class":55},[49,56835,55585],{"class":328},[49,56837,55547],{"class":55},[49,56839,55590],{"class":328},[49,56841,55553],{"class":55},[49,56843,55595],{"class":328},[49,56845,55559],{"class":55},[49,56847,56848,56850,56852,56854,56856,56858,56860],{"class":51,"line":16959},[49,56849,55541],{"class":55},[49,56851,55604],{"class":328},[49,56853,55547],{"class":55},[49,56855,55609],{"class":328},[49,56857,55553],{"class":55},[49,56859,55614],{"class":328},[49,56861,55559],{"class":55},[49,56863,56864,56866,56868,56870,56872,56874,56876],{"class":51,"line":16971},[49,56865,55541],{"class":55},[49,56867,55623],{"class":328},[49,56869,55547],{"class":55},[49,56871,55628],{"class":328},[49,56873,55553],{"class":55},[49,56875,55633],{"class":328},[49,56877,55559],{"class":55},[49,56879,56880,56882,56884,56886,56888,56890,56892],{"class":51,"line":16976},[49,56881,55541],{"class":55},[49,56883,55642],{"class":328},[49,56885,55547],{"class":55},[49,56887,55647],{"class":328},[49,56889,55553],{"class":55},[49,56891,55652],{"class":328},[49,56893,55559],{"class":55},[49,56895,56896,56898,56900,56902,56904,56906,56908],{"class":51,"line":16989},[49,56897,55541],{"class":55},[49,56899,55661],{"class":328},[49,56901,55547],{"class":55},[49,56903,55666],{"class":328},[49,56905,55553],{"class":55},[49,56907,55671],{"class":328},[49,56909,55559],{"class":55},[49,56911,56912,56914,56916,56918,56920,56922,56924],{"class":51,"line":16994},[49,56913,55541],{"class":55},[49,56915,55680],{"class":328},[49,56917,55547],{"class":55},[49,56919,55685],{"class":328},[49,56921,55553],{"class":55},[49,56923,55690],{"class":328},[49,56925,55693],{"class":55},[49,56927,56928],{"class":51,"line":16999},[49,56929,53198],{"class":55},[49,56931,56932],{"class":51,"line":17004},[49,56933,56934],{"class":283},"    \u002F\u002F 1.获取元素\n",[49,56936,56937,56939,56941,56943,56945,56947,56949,56951],{"class":51,"line":17017},[49,56938,11311],{"class":59},[49,56940,55704],{"class":66},[49,56942,13654],{"class":59},[49,56944,54485],{"class":55},[49,56946,54488],{"class":2055},[49,56948,228],{"class":55},[49,56950,55715],{"class":328},[49,56952,81],{"class":55},[49,56954,56955,56957,56959,56961,56963,56965,56967,56969],{"class":51,"line":17022},[49,56956,11311],{"class":59},[49,56958,6915],{"class":66},[49,56960,13654],{"class":59},[49,56962,54485],{"class":55},[49,56964,54488],{"class":2055},[49,56966,228],{"class":55},[49,56968,55734],{"class":328},[49,56970,81],{"class":55},[49,56972,56973,56975,56977,56979],{"class":51,"line":32722},[49,56974,52308],{"class":59},[49,56976,9528],{"class":55},[49,56978,60],{"class":59},[49,56980,47422],{"class":66},[49,56982,56983],{"class":51,"line":32728},[49,56984,56985],{"class":283},"    \u002F\u002F 2.开启定时器\n",[49,56987,56988],{"class":51,"line":32734},[49,56989,56990],{"class":283},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[49,56992,56993,56996,56998,57000],{"class":51,"line":32740},[49,56994,56995],{"class":2055},"    setInterval",[49,56997,228],{"class":55},[49,56999,54538],{"class":59},[49,57001,54541],{"class":55},[49,57003,57004,57006],{"class":51,"line":32746},[49,57005,54546],{"class":55},[49,57007,2794],{"class":59},[49,57009,57010,57012,57014,57016,57019,57021],{"class":51,"line":32757},[49,57011,54569],{"class":59},[49,57013,54572],{"class":55},[49,57015,1802],{"class":59},[49,57017,57018],{"class":55}," sliderData.",[49,57020,52057],{"class":66},[49,57022,12532],{"class":55},[49,57024,57025,57028,57030],{"class":51,"line":32763},[49,57026,57027],{"class":55},"        i ",[49,57029,60],{"class":59},[49,57031,47422],{"class":66},[49,57033,57034],{"class":51,"line":32783},[49,57035,52487],{"class":55},[49,57037,57038],{"class":51,"line":32789},[49,57039,57040],{"class":283},"      \u002F\u002F 更换图片路径\n",[49,57042,57043,57045,57047],{"class":51,"line":32800},[49,57044,55810],{"class":55},[49,57046,60],{"class":59},[49,57048,57049],{"class":55}," sliderData[i].url\n",[49,57051,57052],{"class":51,"line":32806},[49,57053,57054],{"class":283},"      \u002F\u002F 把文字写到p里面\n",[49,57056,57057,57059,57061],{"class":51,"line":32812},[49,57058,55820],{"class":55},[49,57060,60],{"class":59},[49,57062,57063],{"class":55}," sliderData[i].title\n",[49,57065,57066],{"class":51,"line":32818},[49,57067,57068],{"class":283},"      \u002F\u002F 小圆点\n",[49,57070,57071],{"class":51,"line":32824},[49,57072,57073],{"class":283},"      \u002F\u002F 先删除以前的active\n",[49,57075,57076],{"class":51,"line":32830},[49,57077,57078],{"class":283},"      \u002F\u002F 只让当前li添加active\n",[49,57080,57081,57083,57085,57087,57090,57093,57096,57098,57100],{"class":51,"line":32836},[49,57082,55860],{"class":55},[49,57084,54488],{"class":2055},[49,57086,228],{"class":55},[49,57088,57089],{"class":328},"'.slider-footer .activate'",[49,57091,57092],{"class":55},").classList.",[49,57094,57095],{"class":2055},"remove",[49,57097,228],{"class":55},[49,57099,55878],{"class":328},[49,57101,81],{"class":55},[49,57103,57104,57106,57108,57110,57113,57115,57117,57119,57122,57124,57126,57128,57130],{"class":51,"line":32842},[49,57105,55860],{"class":55},[49,57107,54488],{"class":2055},[49,57109,228],{"class":55},[49,57111,57112],{"class":328},"`.slider-footer ul li:nth-child(${",[49,57114,661],{"class":55},[49,57116,45655],{"class":59},[49,57118,25209],{"class":66},[49,57120,57121],{"class":328},"})`",[49,57123,57092],{"class":55},[49,57125,5424],{"class":2055},[49,57127,228],{"class":55},[49,57129,55878],{"class":328},[49,57131,81],{"class":55},[49,57133,57134],{"class":51,"line":32862},[49,57135,2492],{"emptyLinePlaceholder":151},[49,57137,57138,57140,57142],{"class":51,"line":32868},[49,57139,54624],{"class":55},[49,57141,6500],{"class":66},[49,57143,81],{"class":55},[49,57145,57146],{"class":51,"line":32884},[49,57147,2492],{"emptyLinePlaceholder":151},[49,57149,57150,57152,57154],{"class":51,"line":32890},[49,57151,52506],{"class":55},[49,57153,51902],{"class":51389},[49,57155,51396],{"class":55},[49,57157,57158,57160,57162],{"class":51,"line":32904},[49,57159,51874],{"class":55},[49,57161,51889],{"class":51389},[49,57163,51396],{"class":55},[49,57165,57166],{"class":51,"line":32910},[49,57167,2492],{"emptyLinePlaceholder":151},[49,57169,57170,57172,57174],{"class":51,"line":32925},[49,57171,51874],{"class":55},[49,57173,50724],{"class":51389},[49,57175,51396],{"class":55},[195,57177,57179],{"id":57178},"_317-重要知识点","3.1.7 重要知识点",[14,57181,57182,57183],{},"浏览器在渲染文本时， ",[373,57184,57185],{},"没有空格或换行符就没有“断行点”",[14,57187,57188],{},[1554,57189],{"alt":44,"src":57190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57192,57193],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57195,57196],{},[1554,57197],{"alt":44,"src":57198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57200,57201],{},[1554,57202],{"alt":44,"src":57203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[166,57205,57207],{"id":57206},"_32-dom事件基础","3.2 DOM事件基础",[195,57209,57211],{"id":57210},"_321-事件监听","3.2.1 事件监听",[14,57213,57214],{},[1554,57215],{"alt":44,"src":57216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57218,57219],{},"事件监听有响应的发生",[14,57221,57222],{},[1554,57223],{"alt":44,"src":57224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57226,57227],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57229,57230],{},"对于有名函数,要执行的函数名后边不要加()",[195,57232,57234],{"id":57233},"_322-随机点名案例","3.2.2 随机点名案例",[39,57236,57238],{"className":50722,"code":57237,"language":50724,"meta":44,"style":44},"\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",[46,57239,57240,57250,57264,57268,57276,57290,57310,57322,57330,57336,57346,57356,57360,57364,57371,57382,57386,57390,57396,57408,57422,57432,57444,57457,57461,57465,57472,57476,57489,57501,57513,57517,57521,57525,57532,57542,57546,57550,57559,57571,57583,57598,57602,57610,57618,57622,57630,57643,57657,57670,57690,57698,57713,57733,57753,57761,57765,57773,57778,57814,57834,57839,57858,57863,57874,57879,57890,57895,57914,57929,57934,57960,57970,57979,57984,58000,58005,58010,58015,58030,58034,58038,58043,58062,58079,58087,58092,58107,58111,58115,58123,58131,58135],{"__ignoreMap":44},[49,57241,57242,57244,57246,57248],{"class":51,"line":52},[49,57243,51386],{"class":55},[49,57245,51390],{"class":51389},[49,57247,51393],{"class":2055},[49,57249,51396],{"class":55},[49,57251,57252,57254,57256,57258,57260,57262],{"class":51,"line":84},[49,57253,1129],{"class":55},[49,57255,50724],{"class":51389},[49,57257,51405],{"class":2055},[49,57259,60],{"class":55},[49,57261,51410],{"class":328},[49,57263,51396],{"class":55},[49,57265,57266],{"class":51,"line":109},[49,57267,2492],{"emptyLinePlaceholder":151},[49,57269,57270,57272,57274],{"class":51,"line":120},[49,57271,1129],{"class":55},[49,57273,51423],{"class":51389},[49,57275,51396],{"class":55},[49,57277,57278,57280,57282,57284,57286,57288],{"class":51,"line":135},[49,57279,52233],{"class":55},[49,57281,51433],{"class":51389},[49,57283,51436],{"class":2055},[49,57285,60],{"class":55},[49,57287,51441],{"class":328},[49,57289,51396],{"class":55},[49,57291,57292,57294,57296,57298,57300,57302,57304,57306,57308],{"class":51,"line":1306},[49,57293,52233],{"class":55},[49,57295,51433],{"class":51389},[49,57297,15010],{"class":2055},[49,57299,60],{"class":55},[49,57301,51480],{"class":328},[49,57303,51460],{"class":2055},[49,57305,60],{"class":55},[49,57307,51487],{"class":328},[49,57309,51396],{"class":55},[49,57311,57312,57314,57316,57318,57320],{"class":51,"line":1312},[49,57313,52233],{"class":55},[49,57315,51496],{"class":51389},[49,57317,51499],{"class":55},[49,57319,51496],{"class":51389},[49,57321,51396],{"class":55},[49,57323,57324,57326,57328],{"class":51,"line":1403},[49,57325,52233],{"class":55},[49,57327,143],{"class":51389},[49,57329,51396],{"class":55},[49,57331,57332,57334],{"class":51,"line":1409},[49,57333,6493],{"class":51389},[49,57335,15662],{"class":55},[49,57337,57338,57340,57342,57344],{"class":51,"line":1421},[49,57339,54795],{"class":66},[49,57341,51526],{"class":55},[49,57343,415],{"class":66},[49,57345,1382],{"class":55},[49,57347,57348,57350,57352,57354],{"class":51,"line":1704},[49,57349,54784],{"class":66},[49,57351,51526],{"class":55},[49,57353,415],{"class":66},[49,57355,1382],{"class":55},[49,57357,57358],{"class":51,"line":1709},[49,57359,2279],{"class":55},[49,57361,57362],{"class":51,"line":1715},[49,57363,2492],{"emptyLinePlaceholder":151},[49,57365,57366,57369],{"class":51,"line":1720},[49,57367,57368],{"class":51389},"    h2",[49,57370,15662],{"class":55},[49,57372,57373,57376,57378,57380],{"class":51,"line":1734},[49,57374,57375],{"class":66},"      text-align",[49,57377,51526],{"class":55},[49,57379,51681],{"class":66},[49,57381,1382],{"class":55},[49,57383,57384],{"class":51,"line":1739},[49,57385,2279],{"class":55},[49,57387,57388],{"class":51,"line":1745},[49,57389,2492],{"emptyLinePlaceholder":151},[49,57391,57392,57394],{"class":51,"line":1766},[49,57393,54841],{"class":2055},[49,57395,15662],{"class":55},[49,57397,57398,57400,57402,57404,57406],{"class":51,"line":1771},[49,57399,54860],{"class":66},[49,57401,51526],{"class":55},[49,57403,1631],{"class":66},[49,57405,51581],{"class":59},[49,57407,1382],{"class":55},[49,57409,57410,57412,57414,57416,57418,57420],{"class":51,"line":1785},[49,57411,54795],{"class":66},[49,57413,51526],{"class":55},[49,57415,875],{"class":66},[49,57417,51581],{"class":59},[49,57419,51645],{"class":66},[49,57421,1382],{"class":55},[49,57423,57424,57426,57428,57430],{"class":51,"line":1790},[49,57425,55098],{"class":66},[49,57427,51526],{"class":55},[49,57429,51566],{"class":66},[49,57431,1382],{"class":55},[49,57433,57434,57436,57438,57440,57442],{"class":51,"line":1819},[49,57435,55011],{"class":66},[49,57437,51526],{"class":55},[49,57439,1044],{"class":66},[49,57441,51581],{"class":59},[49,57443,1382],{"class":55},[49,57445,57446,57449,57451,57453,57455],{"class":51,"line":1824},[49,57447,57448],{"class":66},"      line-height",[49,57450,51526],{"class":55},[49,57452,622],{"class":66},[49,57454,51581],{"class":59},[49,57456,1382],{"class":55},[49,57458,57459],{"class":51,"line":1841},[49,57460,2279],{"class":55},[49,57462,57463],{"class":51,"line":1846},[49,57464,2492],{"emptyLinePlaceholder":151},[49,57466,57467,57470],{"class":51,"line":1851},[49,57468,57469],{"class":2055},"    .qs",[49,57471,15662],{"class":55},[49,57473,57474],{"class":51,"line":1856},[49,57475,2492],{"emptyLinePlaceholder":151},[49,57477,57478,57480,57482,57485,57487],{"class":51,"line":1870},[49,57479,54860],{"class":66},[49,57481,51526],{"class":55},[49,57483,57484],{"class":66},"450",[49,57486,51581],{"class":59},[49,57488,1382],{"class":55},[49,57490,57491,57493,57495,57497,57499],{"class":51,"line":1875},[49,57492,54874],{"class":66},[49,57494,51526],{"class":55},[49,57496,622],{"class":66},[49,57498,51581],{"class":59},[49,57500,1382],{"class":55},[49,57502,57503,57506,57508,57511],{"class":51,"line":2669},[49,57504,57505],{"class":66},"      color",[49,57507,51526],{"class":55},[49,57509,57510],{"class":66},"red",[49,57512,1382],{"class":55},[49,57514,57515],{"class":51,"line":2683},[49,57516,2492],{"emptyLinePlaceholder":151},[49,57518,57519],{"class":51,"line":2691},[49,57520,2279],{"class":55},[49,57522,57523],{"class":51,"line":2696},[49,57524,2492],{"emptyLinePlaceholder":151},[49,57526,57527,57530],{"class":51,"line":2702},[49,57528,57529],{"class":2055},"    .btns",[49,57531,15662],{"class":55},[49,57533,57534,57536,57538,57540],{"class":51,"line":2708},[49,57535,57375],{"class":66},[49,57537,51526],{"class":55},[49,57539,51681],{"class":66},[49,57541,1382],{"class":55},[49,57543,57544],{"class":51,"line":2713},[49,57545,2279],{"class":55},[49,57547,57548],{"class":51,"line":8038},[49,57549,2492],{"emptyLinePlaceholder":151},[49,57551,57552,57554,57557],{"class":51,"line":8062},[49,57553,57529],{"class":2055},[49,57555,57556],{"class":51389}," button",[49,57558,15662],{"class":55},[49,57560,57561,57563,57565,57567,57569],{"class":51,"line":8067},[49,57562,54860],{"class":66},[49,57564,51526],{"class":55},[49,57566,1036],{"class":66},[49,57568,51581],{"class":59},[49,57570,1382],{"class":55},[49,57572,57573,57575,57577,57579,57581],{"class":51,"line":8073},[49,57574,54874],{"class":66},[49,57576,51526],{"class":55},[49,57578,495],{"class":66},[49,57580,51581],{"class":59},[49,57582,1382],{"class":55},[49,57584,57585,57587,57589,57591,57594,57596],{"class":51,"line":8100},[49,57586,54795],{"class":66},[49,57588,51526],{"class":55},[49,57590,415],{"class":66},[49,57592,57593],{"class":66}," 50",[49,57595,51581],{"class":59},[49,57597,1382],{"class":55},[49,57599,57600],{"class":51,"line":8105},[49,57601,2279],{"class":55},[49,57603,57604,57606,57608],{"class":51,"line":8111},[49,57605,52506],{"class":55},[49,57607,143],{"class":51389},[49,57609,51396],{"class":55},[49,57611,57612,57614,57616],{"class":51,"line":8123},[49,57613,51874],{"class":55},[49,57615,51423],{"class":51389},[49,57617,51396],{"class":55},[49,57619,57620],{"class":51,"line":8135},[49,57621,2492],{"emptyLinePlaceholder":151},[49,57623,57624,57626,57628],{"class":51,"line":8147},[49,57625,1129],{"class":55},[49,57627,51889],{"class":51389},[49,57629,51396],{"class":55},[49,57631,57632,57634,57636,57639,57641],{"class":51,"line":9806},[49,57633,52233],{"class":55},[49,57635,166],{"class":51389},[49,57637,57638],{"class":55},">随机点名\u003C\u002F",[49,57640,166],{"class":51389},[49,57642,51396],{"class":55},[49,57644,57645,57647,57649,57651,57653,57655],{"class":51,"line":9831},[49,57646,52233],{"class":55},[49,57648,51700],{"class":51389},[49,57650,53575],{"class":2055},[49,57652,60],{"class":55},[49,57654,53580],{"class":328},[49,57656,51396],{"class":55},[49,57658,57659,57661,57663,57666,57668],{"class":51,"line":9854},[49,57660,51430],{"class":55},[49,57662,49],{"class":51389},[49,57664,57665],{"class":55},">名字是：\u003C\u002F",[49,57667,49],{"class":51389},[49,57669,51396],{"class":55},[49,57671,57672,57674,57676,57678,57680,57683,57686,57688],{"class":51,"line":9878},[49,57673,51430],{"class":55},[49,57675,51700],{"class":51389},[49,57677,53575],{"class":2055},[49,57679,60],{"class":55},[49,57681,57682],{"class":328},"\"qs\"",[49,57684,57685],{"class":55},">这里显示姓名\u003C\u002F",[49,57687,51700],{"class":51389},[49,57689,51396],{"class":55},[49,57691,57692,57694,57696],{"class":51,"line":9883},[49,57693,52506],{"class":55},[49,57695,51700],{"class":51389},[49,57697,51396],{"class":55},[49,57699,57700,57702,57704,57706,57708,57711],{"class":51,"line":9888},[49,57701,52233],{"class":55},[49,57703,51700],{"class":51389},[49,57705,53575],{"class":2055},[49,57707,60],{"class":55},[49,57709,57710],{"class":328},"\"btns\"",[49,57712,51396],{"class":55},[49,57714,57715,57717,57719,57721,57723,57726,57729,57731],{"class":51,"line":9893},[49,57716,51430],{"class":55},[49,57718,53976],{"class":51389},[49,57720,53575],{"class":2055},[49,57722,60],{"class":55},[49,57724,57725],{"class":328},"\"start\"",[49,57727,57728],{"class":55},">开始\u003C\u002F",[49,57730,53976],{"class":51389},[49,57732,51396],{"class":55},[49,57734,57735,57737,57739,57741,57743,57746,57749,57751],{"class":51,"line":9902},[49,57736,51430],{"class":55},[49,57738,53976],{"class":51389},[49,57740,53575],{"class":2055},[49,57742,60],{"class":55},[49,57744,57745],{"class":328},"\"end\"",[49,57747,57748],{"class":55},">结束\u003C\u002F",[49,57750,53976],{"class":51389},[49,57752,51396],{"class":55},[49,57754,57755,57757,57759],{"class":51,"line":9907},[49,57756,52506],{"class":55},[49,57758,51700],{"class":51389},[49,57760,51396],{"class":55},[49,57762,57763],{"class":51,"line":9913},[49,57764,2492],{"emptyLinePlaceholder":151},[49,57766,57767,57769,57771],{"class":51,"line":9934},[49,57768,52233],{"class":55},[49,57770,51902],{"class":51389},[49,57772,51396],{"class":55},[49,57774,57775],{"class":51,"line":9940},[49,57776,57777],{"class":283},"    \u002F\u002F 数据数组\n",[49,57779,57780,57782,57785,57787,57789,57792,57794,57797,57799,57802,57804,57807,57809,57812],{"class":51,"line":9954},[49,57781,11311],{"class":59},[49,57783,57784],{"class":66}," arr",[49,57786,13654],{"class":59},[49,57788,52315],{"class":55},[49,57790,57791],{"class":328},"'马超'",[49,57793,12525],{"class":55},[49,57795,57796],{"class":328},"'黄忠'",[49,57798,12525],{"class":55},[49,57800,57801],{"class":328},"'赵云'",[49,57803,12525],{"class":55},[49,57805,57806],{"class":328},"'关羽'",[49,57808,12525],{"class":55},[49,57810,57811],{"class":328},"'张飞'",[49,57813,33335],{"class":55},[49,57815,57816,57818,57821,57823,57825,57827,57829,57832],{"class":51,"line":9960},[49,57817,11311],{"class":59},[49,57819,57820],{"class":66}," qs",[49,57822,13654],{"class":59},[49,57824,54485],{"class":55},[49,57826,54488],{"class":2055},[49,57828,228],{"class":55},[49,57830,57831],{"class":328},"'.qs'",[49,57833,81],{"class":55},[49,57835,57836],{"class":51,"line":9987},[49,57837,57838],{"class":283},"    \u002F\u002F 1.业务1.开始按钮模块\n",[49,57840,57841,57843,57845,57847,57849,57851,57853,57856],{"class":51,"line":9996},[49,57842,11311],{"class":59},[49,57844,4276],{"class":66},[49,57846,13654],{"class":59},[49,57848,54485],{"class":55},[49,57850,54488],{"class":2055},[49,57852,228],{"class":55},[49,57854,57855],{"class":328},"'.start'",[49,57857,81],{"class":55},[49,57859,57860],{"class":51,"line":10002},[49,57861,57862],{"class":283},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[49,57864,57865,57867,57870,57872],{"class":51,"line":10010},[49,57866,52308],{"class":59},[49,57868,57869],{"class":55}," timerId ",[49,57871,60],{"class":59},[49,57873,47422],{"class":66},[49,57875,57876],{"class":51,"line":10015},[49,57877,57878],{"class":283},"    \u002F\u002F 随机号要全局变量\n",[49,57880,57881,57883,57886,57888],{"class":51,"line":16694},[49,57882,52308],{"class":59},[49,57884,57885],{"class":55}," random ",[49,57887,60],{"class":59},[49,57889,47422],{"class":66},[49,57891,57892],{"class":51,"line":16700},[49,57893,57894],{"class":283},"    \u002F\u002F 1.1 添加点击事件\n",[49,57896,57897,57900,57903,57905,57908,57910,57912],{"class":51,"line":16723},[49,57898,57899],{"class":55},"    start.",[49,57901,57902],{"class":2055},"addEventListener",[49,57904,228],{"class":55},[49,57906,57907],{"class":328},"'click'",[49,57909,12525],{"class":55},[49,57911,54538],{"class":59},[49,57913,54541],{"class":55},[49,57915,57916,57919,57921,57923,57925,57927],{"class":51,"line":16729},[49,57917,57918],{"class":55},"      timerId ",[49,57920,60],{"class":59},[49,57922,54533],{"class":2055},[49,57924,228],{"class":55},[49,57926,54538],{"class":59},[49,57928,54541],{"class":55},[49,57930,57931],{"class":51,"line":16752},[49,57932,57933],{"class":283},"        \u002F\u002F 随机数\n",[49,57935,57936,57939,57941,57944,57947,57950,57952,57954,57956,57958],{"class":51,"line":16766},[49,57937,57938],{"class":55},"        random ",[49,57940,60],{"class":59},[49,57942,57943],{"class":2055}," parseInt",[49,57945,57946],{"class":55},"(Math.",[49,57948,57949],{"class":2055},"random",[49,57951,13140],{"class":55},[49,57953,674],{"class":59},[49,57955,52054],{"class":55},[49,57957,52057],{"class":66},[49,57959,81],{"class":55},[49,57961,57962,57965,57967],{"class":51,"line":16786},[49,57963,57964],{"class":55},"        qs.innerHTML ",[49,57966,60],{"class":59},[49,57968,57969],{"class":55}," arr[random]\n",[49,57971,57972,57975,57977],{"class":51,"line":16792},[49,57973,57974],{"class":55},"      }, ",[49,57976,495],{"class":66},[49,57978,81],{"class":55},[49,57980,57981],{"class":51,"line":16803},[49,57982,57983],{"class":283},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[49,57985,57986,57988,57991,57993,57996,57998],{"class":51,"line":16826},[49,57987,54569],{"class":59},[49,57989,57990],{"class":55}," (arr.",[49,57992,52057],{"class":66},[49,57994,57995],{"class":59}," ===",[49,57997,25209],{"class":66},[49,57999,12532],{"class":55},[49,58001,58002],{"class":51,"line":16848},[49,58003,58004],{"class":283},"        \u002F\u002F start.disabled = true\n",[49,58006,58007],{"class":51,"line":16853},[49,58008,58009],{"class":283},"        \u002F\u002F end.disabled = true\n",[49,58011,58012],{"class":51,"line":16859},[49,58013,58014],{"class":283},"        \u002F\u002F 可以合起来写\n",[49,58016,58017,58020,58022,58025,58027],{"class":51,"line":16873},[49,58018,58019],{"class":55},"        start.disabled ",[49,58021,60],{"class":59},[49,58023,58024],{"class":55}," end.disabled ",[49,58026,60],{"class":59},[49,58028,58029],{"class":66}," true\n",[49,58031,58032],{"class":51,"line":16886},[49,58033,52487],{"class":55},[49,58035,58036],{"class":51,"line":16891},[49,58037,33550],{"class":55},[49,58039,58040],{"class":51,"line":16905},[49,58041,58042],{"class":283},"    \u002F\u002F 1.2 关闭按钮模块\n",[49,58044,58045,58047,58049,58051,58053,58055,58057,58060],{"class":51,"line":16910},[49,58046,11311],{"class":59},[49,58048,4292],{"class":66},[49,58050,13654],{"class":59},[49,58052,54485],{"class":55},[49,58054,54488],{"class":2055},[49,58056,228],{"class":55},[49,58058,58059],{"class":328},"'.end'",[49,58061,81],{"class":55},[49,58063,58064,58067,58069,58071,58073,58075,58077],{"class":51,"line":16916},[49,58065,58066],{"class":55},"    end.",[49,58068,57902],{"class":2055},[49,58070,228],{"class":55},[49,58072,57907],{"class":328},[49,58074,12525],{"class":55},[49,58076,54538],{"class":59},[49,58078,54541],{"class":55},[49,58080,58081,58084],{"class":51,"line":16921},[49,58082,58083],{"class":2055},"      clearInterval",[49,58085,58086],{"class":55},"(timerId)\n",[49,58088,58089],{"class":51,"line":16935},[49,58090,58091],{"class":283},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[49,58093,58094,58097,58100,58103,58105],{"class":51,"line":16940},[49,58095,58096],{"class":55},"      arr.",[49,58098,58099],{"class":2055},"splice",[49,58101,58102],{"class":55},"(random, ",[49,58104,441],{"class":66},[49,58106,81],{"class":55},[49,58108,58109],{"class":51,"line":16945},[49,58110,33550],{"class":55},[49,58112,58113],{"class":51,"line":16959},[49,58114,2492],{"emptyLinePlaceholder":151},[49,58116,58117,58119,58121],{"class":51,"line":16971},[49,58118,52506],{"class":55},[49,58120,51902],{"class":51389},[49,58122,51396],{"class":55},[49,58124,58125,58127,58129],{"class":51,"line":16976},[49,58126,51874],{"class":55},[49,58128,51889],{"class":51389},[49,58130,51396],{"class":55},[49,58132,58133],{"class":51,"line":16989},[49,58134,2492],{"emptyLinePlaceholder":151},[49,58136,58137,58139,58141],{"class":51,"line":16994},[49,58138,51874],{"class":55},[49,58140,50724],{"class":51389},[49,58142,51396],{"class":55},[14,58144,58145],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[195,58147,58149],{"id":58148},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[39,58151,58153],{"className":50722,"code":58152,"language":50724,"meta":44,"style":44},"\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",[46,58154,58155,58165,58179,58183,58191,58205,58225,58237,58245,58249,58257,58269,58277,58296,58313,58329,58339,58343,58351,58359,58363],{"__ignoreMap":44},[49,58156,58157,58159,58161,58163],{"class":51,"line":52},[49,58158,51386],{"class":55},[49,58160,51390],{"class":51389},[49,58162,51393],{"class":2055},[49,58164,51396],{"class":55},[49,58166,58167,58169,58171,58173,58175,58177],{"class":51,"line":84},[49,58168,1129],{"class":55},[49,58170,50724],{"class":51389},[49,58172,51405],{"class":2055},[49,58174,60],{"class":55},[49,58176,51410],{"class":328},[49,58178,51396],{"class":55},[49,58180,58181],{"class":51,"line":109},[49,58182,2492],{"emptyLinePlaceholder":151},[49,58184,58185,58187,58189],{"class":51,"line":120},[49,58186,1129],{"class":55},[49,58188,51423],{"class":51389},[49,58190,51396],{"class":55},[49,58192,58193,58195,58197,58199,58201,58203],{"class":51,"line":135},[49,58194,52233],{"class":55},[49,58196,51433],{"class":51389},[49,58198,51436],{"class":2055},[49,58200,60],{"class":55},[49,58202,51441],{"class":328},[49,58204,51396],{"class":55},[49,58206,58207,58209,58211,58213,58215,58217,58219,58221,58223],{"class":51,"line":1306},[49,58208,52233],{"class":55},[49,58210,51433],{"class":51389},[49,58212,15010],{"class":2055},[49,58214,60],{"class":55},[49,58216,51480],{"class":328},[49,58218,51460],{"class":2055},[49,58220,60],{"class":55},[49,58222,51487],{"class":328},[49,58224,51396],{"class":55},[49,58226,58227,58229,58231,58233,58235],{"class":51,"line":1312},[49,58228,52233],{"class":55},[49,58230,51496],{"class":51389},[49,58232,51499],{"class":55},[49,58234,51496],{"class":51389},[49,58236,51396],{"class":55},[49,58238,58239,58241,58243],{"class":51,"line":1403},[49,58240,51874],{"class":55},[49,58242,51423],{"class":51389},[49,58244,51396],{"class":55},[49,58246,58247],{"class":51,"line":1409},[49,58248,2492],{"emptyLinePlaceholder":151},[49,58250,58251,58253,58255],{"class":51,"line":1421},[49,58252,1129],{"class":55},[49,58254,51889],{"class":51389},[49,58256,51396],{"class":55},[49,58258,58259,58261,58263,58265,58267],{"class":51,"line":1704},[49,58260,52233],{"class":55},[49,58262,53976],{"class":51389},[49,58264,53982],{"class":55},[49,58266,53976],{"class":51389},[49,58268,51396],{"class":55},[49,58270,58271,58273,58275],{"class":51,"line":1709},[49,58272,52233],{"class":55},[49,58274,51902],{"class":51389},[49,58276,51396],{"class":55},[49,58278,58279,58281,58283,58285,58287,58289,58291,58294],{"class":51,"line":1715},[49,58280,11311],{"class":59},[49,58282,54480],{"class":66},[49,58284,13654],{"class":59},[49,58286,54485],{"class":55},[49,58288,54488],{"class":2055},[49,58290,228],{"class":55},[49,58292,58293],{"class":328},"'button'",[49,58295,81],{"class":55},[49,58297,58298,58301,58303,58305,58307,58309,58311],{"class":51,"line":1720},[49,58299,58300],{"class":55},"    btn.",[49,58302,57902],{"class":2055},[49,58304,228],{"class":55},[49,58306,57907],{"class":328},[49,58308,12525],{"class":55},[49,58310,54538],{"class":59},[49,58312,54541],{"class":55},[49,58314,58315,58318,58320,58322,58325,58327],{"class":51,"line":1734},[49,58316,58317],{"class":59},"      const",[49,58319,2332],{"class":66},[49,58321,13654],{"class":59},[49,58323,58324],{"class":55}," Math.",[49,58326,57949],{"class":2055},[49,58328,2068],{"class":55},[49,58330,58331,58334,58337],{"class":51,"line":1739},[49,58332,58333],{"class":55},"      console.",[49,58335,58336],{"class":2055},"log",[49,58338,240],{"class":55},[49,58340,58341],{"class":51,"line":1745},[49,58342,33550],{"class":55},[49,58344,58345,58347,58349],{"class":51,"line":1766},[49,58346,52506],{"class":55},[49,58348,51902],{"class":51389},[49,58350,51396],{"class":55},[49,58352,58353,58355,58357],{"class":51,"line":1771},[49,58354,51874],{"class":55},[49,58356,51889],{"class":51389},[49,58358,51396],{"class":55},[49,58360,58361],{"class":51,"line":1785},[49,58362,2492],{"emptyLinePlaceholder":151},[49,58364,58365,58367,58369],{"class":51,"line":1790},[49,58366,51874],{"class":55},[49,58368,50724],{"class":51389},[49,58370,51396],{"class":55},[14,58372,58373],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58375,58376],{},"常量不可以重新赋值",[14,58378,58379],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[39,58381,58383],{"className":50722,"code":58382,"language":50724,"meta":44,"style":44},"\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",[46,58384,58385,58395,58409,58413,58421,58435,58455,58467,58475,58479,58487,58499,58507,58518,58536,58552,58566,58574,58578,58586,58594,58598],{"__ignoreMap":44},[49,58386,58387,58389,58391,58393],{"class":51,"line":52},[49,58388,51386],{"class":55},[49,58390,51390],{"class":51389},[49,58392,51393],{"class":2055},[49,58394,51396],{"class":55},[49,58396,58397,58399,58401,58403,58405,58407],{"class":51,"line":84},[49,58398,1129],{"class":55},[49,58400,50724],{"class":51389},[49,58402,51405],{"class":2055},[49,58404,60],{"class":55},[49,58406,51410],{"class":328},[49,58408,51396],{"class":55},[49,58410,58411],{"class":51,"line":109},[49,58412,2492],{"emptyLinePlaceholder":151},[49,58414,58415,58417,58419],{"class":51,"line":120},[49,58416,1129],{"class":55},[49,58418,51423],{"class":51389},[49,58420,51396],{"class":55},[49,58422,58423,58425,58427,58429,58431,58433],{"class":51,"line":135},[49,58424,52233],{"class":55},[49,58426,51433],{"class":51389},[49,58428,51436],{"class":2055},[49,58430,60],{"class":55},[49,58432,51441],{"class":328},[49,58434,51396],{"class":55},[49,58436,58437,58439,58441,58443,58445,58447,58449,58451,58453],{"class":51,"line":1306},[49,58438,52233],{"class":55},[49,58440,51433],{"class":51389},[49,58442,15010],{"class":2055},[49,58444,60],{"class":55},[49,58446,51480],{"class":328},[49,58448,51460],{"class":2055},[49,58450,60],{"class":55},[49,58452,51487],{"class":328},[49,58454,51396],{"class":55},[49,58456,58457,58459,58461,58463,58465],{"class":51,"line":1312},[49,58458,52233],{"class":55},[49,58460,51496],{"class":51389},[49,58462,51499],{"class":55},[49,58464,51496],{"class":51389},[49,58466,51396],{"class":55},[49,58468,58469,58471,58473],{"class":51,"line":1403},[49,58470,51874],{"class":55},[49,58472,51423],{"class":51389},[49,58474,51396],{"class":55},[49,58476,58477],{"class":51,"line":1409},[49,58478,2492],{"emptyLinePlaceholder":151},[49,58480,58481,58483,58485],{"class":51,"line":1421},[49,58482,1129],{"class":55},[49,58484,51889],{"class":51389},[49,58486,51396],{"class":55},[49,58488,58489,58491,58493,58495,58497],{"class":51,"line":1704},[49,58490,52233],{"class":55},[49,58492,53976],{"class":51389},[49,58494,53982],{"class":55},[49,58496,53976],{"class":51389},[49,58498,51396],{"class":55},[49,58500,58501,58503,58505],{"class":51,"line":1709},[49,58502,52233],{"class":55},[49,58504,51902],{"class":51389},[49,58506,51396],{"class":55},[49,58508,58509,58511,58513,58515],{"class":51,"line":1715},[49,58510,11311],{"class":59},[49,58512,2332],{"class":66},[49,58514,13654],{"class":59},[49,58516,58517],{"class":66}," 10\n",[49,58519,58520,58522,58524,58526,58528,58530,58532,58534],{"class":51,"line":1720},[49,58521,11311],{"class":59},[49,58523,54480],{"class":66},[49,58525,13654],{"class":59},[49,58527,54485],{"class":55},[49,58529,54488],{"class":2055},[49,58531,228],{"class":55},[49,58533,58293],{"class":328},[49,58535,81],{"class":55},[49,58537,58538,58540,58542,58544,58546,58548,58550],{"class":51,"line":1734},[49,58539,58300],{"class":55},[49,58541,57902],{"class":2055},[49,58543,228],{"class":55},[49,58545,57907],{"class":328},[49,58547,12525],{"class":55},[49,58549,54538],{"class":59},[49,58551,54541],{"class":55},[49,58553,58554,58556,58558,58560,58562,58564],{"class":51,"line":1739},[49,58555,58317],{"class":59},[49,58557,2332],{"class":66},[49,58559,13654],{"class":59},[49,58561,58324],{"class":55},[49,58563,57949],{"class":2055},[49,58565,2068],{"class":55},[49,58567,58568,58570,58572],{"class":51,"line":1745},[49,58569,58333],{"class":55},[49,58571,58336],{"class":2055},[49,58573,240],{"class":55},[49,58575,58576],{"class":51,"line":1766},[49,58577,33550],{"class":55},[49,58579,58580,58582,58584],{"class":51,"line":1771},[49,58581,52506],{"class":55},[49,58583,51902],{"class":51389},[49,58585,51396],{"class":55},[49,58587,58588,58590,58592],{"class":51,"line":1785},[49,58589,51874],{"class":55},[49,58591,51889],{"class":51389},[49,58593,51396],{"class":55},[49,58595,58596],{"class":51,"line":1790},[49,58597,2492],{"emptyLinePlaceholder":151},[49,58599,58600,58602,58604],{"class":51,"line":1819},[49,58601,51874],{"class":55},[49,58603,50724],{"class":51389},[49,58605,51396],{"class":55},[14,58607,58608],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[39,58610,58612],{"className":50722,"code":58611,"language":50724,"meta":44,"style":44},"\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",[46,58613,58614,58624,58638,58642,58650,58664,58684,58696,58704,58708,58716,58728,58736,58746,58764,58780,58793,58801,58805,58813,58821,58825],{"__ignoreMap":44},[49,58615,58616,58618,58620,58622],{"class":51,"line":52},[49,58617,51386],{"class":55},[49,58619,51390],{"class":51389},[49,58621,51393],{"class":2055},[49,58623,51396],{"class":55},[49,58625,58626,58628,58630,58632,58634,58636],{"class":51,"line":84},[49,58627,1129],{"class":55},[49,58629,50724],{"class":51389},[49,58631,51405],{"class":2055},[49,58633,60],{"class":55},[49,58635,51410],{"class":328},[49,58637,51396],{"class":55},[49,58639,58640],{"class":51,"line":109},[49,58641,2492],{"emptyLinePlaceholder":151},[49,58643,58644,58646,58648],{"class":51,"line":120},[49,58645,1129],{"class":55},[49,58647,51423],{"class":51389},[49,58649,51396],{"class":55},[49,58651,58652,58654,58656,58658,58660,58662],{"class":51,"line":135},[49,58653,52233],{"class":55},[49,58655,51433],{"class":51389},[49,58657,51436],{"class":2055},[49,58659,60],{"class":55},[49,58661,51441],{"class":328},[49,58663,51396],{"class":55},[49,58665,58666,58668,58670,58672,58674,58676,58678,58680,58682],{"class":51,"line":1306},[49,58667,52233],{"class":55},[49,58669,51433],{"class":51389},[49,58671,15010],{"class":2055},[49,58673,60],{"class":55},[49,58675,51480],{"class":328},[49,58677,51460],{"class":2055},[49,58679,60],{"class":55},[49,58681,51487],{"class":328},[49,58683,51396],{"class":55},[49,58685,58686,58688,58690,58692,58694],{"class":51,"line":1312},[49,58687,52233],{"class":55},[49,58689,51496],{"class":51389},[49,58691,51499],{"class":55},[49,58693,51496],{"class":51389},[49,58695,51396],{"class":55},[49,58697,58698,58700,58702],{"class":51,"line":1403},[49,58699,51874],{"class":55},[49,58701,51423],{"class":51389},[49,58703,51396],{"class":55},[49,58705,58706],{"class":51,"line":1409},[49,58707,2492],{"emptyLinePlaceholder":151},[49,58709,58710,58712,58714],{"class":51,"line":1421},[49,58711,1129],{"class":55},[49,58713,51889],{"class":51389},[49,58715,51396],{"class":55},[49,58717,58718,58720,58722,58724,58726],{"class":51,"line":1704},[49,58719,52233],{"class":55},[49,58721,53976],{"class":51389},[49,58723,53982],{"class":55},[49,58725,53976],{"class":51389},[49,58727,51396],{"class":55},[49,58729,58730,58732,58734],{"class":51,"line":1709},[49,58731,52233],{"class":55},[49,58733,51902],{"class":51389},[49,58735,51396],{"class":55},[49,58737,58738,58740,58742,58744],{"class":51,"line":1715},[49,58739,11311],{"class":59},[49,58741,2332],{"class":66},[49,58743,13654],{"class":59},[49,58745,58517],{"class":66},[49,58747,58748,58750,58752,58754,58756,58758,58760,58762],{"class":51,"line":1720},[49,58749,11311],{"class":59},[49,58751,54480],{"class":66},[49,58753,13654],{"class":59},[49,58755,54485],{"class":55},[49,58757,54488],{"class":2055},[49,58759,228],{"class":55},[49,58761,58293],{"class":328},[49,58763,81],{"class":55},[49,58765,58766,58768,58770,58772,58774,58776,58778],{"class":51,"line":1734},[49,58767,58300],{"class":55},[49,58769,57902],{"class":2055},[49,58771,228],{"class":55},[49,58773,57907],{"class":328},[49,58775,12525],{"class":55},[49,58777,54538],{"class":59},[49,58779,54541],{"class":55},[49,58781,58782,58785,58787,58789,58791],{"class":51,"line":1739},[49,58783,58784],{"class":55},"      num ",[49,58786,60],{"class":59},[49,58788,58324],{"class":55},[49,58790,57949],{"class":2055},[49,58792,2068],{"class":55},[49,58794,58795,58797,58799],{"class":51,"line":1745},[49,58796,58333],{"class":55},[49,58798,58336],{"class":2055},[49,58800,240],{"class":55},[49,58802,58803],{"class":51,"line":1766},[49,58804,33550],{"class":55},[49,58806,58807,58809,58811],{"class":51,"line":1771},[49,58808,52506],{"class":55},[49,58810,51902],{"class":51389},[49,58812,51396],{"class":55},[49,58814,58815,58817,58819],{"class":51,"line":1785},[49,58816,51874],{"class":55},[49,58818,51889],{"class":51389},[49,58820,51396],{"class":55},[49,58822,58823],{"class":51,"line":1790},[49,58824,2492],{"emptyLinePlaceholder":151},[49,58826,58827,58829,58831],{"class":51,"line":1819},[49,58828,51874],{"class":55},[49,58830,50724],{"class":51389},[49,58832,51396],{"class":55},[14,58834,58835],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[195,58837,58839],{"id":58838},"_324-事件监听版本","3.2.4 事件监听版本",[14,58841,58842],{},[1554,58843],{"alt":44,"src":58844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58846,58847],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58849,58850],{},"这种方式会覆盖前边的事件监听:",[39,58852,58854],{"className":50722,"code":58853,"language":50724,"meta":44,"style":44},"\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",[46,58855,58856,58866,58880,58884,58892,58906,58926,58938,58946,58950,58958,58970,58978,58996,59010,59021,59025,59037,59047,59051,59059,59067,59071],{"__ignoreMap":44},[49,58857,58858,58860,58862,58864],{"class":51,"line":52},[49,58859,51386],{"class":55},[49,58861,51390],{"class":51389},[49,58863,51393],{"class":2055},[49,58865,51396],{"class":55},[49,58867,58868,58870,58872,58874,58876,58878],{"class":51,"line":84},[49,58869,1129],{"class":55},[49,58871,50724],{"class":51389},[49,58873,51405],{"class":2055},[49,58875,60],{"class":55},[49,58877,51410],{"class":328},[49,58879,51396],{"class":55},[49,58881,58882],{"class":51,"line":109},[49,58883,2492],{"emptyLinePlaceholder":151},[49,58885,58886,58888,58890],{"class":51,"line":120},[49,58887,1129],{"class":55},[49,58889,51423],{"class":51389},[49,58891,51396],{"class":55},[49,58893,58894,58896,58898,58900,58902,58904],{"class":51,"line":135},[49,58895,52233],{"class":55},[49,58897,51433],{"class":51389},[49,58899,51436],{"class":2055},[49,58901,60],{"class":55},[49,58903,51441],{"class":328},[49,58905,51396],{"class":55},[49,58907,58908,58910,58912,58914,58916,58918,58920,58922,58924],{"class":51,"line":1306},[49,58909,52233],{"class":55},[49,58911,51433],{"class":51389},[49,58913,15010],{"class":2055},[49,58915,60],{"class":55},[49,58917,51480],{"class":328},[49,58919,51460],{"class":2055},[49,58921,60],{"class":55},[49,58923,51487],{"class":328},[49,58925,51396],{"class":55},[49,58927,58928,58930,58932,58934,58936],{"class":51,"line":1312},[49,58929,52233],{"class":55},[49,58931,51496],{"class":51389},[49,58933,51499],{"class":55},[49,58935,51496],{"class":51389},[49,58937,51396],{"class":55},[49,58939,58940,58942,58944],{"class":51,"line":1403},[49,58941,51874],{"class":55},[49,58943,51423],{"class":51389},[49,58945,51396],{"class":55},[49,58947,58948],{"class":51,"line":1409},[49,58949,2492],{"emptyLinePlaceholder":151},[49,58951,58952,58954,58956],{"class":51,"line":1421},[49,58953,1129],{"class":55},[49,58955,51889],{"class":51389},[49,58957,51396],{"class":55},[49,58959,58960,58962,58964,58966,58968],{"class":51,"line":1704},[49,58961,52233],{"class":55},[49,58963,53976],{"class":51389},[49,58965,53982],{"class":55},[49,58967,53976],{"class":51389},[49,58969,51396],{"class":55},[49,58971,58972,58974,58976],{"class":51,"line":1709},[49,58973,52233],{"class":55},[49,58975,51902],{"class":51389},[49,58977,51396],{"class":55},[49,58979,58980,58982,58984,58986,58988,58990,58992,58994],{"class":51,"line":1715},[49,58981,11311],{"class":59},[49,58983,54480],{"class":66},[49,58985,13654],{"class":59},[49,58987,54485],{"class":55},[49,58989,54488],{"class":2055},[49,58991,228],{"class":55},[49,58993,58293],{"class":328},[49,58995,81],{"class":55},[49,58997,58998,59000,59003,59005,59008],{"class":51,"line":1720},[49,58999,58300],{"class":55},[49,59001,59002],{"class":2055},"onclick",[49,59004,13654],{"class":59},[49,59006,59007],{"class":59}," function",[49,59009,54541],{"class":55},[49,59011,59012,59015,59017,59019],{"class":51,"line":1734},[49,59013,59014],{"class":2055},"      alert",[49,59016,228],{"class":55},[49,59018,691],{"class":66},[49,59020,81],{"class":55},[49,59022,59023],{"class":51,"line":1739},[49,59024,2279],{"class":55},[49,59026,59027,59029,59031,59033,59035],{"class":51,"line":1745},[49,59028,58300],{"class":55},[49,59030,59002],{"class":2055},[49,59032,13654],{"class":59},[49,59034,59007],{"class":59},[49,59036,54541],{"class":55},[49,59038,59039,59041,59043,59045],{"class":51,"line":1766},[49,59040,59014],{"class":2055},[49,59042,228],{"class":55},[49,59044,969],{"class":66},[49,59046,81],{"class":55},[49,59048,59049],{"class":51,"line":1771},[49,59050,2279],{"class":55},[49,59052,59053,59055,59057],{"class":51,"line":1785},[49,59054,52506],{"class":55},[49,59056,51902],{"class":51389},[49,59058,51396],{"class":55},[49,59060,59061,59063,59065],{"class":51,"line":1790},[49,59062,51874],{"class":55},[49,59064,51889],{"class":51389},[49,59066,51396],{"class":55},[49,59068,59069],{"class":51,"line":1819},[49,59070,2492],{"emptyLinePlaceholder":151},[49,59072,59073,59075,59077],{"class":51,"line":1824},[49,59074,51874],{"class":55},[49,59076,50724],{"class":51389},[49,59078,51396],{"class":55},[14,59080,59081],{},"只要点击就输出结果为22,前边11被覆盖了",[39,59083,59085],{"className":50722,"code":59084,"language":50724,"meta":44,"style":44},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[46,59086,59087,59092,59097,59101,59106,59111],{"__ignoreMap":44},[49,59088,59089],{"class":51,"line":52},[49,59090,59091],{"class":55},"  btn.addEventListener('click', function () {\n",[49,59093,59094],{"class":51,"line":84},[49,59095,59096],{"class":55},"      alert(11)\n",[49,59098,59099],{"class":51,"line":109},[49,59100,33550],{"class":55},[49,59102,59103],{"class":51,"line":120},[49,59104,59105],{"class":55},"    btn.addEventListener('click', function () {\n",[49,59107,59108],{"class":51,"line":135},[49,59109,59110],{"class":55},"      alert(22)\n",[49,59112,59113],{"class":51,"line":1306},[49,59114,33550],{"class":55},[14,59116,59117],{},"点击第一次输出11,第二次点击为22",[195,59119,59121],{"id":59120},"_325-事件类型","3.2.5 事件类型",[14,59123,59124],{},[1554,59125],{"alt":44,"src":59126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22088,59128,59130],{"id":59129},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59132,59133],{},"补充知识:",[14,59135,59136],{},"轮播图自动播放模块,可以使用",[14,59138,59139],{},"let timerId = setInterval(function () {",[14,59141,59142],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59144,59145],{},"用js方法模拟进行点击事件,click必须加()",[14,59147,59148],{},"next.click()",[14,59150,59151],{},"}, 1000)",[14,59153,59154],{},[1554,59155],{"alt":44,"src":59156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[39,59158,59160],{"className":53156,"code":59159,"language":53158,"meta":44,"style":44},"\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",[46,59161,59162,59166,59176,59190,59194,59202,59217,59237,59257,59270,59278,59283,59288,59292,59296,59301,59306,59311,59316,59320,59324,59329,59334,59339,59343,59347,59352,59356,59361,59366,59370,59374,59379,59384,59389,59394,59399,59403,59407,59412,59417,59422,59427,59432,59436,59440,59445,59450,59455,59460,59465,59470,59475,59480,59485,59490,59494,59498,59503,59508,59512,59516,59521,59526,59530,59535,59540,59544,59548,59553,59557,59562,59567,59571,59576,59580,59584,59589,59594,59599,59604,59609,59614,59619,59623,59627,59631,59636,59641,59646,59651,59655,59663,59671,59675,59683,59698,59712,59733,59741,59755,59768,59783,59802,59814,59826,59838,59850,59862,59874,59886,59894,59909,59933,59957,59965,59973,59981,59989,59994,59999,60004,60009,60014,60019,60024,60029,60034,60039,60043,60048,60053,60058,60063,60068,60073,60078,60083,60088,60092,60097,60102,60107,60112,60117,60122,60127,60132,60137,60142,60147,60152,60156,60160,60165,60170,60175,60179,60184,60189,60194,60199,60204,60208,60213,60217,60221,60225,60229,60233,60237,60242,60247,60252,60257,60262,60267,60272,60277,60282,60286,60290,60295,60300,60305,60310,60315,60319,60324,60329,60334,60339,60344,60349,60353,60357,60362,60366,60371,60375,60380,60385,60390,60395,60400,60405,60409,60417,60425,60429],{"__ignoreMap":44},[49,59163,59164],{"class":51,"line":52},[49,59165,2492],{"emptyLinePlaceholder":151},[49,59167,59168,59170,59172,59174],{"class":51,"line":84},[49,59169,51386],{"class":55},[49,59171,51390],{"class":59},[49,59173,51393],{"class":66},[49,59175,51396],{"class":55},[49,59177,59178,59180,59182,59184,59186,59188],{"class":51,"line":109},[49,59179,1129],{"class":55},[49,59181,50724],{"class":51389},[49,59183,51405],{"class":2055},[49,59185,60],{"class":55},[49,59187,51410],{"class":328},[49,59189,51396],{"class":55},[49,59191,59192],{"class":51,"line":120},[49,59193,2492],{"emptyLinePlaceholder":151},[49,59195,59196,59198,59200],{"class":51,"line":135},[49,59197,1129],{"class":55},[49,59199,51423],{"class":51389},[49,59201,51396],{"class":55},[49,59203,59204,59206,59208,59210,59212,59214],{"class":51,"line":1306},[49,59205,52233],{"class":55},[49,59207,51433],{"class":51389},[49,59209,51436],{"class":2055},[49,59211,60],{"class":55},[49,59213,51441],{"class":328},[49,59215,59216],{"class":55}," \u002F>\n",[49,59218,59219,59221,59223,59225,59227,59229,59231,59233,59235],{"class":51,"line":1312},[49,59220,52233],{"class":55},[49,59222,51433],{"class":51389},[49,59224,51452],{"class":2055},[49,59226,60],{"class":55},[49,59228,51457],{"class":328},[49,59230,51460],{"class":2055},[49,59232,60],{"class":55},[49,59234,51465],{"class":328},[49,59236,59216],{"class":55},[49,59238,59239,59241,59243,59245,59247,59249,59251,59253,59255],{"class":51,"line":1403},[49,59240,52233],{"class":55},[49,59242,51433],{"class":51389},[49,59244,15010],{"class":2055},[49,59246,60],{"class":55},[49,59248,51480],{"class":328},[49,59250,51460],{"class":2055},[49,59252,60],{"class":55},[49,59254,51487],{"class":328},[49,59256,59216],{"class":55},[49,59258,59259,59261,59263,59266,59268],{"class":51,"line":1409},[49,59260,52233],{"class":55},[49,59262,51496],{"class":51389},[49,59264,59265],{"class":55},">轮播图点击切换\u003C\u002F",[49,59267,51496],{"class":51389},[49,59269,51396],{"class":55},[49,59271,59272,59274,59276],{"class":51,"line":1421},[49,59273,52233],{"class":55},[49,59275,143],{"class":51389},[49,59277,51396],{"class":55},[49,59279,59280],{"class":51,"line":1704},[49,59281,59282],{"class":55},"    * {\n",[49,59284,59285],{"class":51,"line":1709},[49,59286,59287],{"class":55},"      box-sizing: border-box;\n",[49,59289,59290],{"class":51,"line":1715},[49,59291,2279],{"class":55},[49,59293,59294],{"class":51,"line":1720},[49,59295,2492],{"emptyLinePlaceholder":151},[49,59297,59298],{"class":51,"line":1734},[49,59299,59300],{"class":55},"    .slider {\n",[49,59302,59303],{"class":51,"line":1739},[49,59304,59305],{"class":55},"      width: 560px;\n",[49,59307,59308],{"class":51,"line":1745},[49,59309,59310],{"class":55},"      height: 400px;\n",[49,59312,59313],{"class":51,"line":1766},[49,59314,59315],{"class":55},"      overflow: hidden;\n",[49,59317,59318],{"class":51,"line":1771},[49,59319,2279],{"class":55},[49,59321,59322],{"class":51,"line":1785},[49,59323,2492],{"emptyLinePlaceholder":151},[49,59325,59326],{"class":51,"line":1790},[49,59327,59328],{"class":55},"    .slider-wrapper {\n",[49,59330,59331],{"class":51,"line":1819},[49,59332,59333],{"class":55},"      width: 100%;\n",[49,59335,59336],{"class":51,"line":1824},[49,59337,59338],{"class":55},"      height: 320px;\n",[49,59340,59341],{"class":51,"line":1841},[49,59342,2279],{"class":55},[49,59344,59345],{"class":51,"line":1846},[49,59346,2492],{"emptyLinePlaceholder":151},[49,59348,59349],{"class":51,"line":1851},[49,59350,59351],{"class":55},"    .slider-wrapper img {\n",[49,59353,59354],{"class":51,"line":1856},[49,59355,59333],{"class":55},[49,59357,59358],{"class":51,"line":1870},[49,59359,59360],{"class":55},"      height: 100%;\n",[49,59362,59363],{"class":51,"line":1875},[49,59364,59365],{"class":55},"      display: block;\n",[49,59367,59368],{"class":51,"line":2669},[49,59369,2279],{"class":55},[49,59371,59372],{"class":51,"line":2683},[49,59373,2492],{"emptyLinePlaceholder":151},[49,59375,59376],{"class":51,"line":2691},[49,59377,59378],{"class":55},"    .slider-footer {\n",[49,59380,59381],{"class":51,"line":2696},[49,59382,59383],{"class":55},"      height: 80px;\n",[49,59385,59386],{"class":51,"line":2702},[49,59387,59388],{"class":55},"      background-color: rgb(100, 67, 68);\n",[49,59390,59391],{"class":51,"line":2708},[49,59392,59393],{"class":55},"      padding: 12px 12px 0 12px;\n",[49,59395,59396],{"class":51,"line":2713},[49,59397,59398],{"class":55},"      position: relative;\n",[49,59400,59401],{"class":51,"line":8038},[49,59402,2279],{"class":55},[49,59404,59405],{"class":51,"line":8062},[49,59406,2492],{"emptyLinePlaceholder":151},[49,59408,59409],{"class":51,"line":8067},[49,59410,59411],{"class":55},"    .slider-footer .toggle {\n",[49,59413,59414],{"class":51,"line":8073},[49,59415,59416],{"class":55},"      position: absolute;\n",[49,59418,59419],{"class":51,"line":8100},[49,59420,59421],{"class":55},"      right: 0;\n",[49,59423,59424],{"class":51,"line":8105},[49,59425,59426],{"class":55},"      top: 12px;\n",[49,59428,59429],{"class":51,"line":8111},[49,59430,59431],{"class":55},"      display: flex;\n",[49,59433,59434],{"class":51,"line":8123},[49,59435,2279],{"class":55},[49,59437,59438],{"class":51,"line":8135},[49,59439,2492],{"emptyLinePlaceholder":151},[49,59441,59442],{"class":51,"line":8147},[49,59443,59444],{"class":55},"    .slider-footer .toggle button {\n",[49,59446,59447],{"class":51,"line":9806},[49,59448,59449],{"class":55},"      margin-right: 12px;\n",[49,59451,59452],{"class":51,"line":9831},[49,59453,59454],{"class":55},"      width: 28px;\n",[49,59456,59457],{"class":51,"line":9854},[49,59458,59459],{"class":55},"      height: 28px;\n",[49,59461,59462],{"class":51,"line":9878},[49,59463,59464],{"class":55},"      appearance: none;\n",[49,59466,59467],{"class":51,"line":9883},[49,59468,59469],{"class":55},"      border: none;\n",[49,59471,59472],{"class":51,"line":9888},[49,59473,59474],{"class":55},"      background: rgba(255, 255, 255, 0.1);\n",[49,59476,59477],{"class":51,"line":9893},[49,59478,59479],{"class":55},"      color: #fff;\n",[49,59481,59482],{"class":51,"line":9902},[49,59483,59484],{"class":55},"      border-radius: 4px;\n",[49,59486,59487],{"class":51,"line":9907},[49,59488,59489],{"class":55},"      cursor: pointer;\n",[49,59491,59492],{"class":51,"line":9913},[49,59493,2279],{"class":55},[49,59495,59496],{"class":51,"line":9934},[49,59497,2492],{"emptyLinePlaceholder":151},[49,59499,59500],{"class":51,"line":9940},[49,59501,59502],{"class":55},"    .slider-footer .toggle button:hover {\n",[49,59504,59505],{"class":51,"line":9954},[49,59506,59507],{"class":55},"      background: rgba(255, 255, 255, 0.2);\n",[49,59509,59510],{"class":51,"line":9960},[49,59511,2279],{"class":55},[49,59513,59514],{"class":51,"line":9987},[49,59515,2492],{"emptyLinePlaceholder":151},[49,59517,59518],{"class":51,"line":9996},[49,59519,59520],{"class":55},"    .slider-footer p {\n",[49,59522,59523],{"class":51,"line":10002},[49,59524,59525],{"class":55},"      margin: 0;\n",[49,59527,59528],{"class":51,"line":10010},[49,59529,59479],{"class":55},[49,59531,59532],{"class":51,"line":10015},[49,59533,59534],{"class":55},"      font-size: 18px;\n",[49,59536,59537],{"class":51,"line":16694},[49,59538,59539],{"class":55},"      margin-bottom: 10px;\n",[49,59541,59542],{"class":51,"line":16700},[49,59543,2279],{"class":55},[49,59545,59546],{"class":51,"line":16723},[49,59547,2492],{"emptyLinePlaceholder":151},[49,59549,59550],{"class":51,"line":16729},[49,59551,59552],{"class":55},"    .slider-indicator {\n",[49,59554,59555],{"class":51,"line":16752},[49,59556,59525],{"class":55},[49,59558,59559],{"class":51,"line":16766},[49,59560,59561],{"class":55},"      padding: 0;\n",[49,59563,59564],{"class":51,"line":16786},[49,59565,59566],{"class":55},"      list-style: none;\n",[49,59568,59569],{"class":51,"line":16792},[49,59570,59431],{"class":55},[49,59572,59573],{"class":51,"line":16803},[49,59574,59575],{"class":55},"      align-items: center;\n",[49,59577,59578],{"class":51,"line":16826},[49,59579,2279],{"class":55},[49,59581,59582],{"class":51,"line":16848},[49,59583,2492],{"emptyLinePlaceholder":151},[49,59585,59586],{"class":51,"line":16853},[49,59587,59588],{"class":55},"    .slider-indicator li {\n",[49,59590,59591],{"class":51,"line":16859},[49,59592,59593],{"class":55},"      width: 8px;\n",[49,59595,59596],{"class":51,"line":16873},[49,59597,59598],{"class":55},"      height: 8px;\n",[49,59600,59601],{"class":51,"line":16886},[49,59602,59603],{"class":55},"      margin: 4px;\n",[49,59605,59606],{"class":51,"line":16891},[49,59607,59608],{"class":55},"      border-radius: 50%;\n",[49,59610,59611],{"class":51,"line":16905},[49,59612,59613],{"class":55},"      background: #fff;\n",[49,59615,59616],{"class":51,"line":16910},[49,59617,59618],{"class":55},"      opacity: 0.4;\n",[49,59620,59621],{"class":51,"line":16916},[49,59622,59489],{"class":55},[49,59624,59625],{"class":51,"line":16921},[49,59626,2279],{"class":55},[49,59628,59629],{"class":51,"line":16935},[49,59630,2492],{"emptyLinePlaceholder":151},[49,59632,59633],{"class":51,"line":16940},[49,59634,59635],{"class":55},"    .slider-indicator li.active {\n",[49,59637,59638],{"class":51,"line":16945},[49,59639,59640],{"class":55},"      width: 12px;\n",[49,59642,59643],{"class":51,"line":16959},[49,59644,59645],{"class":55},"      height: 12px;\n",[49,59647,59648],{"class":51,"line":16971},[49,59649,59650],{"class":55},"      opacity: 1;\n",[49,59652,59653],{"class":51,"line":16976},[49,59654,2279],{"class":55},[49,59656,59657,59659,59661],{"class":51,"line":16989},[49,59658,52506],{"class":55},[49,59660,143],{"class":51389},[49,59662,51396],{"class":55},[49,59664,59665,59667,59669],{"class":51,"line":16994},[49,59666,51874],{"class":55},[49,59668,51423],{"class":51389},[49,59670,51396],{"class":55},[49,59672,59673],{"class":51,"line":16999},[49,59674,2492],{"emptyLinePlaceholder":151},[49,59676,59677,59679,59681],{"class":51,"line":17004},[49,59678,1129],{"class":55},[49,59680,51889],{"class":51389},[49,59682,51396],{"class":55},[49,59684,59685,59687,59689,59691,59693,59696],{"class":51,"line":17017},[49,59686,52233],{"class":55},[49,59688,51700],{"class":51389},[49,59690,53575],{"class":2055},[49,59692,60],{"class":55},[49,59694,59695],{"class":328},"\"slider\"",[49,59697,51396],{"class":55},[49,59699,59700,59702,59704,59706,59708,59710],{"class":51,"line":17022},[49,59701,51430],{"class":55},[49,59703,51700],{"class":51389},[49,59705,53575],{"class":2055},[49,59707,60],{"class":55},[49,59709,55316],{"class":328},[49,59711,51396],{"class":55},[49,59713,59714,59716,59718,59720,59722,59725,59727,59729,59731],{"class":51,"line":32722},[49,59715,55323],{"class":55},[49,59717,1554],{"class":51389},[49,59719,55328],{"class":2055},[49,59721,60],{"class":55},[49,59723,59724],{"class":328},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,59726,55336],{"class":2055},[49,59728,60],{"class":55},[49,59730,7742],{"class":328},[49,59732,59216],{"class":55},[49,59734,59735,59737,59739],{"class":51,"line":32728},[49,59736,51865],{"class":55},[49,59738,51700],{"class":51389},[49,59740,51396],{"class":55},[49,59742,59743,59745,59747,59749,59751,59753],{"class":51,"line":32734},[49,59744,51430],{"class":55},[49,59746,51700],{"class":51389},[49,59748,53575],{"class":2055},[49,59750,60],{"class":55},[49,59752,55363],{"class":328},[49,59754,51396],{"class":55},[49,59756,59757,59759,59761,59764,59766],{"class":51,"line":32740},[49,59758,55323],{"class":55},[49,59760,14],{"class":51389},[49,59762,59763],{"class":55},">对人类来说会不会太超前了？\u003C\u002F",[49,59765,14],{"class":51389},[49,59767,51396],{"class":55},[49,59769,59770,59772,59774,59776,59778,59781],{"class":51,"line":32746},[49,59771,55323],{"class":55},[49,59773,1226],{"class":51389},[49,59775,53575],{"class":2055},[49,59777,60],{"class":55},[49,59779,59780],{"class":328},"\"slider-indicator\"",[49,59782,51396],{"class":55},[49,59784,59785,59787,59789,59791,59793,59796,59798,59800],{"class":51,"line":32757},[49,59786,55391],{"class":55},[49,59788,181],{"class":51389},[49,59790,53575],{"class":2055},[49,59792,60],{"class":55},[49,59794,59795],{"class":328},"\"active\"",[49,59797,55403],{"class":55},[49,59799,181],{"class":51389},[49,59801,51396],{"class":55},[49,59803,59804,59806,59808,59810,59812],{"class":51,"line":32763},[49,59805,55391],{"class":55},[49,59807,181],{"class":51389},[49,59809,55403],{"class":55},[49,59811,181],{"class":51389},[49,59813,51396],{"class":55},[49,59815,59816,59818,59820,59822,59824],{"class":51,"line":32783},[49,59817,55391],{"class":55},[49,59819,181],{"class":51389},[49,59821,55403],{"class":55},[49,59823,181],{"class":51389},[49,59825,51396],{"class":55},[49,59827,59828,59830,59832,59834,59836],{"class":51,"line":32789},[49,59829,55391],{"class":55},[49,59831,181],{"class":51389},[49,59833,55403],{"class":55},[49,59835,181],{"class":51389},[49,59837,51396],{"class":55},[49,59839,59840,59842,59844,59846,59848],{"class":51,"line":32800},[49,59841,55391],{"class":55},[49,59843,181],{"class":51389},[49,59845,55403],{"class":55},[49,59847,181],{"class":51389},[49,59849,51396],{"class":55},[49,59851,59852,59854,59856,59858,59860],{"class":51,"line":32806},[49,59853,55391],{"class":55},[49,59855,181],{"class":51389},[49,59857,55403],{"class":55},[49,59859,181],{"class":51389},[49,59861,51396],{"class":55},[49,59863,59864,59866,59868,59870,59872],{"class":51,"line":32812},[49,59865,55391],{"class":55},[49,59867,181],{"class":51389},[49,59869,55403],{"class":55},[49,59871,181],{"class":51389},[49,59873,51396],{"class":55},[49,59875,59876,59878,59880,59882,59884],{"class":51,"line":32818},[49,59877,55391],{"class":55},[49,59879,181],{"class":51389},[49,59881,55403],{"class":55},[49,59883,181],{"class":51389},[49,59885,51396],{"class":55},[49,59887,59888,59890,59892],{"class":51,"line":32824},[49,59889,55496],{"class":55},[49,59891,1226],{"class":51389},[49,59893,51396],{"class":55},[49,59895,59896,59898,59900,59902,59904,59907],{"class":51,"line":32830},[49,59897,55323],{"class":55},[49,59899,51700],{"class":51389},[49,59901,53575],{"class":2055},[49,59903,60],{"class":55},[49,59905,59906],{"class":328},"\"toggle\"",[49,59908,51396],{"class":55},[49,59910,59911,59913,59915,59917,59919,59922,59924,59927,59929,59931],{"class":51,"line":32836},[49,59912,55391],{"class":55},[49,59914,53976],{"class":51389},[49,59916,53575],{"class":2055},[49,59918,60],{"class":55},[49,59920,59921],{"class":328},"\"prev\"",[49,59923,1179],{"class":55},[49,59925,59926],{"class":66},"&lt;",[49,59928,51874],{"class":55},[49,59930,53976],{"class":51389},[49,59932,51396],{"class":55},[49,59934,59935,59937,59939,59941,59943,59946,59948,59951,59953,59955],{"class":51,"line":32842},[49,59936,55391],{"class":55},[49,59938,53976],{"class":51389},[49,59940,53575],{"class":2055},[49,59942,60],{"class":55},[49,59944,59945],{"class":328},"\"next\"",[49,59947,1179],{"class":55},[49,59949,59950],{"class":66},"&gt;",[49,59952,51874],{"class":55},[49,59954,53976],{"class":51389},[49,59956,51396],{"class":55},[49,59958,59959,59961,59963],{"class":51,"line":32862},[49,59960,55496],{"class":55},[49,59962,51700],{"class":51389},[49,59964,51396],{"class":55},[49,59966,59967,59969,59971],{"class":51,"line":32868},[49,59968,51865],{"class":55},[49,59970,51700],{"class":51389},[49,59972,51396],{"class":55},[49,59974,59975,59977,59979],{"class":51,"line":32884},[49,59976,52506],{"class":55},[49,59978,51700],{"class":51389},[49,59980,51396],{"class":55},[49,59982,59983,59985,59987],{"class":51,"line":32890},[49,59984,52233],{"class":55},[49,59986,51902],{"class":51389},[49,59988,51396],{"class":55},[49,59990,59991],{"class":51,"line":32904},[49,59992,59993],{"class":55},"    \u002F\u002F 1. 初始数据\n",[49,59995,59996],{"class":51,"line":32910},[49,59997,59998],{"class":55},"    const data = [\n",[49,60000,60001],{"class":51,"line":32925},[49,60002,60003],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[49,60005,60006],{"class":51,"line":32931},[49,60007,60008],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[49,60010,60011],{"class":51,"line":32940},[49,60012,60013],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[49,60015,60016],{"class":51,"line":32946},[49,60017,60018],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[49,60020,60021],{"class":51,"line":32955},[49,60022,60023],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[49,60025,60026],{"class":51,"line":32961},[49,60027,60028],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[49,60030,60031],{"class":51,"line":32967},[49,60032,60033],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[49,60035,60036],{"class":51,"line":32976},[49,60037,60038],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[49,60040,60041],{"class":51,"line":32982},[49,60042,53198],{"class":55},[49,60044,60045],{"class":51,"line":32993},[49,60046,60047],{"class":55},"    \u002F\u002F 获取元素\n",[49,60049,60050],{"class":51,"line":32999},[49,60051,60052],{"class":55},"    const img = document.querySelector('.slider-wrapper img')\n",[49,60054,60055],{"class":51,"line":33018},[49,60056,60057],{"class":55},"    const p = document.querySelector('.slider-footer p')\n",[49,60059,60060],{"class":51,"line":33024},[49,60061,60062],{"class":55},"    const footer = document.querySelector('.slider-footer')\n",[49,60064,60065],{"class":51,"line":33035},[49,60066,60067],{"class":55},"    \u002F\u002F 1. 右按钮业务\n",[49,60069,60070],{"class":51,"line":33041},[49,60071,60072],{"class":55},"    \u002F\u002F 1.1 获取右侧按钮 \n",[49,60074,60075],{"class":51,"line":33061},[49,60076,60077],{"class":55},"    const next = document.querySelector('.next')\n",[49,60079,60080],{"class":51,"line":33077},[49,60081,60082],{"class":55},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[49,60084,60085],{"class":51,"line":33083},[49,60086,60087],{"class":55},"    \u002F\u002F 1.2 注册点击事件\n",[49,60089,60090],{"class":51,"line":33097},[49,60091,2492],{"emptyLinePlaceholder":151},[49,60093,60094],{"class":51,"line":33103},[49,60095,60096],{"class":55},"    next.addEventListener('click', function () {\n",[49,60098,60099],{"class":51,"line":33109},[49,60100,60101],{"class":55},"      \u002F\u002F console.log(11)\n",[49,60103,60104],{"class":51,"line":33120},[49,60105,60106],{"class":55},"      i++\n",[49,60108,60109],{"class":51,"line":33126},[49,60110,60111],{"class":55},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[49,60113,60114],{"class":51,"line":33132},[49,60115,60116],{"class":55},"      \u002F\u002F if (i >= 8) {\n",[49,60118,60119],{"class":51,"line":33142},[49,60120,60121],{"class":55},"      \u002F\u002F   i = 0\n",[49,60123,60124],{"class":51,"line":33148},[49,60125,60126],{"class":55},"      \u002F\u002F }\n",[49,60128,60129],{"class":51,"line":33159},[49,60130,60131],{"class":55},"      i = i >= data.length ? 0 : i\n",[49,60133,60134],{"class":51,"line":33165},[49,60135,60136],{"class":55},"      \u002F\u002F 1.3 得到对应的对象\n",[49,60138,60139],{"class":51,"line":33175},[49,60140,60141],{"class":55},"      \u002F\u002F console.log(data[i])\n",[49,60143,60144],{"class":51,"line":33180},[49,60145,60146],{"class":55},"      \u002F\u002F 调用函数\n",[49,60148,60149],{"class":51,"line":33186},[49,60150,60151],{"class":55},"      toggle()\n",[49,60153,60154],{"class":51,"line":33235},[49,60155,33550],{"class":55},[49,60157,60158],{"class":51,"line":33282},[49,60159,2492],{"emptyLinePlaceholder":151},[49,60161,60162],{"class":51,"line":33287},[49,60163,60164],{"class":55},"    \u002F\u002F 2. 左侧按钮业务\n",[49,60166,60167],{"class":51,"line":33293},[49,60168,60169],{"class":55},"    \u002F\u002F 2.1 获取左侧按钮 \n",[49,60171,60172],{"class":51,"line":33312},[49,60173,60174],{"class":55},"    const prev = document.querySelector('.prev')\n",[49,60176,60177],{"class":51,"line":33318},[49,60178,60087],{"class":55},[49,60180,60181],{"class":51,"line":33338},[49,60182,60183],{"class":55},"    prev.addEventListener('click', function () {\n",[49,60185,60186],{"class":51,"line":33344},[49,60187,60188],{"class":55},"      i--\n",[49,60190,60191],{"class":51,"line":33350},[49,60192,60193],{"class":55},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[49,60195,60196],{"class":51,"line":33360},[49,60197,60198],{"class":55},"      \u002F\u002F if (i \u003C 0) {\n",[49,60200,60201],{"class":51,"line":33365},[49,60202,60203],{"class":55},"      \u002F\u002F   i = 7\n",[49,60205,60206],{"class":51,"line":33371},[49,60207,60126],{"class":55},[49,60209,60210],{"class":51,"line":33387},[49,60211,60212],{"class":55},"      i = i \u003C 0 ? data.length - 1 : i\n",[49,60214,60215],{"class":51,"line":33432},[49,60216,60136],{"class":55},[49,60218,60219],{"class":51,"line":33438},[49,60220,60141],{"class":55},[49,60222,60223],{"class":51,"line":33444},[49,60224,60146],{"class":55},[49,60226,60227],{"class":51,"line":33450},[49,60228,60151],{"class":55},[49,60230,60231],{"class":51,"line":33461},[49,60232,33550],{"class":55},[49,60234,60235],{"class":51,"line":33467},[49,60236,2492],{"emptyLinePlaceholder":151},[49,60238,60239],{"class":51,"line":33473},[49,60240,60241],{"class":55},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[49,60243,60244],{"class":51,"line":33479},[49,60245,60246],{"class":55},"    function toggle() {\n",[49,60248,60249],{"class":51,"line":33497},[49,60250,60251],{"class":55},"      \u002F\u002F 1.4 渲染对应的数据\n",[49,60253,60254],{"class":51,"line":33511},[49,60255,60256],{"class":55},"      img.src = data[i].url\n",[49,60258,60259],{"class":51,"line":33520},[49,60260,60261],{"class":55},"      p.innerHTML = data[i].title\n",[49,60263,60264],{"class":51,"line":33529},[49,60265,60266],{"class":55},"      footer.style.backgroundColor = data[i].color\n",[49,60268,60269],{"class":51,"line":33538},[49,60270,60271],{"class":55},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[49,60273,60274],{"class":51,"line":33547},[49,60275,60276],{"class":55},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[49,60278,60279],{"class":51,"line":33553},[49,60280,60281],{"class":55},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[49,60283,60284],{"class":51,"line":33559},[49,60285,2279],{"class":55},[49,60287,60288],{"class":51,"line":33567},[49,60289,2492],{"emptyLinePlaceholder":151},[49,60291,60292],{"class":51,"line":33572},[49,60293,60294],{"class":55},"    \u002F\u002F 3. 自动播放模块\n",[49,60296,60297],{"class":51,"line":33578},[49,60298,60299],{"class":55},"    let timerId = setInterval(function () {\n",[49,60301,60302],{"class":51,"line":33589},[49,60303,60304],{"class":55},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,60306,60307],{"class":51,"line":33595},[49,60308,60309],{"class":55},"      next.click()\n",[49,60311,60312],{"class":51,"line":33615},[49,60313,60314],{"class":55},"    }, 1000)\n",[49,60316,60317],{"class":51,"line":33621},[49,60318,2492],{"emptyLinePlaceholder":151},[49,60320,60321],{"class":51,"line":33627},[49,60322,60323],{"class":55},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[49,60325,60326],{"class":51,"line":33633},[49,60327,60328],{"class":55},"    const slider = document.querySelector('.slider')\n",[49,60330,60331],{"class":51,"line":33650},[49,60332,60333],{"class":55},"    \u002F\u002F 注册事件\n",[49,60335,60336],{"class":51,"line":33656},[49,60337,60338],{"class":55},"    slider.addEventListener('mouseenter', function () {\n",[49,60340,60341],{"class":51,"line":33662},[49,60342,60343],{"class":55},"      \u002F\u002F 停止定时器\n",[49,60345,60346],{"class":51,"line":33668},[49,60347,60348],{"class":55},"      clearInterval(timerId)\n",[49,60350,60351],{"class":51,"line":33674},[49,60352,33550],{"class":55},[49,60354,60355],{"class":51,"line":33680},[49,60356,2492],{"emptyLinePlaceholder":151},[49,60358,60359],{"class":51,"line":33707},[49,60360,60361],{"class":55},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[49,60363,60364],{"class":51,"line":33731},[49,60365,60333],{"class":55},[49,60367,60368],{"class":51,"line":33737},[49,60369,60370],{"class":55},"    slider.addEventListener('mouseleave', function () {\n",[49,60372,60373],{"class":51,"line":33743},[49,60374,60343],{"class":55},[49,60376,60377],{"class":51,"line":33749},[49,60378,60379],{"class":55},"      if (timerId) clearInterval(timerId)\n",[49,60381,60382],{"class":51,"line":33760},[49,60383,60384],{"class":55},"      \u002F\u002F 开启定时器\n",[49,60386,60387],{"class":51,"line":33771},[49,60388,60389],{"class":55},"      timerId = setInterval(function () {\n",[49,60391,60392],{"class":51,"line":33777},[49,60393,60394],{"class":55},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,60396,60397],{"class":51,"line":33794},[49,60398,60399],{"class":55},"        next.click()\n",[49,60401,60402],{"class":51,"line":33817},[49,60403,60404],{"class":55},"      }, 1000)\n",[49,60406,60407],{"class":51,"line":33840},[49,60408,33550],{"class":55},[49,60410,60411,60413,60415],{"class":51,"line":33846},[49,60412,52506],{"class":55},[49,60414,51902],{"class":51389},[49,60416,51396],{"class":55},[49,60418,60419,60421,60423],{"class":51,"line":33851},[49,60420,51874],{"class":55},[49,60422,51889],{"class":51389},[49,60424,51396],{"class":55},[49,60426,60427],{"class":51,"line":33860},[49,60428,2492],{"emptyLinePlaceholder":151},[49,60430,60431,60433,60435],{"class":51,"line":33870},[49,60432,51874],{"class":55},[49,60434,50724],{"class":51389},[49,60436,51396],{"class":55},[22088,60438,60440],{"id":60439},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60442,60443],{},"小米搜索框案例：",[39,60445,60447],{"className":50722,"code":60446,"language":50724,"meta":44,"style":44},"\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",[46,60448,60449,60459,60473,60477,60485,60499,60519,60539,60551,60559,60565,60575,60585,60597,60601,60605,60612,60616,60627,60631,60635,60642,60653,60666,60680,60684,60688,60697,60709,60721,60735,60748,60761,60779,60790,60794,60798,60807,60824,60828,60832,60839,60849,60859,60870,60883,60895,60911,60922,60934,60938,60942,60950,60961,60978,60990,61002,61013,61017,61021,61032,61043,61047,61055,61059,61067,61071,61079,61094,61117,61132,61163,61190,61217,61244,61271,61298,61325,61334,61342,61350,61355,61375,61395,61400,61405,61423,61428,61438,61443,61457,61462,61467,61484,61493,61505,61509,61517,61525,61529],{"__ignoreMap":44},[49,60450,60451,60453,60455,60457],{"class":51,"line":52},[49,60452,51386],{"class":55},[49,60454,51390],{"class":51389},[49,60456,51393],{"class":2055},[49,60458,51396],{"class":55},[49,60460,60461,60463,60465,60467,60469,60471],{"class":51,"line":84},[49,60462,1129],{"class":55},[49,60464,50724],{"class":51389},[49,60466,51405],{"class":2055},[49,60468,60],{"class":55},[49,60470,51410],{"class":328},[49,60472,51396],{"class":55},[49,60474,60475],{"class":51,"line":109},[49,60476,2492],{"emptyLinePlaceholder":151},[49,60478,60479,60481,60483],{"class":51,"line":120},[49,60480,1129],{"class":55},[49,60482,51423],{"class":51389},[49,60484,51396],{"class":55},[49,60486,60487,60489,60491,60493,60495,60497],{"class":51,"line":135},[49,60488,51430],{"class":55},[49,60490,51433],{"class":51389},[49,60492,51436],{"class":2055},[49,60494,60],{"class":55},[49,60496,51441],{"class":328},[49,60498,51396],{"class":55},[49,60500,60501,60503,60505,60507,60509,60511,60513,60515,60517],{"class":51,"line":1306},[49,60502,51430],{"class":55},[49,60504,51433],{"class":51389},[49,60506,51452],{"class":2055},[49,60508,60],{"class":55},[49,60510,51457],{"class":328},[49,60512,51460],{"class":2055},[49,60514,60],{"class":55},[49,60516,51465],{"class":328},[49,60518,51396],{"class":55},[49,60520,60521,60523,60525,60527,60529,60531,60533,60535,60537],{"class":51,"line":1312},[49,60522,51430],{"class":55},[49,60524,51433],{"class":51389},[49,60526,15010],{"class":2055},[49,60528,60],{"class":55},[49,60530,51480],{"class":328},[49,60532,51460],{"class":2055},[49,60534,60],{"class":55},[49,60536,51487],{"class":328},[49,60538,51396],{"class":55},[49,60540,60541,60543,60545,60547,60549],{"class":51,"line":1403},[49,60542,51430],{"class":55},[49,60544,51496],{"class":51389},[49,60546,51499],{"class":55},[49,60548,51496],{"class":51389},[49,60550,51396],{"class":55},[49,60552,60553,60555,60557],{"class":51,"line":1409},[49,60554,51430],{"class":55},[49,60556,143],{"class":51389},[49,60558,51396],{"class":55},[49,60560,60561,60563],{"class":51,"line":1421},[49,60562,51516],{"class":51389},[49,60564,15662],{"class":55},[49,60566,60567,60569,60571,60573],{"class":51,"line":1704},[49,60568,51523],{"class":66},[49,60570,51526],{"class":55},[49,60572,415],{"class":66},[49,60574,1382],{"class":55},[49,60576,60577,60579,60581,60583],{"class":51,"line":1709},[49,60578,51535],{"class":66},[49,60580,51526],{"class":55},[49,60582,415],{"class":66},[49,60584,1382],{"class":55},[49,60586,60587,60590,60592,60595],{"class":51,"line":1715},[49,60588,60589],{"class":66},"            box-sizing",[49,60591,51526],{"class":55},[49,60593,60594],{"class":66},"border-box",[49,60596,1382],{"class":55},[49,60598,60599],{"class":51,"line":1720},[49,60600,2621],{"class":55},[49,60602,60603],{"class":51,"line":1734},[49,60604,2492],{"emptyLinePlaceholder":151},[49,60606,60607,60610],{"class":51,"line":1739},[49,60608,60609],{"class":51389},"        ul",[49,60611,15662],{"class":55},[49,60613,60614],{"class":51,"line":1745},[49,60615,2492],{"emptyLinePlaceholder":151},[49,60617,60618,60621,60623,60625],{"class":51,"line":1766},[49,60619,60620],{"class":66},"            list-style",[49,60622,51526],{"class":55},[49,60624,54826],{"class":66},[49,60626,1382],{"class":55},[49,60628,60629],{"class":51,"line":1771},[49,60630,2621],{"class":55},[49,60632,60633],{"class":51,"line":1785},[49,60634,2492],{"emptyLinePlaceholder":151},[49,60636,60637,60640],{"class":51,"line":1790},[49,60638,60639],{"class":2055},"        .mi",[49,60641,15662],{"class":55},[49,60643,60644,60647,60649,60651],{"class":51,"line":1819},[49,60645,60646],{"class":66},"            position",[49,60648,51526],{"class":55},[49,60650,54853],{"class":66},[49,60652,1382],{"class":55},[49,60654,60655,60657,60659,60662,60664],{"class":51,"line":1824},[49,60656,51573],{"class":66},[49,60658,51526],{"class":55},[49,60660,60661],{"class":66},"223",[49,60663,51581],{"class":59},[49,60665,1382],{"class":55},[49,60667,60668,60670,60672,60674,60676,60678],{"class":51,"line":1841},[49,60669,51523],{"class":66},[49,60671,51526],{"class":55},[49,60673,533],{"class":66},[49,60675,51581],{"class":59},[49,60677,51645],{"class":66},[49,60679,1382],{"class":55},[49,60681,60682],{"class":51,"line":1846},[49,60683,2621],{"class":55},[49,60685,60686],{"class":51,"line":1851},[49,60687,2492],{"emptyLinePlaceholder":151},[49,60689,60690,60692,60695],{"class":51,"line":1856},[49,60691,60639],{"class":2055},[49,60693,60694],{"class":51389}," input",[49,60696,15662],{"class":55},[49,60698,60699,60701,60703,60705,60707],{"class":51,"line":1870},[49,60700,51573],{"class":66},[49,60702,51526],{"class":55},[49,60704,60661],{"class":66},[49,60706,51581],{"class":59},[49,60708,1382],{"class":55},[49,60710,60711,60713,60715,60717,60719],{"class":51,"line":1875},[49,60712,51588],{"class":66},[49,60714,51526],{"class":55},[49,60716,826],{"class":66},[49,60718,51581],{"class":59},[49,60720,1382],{"class":55},[49,60722,60723,60725,60727,60729,60731,60733],{"class":51,"line":2669},[49,60724,51535],{"class":66},[49,60726,51526],{"class":55},[49,60728,415],{"class":66},[49,60730,2130],{"class":66},[49,60732,51581],{"class":59},[49,60734,1382],{"class":55},[49,60736,60737,60740,60742,60744,60746],{"class":51,"line":2683},[49,60738,60739],{"class":66},"            font-size",[49,60741,51526],{"class":55},[49,60743,768],{"class":66},[49,60745,51581],{"class":59},[49,60747,1382],{"class":55},[49,60749,60750,60753,60755,60757,60759],{"class":51,"line":2691},[49,60751,60752],{"class":66},"            line-height",[49,60754,51526],{"class":55},[49,60756,826],{"class":66},[49,60758,51581],{"class":59},[49,60760,1382],{"class":55},[49,60762,60763,60766,60768,60770,60772,60774,60777],{"class":51,"line":2696},[49,60764,60765],{"class":66},"            border",[49,60767,51526],{"class":55},[49,60769,441],{"class":66},[49,60771,51581],{"class":59},[49,60773,51610],{"class":66},[49,60775,60776],{"class":66}," #e0e0e0",[49,60778,1382],{"class":55},[49,60780,60781,60784,60786,60788],{"class":51,"line":2702},[49,60782,60783],{"class":66},"            outline",[49,60785,51526],{"class":55},[49,60787,54826],{"class":66},[49,60789,1382],{"class":55},[49,60791,60792],{"class":51,"line":2708},[49,60793,2621],{"class":55},[49,60795,60796],{"class":51,"line":2713},[49,60797,2492],{"emptyLinePlaceholder":151},[49,60799,60800,60802,60805],{"class":51,"line":8038},[49,60801,60639],{"class":2055},[49,60803,60804],{"class":2055}," .search",[49,60806,15662],{"class":55},[49,60808,60809,60811,60813,60815,60817,60819,60822],{"class":51,"line":8062},[49,60810,60765],{"class":66},[49,60812,51526],{"class":55},[49,60814,441],{"class":66},[49,60816,51581],{"class":59},[49,60818,51610],{"class":66},[49,60820,60821],{"class":66}," #ff6700",[49,60823,1382],{"class":55},[49,60825,60826],{"class":51,"line":8067},[49,60827,2621],{"class":55},[49,60829,60830],{"class":51,"line":8073},[49,60831,2492],{"emptyLinePlaceholder":151},[49,60833,60834,60837],{"class":51,"line":8100},[49,60835,60836],{"class":2055},"        .result-list",[49,60838,15662],{"class":55},[49,60840,60841,60843,60845,60847],{"class":51,"line":8105},[49,60842,51561],{"class":66},[49,60844,51526],{"class":55},[49,60846,54826],{"class":66},[49,60848,1382],{"class":55},[49,60850,60851,60853,60855,60857],{"class":51,"line":8111},[49,60852,60646],{"class":66},[49,60854,51526],{"class":55},[49,60856,54920],{"class":66},[49,60858,1382],{"class":55},[49,60860,60861,60864,60866,60868],{"class":51,"line":8123},[49,60862,60863],{"class":66},"            left",[49,60865,51526],{"class":55},[49,60867,415],{"class":66},[49,60869,1382],{"class":55},[49,60871,60872,60875,60877,60879,60881],{"class":51,"line":8135},[49,60873,60874],{"class":66},"            top",[49,60876,51526],{"class":55},[49,60878,826],{"class":66},[49,60880,51581],{"class":59},[49,60882,1382],{"class":55},[49,60884,60885,60887,60889,60891,60893],{"class":51,"line":8147},[49,60886,51573],{"class":66},[49,60888,51526],{"class":55},[49,60890,60661],{"class":66},[49,60892,51581],{"class":59},[49,60894,1382],{"class":55},[49,60896,60897,60899,60901,60903,60905,60907,60909],{"class":51,"line":9806},[49,60898,60765],{"class":66},[49,60900,51526],{"class":55},[49,60902,441],{"class":66},[49,60904,51581],{"class":59},[49,60906,51610],{"class":66},[49,60908,60821],{"class":66},[49,60910,1382],{"class":55},[49,60912,60913,60916,60918,60920],{"class":51,"line":9831},[49,60914,60915],{"class":66},"            border-top",[49,60917,51526],{"class":55},[49,60919,415],{"class":66},[49,60921,1382],{"class":55},[49,60923,60924,60927,60929,60932],{"class":51,"line":9854},[49,60925,60926],{"class":66},"            background",[49,60928,51526],{"class":55},[49,60930,60931],{"class":66},"#fff",[49,60933,1382],{"class":55},[49,60935,60936],{"class":51,"line":9878},[49,60937,2621],{"class":55},[49,60939,60940],{"class":51,"line":9883},[49,60941,2492],{"emptyLinePlaceholder":151},[49,60943,60944,60946,60948],{"class":51,"line":9888},[49,60945,60836],{"class":2055},[49,60947,1490],{"class":51389},[49,60949,15662],{"class":55},[49,60951,60952,60954,60956,60959],{"class":51,"line":9893},[49,60953,51561],{"class":66},[49,60955,51526],{"class":55},[49,60957,60958],{"class":66},"block",[49,60960,1382],{"class":55},[49,60962,60963,60965,60967,60969,60971,60974,60976],{"class":51,"line":9902},[49,60964,51535],{"class":66},[49,60966,51526],{"class":55},[49,60968,566],{"class":66},[49,60970,51581],{"class":59},[49,60972,60973],{"class":66}," 15",[49,60975,51581],{"class":59},[49,60977,1382],{"class":55},[49,60979,60980,60982,60984,60986,60988],{"class":51,"line":9907},[49,60981,60739],{"class":66},[49,60983,51526],{"class":55},[49,60985,717],{"class":66},[49,60987,51581],{"class":59},[49,60989,1382],{"class":55},[49,60991,60992,60995,60997,61000],{"class":51,"line":9913},[49,60993,60994],{"class":66},"            color",[49,60996,51526],{"class":55},[49,60998,60999],{"class":66},"#424242",[49,61001,1382],{"class":55},[49,61003,61004,61007,61009,61011],{"class":51,"line":9934},[49,61005,61006],{"class":66},"            text-decoration",[49,61008,51526],{"class":55},[49,61010,54826],{"class":66},[49,61012,1382],{"class":55},[49,61014,61015],{"class":51,"line":9940},[49,61016,2621],{"class":55},[49,61018,61019],{"class":51,"line":9954},[49,61020,2492],{"emptyLinePlaceholder":151},[49,61022,61023,61025,61027,61030],{"class":51,"line":9960},[49,61024,60836],{"class":2055},[49,61026,1490],{"class":51389},[49,61028,61029],{"class":2055},":hover",[49,61031,15662],{"class":55},[49,61033,61034,61036,61038,61041],{"class":51,"line":9987},[49,61035,51729],{"class":66},[49,61037,51526],{"class":55},[49,61039,61040],{"class":66},"#eee",[49,61042,1382],{"class":55},[49,61044,61045],{"class":51,"line":9996},[49,61046,2621],{"class":55},[49,61048,61049,61051,61053],{"class":51,"line":10002},[49,61050,51865],{"class":55},[49,61052,143],{"class":51389},[49,61054,51396],{"class":55},[49,61056,61057],{"class":51,"line":10010},[49,61058,2492],{"emptyLinePlaceholder":151},[49,61060,61061,61063,61065],{"class":51,"line":10015},[49,61062,51874],{"class":55},[49,61064,51423],{"class":51389},[49,61066,51396],{"class":55},[49,61068,61069],{"class":51,"line":16694},[49,61070,2492],{"emptyLinePlaceholder":151},[49,61072,61073,61075,61077],{"class":51,"line":16700},[49,61074,1129],{"class":55},[49,61076,51889],{"class":51389},[49,61078,51396],{"class":55},[49,61080,61081,61083,61085,61087,61089,61092],{"class":51,"line":16723},[49,61082,51430],{"class":55},[49,61084,51700],{"class":51389},[49,61086,53575],{"class":2055},[49,61088,60],{"class":55},[49,61090,61091],{"class":328},"\"mi\"",[49,61093,51396],{"class":55},[49,61095,61096,61098,61100,61102,61104,61107,61110,61112,61115],{"class":51,"line":16729},[49,61097,55391],{"class":55},[49,61099,53910],{"class":51389},[49,61101,53913],{"class":2055},[49,61103,60],{"class":55},[49,61105,61106],{"class":328},"\"search\"",[49,61108,61109],{"class":2055}," placeholder",[49,61111,60],{"class":55},[49,61113,61114],{"class":328},"\"小米笔记本\"",[49,61116,51396],{"class":55},[49,61118,61119,61121,61123,61125,61127,61130],{"class":51,"line":16752},[49,61120,55391],{"class":55},[49,61122,1226],{"class":51389},[49,61124,53575],{"class":2055},[49,61126,60],{"class":55},[49,61128,61129],{"class":328},"\"result-list\"",[49,61131,51396],{"class":55},[49,61133,61134,61137,61139,61142,61144,61147,61149,61152,61155,61157,61159,61161],{"class":51,"line":16766},[49,61135,61136],{"class":55},"            \u003C",[49,61138,181],{"class":51389},[49,61140,61141],{"class":55},">\u003C",[49,61143,56],{"class":51389},[49,61145,61146],{"class":2055}," href",[49,61148,60],{"class":55},[49,61150,61151],{"class":328},"\"#\"",[49,61153,61154],{"class":55},">全部商品\u003C\u002F",[49,61156,56],{"class":51389},[49,61158,55403],{"class":55},[49,61160,181],{"class":51389},[49,61162,51396],{"class":55},[49,61164,61165,61167,61169,61171,61173,61175,61177,61179,61182,61184,61186,61188],{"class":51,"line":16786},[49,61166,61136],{"class":55},[49,61168,181],{"class":51389},[49,61170,61141],{"class":55},[49,61172,56],{"class":51389},[49,61174,61146],{"class":2055},[49,61176,60],{"class":55},[49,61178,61151],{"class":328},[49,61180,61181],{"class":55},">小米11\u003C\u002F",[49,61183,56],{"class":51389},[49,61185,55403],{"class":55},[49,61187,181],{"class":51389},[49,61189,51396],{"class":55},[49,61191,61192,61194,61196,61198,61200,61202,61204,61206,61209,61211,61213,61215],{"class":51,"line":16792},[49,61193,61136],{"class":55},[49,61195,181],{"class":51389},[49,61197,61141],{"class":55},[49,61199,56],{"class":51389},[49,61201,61146],{"class":2055},[49,61203,60],{"class":55},[49,61205,61151],{"class":328},[49,61207,61208],{"class":55},">小米10S\u003C\u002F",[49,61210,56],{"class":51389},[49,61212,55403],{"class":55},[49,61214,181],{"class":51389},[49,61216,51396],{"class":55},[49,61218,61219,61221,61223,61225,61227,61229,61231,61233,61236,61238,61240,61242],{"class":51,"line":16803},[49,61220,61136],{"class":55},[49,61222,181],{"class":51389},[49,61224,61141],{"class":55},[49,61226,56],{"class":51389},[49,61228,61146],{"class":2055},[49,61230,60],{"class":55},[49,61232,61151],{"class":328},[49,61234,61235],{"class":55},">小米笔记本\u003C\u002F",[49,61237,56],{"class":51389},[49,61239,55403],{"class":55},[49,61241,181],{"class":51389},[49,61243,51396],{"class":55},[49,61245,61246,61248,61250,61252,61254,61256,61258,61260,61263,61265,61267,61269],{"class":51,"line":16826},[49,61247,61136],{"class":55},[49,61249,181],{"class":51389},[49,61251,61141],{"class":55},[49,61253,56],{"class":51389},[49,61255,61146],{"class":2055},[49,61257,60],{"class":55},[49,61259,61151],{"class":328},[49,61261,61262],{"class":55},">小米手机\u003C\u002F",[49,61264,56],{"class":51389},[49,61266,55403],{"class":55},[49,61268,181],{"class":51389},[49,61270,51396],{"class":55},[49,61272,61273,61275,61277,61279,61281,61283,61285,61287,61290,61292,61294,61296],{"class":51,"line":16848},[49,61274,61136],{"class":55},[49,61276,181],{"class":51389},[49,61278,61141],{"class":55},[49,61280,56],{"class":51389},[49,61282,61146],{"class":2055},[49,61284,60],{"class":55},[49,61286,61151],{"class":328},[49,61288,61289],{"class":55},">黑鲨4\u003C\u002F",[49,61291,56],{"class":51389},[49,61293,55403],{"class":55},[49,61295,181],{"class":51389},[49,61297,51396],{"class":55},[49,61299,61300,61302,61304,61306,61308,61310,61312,61314,61317,61319,61321,61323],{"class":51,"line":16853},[49,61301,61136],{"class":55},[49,61303,181],{"class":51389},[49,61305,61141],{"class":55},[49,61307,56],{"class":51389},[49,61309,61146],{"class":2055},[49,61311,60],{"class":55},[49,61313,61151],{"class":328},[49,61315,61316],{"class":55},">空调\u003C\u002F",[49,61318,56],{"class":51389},[49,61320,55403],{"class":55},[49,61322,181],{"class":51389},[49,61324,51396],{"class":55},[49,61326,61327,61330,61332],{"class":51,"line":16859},[49,61328,61329],{"class":55},"        \u003C\u002F",[49,61331,1226],{"class":51389},[49,61333,51396],{"class":55},[49,61335,61336,61338,61340],{"class":51,"line":16873},[49,61337,51865],{"class":55},[49,61339,51700],{"class":51389},[49,61341,51396],{"class":55},[49,61343,61344,61346,61348],{"class":51,"line":16886},[49,61345,51430],{"class":55},[49,61347,51902],{"class":51389},[49,61349,51396],{"class":55},[49,61351,61352],{"class":51,"line":16891},[49,61353,61354],{"class":283},"        \u002F\u002F 1. 获取元素\n",[49,61356,61357,61360,61362,61364,61366,61368,61370,61373],{"class":51,"line":16905},[49,61358,61359],{"class":59},"        const",[49,61361,60694],{"class":66},[49,61363,13654],{"class":59},[49,61365,54485],{"class":55},[49,61367,54488],{"class":2055},[49,61369,228],{"class":55},[49,61371,61372],{"class":328},"'[type=search]'",[49,61374,81],{"class":55},[49,61376,61377,61379,61382,61384,61386,61388,61390,61393],{"class":51,"line":16910},[49,61378,61359],{"class":59},[49,61380,61381],{"class":66}," ul",[49,61383,13654],{"class":59},[49,61385,54485],{"class":55},[49,61387,54488],{"class":2055},[49,61389,228],{"class":55},[49,61391,61392],{"class":328},"'.result-list'",[49,61394,81],{"class":55},[49,61396,61397],{"class":51,"line":16916},[49,61398,61399],{"class":283},"        \u002F\u002F console.log(input)\n",[49,61401,61402],{"class":51,"line":16921},[49,61403,61404],{"class":283},"        \u002F\u002F 2. 监听事件 获得焦点\n",[49,61406,61407,61410,61412,61414,61417,61419,61421],{"class":51,"line":16935},[49,61408,61409],{"class":55},"        input.",[49,61411,57902],{"class":2055},[49,61413,228],{"class":55},[49,61415,61416],{"class":328},"'focus'",[49,61418,12525],{"class":55},[49,61420,54538],{"class":59},[49,61422,54541],{"class":55},[49,61424,61425],{"class":51,"line":16940},[49,61426,61427],{"class":283},"            \u002F\u002F ul显示\n",[49,61429,61430,61433,61435],{"class":51,"line":16945},[49,61431,61432],{"class":55},"            ul.style.display ",[49,61434,60],{"class":59},[49,61436,61437],{"class":328}," 'block'\n",[49,61439,61440],{"class":51,"line":16959},[49,61441,61442],{"class":283},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[49,61444,61445,61448,61450,61452,61455],{"class":51,"line":16971},[49,61446,61447],{"class":55},"            input.classList.",[49,61449,5424],{"class":2055},[49,61451,228],{"class":55},[49,61453,61454],{"class":328},"'search'",[49,61456,81],{"class":55},[49,61458,61459],{"class":51,"line":16976},[49,61460,61461],{"class":55},"        })\n",[49,61463,61464],{"class":51,"line":16989},[49,61465,61466],{"class":283},"        \u002F\u002F 3. 监听事件 失去焦点\n",[49,61468,61469,61471,61473,61475,61478,61480,61482],{"class":51,"line":16994},[49,61470,61409],{"class":55},[49,61472,57902],{"class":2055},[49,61474,228],{"class":55},[49,61476,61477],{"class":328},"'blur'",[49,61479,12525],{"class":55},[49,61481,54538],{"class":59},[49,61483,54541],{"class":55},[49,61485,61486,61488,61490],{"class":51,"line":16999},[49,61487,61432],{"class":55},[49,61489,60],{"class":59},[49,61491,61492],{"class":328}," 'none'\n",[49,61494,61495,61497,61499,61501,61503],{"class":51,"line":17004},[49,61496,61447],{"class":55},[49,61498,57095],{"class":2055},[49,61500,228],{"class":55},[49,61502,61454],{"class":328},[49,61504,81],{"class":55},[49,61506,61507],{"class":51,"line":17017},[49,61508,61461],{"class":55},[49,61510,61511,61513,61515],{"class":51,"line":17022},[49,61512,51865],{"class":55},[49,61514,51902],{"class":51389},[49,61516,51396],{"class":55},[49,61518,61519,61521,61523],{"class":51,"line":32722},[49,61520,51874],{"class":55},[49,61522,51889],{"class":51389},[49,61524,51396],{"class":55},[49,61526,61527],{"class":51,"line":32728},[49,61528,2492],{"emptyLinePlaceholder":151},[49,61530,61531,61533,61535],{"class":51,"line":32734},[49,61532,51874],{"class":55},[49,61534,50724],{"class":51389},[49,61536,51396],{"class":55},[22088,61538,61540],{"id":61539},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61542,61543],{},"评论字数统计案例",[14,61545,61546],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61548,61549],{},"牢记focus伪类选择器",[51433,61551],{"charSet":61552},"UTF-8",[51433,61554],{"name":61555,"content":61556},"viewport","width=device-width, initial-scale=1.0",[51496,61558,61559],{},"Document",[143,61561,61562],{},"\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",[53910,61564],{"type":5278},[1226,61566,61567,61570],{},[181,61568,61569],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[181,61571,61572],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[39,61574,61576],{"className":50722,"code":61575,"language":50724,"meta":44,"style":44},"\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",[46,61577,61578,61588,61602,61606,61614,61628,61648,61668,61681,61689,61696,61709,61723,61733,61743,61747,61751,61758,61770,61782,61794,61806,61835,61848,61852,61856,61865,61876,61888,61899,61910,61922,61933,61945,61961,61973,61977,61981,61992,62003,62013,62025,62029,62033,62041,62052,62062,62073,62085,62098,62110,62122,62126,62130,62139,62151,62162,62175,62186,62200,62204,62208,62215,62227,62239,62249,62253,62257,62266,62278,62288,62292,62296,62307,62317,62336,62349,62353,62357,62367,62377,62381,62385,62396,62407,62419,62431,62435,62439,62450,62461,62475,62479,62483,62494,62504,62516,62520,62528,62536,62540,62548,62563,62582,62622,62635,62643,62657,62677,62685,62700,62723,62741,62756,62776,62796,62816,62824,62832,62840,62848,62868,62888,62893,62910,62919,62923,62928,62944,62952,62956,62961,62978,62983,63008,63012,63016,63021,63026,63034,63042,63046],{"__ignoreMap":44},[49,61579,61580,61582,61584,61586],{"class":51,"line":52},[49,61581,51386],{"class":55},[49,61583,51390],{"class":51389},[49,61585,51393],{"class":2055},[49,61587,51396],{"class":55},[49,61589,61590,61592,61594,61596,61598,61600],{"class":51,"line":84},[49,61591,1129],{"class":55},[49,61593,50724],{"class":51389},[49,61595,51405],{"class":2055},[49,61597,60],{"class":55},[49,61599,51410],{"class":328},[49,61601,51396],{"class":55},[49,61603,61604],{"class":51,"line":109},[49,61605,2492],{"emptyLinePlaceholder":151},[49,61607,61608,61610,61612],{"class":51,"line":120},[49,61609,1129],{"class":55},[49,61611,51423],{"class":51389},[49,61613,51396],{"class":55},[49,61615,61616,61618,61620,61622,61624,61626],{"class":51,"line":135},[49,61617,52233],{"class":55},[49,61619,51433],{"class":51389},[49,61621,51436],{"class":2055},[49,61623,60],{"class":55},[49,61625,51441],{"class":328},[49,61627,51396],{"class":55},[49,61629,61630,61632,61634,61636,61638,61640,61642,61644,61646],{"class":51,"line":1306},[49,61631,52233],{"class":55},[49,61633,51433],{"class":51389},[49,61635,51452],{"class":2055},[49,61637,60],{"class":55},[49,61639,51457],{"class":328},[49,61641,51460],{"class":2055},[49,61643,60],{"class":55},[49,61645,51465],{"class":328},[49,61647,51396],{"class":55},[49,61649,61650,61652,61654,61656,61658,61660,61662,61664,61666],{"class":51,"line":1312},[49,61651,52233],{"class":55},[49,61653,51433],{"class":51389},[49,61655,15010],{"class":2055},[49,61657,60],{"class":55},[49,61659,51480],{"class":328},[49,61661,51460],{"class":2055},[49,61663,60],{"class":55},[49,61665,51487],{"class":328},[49,61667,51396],{"class":55},[49,61669,61670,61672,61674,61677,61679],{"class":51,"line":1403},[49,61671,52233],{"class":55},[49,61673,51496],{"class":51389},[49,61675,61676],{"class":55},">评论回车发布\u003C\u002F",[49,61678,51496],{"class":51389},[49,61680,51396],{"class":55},[49,61682,61683,61685,61687],{"class":51,"line":1409},[49,61684,52233],{"class":55},[49,61686,143],{"class":51389},[49,61688,51396],{"class":55},[49,61690,61691,61694],{"class":51,"line":1421},[49,61692,61693],{"class":2055},"    .wrapper",[49,61695,15662],{"class":55},[49,61697,61698,61701,61703,61705,61707],{"class":51,"line":1704},[49,61699,61700],{"class":66},"      min-width",[49,61702,51526],{"class":55},[49,61704,4079],{"class":66},[49,61706,51581],{"class":59},[49,61708,1382],{"class":55},[49,61710,61711,61714,61716,61719,61721],{"class":51,"line":1709},[49,61712,61713],{"class":66},"      max-width",[49,61715,51526],{"class":55},[49,61717,61718],{"class":66},"800",[49,61720,51581],{"class":59},[49,61722,1382],{"class":55},[49,61724,61725,61727,61729,61731],{"class":51,"line":1715},[49,61726,55098],{"class":66},[49,61728,51526],{"class":55},[49,61730,51566],{"class":66},[49,61732,1382],{"class":55},[49,61734,61735,61737,61739,61741],{"class":51,"line":1720},[49,61736,55109],{"class":66},[49,61738,51526],{"class":55},[49,61740,51669],{"class":66},[49,61742,1382],{"class":55},[49,61744,61745],{"class":51,"line":1734},[49,61746,2279],{"class":55},[49,61748,61749],{"class":51,"line":1739},[49,61750,2492],{"emptyLinePlaceholder":151},[49,61752,61753,61756],{"class":51,"line":1745},[49,61754,61755],{"class":2055},"    .avatar",[49,61757,15662],{"class":55},[49,61759,61760,61762,61764,61766,61768],{"class":51,"line":1766},[49,61761,54860],{"class":66},[49,61763,51526],{"class":55},[49,61765,826],{"class":66},[49,61767,51581],{"class":59},[49,61769,1382],{"class":55},[49,61771,61772,61774,61776,61778,61780],{"class":51,"line":1771},[49,61773,54874],{"class":66},[49,61775,51526],{"class":55},[49,61777,826],{"class":66},[49,61779,51581],{"class":59},[49,61781,1382],{"class":55},[49,61783,61784,61786,61788,61790,61792],{"class":51,"line":1785},[49,61785,55223],{"class":66},[49,61787,51526],{"class":55},[49,61789,875],{"class":66},[49,61791,550],{"class":59},[49,61793,1382],{"class":55},[49,61795,61796,61799,61801,61804],{"class":51,"line":1790},[49,61797,61798],{"class":66},"      overflow",[49,61800,51526],{"class":55},[49,61802,61803],{"class":66},"hidden",[49,61805,1382],{"class":55},[49,61807,61808,61811,61813,61816,61818,61821,61823,61826,61828,61830,61833],{"class":51,"line":1819},[49,61809,61810],{"class":66},"      background",[49,61812,51526],{"class":55},[49,61814,61815],{"class":66},"url",[49,61817,228],{"class":55},[49,61819,61820],{"class":126},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[49,61822,13804],{"class":55},[49,61824,61825],{"class":66},"no-repeat",[49,61827,17234],{"class":66},[49,61829,25069],{"class":55},[49,61831,61832],{"class":66},"cover",[49,61834,1382],{"class":55},[49,61836,61837,61840,61842,61844,61846],{"class":51,"line":1824},[49,61838,61839],{"class":66},"      margin-right",[49,61841,51526],{"class":55},[49,61843,919],{"class":66},[49,61845,51581],{"class":59},[49,61847,1382],{"class":55},[49,61849,61850],{"class":51,"line":1841},[49,61851,2279],{"class":55},[49,61853,61854],{"class":51,"line":1846},[49,61855,2492],{"emptyLinePlaceholder":151},[49,61857,61858,61860,61863],{"class":51,"line":1851},[49,61859,61693],{"class":2055},[49,61861,61862],{"class":51389}," textarea",[49,61864,15662],{"class":55},[49,61866,61867,61870,61872,61874],{"class":51,"line":1856},[49,61868,61869],{"class":66},"      outline",[49,61871,51526],{"class":55},[49,61873,54826],{"class":66},[49,61875,1382],{"class":55},[49,61877,61878,61881,61883,61886],{"class":51,"line":1870},[49,61879,61880],{"class":66},"      border-color",[49,61882,51526],{"class":55},[49,61884,61885],{"class":66},"transparent",[49,61887,1382],{"class":55},[49,61889,61890,61893,61895,61897],{"class":51,"line":1875},[49,61891,61892],{"class":66},"      resize",[49,61894,51526],{"class":55},[49,61896,54826],{"class":66},[49,61898,1382],{"class":55},[49,61900,61901,61903,61905,61908],{"class":51,"line":2669},[49,61902,61810],{"class":66},[49,61904,51526],{"class":55},[49,61906,61907],{"class":66},"#f5f5f5",[49,61909,1382],{"class":55},[49,61911,61912,61914,61916,61918,61920],{"class":51,"line":2683},[49,61913,55223],{"class":66},[49,61915,51526],{"class":55},[49,61917,515],{"class":66},[49,61919,51581],{"class":59},[49,61921,1382],{"class":55},[49,61923,61924,61927,61929,61931],{"class":51,"line":2691},[49,61925,61926],{"class":66},"      flex",[49,61928,51526],{"class":55},[49,61930,441],{"class":66},[49,61932,1382],{"class":55},[49,61934,61935,61937,61939,61941,61943],{"class":51,"line":2696},[49,61936,54784],{"class":66},[49,61938,51526],{"class":55},[49,61940,95],{"class":66},[49,61942,51581],{"class":59},[49,61944,1382],{"class":55},[49,61946,61947,61950,61952,61954,61957,61959],{"class":51,"line":2702},[49,61948,61949],{"class":66},"      transition",[49,61951,51526],{"class":55},[49,61953,28212],{"class":66},[49,61955,61956],{"class":66}," 0.5",[49,61958,914],{"class":59},[49,61960,1382],{"class":55},[49,61962,61963,61965,61967,61969,61971],{"class":51,"line":2708},[49,61964,54874],{"class":66},[49,61966,51526],{"class":55},[49,61968,1170],{"class":66},[49,61970,51581],{"class":59},[49,61972,1382],{"class":55},[49,61974,61975],{"class":51,"line":2713},[49,61976,2279],{"class":55},[49,61978,61979],{"class":51,"line":8038},[49,61980,2492],{"emptyLinePlaceholder":151},[49,61982,61983,61985,61987,61990],{"class":51,"line":8062},[49,61984,61693],{"class":2055},[49,61986,61862],{"class":51389},[49,61988,61989],{"class":2055},":focus",[49,61991,15662],{"class":55},[49,61993,61994,61996,61998,62001],{"class":51,"line":8067},[49,61995,61880],{"class":66},[49,61997,51526],{"class":55},[49,61999,62000],{"class":66},"#e4e4e4",[49,62002,1382],{"class":55},[49,62004,62005,62007,62009,62011],{"class":51,"line":8073},[49,62006,61810],{"class":66},[49,62008,51526],{"class":55},[49,62010,60931],{"class":66},[49,62012,1382],{"class":55},[49,62014,62015,62017,62019,62021,62023],{"class":51,"line":8100},[49,62016,54874],{"class":66},[49,62018,51526],{"class":55},[49,62020,875],{"class":66},[49,62022,51581],{"class":59},[49,62024,1382],{"class":55},[49,62026,62027],{"class":51,"line":8105},[49,62028,2279],{"class":55},[49,62030,62031],{"class":51,"line":8111},[49,62032,2492],{"emptyLinePlaceholder":151},[49,62034,62035,62037,62039],{"class":51,"line":8123},[49,62036,61693],{"class":2055},[49,62038,57556],{"class":51389},[49,62040,15662],{"class":55},[49,62042,62043,62045,62047,62050],{"class":51,"line":8135},[49,62044,61810],{"class":66},[49,62046,51526],{"class":55},[49,62048,62049],{"class":66},"#00aeec",[49,62051,1382],{"class":55},[49,62053,62054,62056,62058,62060],{"class":51,"line":8147},[49,62055,57505],{"class":66},[49,62057,51526],{"class":55},[49,62059,60931],{"class":66},[49,62061,1382],{"class":55},[49,62063,62064,62067,62069,62071],{"class":51,"line":9806},[49,62065,62066],{"class":66},"      border",[49,62068,51526],{"class":55},[49,62070,54826],{"class":66},[49,62072,1382],{"class":55},[49,62074,62075,62077,62079,62081,62083],{"class":51,"line":9831},[49,62076,55223],{"class":66},[49,62078,51526],{"class":55},[49,62080,515],{"class":66},[49,62082,51581],{"class":59},[49,62084,1382],{"class":55},[49,62086,62087,62090,62092,62094,62096],{"class":51,"line":9854},[49,62088,62089],{"class":66},"      margin-left",[49,62091,51526],{"class":55},[49,62093,95],{"class":66},[49,62095,51581],{"class":59},[49,62097,1382],{"class":55},[49,62099,62100,62102,62104,62106,62108],{"class":51,"line":9878},[49,62101,54860],{"class":66},[49,62103,51526],{"class":55},[49,62105,578],{"class":66},[49,62107,51581],{"class":59},[49,62109,1382],{"class":55},[49,62111,62112,62115,62117,62120],{"class":51,"line":9883},[49,62113,62114],{"class":66},"      cursor",[49,62116,51526],{"class":55},[49,62118,62119],{"class":66},"pointer",[49,62121,1382],{"class":55},[49,62123,62124],{"class":51,"line":9888},[49,62125,2279],{"class":55},[49,62127,62128],{"class":51,"line":9893},[49,62129,2492],{"emptyLinePlaceholder":151},[49,62131,62132,62134,62137],{"class":51,"line":9902},[49,62133,61693],{"class":2055},[49,62135,62136],{"class":2055}," .total",[49,62138,15662],{"class":55},[49,62140,62141,62143,62145,62147,62149],{"class":51,"line":9907},[49,62142,61839],{"class":66},[49,62144,51526],{"class":55},[49,62146,831],{"class":66},[49,62148,51581],{"class":59},[49,62150,1382],{"class":55},[49,62152,62153,62155,62157,62160],{"class":51,"line":9913},[49,62154,57505],{"class":66},[49,62156,51526],{"class":55},[49,62158,62159],{"class":66},"#999",[49,62161,1382],{"class":55},[49,62163,62164,62167,62169,62171,62173],{"class":51,"line":9934},[49,62165,62166],{"class":66},"      margin-top",[49,62168,51526],{"class":55},[49,62170,541],{"class":66},[49,62172,51581],{"class":59},[49,62174,1382],{"class":55},[49,62176,62177,62180,62182,62184],{"class":51,"line":9940},[49,62178,62179],{"class":66},"      opacity",[49,62181,51526],{"class":55},[49,62183,415],{"class":66},[49,62185,1382],{"class":55},[49,62187,62188,62190,62192,62194,62196,62198],{"class":51,"line":9954},[49,62189,61949],{"class":66},[49,62191,51526],{"class":55},[49,62193,28212],{"class":66},[49,62195,61956],{"class":66},[49,62197,914],{"class":59},[49,62199,1382],{"class":55},[49,62201,62202],{"class":51,"line":9960},[49,62203,2279],{"class":55},[49,62205,62206],{"class":51,"line":9987},[49,62207,2492],{"emptyLinePlaceholder":151},[49,62209,62210,62213],{"class":51,"line":9996},[49,62211,62212],{"class":2055},"    .list",[49,62214,15662],{"class":55},[49,62216,62217,62219,62221,62223,62225],{"class":51,"line":10002},[49,62218,61700],{"class":66},[49,62220,51526],{"class":55},[49,62222,4079],{"class":66},[49,62224,51581],{"class":59},[49,62226,1382],{"class":55},[49,62228,62229,62231,62233,62235,62237],{"class":51,"line":10010},[49,62230,61713],{"class":66},[49,62232,51526],{"class":55},[49,62234,61718],{"class":66},[49,62236,51581],{"class":59},[49,62238,1382],{"class":55},[49,62240,62241,62243,62245,62247],{"class":51,"line":10015},[49,62242,55098],{"class":66},[49,62244,51526],{"class":55},[49,62246,51566],{"class":66},[49,62248,1382],{"class":55},[49,62250,62251],{"class":51,"line":16694},[49,62252,2279],{"class":55},[49,62254,62255],{"class":51,"line":16700},[49,62256,2492],{"emptyLinePlaceholder":151},[49,62258,62259,62261,62264],{"class":51,"line":16723},[49,62260,62212],{"class":2055},[49,62262,62263],{"class":2055}," .item",[49,62265,15662],{"class":55},[49,62267,62268,62270,62272,62274,62276],{"class":51,"line":16729},[49,62269,54860],{"class":66},[49,62271,51526],{"class":55},[49,62273,533],{"class":66},[49,62275,550],{"class":59},[49,62277,1382],{"class":55},[49,62279,62280,62282,62284,62286],{"class":51,"line":16752},[49,62281,55098],{"class":66},[49,62283,51526],{"class":55},[49,62285,51566],{"class":66},[49,62287,1382],{"class":55},[49,62289,62290],{"class":51,"line":16766},[49,62291,2279],{"class":55},[49,62293,62294],{"class":51,"line":16786},[49,62295,2492],{"emptyLinePlaceholder":151},[49,62297,62298,62300,62302,62305],{"class":51,"line":16792},[49,62299,62212],{"class":2055},[49,62301,62263],{"class":2055},[49,62303,62304],{"class":2055}," .info",[49,62306,15662],{"class":55},[49,62308,62309,62311,62313,62315],{"class":51,"line":16803},[49,62310,61926],{"class":66},[49,62312,51526],{"class":55},[49,62314,441],{"class":66},[49,62316,1382],{"class":55},[49,62318,62319,62322,62324,62326,62328,62331,62334],{"class":51,"line":16826},[49,62320,62321],{"class":66},"      border-bottom",[49,62323,51526],{"class":55},[49,62325,441],{"class":66},[49,62327,51581],{"class":59},[49,62329,62330],{"class":66}," dashed",[49,62332,62333],{"class":66}," #e4e4e4",[49,62335,1382],{"class":55},[49,62337,62338,62341,62343,62345,62347],{"class":51,"line":16848},[49,62339,62340],{"class":66},"      padding-bottom",[49,62342,51526],{"class":55},[49,62344,95],{"class":66},[49,62346,51581],{"class":59},[49,62348,1382],{"class":55},[49,62350,62351],{"class":51,"line":16853},[49,62352,2279],{"class":55},[49,62354,62355],{"class":51,"line":16859},[49,62356,2492],{"emptyLinePlaceholder":151},[49,62358,62359,62361,62363,62365],{"class":51,"line":16873},[49,62360,62212],{"class":2055},[49,62362,62263],{"class":2055},[49,62364,6915],{"class":51389},[49,62366,15662],{"class":55},[49,62368,62369,62371,62373,62375],{"class":51,"line":16886},[49,62370,54795],{"class":66},[49,62372,51526],{"class":55},[49,62374,415],{"class":66},[49,62376,1382],{"class":55},[49,62378,62379],{"class":51,"line":16891},[49,62380,2279],{"class":55},[49,62382,62383],{"class":51,"line":16905},[49,62384,2492],{"emptyLinePlaceholder":151},[49,62386,62387,62389,62391,62394],{"class":51,"line":16910},[49,62388,62212],{"class":2055},[49,62390,62263],{"class":2055},[49,62392,62393],{"class":2055}," .name",[49,62395,15662],{"class":55},[49,62397,62398,62400,62402,62405],{"class":51,"line":16916},[49,62399,57505],{"class":66},[49,62401,51526],{"class":55},[49,62403,62404],{"class":66},"#FB7299",[49,62406,1382],{"class":55},[49,62408,62409,62411,62413,62415,62417],{"class":51,"line":16921},[49,62410,55011],{"class":66},[49,62412,51526],{"class":55},[49,62414,768],{"class":66},[49,62416,51581],{"class":59},[49,62418,1382],{"class":55},[49,62420,62421,62424,62426,62429],{"class":51,"line":16935},[49,62422,62423],{"class":66},"      font-weight",[49,62425,51526],{"class":55},[49,62427,62428],{"class":66},"bold",[49,62430,1382],{"class":55},[49,62432,62433],{"class":51,"line":16940},[49,62434,2279],{"class":55},[49,62436,62437],{"class":51,"line":16945},[49,62438,2492],{"emptyLinePlaceholder":151},[49,62440,62441,62443,62445,62448],{"class":51,"line":16959},[49,62442,62212],{"class":2055},[49,62444,62263],{"class":2055},[49,62446,62447],{"class":2055}," .text",[49,62449,15662],{"class":55},[49,62451,62452,62454,62456,62459],{"class":51,"line":16971},[49,62453,57505],{"class":66},[49,62455,51526],{"class":55},[49,62457,62458],{"class":66},"#333",[49,62460,1382],{"class":55},[49,62462,62463,62465,62467,62469,62471,62473],{"class":51,"line":16976},[49,62464,54784],{"class":66},[49,62466,51526],{"class":55},[49,62468,95],{"class":66},[49,62470,51581],{"class":59},[49,62472,4185],{"class":66},[49,62474,1382],{"class":55},[49,62476,62477],{"class":51,"line":16989},[49,62478,2279],{"class":55},[49,62480,62481],{"class":51,"line":16994},[49,62482,2492],{"emptyLinePlaceholder":151},[49,62484,62485,62487,62489,62492],{"class":51,"line":16999},[49,62486,62212],{"class":2055},[49,62488,62263],{"class":2055},[49,62490,62491],{"class":2055}," .time",[49,62493,15662],{"class":55},[49,62495,62496,62498,62500,62502],{"class":51,"line":17004},[49,62497,57505],{"class":66},[49,62499,51526],{"class":55},[49,62501,62159],{"class":66},[49,62503,1382],{"class":55},[49,62505,62506,62508,62510,62512,62514],{"class":51,"line":17017},[49,62507,55011],{"class":66},[49,62509,51526],{"class":55},[49,62511,717],{"class":66},[49,62513,51581],{"class":59},[49,62515,1382],{"class":55},[49,62517,62518],{"class":51,"line":17022},[49,62519,2279],{"class":55},[49,62521,62522,62524,62526],{"class":51,"line":32722},[49,62523,52506],{"class":55},[49,62525,143],{"class":51389},[49,62527,51396],{"class":55},[49,62529,62530,62532,62534],{"class":51,"line":32728},[49,62531,51874],{"class":55},[49,62533,51423],{"class":51389},[49,62535,51396],{"class":55},[49,62537,62538],{"class":51,"line":32734},[49,62539,2492],{"emptyLinePlaceholder":151},[49,62541,62542,62544,62546],{"class":51,"line":32740},[49,62543,1129],{"class":55},[49,62545,51889],{"class":51389},[49,62547,51396],{"class":55},[49,62549,62550,62552,62554,62556,62558,62561],{"class":51,"line":32746},[49,62551,52233],{"class":55},[49,62553,51700],{"class":51389},[49,62555,53575],{"class":2055},[49,62557,60],{"class":55},[49,62559,62560],{"class":328},"\"wrapper\"",[49,62562,51396],{"class":55},[49,62564,62565,62567,62569,62571,62573,62576,62578,62580],{"class":51,"line":32757},[49,62566,51430],{"class":55},[49,62568,661],{"class":51389},[49,62570,53575],{"class":2055},[49,62572,60],{"class":55},[49,62574,62575],{"class":328},"\"avatar\"",[49,62577,55403],{"class":55},[49,62579,661],{"class":51389},[49,62581,51396],{"class":55},[49,62583,62584,62586,62588,62590,62592,62595,62597,62599,62602,62604,62606,62608,62611,62613,62616,62618,62620],{"class":51,"line":32763},[49,62585,51430],{"class":55},[49,62587,54377],{"class":51389},[49,62589,15049],{"class":2055},[49,62591,60],{"class":55},[49,62593,62594],{"class":328},"\"tx\"",[49,62596,61109],{"class":2055},[49,62598,60],{"class":55},[49,62600,62601],{"class":328},"\"发一条友善的评论\"",[49,62603,54400],{"class":2055},[49,62605,60],{"class":55},[49,62607,3793],{"class":328},[49,62609,62610],{"class":2055}," maxlength",[49,62612,60],{"class":55},[49,62614,62615],{"class":328},"\"200\"",[49,62617,55403],{"class":55},[49,62619,54377],{"class":51389},[49,62621,51396],{"class":55},[49,62623,62624,62626,62628,62631,62633],{"class":51,"line":32783},[49,62625,51430],{"class":55},[49,62627,53976],{"class":51389},[49,62629,62630],{"class":55},">发布\u003C\u002F",[49,62632,53976],{"class":51389},[49,62634,51396],{"class":55},[49,62636,62637,62639,62641],{"class":51,"line":32789},[49,62638,52506],{"class":55},[49,62640,51700],{"class":51389},[49,62642,51396],{"class":55},[49,62644,62645,62647,62649,62651,62653,62655],{"class":51,"line":32800},[49,62646,52233],{"class":55},[49,62648,51700],{"class":51389},[49,62650,53575],{"class":2055},[49,62652,60],{"class":55},[49,62654,62560],{"class":328},[49,62656,51396],{"class":55},[49,62658,62659,62661,62663,62665,62667,62670,62673,62675],{"class":51,"line":32806},[49,62660,51430],{"class":55},[49,62662,49],{"class":51389},[49,62664,53575],{"class":2055},[49,62666,60],{"class":55},[49,62668,62669],{"class":328},"\"total\"",[49,62671,62672],{"class":55},">0\u002F200字\u003C\u002F",[49,62674,49],{"class":51389},[49,62676,51396],{"class":55},[49,62678,62679,62681,62683],{"class":51,"line":32812},[49,62680,52506],{"class":55},[49,62682,51700],{"class":51389},[49,62684,51396],{"class":55},[49,62686,62687,62689,62691,62693,62695,62698],{"class":51,"line":32818},[49,62688,52233],{"class":55},[49,62690,51700],{"class":51389},[49,62692,53575],{"class":2055},[49,62694,60],{"class":55},[49,62696,62697],{"class":328},"\"list\"",[49,62699,51396],{"class":55},[49,62701,62702,62704,62706,62708,62710,62713,62716,62718,62721],{"class":51,"line":32824},[49,62703,51430],{"class":55},[49,62705,51700],{"class":51389},[49,62707,53575],{"class":2055},[49,62709,60],{"class":55},[49,62711,62712],{"class":328},"\"item\"",[49,62714,62715],{"class":2055}," style",[49,62717,60],{"class":55},[49,62719,62720],{"class":328},"\"display: none;\"",[49,62722,51396],{"class":55},[49,62724,62725,62727,62729,62731,62733,62735,62737,62739],{"class":51,"line":32830},[49,62726,55323],{"class":55},[49,62728,661],{"class":51389},[49,62730,53575],{"class":2055},[49,62732,60],{"class":55},[49,62734,62575],{"class":328},[49,62736,55403],{"class":55},[49,62738,661],{"class":51389},[49,62740,51396],{"class":55},[49,62742,62743,62745,62747,62749,62751,62754],{"class":51,"line":32836},[49,62744,55323],{"class":55},[49,62746,51700],{"class":51389},[49,62748,53575],{"class":2055},[49,62750,60],{"class":55},[49,62752,62753],{"class":328},"\"info\"",[49,62755,51396],{"class":55},[49,62757,62758,62760,62762,62764,62766,62769,62772,62774],{"class":51,"line":32842},[49,62759,55391],{"class":55},[49,62761,14],{"class":51389},[49,62763,53575],{"class":2055},[49,62765,60],{"class":55},[49,62767,62768],{"class":328},"\"name\"",[49,62770,62771],{"class":55},">清风徐来\u003C\u002F",[49,62773,14],{"class":51389},[49,62775,51396],{"class":55},[49,62777,62778,62780,62782,62784,62786,62789,62792,62794],{"class":51,"line":32862},[49,62779,55391],{"class":55},[49,62781,14],{"class":51389},[49,62783,53575],{"class":2055},[49,62785,60],{"class":55},[49,62787,62788],{"class":328},"\"text\"",[49,62790,62791],{"class":55},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[49,62793,14],{"class":51389},[49,62795,51396],{"class":55},[49,62797,62798,62800,62802,62804,62806,62809,62812,62814],{"class":51,"line":32868},[49,62799,55391],{"class":55},[49,62801,14],{"class":51389},[49,62803,53575],{"class":2055},[49,62805,60],{"class":55},[49,62807,62808],{"class":328},"\"time\"",[49,62810,62811],{"class":55},">2022-10-10 20:29:21\u003C\u002F",[49,62813,14],{"class":51389},[49,62815,51396],{"class":55},[49,62817,62818,62820,62822],{"class":51,"line":32884},[49,62819,55496],{"class":55},[49,62821,51700],{"class":51389},[49,62823,51396],{"class":55},[49,62825,62826,62828,62830],{"class":51,"line":32890},[49,62827,51865],{"class":55},[49,62829,51700],{"class":51389},[49,62831,51396],{"class":55},[49,62833,62834,62836,62838],{"class":51,"line":32904},[49,62835,52506],{"class":55},[49,62837,51700],{"class":51389},[49,62839,51396],{"class":55},[49,62841,62842,62844,62846],{"class":51,"line":32910},[49,62843,52233],{"class":55},[49,62845,51902],{"class":51389},[49,62847,51396],{"class":55},[49,62849,62850,62852,62855,62857,62859,62861,62863,62866],{"class":51,"line":32925},[49,62851,11311],{"class":59},[49,62853,62854],{"class":66}," tx",[49,62856,13654],{"class":59},[49,62858,54485],{"class":55},[49,62860,54488],{"class":2055},[49,62862,228],{"class":55},[49,62864,62865],{"class":328},"'#tx'",[49,62867,81],{"class":55},[49,62869,62870,62872,62875,62877,62879,62881,62883,62886],{"class":51,"line":32931},[49,62871,11311],{"class":59},[49,62873,62874],{"class":66}," total",[49,62876,13654],{"class":59},[49,62878,54485],{"class":55},[49,62880,54488],{"class":2055},[49,62882,228],{"class":55},[49,62884,62885],{"class":328},"'.total'",[49,62887,81],{"class":55},[49,62889,62890],{"class":51,"line":32940},[49,62891,62892],{"class":283},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[49,62894,62895,62898,62900,62902,62904,62906,62908],{"class":51,"line":32946},[49,62896,62897],{"class":55},"    tx.",[49,62899,57902],{"class":2055},[49,62901,228],{"class":55},[49,62903,61416],{"class":328},[49,62905,12525],{"class":55},[49,62907,54538],{"class":59},[49,62909,54541],{"class":55},[49,62911,62912,62915,62917],{"class":51,"line":32955},[49,62913,62914],{"class":55},"      total.style.opacity ",[49,62916,60],{"class":59},[49,62918,55788],{"class":66},[49,62920,62921],{"class":51,"line":32961},[49,62922,33550],{"class":55},[49,62924,62925],{"class":51,"line":32967},[49,62926,62927],{"class":283},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[49,62929,62930,62932,62934,62936,62938,62940,62942],{"class":51,"line":32976},[49,62931,62897],{"class":55},[49,62933,57902],{"class":2055},[49,62935,228],{"class":55},[49,62937,61477],{"class":328},[49,62939,12525],{"class":55},[49,62941,54538],{"class":59},[49,62943,54541],{"class":55},[49,62945,62946,62948,62950],{"class":51,"line":32982},[49,62947,62914],{"class":55},[49,62949,60],{"class":59},[49,62951,47422],{"class":66},[49,62953,62954],{"class":51,"line":32993},[49,62955,33550],{"class":55},[49,62957,62958],{"class":51,"line":32999},[49,62959,62960],{"class":283},"    \u002F\u002F 3. 检测用户输入\n",[49,62962,62963,62965,62967,62969,62972,62974,62976],{"class":51,"line":33018},[49,62964,62897],{"class":55},[49,62966,57902],{"class":2055},[49,62968,228],{"class":55},[49,62970,62971],{"class":328},"'input'",[49,62973,12525],{"class":55},[49,62975,54538],{"class":59},[49,62977,54541],{"class":55},[49,62979,62980],{"class":51,"line":33024},[49,62981,62982],{"class":283},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[49,62984,62985,62988,62990,62993,62996,62998,63001,63003,63005],{"class":51,"line":33035},[49,62986,62987],{"class":55},"      total.innerHTML ",[49,62989,60],{"class":59},[49,62991,62992],{"class":328}," `${",[49,62994,62995],{"class":55},"tx",[49,62997,777],{"class":328},[49,62999,63000],{"class":55},"value",[49,63002,777],{"class":328},[49,63004,52057],{"class":66},[49,63006,63007],{"class":328},"}\u002F200字`\n",[49,63009,63010],{"class":51,"line":33041},[49,63011,33550],{"class":55},[49,63013,63014],{"class":51,"line":33061},[49,63015,2492],{"emptyLinePlaceholder":151},[49,63017,63018],{"class":51,"line":33077},[49,63019,63020],{"class":283},"    \u002F\u002F const str = 'andy'\n",[49,63022,63023],{"class":51,"line":33083},[49,63024,63025],{"class":283},"    \u002F\u002F console.log(str.length)\n",[49,63027,63028,63030,63032],{"class":51,"line":33097},[49,63029,52506],{"class":55},[49,63031,51902],{"class":51389},[49,63033,51396],{"class":55},[49,63035,63036,63038,63040],{"class":51,"line":33103},[49,63037,51874],{"class":55},[49,63039,51889],{"class":51389},[49,63041,51396],{"class":55},[49,63043,63044],{"class":51,"line":33109},[49,63045,2492],{"emptyLinePlaceholder":151},[49,63047,63048,63050,63052],{"class":51,"line":33120},[49,63049,51874],{"class":55},[49,63051,50724],{"class":51389},[49,63053,51396],{"class":55},[22088,63055,63057],{"id":63056},"_3254-change事件","3.2.5.4 change事件",[14,63059,63060],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63062,63063],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63065,63066],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[39,63068,63070],{"className":50722,"code":63069,"language":50724,"meta":44,"style":44},"\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",[46,63071,63072,63082,63096,63100,63108,63122,63142,63154,63162,63166,63174,63188,63196,63214,63232,63244,63248,63256,63264,63268],{"__ignoreMap":44},[49,63073,63074,63076,63078,63080],{"class":51,"line":52},[49,63075,51386],{"class":55},[49,63077,51390],{"class":51389},[49,63079,51393],{"class":2055},[49,63081,51396],{"class":55},[49,63083,63084,63086,63088,63090,63092,63094],{"class":51,"line":84},[49,63085,1129],{"class":55},[49,63087,50724],{"class":51389},[49,63089,51405],{"class":2055},[49,63091,60],{"class":55},[49,63093,51410],{"class":328},[49,63095,51396],{"class":55},[49,63097,63098],{"class":51,"line":109},[49,63099,2492],{"emptyLinePlaceholder":151},[49,63101,63102,63104,63106],{"class":51,"line":120},[49,63103,1129],{"class":55},[49,63105,51423],{"class":51389},[49,63107,51396],{"class":55},[49,63109,63110,63112,63114,63116,63118,63120],{"class":51,"line":135},[49,63111,52233],{"class":55},[49,63113,51433],{"class":51389},[49,63115,51436],{"class":2055},[49,63117,60],{"class":55},[49,63119,51441],{"class":328},[49,63121,51396],{"class":55},[49,63123,63124,63126,63128,63130,63132,63134,63136,63138,63140],{"class":51,"line":1306},[49,63125,52233],{"class":55},[49,63127,51433],{"class":51389},[49,63129,15010],{"class":2055},[49,63131,60],{"class":55},[49,63133,51480],{"class":328},[49,63135,51460],{"class":2055},[49,63137,60],{"class":55},[49,63139,51487],{"class":328},[49,63141,51396],{"class":55},[49,63143,63144,63146,63148,63150,63152],{"class":51,"line":1312},[49,63145,52233],{"class":55},[49,63147,51496],{"class":51389},[49,63149,51499],{"class":55},[49,63151,51496],{"class":51389},[49,63153,51396],{"class":55},[49,63155,63156,63158,63160],{"class":51,"line":1403},[49,63157,51874],{"class":55},[49,63159,51423],{"class":51389},[49,63161,51396],{"class":55},[49,63163,63164],{"class":51,"line":1409},[49,63165,2492],{"emptyLinePlaceholder":151},[49,63167,63168,63170,63172],{"class":51,"line":1421},[49,63169,1129],{"class":55},[49,63171,51889],{"class":51389},[49,63173,51396],{"class":55},[49,63175,63176,63178,63180,63182,63184,63186],{"class":51,"line":1704},[49,63177,52233],{"class":55},[49,63179,53910],{"class":51389},[49,63181,53913],{"class":2055},[49,63183,60],{"class":55},[49,63185,62788],{"class":328},[49,63187,51396],{"class":55},[49,63189,63190,63192,63194],{"class":51,"line":1709},[49,63191,52233],{"class":55},[49,63193,51902],{"class":51389},[49,63195,51396],{"class":55},[49,63197,63198,63200,63202,63204,63206,63208,63210,63212],{"class":51,"line":1715},[49,63199,11311],{"class":59},[49,63201,60694],{"class":66},[49,63203,13654],{"class":59},[49,63205,54485],{"class":55},[49,63207,54488],{"class":2055},[49,63209,228],{"class":55},[49,63211,62971],{"class":328},[49,63213,81],{"class":55},[49,63215,63216,63219,63221,63223,63226,63228,63230],{"class":51,"line":1720},[49,63217,63218],{"class":55},"    input.",[49,63220,57902],{"class":2055},[49,63222,228],{"class":55},[49,63224,63225],{"class":328},"'change'",[49,63227,12525],{"class":55},[49,63229,54538],{"class":59},[49,63231,54541],{"class":55},[49,63233,63234,63236,63238,63240,63242],{"class":51,"line":1734},[49,63235,58333],{"class":55},[49,63237,58336],{"class":2055},[49,63239,228],{"class":55},[49,63241,812],{"class":66},[49,63243,81],{"class":55},[49,63245,63246],{"class":51,"line":1739},[49,63247,33550],{"class":55},[49,63249,63250,63252,63254],{"class":51,"line":1745},[49,63251,52506],{"class":55},[49,63253,51902],{"class":51389},[49,63255,51396],{"class":55},[49,63257,63258,63260,63262],{"class":51,"line":1766},[49,63259,51874],{"class":55},[49,63261,51889],{"class":51389},[49,63263,51396],{"class":55},[49,63265,63266],{"class":51,"line":1771},[49,63267,2492],{"emptyLinePlaceholder":151},[49,63269,63270,63272,63274],{"class":51,"line":1785},[49,63271,51874],{"class":55},[49,63273,50724],{"class":51389},[49,63275,51396],{"class":55},[14,63277,63278],{},"总结：内容发生改变才回去触发",[195,63280,63282],{"id":63281},"_326-事件对象","3.2.6 事件对象",[22088,63284,63286],{"id":63285},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63288,63289],{},[1554,63290],{"alt":44,"src":63291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63293,63294],{},[1554,63295],{"alt":44,"src":63296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63298,63299],{},"点击一次，就输出了事件对象，它是个对象",[14,63301,63302],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63304,63305],{},[1554,63306],{"alt":44,"src":63307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22088,63309,63311],{"id":63310},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63313,63314],{},[1554,63315],{"alt":44,"src":63316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63318,63319],{},"实现按特殊字符才是实现打印输出效果：",[39,63321,63323],{"className":53156,"code":63322,"language":53158,"meta":44,"style":44},"\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",[46,63324,63325,63333,63338,63352,63360,63365,63370,63375,63380,63385,63390,63395,63400,63405,63409,63413,63421],{"__ignoreMap":44},[49,63326,63327,63329,63331],{"class":51,"line":52},[49,63328,1129],{"class":55},[49,63330,51889],{"class":51389},[49,63332,51396],{"class":55},[49,63334,63335],{"class":51,"line":84},[49,63336,63337],{"class":283},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[49,63339,63340,63342,63344,63346,63348,63350],{"class":51,"line":109},[49,63341,52233],{"class":55},[49,63343,53910],{"class":51389},[49,63345,53913],{"class":2055},[49,63347,60],{"class":55},[49,63349,62788],{"class":328},[49,63351,51396],{"class":55},[49,63353,63354,63356,63358],{"class":51,"line":120},[49,63355,52233],{"class":55},[49,63357,51902],{"class":51389},[49,63359,51396],{"class":55},[49,63361,63362],{"class":51,"line":135},[49,63363,63364],{"class":55},"    \u002F\u002F const btn = document.querySelector('button')\n",[49,63366,63367],{"class":51,"line":1306},[49,63368,63369],{"class":55},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[49,63371,63372],{"class":51,"line":1312},[49,63373,63374],{"class":55},"    \u002F\u002F   console.log(e);\n",[49,63376,63377],{"class":51,"line":1403},[49,63378,63379],{"class":55},"    \u002F\u002F })\n",[49,63381,63382],{"class":51,"line":1409},[49,63383,63384],{"class":55},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[49,63386,63387],{"class":51,"line":1421},[49,63388,63389],{"class":55},"    const input = document.querySelector('input')\n",[49,63391,63392],{"class":51,"line":1704},[49,63393,63394],{"class":55},"    input.addEventListener('keyup', function (e) {\n",[49,63396,63397],{"class":51,"line":1709},[49,63398,63399],{"class":55},"      if (e.key === 'Enter') {\n",[49,63401,63402],{"class":51,"line":1715},[49,63403,63404],{"class":55},"        console.log('我按下了回车键')\n",[49,63406,63407],{"class":51,"line":1720},[49,63408,52487],{"class":55},[49,63410,63411],{"class":51,"line":1734},[49,63412,33550],{"class":55},[49,63414,63415,63417,63419],{"class":51,"line":1739},[49,63416,52506],{"class":55},[49,63418,51902],{"class":51389},[49,63420,51396],{"class":55},[49,63422,63423,63425,63427],{"class":51,"line":1745},[49,63424,51874],{"class":55},[49,63426,51889],{"class":51389},[49,63428,51396],{"class":55},[22088,63430,63432],{"id":63431},"_3263-trim方法","3.2.6.3 trim方法",[14,63434,63435],{},[1554,63436],{"alt":44,"src":63437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63439,63440],{},[1554,63441],{"alt":44,"src":63442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63444,63445],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63447,63448],{},"str.trim()",[195,63450,63452],{"id":63451},"_327-环境对象","3.2.7 环境对象",[14,63454,63455],{},[1554,63456],{"alt":44,"src":63457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63459,63460],{},[1554,63461],{"alt":44,"src":63462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63464,63465],{},[1554,63466],{"alt":44,"src":63467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63469,63470],{},"实际函数调用是window.fn()",[14,63472,63473],{},"普通函数里面this指向的是window",[1226,63475,63476,63479,63482],{},[181,63477,63478],{},"在普通函数下，this指向的是window",[181,63480,63481],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[181,63483,63484],{},"箭头函数没有this",[14,63486,63487],{},"粗略记法就是：谁调用，this就指向谁",[14,63489,63490],{},[1554,63491],{"alt":44,"src":63492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63494,63495],{},[1554,63496],{"alt":44,"src":63497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63499,63500],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63502,63503],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[39,63505,63507],{"className":53156,"code":63506,"language":53158,"meta":44,"style":44},"\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",[46,63508,63509,63517,63529,63537,63542,63547,63552,63557,63561,63569],{"__ignoreMap":44},[49,63510,63511,63513,63515],{"class":51,"line":52},[49,63512,1129],{"class":55},[49,63514,51889],{"class":51389},[49,63516,51396],{"class":55},[49,63518,63519,63521,63523,63525,63527],{"class":51,"line":84},[49,63520,52233],{"class":55},[49,63522,53976],{"class":51389},[49,63524,53982],{"class":55},[49,63526,53976],{"class":51389},[49,63528,51396],{"class":55},[49,63530,63531,63533,63535],{"class":51,"line":109},[49,63532,52233],{"class":55},[49,63534,51902],{"class":51389},[49,63536,51396],{"class":55},[49,63538,63539],{"class":51,"line":120},[49,63540,63541],{"class":55},"    const button = document.querySelector('button')\n",[49,63543,63544],{"class":51,"line":135},[49,63545,63546],{"class":55},"    button.addEventListener('click', function () {\n",[49,63548,63549],{"class":51,"line":1306},[49,63550,63551],{"class":55},"      \u002F\u002F console.log(this);\n",[49,63553,63554],{"class":51,"line":1312},[49,63555,63556],{"class":55},"      this.style.color = 'pink'\n",[49,63558,63559],{"class":51,"line":1403},[49,63560,33550],{"class":55},[49,63562,63563,63565,63567],{"class":51,"line":1409},[49,63564,52506],{"class":55},[49,63566,51902],{"class":51389},[49,63568,51396],{"class":55},[49,63570,63571,63573,63575],{"class":51,"line":1421},[49,63572,51874],{"class":55},[49,63574,51889],{"class":51389},[49,63576,51396],{"class":55},[195,63578,63580],{"id":63579},"_328-回调函数","3.2.8 回调函数",[14,63582,63583],{},[1554,63584],{"alt":44,"src":63585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63587,63588],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63590,11422],{},[1226,63592,63593,63596,63599],{},[181,63594,63595],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[181,63597,63598],{},"回调函数本质还是函数，只不过把它当成参数使用",[181,63600,63601],{},"使用匿名函数做为回调函数比较常见",[195,63603,63605],{"id":63604},"_329-tab栏切换","3.2.9 tab栏切换",[14,63607,63608],{},[1554,63609],{"alt":44,"src":63610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[39,63612,63614],{"className":50722,"code":63613,"language":50724,"meta":44,"style":44},"\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",[46,63615,63616,63626,63640,63644,63652,63666,63686,63706,63719,63727,63733,63743,63753,63757,63761,63768,63781,63794,63806,63822,63826,63830,63837,63849,63861,63873,63883,63893,63897,63901,63910,63922,63933,63945,63949,63953,63961,63971,63981,63991,63995,63999,64009,64023,64035,64039,64043,64055,64066,64083,64093,64097,64101,64116,64127,64137,64141,64145,64152,64167,64171,64175,64183,64193,64197,64201,64210,64220,64224,64232,64240,64244,64252,64267,64282,64295,64303,64337,64364,64391,64418,64445,64453,64461,64476,64513,64548,64583,64618,64653,64661,64669,64677,64682,64687,64707,64712,64741,64746,64751,64769,64774,64779,64784,64806,64811,64827,64831,64836,64841,64862,64867,64896,64900,64905,64909,64917,64925,64929],{"__ignoreMap":44},[49,63617,63618,63620,63622,63624],{"class":51,"line":52},[49,63619,51386],{"class":55},[49,63621,51390],{"class":51389},[49,63623,51393],{"class":2055},[49,63625,51396],{"class":55},[49,63627,63628,63630,63632,63634,63636,63638],{"class":51,"line":84},[49,63629,1129],{"class":55},[49,63631,50724],{"class":51389},[49,63633,51405],{"class":2055},[49,63635,60],{"class":55},[49,63637,51410],{"class":328},[49,63639,51396],{"class":55},[49,63641,63642],{"class":51,"line":109},[49,63643,2492],{"emptyLinePlaceholder":151},[49,63645,63646,63648,63650],{"class":51,"line":120},[49,63647,1129],{"class":55},[49,63649,51423],{"class":51389},[49,63651,51396],{"class":55},[49,63653,63654,63656,63658,63660,63662,63664],{"class":51,"line":135},[49,63655,52233],{"class":55},[49,63657,51433],{"class":51389},[49,63659,51436],{"class":2055},[49,63661,60],{"class":55},[49,63663,51441],{"class":328},[49,63665,59216],{"class":55},[49,63667,63668,63670,63672,63674,63676,63678,63680,63682,63684],{"class":51,"line":1306},[49,63669,52233],{"class":55},[49,63671,51433],{"class":51389},[49,63673,51452],{"class":2055},[49,63675,60],{"class":55},[49,63677,51457],{"class":328},[49,63679,51460],{"class":2055},[49,63681,60],{"class":55},[49,63683,51465],{"class":328},[49,63685,59216],{"class":55},[49,63687,63688,63690,63692,63694,63696,63698,63700,63702,63704],{"class":51,"line":1312},[49,63689,52233],{"class":55},[49,63691,51433],{"class":51389},[49,63693,15010],{"class":2055},[49,63695,60],{"class":55},[49,63697,51480],{"class":328},[49,63699,51460],{"class":2055},[49,63701,60],{"class":55},[49,63703,51487],{"class":328},[49,63705,59216],{"class":55},[49,63707,63708,63710,63712,63715,63717],{"class":51,"line":1403},[49,63709,52233],{"class":55},[49,63711,51496],{"class":51389},[49,63713,63714],{"class":55},">tab栏切换\u003C\u002F",[49,63716,51496],{"class":51389},[49,63718,51396],{"class":55},[49,63720,63721,63723,63725],{"class":51,"line":1409},[49,63722,52233],{"class":55},[49,63724,143],{"class":51389},[49,63726,51396],{"class":55},[49,63728,63729,63731],{"class":51,"line":1421},[49,63730,6493],{"class":51389},[49,63732,15662],{"class":55},[49,63734,63735,63737,63739,63741],{"class":51,"line":1704},[49,63736,54795],{"class":66},[49,63738,51526],{"class":55},[49,63740,415],{"class":66},[49,63742,1382],{"class":55},[49,63744,63745,63747,63749,63751],{"class":51,"line":1709},[49,63746,54784],{"class":66},[49,63748,51526],{"class":55},[49,63750,415],{"class":66},[49,63752,1382],{"class":55},[49,63754,63755],{"class":51,"line":1715},[49,63756,2279],{"class":55},[49,63758,63759],{"class":51,"line":1720},[49,63760,2492],{"emptyLinePlaceholder":151},[49,63762,63763,63766],{"class":51,"line":1734},[49,63764,63765],{"class":2055},"    .tab",[49,63767,15662],{"class":55},[49,63769,63770,63772,63774,63777,63779],{"class":51,"line":1739},[49,63771,54860],{"class":66},[49,63773,51526],{"class":55},[49,63775,63776],{"class":66},"590",[49,63778,51581],{"class":59},[49,63780,1382],{"class":55},[49,63782,63783,63785,63787,63790,63792],{"class":51,"line":1745},[49,63784,54874],{"class":66},[49,63786,51526],{"class":55},[49,63788,63789],{"class":66},"340",[49,63791,51581],{"class":59},[49,63793,1382],{"class":55},[49,63795,63796,63798,63800,63802,63804],{"class":51,"line":1766},[49,63797,54795],{"class":66},[49,63799,51526],{"class":55},[49,63801,919],{"class":66},[49,63803,51581],{"class":59},[49,63805,1382],{"class":55},[49,63807,63808,63810,63812,63814,63816,63818,63820],{"class":51,"line":1771},[49,63809,62066],{"class":66},[49,63811,51526],{"class":55},[49,63813,441],{"class":66},[49,63815,51581],{"class":59},[49,63817,51610],{"class":66},[49,63819,62333],{"class":66},[49,63821,1382],{"class":55},[49,63823,63824],{"class":51,"line":1785},[49,63825,2279],{"class":55},[49,63827,63828],{"class":51,"line":1790},[49,63829,2492],{"emptyLinePlaceholder":151},[49,63831,63832,63835],{"class":51,"line":1819},[49,63833,63834],{"class":2055},"    .tab-nav",[49,63836,15662],{"class":55},[49,63838,63839,63841,63843,63845,63847],{"class":51,"line":1824},[49,63840,54860],{"class":66},[49,63842,51526],{"class":55},[49,63844,533],{"class":66},[49,63846,550],{"class":59},[49,63848,1382],{"class":55},[49,63850,63851,63853,63855,63857,63859],{"class":51,"line":1841},[49,63852,54874],{"class":66},[49,63854,51526],{"class":55},[49,63856,1126],{"class":66},[49,63858,51581],{"class":59},[49,63860,1382],{"class":55},[49,63862,63863,63865,63867,63869,63871],{"class":51,"line":1846},[49,63864,57448],{"class":66},[49,63866,51526],{"class":55},[49,63868,1126],{"class":66},[49,63870,51581],{"class":59},[49,63872,1382],{"class":55},[49,63874,63875,63877,63879,63881],{"class":51,"line":1851},[49,63876,55098],{"class":66},[49,63878,51526],{"class":55},[49,63880,51566],{"class":66},[49,63882,1382],{"class":55},[49,63884,63885,63887,63889,63891],{"class":51,"line":1856},[49,63886,55109],{"class":66},[49,63888,51526],{"class":55},[49,63890,51757],{"class":66},[49,63892,1382],{"class":55},[49,63894,63895],{"class":51,"line":1870},[49,63896,2279],{"class":55},[49,63898,63899],{"class":51,"line":1875},[49,63900,2492],{"emptyLinePlaceholder":151},[49,63902,63903,63905,63908],{"class":51,"line":2669},[49,63904,63834],{"class":2055},[49,63906,63907],{"class":51389}," h3",[49,63909,15662],{"class":55},[49,63911,63912,63914,63916,63918,63920],{"class":51,"line":2683},[49,63913,55011],{"class":66},[49,63915,51526],{"class":55},[49,63917,1019],{"class":66},[49,63919,51581],{"class":59},[49,63921,1382],{"class":55},[49,63923,63924,63926,63928,63931],{"class":51,"line":2691},[49,63925,62423],{"class":66},[49,63927,51526],{"class":55},[49,63929,63930],{"class":66},"normal",[49,63932,1382],{"class":55},[49,63934,63935,63937,63939,63941,63943],{"class":51,"line":2696},[49,63936,62089],{"class":66},[49,63938,51526],{"class":55},[49,63940,919],{"class":66},[49,63942,51581],{"class":59},[49,63944,1382],{"class":55},[49,63946,63947],{"class":51,"line":2702},[49,63948,2279],{"class":55},[49,63950,63951],{"class":51,"line":2708},[49,63952,2492],{"emptyLinePlaceholder":151},[49,63954,63955,63957,63959],{"class":51,"line":2713},[49,63956,63834],{"class":2055},[49,63958,61381],{"class":51389},[49,63960,15662],{"class":55},[49,63962,63963,63965,63967,63969],{"class":51,"line":8038},[49,63964,54821],{"class":66},[49,63966,51526],{"class":55},[49,63968,54826],{"class":66},[49,63970,1382],{"class":55},[49,63972,63973,63975,63977,63979],{"class":51,"line":8062},[49,63974,55098],{"class":66},[49,63976,51526],{"class":55},[49,63978,51566],{"class":66},[49,63980,1382],{"class":55},[49,63982,63983,63985,63987,63989],{"class":51,"line":8067},[49,63984,55109],{"class":66},[49,63986,51526],{"class":55},[49,63988,51669],{"class":66},[49,63990,1382],{"class":55},[49,63992,63993],{"class":51,"line":8073},[49,63994,2279],{"class":55},[49,63996,63997],{"class":51,"line":8100},[49,63998,2492],{"emptyLinePlaceholder":151},[49,64000,64001,64003,64005,64007],{"class":51,"line":8105},[49,64002,63834],{"class":2055},[49,64004,61381],{"class":51389},[49,64006,55164],{"class":51389},[49,64008,15662],{"class":55},[49,64010,64011,64013,64015,64017,64019,64021],{"class":51,"line":8111},[49,64012,54795],{"class":66},[49,64014,51526],{"class":55},[49,64016,415],{"class":66},[49,64018,9040],{"class":66},[49,64020,51581],{"class":59},[49,64022,1382],{"class":55},[49,64024,64025,64027,64029,64031,64033],{"class":51,"line":8123},[49,64026,55011],{"class":66},[49,64028,51526],{"class":55},[49,64030,768],{"class":66},[49,64032,51581],{"class":59},[49,64034,1382],{"class":55},[49,64036,64037],{"class":51,"line":8135},[49,64038,2279],{"class":55},[49,64040,64041],{"class":51,"line":8147},[49,64042,2492],{"emptyLinePlaceholder":151},[49,64044,64045,64047,64049,64051,64053],{"class":51,"line":9806},[49,64046,63834],{"class":2055},[49,64048,61381],{"class":51389},[49,64050,55164],{"class":51389},[49,64052,1490],{"class":51389},[49,64054,15662],{"class":55},[49,64056,64057,64060,64062,64064],{"class":51,"line":9831},[49,64058,64059],{"class":66},"      text-decoration",[49,64061,51526],{"class":55},[49,64063,54826],{"class":66},[49,64065,1382],{"class":55},[49,64067,64068,64070,64072,64074,64076,64078,64081],{"class":51,"line":9854},[49,64069,62321],{"class":66},[49,64071,51526],{"class":55},[49,64073,301],{"class":66},[49,64075,51581],{"class":59},[49,64077,51610],{"class":66},[49,64079,64080],{"class":66}," transparent",[49,64082,1382],{"class":55},[49,64084,64085,64087,64089,64091],{"class":51,"line":9878},[49,64086,57505],{"class":66},[49,64088,51526],{"class":55},[49,64090,62458],{"class":66},[49,64092,1382],{"class":55},[49,64094,64095],{"class":51,"line":9883},[49,64096,2279],{"class":55},[49,64098,64099],{"class":51,"line":9888},[49,64100,2492],{"emptyLinePlaceholder":151},[49,64102,64103,64105,64107,64109,64111,64114],{"class":51,"line":9893},[49,64104,63834],{"class":2055},[49,64106,61381],{"class":51389},[49,64108,55164],{"class":51389},[49,64110,1490],{"class":51389},[49,64112,64113],{"class":2055},".active",[49,64115,15662],{"class":55},[49,64117,64118,64120,64122,64125],{"class":51,"line":9902},[49,64119,61880],{"class":66},[49,64121,51526],{"class":55},[49,64123,64124],{"class":66},"#e1251b",[49,64126,1382],{"class":55},[49,64128,64129,64131,64133,64135],{"class":51,"line":9907},[49,64130,57505],{"class":66},[49,64132,51526],{"class":55},[49,64134,64124],{"class":66},[49,64136,1382],{"class":55},[49,64138,64139],{"class":51,"line":9913},[49,64140,2279],{"class":55},[49,64142,64143],{"class":51,"line":9934},[49,64144,2492],{"emptyLinePlaceholder":151},[49,64146,64147,64150],{"class":51,"line":9940},[49,64148,64149],{"class":2055},"    .tab-content",[49,64151,15662],{"class":55},[49,64153,64154,64156,64158,64160,64163,64165],{"class":51,"line":9954},[49,64155,54784],{"class":66},[49,64157,51526],{"class":55},[49,64159,415],{"class":66},[49,64161,64162],{"class":66}," 16",[49,64164,51581],{"class":59},[49,64166,1382],{"class":55},[49,64168,64169],{"class":51,"line":9960},[49,64170,2279],{"class":55},[49,64172,64173],{"class":51,"line":9987},[49,64174,2492],{"emptyLinePlaceholder":151},[49,64176,64177,64179,64181],{"class":51,"line":9996},[49,64178,64149],{"class":2055},[49,64180,62263],{"class":2055},[49,64182,15662],{"class":55},[49,64184,64185,64187,64189,64191],{"class":51,"line":10002},[49,64186,55098],{"class":66},[49,64188,51526],{"class":55},[49,64190,54826],{"class":66},[49,64192,1382],{"class":55},[49,64194,64195],{"class":51,"line":10010},[49,64196,2279],{"class":55},[49,64198,64199],{"class":51,"line":10015},[49,64200,2492],{"emptyLinePlaceholder":151},[49,64202,64203,64205,64208],{"class":51,"line":16694},[49,64204,64149],{"class":2055},[49,64206,64207],{"class":2055}," .item.active",[49,64209,15662],{"class":55},[49,64211,64212,64214,64216,64218],{"class":51,"line":16700},[49,64213,55098],{"class":66},[49,64215,51526],{"class":55},[49,64217,60958],{"class":66},[49,64219,1382],{"class":55},[49,64221,64222],{"class":51,"line":16723},[49,64223,2279],{"class":55},[49,64225,64226,64228,64230],{"class":51,"line":16729},[49,64227,52506],{"class":55},[49,64229,143],{"class":51389},[49,64231,51396],{"class":55},[49,64233,64234,64236,64238],{"class":51,"line":16752},[49,64235,51874],{"class":55},[49,64237,51423],{"class":51389},[49,64239,51396],{"class":55},[49,64241,64242],{"class":51,"line":16766},[49,64243,2492],{"emptyLinePlaceholder":151},[49,64245,64246,64248,64250],{"class":51,"line":16786},[49,64247,1129],{"class":55},[49,64249,51889],{"class":51389},[49,64251,51396],{"class":55},[49,64253,64254,64256,64258,64260,64262,64265],{"class":51,"line":16792},[49,64255,52233],{"class":55},[49,64257,51700],{"class":51389},[49,64259,53575],{"class":2055},[49,64261,60],{"class":55},[49,64263,64264],{"class":328},"\"tab\"",[49,64266,51396],{"class":55},[49,64268,64269,64271,64273,64275,64277,64280],{"class":51,"line":16803},[49,64270,51430],{"class":55},[49,64272,51700],{"class":51389},[49,64274,53575],{"class":2055},[49,64276,60],{"class":55},[49,64278,64279],{"class":328},"\"tab-nav\"",[49,64281,51396],{"class":55},[49,64283,64284,64286,64288,64291,64293],{"class":51,"line":16826},[49,64285,55323],{"class":55},[49,64287,195],{"class":51389},[49,64289,64290],{"class":55},">每日特价\u003C\u002F",[49,64292,195],{"class":51389},[49,64294,51396],{"class":55},[49,64296,64297,64299,64301],{"class":51,"line":16848},[49,64298,55323],{"class":55},[49,64300,1226],{"class":51389},[49,64302,51396],{"class":55},[49,64304,64305,64307,64309,64311,64313,64315,64317,64319,64321,64323,64326,64329,64331,64333,64335],{"class":51,"line":16853},[49,64306,55391],{"class":55},[49,64308,181],{"class":51389},[49,64310,61141],{"class":55},[49,64312,56],{"class":51389},[49,64314,53575],{"class":2055},[49,64316,60],{"class":55},[49,64318,59795],{"class":328},[49,64320,61146],{"class":2055},[49,64322,60],{"class":55},[49,64324,64325],{"class":328},"\"javascript:;\"",[49,64327,64328],{"class":55},">精选\u003C\u002F",[49,64330,56],{"class":51389},[49,64332,55403],{"class":55},[49,64334,181],{"class":51389},[49,64336,51396],{"class":55},[49,64338,64339,64341,64343,64345,64347,64349,64351,64353,64356,64358,64360,64362],{"class":51,"line":16859},[49,64340,55391],{"class":55},[49,64342,181],{"class":51389},[49,64344,61141],{"class":55},[49,64346,56],{"class":51389},[49,64348,61146],{"class":2055},[49,64350,60],{"class":55},[49,64352,64325],{"class":328},[49,64354,64355],{"class":55},">美食\u003C\u002F",[49,64357,56],{"class":51389},[49,64359,55403],{"class":55},[49,64361,181],{"class":51389},[49,64363,51396],{"class":55},[49,64365,64366,64368,64370,64372,64374,64376,64378,64380,64383,64385,64387,64389],{"class":51,"line":16873},[49,64367,55391],{"class":55},[49,64369,181],{"class":51389},[49,64371,61141],{"class":55},[49,64373,56],{"class":51389},[49,64375,61146],{"class":2055},[49,64377,60],{"class":55},[49,64379,64325],{"class":328},[49,64381,64382],{"class":55},">百货\u003C\u002F",[49,64384,56],{"class":51389},[49,64386,55403],{"class":55},[49,64388,181],{"class":51389},[49,64390,51396],{"class":55},[49,64392,64393,64395,64397,64399,64401,64403,64405,64407,64410,64412,64414,64416],{"class":51,"line":16886},[49,64394,55391],{"class":55},[49,64396,181],{"class":51389},[49,64398,61141],{"class":55},[49,64400,56],{"class":51389},[49,64402,61146],{"class":2055},[49,64404,60],{"class":55},[49,64406,64325],{"class":328},[49,64408,64409],{"class":55},">个护\u003C\u002F",[49,64411,56],{"class":51389},[49,64413,55403],{"class":55},[49,64415,181],{"class":51389},[49,64417,51396],{"class":55},[49,64419,64420,64422,64424,64426,64428,64430,64432,64434,64437,64439,64441,64443],{"class":51,"line":16891},[49,64421,55391],{"class":55},[49,64423,181],{"class":51389},[49,64425,61141],{"class":55},[49,64427,56],{"class":51389},[49,64429,61146],{"class":2055},[49,64431,60],{"class":55},[49,64433,64325],{"class":328},[49,64435,64436],{"class":55},">预告\u003C\u002F",[49,64438,56],{"class":51389},[49,64440,55403],{"class":55},[49,64442,181],{"class":51389},[49,64444,51396],{"class":55},[49,64446,64447,64449,64451],{"class":51,"line":16905},[49,64448,55496],{"class":55},[49,64450,1226],{"class":51389},[49,64452,51396],{"class":55},[49,64454,64455,64457,64459],{"class":51,"line":16910},[49,64456,51865],{"class":55},[49,64458,51700],{"class":51389},[49,64460,51396],{"class":55},[49,64462,64463,64465,64467,64469,64471,64474],{"class":51,"line":16916},[49,64464,51430],{"class":55},[49,64466,51700],{"class":51389},[49,64468,53575],{"class":2055},[49,64470,60],{"class":55},[49,64472,64473],{"class":328},"\"tab-content\"",[49,64475,51396],{"class":55},[49,64477,64478,64480,64482,64484,64486,64489,64491,64493,64495,64497,64500,64502,64504,64506,64509,64511],{"class":51,"line":16921},[49,64479,55323],{"class":55},[49,64481,51700],{"class":51389},[49,64483,53575],{"class":2055},[49,64485,60],{"class":55},[49,64487,64488],{"class":328},"\"item active\"",[49,64490,61141],{"class":55},[49,64492,1554],{"class":51389},[49,64494,55328],{"class":2055},[49,64496,60],{"class":55},[49,64498,64499],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[49,64501,55336],{"class":2055},[49,64503,60],{"class":55},[49,64505,7742],{"class":328},[49,64507,64508],{"class":55}," \u002F>\u003C\u002F",[49,64510,51700],{"class":51389},[49,64512,51396],{"class":55},[49,64514,64515,64517,64519,64521,64523,64525,64527,64529,64531,64533,64536,64538,64540,64542,64544,64546],{"class":51,"line":16935},[49,64516,55323],{"class":55},[49,64518,51700],{"class":51389},[49,64520,53575],{"class":2055},[49,64522,60],{"class":55},[49,64524,62712],{"class":328},[49,64526,61141],{"class":55},[49,64528,1554],{"class":51389},[49,64530,55328],{"class":2055},[49,64532,60],{"class":55},[49,64534,64535],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[49,64537,55336],{"class":2055},[49,64539,60],{"class":55},[49,64541,7742],{"class":328},[49,64543,64508],{"class":55},[49,64545,51700],{"class":51389},[49,64547,51396],{"class":55},[49,64549,64550,64552,64554,64556,64558,64560,64562,64564,64566,64568,64571,64573,64575,64577,64579,64581],{"class":51,"line":16940},[49,64551,55323],{"class":55},[49,64553,51700],{"class":51389},[49,64555,53575],{"class":2055},[49,64557,60],{"class":55},[49,64559,62712],{"class":328},[49,64561,61141],{"class":55},[49,64563,1554],{"class":51389},[49,64565,55328],{"class":2055},[49,64567,60],{"class":55},[49,64569,64570],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[49,64572,55336],{"class":2055},[49,64574,60],{"class":55},[49,64576,7742],{"class":328},[49,64578,64508],{"class":55},[49,64580,51700],{"class":51389},[49,64582,51396],{"class":55},[49,64584,64585,64587,64589,64591,64593,64595,64597,64599,64601,64603,64606,64608,64610,64612,64614,64616],{"class":51,"line":16945},[49,64586,55323],{"class":55},[49,64588,51700],{"class":51389},[49,64590,53575],{"class":2055},[49,64592,60],{"class":55},[49,64594,62712],{"class":328},[49,64596,61141],{"class":55},[49,64598,1554],{"class":51389},[49,64600,55328],{"class":2055},[49,64602,60],{"class":55},[49,64604,64605],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[49,64607,55336],{"class":2055},[49,64609,60],{"class":55},[49,64611,7742],{"class":328},[49,64613,64508],{"class":55},[49,64615,51700],{"class":51389},[49,64617,51396],{"class":55},[49,64619,64620,64622,64624,64626,64628,64630,64632,64634,64636,64638,64641,64643,64645,64647,64649,64651],{"class":51,"line":16959},[49,64621,55323],{"class":55},[49,64623,51700],{"class":51389},[49,64625,53575],{"class":2055},[49,64627,60],{"class":55},[49,64629,62712],{"class":328},[49,64631,61141],{"class":55},[49,64633,1554],{"class":51389},[49,64635,55328],{"class":2055},[49,64637,60],{"class":55},[49,64639,64640],{"class":328},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[49,64642,55336],{"class":2055},[49,64644,60],{"class":55},[49,64646,7742],{"class":328},[49,64648,64508],{"class":55},[49,64650,51700],{"class":51389},[49,64652,51396],{"class":55},[49,64654,64655,64657,64659],{"class":51,"line":16971},[49,64656,51865],{"class":55},[49,64658,51700],{"class":51389},[49,64660,51396],{"class":55},[49,64662,64663,64665,64667],{"class":51,"line":16976},[49,64664,52506],{"class":55},[49,64666,51700],{"class":51389},[49,64668,51396],{"class":55},[49,64670,64671,64673,64675],{"class":51,"line":16989},[49,64672,52233],{"class":55},[49,64674,51902],{"class":51389},[49,64676,51396],{"class":55},[49,64678,64679],{"class":51,"line":16994},[49,64680,64681],{"class":283},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[49,64683,64684],{"class":51,"line":16999},[49,64685,64686],{"class":283},"    \u002F\u002F 1.1 获取 a 元素 \n",[49,64688,64689,64691,64694,64696,64698,64700,64702,64705],{"class":51,"line":17004},[49,64690,11311],{"class":59},[49,64692,64693],{"class":66}," as",[49,64695,13654],{"class":59},[49,64697,54485],{"class":55},[49,64699,55770],{"class":2055},[49,64701,228],{"class":55},[49,64703,64704],{"class":328},"'.tab-nav a'",[49,64706,81],{"class":55},[49,64708,64709],{"class":51,"line":17017},[49,64710,64711],{"class":283},"    \u002F\u002F console.log(as) \n",[49,64713,64714,64716,64718,64720,64722,64724,64726,64728,64730,64733,64735,64737,64739],{"class":51,"line":17022},[49,64715,3293],{"class":59},[49,64717,1750],{"class":55},[49,64719,51936],{"class":59},[49,64721,9528],{"class":55},[49,64723,60],{"class":59},[49,64725,4185],{"class":66},[49,64727,9535],{"class":55},[49,64729,1129],{"class":59},[49,64731,64732],{"class":55}," as.",[49,64734,52057],{"class":66},[49,64736,3306],{"class":55},[49,64738,2384],{"class":59},[49,64740,12532],{"class":55},[49,64742,64743],{"class":51,"line":32722},[49,64744,64745],{"class":283},"      \u002F\u002F console.log(as[i])\n",[49,64747,64748],{"class":51,"line":32728},[49,64749,64750],{"class":283},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[49,64752,64753,64756,64758,64760,64763,64765,64767],{"class":51,"line":32734},[49,64754,64755],{"class":55},"      as[i].",[49,64757,57902],{"class":2055},[49,64759,228],{"class":55},[49,64761,64762],{"class":328},"'mouseenter'",[49,64764,12525],{"class":55},[49,64766,54538],{"class":59},[49,64768,54541],{"class":55},[49,64770,64771],{"class":51,"line":32740},[49,64772,64773],{"class":283},"        \u002F\u002F console.log('鼠标经过')\n",[49,64775,64776],{"class":51,"line":32746},[49,64777,64778],{"class":283},"        \u002F\u002F 排他思想  \n",[49,64780,64781],{"class":51,"line":32757},[49,64782,64783],{"class":283},"        \u002F\u002F 干掉别人 移除类active\n",[49,64785,64786,64788,64790,64792,64795,64797,64799,64801,64804],{"class":51,"line":32763},[49,64787,52014],{"class":55},[49,64789,54488],{"class":2055},[49,64791,228],{"class":55},[49,64793,64794],{"class":328},"'.tab-nav .active'",[49,64796,57092],{"class":55},[49,64798,57095],{"class":2055},[49,64800,228],{"class":55},[49,64802,64803],{"class":328},"'active'",[49,64805,81],{"class":55},[49,64807,64808],{"class":51,"line":32783},[49,64809,64810],{"class":283},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[49,64812,64813,64816,64819,64821,64823,64825],{"class":51,"line":32789},[49,64814,64815],{"class":66},"        this",[49,64817,64818],{"class":55},".classList.",[49,64820,5424],{"class":2055},[49,64822,228],{"class":55},[49,64824,64803],{"class":328},[49,64826,81],{"class":55},[49,64828,64829],{"class":51,"line":32800},[49,64830,2492],{"emptyLinePlaceholder":151},[49,64832,64833],{"class":51,"line":32806},[49,64834,64835],{"class":283},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[49,64837,64838],{"class":51,"line":32812},[49,64839,64840],{"class":283},"        \u002F\u002F 干掉别人\n",[49,64842,64843,64845,64847,64849,64852,64854,64856,64858,64860],{"class":51,"line":32818},[49,64844,52014],{"class":55},[49,64846,54488],{"class":2055},[49,64848,228],{"class":55},[49,64850,64851],{"class":328},"'.tab-content .active'",[49,64853,57092],{"class":55},[49,64855,57095],{"class":2055},[49,64857,228],{"class":55},[49,64859,64803],{"class":328},[49,64861,81],{"class":55},[49,64863,64864],{"class":51,"line":32824},[49,64865,64866],{"class":283},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[49,64868,64869,64871,64873,64875,64878,64880,64882,64884,64886,64888,64890,64892,64894],{"class":51,"line":32830},[49,64870,52014],{"class":55},[49,64872,54488],{"class":2055},[49,64874,228],{"class":55},[49,64876,64877],{"class":328},"`.tab-content .item:nth-child(${",[49,64879,661],{"class":55},[49,64881,45655],{"class":59},[49,64883,25209],{"class":66},[49,64885,57121],{"class":328},[49,64887,57092],{"class":55},[49,64889,5424],{"class":2055},[49,64891,228],{"class":55},[49,64893,64803],{"class":328},[49,64895,81],{"class":55},[49,64897,64898],{"class":51,"line":32836},[49,64899,2492],{"emptyLinePlaceholder":151},[49,64901,64902],{"class":51,"line":32842},[49,64903,64904],{"class":55},"      })\n",[49,64906,64907],{"class":51,"line":32862},[49,64908,2279],{"class":55},[49,64910,64911,64913,64915],{"class":51,"line":32868},[49,64912,52506],{"class":55},[49,64914,51902],{"class":51389},[49,64916,51396],{"class":55},[49,64918,64919,64921,64923],{"class":51,"line":32884},[49,64920,51874],{"class":55},[49,64922,51889],{"class":51389},[49,64924,51396],{"class":55},[49,64926,64927],{"class":51,"line":32890},[49,64928,2492],{"emptyLinePlaceholder":151},[49,64930,64931,64933,64935],{"class":51,"line":32904},[49,64932,51874],{"class":55},[49,64934,50724],{"class":51389},[49,64936,51396],{"class":55},[14,64938,64939],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64941,64942],{},"在监听事件中，this指向的就是他的调用者",[14,64944,64945],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64947,53809],{},[14,64949,64950],{},"(function () {",[14,64952,64953],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64955,64956],{},"list.addEventListener('click', function (e) {",[14,64958,64959],{},"if (e.target.tagName === 'A') {",[14,64961,64962],{},"\u002F\u002F 排他思想",[14,64964,64965],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64967,64968],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64970,64971],{},"\u002F\u002F console.log(old);",[14,64973,64974],{},"\u002F\u002F 判断",[14,64976,64977],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64979,64980],{},"if (old) old.classList.remove('active')",[14,64982,64983],{},"e.target.classList.add('active')",[14,64985,1165],{},[14,64987,52553],{},[14,64989,64990],{},"})();",[195,64992,64994],{"id":64993},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[39,64996,64998],{"className":50722,"code":64997,"language":50724,"meta":44,"style":44},"\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",[46,64999,65000,65010,65014,65022,65026,65040,65054,65066,65074,65080,65090,65100,65104,65108,65115,65127,65138,65155,65168,65182,65192,65196,65200,65207,65218,65236,65246,65258,65262,65266,65273,65290,65301,65313,65317,65321,65328,65340,65344,65352,65360,65364,65372,65380,65388,65403,65447,65455,65468,65481,65494,65502,65510,65518,65546,65554,65566,65579,65592,65600,65608,65616,65642,65650,65663,65675,65688,65696,65704,65712,65738,65746,65759,65771,65784,65792,65800,65808,65813,65833,65838,65858,65863,65880,65885,65893,65898,65927,65940,65944,65948,65953,65957,65985,65990,66007,66012,66017,66022,66027,66053,66057,66061,66069,66077,66081],{"__ignoreMap":44},[49,65001,65002,65004,65006,65008],{"class":51,"line":52},[49,65003,51386],{"class":55},[49,65005,51390],{"class":51389},[49,65007,51393],{"class":2055},[49,65009,51396],{"class":55},[49,65011,65012],{"class":51,"line":84},[49,65013,2492],{"emptyLinePlaceholder":151},[49,65015,65016,65018,65020],{"class":51,"line":109},[49,65017,1129],{"class":55},[49,65019,50724],{"class":51389},[49,65021,51396],{"class":55},[49,65023,65024],{"class":51,"line":120},[49,65025,2492],{"emptyLinePlaceholder":151},[49,65027,65028,65030,65032,65034,65036,65038],{"class":51,"line":135},[49,65029,1129],{"class":55},[49,65031,51423],{"class":51389},[49,65033,51405],{"class":2055},[49,65035,60],{"class":55},[49,65037,51410],{"class":328},[49,65039,51396],{"class":55},[49,65041,65042,65044,65046,65048,65050,65052],{"class":51,"line":1306},[49,65043,52233],{"class":55},[49,65045,51433],{"class":51389},[49,65047,51436],{"class":2055},[49,65049,60],{"class":55},[49,65051,51441],{"class":328},[49,65053,51396],{"class":55},[49,65055,65056,65058,65060,65062,65064],{"class":51,"line":1312},[49,65057,52233],{"class":55},[49,65059,51496],{"class":51389},[49,65061,55403],{"class":55},[49,65063,51496],{"class":51389},[49,65065,51396],{"class":55},[49,65067,65068,65070,65072],{"class":51,"line":1403},[49,65069,52233],{"class":55},[49,65071,143],{"class":51389},[49,65073,51396],{"class":55},[49,65075,65076,65078],{"class":51,"line":1409},[49,65077,6493],{"class":51389},[49,65079,15662],{"class":55},[49,65081,65082,65084,65086,65088],{"class":51,"line":1421},[49,65083,54795],{"class":66},[49,65085,51526],{"class":55},[49,65087,415],{"class":66},[49,65089,1382],{"class":55},[49,65091,65092,65094,65096,65098],{"class":51,"line":1704},[49,65093,54784],{"class":66},[49,65095,51526],{"class":55},[49,65097,415],{"class":66},[49,65099,1382],{"class":55},[49,65101,65102],{"class":51,"line":1709},[49,65103,2279],{"class":55},[49,65105,65106],{"class":51,"line":1715},[49,65107,2492],{"emptyLinePlaceholder":151},[49,65109,65110,65113],{"class":51,"line":1720},[49,65111,65112],{"class":51389},"    table",[49,65114,15662],{"class":55},[49,65116,65117,65120,65122,65125],{"class":51,"line":1734},[49,65118,65119],{"class":66},"      border-collapse",[49,65121,51526],{"class":55},[49,65123,65124],{"class":66},"collapse",[49,65126,1382],{"class":55},[49,65128,65129,65132,65134,65136],{"class":51,"line":1739},[49,65130,65131],{"class":66},"      border-spacing",[49,65133,51526],{"class":55},[49,65135,415],{"class":66},[49,65137,1382],{"class":55},[49,65139,65140,65142,65144,65146,65148,65150,65153],{"class":51,"line":1745},[49,65141,62066],{"class":66},[49,65143,51526],{"class":55},[49,65145,441],{"class":66},[49,65147,51581],{"class":59},[49,65149,51610],{"class":66},[49,65151,65152],{"class":66}," #c0c0c0",[49,65154,1382],{"class":55},[49,65156,65157,65159,65161,65164,65166],{"class":51,"line":1766},[49,65158,54860],{"class":66},[49,65160,51526],{"class":55},[49,65162,65163],{"class":66},"500",[49,65165,51581],{"class":59},[49,65167,1382],{"class":55},[49,65169,65170,65172,65174,65176,65178,65180],{"class":51,"line":1771},[49,65171,54795],{"class":66},[49,65173,51526],{"class":55},[49,65175,533],{"class":66},[49,65177,51581],{"class":59},[49,65179,51645],{"class":66},[49,65181,1382],{"class":55},[49,65183,65184,65186,65188,65190],{"class":51,"line":1785},[49,65185,57375],{"class":66},[49,65187,51526],{"class":55},[49,65189,51681],{"class":66},[49,65191,1382],{"class":55},[49,65193,65194],{"class":51,"line":1790},[49,65195,2279],{"class":55},[49,65197,65198],{"class":51,"line":1819},[49,65199,2492],{"emptyLinePlaceholder":151},[49,65201,65202,65205],{"class":51,"line":1824},[49,65203,65204],{"class":51389},"    th",[49,65206,15662],{"class":55},[49,65208,65209,65211,65213,65216],{"class":51,"line":1841},[49,65210,54973],{"class":66},[49,65212,51526],{"class":55},[49,65214,65215],{"class":66},"#09c",[49,65217,1382],{"class":55},[49,65219,65220,65223,65225,65227,65229,65231,65234],{"class":51,"line":1846},[49,65221,65222],{"class":66},"      font",[49,65224,51526],{"class":55},[49,65226,62428],{"class":66},[49,65228,64162],{"class":66},[49,65230,51581],{"class":59},[49,65232,65233],{"class":328}," \"微软雅黑\"",[49,65235,1382],{"class":55},[49,65237,65238,65240,65242,65244],{"class":51,"line":1851},[49,65239,57505],{"class":66},[49,65241,51526],{"class":55},[49,65243,60931],{"class":66},[49,65245,1382],{"class":55},[49,65247,65248,65250,65252,65254,65256],{"class":51,"line":1856},[49,65249,54874],{"class":66},[49,65251,51526],{"class":55},[49,65253,1019],{"class":66},[49,65255,51581],{"class":59},[49,65257,1382],{"class":55},[49,65259,65260],{"class":51,"line":1870},[49,65261,2279],{"class":55},[49,65263,65264],{"class":51,"line":1875},[49,65265,2492],{"emptyLinePlaceholder":151},[49,65267,65268,65271],{"class":51,"line":2669},[49,65269,65270],{"class":51389},"    td",[49,65272,15662],{"class":55},[49,65274,65275,65277,65279,65281,65283,65285,65288],{"class":51,"line":2683},[49,65276,62066],{"class":66},[49,65278,51526],{"class":55},[49,65280,441],{"class":66},[49,65282,51581],{"class":59},[49,65284,51610],{"class":66},[49,65286,65287],{"class":66}," #d0d0d0",[49,65289,1382],{"class":55},[49,65291,65292,65294,65296,65299],{"class":51,"line":2691},[49,65293,57505],{"class":66},[49,65295,51526],{"class":55},[49,65297,65298],{"class":66},"#404060",[49,65300,1382],{"class":55},[49,65302,65303,65305,65307,65309,65311],{"class":51,"line":2696},[49,65304,54784],{"class":66},[49,65306,51526],{"class":55},[49,65308,95],{"class":66},[49,65310,51581],{"class":59},[49,65312,1382],{"class":55},[49,65314,65315],{"class":51,"line":2702},[49,65316,2279],{"class":55},[49,65318,65319],{"class":51,"line":2708},[49,65320,2492],{"emptyLinePlaceholder":151},[49,65322,65323,65326],{"class":51,"line":2713},[49,65324,65325],{"class":2055},"    .allCheck",[49,65327,15662],{"class":55},[49,65329,65330,65332,65334,65336,65338],{"class":51,"line":8038},[49,65331,54860],{"class":66},[49,65333,51526],{"class":55},[49,65335,831],{"class":66},[49,65337,51581],{"class":59},[49,65339,1382],{"class":55},[49,65341,65342],{"class":51,"line":8062},[49,65343,2279],{"class":55},[49,65345,65346,65348,65350],{"class":51,"line":8067},[49,65347,52506],{"class":55},[49,65349,143],{"class":51389},[49,65351,51396],{"class":55},[49,65353,65354,65356,65358],{"class":51,"line":8073},[49,65355,51874],{"class":55},[49,65357,51423],{"class":51389},[49,65359,51396],{"class":55},[49,65361,65362],{"class":51,"line":8100},[49,65363,2492],{"emptyLinePlaceholder":151},[49,65365,65366,65368,65370],{"class":51,"line":8105},[49,65367,1129],{"class":55},[49,65369,51889],{"class":51389},[49,65371,51396],{"class":55},[49,65373,65374,65376,65378],{"class":51,"line":8111},[49,65375,52233],{"class":55},[49,65377,361],{"class":51389},[49,65379,51396],{"class":55},[49,65381,65382,65384,65386],{"class":51,"line":8123},[49,65383,51430],{"class":55},[49,65385,367],{"class":51389},[49,65387,51396],{"class":55},[49,65389,65390,65392,65394,65396,65398,65401],{"class":51,"line":8135},[49,65391,55323],{"class":55},[49,65393,370],{"class":51389},[49,65395,53575],{"class":2055},[49,65397,60],{"class":55},[49,65399,65400],{"class":328},"\"allCheck\"",[49,65402,51396],{"class":55},[49,65404,65405,65407,65409,65411,65413,65415,65417,65419,65421,65423,65425,65428,65431,65433,65435,65437,65440,65443,65445],{"class":51,"line":8147},[49,65406,55391],{"class":55},[49,65408,53910],{"class":51389},[49,65410,53913],{"class":2055},[49,65412,60],{"class":55},[49,65414,53918],{"class":328},[49,65416,15010],{"class":2055},[49,65418,60],{"class":55},[49,65420,7742],{"class":328},[49,65422,15049],{"class":2055},[49,65424,60],{"class":55},[49,65426,65427],{"class":328},"\"checkAll\"",[49,65429,65430],{"class":55},"> \u003C",[49,65432,49],{"class":51389},[49,65434,53575],{"class":2055},[49,65436,60],{"class":55},[49,65438,65439],{"class":328},"\"all\"",[49,65441,65442],{"class":55},">全选\u003C\u002F",[49,65444,49],{"class":51389},[49,65446,51396],{"class":55},[49,65448,65449,65451,65453],{"class":51,"line":9806},[49,65450,55496],{"class":55},[49,65452,370],{"class":51389},[49,65454,51396],{"class":55},[49,65456,65457,65459,65461,65464,65466],{"class":51,"line":9831},[49,65458,55323],{"class":55},[49,65460,370],{"class":51389},[49,65462,65463],{"class":55},">商品\u003C\u002F",[49,65465,370],{"class":51389},[49,65467,51396],{"class":55},[49,65469,65470,65472,65474,65477,65479],{"class":51,"line":9854},[49,65471,55323],{"class":55},[49,65473,370],{"class":51389},[49,65475,65476],{"class":55},">商家\u003C\u002F",[49,65478,370],{"class":51389},[49,65480,51396],{"class":55},[49,65482,65483,65485,65487,65490,65492],{"class":51,"line":9878},[49,65484,55323],{"class":55},[49,65486,370],{"class":51389},[49,65488,65489],{"class":55},">价格\u003C\u002F",[49,65491,370],{"class":51389},[49,65493,51396],{"class":55},[49,65495,65496,65498,65500],{"class":51,"line":9883},[49,65497,51865],{"class":55},[49,65499,367],{"class":51389},[49,65501,51396],{"class":55},[49,65503,65504,65506,65508],{"class":51,"line":9888},[49,65505,51430],{"class":55},[49,65507,367],{"class":51389},[49,65509,51396],{"class":55},[49,65511,65512,65514,65516],{"class":51,"line":9893},[49,65513,55323],{"class":55},[49,65515,413],{"class":51389},[49,65517,51396],{"class":55},[49,65519,65520,65522,65524,65526,65528,65530,65532,65534,65537,65539,65541,65544],{"class":51,"line":9902},[49,65521,55391],{"class":55},[49,65523,53910],{"class":51389},[49,65525,53913],{"class":2055},[49,65527,60],{"class":55},[49,65529,53918],{"class":328},[49,65531,15010],{"class":2055},[49,65533,60],{"class":55},[49,65535,65536],{"class":328},"\"check\"",[49,65538,53575],{"class":2055},[49,65540,60],{"class":55},[49,65542,65543],{"class":328},"\"ck\"",[49,65545,51396],{"class":55},[49,65547,65548,65550,65552],{"class":51,"line":9907},[49,65549,55496],{"class":55},[49,65551,413],{"class":51389},[49,65553,51396],{"class":55},[49,65555,65556,65558,65560,65562,65564],{"class":51,"line":9913},[49,65557,55323],{"class":55},[49,65559,413],{"class":51389},[49,65561,61262],{"class":55},[49,65563,413],{"class":51389},[49,65565,51396],{"class":55},[49,65567,65568,65570,65572,65575,65577],{"class":51,"line":9934},[49,65569,55323],{"class":55},[49,65571,413],{"class":51389},[49,65573,65574],{"class":55},">小米\u003C\u002F",[49,65576,413],{"class":51389},[49,65578,51396],{"class":55},[49,65580,65581,65583,65585,65588,65590],{"class":51,"line":9940},[49,65582,55323],{"class":55},[49,65584,413],{"class":51389},[49,65586,65587],{"class":55},">￥1999\u003C\u002F",[49,65589,413],{"class":51389},[49,65591,51396],{"class":55},[49,65593,65594,65596,65598],{"class":51,"line":9954},[49,65595,51865],{"class":55},[49,65597,367],{"class":51389},[49,65599,51396],{"class":55},[49,65601,65602,65604,65606],{"class":51,"line":9960},[49,65603,51430],{"class":55},[49,65605,367],{"class":51389},[49,65607,51396],{"class":55},[49,65609,65610,65612,65614],{"class":51,"line":9987},[49,65611,55323],{"class":55},[49,65613,413],{"class":51389},[49,65615,51396],{"class":55},[49,65617,65618,65620,65622,65624,65626,65628,65630,65632,65634,65636,65638,65640],{"class":51,"line":9996},[49,65619,55391],{"class":55},[49,65621,53910],{"class":51389},[49,65623,53913],{"class":2055},[49,65625,60],{"class":55},[49,65627,53918],{"class":328},[49,65629,15010],{"class":2055},[49,65631,60],{"class":55},[49,65633,65536],{"class":328},[49,65635,53575],{"class":2055},[49,65637,60],{"class":55},[49,65639,65543],{"class":328},[49,65641,51396],{"class":55},[49,65643,65644,65646,65648],{"class":51,"line":10002},[49,65645,55496],{"class":55},[49,65647,413],{"class":51389},[49,65649,51396],{"class":55},[49,65651,65652,65654,65656,65659,65661],{"class":51,"line":10010},[49,65653,55323],{"class":55},[49,65655,413],{"class":51389},[49,65657,65658],{"class":55},">小米净水器\u003C\u002F",[49,65660,413],{"class":51389},[49,65662,51396],{"class":55},[49,65664,65665,65667,65669,65671,65673],{"class":51,"line":10015},[49,65666,55323],{"class":55},[49,65668,413],{"class":51389},[49,65670,65574],{"class":55},[49,65672,413],{"class":51389},[49,65674,51396],{"class":55},[49,65676,65677,65679,65681,65684,65686],{"class":51,"line":16694},[49,65678,55323],{"class":55},[49,65680,413],{"class":51389},[49,65682,65683],{"class":55},">￥4999\u003C\u002F",[49,65685,413],{"class":51389},[49,65687,51396],{"class":55},[49,65689,65690,65692,65694],{"class":51,"line":16700},[49,65691,51865],{"class":55},[49,65693,367],{"class":51389},[49,65695,51396],{"class":55},[49,65697,65698,65700,65702],{"class":51,"line":16723},[49,65699,51430],{"class":55},[49,65701,367],{"class":51389},[49,65703,51396],{"class":55},[49,65705,65706,65708,65710],{"class":51,"line":16729},[49,65707,55323],{"class":55},[49,65709,413],{"class":51389},[49,65711,51396],{"class":55},[49,65713,65714,65716,65718,65720,65722,65724,65726,65728,65730,65732,65734,65736],{"class":51,"line":16752},[49,65715,55391],{"class":55},[49,65717,53910],{"class":51389},[49,65719,53913],{"class":2055},[49,65721,60],{"class":55},[49,65723,53918],{"class":328},[49,65725,15010],{"class":2055},[49,65727,60],{"class":55},[49,65729,65536],{"class":328},[49,65731,53575],{"class":2055},[49,65733,60],{"class":55},[49,65735,65543],{"class":328},[49,65737,51396],{"class":55},[49,65739,65740,65742,65744],{"class":51,"line":16766},[49,65741,55496],{"class":55},[49,65743,413],{"class":51389},[49,65745,51396],{"class":55},[49,65747,65748,65750,65752,65755,65757],{"class":51,"line":16786},[49,65749,55323],{"class":55},[49,65751,413],{"class":51389},[49,65753,65754],{"class":55},">小米电视\u003C\u002F",[49,65756,413],{"class":51389},[49,65758,51396],{"class":55},[49,65760,65761,65763,65765,65767,65769],{"class":51,"line":16792},[49,65762,55323],{"class":55},[49,65764,413],{"class":51389},[49,65766,65574],{"class":55},[49,65768,413],{"class":51389},[49,65770,51396],{"class":55},[49,65772,65773,65775,65777,65780,65782],{"class":51,"line":16803},[49,65774,55323],{"class":55},[49,65776,413],{"class":51389},[49,65778,65779],{"class":55},">￥5999\u003C\u002F",[49,65781,413],{"class":51389},[49,65783,51396],{"class":55},[49,65785,65786,65788,65790],{"class":51,"line":16826},[49,65787,51865],{"class":55},[49,65789,367],{"class":51389},[49,65791,51396],{"class":55},[49,65793,65794,65796,65798],{"class":51,"line":16848},[49,65795,52506],{"class":55},[49,65797,361],{"class":51389},[49,65799,51396],{"class":55},[49,65801,65802,65804,65806],{"class":51,"line":16853},[49,65803,52233],{"class":55},[49,65805,51902],{"class":51389},[49,65807,51396],{"class":55},[49,65809,65810],{"class":51,"line":16859},[49,65811,65812],{"class":283},"    \u002F\u002F 1. 获取大复选框\n",[49,65814,65815,65817,65820,65822,65824,65826,65828,65831],{"class":51,"line":16873},[49,65816,11311],{"class":59},[49,65818,65819],{"class":66}," checkAll",[49,65821,13654],{"class":59},[49,65823,54485],{"class":55},[49,65825,54488],{"class":2055},[49,65827,228],{"class":55},[49,65829,65830],{"class":328},"'#checkAll'",[49,65832,81],{"class":55},[49,65834,65835],{"class":51,"line":16886},[49,65836,65837],{"class":283},"    \u002F\u002F 2. 获取所有的小复选框\n",[49,65839,65840,65842,65845,65847,65849,65851,65853,65856],{"class":51,"line":16891},[49,65841,11311],{"class":59},[49,65843,65844],{"class":66}," cks",[49,65846,13654],{"class":59},[49,65848,54485],{"class":55},[49,65850,55770],{"class":2055},[49,65852,228],{"class":55},[49,65854,65855],{"class":328},"'.ck'",[49,65857,81],{"class":55},[49,65859,65860],{"class":51,"line":16905},[49,65861,65862],{"class":283},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[49,65864,65865,65868,65870,65872,65874,65876,65878],{"class":51,"line":16910},[49,65866,65867],{"class":55},"    checkAll.",[49,65869,57902],{"class":2055},[49,65871,228],{"class":55},[49,65873,57907],{"class":328},[49,65875,12525],{"class":55},[49,65877,54538],{"class":59},[49,65879,54541],{"class":55},[49,65881,65882],{"class":51,"line":16916},[49,65883,65884],{"class":283},"      \u002F\u002F 得到当前大复选框的选中状态\n",[49,65886,65887,65890],{"class":51,"line":16921},[49,65888,65889],{"class":283},"      \u002F\u002F console.log(checkAll.checked)",[49,65891,65892],{"class":283},"  \u002F\u002F 得到 是 true 或者是 false\n",[49,65894,65895],{"class":51,"line":16935},[49,65896,65897],{"class":283},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[49,65899,65900,65902,65904,65906,65908,65910,65912,65914,65916,65919,65921,65923,65925],{"class":51,"line":16940},[49,65901,52373],{"class":59},[49,65903,1750],{"class":55},[49,65905,51936],{"class":59},[49,65907,9528],{"class":55},[49,65909,60],{"class":59},[49,65911,4185],{"class":66},[49,65913,9535],{"class":55},[49,65915,1129],{"class":59},[49,65917,65918],{"class":55}," cks.",[49,65920,52057],{"class":66},[49,65922,3306],{"class":55},[49,65924,2384],{"class":59},[49,65926,12532],{"class":55},[49,65928,65929,65932,65934,65937],{"class":51,"line":16945},[49,65930,65931],{"class":55},"        cks[i].checked ",[49,65933,60],{"class":59},[49,65935,65936],{"class":66}," this",[49,65938,65939],{"class":55},".checked\n",[49,65941,65942],{"class":51,"line":16959},[49,65943,52487],{"class":55},[49,65945,65946],{"class":51,"line":16971},[49,65947,33550],{"class":55},[49,65949,65950],{"class":51,"line":16976},[49,65951,65952],{"class":283},"    \u002F\u002F 5. 小复选框控制大复选框\n",[49,65954,65955],{"class":51,"line":16989},[49,65956,2492],{"emptyLinePlaceholder":151},[49,65958,65959,65961,65963,65965,65967,65969,65971,65973,65975,65977,65979,65981,65983],{"class":51,"line":16994},[49,65960,3293],{"class":59},[49,65962,1750],{"class":55},[49,65964,51936],{"class":59},[49,65966,9528],{"class":55},[49,65968,60],{"class":59},[49,65970,4185],{"class":66},[49,65972,9535],{"class":55},[49,65974,1129],{"class":59},[49,65976,65918],{"class":55},[49,65978,52057],{"class":66},[49,65980,3306],{"class":55},[49,65982,2384],{"class":59},[49,65984,12532],{"class":55},[49,65986,65987],{"class":51,"line":16999},[49,65988,65989],{"class":283},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[49,65991,65992,65995,65997,65999,66001,66003,66005],{"class":51,"line":17004},[49,65993,65994],{"class":55},"      cks[i].",[49,65996,57902],{"class":2055},[49,65998,228],{"class":55},[49,66000,57907],{"class":328},[49,66002,12525],{"class":55},[49,66004,54538],{"class":59},[49,66006,54541],{"class":55},[49,66008,66009],{"class":51,"line":17017},[49,66010,66011],{"class":283},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[49,66013,66014],{"class":51,"line":17022},[49,66015,66016],{"class":283},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[49,66018,66019],{"class":51,"line":32722},[49,66020,66021],{"class":283},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[49,66023,66024],{"class":51,"line":32728},[49,66025,66026],{"class":283},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[49,66028,66029,66032,66034,66036,66038,66040,66043,66045,66047,66049,66051],{"class":51,"line":32734},[49,66030,66031],{"class":55},"        checkAll.checked ",[49,66033,60],{"class":59},[49,66035,54485],{"class":55},[49,66037,55770],{"class":2055},[49,66039,228],{"class":55},[49,66041,66042],{"class":328},"'.ck:checked'",[49,66044,30915],{"class":55},[49,66046,52057],{"class":66},[49,66048,57995],{"class":59},[49,66050,65918],{"class":55},[49,66052,55920],{"class":66},[49,66054,66055],{"class":51,"line":32740},[49,66056,64904],{"class":55},[49,66058,66059],{"class":51,"line":32746},[49,66060,2279],{"class":55},[49,66062,66063,66065,66067],{"class":51,"line":32757},[49,66064,52506],{"class":55},[49,66066,51902],{"class":51389},[49,66068,51396],{"class":55},[49,66070,66071,66073,66075],{"class":51,"line":32763},[49,66072,51874],{"class":55},[49,66074,51889],{"class":51389},[49,66076,51396],{"class":55},[49,66078,66079],{"class":51,"line":32783},[49,66080,2492],{"emptyLinePlaceholder":151},[49,66082,66083,66085,66087],{"class":51,"line":32789},[49,66084,51874],{"class":55},[49,66086,50724],{"class":51389},[49,66088,51396],{"class":55},[14,66090,66091],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66093,66094],{},"用好之间比较得到的布尔值！！！",[14,66096,66097,66098,66101,66102,1750,66105,803,66107,66110],{},"在 JS 里访问的时候，",[46,66099,66100],{},"checkbox.checked"," 是一个 ",[373,66103,66104],{},"布尔值",[46,66106,1454],{},[46,66108,66109],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66112,66113,66114,66117,66118],{},"HTML 的 ",[46,66115,66116],{},"checked=\"checked\""," 只是 ",[373,66119,66120,66121,66124],{},"初始值；JS 的 ",[46,66122,66123],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66126,66127],{},"：checked是一个伪类选择器",[14,66129,66130],{},[1554,66131],{"alt":44,"src":66132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66134,66135,66138],{},[66136,66137],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66140,66141],{},[1554,66142],{"alt":44,"src":66143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[166,66145,66147],{"id":66146},"_33-dom事件进阶","3.3 DOM事件进阶",[195,66149,66151],{"id":66150},"_331-事件流","3.3.1 事件流",[14,66153,66154],{},[1554,66155],{"alt":44,"src":66156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22088,66158,66160],{"id":66159},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66162,66163],{},[1554,66164],{"alt":44,"src":66165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[39,66167,66169],{"className":50722,"code":66168,"language":50724,"meta":44,"style":44},"\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",[46,66170,66171,66181,66195,66199,66207,66221,66241,66253,66261,66268,66280,66292,66302,66306,66310,66317,66329,66341,66351,66355,66363,66371,66375,66383,66398,66417,66425,66433,66453,66473,66489,66500,66508,66525,66536,66544,66561,66572,66580,66588,66596,66600],{"__ignoreMap":44},[49,66172,66173,66175,66177,66179],{"class":51,"line":52},[49,66174,51386],{"class":55},[49,66176,51390],{"class":51389},[49,66178,51393],{"class":2055},[49,66180,51396],{"class":55},[49,66182,66183,66185,66187,66189,66191,66193],{"class":51,"line":84},[49,66184,1129],{"class":55},[49,66186,50724],{"class":51389},[49,66188,51405],{"class":2055},[49,66190,60],{"class":55},[49,66192,51410],{"class":328},[49,66194,51396],{"class":55},[49,66196,66197],{"class":51,"line":109},[49,66198,2492],{"emptyLinePlaceholder":151},[49,66200,66201,66203,66205],{"class":51,"line":120},[49,66202,1129],{"class":55},[49,66204,51423],{"class":51389},[49,66206,51396],{"class":55},[49,66208,66209,66211,66213,66215,66217,66219],{"class":51,"line":135},[49,66210,52233],{"class":55},[49,66212,51433],{"class":51389},[49,66214,51436],{"class":2055},[49,66216,60],{"class":55},[49,66218,51441],{"class":328},[49,66220,51396],{"class":55},[49,66222,66223,66225,66227,66229,66231,66233,66235,66237,66239],{"class":51,"line":1306},[49,66224,52233],{"class":55},[49,66226,51433],{"class":51389},[49,66228,15010],{"class":2055},[49,66230,60],{"class":55},[49,66232,51480],{"class":328},[49,66234,51460],{"class":2055},[49,66236,60],{"class":55},[49,66238,51487],{"class":328},[49,66240,51396],{"class":55},[49,66242,66243,66245,66247,66249,66251],{"class":51,"line":1312},[49,66244,52233],{"class":55},[49,66246,51496],{"class":51389},[49,66248,51499],{"class":55},[49,66250,51496],{"class":51389},[49,66252,51396],{"class":55},[49,66254,66255,66257,66259],{"class":51,"line":1403},[49,66256,52233],{"class":55},[49,66258,143],{"class":51389},[49,66260,51396],{"class":55},[49,66262,66263,66266],{"class":51,"line":1409},[49,66264,66265],{"class":2055},"    .father",[49,66267,15662],{"class":55},[49,66269,66270,66272,66274,66276,66278],{"class":51,"line":1421},[49,66271,54860],{"class":66},[49,66273,51526],{"class":55},[49,66275,65163],{"class":66},[49,66277,51581],{"class":59},[49,66279,1382],{"class":55},[49,66281,66282,66284,66286,66288,66290],{"class":51,"line":1704},[49,66283,54874],{"class":66},[49,66285,51526],{"class":55},[49,66287,65163],{"class":66},[49,66289,51581],{"class":59},[49,66291,1382],{"class":55},[49,66293,66294,66296,66298,66300],{"class":51,"line":1709},[49,66295,54973],{"class":66},[49,66297,51526],{"class":55},[49,66299,51734],{"class":66},[49,66301,1382],{"class":55},[49,66303,66304],{"class":51,"line":1715},[49,66305,2279],{"class":55},[49,66307,66308],{"class":51,"line":1720},[49,66309,2492],{"emptyLinePlaceholder":151},[49,66311,66312,66315],{"class":51,"line":1734},[49,66313,66314],{"class":2055},"    .son",[49,66316,15662],{"class":55},[49,66318,66319,66321,66323,66325,66327],{"class":51,"line":1739},[49,66320,54860],{"class":66},[49,66322,51526],{"class":55},[49,66324,1814],{"class":66},[49,66326,51581],{"class":59},[49,66328,1382],{"class":55},[49,66330,66331,66333,66335,66337,66339],{"class":51,"line":1745},[49,66332,54874],{"class":66},[49,66334,51526],{"class":55},[49,66336,1814],{"class":66},[49,66338,51581],{"class":59},[49,66340,1382],{"class":55},[49,66342,66343,66345,66347,66349],{"class":51,"line":1766},[49,66344,54973],{"class":66},[49,66346,51526],{"class":55},[49,66348,54978],{"class":66},[49,66350,1382],{"class":55},[49,66352,66353],{"class":51,"line":1771},[49,66354,2279],{"class":55},[49,66356,66357,66359,66361],{"class":51,"line":1785},[49,66358,52506],{"class":55},[49,66360,143],{"class":51389},[49,66362,51396],{"class":55},[49,66364,66365,66367,66369],{"class":51,"line":1790},[49,66366,51874],{"class":55},[49,66368,51423],{"class":51389},[49,66370,51396],{"class":55},[49,66372,66373],{"class":51,"line":1819},[49,66374,2492],{"emptyLinePlaceholder":151},[49,66376,66377,66379,66381],{"class":51,"line":1824},[49,66378,1129],{"class":55},[49,66380,51889],{"class":51389},[49,66382,51396],{"class":55},[49,66384,66385,66387,66389,66391,66393,66396],{"class":51,"line":1841},[49,66386,52233],{"class":55},[49,66388,51700],{"class":51389},[49,66390,53575],{"class":2055},[49,66392,60],{"class":55},[49,66394,66395],{"class":328},"\"father\"",[49,66397,51396],{"class":55},[49,66399,66400,66402,66404,66406,66408,66411,66413,66415],{"class":51,"line":1846},[49,66401,51430],{"class":55},[49,66403,51700],{"class":51389},[49,66405,53575],{"class":2055},[49,66407,60],{"class":55},[49,66409,66410],{"class":328},"\"son\"",[49,66412,55403],{"class":55},[49,66414,51700],{"class":51389},[49,66416,51396],{"class":55},[49,66418,66419,66421,66423],{"class":51,"line":1851},[49,66420,52506],{"class":55},[49,66422,51700],{"class":51389},[49,66424,51396],{"class":55},[49,66426,66427,66429,66431],{"class":51,"line":1856},[49,66428,52233],{"class":55},[49,66430,51902],{"class":51389},[49,66432,51396],{"class":55},[49,66434,66435,66437,66440,66442,66444,66446,66448,66451],{"class":51,"line":1870},[49,66436,11311],{"class":59},[49,66438,66439],{"class":66}," fa",[49,66441,13654],{"class":59},[49,66443,54485],{"class":55},[49,66445,54488],{"class":2055},[49,66447,228],{"class":55},[49,66449,66450],{"class":328},"'.father'",[49,66452,81],{"class":55},[49,66454,66455,66457,66460,66462,66464,66466,66468,66471],{"class":51,"line":1875},[49,66456,11311],{"class":59},[49,66458,66459],{"class":66}," son",[49,66461,13654],{"class":59},[49,66463,54485],{"class":55},[49,66465,54488],{"class":2055},[49,66467,228],{"class":55},[49,66469,66470],{"class":328},"'.son'",[49,66472,81],{"class":55},[49,66474,66475,66477,66479,66481,66483,66485,66487],{"class":51,"line":2669},[49,66476,52496],{"class":55},[49,66478,57902],{"class":2055},[49,66480,228],{"class":55},[49,66482,57907],{"class":328},[49,66484,12525],{"class":55},[49,66486,54538],{"class":59},[49,66488,54541],{"class":55},[49,66490,66491,66493,66495,66498],{"class":51,"line":2683},[49,66492,59014],{"class":2055},[49,66494,228],{"class":55},[49,66496,66497],{"class":328},"'woshiu1'",[49,66499,81],{"class":55},[49,66501,66502,66504,66506],{"class":51,"line":2691},[49,66503,54624],{"class":55},[49,66505,1454],{"class":66},[49,66507,81],{"class":55},[49,66509,66510,66513,66515,66517,66519,66521,66523],{"class":51,"line":2696},[49,66511,66512],{"class":55},"    fa.",[49,66514,57902],{"class":2055},[49,66516,228],{"class":55},[49,66518,57907],{"class":328},[49,66520,12525],{"class":55},[49,66522,54538],{"class":59},[49,66524,54541],{"class":55},[49,66526,66527,66529,66531,66534],{"class":51,"line":2702},[49,66528,59014],{"class":2055},[49,66530,228],{"class":55},[49,66532,66533],{"class":328},"'1'",[49,66535,81],{"class":55},[49,66537,66538,66540,66542],{"class":51,"line":2708},[49,66539,54624],{"class":55},[49,66541,1454],{"class":66},[49,66543,81],{"class":55},[49,66545,66546,66549,66551,66553,66555,66557,66559],{"class":51,"line":2713},[49,66547,66548],{"class":55},"    son.",[49,66550,57902],{"class":2055},[49,66552,228],{"class":55},[49,66554,57907],{"class":328},[49,66556,12525],{"class":55},[49,66558,54538],{"class":59},[49,66560,54541],{"class":55},[49,66562,66563,66565,66567,66570],{"class":51,"line":8038},[49,66564,59014],{"class":2055},[49,66566,228],{"class":55},[49,66568,66569],{"class":328},"'2'",[49,66571,81],{"class":55},[49,66573,66574,66576,66578],{"class":51,"line":8062},[49,66575,54624],{"class":55},[49,66577,1454],{"class":66},[49,66579,81],{"class":55},[49,66581,66582,66584,66586],{"class":51,"line":8067},[49,66583,52506],{"class":55},[49,66585,51902],{"class":51389},[49,66587,51396],{"class":55},[49,66589,66590,66592,66594],{"class":51,"line":8073},[49,66591,51874],{"class":55},[49,66593,51889],{"class":51389},[49,66595,51396],{"class":55},[49,66597,66598],{"class":51,"line":8100},[49,66599,2492],{"emptyLinePlaceholder":151},[49,66601,66602,66604,66606],{"class":51,"line":8105},[49,66603,51874],{"class":55},[49,66605,50724],{"class":51389},[49,66607,51396],{"class":55},[14,66609,66610],{},[1554,66611],{"alt":44,"src":66612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66614,66615],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22088,66617,66619],{"id":66618},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66621,66622],{},[1554,66623],{"alt":44,"src":66624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66626,66627],{},"反着来",[14,66629,66630],{},"注意是同名事件，比如都是‘click’",[22088,66632,66634],{"id":66633},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66636,66637],{},[1554,66638],{"alt":44,"src":66639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22088,66641,66643],{"id":66642},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66645,66646],{},[1554,66647],{"alt":44,"src":66648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66650,66651],{},[1554,66652],{"alt":44,"src":66653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22088,66655,66657],{"id":66656},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[178,66659,66660],{},[181,66661,66662],{},"事件类型的区别",[14,66664,66665],{},[1554,66666],{"alt":44,"src":66667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66669,66670],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[178,66672,66673],{"start":84},[181,66674,66675],{},"注册事件的区别",[14,66677,66678],{},[1554,66679],{"alt":44,"src":66680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22088,66682,66684],{"id":66683},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66686,66687],{},[1554,66688],{"alt":44,"src":66689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66691,66692],{},[1554,66693],{"alt":44,"src":66694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[39,66696,66698],{"className":53156,"code":66697,"language":53158,"meta":44,"style":44},"\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",[46,66699,66700,66708,66725,66748,66756,66761,66766,66771,66775,66783,66791],{"__ignoreMap":44},[49,66701,66702,66704,66706],{"class":51,"line":52},[49,66703,1129],{"class":55},[49,66705,51889],{"class":51389},[49,66707,51396],{"class":55},[49,66709,66710,66712,66715,66718,66720,66723],{"class":51,"line":84},[49,66711,52233],{"class":55},[49,66713,66714],{"class":51389},"form",[49,66716,66717],{"class":2055}," action",[49,66719,60],{"class":55},[49,66721,66722],{"class":328},"\"http:\u002F\u002Fwww.itcast.cn\"",[49,66724,51396],{"class":55},[49,66726,66727,66729,66731,66733,66735,66738,66741,66743,66746],{"class":51,"line":109},[49,66728,51430],{"class":55},[49,66730,53910],{"class":51389},[49,66732,53913],{"class":2055},[49,66734,60],{"class":55},[49,66736,66737],{"class":328},"\"submit\"",[49,66739,66740],{"class":2055}," value",[49,66742,60],{"class":55},[49,66744,66745],{"class":328},"\"免费注册\"",[49,66747,51396],{"class":55},[49,66749,66750,66752,66754],{"class":51,"line":120},[49,66751,51430],{"class":55},[49,66753,51902],{"class":51389},[49,66755,51396],{"class":55},[49,66757,66758],{"class":51,"line":135},[49,66759,66760],{"class":55},"      const form = document.querySelector('form')\n",[49,66762,66763],{"class":51,"line":1306},[49,66764,66765],{"class":55},"      form.addEventListener('submit', function (e) {\n",[49,66767,66768],{"class":51,"line":1312},[49,66769,66770],{"class":55},"        e.preventDefault()\n",[49,66772,66773],{"class":51,"line":1403},[49,66774,64904],{"class":55},[49,66776,66777,66779,66781],{"class":51,"line":1409},[49,66778,51865],{"class":55},[49,66780,51902],{"class":51389},[49,66782,51396],{"class":55},[49,66784,66785,66787,66789],{"class":51,"line":1421},[49,66786,52506],{"class":55},[49,66788,66714],{"class":51389},[49,66790,51396],{"class":55},[49,66792,66793,66795,66797],{"class":51,"line":1704},[49,66794,51874],{"class":55},[49,66796,51889],{"class":51389},[49,66798,51396],{"class":55},[14,66800,66801],{},"点击不在跳转！！！",[195,66803,66805],{"id":66804},"_332-事件委托","3.3.2 事件委托",[14,66807,66808],{},[1554,66809],{"alt":44,"src":66810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[39,66812,66814],{"className":50722,"code":66813,"language":50724,"meta":44,"style":44},"\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",[46,66815,66816,66826,66840,66844,66852,66866,66886,66898,66906,66910,66918,66926,66938,66950,66962,66974,66986,66999,67007,67015,67020,67039,67060,67065,67070,67075,67080,67089,67093,67103,67107,67112,67117,67131,67141,67145,67149,67157,67165,67169],{"__ignoreMap":44},[49,66817,66818,66820,66822,66824],{"class":51,"line":52},[49,66819,51386],{"class":55},[49,66821,51390],{"class":51389},[49,66823,51393],{"class":2055},[49,66825,51396],{"class":55},[49,66827,66828,66830,66832,66834,66836,66838],{"class":51,"line":84},[49,66829,1129],{"class":55},[49,66831,50724],{"class":51389},[49,66833,51405],{"class":2055},[49,66835,60],{"class":55},[49,66837,51410],{"class":328},[49,66839,51396],{"class":55},[49,66841,66842],{"class":51,"line":109},[49,66843,2492],{"emptyLinePlaceholder":151},[49,66845,66846,66848,66850],{"class":51,"line":120},[49,66847,1129],{"class":55},[49,66849,51423],{"class":51389},[49,66851,51396],{"class":55},[49,66853,66854,66856,66858,66860,66862,66864],{"class":51,"line":135},[49,66855,52233],{"class":55},[49,66857,51433],{"class":51389},[49,66859,51436],{"class":2055},[49,66861,60],{"class":55},[49,66863,51441],{"class":328},[49,66865,51396],{"class":55},[49,66867,66868,66870,66872,66874,66876,66878,66880,66882,66884],{"class":51,"line":1306},[49,66869,52233],{"class":55},[49,66871,51433],{"class":51389},[49,66873,15010],{"class":2055},[49,66875,60],{"class":55},[49,66877,51480],{"class":328},[49,66879,51460],{"class":2055},[49,66881,60],{"class":55},[49,66883,51487],{"class":328},[49,66885,51396],{"class":55},[49,66887,66888,66890,66892,66894,66896],{"class":51,"line":1312},[49,66889,52233],{"class":55},[49,66891,51496],{"class":51389},[49,66893,51499],{"class":55},[49,66895,51496],{"class":51389},[49,66897,51396],{"class":55},[49,66899,66900,66902,66904],{"class":51,"line":1403},[49,66901,51874],{"class":55},[49,66903,51423],{"class":51389},[49,66905,51396],{"class":55},[49,66907,66908],{"class":51,"line":1409},[49,66909,2492],{"emptyLinePlaceholder":151},[49,66911,66912,66914,66916],{"class":51,"line":1421},[49,66913,1129],{"class":55},[49,66915,51889],{"class":51389},[49,66917,51396],{"class":55},[49,66919,66920,66922,66924],{"class":51,"line":1704},[49,66921,52233],{"class":55},[49,66923,1226],{"class":51389},[49,66925,51396],{"class":55},[49,66927,66928,66930,66932,66934,66936],{"class":51,"line":1709},[49,66929,51430],{"class":55},[49,66931,181],{"class":51389},[49,66933,54055],{"class":55},[49,66935,181],{"class":51389},[49,66937,51396],{"class":55},[49,66939,66940,66942,66944,66946,66948],{"class":51,"line":1715},[49,66941,51430],{"class":55},[49,66943,181],{"class":51389},[49,66945,54074],{"class":55},[49,66947,181],{"class":51389},[49,66949,51396],{"class":55},[49,66951,66952,66954,66956,66958,66960],{"class":51,"line":1720},[49,66953,51430],{"class":55},[49,66955,181],{"class":51389},[49,66957,54093],{"class":55},[49,66959,181],{"class":51389},[49,66961,51396],{"class":55},[49,66963,66964,66966,66968,66970,66972],{"class":51,"line":1734},[49,66965,51430],{"class":55},[49,66967,181],{"class":51389},[49,66969,54112],{"class":55},[49,66971,181],{"class":51389},[49,66973,51396],{"class":55},[49,66975,66976,66978,66980,66982,66984],{"class":51,"line":1739},[49,66977,51430],{"class":55},[49,66979,181],{"class":51389},[49,66981,54131],{"class":55},[49,66983,181],{"class":51389},[49,66985,51396],{"class":55},[49,66987,66988,66990,66992,66995,66997],{"class":51,"line":1745},[49,66989,51430],{"class":55},[49,66991,14],{"class":51389},[49,66993,66994],{"class":55},">我不需要变色\u003C\u002F",[49,66996,14],{"class":51389},[49,66998,51396],{"class":55},[49,67000,67001,67003,67005],{"class":51,"line":1766},[49,67002,52506],{"class":55},[49,67004,1226],{"class":51389},[49,67006,51396],{"class":55},[49,67008,67009,67011,67013],{"class":51,"line":1771},[49,67010,52233],{"class":55},[49,67012,51902],{"class":51389},[49,67014,51396],{"class":55},[49,67016,67017],{"class":51,"line":1785},[49,67018,67019],{"class":283},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[49,67021,67022,67024,67026,67028,67030,67032,67034,67037],{"class":51,"line":1790},[49,67023,11311],{"class":59},[49,67025,61381],{"class":66},[49,67027,13654],{"class":59},[49,67029,54485],{"class":55},[49,67031,54488],{"class":2055},[49,67033,228],{"class":55},[49,67035,67036],{"class":328},"'ul'",[49,67038,81],{"class":55},[49,67040,67041,67044,67046,67048,67050,67052,67054,67056,67058],{"class":51,"line":1819},[49,67042,67043],{"class":55},"    ul.",[49,67045,57902],{"class":2055},[49,67047,228],{"class":55},[49,67049,57907],{"class":328},[49,67051,12525],{"class":55},[49,67053,54538],{"class":59},[49,67055,1750],{"class":55},[49,67057,298],{"class":126},[49,67059,12532],{"class":55},[49,67061,67062],{"class":51,"line":1824},[49,67063,67064],{"class":283},"      \u002F\u002F alert(1)\n",[49,67066,67067],{"class":51,"line":1841},[49,67068,67069],{"class":283},"      \u002F\u002F e.target就是我们点击的对象\n",[49,67071,67072],{"class":51,"line":1846},[49,67073,67074],{"class":283},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[49,67076,67077],{"class":51,"line":1851},[49,67078,67079],{"class":283},"      \u002F\u002F e.target.style.color = 'red'\n",[49,67081,67082,67084,67086],{"class":51,"line":1856},[49,67083,58333],{"class":55},[49,67085,58336],{"class":2055},[49,67087,67088],{"class":55},"(e)\n",[49,67090,67091],{"class":51,"line":1870},[49,67092,2492],{"emptyLinePlaceholder":151},[49,67094,67095,67097,67100],{"class":51,"line":1875},[49,67096,58333],{"class":55},[49,67098,67099],{"class":2055},"dir",[49,67101,67102],{"class":55},"(e.target)\n",[49,67104,67105],{"class":51,"line":2669},[49,67106,2492],{"emptyLinePlaceholder":151},[49,67108,67109],{"class":51,"line":2683},[49,67110,67111],{"class":283},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[49,67113,67114],{"class":51,"line":2691},[49,67115,67116],{"class":283},"      \u002F\u002F 通过tagName来进行判断\n",[49,67118,67119,67121,67124,67126,67129],{"class":51,"line":2696},[49,67120,54569],{"class":59},[49,67122,67123],{"class":55}," (e.target.tagName ",[49,67125,54575],{"class":59},[49,67127,67128],{"class":328}," 'LI'",[49,67130,12532],{"class":55},[49,67132,67133,67136,67138],{"class":51,"line":2702},[49,67134,67135],{"class":55},"        e.target.style.color ",[49,67137,60],{"class":59},[49,67139,67140],{"class":328}," 'red'\n",[49,67142,67143],{"class":51,"line":2708},[49,67144,52487],{"class":55},[49,67146,67147],{"class":51,"line":2713},[49,67148,33550],{"class":55},[49,67150,67151,67153,67155],{"class":51,"line":8038},[49,67152,52506],{"class":55},[49,67154,51902],{"class":51389},[49,67156,51396],{"class":55},[49,67158,67159,67161,67163],{"class":51,"line":8062},[49,67160,51874],{"class":55},[49,67162,51889],{"class":51389},[49,67164,51396],{"class":55},[49,67166,67167],{"class":51,"line":8067},[49,67168,2492],{"emptyLinePlaceholder":151},[49,67170,67171,67173,67175],{"class":51,"line":8073},[49,67172,51874],{"class":55},[49,67174,50724],{"class":51389},[49,67176,51396],{"class":55},[14,67178,67179],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67181,67182],{},"if(e.target.ragName==='P') {}",[14,67184,67185],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67187,67188],{},"通过事件委托的方式实现tab栏切换改造：",[14,67190,67191],{},"一定要记住自定义属性！！！！！！",[14,67193,67194],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67196,67197],{},"id是自定义的属性名",[14,67199,67200],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[39,67202,67204],{"className":50722,"code":67203,"language":50724,"meta":44,"style":44},"\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",[46,67205,67206,67216,67230,67234,67242,67256,67276,67296,67308,67316,67322,67332,67342,67346,67350,67356,67368,67380,67392,67408,67412,67416,67422,67434,67446,67458,67468,67478,67482,67486,67494,67506,67516,67528,67532,67536,67544,67554,67564,67574,67578,67582,67592,67606,67618,67622,67626,67638,67648,67664,67674,67678,67682,67696,67706,67716,67720,67724,67730,67744,67748,67752,67760,67770,67774,67778,67787,67797,67801,67809,67817,67821,67829,67843,67857,67869,67877,67916,67948,67980,68012,68044,68052,68060,68074,68108,68142,68176,68210,68244,68252,68260,68268,68273,68278,68297,68302,68322,68330,68335,68348,68369,68382,68386,68391,68396,68409,68429,68457,68461,68465,68469,68477,68485,68489],{"__ignoreMap":44},[49,67207,67208,67210,67212,67214],{"class":51,"line":52},[49,67209,51386],{"class":55},[49,67211,51390],{"class":51389},[49,67213,51393],{"class":2055},[49,67215,51396],{"class":55},[49,67217,67218,67220,67222,67224,67226,67228],{"class":51,"line":84},[49,67219,1129],{"class":55},[49,67221,50724],{"class":51389},[49,67223,51405],{"class":2055},[49,67225,60],{"class":55},[49,67227,51410],{"class":328},[49,67229,51396],{"class":55},[49,67231,67232],{"class":51,"line":109},[49,67233,2492],{"emptyLinePlaceholder":151},[49,67235,67236,67238,67240],{"class":51,"line":120},[49,67237,1129],{"class":55},[49,67239,51423],{"class":51389},[49,67241,51396],{"class":55},[49,67243,67244,67246,67248,67250,67252,67254],{"class":51,"line":135},[49,67245,52233],{"class":55},[49,67247,51433],{"class":51389},[49,67249,51436],{"class":2055},[49,67251,60],{"class":55},[49,67253,51441],{"class":328},[49,67255,59216],{"class":55},[49,67257,67258,67260,67262,67264,67266,67268,67270,67272,67274],{"class":51,"line":1306},[49,67259,52233],{"class":55},[49,67261,51433],{"class":51389},[49,67263,51452],{"class":2055},[49,67265,60],{"class":55},[49,67267,51457],{"class":328},[49,67269,51460],{"class":2055},[49,67271,60],{"class":55},[49,67273,51465],{"class":328},[49,67275,59216],{"class":55},[49,67277,67278,67280,67282,67284,67286,67288,67290,67292,67294],{"class":51,"line":1312},[49,67279,52233],{"class":55},[49,67281,51433],{"class":51389},[49,67283,15010],{"class":2055},[49,67285,60],{"class":55},[49,67287,51480],{"class":328},[49,67289,51460],{"class":2055},[49,67291,60],{"class":55},[49,67293,51487],{"class":328},[49,67295,59216],{"class":55},[49,67297,67298,67300,67302,67304,67306],{"class":51,"line":1403},[49,67299,52233],{"class":55},[49,67301,51496],{"class":51389},[49,67303,63714],{"class":55},[49,67305,51496],{"class":51389},[49,67307,51396],{"class":55},[49,67309,67310,67312,67314],{"class":51,"line":1409},[49,67311,52233],{"class":55},[49,67313,143],{"class":51389},[49,67315,51396],{"class":55},[49,67317,67318,67320],{"class":51,"line":1421},[49,67319,6493],{"class":51389},[49,67321,15662],{"class":55},[49,67323,67324,67326,67328,67330],{"class":51,"line":1704},[49,67325,54795],{"class":66},[49,67327,51526],{"class":55},[49,67329,415],{"class":66},[49,67331,1382],{"class":55},[49,67333,67334,67336,67338,67340],{"class":51,"line":1709},[49,67335,54784],{"class":66},[49,67337,51526],{"class":55},[49,67339,415],{"class":66},[49,67341,1382],{"class":55},[49,67343,67344],{"class":51,"line":1715},[49,67345,2279],{"class":55},[49,67347,67348],{"class":51,"line":1720},[49,67349,2492],{"emptyLinePlaceholder":151},[49,67351,67352,67354],{"class":51,"line":1734},[49,67353,63765],{"class":2055},[49,67355,15662],{"class":55},[49,67357,67358,67360,67362,67364,67366],{"class":51,"line":1739},[49,67359,54860],{"class":66},[49,67361,51526],{"class":55},[49,67363,63776],{"class":66},[49,67365,51581],{"class":59},[49,67367,1382],{"class":55},[49,67369,67370,67372,67374,67376,67378],{"class":51,"line":1745},[49,67371,54874],{"class":66},[49,67373,51526],{"class":55},[49,67375,63789],{"class":66},[49,67377,51581],{"class":59},[49,67379,1382],{"class":55},[49,67381,67382,67384,67386,67388,67390],{"class":51,"line":1766},[49,67383,54795],{"class":66},[49,67385,51526],{"class":55},[49,67387,919],{"class":66},[49,67389,51581],{"class":59},[49,67391,1382],{"class":55},[49,67393,67394,67396,67398,67400,67402,67404,67406],{"class":51,"line":1771},[49,67395,62066],{"class":66},[49,67397,51526],{"class":55},[49,67399,441],{"class":66},[49,67401,51581],{"class":59},[49,67403,51610],{"class":66},[49,67405,62333],{"class":66},[49,67407,1382],{"class":55},[49,67409,67410],{"class":51,"line":1785},[49,67411,2279],{"class":55},[49,67413,67414],{"class":51,"line":1790},[49,67415,2492],{"emptyLinePlaceholder":151},[49,67417,67418,67420],{"class":51,"line":1819},[49,67419,63834],{"class":2055},[49,67421,15662],{"class":55},[49,67423,67424,67426,67428,67430,67432],{"class":51,"line":1824},[49,67425,54860],{"class":66},[49,67427,51526],{"class":55},[49,67429,533],{"class":66},[49,67431,550],{"class":59},[49,67433,1382],{"class":55},[49,67435,67436,67438,67440,67442,67444],{"class":51,"line":1841},[49,67437,54874],{"class":66},[49,67439,51526],{"class":55},[49,67441,1126],{"class":66},[49,67443,51581],{"class":59},[49,67445,1382],{"class":55},[49,67447,67448,67450,67452,67454,67456],{"class":51,"line":1846},[49,67449,57448],{"class":66},[49,67451,51526],{"class":55},[49,67453,1126],{"class":66},[49,67455,51581],{"class":59},[49,67457,1382],{"class":55},[49,67459,67460,67462,67464,67466],{"class":51,"line":1851},[49,67461,55098],{"class":66},[49,67463,51526],{"class":55},[49,67465,51566],{"class":66},[49,67467,1382],{"class":55},[49,67469,67470,67472,67474,67476],{"class":51,"line":1856},[49,67471,55109],{"class":66},[49,67473,51526],{"class":55},[49,67475,51757],{"class":66},[49,67477,1382],{"class":55},[49,67479,67480],{"class":51,"line":1870},[49,67481,2279],{"class":55},[49,67483,67484],{"class":51,"line":1875},[49,67485,2492],{"emptyLinePlaceholder":151},[49,67487,67488,67490,67492],{"class":51,"line":2669},[49,67489,63834],{"class":2055},[49,67491,63907],{"class":51389},[49,67493,15662],{"class":55},[49,67495,67496,67498,67500,67502,67504],{"class":51,"line":2683},[49,67497,55011],{"class":66},[49,67499,51526],{"class":55},[49,67501,1019],{"class":66},[49,67503,51581],{"class":59},[49,67505,1382],{"class":55},[49,67507,67508,67510,67512,67514],{"class":51,"line":2691},[49,67509,62423],{"class":66},[49,67511,51526],{"class":55},[49,67513,63930],{"class":66},[49,67515,1382],{"class":55},[49,67517,67518,67520,67522,67524,67526],{"class":51,"line":2696},[49,67519,62089],{"class":66},[49,67521,51526],{"class":55},[49,67523,919],{"class":66},[49,67525,51581],{"class":59},[49,67527,1382],{"class":55},[49,67529,67530],{"class":51,"line":2702},[49,67531,2279],{"class":55},[49,67533,67534],{"class":51,"line":2708},[49,67535,2492],{"emptyLinePlaceholder":151},[49,67537,67538,67540,67542],{"class":51,"line":2713},[49,67539,63834],{"class":2055},[49,67541,61381],{"class":51389},[49,67543,15662],{"class":55},[49,67545,67546,67548,67550,67552],{"class":51,"line":8038},[49,67547,54821],{"class":66},[49,67549,51526],{"class":55},[49,67551,54826],{"class":66},[49,67553,1382],{"class":55},[49,67555,67556,67558,67560,67562],{"class":51,"line":8062},[49,67557,55098],{"class":66},[49,67559,51526],{"class":55},[49,67561,51566],{"class":66},[49,67563,1382],{"class":55},[49,67565,67566,67568,67570,67572],{"class":51,"line":8067},[49,67567,55109],{"class":66},[49,67569,51526],{"class":55},[49,67571,51669],{"class":66},[49,67573,1382],{"class":55},[49,67575,67576],{"class":51,"line":8073},[49,67577,2279],{"class":55},[49,67579,67580],{"class":51,"line":8100},[49,67581,2492],{"emptyLinePlaceholder":151},[49,67583,67584,67586,67588,67590],{"class":51,"line":8105},[49,67585,63834],{"class":2055},[49,67587,61381],{"class":51389},[49,67589,55164],{"class":51389},[49,67591,15662],{"class":55},[49,67593,67594,67596,67598,67600,67602,67604],{"class":51,"line":8111},[49,67595,54795],{"class":66},[49,67597,51526],{"class":55},[49,67599,415],{"class":66},[49,67601,9040],{"class":66},[49,67603,51581],{"class":59},[49,67605,1382],{"class":55},[49,67607,67608,67610,67612,67614,67616],{"class":51,"line":8123},[49,67609,55011],{"class":66},[49,67611,51526],{"class":55},[49,67613,768],{"class":66},[49,67615,51581],{"class":59},[49,67617,1382],{"class":55},[49,67619,67620],{"class":51,"line":8135},[49,67621,2279],{"class":55},[49,67623,67624],{"class":51,"line":8147},[49,67625,2492],{"emptyLinePlaceholder":151},[49,67627,67628,67630,67632,67634,67636],{"class":51,"line":9806},[49,67629,63834],{"class":2055},[49,67631,61381],{"class":51389},[49,67633,55164],{"class":51389},[49,67635,1490],{"class":51389},[49,67637,15662],{"class":55},[49,67639,67640,67642,67644,67646],{"class":51,"line":9831},[49,67641,64059],{"class":66},[49,67643,51526],{"class":55},[49,67645,54826],{"class":66},[49,67647,1382],{"class":55},[49,67649,67650,67652,67654,67656,67658,67660,67662],{"class":51,"line":9854},[49,67651,62321],{"class":66},[49,67653,51526],{"class":55},[49,67655,301],{"class":66},[49,67657,51581],{"class":59},[49,67659,51610],{"class":66},[49,67661,64080],{"class":66},[49,67663,1382],{"class":55},[49,67665,67666,67668,67670,67672],{"class":51,"line":9878},[49,67667,57505],{"class":66},[49,67669,51526],{"class":55},[49,67671,62458],{"class":66},[49,67673,1382],{"class":55},[49,67675,67676],{"class":51,"line":9883},[49,67677,2279],{"class":55},[49,67679,67680],{"class":51,"line":9888},[49,67681,2492],{"emptyLinePlaceholder":151},[49,67683,67684,67686,67688,67690,67692,67694],{"class":51,"line":9893},[49,67685,63834],{"class":2055},[49,67687,61381],{"class":51389},[49,67689,55164],{"class":51389},[49,67691,1490],{"class":51389},[49,67693,64113],{"class":2055},[49,67695,15662],{"class":55},[49,67697,67698,67700,67702,67704],{"class":51,"line":9902},[49,67699,61880],{"class":66},[49,67701,51526],{"class":55},[49,67703,64124],{"class":66},[49,67705,1382],{"class":55},[49,67707,67708,67710,67712,67714],{"class":51,"line":9907},[49,67709,57505],{"class":66},[49,67711,51526],{"class":55},[49,67713,64124],{"class":66},[49,67715,1382],{"class":55},[49,67717,67718],{"class":51,"line":9913},[49,67719,2279],{"class":55},[49,67721,67722],{"class":51,"line":9934},[49,67723,2492],{"emptyLinePlaceholder":151},[49,67725,67726,67728],{"class":51,"line":9940},[49,67727,64149],{"class":2055},[49,67729,15662],{"class":55},[49,67731,67732,67734,67736,67738,67740,67742],{"class":51,"line":9954},[49,67733,54784],{"class":66},[49,67735,51526],{"class":55},[49,67737,415],{"class":66},[49,67739,64162],{"class":66},[49,67741,51581],{"class":59},[49,67743,1382],{"class":55},[49,67745,67746],{"class":51,"line":9960},[49,67747,2279],{"class":55},[49,67749,67750],{"class":51,"line":9987},[49,67751,2492],{"emptyLinePlaceholder":151},[49,67753,67754,67756,67758],{"class":51,"line":9996},[49,67755,64149],{"class":2055},[49,67757,62263],{"class":2055},[49,67759,15662],{"class":55},[49,67761,67762,67764,67766,67768],{"class":51,"line":10002},[49,67763,55098],{"class":66},[49,67765,51526],{"class":55},[49,67767,54826],{"class":66},[49,67769,1382],{"class":55},[49,67771,67772],{"class":51,"line":10010},[49,67773,2279],{"class":55},[49,67775,67776],{"class":51,"line":10015},[49,67777,2492],{"emptyLinePlaceholder":151},[49,67779,67780,67782,67785],{"class":51,"line":16694},[49,67781,64149],{"class":2055},[49,67783,67784],{"class":2055}," .active",[49,67786,15662],{"class":55},[49,67788,67789,67791,67793,67795],{"class":51,"line":16700},[49,67790,55098],{"class":66},[49,67792,51526],{"class":55},[49,67794,60958],{"class":66},[49,67796,1382],{"class":55},[49,67798,67799],{"class":51,"line":16723},[49,67800,2279],{"class":55},[49,67802,67803,67805,67807],{"class":51,"line":16729},[49,67804,52506],{"class":55},[49,67806,143],{"class":51389},[49,67808,51396],{"class":55},[49,67810,67811,67813,67815],{"class":51,"line":16752},[49,67812,51874],{"class":55},[49,67814,51423],{"class":51389},[49,67816,51396],{"class":55},[49,67818,67819],{"class":51,"line":16766},[49,67820,2492],{"emptyLinePlaceholder":151},[49,67822,67823,67825,67827],{"class":51,"line":16786},[49,67824,1129],{"class":55},[49,67826,51889],{"class":51389},[49,67828,51396],{"class":55},[49,67830,67831,67833,67835,67837,67839,67841],{"class":51,"line":16792},[49,67832,52233],{"class":55},[49,67834,51700],{"class":51389},[49,67836,53575],{"class":2055},[49,67838,60],{"class":55},[49,67840,64264],{"class":328},[49,67842,51396],{"class":55},[49,67844,67845,67847,67849,67851,67853,67855],{"class":51,"line":16803},[49,67846,51430],{"class":55},[49,67848,51700],{"class":51389},[49,67850,53575],{"class":2055},[49,67852,60],{"class":55},[49,67854,64279],{"class":328},[49,67856,51396],{"class":55},[49,67858,67859,67861,67863,67865,67867],{"class":51,"line":16826},[49,67860,55323],{"class":55},[49,67862,195],{"class":51389},[49,67864,64290],{"class":55},[49,67866,195],{"class":51389},[49,67868,51396],{"class":55},[49,67870,67871,67873,67875],{"class":51,"line":16848},[49,67872,55323],{"class":55},[49,67874,1226],{"class":51389},[49,67876,51396],{"class":55},[49,67878,67879,67881,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901,67903,67906,67908,67910,67912,67914],{"class":51,"line":16853},[49,67880,55391],{"class":55},[49,67882,181],{"class":51389},[49,67884,61141],{"class":55},[49,67886,56],{"class":51389},[49,67888,53575],{"class":2055},[49,67890,60],{"class":55},[49,67892,59795],{"class":328},[49,67894,61146],{"class":2055},[49,67896,60],{"class":55},[49,67898,64325],{"class":328},[49,67900,54040],{"class":2055},[49,67902,60],{"class":55},[49,67904,67905],{"class":328},"\"0\"",[49,67907,64328],{"class":55},[49,67909,56],{"class":51389},[49,67911,55403],{"class":55},[49,67913,181],{"class":51389},[49,67915,51396],{"class":55},[49,67917,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940,67942,67944,67946],{"class":51,"line":16859},[49,67919,55391],{"class":55},[49,67921,181],{"class":51389},[49,67923,61141],{"class":55},[49,67925,56],{"class":51389},[49,67927,61146],{"class":2055},[49,67929,60],{"class":55},[49,67931,64325],{"class":328},[49,67933,54040],{"class":2055},[49,67935,60],{"class":55},[49,67937,3770],{"class":328},[49,67939,64355],{"class":55},[49,67941,56],{"class":51389},[49,67943,55403],{"class":55},[49,67945,181],{"class":51389},[49,67947,51396],{"class":55},[49,67949,67950,67952,67954,67956,67958,67960,67962,67964,67966,67968,67970,67972,67974,67976,67978],{"class":51,"line":16873},[49,67951,55391],{"class":55},[49,67953,181],{"class":51389},[49,67955,61141],{"class":55},[49,67957,56],{"class":51389},[49,67959,61146],{"class":2055},[49,67961,60],{"class":55},[49,67963,64325],{"class":328},[49,67965,54040],{"class":2055},[49,67967,60],{"class":55},[49,67969,3793],{"class":328},[49,67971,64382],{"class":55},[49,67973,56],{"class":51389},[49,67975,55403],{"class":55},[49,67977,181],{"class":51389},[49,67979,51396],{"class":55},[49,67981,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008,68010],{"class":51,"line":16886},[49,67983,55391],{"class":55},[49,67985,181],{"class":51389},[49,67987,61141],{"class":55},[49,67989,56],{"class":51389},[49,67991,61146],{"class":2055},[49,67993,60],{"class":55},[49,67995,64325],{"class":328},[49,67997,54040],{"class":2055},[49,67999,60],{"class":55},[49,68001,3806],{"class":328},[49,68003,64409],{"class":55},[49,68005,56],{"class":51389},[49,68007,55403],{"class":55},[49,68009,181],{"class":51389},[49,68011,51396],{"class":55},[49,68013,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042],{"class":51,"line":16891},[49,68015,55391],{"class":55},[49,68017,181],{"class":51389},[49,68019,61141],{"class":55},[49,68021,56],{"class":51389},[49,68023,61146],{"class":2055},[49,68025,60],{"class":55},[49,68027,64325],{"class":328},[49,68029,54040],{"class":2055},[49,68031,60],{"class":55},[49,68033,3819],{"class":328},[49,68035,64436],{"class":55},[49,68037,56],{"class":51389},[49,68039,55403],{"class":55},[49,68041,181],{"class":51389},[49,68043,51396],{"class":55},[49,68045,68046,68048,68050],{"class":51,"line":16905},[49,68047,55496],{"class":55},[49,68049,1226],{"class":51389},[49,68051,51396],{"class":55},[49,68053,68054,68056,68058],{"class":51,"line":16910},[49,68055,51865],{"class":55},[49,68057,51700],{"class":51389},[49,68059,51396],{"class":55},[49,68061,68062,68064,68066,68068,68070,68072],{"class":51,"line":16916},[49,68063,51430],{"class":55},[49,68065,51700],{"class":51389},[49,68067,53575],{"class":2055},[49,68069,60],{"class":55},[49,68071,64473],{"class":328},[49,68073,51396],{"class":55},[49,68075,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106],{"class":51,"line":16921},[49,68077,55323],{"class":55},[49,68079,51700],{"class":51389},[49,68081,53575],{"class":2055},[49,68083,60],{"class":55},[49,68085,64488],{"class":328},[49,68087,61141],{"class":55},[49,68089,1554],{"class":51389},[49,68091,55328],{"class":2055},[49,68093,60],{"class":55},[49,68095,64499],{"class":328},[49,68097,55336],{"class":2055},[49,68099,60],{"class":55},[49,68101,7742],{"class":328},[49,68103,64508],{"class":55},[49,68105,51700],{"class":51389},[49,68107,51396],{"class":55},[49,68109,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140],{"class":51,"line":16935},[49,68111,55323],{"class":55},[49,68113,51700],{"class":51389},[49,68115,53575],{"class":2055},[49,68117,60],{"class":55},[49,68119,62712],{"class":328},[49,68121,61141],{"class":55},[49,68123,1554],{"class":51389},[49,68125,55328],{"class":2055},[49,68127,60],{"class":55},[49,68129,64535],{"class":328},[49,68131,55336],{"class":2055},[49,68133,60],{"class":55},[49,68135,7742],{"class":328},[49,68137,64508],{"class":55},[49,68139,51700],{"class":51389},[49,68141,51396],{"class":55},[49,68143,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166,68168,68170,68172,68174],{"class":51,"line":16940},[49,68145,55323],{"class":55},[49,68147,51700],{"class":51389},[49,68149,53575],{"class":2055},[49,68151,60],{"class":55},[49,68153,62712],{"class":328},[49,68155,61141],{"class":55},[49,68157,1554],{"class":51389},[49,68159,55328],{"class":2055},[49,68161,60],{"class":55},[49,68163,64570],{"class":328},[49,68165,55336],{"class":2055},[49,68167,60],{"class":55},[49,68169,7742],{"class":328},[49,68171,64508],{"class":55},[49,68173,51700],{"class":51389},[49,68175,51396],{"class":55},[49,68177,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204,68206,68208],{"class":51,"line":16945},[49,68179,55323],{"class":55},[49,68181,51700],{"class":51389},[49,68183,53575],{"class":2055},[49,68185,60],{"class":55},[49,68187,62712],{"class":328},[49,68189,61141],{"class":55},[49,68191,1554],{"class":51389},[49,68193,55328],{"class":2055},[49,68195,60],{"class":55},[49,68197,64605],{"class":328},[49,68199,55336],{"class":2055},[49,68201,60],{"class":55},[49,68203,7742],{"class":328},[49,68205,64508],{"class":55},[49,68207,51700],{"class":51389},[49,68209,51396],{"class":55},[49,68211,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242],{"class":51,"line":16959},[49,68213,55323],{"class":55},[49,68215,51700],{"class":51389},[49,68217,53575],{"class":2055},[49,68219,60],{"class":55},[49,68221,62712],{"class":328},[49,68223,61141],{"class":55},[49,68225,1554],{"class":51389},[49,68227,55328],{"class":2055},[49,68229,60],{"class":55},[49,68231,64640],{"class":328},[49,68233,55336],{"class":2055},[49,68235,60],{"class":55},[49,68237,7742],{"class":328},[49,68239,64508],{"class":55},[49,68241,51700],{"class":51389},[49,68243,51396],{"class":55},[49,68245,68246,68248,68250],{"class":51,"line":16971},[49,68247,51865],{"class":55},[49,68249,51700],{"class":51389},[49,68251,51396],{"class":55},[49,68253,68254,68256,68258],{"class":51,"line":16976},[49,68255,52506],{"class":55},[49,68257,51700],{"class":51389},[49,68259,51396],{"class":55},[49,68261,68262,68264,68266],{"class":51,"line":16989},[49,68263,52233],{"class":55},[49,68265,51902],{"class":51389},[49,68267,51396],{"class":55},[49,68269,68270],{"class":51,"line":16994},[49,68271,68272],{"class":283},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[49,68274,68275],{"class":51,"line":16999},[49,68276,68277],{"class":283},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[49,68279,68280,68282,68284,68286,68288,68290,68292,68295],{"class":51,"line":17004},[49,68281,11311],{"class":59},[49,68283,61381],{"class":66},[49,68285,13654],{"class":59},[49,68287,54485],{"class":55},[49,68289,54488],{"class":2055},[49,68291,228],{"class":55},[49,68293,68294],{"class":328},"'.tab-nav ul'",[49,68296,81],{"class":55},[49,68298,68299],{"class":51,"line":17017},[49,68300,68301],{"class":283},"    \u002F\u002F 2.添加事件\n",[49,68303,68304,68306,68308,68310,68312,68314,68316,68318,68320],{"class":51,"line":17022},[49,68305,67043],{"class":55},[49,68307,57902],{"class":2055},[49,68309,228],{"class":55},[49,68311,57907],{"class":328},[49,68313,12525],{"class":55},[49,68315,54538],{"class":59},[49,68317,1750],{"class":55},[49,68319,298],{"class":126},[49,68321,12532],{"class":55},[49,68323,68324,68326,68328],{"class":51,"line":32722},[49,68325,58333],{"class":55},[49,68327,67099],{"class":2055},[49,68329,67102],{"class":55},[49,68331,68332],{"class":51,"line":32728},[49,68333,68334],{"class":283},"      \u002F\u002Fe.targer是我们点击的对象\n",[49,68336,68337,68339,68341,68343,68346],{"class":51,"line":32734},[49,68338,54569],{"class":59},[49,68340,67123],{"class":55},[49,68342,54575],{"class":59},[49,68344,68345],{"class":328}," 'A'",[49,68347,12532],{"class":55},[49,68349,68350,68352,68354,68356,68359,68361,68363,68365,68367],{"class":51,"line":32740},[49,68351,52014],{"class":55},[49,68353,54488],{"class":2055},[49,68355,228],{"class":55},[49,68357,68358],{"class":328},"'.active'",[49,68360,57092],{"class":55},[49,68362,57095],{"class":2055},[49,68364,228],{"class":55},[49,68366,64803],{"class":328},[49,68368,81],{"class":55},[49,68370,68371,68374,68376,68378,68380],{"class":51,"line":32746},[49,68372,68373],{"class":55},"        e.target.classList.",[49,68375,5424],{"class":2055},[49,68377,228],{"class":55},[49,68379,64803],{"class":328},[49,68381,81],{"class":55},[49,68383,68384],{"class":51,"line":32757},[49,68385,2492],{"emptyLinePlaceholder":151},[49,68387,68388],{"class":51,"line":32763},[49,68389,68390],{"class":283},"        \u002F\u002F 下面大盒子模块\n",[49,68392,68393],{"class":51,"line":32783},[49,68394,68395],{"class":283},"        \u002F\u002F console.log(e.target.dataset.id)\n",[49,68397,68398,68400,68402,68404,68406],{"class":51,"line":32789},[49,68399,61359],{"class":59},[49,68401,3124],{"class":66},[49,68403,13654],{"class":59},[49,68405,45655],{"class":59},[49,68407,68408],{"class":55},"e.target.dataset.id\n",[49,68410,68411,68413,68415,68417,68419,68421,68423,68425,68427],{"class":51,"line":32800},[49,68412,52014],{"class":55},[49,68414,54488],{"class":2055},[49,68416,228],{"class":55},[49,68418,64851],{"class":328},[49,68420,57092],{"class":55},[49,68422,57095],{"class":2055},[49,68424,228],{"class":55},[49,68426,64803],{"class":328},[49,68428,81],{"class":55},[49,68430,68431,68433,68435,68437,68439,68441,68443,68445,68447,68449,68451,68453,68455],{"class":51,"line":32806},[49,68432,52014],{"class":55},[49,68434,54488],{"class":2055},[49,68436,228],{"class":55},[49,68438,64877],{"class":328},[49,68440,661],{"class":55},[49,68442,45655],{"class":59},[49,68444,25209],{"class":66},[49,68446,57121],{"class":328},[49,68448,57092],{"class":55},[49,68450,5424],{"class":2055},[49,68452,228],{"class":55},[49,68454,64803],{"class":328},[49,68456,81],{"class":55},[49,68458,68459],{"class":51,"line":32812},[49,68460,2492],{"emptyLinePlaceholder":151},[49,68462,68463],{"class":51,"line":32818},[49,68464,52487],{"class":55},[49,68466,68467],{"class":51,"line":32824},[49,68468,33550],{"class":55},[49,68470,68471,68473,68475],{"class":51,"line":32830},[49,68472,52506],{"class":55},[49,68474,51902],{"class":51389},[49,68476,51396],{"class":55},[49,68478,68479,68481,68483],{"class":51,"line":32836},[49,68480,51874],{"class":55},[49,68482,51889],{"class":51389},[49,68484,51396],{"class":55},[49,68486,68487],{"class":51,"line":32842},[49,68488,2492],{"emptyLinePlaceholder":151},[49,68490,68491,68493,68495],{"class":51,"line":32862},[49,68492,51874],{"class":55},[49,68494,50724],{"class":51389},[49,68496,51396],{"class":55},[195,68498,68500],{"id":68499},"_333-页面加载事件","3.3.3 页面加载事件",[178,68502,68503],{},[181,68504,68505],{},"load",[14,68507,68508],{},[1554,68509],{"alt":44,"src":68510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68512,68513],{},"window代表整个窗口，比document还要大",[14,68515,68516],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68518,68519],{},"img.addEventListener('load', function () {",[14,68521,68522],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68524,52553],{},[178,68526,68527],{"start":84},[181,68528,68529],{},"DOMContentLoaded",[14,68531,68532],{},[1554,68533],{"alt":44,"src":68534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68536,68537],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[195,68539,68541],{"id":68540},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68543,68544],{},[1554,68545],{"alt":44,"src":68546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68548,68549],{},[1554,68550],{"alt":44,"src":68551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68553,68554],{},[1554,68555],{"alt":44,"src":68556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68558,68559],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68561,68562],{},"获得的是数字型数据，不带单位",[14,68564,68565],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68567,68568],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68570,68571],{},"它是通过document.documentElement来获取",[14,68573,68574],{},[1554,68575],{"alt":44,"src":68576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68578,68579],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[195,68581,68583],{"id":68582},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68585,68586],{},[1554,68587],{"alt":44,"src":68588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68590,68591],{},[1554,68592],{"alt":44,"src":68593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[195,68595,68597],{"id":68596},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68599,68600],{},[1554,68601],{"alt":44,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68604,68605],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68607,68608],{},[1554,68609],{"alt":44,"src":68610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68612,68613],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68615,68616],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68618,68619],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68621,68622],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68624,68625],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68627,68628],{},[1554,68629],{"alt":44,"src":68630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68632,68633],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68635,68636],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68638,68639],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68641,68642],{},"e.pageX-box.getBoundingClientRect()",[195,68644,68646],{"id":68645},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68648,68649],{},[1554,68650],{"alt":44,"src":68651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68653,68654],{},"这个是相对于视口来说的，它是个方法，不是属性值",[195,68656,68658],{"id":68657},"_338-总结","3.3.8 总结",[14,68660,68661],{},[1554,68662],{"alt":44,"src":68663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68665,68666],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68668,68669],{},"修改盒子的宽高只能通过width和height来实现",[195,68671,68673],{"id":68672},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[39,68675,68677],{"className":50722,"code":68676,"language":50724,"meta":44,"style":44},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[46,68678,68679,68684,68689,68694,68699],{"__ignoreMap":44},[49,68680,68681],{"class":51,"line":52},[49,68682,68683],{"class":55},"\u002F* 页面滑动 *\u002F\n",[49,68685,68686],{"class":51,"line":84},[49,68687,68688],{"class":55},"html {\n",[49,68690,68691],{"class":51,"line":109},[49,68692,68693],{"class":55},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[49,68695,68696],{"class":51,"line":120},[49,68697,68698],{"class":55},"  scroll-behavior: smooth;\n",[49,68700,68701],{"class":51,"line":135},[49,68702,1657],{"class":55},[14,68704,68705],{},"默认是auto",[195,68707,68709],{"id":68708},"_3310-日期对象","3.3.10 日期对象",[22088,68711,68713],{"id":68712},"_33101-实例化","3.3.10.1 实例化",[14,68715,68716],{},[1554,68717],{"alt":44,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22088,68720,68722],{"id":68721},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68724,68725],{},[1554,68726],{"alt":44,"src":68727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68729,68730],{},"月份+1",[14,68732,68733],{},"老外认为第一天为0，星期天",[14,68735,68736],{},"方法使用的时候必须要跟括号",[14,68738,68739],{},"快速获得日期",[14,68741,68742],{},"\u002F\u002F 得到年月日",[14,68744,68745],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68747,68748],{},"\u002F\u002F 得到当地日期",[14,68750,68751],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68753,68754],{},"\u002F\u002F 得到当地时间",[14,68756,68757],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68759,68760],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68762,68763],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51902,68765,68766],{},"\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,68768,68769],{},"学会去封装函数！",[22088,68771,68773],{"id":68772},"_33103-时间戳","3.3.10.3 时间戳",[14,68775,68776],{},[1554,68777],{"alt":44,"src":68778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68780,68781],{},[1554,68782],{"alt":44,"src":68783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68785,68786],{},"三种方法记住一个就可以",[195,68788,68790],{"id":68789},"_3311-节点操作","3.3.11 节点操作",[22088,68792,68794],{"id":68793},"_33111-dom节点","3.3.11.1 DOM节点",[14,68796,68797],{},[1554,68798],{"alt":44,"src":68799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68801,68802],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22088,68804,68806],{"id":68805},"_33112-查找节点","3.3.11.2 查找节点",[14,68808,68809],{},"前边的document.querySelector()是获取的元素",[14,68811,68812],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68814,68815],{},[1554,68816],{"alt":44,"src":68817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[178,68819,68820],{},[181,68821,68822],{},"父节点",[14,68824,68825],{},[1554,68826],{"alt":44,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[178,68829,68830],{"start":84},[181,68831,68832],{},"子节点",[14,68834,68835],{},[1554,68836],{"alt":44,"src":68837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68839,68840],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68842,68843],{},"children获得的是伪数组，是亲儿子",[178,68845,68846],{"start":109},[181,68847,68848],{},"兄弟节点",[14,68850,68851],{},[1554,68852],{"alt":44,"src":68853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22088,68855,68857],{"id":68856},"_33113-增加节点","3.3.11.3 增加节点",[14,68859,68860],{},[1554,68861],{"alt":44,"src":68862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68864,68865],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68867,68868],{},[1554,68869],{"alt":44,"src":68870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68872,68873],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68875,68876],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68878,68879],{},"例：",[51902,68881,68882],{},"\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,68884,68885],{},[1554,68886],{"alt":44,"src":68887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68889,68890],{},"false只克隆标签，里边的内容不会克隆过来",[39,68892,68894],{"className":50722,"code":68893,"language":50724,"meta":44,"style":44},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[46,68895,68896],{"__ignoreMap":44},[49,68897,68898],{"class":51,"line":52},[49,68899,68893],{"class":55},[22088,68901,68903],{"id":68902},"_33114-删除节点","3.3.11.4 删除节点",[14,68905,68906],{},[1554,68907],{"alt":44,"src":68908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68910,68911],{},"父亲删儿子",[14,68913,68914],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[195,68916,68918],{"id":68917},"_3312-m端事件","3.3.12 M端事件",[14,68920,68921],{},"M端就是移动端",[14,68923,68924],{},[1554,68925],{"alt":44,"src":68926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[195,68928,68930],{"id":68929},"_3313-插件","3.3.13 插件",[14,68932,68933],{},"要熟悉官网！！！",[14,68935,68936],{},[56,68937,68938],{"href":68938,"rel":68939},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23955],[14,68941,68942],{},[56,68943,68944],{"href":68944,"rel":68945},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23955],[195,68947,68949],{"id":68948},"_3314-学生信息表","3.3.14 学生信息表",[178,68951,68952,68955,68958,68961,68964,68967,68970,68973],{},[181,68953,68954],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[181,68956,68957],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[181,68959,68960],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[181,68962,68963],{},"用好表单元素自带的属性，value,name等",[181,68965,68966],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[181,68968,68969],{},"不要忘记事件对象",[181,68971,68972],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[181,68974,68975],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68977,68978],{},"结构：",[39,68980,68982],{"className":50722,"code":68981,"language":50724,"meta":44,"style":44},"\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",[46,68983,68984,68994,69008,69012,69020,69034,69054,69075,69088,69112,69120,69124,69132,69145,69166,69194,69222,69227,69249,69269,69288,69296,69324,69346,69366,69386,69406,69426,69446,69454,69474,69482,69486,69499,69507,69515,69523,69536,69549,69562,69575,69588,69601,69614,69622,69630,69638,69643,69648,69653,69658,69663,69668,69673,69678,69683,69688,69693,69698,69703,69711,69719,69727,69731,69751,69770,69790,69810,69830,69850,69854,69859,69879,69884,69894,69899,69904,69924,69946,69951,69961,69965,69969,69974,69979,70008,70022,70037,70041,70045,70049,70054,70065,70078,70083,70088,70093,70098,70103,70107,70112,70117,70126,70131,70136,70148,70153,70160,70164,70169,70179,70184,70194,70199,70227,70248,70258,70278,70296,70313,70330,70347,70364,70368,70378,70383,70388,70393,70404,70408,70412,70416,70421,70426,70447,70459,70464,70469,70474,70488,70493,70500,70504,70508,70516,70520,70528,70532],{"__ignoreMap":44},[49,68985,68986,68988,68990,68992],{"class":51,"line":52},[49,68987,51386],{"class":55},[49,68989,51390],{"class":51389},[49,68991,51393],{"class":2055},[49,68993,51396],{"class":55},[49,68995,68996,68998,69000,69002,69004,69006],{"class":51,"line":84},[49,68997,1129],{"class":55},[49,68999,50724],{"class":51389},[49,69001,51405],{"class":2055},[49,69003,60],{"class":55},[49,69005,51410],{"class":328},[49,69007,51396],{"class":55},[49,69009,69010],{"class":51,"line":109},[49,69011,2492],{"emptyLinePlaceholder":151},[49,69013,69014,69016,69018],{"class":51,"line":120},[49,69015,1129],{"class":55},[49,69017,51423],{"class":51389},[49,69019,51396],{"class":55},[49,69021,69022,69024,69026,69028,69030,69032],{"class":51,"line":135},[49,69023,52233],{"class":55},[49,69025,51433],{"class":51389},[49,69027,51436],{"class":2055},[49,69029,60],{"class":55},[49,69031,51441],{"class":328},[49,69033,59216],{"class":55},[49,69035,69036,69038,69040,69042,69044,69046,69048,69050,69052],{"class":51,"line":1306},[49,69037,52233],{"class":55},[49,69039,51433],{"class":51389},[49,69041,15010],{"class":2055},[49,69043,60],{"class":55},[49,69045,51480],{"class":328},[49,69047,51460],{"class":2055},[49,69049,60],{"class":55},[49,69051,51487],{"class":328},[49,69053,59216],{"class":55},[49,69055,69056,69058,69060,69062,69064,69066,69068,69070,69073],{"class":51,"line":1312},[49,69057,52233],{"class":55},[49,69059,51433],{"class":51389},[49,69061,51452],{"class":2055},[49,69063,60],{"class":55},[49,69065,51457],{"class":328},[49,69067,51460],{"class":2055},[49,69069,60],{"class":55},[49,69071,69072],{"class":328},"\"ie=edge\"",[49,69074,59216],{"class":55},[49,69076,69077,69079,69081,69084,69086],{"class":51,"line":1403},[49,69078,52233],{"class":55},[49,69080,51496],{"class":51389},[49,69082,69083],{"class":55},">学生信息管理\u003C\u002F",[49,69085,51496],{"class":51389},[49,69087,51396],{"class":55},[49,69089,69090,69092,69095,69098,69100,69103,69105,69107,69110],{"class":51,"line":1409},[49,69091,52233],{"class":55},[49,69093,69094],{"class":51389},"link",[49,69096,69097],{"class":2055}," rel",[49,69099,60],{"class":55},[49,69101,69102],{"class":328},"\"stylesheet\"",[49,69104,61146],{"class":2055},[49,69106,60],{"class":55},[49,69108,69109],{"class":328},"\"css\u002Findex.css\"",[49,69111,59216],{"class":55},[49,69113,69114,69116,69118],{"class":51,"line":1421},[49,69115,51874],{"class":55},[49,69117,51423],{"class":51389},[49,69119,51396],{"class":55},[49,69121,69122],{"class":51,"line":1704},[49,69123,2492],{"emptyLinePlaceholder":151},[49,69125,69126,69128,69130],{"class":51,"line":1709},[49,69127,1129],{"class":55},[49,69129,51889],{"class":51389},[49,69131,51396],{"class":55},[49,69133,69134,69136,69138,69141,69143],{"class":51,"line":1715},[49,69135,52233],{"class":55},[49,69137,10],{"class":51389},[49,69139,69140],{"class":55},">新增学员\u003C\u002F",[49,69142,10],{"class":51389},[49,69144,51396],{"class":55},[49,69146,69147,69149,69151,69153,69155,69157,69160,69162,69164],{"class":51,"line":1720},[49,69148,52233],{"class":55},[49,69150,66714],{"class":51389},[49,69152,53575],{"class":2055},[49,69154,60],{"class":55},[49,69156,62753],{"class":328},[49,69158,69159],{"class":2055}," autocomplete",[49,69161,60],{"class":55},[49,69163,31865],{"class":328},[49,69165,51396],{"class":55},[49,69167,69168,69171,69173,69175,69177,69179,69181,69183,69186,69188,69190,69192],{"class":51,"line":1734},[49,69169,69170],{"class":55},"    姓名：\u003C",[49,69172,53910],{"class":51389},[49,69174,53913],{"class":2055},[49,69176,60],{"class":55},[49,69178,62788],{"class":328},[49,69180,53575],{"class":2055},[49,69182,60],{"class":55},[49,69184,69185],{"class":328},"\"uname\"",[49,69187,15010],{"class":2055},[49,69189,60],{"class":55},[49,69191,69185],{"class":328},[49,69193,59216],{"class":55},[49,69195,69196,69199,69201,69203,69205,69207,69209,69211,69214,69216,69218,69220],{"class":51,"line":1739},[49,69197,69198],{"class":55},"    年龄：\u003C",[49,69200,53910],{"class":51389},[49,69202,53913],{"class":2055},[49,69204,60],{"class":55},[49,69206,62788],{"class":328},[49,69208,53575],{"class":2055},[49,69210,60],{"class":55},[49,69212,69213],{"class":328},"\"age\"",[49,69215,15010],{"class":2055},[49,69217,60],{"class":55},[49,69219,69213],{"class":328},[49,69221,59216],{"class":55},[49,69223,69224],{"class":51,"line":1745},[49,69225,69226],{"class":55},"    性别:\n",[49,69228,69229,69231,69234,69236,69238,69241,69243,69245,69247],{"class":51,"line":1766},[49,69230,51430],{"class":55},[49,69232,69233],{"class":51389},"select",[49,69235,15010],{"class":2055},[49,69237,60],{"class":55},[49,69239,69240],{"class":328},"\"gender\"",[49,69242,53575],{"class":2055},[49,69244,60],{"class":55},[49,69246,69240],{"class":328},[49,69248,51396],{"class":55},[49,69250,69251,69253,69256,69258,69260,69262,69265,69267],{"class":51,"line":1771},[49,69252,55323],{"class":55},[49,69254,69255],{"class":51389},"option",[49,69257,66740],{"class":2055},[49,69259,60],{"class":55},[49,69261,10051],{"class":328},[49,69263,69264],{"class":55},">男\u003C\u002F",[49,69266,69255],{"class":51389},[49,69268,51396],{"class":55},[49,69270,69271,69273,69275,69277,69279,69281,69284,69286],{"class":51,"line":1785},[49,69272,55323],{"class":55},[49,69274,69255],{"class":51389},[49,69276,66740],{"class":2055},[49,69278,60],{"class":55},[49,69280,10120],{"class":328},[49,69282,69283],{"class":55},">女\u003C\u002F",[49,69285,69255],{"class":51389},[49,69287,51396],{"class":55},[49,69289,69290,69292,69294],{"class":51,"line":1790},[49,69291,51865],{"class":55},[49,69293,69233],{"class":51389},[49,69295,51396],{"class":55},[49,69297,69298,69301,69303,69305,69307,69309,69311,69313,69316,69318,69320,69322],{"class":51,"line":1819},[49,69299,69300],{"class":55},"    薪资：\u003C",[49,69302,53910],{"class":51389},[49,69304,53913],{"class":2055},[49,69306,60],{"class":55},[49,69308,62788],{"class":328},[49,69310,53575],{"class":2055},[49,69312,60],{"class":55},[49,69314,69315],{"class":328},"\"salary\"",[49,69317,15010],{"class":2055},[49,69319,60],{"class":55},[49,69321,69315],{"class":328},[49,69323,59216],{"class":55},[49,69325,69326,69329,69331,69333,69335,69338,69340,69342,69344],{"class":51,"line":1824},[49,69327,69328],{"class":55},"    就业城市：\u003C",[49,69330,69233],{"class":51389},[49,69332,15010],{"class":2055},[49,69334,60],{"class":55},[49,69336,69337],{"class":328},"\"city\"",[49,69339,53575],{"class":2055},[49,69341,60],{"class":55},[49,69343,69337],{"class":328},[49,69345,51396],{"class":55},[49,69347,69348,69350,69352,69354,69356,69359,69362,69364],{"class":51,"line":1841},[49,69349,55323],{"class":55},[49,69351,69255],{"class":51389},[49,69353,66740],{"class":2055},[49,69355,60],{"class":55},[49,69357,69358],{"class":328},"\"北京\"",[49,69360,69361],{"class":55},">北京\u003C\u002F",[49,69363,69255],{"class":51389},[49,69365,51396],{"class":55},[49,69367,69368,69370,69372,69374,69376,69379,69382,69384],{"class":51,"line":1846},[49,69369,55323],{"class":55},[49,69371,69255],{"class":51389},[49,69373,66740],{"class":2055},[49,69375,60],{"class":55},[49,69377,69378],{"class":328},"\"上海\"",[49,69380,69381],{"class":55},">上海\u003C\u002F",[49,69383,69255],{"class":51389},[49,69385,51396],{"class":55},[49,69387,69388,69390,69392,69394,69396,69399,69402,69404],{"class":51,"line":1851},[49,69389,55323],{"class":55},[49,69391,69255],{"class":51389},[49,69393,66740],{"class":2055},[49,69395,60],{"class":55},[49,69397,69398],{"class":328},"\"广州\"",[49,69400,69401],{"class":55},">广州\u003C\u002F",[49,69403,69255],{"class":51389},[49,69405,51396],{"class":55},[49,69407,69408,69410,69412,69414,69416,69419,69422,69424],{"class":51,"line":1856},[49,69409,55323],{"class":55},[49,69411,69255],{"class":51389},[49,69413,66740],{"class":2055},[49,69415,60],{"class":55},[49,69417,69418],{"class":328},"\"深圳\"",[49,69420,69421],{"class":55},">深圳\u003C\u002F",[49,69423,69255],{"class":51389},[49,69425,51396],{"class":55},[49,69427,69428,69430,69432,69434,69436,69439,69442,69444],{"class":51,"line":1870},[49,69429,55323],{"class":55},[49,69431,69255],{"class":51389},[49,69433,66740],{"class":2055},[49,69435,60],{"class":55},[49,69437,69438],{"class":328},"\"曹县\"",[49,69440,69441],{"class":55},">曹县\u003C\u002F",[49,69443,69255],{"class":51389},[49,69445,51396],{"class":55},[49,69447,69448,69450,69452],{"class":51,"line":1875},[49,69449,51865],{"class":55},[49,69451,69233],{"class":51389},[49,69453,51396],{"class":55},[49,69455,69456,69458,69460,69462,69464,69467,69470,69472],{"class":51,"line":2669},[49,69457,51430],{"class":55},[49,69459,53976],{"class":51389},[49,69461,53575],{"class":2055},[49,69463,60],{"class":55},[49,69465,69466],{"class":328},"\"add\"",[49,69468,69469],{"class":55},">录入\u003C\u002F",[49,69471,53976],{"class":51389},[49,69473,51396],{"class":55},[49,69475,69476,69478,69480],{"class":51,"line":2683},[49,69477,52506],{"class":55},[49,69479,66714],{"class":51389},[49,69481,51396],{"class":55},[49,69483,69484],{"class":51,"line":2691},[49,69485,2492],{"emptyLinePlaceholder":151},[49,69487,69488,69490,69492,69495,69497],{"class":51,"line":2696},[49,69489,52233],{"class":55},[49,69491,10],{"class":51389},[49,69493,69494],{"class":55},">就业榜\u003C\u002F",[49,69496,10],{"class":51389},[49,69498,51396],{"class":55},[49,69500,69501,69503,69505],{"class":51,"line":2702},[49,69502,52233],{"class":55},[49,69504,361],{"class":51389},[49,69506,51396],{"class":55},[49,69508,69509,69511,69513],{"class":51,"line":2708},[49,69510,51430],{"class":55},[49,69512,364],{"class":51389},[49,69514,51396],{"class":55},[49,69516,69517,69519,69521],{"class":51,"line":2713},[49,69518,55323],{"class":55},[49,69520,367],{"class":51389},[49,69522,51396],{"class":55},[49,69524,69525,69527,69529,69532,69534],{"class":51,"line":8038},[49,69526,55391],{"class":55},[49,69528,370],{"class":51389},[49,69530,69531],{"class":55},">序号\u003C\u002F",[49,69533,370],{"class":51389},[49,69535,51396],{"class":55},[49,69537,69538,69540,69542,69545,69547],{"class":51,"line":8062},[49,69539,55391],{"class":55},[49,69541,370],{"class":51389},[49,69543,69544],{"class":55},">姓名\u003C\u002F",[49,69546,370],{"class":51389},[49,69548,51396],{"class":55},[49,69550,69551,69553,69555,69558,69560],{"class":51,"line":8067},[49,69552,55391],{"class":55},[49,69554,370],{"class":51389},[49,69556,69557],{"class":55},">年龄\u003C\u002F",[49,69559,370],{"class":51389},[49,69561,51396],{"class":55},[49,69563,69564,69566,69568,69571,69573],{"class":51,"line":8073},[49,69565,55391],{"class":55},[49,69567,370],{"class":51389},[49,69569,69570],{"class":55},">性别\u003C\u002F",[49,69572,370],{"class":51389},[49,69574,51396],{"class":55},[49,69576,69577,69579,69581,69584,69586],{"class":51,"line":8100},[49,69578,55391],{"class":55},[49,69580,370],{"class":51389},[49,69582,69583],{"class":55},">薪资\u003C\u002F",[49,69585,370],{"class":51389},[49,69587,51396],{"class":55},[49,69589,69590,69592,69594,69597,69599],{"class":51,"line":8105},[49,69591,55391],{"class":55},[49,69593,370],{"class":51389},[49,69595,69596],{"class":55},">就业城市\u003C\u002F",[49,69598,370],{"class":51389},[49,69600,51396],{"class":55},[49,69602,69603,69605,69607,69610,69612],{"class":51,"line":8111},[49,69604,55391],{"class":55},[49,69606,370],{"class":51389},[49,69608,69609],{"class":55},">操作\u003C\u002F",[49,69611,370],{"class":51389},[49,69613,51396],{"class":55},[49,69615,69616,69618,69620],{"class":51,"line":8123},[49,69617,55496],{"class":55},[49,69619,367],{"class":51389},[49,69621,51396],{"class":55},[49,69623,69624,69626,69628],{"class":51,"line":8135},[49,69625,51865],{"class":55},[49,69627,364],{"class":51389},[49,69629,51396],{"class":55},[49,69631,69632,69634,69636],{"class":51,"line":8147},[49,69633,51430],{"class":55},[49,69635,408],{"class":51389},[49,69637,51396],{"class":55},[49,69639,69640],{"class":51,"line":9806},[49,69641,69642],{"class":283},"      \u003C!-- \n",[49,69644,69645],{"class":51,"line":9831},[49,69646,69647],{"class":283},"        \u003Ctr>\n",[49,69649,69650],{"class":51,"line":9854},[49,69651,69652],{"class":283},"          \u003Ctd>1001\u003C\u002Ftd>\n",[49,69654,69655],{"class":51,"line":9878},[49,69656,69657],{"class":283},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[49,69659,69660],{"class":51,"line":9883},[49,69661,69662],{"class":283},"          \u003Ctd>19\u003C\u002Ftd>\n",[49,69664,69665],{"class":51,"line":9888},[49,69666,69667],{"class":283},"          \u003Ctd>男\u003C\u002Ftd>\n",[49,69669,69670],{"class":51,"line":9893},[49,69671,69672],{"class":283},"          \u003Ctd>15000\u003C\u002Ftd>\n",[49,69674,69675],{"class":51,"line":9902},[49,69676,69677],{"class":283},"          \u003Ctd>上海\u003C\u002Ftd>\n",[49,69679,69680],{"class":51,"line":9907},[49,69681,69682],{"class":283},"          \u003Ctd>\n",[49,69684,69685],{"class":51,"line":9913},[49,69686,69687],{"class":283},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[49,69689,69690],{"class":51,"line":9934},[49,69691,69692],{"class":283},"          \u003C\u002Ftd>\n",[49,69694,69695],{"class":51,"line":9940},[49,69696,69697],{"class":283},"        \u003C\u002Ftr> \n",[49,69699,69700],{"class":51,"line":9954},[49,69701,69702],{"class":283},"        -->\n",[49,69704,69705,69707,69709],{"class":51,"line":9960},[49,69706,51865],{"class":55},[49,69708,408],{"class":51389},[49,69710,51396],{"class":55},[49,69712,69713,69715,69717],{"class":51,"line":9987},[49,69714,52506],{"class":55},[49,69716,361],{"class":51389},[49,69718,51396],{"class":55},[49,69720,69721,69723,69725],{"class":51,"line":9996},[49,69722,52233],{"class":55},[49,69724,51902],{"class":51389},[49,69726,51396],{"class":55},[49,69728,69729],{"class":51,"line":10002},[49,69730,60047],{"class":283},[49,69732,69733,69735,69738,69740,69742,69744,69746,69749],{"class":51,"line":10010},[49,69734,11311],{"class":59},[49,69736,69737],{"class":66}," uname",[49,69739,13654],{"class":59},[49,69741,54485],{"class":55},[49,69743,54488],{"class":2055},[49,69745,228],{"class":55},[49,69747,69748],{"class":328},"'.uname'",[49,69750,81],{"class":55},[49,69752,69753,69755,69757,69759,69761,69763,69765,69768],{"class":51,"line":10015},[49,69754,11311],{"class":59},[49,69756,15779],{"class":66},[49,69758,13654],{"class":59},[49,69760,54485],{"class":55},[49,69762,54488],{"class":2055},[49,69764,228],{"class":55},[49,69766,69767],{"class":328},"'.age'",[49,69769,81],{"class":55},[49,69771,69772,69774,69777,69779,69781,69783,69785,69788],{"class":51,"line":16694},[49,69773,11311],{"class":59},[49,69775,69776],{"class":66}," gender",[49,69778,13654],{"class":59},[49,69780,54485],{"class":55},[49,69782,54488],{"class":2055},[49,69784,228],{"class":55},[49,69786,69787],{"class":328},"'.gender'",[49,69789,81],{"class":55},[49,69791,69792,69794,69797,69799,69801,69803,69805,69808],{"class":51,"line":16700},[49,69793,11311],{"class":59},[49,69795,69796],{"class":66}," salary",[49,69798,13654],{"class":59},[49,69800,54485],{"class":55},[49,69802,54488],{"class":2055},[49,69804,228],{"class":55},[49,69806,69807],{"class":328},"'.salary'",[49,69809,81],{"class":55},[49,69811,69812,69814,69817,69819,69821,69823,69825,69828],{"class":51,"line":16723},[49,69813,11311],{"class":59},[49,69815,69816],{"class":66}," city",[49,69818,13654],{"class":59},[49,69820,54485],{"class":55},[49,69822,54488],{"class":2055},[49,69824,228],{"class":55},[49,69826,69827],{"class":328},"'.city'",[49,69829,81],{"class":55},[49,69831,69832,69834,69837,69839,69841,69843,69845,69848],{"class":51,"line":16729},[49,69833,11311],{"class":59},[49,69835,69836],{"class":66}," tbody",[49,69838,13654],{"class":59},[49,69840,54485],{"class":55},[49,69842,54488],{"class":2055},[49,69844,228],{"class":55},[49,69846,69847],{"class":328},"'tbody'",[49,69849,81],{"class":55},[49,69851,69852],{"class":51,"line":16752},[49,69853,2492],{"emptyLinePlaceholder":151},[49,69855,69856],{"class":51,"line":16766},[49,69857,69858],{"class":283},"    \u002F\u002F 获取所有带有name属性的元素\n",[49,69860,69861,69863,69866,69868,69870,69872,69874,69877],{"class":51,"line":16786},[49,69862,11311],{"class":59},[49,69864,69865],{"class":66}," items",[49,69867,13654],{"class":59},[49,69869,54485],{"class":55},[49,69871,55770],{"class":2055},[49,69873,228],{"class":55},[49,69875,69876],{"class":328},"'[name]'",[49,69878,81],{"class":55},[49,69880,69881],{"class":51,"line":16792},[49,69882,69883],{"class":283},"    \u002F\u002F 声明一个空的数组\n",[49,69885,69886,69888,69890,69892],{"class":51,"line":16803},[49,69887,11311],{"class":59},[49,69889,57784],{"class":66},[49,69891,13654],{"class":59},[49,69893,51927],{"class":55},[49,69895,69896],{"class":51,"line":16826},[49,69897,69898],{"class":283},"    \u002F\u002F 1.录入模块\n",[49,69900,69901],{"class":51,"line":16848},[49,69902,69903],{"class":283},"    \u002F\u002F 1.1这是一个表单提交事件\n",[49,69905,69906,69908,69911,69913,69915,69917,69919,69922],{"class":51,"line":16853},[49,69907,11311],{"class":59},[49,69909,69910],{"class":66}," info",[49,69912,13654],{"class":59},[49,69914,54485],{"class":55},[49,69916,54488],{"class":2055},[49,69918,228],{"class":55},[49,69920,69921],{"class":328},"'.info'",[49,69923,81],{"class":55},[49,69925,69926,69929,69931,69933,69936,69938,69940,69942,69944],{"class":51,"line":16859},[49,69927,69928],{"class":55},"    info.",[49,69930,57902],{"class":2055},[49,69932,228],{"class":55},[49,69934,69935],{"class":328},"'submit'",[49,69937,12525],{"class":55},[49,69939,54538],{"class":59},[49,69941,1750],{"class":55},[49,69943,298],{"class":126},[49,69945,12532],{"class":55},[49,69947,69948],{"class":51,"line":16873},[49,69949,69950],{"class":283},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[49,69952,69953,69956,69959],{"class":51,"line":16886},[49,69954,69955],{"class":55},"      e.",[49,69957,69958],{"class":2055},"preventDefault",[49,69960,2068],{"class":55},[49,69962,69963],{"class":51,"line":16891},[49,69964,60101],{"class":283},[49,69966,69967],{"class":51,"line":16905},[49,69968,2492],{"emptyLinePlaceholder":151},[49,69970,69971],{"class":51,"line":16910},[49,69972,69973],{"class":283},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[49,69975,69976],{"class":51,"line":16916},[49,69977,69978],{"class":283},"      \u002F\u002F 先遍历循环\n",[49,69980,69981,69983,69985,69987,69989,69991,69993,69995,69997,70000,70002,70004,70006],{"class":51,"line":16921},[49,69982,52373],{"class":59},[49,69984,1750],{"class":55},[49,69986,51936],{"class":59},[49,69988,9528],{"class":55},[49,69990,60],{"class":59},[49,69992,4185],{"class":66},[49,69994,9535],{"class":55},[49,69996,1129],{"class":59},[49,69998,69999],{"class":55}," items.",[49,70001,52057],{"class":66},[49,70003,3306],{"class":55},[49,70005,2384],{"class":59},[49,70007,12532],{"class":55},[49,70009,70010,70012,70015,70017,70020],{"class":51,"line":16935},[49,70011,2589],{"class":59},[49,70013,70014],{"class":55}," (items[i].value ",[49,70016,54575],{"class":59},[49,70018,70019],{"class":328}," ''",[49,70021,12532],{"class":55},[49,70023,70024,70027,70030,70032,70035],{"class":51,"line":16940},[49,70025,70026],{"class":59},"          return",[49,70028,70029],{"class":2055}," alert",[49,70031,228],{"class":55},[49,70033,70034],{"class":328},"'输入内容不能为空'",[49,70036,81],{"class":55},[49,70038,70039],{"class":51,"line":16945},[49,70040,2621],{"class":55},[49,70042,70043],{"class":51,"line":16959},[49,70044,52487],{"class":55},[49,70046,70047],{"class":51,"line":16971},[49,70048,2492],{"emptyLinePlaceholder":151},[49,70050,70051],{"class":51,"line":16976},[49,70052,70053],{"class":283},"      \u002F\u002F 创建新的对象\n",[49,70055,70056,70058,70061,70063],{"class":51,"line":16989},[49,70057,58317],{"class":59},[49,70059,70060],{"class":66}," obj",[49,70062,13654],{"class":59},[49,70064,15662],{"class":55},[49,70066,70067,70070,70072,70074,70076],{"class":51,"line":16994},[49,70068,70069],{"class":55},"        stuID: arr.",[49,70071,52057],{"class":66},[49,70073,45655],{"class":59},[49,70075,25209],{"class":66},[49,70077,31555],{"class":55},[49,70079,70080],{"class":51,"line":16999},[49,70081,70082],{"class":55},"        uname: uname.value,\n",[49,70084,70085],{"class":51,"line":17004},[49,70086,70087],{"class":55},"        age: age.value,\n",[49,70089,70090],{"class":51,"line":17017},[49,70091,70092],{"class":55},"        gender: gender.value,\n",[49,70094,70095],{"class":51,"line":17022},[49,70096,70097],{"class":55},"        salary: salary.value,\n",[49,70099,70100],{"class":51,"line":32722},[49,70101,70102],{"class":55},"        city: city.value\n",[49,70104,70105],{"class":51,"line":32728},[49,70106,52487],{"class":55},[49,70108,70109],{"class":51,"line":32734},[49,70110,70111],{"class":283},"      \u002F\u002F console.log(obj);\n",[49,70113,70114],{"class":51,"line":32740},[49,70115,70116],{"class":283},"      \u002F\u002F 追加到数组里面\n",[49,70118,70119,70121,70123],{"class":51,"line":32746},[49,70120,58096],{"class":55},[49,70122,51973],{"class":2055},[49,70124,70125],{"class":55},"(obj)\n",[49,70127,70128],{"class":51,"line":32757},[49,70129,70130],{"class":283},"      \u002F\u002F console.log(arr);\n",[49,70132,70133],{"class":51,"line":32763},[49,70134,70135],{"class":283},"      \u002F\u002F 清空表单  reset重置表单\n",[49,70137,70138,70141,70143,70146],{"class":51,"line":32783},[49,70139,70140],{"class":66},"      this",[49,70142,777],{"class":55},[49,70144,70145],{"class":2055},"reset",[49,70147,2068],{"class":55},[49,70149,70150],{"class":51,"line":32789},[49,70151,70152],{"class":283},"      \u002F\u002F 调用渲染函数\n",[49,70154,70155,70158],{"class":51,"line":32800},[49,70156,70157],{"class":2055},"      render",[49,70159,2068],{"class":55},[49,70161,70162],{"class":51,"line":32806},[49,70163,33550],{"class":55},[49,70165,70166],{"class":51,"line":32812},[49,70167,70168],{"class":283},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[49,70170,70171,70174,70177],{"class":51,"line":32818},[49,70172,70173],{"class":59},"    function",[49,70175,70176],{"class":2055}," render",[49,70178,10943],{"class":55},[49,70180,70181],{"class":51,"line":32824},[49,70182,70183],{"class":283},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[49,70185,70186,70189,70191],{"class":51,"line":32830},[49,70187,70188],{"class":55},"      tbody.innerHTML ",[49,70190,60],{"class":59},[49,70192,70193],{"class":328}," ''\n",[49,70195,70196],{"class":51,"line":32836},[49,70197,70198],{"class":283},"      \u002F\u002F 遍历数组\n",[49,70200,70201,70203,70205,70207,70209,70211,70213,70215,70217,70219,70221,70223,70225],{"class":51,"line":32842},[49,70202,52373],{"class":59},[49,70204,1750],{"class":55},[49,70206,51936],{"class":59},[49,70208,9528],{"class":55},[49,70210,60],{"class":59},[49,70212,4185],{"class":66},[49,70214,9535],{"class":55},[49,70216,1129],{"class":59},[49,70218,52054],{"class":55},[49,70220,52057],{"class":66},[49,70222,3306],{"class":55},[49,70224,2384],{"class":59},[49,70226,12532],{"class":55},[49,70228,70229,70231,70234,70236,70238,70241,70243,70246],{"class":51,"line":32862},[49,70230,61359],{"class":59},[49,70232,70233],{"class":66}," tr",[49,70235,13654],{"class":59},[49,70237,54485],{"class":55},[49,70239,70240],{"class":2055},"createElement",[49,70242,228],{"class":55},[49,70244,70245],{"class":328},"'tr'",[49,70247,81],{"class":55},[49,70249,70250,70253,70255],{"class":51,"line":32868},[49,70251,70252],{"class":55},"        tr.innerHTML ",[49,70254,60],{"class":59},[49,70256,70257],{"class":328}," `\n",[49,70259,70260,70263,70265,70267,70269,70272,70275],{"class":51,"line":32884},[49,70261,70262],{"class":328},"        \u003Ctd>${",[49,70264,3972],{"class":55},[49,70266,1109],{"class":328},[49,70268,661],{"class":55},[49,70270,70271],{"class":328},"].",[49,70273,70274],{"class":55},"stuID",[49,70276,70277],{"class":328},"}\u003C\u002Ftd>\n",[49,70279,70280,70283,70285,70287,70289,70291,70294],{"class":51,"line":32890},[49,70281,70282],{"class":328},"          \u003Ctd>${",[49,70284,3972],{"class":55},[49,70286,1109],{"class":328},[49,70288,661],{"class":55},[49,70290,70271],{"class":328},[49,70292,70293],{"class":55},"uname",[49,70295,70277],{"class":328},[49,70297,70298,70300,70302,70304,70306,70308,70311],{"class":51,"line":32904},[49,70299,70282],{"class":328},[49,70301,3972],{"class":55},[49,70303,1109],{"class":328},[49,70305,661],{"class":55},[49,70307,70271],{"class":328},[49,70309,70310],{"class":55},"age",[49,70312,70277],{"class":328},[49,70314,70315,70317,70319,70321,70323,70325,70328],{"class":51,"line":32910},[49,70316,70282],{"class":328},[49,70318,3972],{"class":55},[49,70320,1109],{"class":328},[49,70322,661],{"class":55},[49,70324,70271],{"class":328},[49,70326,70327],{"class":55},"gender",[49,70329,70277],{"class":328},[49,70331,70332,70334,70336,70338,70340,70342,70345],{"class":51,"line":32925},[49,70333,70282],{"class":328},[49,70335,3972],{"class":55},[49,70337,1109],{"class":328},[49,70339,661],{"class":55},[49,70341,70271],{"class":328},[49,70343,70344],{"class":55},"salary",[49,70346,70277],{"class":328},[49,70348,70349,70351,70353,70355,70357,70359,70362],{"class":51,"line":32931},[49,70350,70282],{"class":328},[49,70352,3972],{"class":55},[49,70354,1109],{"class":328},[49,70356,661],{"class":55},[49,70358,70271],{"class":328},[49,70360,70361],{"class":55},"city",[49,70363,70277],{"class":328},[49,70365,70366],{"class":51,"line":32940},[49,70367,69682],{"class":328},[49,70369,70370,70373,70375],{"class":51,"line":32946},[49,70371,70372],{"class":328},"            \u003Ca href=\"javascript:\" data-id=${",[49,70374,661],{"class":55},[49,70376,70377],{"class":328},"}>删除\u003C\u002Fa>\n",[49,70379,70380],{"class":51,"line":32955},[49,70381,70382],{"class":328},"          \u003C\u002Ftd> \n",[49,70384,70385],{"class":51,"line":32961},[49,70386,70387],{"class":328},"          `\n",[49,70389,70390],{"class":51,"line":32967},[49,70391,70392],{"class":283},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[49,70394,70395,70398,70401],{"class":51,"line":32976},[49,70396,70397],{"class":55},"        tbody.",[49,70399,70400],{"class":2055},"appendChild",[49,70402,70403],{"class":55},"(tr)\n",[49,70405,70406],{"class":51,"line":32982},[49,70407,52487],{"class":55},[49,70409,70410],{"class":51,"line":32993},[49,70411,2279],{"class":55},[49,70413,70414],{"class":51,"line":32999},[49,70415,2492],{"emptyLinePlaceholder":151},[49,70417,70418],{"class":51,"line":33018},[49,70419,70420],{"class":283},"    \u002F\u002F 3.删除委托\n",[49,70422,70423],{"class":51,"line":33024},[49,70424,70425],{"class":283},"    \u002F\u002F 3.1 事件委托 tbody\n",[49,70427,70428,70431,70433,70435,70437,70439,70441,70443,70445],{"class":51,"line":33035},[49,70429,70430],{"class":55},"    tbody.",[49,70432,57902],{"class":2055},[49,70434,228],{"class":55},[49,70436,57907],{"class":328},[49,70438,12525],{"class":55},[49,70440,54538],{"class":59},[49,70442,1750],{"class":55},[49,70444,298],{"class":126},[49,70446,12532],{"class":55},[49,70448,70449,70451,70453,70455,70457],{"class":51,"line":33041},[49,70450,54569],{"class":59},[49,70452,67123],{"class":55},[49,70454,54575],{"class":59},[49,70456,68345],{"class":328},[49,70458,12532],{"class":55},[49,70460,70461],{"class":51,"line":33061},[49,70462,70463],{"class":283},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[49,70465,70466],{"class":51,"line":33077},[49,70467,70468],{"class":283},"        \u002F\u002F console.log(e.target.dataset.id);\n",[49,70470,70471],{"class":51,"line":33083},[49,70472,70473],{"class":283},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[49,70475,70476,70479,70481,70484,70486],{"class":51,"line":33097},[49,70477,70478],{"class":55},"        arr.",[49,70480,58099],{"class":2055},[49,70482,70483],{"class":55},"(e.target.dataset.id, ",[49,70485,441],{"class":66},[49,70487,81],{"class":55},[49,70489,70490],{"class":51,"line":33103},[49,70491,70492],{"class":283},"        \u002F\u002F 重新渲染一次\n",[49,70494,70495,70498],{"class":51,"line":33109},[49,70496,70497],{"class":2055},"        render",[49,70499,2068],{"class":55},[49,70501,70502],{"class":51,"line":33120},[49,70503,52487],{"class":55},[49,70505,70506],{"class":51,"line":33126},[49,70507,33550],{"class":55},[49,70509,70510,70512,70514],{"class":51,"line":33132},[49,70511,52506],{"class":55},[49,70513,51902],{"class":51389},[49,70515,51396],{"class":55},[49,70517,70518],{"class":51,"line":33142},[49,70519,2492],{"emptyLinePlaceholder":151},[49,70521,70522,70524,70526],{"class":51,"line":33148},[49,70523,51874],{"class":55},[49,70525,51889],{"class":51389},[49,70527,51396],{"class":55},[49,70529,70530],{"class":51,"line":33159},[49,70531,2492],{"emptyLinePlaceholder":151},[49,70533,70534,70536,70538],{"class":51,"line":33165},[49,70535,51874],{"class":55},[49,70537,50724],{"class":51389},[49,70539,51396],{"class":55},[14,70541,70542],{},"样式：",[39,70544,70548],{"className":70545,"code":70546,"language":70547,"meta":44,"style":44},"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",[46,70549,70550,70555,70565,70574,70578,70582,70587,70597,70602,70606,70611,70621,70626,70635,70639,70643,70648,70653,70663,70673,70678,70682,70687,70696,70706,70711,70721,70731,70735,70740,70748,70752,70757,70762,70767,70775,70784,70788,70793,70802,70806,70811,70820,70824,70829,70838,70847,70855,70859,70864,70873,70883,70892,70902,70908,70917,70927,70937,70941,70946,70955,70963,70973,70981,70990,70999,71009,71017,71021,71026,71035],{"__ignoreMap":44},[49,70551,70552],{"class":51,"line":52},[49,70553,70554],{"class":55},"* {\n",[49,70556,70557,70560,70562],{"class":51,"line":84},[49,70558,70559],{"class":51389},"  margin",[49,70561,51526],{"class":55},[49,70563,70564],{"class":328},"0;\n",[49,70566,70567,70570,70572],{"class":51,"line":109},[49,70568,70569],{"class":328},"  padding",[49,70571,51526],{"class":55},[49,70573,70564],{"class":328},[49,70575,70576],{"class":51,"line":120},[49,70577,1657],{"class":55},[49,70579,70580],{"class":51,"line":135},[49,70581,2492],{"emptyLinePlaceholder":151},[49,70583,70584],{"class":51,"line":1306},[49,70585,70586],{"class":328},"a {\n",[49,70588,70589,70592,70594],{"class":51,"line":1312},[49,70590,70591],{"class":51389},"  text-decoration",[49,70593,51526],{"class":55},[49,70595,70596],{"class":328},"none;\n",[49,70598,70599],{"class":51,"line":1403},[49,70600,70601],{"class":328},"  color:#721c24;\n",[49,70603,70604],{"class":51,"line":1409},[49,70605,1657],{"class":55},[49,70607,70608],{"class":51,"line":1421},[49,70609,70610],{"class":328},"h1 {\n",[49,70612,70613,70616,70618],{"class":51,"line":1704},[49,70614,70615],{"class":51389},"  text-align",[49,70617,51526],{"class":55},[49,70619,70620],{"class":328},"center;\n",[49,70622,70623],{"class":51,"line":1709},[49,70624,70625],{"class":328},"  color:#333;\n",[49,70627,70628,70630,70632],{"class":51,"line":1715},[49,70629,70559],{"class":51389},[49,70631,51526],{"class":55},[49,70633,70634],{"class":328},"20px 0;\n",[49,70636,70637],{"class":51,"line":1720},[49,70638,2766],{"class":55},[49,70640,70641],{"class":51,"line":1734},[49,70642,1657],{"class":55},[49,70644,70645],{"class":51,"line":1739},[49,70646,70647],{"class":328},"table {\n",[49,70649,70650],{"class":51,"line":1745},[49,70651,70652],{"class":328},"  margin:0 auto;\n",[49,70654,70655,70658,70660],{"class":51,"line":1766},[49,70656,70657],{"class":51389},"  width",[49,70659,51526],{"class":55},[49,70661,70662],{"class":328},"800px;\n",[49,70664,70665,70668,70670],{"class":51,"line":1771},[49,70666,70667],{"class":51389},"  border-collapse",[49,70669,51526],{"class":55},[49,70671,70672],{"class":328},"collapse;\n",[49,70674,70675],{"class":51,"line":1785},[49,70676,70677],{"class":328},"  color:#004085;\n",[49,70679,70680],{"class":51,"line":1790},[49,70681,1657],{"class":55},[49,70683,70684],{"class":51,"line":1819},[49,70685,70686],{"class":328},"th {\n",[49,70688,70689,70691,70693],{"class":51,"line":1824},[49,70690,70569],{"class":51389},[49,70692,51526],{"class":55},[49,70694,70695],{"class":328},"10px;\n",[49,70697,70698,70701,70703],{"class":51,"line":1841},[49,70699,70700],{"class":51389},"  background",[49,70702,51526],{"class":55},[49,70704,70705],{"class":283},"#cfe5ff;\n",[49,70707,70708],{"class":51,"line":1846},[49,70709,70710],{"class":55},"  \n",[49,70712,70713,70716,70718],{"class":51,"line":1851},[49,70714,70715],{"class":51389},"  font-size",[49,70717,51526],{"class":55},[49,70719,70720],{"class":328},"20px;\n",[49,70722,70723,70726,70728],{"class":51,"line":1856},[49,70724,70725],{"class":51389},"  font-weight",[49,70727,51526],{"class":55},[49,70729,70730],{"class":328},"400;\n",[49,70732,70733],{"class":51,"line":1870},[49,70734,1657],{"class":55},[49,70736,70737],{"class":51,"line":1875},[49,70738,70739],{"class":328},"td,th {\n",[49,70741,70742,70745],{"class":51,"line":2669},[49,70743,70744],{"class":328},"  border:1px solid",[49,70746,70747],{"class":283}," #b8daff;\n",[49,70749,70750],{"class":51,"line":2683},[49,70751,1657],{"class":55},[49,70753,70754],{"class":51,"line":2691},[49,70755,70756],{"class":328},"td {\n",[49,70758,70759],{"class":51,"line":2696},[49,70760,70761],{"class":328},"  padding:10px;\n",[49,70763,70764],{"class":51,"line":2702},[49,70765,70766],{"class":328},"  color:#666;\n",[49,70768,70769,70771,70773],{"class":51,"line":2708},[49,70770,70615],{"class":51389},[49,70772,51526],{"class":55},[49,70774,70620],{"class":328},[49,70776,70777,70779,70781],{"class":51,"line":2713},[49,70778,70715],{"class":51389},[49,70780,51526],{"class":55},[49,70782,70783],{"class":328},"16px;\n",[49,70785,70786],{"class":51,"line":8038},[49,70787,1657],{"class":55},[49,70789,70790],{"class":51,"line":8062},[49,70791,70792],{"class":328},"tbody tr {\n",[49,70794,70795,70797,70799],{"class":51,"line":8067},[49,70796,70700],{"class":51389},[49,70798,51526],{"class":55},[49,70800,70801],{"class":283},"#fff;\n",[49,70803,70804],{"class":51,"line":8073},[49,70805,1657],{"class":55},[49,70807,70808],{"class":51,"line":8100},[49,70809,70810],{"class":328},"tbody tr:hover {\n",[49,70812,70813,70815,70817],{"class":51,"line":8105},[49,70814,70700],{"class":51389},[49,70816,51526],{"class":55},[49,70818,70819],{"class":283},"#e1ecf8;\n",[49,70821,70822],{"class":51,"line":8111},[49,70823,1657],{"class":55},[49,70825,70826],{"class":51,"line":8123},[49,70827,70828],{"class":328},".info {\n",[49,70830,70831,70833,70835],{"class":51,"line":8135},[49,70832,70657],{"class":51389},[49,70834,51526],{"class":55},[49,70836,70837],{"class":328},"900px;\n",[49,70839,70840,70842,70844],{"class":51,"line":8147},[49,70841,70559],{"class":51389},[49,70843,51526],{"class":55},[49,70845,70846],{"class":328},"50px auto;\n",[49,70848,70849,70851,70853],{"class":51,"line":9806},[49,70850,70615],{"class":51389},[49,70852,51526],{"class":55},[49,70854,70620],{"class":328},[49,70856,70857],{"class":51,"line":9831},[49,70858,1657],{"class":55},[49,70860,70861],{"class":51,"line":9854},[49,70862,70863],{"class":328},".info  input, .info select {\n",[49,70865,70866,70868,70870],{"class":51,"line":9878},[49,70867,70657],{"class":51389},[49,70869,51526],{"class":55},[49,70871,70872],{"class":328},"80px;\n",[49,70874,70875,70878,70880],{"class":51,"line":9883},[49,70876,70877],{"class":51389},"  height",[49,70879,51526],{"class":55},[49,70881,70882],{"class":328},"27px;\n",[49,70884,70885,70888,70890],{"class":51,"line":9888},[49,70886,70887],{"class":51389},"  outline",[49,70889,51526],{"class":55},[49,70891,70596],{"class":328},[49,70893,70894,70897,70899],{"class":51,"line":9893},[49,70895,70896],{"class":51389},"  border-radius",[49,70898,51526],{"class":55},[49,70900,70901],{"class":328},"5px;\n",[49,70903,70904,70906],{"class":51,"line":9902},[49,70905,70744],{"class":328},[49,70907,70747],{"class":283},[49,70909,70910,70913,70915],{"class":51,"line":9907},[49,70911,70912],{"class":51389},"  padding-left",[49,70914,51526],{"class":55},[49,70916,70901],{"class":328},[49,70918,70919,70922,70924],{"class":51,"line":9913},[49,70920,70921],{"class":51389},"  box-sizing",[49,70923,51526],{"class":55},[49,70925,70926],{"class":328},"border-box;\n",[49,70928,70929,70932,70934],{"class":51,"line":9934},[49,70930,70931],{"class":51389},"  margin-right",[49,70933,51526],{"class":55},[49,70935,70936],{"class":328},"15px;\n",[49,70938,70939],{"class":51,"line":9940},[49,70940,1657],{"class":55},[49,70942,70943],{"class":51,"line":9954},[49,70944,70945],{"class":328},".info button {\n",[49,70947,70948,70950,70952],{"class":51,"line":9960},[49,70949,70657],{"class":51389},[49,70951,51526],{"class":55},[49,70953,70954],{"class":328},"60px;\n",[49,70956,70957,70959,70961],{"class":51,"line":9987},[49,70958,70877],{"class":51389},[49,70960,51526],{"class":55},[49,70962,70882],{"class":328},[49,70964,70965,70968,70970],{"class":51,"line":9996},[49,70966,70967],{"class":51389},"  background-color",[49,70969,51526],{"class":55},[49,70971,70972],{"class":283},"#004085;\n",[49,70974,70975,70977,70979],{"class":51,"line":10002},[49,70976,70887],{"class":51389},[49,70978,51526],{"class":55},[49,70980,70596],{"class":328},[49,70982,70983,70986,70988],{"class":51,"line":10010},[49,70984,70985],{"class":51389},"  border",[49,70987,51526],{"class":55},[49,70989,70564],{"class":328},[49,70991,70992,70995,70997],{"class":51,"line":10015},[49,70993,70994],{"class":51389},"  color",[49,70996,51526],{"class":55},[49,70998,70801],{"class":283},[49,71000,71001,71004,71006],{"class":51,"line":16694},[49,71002,71003],{"class":51389},"  cursor",[49,71005,51526],{"class":55},[49,71007,71008],{"class":328},"pointer;\n",[49,71010,71011,71013,71015],{"class":51,"line":16700},[49,71012,70896],{"class":51389},[49,71014,51526],{"class":55},[49,71016,70901],{"class":328},[49,71018,71019],{"class":51,"line":16723},[49,71020,1657],{"class":55},[49,71022,71023],{"class":51,"line":16729},[49,71024,71025],{"class":328},".info .age {\n",[49,71027,71028,71030,71032],{"class":51,"line":16752},[49,71029,70657],{"class":51389},[49,71031,51526],{"class":55},[49,71033,71034],{"class":328},"50px;\n",[49,71036,71037],{"class":51,"line":16766},[49,71038,1657],{"class":55},[14,71040,71041],{},"思路：",[14,71043,71044],{},[1554,71045],{"alt":44,"src":71046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71048,71049],{},[1554,71050],{"alt":44,"src":71051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71053,71054],{},[1554,71055],{"alt":44,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[195,71058,71060],{"id":71059},"_3315-重绘回流","3.3.15 重绘回流",[14,71062,71063],{},[1554,71064],{"alt":44,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71067,71068],{},[1554,71069],{"alt":44,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71072,71073],{},[1554,71074],{"alt":44,"src":71075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[166,71077,71079],{"id":71078},"_34-bom","3.4 BOM",[14,71081,71082],{},[1554,71083],{"alt":44,"src":71084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71086,71087],{},"平时写的document省略了window而已，实际上是window.document",[14,71089,71090],{},"函数也是这样，调用的时候实际为window.fn()",[14,71092,71093],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71095,71096],{},"window大部分情况下可以省略",[195,71098,71100],{"id":71099},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71102,71103],{},"只执行一次",[14,71105,71106],{},[1554,71107],{"alt":44,"src":71108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71110,71111],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71113,71114],{},[1554,71115],{"alt":44,"src":71116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[195,71118,71120],{"id":71119},"_342-js执行机制","3.4.2 JS执行机制",[14,71122,71123],{},[1554,71124],{"alt":44,"src":71125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71127,71128],{},"两个的结果都是1111 3333 2222",[14,71130,71131],{},[1554,71132],{"alt":44,"src":71133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71135,71136],{},[1554,71137],{"alt":44,"src":71138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71140,71141],{},[1554,71142],{"alt":44,"src":71143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71145,71146],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71148,71149],{},"工作流程：",[14,71151,71152],{},[1554,71153],{"alt":44,"src":71154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71156,71157],{},[1554,71158],{"alt":44,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71161,71162],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71164,71165],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[195,71167,71169],{"id":71168},"_343-location对象","3.4.3 location对象",[14,71171,71172],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71174,71175],{},[1554,71176],{"alt":44,"src":71177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71179,71180],{},"href可以跳转页面",[178,71182,71183],{},[181,71184,71185],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71187,71188],{},"search得到提交信息之后网站后边的地址",[14,71190,71191],{},[1554,71192],{"alt":44,"src":71193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71195,71196],{},[1554,71197],{"alt":44,"src":71198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[178,71200,71201],{"start":84},[181,71202,71203],{},"hash:这个获取单页面应用#后边的地址",[14,71205,71206],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71208,71209],{},[1554,71210],{"alt":44,"src":71211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[39,71213,71215],{"className":53156,"code":71214,"language":53158,"meta":44,"style":44},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[46,71216,71217,71237,71257],{"__ignoreMap":44},[49,71218,71219,71221,71223,71225,71227,71230,71233,71235],{"class":51,"line":52},[49,71220,52233],{"class":55},[49,71222,56],{"class":51389},[49,71224,61146],{"class":2055},[49,71226,60],{"class":55},[49,71228,71229],{"class":328},"\"#\u002Fmy\"",[49,71231,71232],{"class":55},">我的\u003C\u002F",[49,71234,56],{"class":51389},[49,71236,51396],{"class":55},[49,71238,71239,71241,71243,71245,71247,71250,71253,71255],{"class":51,"line":84},[49,71240,52233],{"class":55},[49,71242,56],{"class":51389},[49,71244,61146],{"class":2055},[49,71246,60],{"class":55},[49,71248,71249],{"class":328},"\"#\u002Ffriend\"",[49,71251,71252],{"class":55},">关注\u003C\u002F",[49,71254,56],{"class":51389},[49,71256,51396],{"class":55},[49,71258,71259,71261,71263,71265,71267,71270,71273,71275],{"class":51,"line":109},[49,71260,52233],{"class":55},[49,71262,56],{"class":51389},[49,71264,61146],{"class":2055},[49,71266,60],{"class":55},[49,71268,71269],{"class":328},"\"#\u002Fdownload\"",[49,71271,71272],{"class":55},">下载\u003C\u002F",[49,71274,56],{"class":51389},[49,71276,51396],{"class":55},[14,71278,71279],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[178,71281,71282],{"start":109},[181,71283,71284,71285,71287,71288,71290],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53805,71286],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53805,71289],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[195,71292,71294],{"id":71293},"_345-navigator对象","3.4.5 navigator对象",[14,71296,71297],{},[1554,71298],{"alt":44,"src":71299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[39,71301,71305],{"className":71302,"code":71303,"language":71304,"meta":44,"style":44},"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",[46,71306,71307,71312,71323,71335,71340,71391,71432,71437,71450,71462,71467],{"__ignoreMap":44},[49,71308,71309],{"class":51,"line":52},[49,71310,71311],{"class":283},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[49,71313,71314,71316,71318,71320],{"class":51,"line":84},[49,71315,450],{"class":59},[49,71317,228],{"class":55},[49,71319,54538],{"class":59},[49,71321,71322],{"class":55}," () { \n",[49,71324,71325,71327,71330,71332],{"class":51,"line":109},[49,71326,6882],{"class":59},[49,71328,71329],{"class":66}," userAgent",[49,71331,13654],{"class":59},[49,71333,71334],{"class":55}," navigator.userAgent \n",[49,71336,71337],{"class":51,"line":120},[49,71338,71339],{"class":283},"\u002F\u002F 验证是否为Android或iPhone \n",[49,71341,71342,71344,71347,71349,71352,71355,71357,71359,71362,71364,71367,71371,71373,71375,71377,71380,71382,71384,71386,71388],{"class":51,"line":135},[49,71343,6882],{"class":59},[49,71345,71346],{"class":66}," android",[49,71348,13654],{"class":59},[49,71350,71351],{"class":55}," userAgent.",[49,71353,71354],{"class":2055},"match",[49,71356,228],{"class":55},[49,71358,803],{"class":328},[49,71360,71361],{"class":48066},"(Android);",[49,71363,1205],{"class":59},[49,71365,71366],{"class":66},"[\\s",[49,71368,71370],{"class":71369},"snhLl","\\\u002F",[49,71372,1159],{"class":66},[49,71374,700],{"class":59},[49,71376,228],{"class":48066},[49,71378,71379],{"class":66},"[\\d.]",[49,71381,700],{"class":59},[49,71383,649],{"class":48066},[49,71385,1205],{"class":59},[49,71387,803],{"class":328},[49,71389,71390],{"class":55},") \n",[49,71392,71393,71395,71398,71400,71402,71404,71406,71408,71411,71414,71417,71419,71421,71424,71426,71428,71430],{"class":51,"line":1306},[49,71394,6882],{"class":59},[49,71396,71397],{"class":66}," iphone",[49,71399,13654],{"class":59},[49,71401,71351],{"class":55},[49,71403,71354],{"class":2055},[49,71405,228],{"class":55},[49,71407,803],{"class":328},[49,71409,71410],{"class":48066},"(iPhone",[49,71412,71413],{"class":66},"\\s",[49,71415,71416],{"class":48066},"OS)",[49,71418,71413],{"class":66},[49,71420,228],{"class":48066},[49,71422,71423],{"class":66},"[\\d_]",[49,71425,700],{"class":59},[49,71427,649],{"class":48066},[49,71429,803],{"class":328},[49,71431,71390],{"class":55},[49,71433,71434],{"class":51,"line":1312},[49,71435,71436],{"class":283},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[49,71438,71439,71441,71444,71447],{"class":51,"line":1403},[49,71440,1623],{"class":59},[49,71442,71443],{"class":55}," (android ",[49,71445,71446],{"class":59},"||",[49,71448,71449],{"class":55}," iphone) { \n",[49,71451,71452,71455,71457,71460],{"class":51,"line":1409},[49,71453,71454],{"class":55},"location.href ",[49,71456,60],{"class":59},[49,71458,71459],{"class":328}," 'http:\u002F\u002Fm.itcast.cn'",[49,71461,2766],{"class":55},[49,71463,71464],{"class":51,"line":1421},[49,71465,71466],{"class":55},"} \n",[49,71468,71469],{"class":51,"line":1704},[49,71470,71471],{"class":55},"})()\n",[195,71473,71475],{"id":71474},"_346-histroy对象","3.4.6 histroy对象",[14,71477,71478],{},[1554,71479],{"alt":44,"src":71480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71482,71483],{},"浏览器地址的前进与后退!!!",[14,71485,71486],{},"history.back() 等效于 history.go(-1)",[14,71488,71489],{},"history.forward() 等效于 history.go(1)",[166,71491,71493],{"id":71492},"_35-本地存储","3.5 本地存储",[178,71495,71496,71499,71502],{},[181,71497,71498],{},"数据存储在用户浏览器中",[181,71500,71501],{},"设置、读取方便、甚至页面刷新不丢失数据",[181,71503,71504],{},"容量较大，sessionStorage和localStorage约 5M 左右",[195,71506,71508],{"id":71507},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71510,71511],{},"只能存储字符串",[14,71513,71514],{},[1554,71515],{"alt":44,"src":71516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71518,71519],{},[1554,71520],{"alt":44,"src":71521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71523,71524],{},"键值对要加引号,不然就会当变量来看了",[14,71526,71527],{},"localStorage.setItem('uname', 'pink')",[14,71529,71530],{},"刷新之后信息不再丢失",[14,71532,71533],{},"操作key,value会跟着变",[14,71535,71536],{},"删除只删除键就可以,即名字",[14,71538,71527],{},[14,71540,71541],{},"改:",[14,71543,71544],{},"localStorage.setItem('uname','red')",[14,71546,71547],{},"有这个键就是改,没有这个键就是改",[14,71549,71550],{},[1554,71551],{"alt":44,"src":71552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71554,71555],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71557,71558],{},[1554,71559],{"alt":44,"src":71560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71562,71563],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[195,71565,71567],{"id":71566},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71569,71570],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71572,71573],{},"特性:",[178,71575,71576,71579,71582,71585],{},[181,71577,71578],{},"生命周期为关闭浏览器窗口",[181,71580,71581],{},"在同一个窗口(页面)下数据可以共享",[181,71583,71584],{},"以键值对的形式存储使用",[181,71586,71587],{},"用法跟localStorage 基本相同",[195,71589,71591],{"id":71590},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71593,71594],{},"本地只能存储字符串,无法直接存储复杂数据类型",[39,71596,71598],{"className":53156,"code":71597,"language":53158,"meta":44,"style":44},"\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",[46,71599,71600,71608,71613,71618,71623,71628,71632,71637,71642],{"__ignoreMap":44},[49,71601,71602,71604,71606],{"class":51,"line":52},[49,71603,1129],{"class":55},[49,71605,51902],{"class":51389},[49,71607,51396],{"class":55},[49,71609,71610],{"class":51,"line":84},[49,71611,71612],{"class":55},"    const obj = {\n",[49,71614,71615],{"class":51,"line":109},[49,71616,71617],{"class":55},"      uname: 'pink老师',\n",[49,71619,71620],{"class":51,"line":120},[49,71621,71622],{"class":55},"      age: 18,\n",[49,71624,71625],{"class":51,"line":135},[49,71626,71627],{"class":55},"      gender: '女'\n",[49,71629,71630],{"class":51,"line":1306},[49,71631,2279],{"class":55},[49,71633,71634],{"class":51,"line":1312},[49,71635,71636],{"class":55},"    \u002F\u002F 存储复杂数据类型\n",[49,71638,71639],{"class":51,"line":1403},[49,71640,71641],{"class":55},"    localStorage.setItem('obj', obj)\n",[49,71643,71644,71646,71648],{"class":51,"line":1409},[49,71645,52506],{"class":55},[49,71647,51902],{"class":51389},[49,71649,51396],{"class":55},[14,71651,71652],{},[1554,71653],{"alt":44,"src":71654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71656,71657],{},"如果获取一下数据:",[14,71659,71660],{},"log(localStorage.getItem('obj'))",[14,71662,71663],{},[1554,71664],{"alt":44,"src":71665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71667,71668],{},"发现直接存对象是使用不了的!!!",[22088,71670,71672],{"id":71671},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71674,71675],{},[1554,71676],{"alt":44,"src":71677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[39,71679,71681],{"className":50722,"code":71680,"language":50724,"meta":44,"style":44},"\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",[46,71682,71683,71691,71701,71711,71720,71728,71732,71736,71762,71781,71789,71793,71798,71803],{"__ignoreMap":44},[49,71684,71685,71687,71689],{"class":51,"line":52},[49,71686,1129],{"class":55},[49,71688,51902],{"class":51389},[49,71690,51396],{"class":55},[49,71692,71693,71695,71697,71699],{"class":51,"line":84},[49,71694,11311],{"class":59},[49,71696,70060],{"class":66},[49,71698,13654],{"class":59},[49,71700,15662],{"class":55},[49,71702,71703,71706,71709],{"class":51,"line":109},[49,71704,71705],{"class":55},"      uname: ",[49,71707,71708],{"class":328},"'pink老师'",[49,71710,31555],{"class":55},[49,71712,71713,71716,71718],{"class":51,"line":120},[49,71714,71715],{"class":55},"      age: ",[49,71717,869],{"class":66},[49,71719,31555],{"class":55},[49,71721,71722,71725],{"class":51,"line":135},[49,71723,71724],{"class":55},"      gender: ",[49,71726,71727],{"class":328},"'女'\n",[49,71729,71730],{"class":51,"line":1306},[49,71731,2279],{"class":55},[49,71733,71734],{"class":51,"line":1312},[49,71735,71636],{"class":283},[49,71737,71738,71741,71744,71746,71749,71751,71754,71756,71759],{"class":51,"line":1403},[49,71739,71740],{"class":55},"  localStorage.",[49,71742,71743],{"class":2055},"setItem",[49,71745,228],{"class":55},[49,71747,71748],{"class":328},"'obj'",[49,71750,12525],{"class":55},[49,71752,71753],{"class":66},"JSON",[49,71755,777],{"class":55},[49,71757,71758],{"class":2055},"stringify",[49,71760,71761],{"class":55},"(obj))\n",[49,71763,71764,71767,71769,71772,71775,71777,71779],{"class":51,"line":1409},[49,71765,71766],{"class":55},"  console.",[49,71768,58336],{"class":2055},[49,71770,71771],{"class":55},"(localStorage.",[49,71773,71774],{"class":2055},"getItem",[49,71776,228],{"class":55},[49,71778,71748],{"class":328},[49,71780,30586],{"class":55},[49,71782,71783,71785,71787],{"class":51,"line":1421},[49,71784,52506],{"class":55},[49,71786,51902],{"class":51389},[49,71788,51396],{"class":55},[49,71790,71791],{"class":51,"line":1704},[49,71792,70710],{"class":55},[49,71794,71795],{"class":51,"line":1709},[49,71796,71797],{"class":55},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[49,71799,71800],{"class":51,"line":1715},[49,71801,71802],{"class":55},"  类型是字符串的\n",[49,71804,71805],{"class":51,"line":1720},[49,71806,71807],{"class":55},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22088,71809,71811],{"id":71810},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71813,71814],{},[1554,71815],{"alt":44,"src":71816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71818,71819],{},[1554,71820],{"alt":44,"src":71821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[39,71823,71825],{"className":53156,"code":71824,"language":53158,"meta":44,"style":44},"  \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",[46,71826,71827,71835,71839,71843,71847,71851,71855,71860,71865,71870,71875,71880,71885,71890,71895],{"__ignoreMap":44},[49,71828,71829,71831,71833],{"class":51,"line":52},[49,71830,52233],{"class":55},[49,71832,51902],{"class":51389},[49,71834,51396],{"class":55},[49,71836,71837],{"class":51,"line":84},[49,71838,71612],{"class":55},[49,71840,71841],{"class":51,"line":109},[49,71842,71617],{"class":55},[49,71844,71845],{"class":51,"line":120},[49,71846,71622],{"class":55},[49,71848,71849],{"class":51,"line":135},[49,71850,71627],{"class":55},[49,71852,71853],{"class":51,"line":1306},[49,71854,2279],{"class":55},[49,71856,71857],{"class":51,"line":1312},[49,71858,71859],{"class":55},"    \u002F\u002F 1.存储复杂数据类型\n",[49,71861,71862],{"class":51,"line":1403},[49,71863,71864],{"class":55},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[49,71866,71867],{"class":51,"line":1409},[49,71868,71869],{"class":55},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[49,71871,71872],{"class":51,"line":1421},[49,71873,71874],{"class":55},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[49,71876,71877],{"class":51,"line":1704},[49,71878,71879],{"class":55},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[49,71881,71882],{"class":51,"line":1709},[49,71883,71884],{"class":55},"    \u002F\u002F 取\n",[49,71886,71887],{"class":51,"line":1715},[49,71888,71889],{"class":55},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[49,71891,71892],{"class":51,"line":1720},[49,71893,71894],{"class":55},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[49,71896,71897,71899,71901],{"class":51,"line":1734},[49,71898,52506],{"class":55},[49,71900,51902],{"class":51389},[49,71902,51396],{"class":55},[14,71904,71905],{},[1554,71906],{"alt":44,"src":71907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[195,71909,71911],{"id":71910},"_356-数组map方法","3.5.6 数组map方法",[14,71913,71914],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71916,71917],{},[1554,71918],{"alt":44,"src":71919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71921,71922],{},[1554,71923],{"alt":44,"src":71924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71926,71927,71930],{},[373,71928,71929],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71932,71933],{},"map有返回值，但是forEach没有返回值",[14,71935,71936],{},"map是个方法。用的时候要加 ()",[14,71938,71939],{},"map返回的是一个数组",[195,71941,71943],{"id":71942},"_357-数组中join方法","3.5.7 数组中join方法",[14,71945,71946],{},[1554,71947],{"alt":44,"src":71948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71950,71951],{},"类似于python中拼接字符串一样！",[178,71953,71954,71957,71960],{},[181,71955,71956],{},"小括号为空则逗号分开",[181,71958,71959],{},"小括号为空字符串 ''，则元素之间没有分隔符",[181,71961,71962],{},"小括号用啥符号就用进行分割",[195,71964,71966],{"id":71965},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[178,71968,71969,71972,71975,71978,71981],{},[181,71970,71971],{},"记住本地时间获取快速方式：new Date().toDateString()",[181,71973,71974],{},"尽量减少DOM操作，用好map+join的渲染方式",[181,71976,71977],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[181,71979,71980],{},"return可以实现函数的结束",[181,71982,71983],{},"禁止跳转是 preventDefault() 不要忘记",[39,71985,71987],{"className":50722,"code":71986,"language":50724,"meta":44,"style":44},"\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",[46,71988,71989,71999,72013,72017,72025,72039,72059,72071,72079,72085,72095,72105,72109,72113,72119,72129,72141,72145,72149,72156,72168,72182,72192,72196,72200,72207,72214,72221,72233,72245,72255,72267,72271,72275,72282,72289,72301,72313,72323,72335,72365,72369,72373,72380,72392,72404,72428,72438,72448,72452,72456,72464,72475,72487,72499,72511,72528,72540,72552,72556,72560,72567,72579,72591,72603,72614,72632,72645,72657,72681,72692,72696,72700,72708,72718,72722,72726,72732,72744,72755,72765,72769,72773,72779,72801,72805,72809,72815,72821,72833,72843,72855,72885,72898,72915,72919,72923,72934,72956,72966,72970,72974,72987,72997,73009,73021,73033,73045,73055,73065,73075,73086,73099,73103,73111,73119,73123,73131,73144,73164,73197,73230,73263,73289,73307,73325,73333,73359,73377,73395,73413,73431,73449,73457,73465,73483,73491,73520,73528,73536,73544,73557,73569,73581,73593,73605,73617,73630,73642,73650,73658,73666,73671,73676,73680,73684,73688,73692,73696,73700,73705,73710,73715,73720,73728,73736,73744,73749,73754,73759,73764,73769,73774,73779,73784,73789,73794,73799,73804,73809,73814,73818,73823,73828,73838,73847,73851,73856,73865,73881,73923,73963,74002,74067,74075,74079,74084,74102,74110,74115,74120,74150,74156,74161,74174,74186,74198,74210,74222,74234,74246,74250,74260,74264,74269,74274,74278,74287,74291,74296,74301,74320,74325,74345,74349,74354,74358,74363,74381,74399,74417,74436,74455,74474,74479,74485,74506,74512,74521,74527,74533,74539,74566,74579,74584,74594,74600,74606,74612,74618,74623,74629,74635,74641,74647,74680,74685,74690,74695,74700,74706,74712,74718,74729,74734,74740,74747,74761,74767,74791,74796,74801,74807,74813,74834,74840,74853,74859,74865,74871,74877,74882,74888,74894,74900,74918,74932,74938,74946,74952,74974,74979,74984,74989,74994,74999,75008,75017,75022],{"__ignoreMap":44},[49,71990,71991,71993,71995,71997],{"class":51,"line":52},[49,71992,51386],{"class":55},[49,71994,51390],{"class":51389},[49,71996,51393],{"class":2055},[49,71998,51396],{"class":55},[49,72000,72001,72003,72005,72007,72009,72011],{"class":51,"line":84},[49,72002,1129],{"class":55},[49,72004,50724],{"class":51389},[49,72006,51405],{"class":2055},[49,72008,60],{"class":55},[49,72010,51410],{"class":328},[49,72012,51396],{"class":55},[49,72014,72015],{"class":51,"line":109},[49,72016,2492],{"emptyLinePlaceholder":151},[49,72018,72019,72021,72023],{"class":51,"line":120},[49,72020,1129],{"class":55},[49,72022,51423],{"class":51389},[49,72024,51396],{"class":55},[49,72026,72027,72029,72031,72033,72035,72037],{"class":51,"line":135},[49,72028,52233],{"class":55},[49,72030,51433],{"class":51389},[49,72032,51436],{"class":2055},[49,72034,60],{"class":55},[49,72036,51441],{"class":328},[49,72038,51396],{"class":55},[49,72040,72041,72043,72045,72047,72049,72051,72053,72055,72057],{"class":51,"line":1306},[49,72042,52233],{"class":55},[49,72044,51433],{"class":51389},[49,72046,15010],{"class":2055},[49,72048,60],{"class":55},[49,72050,51480],{"class":328},[49,72052,51460],{"class":2055},[49,72054,60],{"class":55},[49,72056,51487],{"class":328},[49,72058,51396],{"class":55},[49,72060,72061,72063,72065,72067,72069],{"class":51,"line":1312},[49,72062,52233],{"class":55},[49,72064,51496],{"class":51389},[49,72066,51499],{"class":55},[49,72068,51496],{"class":51389},[49,72070,51396],{"class":55},[49,72072,72073,72075,72077],{"class":51,"line":1403},[49,72074,52233],{"class":55},[49,72076,143],{"class":51389},[49,72078,51396],{"class":55},[49,72080,72081,72083],{"class":51,"line":1409},[49,72082,6493],{"class":51389},[49,72084,15662],{"class":55},[49,72086,72087,72089,72091,72093],{"class":51,"line":1421},[49,72088,54784],{"class":66},[49,72090,51526],{"class":55},[49,72092,415],{"class":66},[49,72094,1382],{"class":55},[49,72096,72097,72099,72101,72103],{"class":51,"line":1704},[49,72098,54795],{"class":66},[49,72100,51526],{"class":55},[49,72102,415],{"class":66},[49,72104,1382],{"class":55},[49,72106,72107],{"class":51,"line":1709},[49,72108,2279],{"class":55},[49,72110,72111],{"class":51,"line":1715},[49,72112,2492],{"emptyLinePlaceholder":151},[49,72114,72115,72117],{"class":51,"line":1720},[49,72116,57368],{"class":51389},[49,72118,15662],{"class":55},[49,72120,72121,72123,72125,72127],{"class":51,"line":1734},[49,72122,57375],{"class":66},[49,72124,51526],{"class":55},[49,72126,51681],{"class":66},[49,72128,1382],{"class":55},[49,72130,72131,72133,72135,72137,72139],{"class":51,"line":1739},[49,72132,62166],{"class":66},[49,72134,51526],{"class":55},[49,72136,919],{"class":66},[49,72138,51581],{"class":59},[49,72140,1382],{"class":55},[49,72142,72143],{"class":51,"line":1745},[49,72144,2279],{"class":55},[49,72146,72147],{"class":51,"line":1766},[49,72148,2492],{"emptyLinePlaceholder":151},[49,72150,72151,72154],{"class":51,"line":1771},[49,72152,72153],{"class":2055},"    .info",[49,72155,15662],{"class":55},[49,72157,72158,72160,72162,72164,72166],{"class":51,"line":1785},[49,72159,54860],{"class":66},[49,72161,51526],{"class":55},[49,72163,51578],{"class":66},[49,72165,51581],{"class":59},[49,72167,1382],{"class":55},[49,72169,72170,72172,72174,72176,72178,72180],{"class":51,"line":1790},[49,72171,54795],{"class":66},[49,72173,51526],{"class":55},[49,72175,95],{"class":66},[49,72177,51581],{"class":59},[49,72179,51645],{"class":66},[49,72181,1382],{"class":55},[49,72183,72184,72186,72188,72190],{"class":51,"line":1819},[49,72185,57375],{"class":66},[49,72187,51526],{"class":55},[49,72189,51681],{"class":66},[49,72191,1382],{"class":55},[49,72193,72194],{"class":51,"line":1824},[49,72195,2279],{"class":55},[49,72197,72198],{"class":51,"line":1841},[49,72199,2492],{"emptyLinePlaceholder":151},[49,72201,72202,72205],{"class":51,"line":1846},[49,72203,72204],{"class":2055},"    .uname",[49,72206,31555],{"class":55},[49,72208,72209,72212],{"class":51,"line":1851},[49,72210,72211],{"class":2055},"    .age",[49,72213,31555],{"class":55},[49,72215,72216,72219],{"class":51,"line":1856},[49,72217,72218],{"class":2055},"    .salary",[49,72220,15662],{"class":55},[49,72222,72223,72225,72227,72229,72231],{"class":51,"line":1870},[49,72224,54860],{"class":66},[49,72226,51526],{"class":55},[49,72228,533],{"class":66},[49,72230,51581],{"class":59},[49,72232,1382],{"class":55},[49,72234,72235,72237,72239,72241,72243],{"class":51,"line":1875},[49,72236,54874],{"class":66},[49,72238,51526],{"class":55},[49,72240,919],{"class":66},[49,72242,51581],{"class":59},[49,72244,1382],{"class":55},[49,72246,72247,72249,72251,72253],{"class":51,"line":2669},[49,72248,61869],{"class":66},[49,72250,51526],{"class":55},[49,72252,54826],{"class":66},[49,72254,1382],{"class":55},[49,72256,72257,72259,72261,72263,72265],{"class":51,"line":2683},[49,72258,61839],{"class":66},[49,72260,51526],{"class":55},[49,72262,794],{"class":66},[49,72264,51581],{"class":59},[49,72266,1382],{"class":55},[49,72268,72269],{"class":51,"line":2691},[49,72270,2279],{"class":55},[49,72272,72273],{"class":51,"line":2696},[49,72274,2492],{"emptyLinePlaceholder":151},[49,72276,72277,72280],{"class":51,"line":2702},[49,72278,72279],{"class":2055},"    .gender",[49,72281,31555],{"class":55},[49,72283,72284,72287],{"class":51,"line":2708},[49,72285,72286],{"class":2055},"    .city",[49,72288,15662],{"class":55},[49,72290,72291,72293,72295,72297,72299],{"class":51,"line":2713},[49,72292,54860],{"class":66},[49,72294,51526],{"class":55},[49,72296,533],{"class":66},[49,72298,51581],{"class":59},[49,72300,1382],{"class":55},[49,72302,72303,72305,72307,72309,72311],{"class":51,"line":8038},[49,72304,54874],{"class":66},[49,72306,51526],{"class":55},[49,72308,1044],{"class":66},[49,72310,51581],{"class":59},[49,72312,1382],{"class":55},[49,72314,72315,72317,72319,72321],{"class":51,"line":8062},[49,72316,61869],{"class":66},[49,72318,51526],{"class":55},[49,72320,54826],{"class":66},[49,72322,1382],{"class":55},[49,72324,72325,72327,72329,72331,72333],{"class":51,"line":8067},[49,72326,61839],{"class":66},[49,72328,51526],{"class":55},[49,72330,794],{"class":66},[49,72332,51581],{"class":59},[49,72334,1382],{"class":55},[49,72336,72337,72339,72341,72343,72345,72347,72350,72352,72354,72356,72359,72361,72363],{"class":51,"line":8073},[49,72338,62066],{"class":66},[49,72340,51526],{"class":55},[49,72342,441],{"class":66},[49,72344,51581],{"class":59},[49,72346,51610],{"class":66},[49,72348,72349],{"class":66}," rgb",[49,72351,228],{"class":55},[49,72353,1814],{"class":66},[49,72355,12525],{"class":55},[49,72357,72358],{"class":66},"197",[49,72360,12525],{"class":55},[49,72362,72358],{"class":66},[49,72364,2811],{"class":55},[49,72366,72367],{"class":51,"line":8100},[49,72368,2279],{"class":55},[49,72370,72371],{"class":51,"line":8105},[49,72372,2492],{"emptyLinePlaceholder":151},[49,72374,72375,72378],{"class":51,"line":8111},[49,72376,72377],{"class":51389},"    button",[49,72379,15662],{"class":55},[49,72381,72382,72384,72386,72388,72390],{"class":51,"line":8123},[49,72383,54874],{"class":66},[49,72385,51526],{"class":55},[49,72387,1044],{"class":66},[49,72389,51581],{"class":59},[49,72391,1382],{"class":55},[49,72393,72394,72396,72398,72400,72402],{"class":51,"line":8135},[49,72395,54860],{"class":66},[49,72397,51526],{"class":55},[49,72399,703],{"class":66},[49,72401,51581],{"class":59},[49,72403,1382],{"class":55},[49,72405,72406,72408,72410,72413,72415,72417,72419,72422,72424,72426],{"class":51,"line":8147},[49,72407,54973],{"class":66},[49,72409,51526],{"class":55},[49,72411,72412],{"class":66},"rgb",[49,72414,228],{"class":55},[49,72416,1188],{"class":66},[49,72418,12525],{"class":55},[49,72420,72421],{"class":66},"187",[49,72423,12525],{"class":55},[49,72425,521],{"class":66},[49,72427,2811],{"class":55},[49,72429,72430,72432,72434,72436],{"class":51,"line":9806},[49,72431,57505],{"class":66},[49,72433,51526],{"class":55},[49,72435,60931],{"class":66},[49,72437,1382],{"class":55},[49,72439,72440,72442,72444,72446],{"class":51,"line":9831},[49,72441,62066],{"class":66},[49,72443,51526],{"class":55},[49,72445,415],{"class":66},[49,72447,1382],{"class":55},[49,72449,72450],{"class":51,"line":9854},[49,72451,2279],{"class":55},[49,72453,72454],{"class":51,"line":9878},[49,72455,2492],{"emptyLinePlaceholder":151},[49,72457,72458,72460,72462],{"class":51,"line":9883},[49,72459,72377],{"class":51389},[49,72461,51777],{"class":51389},[49,72463,15662],{"class":55},[49,72465,72466,72468,72470,72473],{"class":51,"line":9888},[49,72467,55098],{"class":66},[49,72469,51526],{"class":55},[49,72471,72472],{"class":66},"inline-block",[49,72474,1382],{"class":55},[49,72476,72477,72479,72481,72483,72485],{"class":51,"line":9893},[49,72478,54860],{"class":66},[49,72480,51526],{"class":55},[49,72482,95],{"class":66},[49,72484,51581],{"class":59},[49,72486,1382],{"class":55},[49,72488,72489,72491,72493,72495,72497],{"class":51,"line":9902},[49,72490,54874],{"class":66},[49,72492,51526],{"class":55},[49,72494,95],{"class":66},[49,72496,51581],{"class":59},[49,72498,1382],{"class":55},[49,72500,72501,72503,72505,72507,72509],{"class":51,"line":9907},[49,72502,57448],{"class":66},[49,72504,51526],{"class":55},[49,72506,691],{"class":66},[49,72508,51581],{"class":59},[49,72510,1382],{"class":55},[49,72512,72513,72515,72517,72519,72521,72523,72526],{"class":51,"line":9913},[49,72514,62066],{"class":66},[49,72516,51526],{"class":55},[49,72518,441],{"class":66},[49,72520,51581],{"class":59},[49,72522,51610],{"class":66},[49,72524,72525],{"class":66}," #fff",[49,72527,1382],{"class":55},[49,72529,72530,72532,72534,72536,72538],{"class":51,"line":9934},[49,72531,55223],{"class":66},[49,72533,51526],{"class":55},[49,72535,541],{"class":66},[49,72537,51581],{"class":59},[49,72539,1382],{"class":55},[49,72541,72542,72544,72546,72548,72550],{"class":51,"line":9940},[49,72543,61839],{"class":66},[49,72545,51526],{"class":55},[49,72547,441],{"class":66},[49,72549,51581],{"class":59},[49,72551,1382],{"class":55},[49,72553,72554],{"class":51,"line":9954},[49,72555,2279],{"class":55},[49,72557,72558],{"class":51,"line":9960},[49,72559,2492],{"emptyLinePlaceholder":151},[49,72561,72562,72565],{"class":51,"line":9987},[49,72563,72564],{"class":2055},"    .total",[49,72566,15662],{"class":55},[49,72568,72569,72571,72573,72575,72577],{"class":51,"line":9996},[49,72570,54860],{"class":66},[49,72572,51526],{"class":55},[49,72574,61718],{"class":66},[49,72576,51581],{"class":59},[49,72578,1382],{"class":55},[49,72580,72581,72583,72585,72587,72589],{"class":51,"line":10002},[49,72582,54874],{"class":66},[49,72584,51526],{"class":55},[49,72586,622],{"class":66},[49,72588,51581],{"class":59},[49,72590,1382],{"class":55},[49,72592,72593,72595,72597,72599,72601],{"class":51,"line":10010},[49,72594,57448],{"class":66},[49,72596,51526],{"class":55},[49,72598,622],{"class":66},[49,72600,51581],{"class":59},[49,72602,1382],{"class":55},[49,72604,72605,72607,72609,72612],{"class":51,"line":10015},[49,72606,57375],{"class":66},[49,72608,51526],{"class":55},[49,72610,72611],{"class":66},"right",[49,72613,1382],{"class":55},[49,72615,72616,72618,72620,72622,72624,72626,72628,72630],{"class":51,"line":16694},[49,72617,54795],{"class":66},[49,72619,51526],{"class":55},[49,72621,622],{"class":66},[49,72623,51581],{"class":59},[49,72625,51645],{"class":66},[49,72627,2130],{"class":66},[49,72629,51581],{"class":59},[49,72631,1382],{"class":55},[49,72633,72634,72637,72639,72641,72643],{"class":51,"line":16700},[49,72635,72636],{"class":66},"      padding-right",[49,72638,51526],{"class":55},[49,72640,95],{"class":66},[49,72642,51581],{"class":59},[49,72644,1382],{"class":55},[49,72646,72647,72649,72651,72653,72655],{"class":51,"line":16723},[49,72648,55011],{"class":66},[49,72650,51526],{"class":55},[49,72652,742],{"class":66},[49,72654,51581],{"class":59},[49,72656,1382],{"class":55},[49,72658,72659,72661,72663,72665,72667,72670,72672,72675,72677,72679],{"class":51,"line":16729},[49,72660,54973],{"class":66},[49,72662,51526],{"class":55},[49,72664,72412],{"class":66},[49,72666,228],{"class":55},[49,72668,72669],{"class":66},"237",[49,72671,12525],{"class":55},[49,72673,72674],{"class":66},"235",[49,72676,12525],{"class":55},[49,72678,72674],{"class":66},[49,72680,2811],{"class":55},[49,72682,72683,72686,72688,72690],{"class":51,"line":16752},[49,72684,72685],{"class":66},"      box-sizing",[49,72687,51526],{"class":55},[49,72689,60594],{"class":66},[49,72691,1382],{"class":55},[49,72693,72694],{"class":51,"line":16766},[49,72695,2279],{"class":55},[49,72697,72698],{"class":51,"line":16786},[49,72699,2492],{"emptyLinePlaceholder":151},[49,72701,72702,72704,72706],{"class":51,"line":16792},[49,72703,72564],{"class":2055},[49,72705,51777],{"class":51389},[49,72707,15662],{"class":55},[49,72709,72710,72712,72714,72716],{"class":51,"line":16803},[49,72711,57505],{"class":66},[49,72713,51526],{"class":55},[49,72715,57510],{"class":66},[49,72717,1382],{"class":55},[49,72719,72720],{"class":51,"line":16826},[49,72721,2279],{"class":55},[49,72723,72724],{"class":51,"line":16848},[49,72725,2492],{"emptyLinePlaceholder":151},[49,72727,72728,72730],{"class":51,"line":16853},[49,72729,65112],{"class":51389},[49,72731,15662],{"class":55},[49,72733,72734,72736,72738,72740,72742],{"class":51,"line":16859},[49,72735,54860],{"class":66},[49,72737,51526],{"class":55},[49,72739,61718],{"class":66},[49,72741,51581],{"class":59},[49,72743,1382],{"class":55},[49,72745,72746,72748,72750,72753],{"class":51,"line":16873},[49,72747,54795],{"class":66},[49,72749,51526],{"class":55},[49,72751,72752],{"class":66},"auto",[49,72754,1382],{"class":55},[49,72756,72757,72759,72761,72763],{"class":51,"line":16886},[49,72758,65119],{"class":66},[49,72760,51526],{"class":55},[49,72762,65124],{"class":66},[49,72764,1382],{"class":55},[49,72766,72767],{"class":51,"line":16891},[49,72768,2279],{"class":55},[49,72770,72771],{"class":51,"line":16905},[49,72772,2492],{"emptyLinePlaceholder":151},[49,72774,72775,72777],{"class":51,"line":16910},[49,72776,65204],{"class":51389},[49,72778,15662],{"class":55},[49,72780,72781,72783,72785,72787,72789,72791,72793,72795,72797,72799],{"class":51,"line":16916},[49,72782,54973],{"class":66},[49,72784,51526],{"class":55},[49,72786,72412],{"class":66},[49,72788,228],{"class":55},[49,72790,72669],{"class":66},[49,72792,12525],{"class":55},[49,72794,72674],{"class":66},[49,72796,12525],{"class":55},[49,72798,72674],{"class":66},[49,72800,2811],{"class":55},[49,72802,72803],{"class":51,"line":16921},[49,72804,2279],{"class":55},[49,72806,72807],{"class":51,"line":16935},[49,72808,2492],{"emptyLinePlaceholder":151},[49,72810,72811,72813],{"class":51,"line":16940},[49,72812,65204],{"class":51389},[49,72814,31555],{"class":55},[49,72816,72817,72819],{"class":51,"line":16945},[49,72818,65270],{"class":51389},[49,72820,15662],{"class":55},[49,72822,72823,72825,72827,72829,72831],{"class":51,"line":16959},[49,72824,54874],{"class":66},[49,72826,51526],{"class":55},[49,72828,495],{"class":66},[49,72830,51581],{"class":59},[49,72832,1382],{"class":55},[49,72834,72835,72837,72839,72841],{"class":51,"line":16971},[49,72836,57375],{"class":66},[49,72838,51526],{"class":55},[49,72840,23826],{"class":66},[49,72842,1382],{"class":55},[49,72844,72845,72847,72849,72851,72853],{"class":51,"line":16976},[49,72846,55011],{"class":66},[49,72848,51526],{"class":55},[49,72850,768],{"class":66},[49,72852,51581],{"class":59},[49,72854,1382],{"class":55},[49,72856,72857,72859,72861,72863,72865,72867,72869,72871,72874,72876,72879,72881,72883],{"class":51,"line":16989},[49,72858,62066],{"class":66},[49,72860,51526],{"class":55},[49,72862,441],{"class":66},[49,72864,51581],{"class":59},[49,72866,51610],{"class":66},[49,72868,72349],{"class":66},[49,72870,228],{"class":55},[49,72872,72873],{"class":66},"228",[49,72875,12525],{"class":55},[49,72877,72878],{"class":66},"225",[49,72880,12525],{"class":55},[49,72882,72878],{"class":66},[49,72884,2811],{"class":55},[49,72886,72887,72890,72892,72894,72896],{"class":51,"line":16994},[49,72888,72889],{"class":66},"      padding-left",[49,72891,51526],{"class":55},[49,72893,541],{"class":66},[49,72895,51581],{"class":59},[49,72897,1382],{"class":55},[49,72899,72900,72902,72904,72906,72909,72911,72913],{"class":51,"line":16999},[49,72901,61949],{"class":66},[49,72903,51526],{"class":55},[49,72905,28212],{"class":66},[49,72907,72908],{"class":66}," linear",[49,72910,61956],{"class":66},[49,72912,914],{"class":59},[49,72914,1382],{"class":55},[49,72916,72917],{"class":51,"line":17004},[49,72918,2279],{"class":55},[49,72920,72921],{"class":51,"line":17017},[49,72922,2492],{"emptyLinePlaceholder":151},[49,72924,72925,72928,72930,72932],{"class":51,"line":17022},[49,72926,72927],{"class":51389},"    tbody",[49,72929,70233],{"class":51389},[49,72931,61029],{"class":2055},[49,72933,15662],{"class":55},[49,72935,72936,72938,72940,72942,72944,72946,72948,72950,72952,72954],{"class":51,"line":32722},[49,72937,54973],{"class":66},[49,72939,51526],{"class":55},[49,72941,72412],{"class":66},[49,72943,228],{"class":55},[49,72945,72669],{"class":66},[49,72947,12525],{"class":55},[49,72949,72674],{"class":66},[49,72951,12525],{"class":55},[49,72953,72674],{"class":66},[49,72955,2811],{"class":55},[49,72957,72958,72960,72962,72964],{"class":51,"line":32728},[49,72959,62114],{"class":66},[49,72961,51526],{"class":55},[49,72963,62119],{"class":66},[49,72965,1382],{"class":55},[49,72967,72968],{"class":51,"line":32734},[49,72969,2279],{"class":55},[49,72971,72972],{"class":51,"line":32740},[49,72973,2492],{"emptyLinePlaceholder":151},[49,72975,72976,72978,72980,72983,72985],{"class":51,"line":32746},[49,72977,72927],{"class":51389},[49,72979,70233],{"class":51389},[49,72981,72982],{"class":51389}," td",[49,72984,1490],{"class":51389},[49,72986,15662],{"class":55},[49,72988,72989,72991,72993,72995],{"class":51,"line":32757},[49,72990,55098],{"class":66},[49,72992,51526],{"class":55},[49,72994,60958],{"class":66},[49,72996,1382],{"class":55},[49,72998,72999,73001,73003,73005,73007],{"class":51,"line":32763},[49,73000,54860],{"class":66},[49,73002,51526],{"class":55},[49,73004,1126],{"class":66},[49,73006,51581],{"class":59},[49,73008,1382],{"class":55},[49,73010,73011,73013,73015,73017,73019],{"class":51,"line":32783},[49,73012,54874],{"class":66},[49,73014,51526],{"class":55},[49,73016,1044],{"class":66},[49,73018,51581],{"class":59},[49,73020,1382],{"class":55},[49,73022,73023,73025,73027,73029,73031],{"class":51,"line":32789},[49,73024,57448],{"class":66},[49,73026,51526],{"class":55},[49,73028,1044],{"class":66},[49,73030,51581],{"class":59},[49,73032,1382],{"class":55},[49,73034,73035,73037,73039,73041,73043],{"class":51,"line":32800},[49,73036,62166],{"class":66},[49,73038,51526],{"class":55},[49,73040,301],{"class":66},[49,73042,51581],{"class":59},[49,73044,1382],{"class":55},[49,73046,73047,73049,73051,73053],{"class":51,"line":32806},[49,73048,57505],{"class":66},[49,73050,51526],{"class":55},[49,73052,60931],{"class":66},[49,73054,1382],{"class":55},[49,73056,73057,73059,73061,73063],{"class":51,"line":32812},[49,73058,57375],{"class":66},[49,73060,51526],{"class":55},[49,73062,51681],{"class":66},[49,73064,1382],{"class":55},[49,73066,73067,73069,73071,73073],{"class":51,"line":32818},[49,73068,64059],{"class":66},[49,73070,51526],{"class":55},[49,73072,54826],{"class":66},[49,73074,1382],{"class":55},[49,73076,73077,73079,73081,73084],{"class":51,"line":32824},[49,73078,54973],{"class":66},[49,73080,51526],{"class":55},[49,73082,73083],{"class":66},"orange",[49,73085,1382],{"class":55},[49,73087,73088,73090,73092,73095,73097],{"class":51,"line":32830},[49,73089,55223],{"class":66},[49,73091,51526],{"class":55},[49,73093,73094],{"class":66},"12.5",[49,73096,51581],{"class":59},[49,73098,1382],{"class":55},[49,73100,73101],{"class":51,"line":32836},[49,73102,2279],{"class":55},[49,73104,73105,73107,73109],{"class":51,"line":32842},[49,73106,52506],{"class":55},[49,73108,143],{"class":51389},[49,73110,51396],{"class":55},[49,73112,73113,73115,73117],{"class":51,"line":32862},[49,73114,51874],{"class":55},[49,73116,51423],{"class":51389},[49,73118,51396],{"class":55},[49,73120,73121],{"class":51,"line":32868},[49,73122,2492],{"emptyLinePlaceholder":151},[49,73124,73125,73127,73129],{"class":51,"line":32884},[49,73126,1129],{"class":55},[49,73128,51889],{"class":51389},[49,73130,51396],{"class":55},[49,73132,73133,73135,73137,73140,73142],{"class":51,"line":32890},[49,73134,52233],{"class":55},[49,73136,166],{"class":51389},[49,73138,73139],{"class":55},">学生就业统计表\u003C\u002F",[49,73141,166],{"class":51389},[49,73143,51396],{"class":55},[49,73145,73146,73148,73150,73152,73154,73156,73158,73160,73162],{"class":51,"line":32904},[49,73147,52233],{"class":55},[49,73149,66714],{"class":51389},[49,73151,53575],{"class":2055},[49,73153,60],{"class":55},[49,73155,62753],{"class":328},[49,73157,69159],{"class":2055},[49,73159,60],{"class":55},[49,73161,31865],{"class":328},[49,73163,51396],{"class":55},[49,73165,73166,73168,73170,73172,73174,73176,73178,73180,73182,73184,73186,73189,73191,73193,73195],{"class":51,"line":32910},[49,73167,51430],{"class":55},[49,73169,53910],{"class":51389},[49,73171,53913],{"class":2055},[49,73173,60],{"class":55},[49,73175,62788],{"class":328},[49,73177,15010],{"class":2055},[49,73179,60],{"class":55},[49,73181,69185],{"class":328},[49,73183,61109],{"class":2055},[49,73185,60],{"class":55},[49,73187,73188],{"class":328},"\"姓名\"",[49,73190,53575],{"class":2055},[49,73192,60],{"class":55},[49,73194,69185],{"class":328},[49,73196,51396],{"class":55},[49,73198,73199,73201,73203,73205,73207,73209,73211,73213,73215,73217,73219,73222,73224,73226,73228],{"class":51,"line":32925},[49,73200,51430],{"class":55},[49,73202,53910],{"class":51389},[49,73204,53913],{"class":2055},[49,73206,60],{"class":55},[49,73208,62788],{"class":328},[49,73210,15010],{"class":2055},[49,73212,60],{"class":55},[49,73214,69213],{"class":328},[49,73216,61109],{"class":2055},[49,73218,60],{"class":55},[49,73220,73221],{"class":328},"\"年龄\"",[49,73223,53575],{"class":2055},[49,73225,60],{"class":55},[49,73227,69213],{"class":328},[49,73229,51396],{"class":55},[49,73231,73232,73234,73236,73238,73240,73242,73244,73246,73248,73250,73252,73255,73257,73259,73261],{"class":51,"line":32931},[49,73233,51430],{"class":55},[49,73235,53910],{"class":51389},[49,73237,53913],{"class":2055},[49,73239,60],{"class":55},[49,73241,62788],{"class":328},[49,73243,15010],{"class":2055},[49,73245,60],{"class":55},[49,73247,69315],{"class":328},[49,73249,61109],{"class":2055},[49,73251,60],{"class":55},[49,73253,73254],{"class":328},"\"薪资\"",[49,73256,53575],{"class":2055},[49,73258,60],{"class":55},[49,73260,69315],{"class":328},[49,73262,51396],{"class":55},[49,73264,73265,73267,73269,73271,73273,73275,73277,73279,73281,73283,73285,73287],{"class":51,"line":32940},[49,73266,51430],{"class":55},[49,73268,69233],{"class":51389},[49,73270,15010],{"class":2055},[49,73272,60],{"class":55},[49,73274,69240],{"class":328},[49,73276,15049],{"class":2055},[49,73278,60],{"class":55},[49,73280,7742],{"class":328},[49,73282,53575],{"class":2055},[49,73284,60],{"class":55},[49,73286,69240],{"class":328},[49,73288,51396],{"class":55},[49,73290,73291,73293,73295,73297,73299,73301,73303,73305],{"class":51,"line":32946},[49,73292,55323],{"class":55},[49,73294,69255],{"class":51389},[49,73296,66740],{"class":2055},[49,73298,60],{"class":55},[49,73300,10051],{"class":328},[49,73302,69264],{"class":55},[49,73304,69255],{"class":51389},[49,73306,51396],{"class":55},[49,73308,73309,73311,73313,73315,73317,73319,73321,73323],{"class":51,"line":32955},[49,73310,55323],{"class":55},[49,73312,69255],{"class":51389},[49,73314,66740],{"class":2055},[49,73316,60],{"class":55},[49,73318,10120],{"class":328},[49,73320,69283],{"class":55},[49,73322,69255],{"class":51389},[49,73324,51396],{"class":55},[49,73326,73327,73329,73331],{"class":51,"line":32961},[49,73328,51865],{"class":55},[49,73330,69233],{"class":51389},[49,73332,51396],{"class":55},[49,73334,73335,73337,73339,73341,73343,73345,73347,73349,73351,73353,73355,73357],{"class":51,"line":32967},[49,73336,51430],{"class":55},[49,73338,69233],{"class":51389},[49,73340,15010],{"class":2055},[49,73342,60],{"class":55},[49,73344,69337],{"class":328},[49,73346,15049],{"class":2055},[49,73348,60],{"class":55},[49,73350,7742],{"class":328},[49,73352,53575],{"class":2055},[49,73354,60],{"class":55},[49,73356,69337],{"class":328},[49,73358,51396],{"class":55},[49,73360,73361,73363,73365,73367,73369,73371,73373,73375],{"class":51,"line":32976},[49,73362,55323],{"class":55},[49,73364,69255],{"class":51389},[49,73366,66740],{"class":2055},[49,73368,60],{"class":55},[49,73370,69358],{"class":328},[49,73372,69361],{"class":55},[49,73374,69255],{"class":51389},[49,73376,51396],{"class":55},[49,73378,73379,73381,73383,73385,73387,73389,73391,73393],{"class":51,"line":32982},[49,73380,55323],{"class":55},[49,73382,69255],{"class":51389},[49,73384,66740],{"class":2055},[49,73386,60],{"class":55},[49,73388,69378],{"class":328},[49,73390,69381],{"class":55},[49,73392,69255],{"class":51389},[49,73394,51396],{"class":55},[49,73396,73397,73399,73401,73403,73405,73407,73409,73411],{"class":51,"line":32993},[49,73398,55323],{"class":55},[49,73400,69255],{"class":51389},[49,73402,66740],{"class":2055},[49,73404,60],{"class":55},[49,73406,69398],{"class":328},[49,73408,69401],{"class":55},[49,73410,69255],{"class":51389},[49,73412,51396],{"class":55},[49,73414,73415,73417,73419,73421,73423,73425,73427,73429],{"class":51,"line":32999},[49,73416,55323],{"class":55},[49,73418,69255],{"class":51389},[49,73420,66740],{"class":2055},[49,73422,60],{"class":55},[49,73424,69418],{"class":328},[49,73426,69421],{"class":55},[49,73428,69255],{"class":51389},[49,73430,51396],{"class":55},[49,73432,73433,73435,73437,73439,73441,73443,73445,73447],{"class":51,"line":33018},[49,73434,55323],{"class":55},[49,73436,69255],{"class":51389},[49,73438,66740],{"class":2055},[49,73440,60],{"class":55},[49,73442,69438],{"class":328},[49,73444,69441],{"class":55},[49,73446,69255],{"class":51389},[49,73448,51396],{"class":55},[49,73450,73451,73453,73455],{"class":51,"line":33024},[49,73452,51865],{"class":55},[49,73454,69233],{"class":51389},[49,73456,51396],{"class":55},[49,73458,73459,73461,73463],{"class":51,"line":33035},[49,73460,51430],{"class":55},[49,73462,53976],{"class":51389},[49,73464,51396],{"class":55},[49,73466,73467,73469,73471,73474,73476,73479,73481],{"class":51,"line":33041},[49,73468,55323],{"class":55},[49,73470,49],{"class":51389},[49,73472,73473],{"class":55},">+\u003C\u002F",[49,73475,49],{"class":51389},[49,73477,73478],{"class":55},">添加\u003C\u002F",[49,73480,53976],{"class":51389},[49,73482,51396],{"class":55},[49,73484,73485,73487,73489],{"class":51,"line":33061},[49,73486,52506],{"class":55},[49,73488,66714],{"class":51389},[49,73490,51396],{"class":55},[49,73492,73493,73495,73497,73499,73501,73503,73506,73508,73511,73513,73516,73518],{"class":51,"line":33077},[49,73494,52233],{"class":55},[49,73496,51700],{"class":51389},[49,73498,53575],{"class":2055},[49,73500,60],{"class":55},[49,73502,62669],{"class":328},[49,73504,73505],{"class":55},">共有数据 \u003C",[49,73507,49],{"class":51389},[49,73509,73510],{"class":55},">0\u003C\u002F",[49,73512,49],{"class":51389},[49,73514,73515],{"class":55},"> 条\u003C\u002F",[49,73517,51700],{"class":51389},[49,73519,51396],{"class":55},[49,73521,73522,73524,73526],{"class":51,"line":33083},[49,73523,52233],{"class":55},[49,73525,361],{"class":51389},[49,73527,51396],{"class":55},[49,73529,73530,73532,73534],{"class":51,"line":33097},[49,73531,51430],{"class":55},[49,73533,364],{"class":51389},[49,73535,51396],{"class":55},[49,73537,73538,73540,73542],{"class":51,"line":33103},[49,73539,55323],{"class":55},[49,73541,367],{"class":51389},[49,73543,51396],{"class":55},[49,73545,73546,73548,73550,73553,73555],{"class":51,"line":33109},[49,73547,55391],{"class":55},[49,73549,370],{"class":51389},[49,73551,73552],{"class":55},">ID\u003C\u002F",[49,73554,370],{"class":51389},[49,73556,51396],{"class":55},[49,73558,73559,73561,73563,73565,73567],{"class":51,"line":33120},[49,73560,55391],{"class":55},[49,73562,370],{"class":51389},[49,73564,69544],{"class":55},[49,73566,370],{"class":51389},[49,73568,51396],{"class":55},[49,73570,73571,73573,73575,73577,73579],{"class":51,"line":33126},[49,73572,55391],{"class":55},[49,73574,370],{"class":51389},[49,73576,69557],{"class":55},[49,73578,370],{"class":51389},[49,73580,51396],{"class":55},[49,73582,73583,73585,73587,73589,73591],{"class":51,"line":33132},[49,73584,55391],{"class":55},[49,73586,370],{"class":51389},[49,73588,69570],{"class":55},[49,73590,370],{"class":51389},[49,73592,51396],{"class":55},[49,73594,73595,73597,73599,73601,73603],{"class":51,"line":33142},[49,73596,55391],{"class":55},[49,73598,370],{"class":51389},[49,73600,69583],{"class":55},[49,73602,370],{"class":51389},[49,73604,51396],{"class":55},[49,73606,73607,73609,73611,73613,73615],{"class":51,"line":33148},[49,73608,55391],{"class":55},[49,73610,370],{"class":51389},[49,73612,69596],{"class":55},[49,73614,370],{"class":51389},[49,73616,51396],{"class":55},[49,73618,73619,73621,73623,73626,73628],{"class":51,"line":33159},[49,73620,55391],{"class":55},[49,73622,370],{"class":51389},[49,73624,73625],{"class":55},">录入时间\u003C\u002F",[49,73627,370],{"class":51389},[49,73629,51396],{"class":55},[49,73631,73632,73634,73636,73638,73640],{"class":51,"line":33165},[49,73633,55391],{"class":55},[49,73635,370],{"class":51389},[49,73637,69609],{"class":55},[49,73639,370],{"class":51389},[49,73641,51396],{"class":55},[49,73643,73644,73646,73648],{"class":51,"line":33175},[49,73645,55496],{"class":55},[49,73647,367],{"class":51389},[49,73649,51396],{"class":55},[49,73651,73652,73654,73656],{"class":51,"line":33180},[49,73653,51865],{"class":55},[49,73655,364],{"class":51389},[49,73657,51396],{"class":55},[49,73659,73660,73662,73664],{"class":51,"line":33186},[49,73661,51430],{"class":55},[49,73663,408],{"class":51389},[49,73665,51396],{"class":55},[49,73667,73668],{"class":51,"line":33235},[49,73669,73670],{"class":283},"      \u003C!-- \u003Ctr>\n",[49,73672,73673],{"class":51,"line":33282},[49,73674,73675],{"class":283},"        \u003Ctd>1\u003C\u002Ftd>\n",[49,73677,73678],{"class":51,"line":33287},[49,73679,73675],{"class":283},[49,73681,73682],{"class":51,"line":33293},[49,73683,73675],{"class":283},[49,73685,73686],{"class":51,"line":33312},[49,73687,73675],{"class":283},[49,73689,73690],{"class":51,"line":33318},[49,73691,73675],{"class":283},[49,73693,73694],{"class":51,"line":33338},[49,73695,73675],{"class":283},[49,73697,73698],{"class":51,"line":33344},[49,73699,73675],{"class":283},[49,73701,73702],{"class":51,"line":33350},[49,73703,73704],{"class":283},"        \u003Ctd>\n",[49,73706,73707],{"class":51,"line":33360},[49,73708,73709],{"class":283},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[49,73711,73712],{"class":51,"line":33365},[49,73713,73714],{"class":283},"        \u003C\u002Ftd>\n",[49,73716,73717],{"class":51,"line":33371},[49,73718,73719],{"class":283},"      \u003C\u002Ftr> -->\n",[49,73721,73722,73724,73726],{"class":51,"line":33387},[49,73723,51865],{"class":55},[49,73725,408],{"class":51389},[49,73727,51396],{"class":55},[49,73729,73730,73732,73734],{"class":51,"line":33432},[49,73731,52506],{"class":55},[49,73733,361],{"class":51389},[49,73735,51396],{"class":55},[49,73737,73738,73740,73742],{"class":51,"line":33438},[49,73739,52233],{"class":55},[49,73741,51902],{"class":51389},[49,73743,51396],{"class":55},[49,73745,73746],{"class":51,"line":33444},[49,73747,73748],{"class":283},"    \u002F\u002F const initData = [{\n",[49,73750,73751],{"class":51,"line":33450},[49,73752,73753],{"class":283},"    \u002F\u002F   unameId: 1,\n",[49,73755,73756],{"class":51,"line":33461},[49,73757,73758],{"class":283},"    \u002F\u002F   uname: '华晨宇',\n",[49,73760,73761],{"class":51,"line":33467},[49,73762,73763],{"class":283},"    \u002F\u002F   age: 22,\n",[49,73765,73766],{"class":51,"line":33473},[49,73767,73768],{"class":283},"    \u002F\u002F   salary: 12000,\n",[49,73770,73771],{"class":51,"line":33479},[49,73772,73773],{"class":283},"    \u002F\u002F   gender: '男',\n",[49,73775,73776],{"class":51,"line":33497},[49,73777,73778],{"class":283},"    \u002F\u002F   city: '北京',\n",[49,73780,73781],{"class":51,"line":33511},[49,73782,73783],{"class":283},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[49,73785,73786],{"class":51,"line":33520},[49,73787,73788],{"class":283},"    \u002F\u002F }]\n",[49,73790,73791],{"class":51,"line":33529},[49,73792,73793],{"class":283},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[49,73795,73796],{"class":51,"line":33538},[49,73797,73798],{"class":283},"    \u002F\u002F 1.渲染业务\n",[49,73800,73801],{"class":51,"line":33547},[49,73802,73803],{"class":283},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[49,73805,73806],{"class":51,"line":33553},[49,73807,73808],{"class":283},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[49,73810,73811],{"class":51,"line":33559},[49,73812,73813],{"class":283},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[49,73815,73816],{"class":51,"line":33567},[49,73817,2492],{"emptyLinePlaceholder":151},[49,73819,73820],{"class":51,"line":33572},[49,73821,73822],{"class":283},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[49,73824,73825],{"class":51,"line":33578},[49,73826,73827],{"class":283},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[49,73829,73830,73832,73834,73836],{"class":51,"line":33589},[49,73831,11311],{"class":59},[49,73833,57784],{"class":66},[49,73835,13654],{"class":59},[49,73837,51927],{"class":55},[49,73839,73840,73843,73845],{"class":51,"line":33595},[49,73841,73842],{"class":55},"    console.",[49,73844,58336],{"class":2055},[49,73846,52501],{"class":55},[49,73848,73849],{"class":51,"line":33615},[49,73850,2492],{"emptyLinePlaceholder":151},[49,73852,73853],{"class":51,"line":33621},[49,73854,73855],{"class":283},"    \u002F\u002F 时间函数\n",[49,73857,73858,73860,73863],{"class":51,"line":33627},[49,73859,70173],{"class":59},[49,73861,73862],{"class":2055}," getTime",[49,73864,10943],{"class":55},[49,73866,73867,73869,73872,73874,73876,73879],{"class":51,"line":33633},[49,73868,58317],{"class":59},[49,73870,73871],{"class":66}," date",[49,73873,13654],{"class":59},[49,73875,11668],{"class":59},[49,73877,73878],{"class":2055}," Date",[49,73880,2068],{"class":55},[49,73882,73883,73885,73887,73889,73892,73895,73897,73899,73901,73904,73907,73909,73911,73913,73915,73917,73919,73921],{"class":51,"line":33650},[49,73884,58317],{"class":59},[49,73886,16181],{"class":66},[49,73888,13654],{"class":59},[49,73890,73891],{"class":55}," date.",[49,73893,73894],{"class":2055},"getHours",[49,73896,13140],{"class":55},[49,73898,1129],{"class":59},[49,73900,2130],{"class":66},[49,73902,73903],{"class":59}," ?",[49,73905,73906],{"class":328}," '0'",[49,73908,45655],{"class":59},[49,73910,73891],{"class":55},[49,73912,73894],{"class":2055},[49,73914,13140],{"class":55},[49,73916,1078],{"class":59},[49,73918,73891],{"class":55},[49,73920,73894],{"class":2055},[49,73922,2068],{"class":55},[49,73924,73925,73927,73930,73932,73934,73937,73939,73941,73943,73945,73947,73949,73951,73953,73955,73957,73959,73961],{"class":51,"line":33656},[49,73926,58317],{"class":59},[49,73928,73929],{"class":66}," m",[49,73931,13654],{"class":59},[49,73933,73891],{"class":55},[49,73935,73936],{"class":2055},"getMinutes",[49,73938,13140],{"class":55},[49,73940,1129],{"class":59},[49,73942,2130],{"class":66},[49,73944,73903],{"class":59},[49,73946,73906],{"class":328},[49,73948,45655],{"class":59},[49,73950,73891],{"class":55},[49,73952,73936],{"class":2055},[49,73954,13140],{"class":55},[49,73956,1078],{"class":59},[49,73958,73891],{"class":55},[49,73960,73936],{"class":2055},[49,73962,2068],{"class":55},[49,73964,73965,73967,73969,73971,73973,73976,73978,73980,73982,73984,73986,73988,73990,73992,73994,73996,73998,74000],{"class":51,"line":33662},[49,73966,58317],{"class":59},[49,73968,8518],{"class":66},[49,73970,13654],{"class":59},[49,73972,73891],{"class":55},[49,73974,73975],{"class":2055},"getSeconds",[49,73977,13140],{"class":55},[49,73979,1129],{"class":59},[49,73981,2130],{"class":66},[49,73983,73903],{"class":59},[49,73985,73906],{"class":328},[49,73987,45655],{"class":59},[49,73989,73891],{"class":55},[49,73991,73975],{"class":2055},[49,73993,13140],{"class":55},[49,73995,1078],{"class":59},[49,73997,73891],{"class":55},[49,73999,73975],{"class":2055},[49,74001,2068],{"class":55},[49,74003,74004,74006,74009,74011,74013,74016,74018,74021,74023,74026,74028,74030,74033,74035,74037,74039,74041,74043,74045,74048,74050,74053,74055,74058,74060,74062,74064],{"class":51,"line":33668},[49,74005,58317],{"class":59},[49,74007,74008],{"class":66}," str",[49,74010,13654],{"class":59},[49,74012,62992],{"class":328},[49,74014,74015],{"class":55},"date",[49,74017,777],{"class":328},[49,74019,74020],{"class":2055},"getFullYear",[49,74022,2519],{"class":328},[49,74024,74025],{"class":328},"}\u002F${",[49,74027,74015],{"class":55},[49,74029,777],{"class":328},[49,74031,74032],{"class":2055},"getMonth",[49,74034,13140],{"class":328},[49,74036,700],{"class":59},[49,74038,25209],{"class":66},[49,74040,74025],{"class":328},[49,74042,74015],{"class":55},[49,74044,777],{"class":328},[49,74046,74047],{"class":2055},"getDate",[49,74049,2519],{"class":328},[49,74051,74052],{"class":328},"} ${",[49,74054,636],{"class":55},[49,74056,74057],{"class":328},"}:${",[49,74059,763],{"class":55},[49,74061,74057],{"class":328},[49,74063,914],{"class":55},[49,74065,74066],{"class":328},"}`\n",[49,74068,74069,74072],{"class":51,"line":33674},[49,74070,74071],{"class":59},"      return",[49,74073,74074],{"class":55}," str\n",[49,74076,74077],{"class":51,"line":33680},[49,74078,2279],{"class":55},[49,74080,74081],{"class":51,"line":33707},[49,74082,74083],{"class":283},"    \u002F\u002F 渲染函数\n",[49,74085,74086,74088,74090,74092,74094,74096,74098,74100],{"class":51,"line":33731},[49,74087,11311],{"class":59},[49,74089,69836],{"class":66},[49,74091,13654],{"class":59},[49,74093,54485],{"class":55},[49,74095,54488],{"class":2055},[49,74097,228],{"class":55},[49,74099,69847],{"class":328},[49,74101,81],{"class":55},[49,74103,74104,74106,74108],{"class":51,"line":33737},[49,74105,70173],{"class":59},[49,74107,70176],{"class":2055},[49,74109,10943],{"class":55},[49,74111,74112],{"class":51,"line":33743},[49,74113,74114],{"class":283},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[49,74116,74117],{"class":51,"line":33749},[49,74118,74119],{"class":283},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[49,74121,74122,74124,74127,74129,74131,74134,74136,74138,74140,74143,74145,74148],{"class":51,"line":33760},[49,74123,58317],{"class":59},[49,74125,74126],{"class":66}," trArr",[49,74128,13654],{"class":59},[49,74130,52054],{"class":55},[49,74132,74133],{"class":2055},"map",[49,74135,228],{"class":55},[49,74137,54538],{"class":59},[49,74139,1750],{"class":55},[49,74141,74142],{"class":126},"ele",[49,74144,12525],{"class":55},[49,74146,74147],{"class":126},"index",[49,74149,12532],{"class":55},[49,74151,74152,74154],{"class":51,"line":33771},[49,74153,14842],{"class":59},[49,74155,70257],{"class":328},[49,74157,74158],{"class":51,"line":33777},[49,74159,74160],{"class":328},"      \u003Ctr>\n",[49,74162,74163,74165,74167,74169,74172],{"class":51,"line":33794},[49,74164,70262],{"class":328},[49,74166,74142],{"class":55},[49,74168,777],{"class":328},[49,74170,74171],{"class":55},"unameId",[49,74173,70277],{"class":328},[49,74175,74176,74178,74180,74182,74184],{"class":51,"line":33817},[49,74177,70262],{"class":328},[49,74179,74142],{"class":55},[49,74181,777],{"class":328},[49,74183,70293],{"class":55},[49,74185,70277],{"class":328},[49,74187,74188,74190,74192,74194,74196],{"class":51,"line":33840},[49,74189,70262],{"class":328},[49,74191,74142],{"class":55},[49,74193,777],{"class":328},[49,74195,70310],{"class":55},[49,74197,70277],{"class":328},[49,74199,74200,74202,74204,74206,74208],{"class":51,"line":33846},[49,74201,70262],{"class":328},[49,74203,74142],{"class":55},[49,74205,777],{"class":328},[49,74207,70327],{"class":55},[49,74209,70277],{"class":328},[49,74211,74212,74214,74216,74218,74220],{"class":51,"line":33851},[49,74213,70262],{"class":328},[49,74215,74142],{"class":55},[49,74217,777],{"class":328},[49,74219,70344],{"class":55},[49,74221,70277],{"class":328},[49,74223,74224,74226,74228,74230,74232],{"class":51,"line":33860},[49,74225,70262],{"class":328},[49,74227,74142],{"class":55},[49,74229,777],{"class":328},[49,74231,70361],{"class":55},[49,74233,70277],{"class":328},[49,74235,74236,74238,74240,74242,74244],{"class":51,"line":33870},[49,74237,70262],{"class":328},[49,74239,74142],{"class":55},[49,74241,777],{"class":328},[49,74243,2479],{"class":55},[49,74245,70277],{"class":328},[49,74247,74248],{"class":51,"line":33876},[49,74249,73704],{"class":328},[49,74251,74252,74255,74257],{"class":51,"line":33881},[49,74253,74254],{"class":328},"          \u003Ca href=\"#\" data-id=\"${",[49,74256,74147],{"class":55},[49,74258,74259],{"class":328},"}\">删除\u003C\u002Fa>\n",[49,74261,74262],{"class":51,"line":33887},[49,74263,73714],{"class":328},[49,74265,74266],{"class":51,"line":33900},[49,74267,74268],{"class":328},"      \u003C\u002Ftr>\n",[49,74270,74271],{"class":51,"line":33906},[49,74272,74273],{"class":328},"  `\n",[49,74275,74276],{"class":51,"line":33917},[49,74277,64904],{"class":55},[49,74279,74280,74282,74284],{"class":51,"line":33928},[49,74281,58333],{"class":55},[49,74283,58336],{"class":2055},[49,74285,74286],{"class":55},"(trArr)\n",[49,74288,74289],{"class":51,"line":33947},[49,74290,2492],{"emptyLinePlaceholder":151},[49,74292,74293],{"class":51,"line":49607},[49,74294,74295],{"class":283},"      \u002F\u002F (2) 把数组转换为字符串join\n",[49,74297,74298],{"class":51,"line":49612},[49,74299,74300],{"class":283},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[49,74302,74303,74305,74307,74310,74313,74315,74318],{"class":51,"line":49621},[49,74304,70188],{"class":55},[49,74306,60],{"class":59},[49,74308,74309],{"class":55}," trArr.",[49,74311,74312],{"class":2055},"join",[49,74314,228],{"class":55},[49,74316,74317],{"class":328},"''",[49,74319,81],{"class":55},[49,74321,74322],{"class":51,"line":49630},[49,74323,74324],{"class":283},"      \u002F\u002F 显示共有几条\n",[49,74326,74327,74329,74331,74333,74336,74339,74341,74343],{"class":51,"line":49635},[49,74328,55860],{"class":55},[49,74330,54488],{"class":2055},[49,74332,228],{"class":55},[49,74334,74335],{"class":328},"'.total span'",[49,74337,74338],{"class":55},").innerHTML ",[49,74340,60],{"class":59},[49,74342,52054],{"class":55},[49,74344,55920],{"class":66},[49,74346,74347],{"class":51,"line":49640},[49,74348,2279],{"class":55},[49,74350,74351],{"class":51,"line":49645},[49,74352,74353],{"class":283},"    \u002F\u002F render()\n",[49,74355,74356],{"class":51,"line":49658},[49,74357,2492],{"emptyLinePlaceholder":151},[49,74359,74360],{"class":51,"line":49663},[49,74361,74362],{"class":283},"    \u002F\u002F 获取DOM对象\n",[49,74364,74365,74367,74369,74371,74373,74375,74377,74379],{"class":51,"line":49672},[49,74366,11311],{"class":59},[49,74368,69910],{"class":66},[49,74370,13654],{"class":59},[49,74372,54485],{"class":55},[49,74374,54488],{"class":2055},[49,74376,228],{"class":55},[49,74378,69921],{"class":328},[49,74380,81],{"class":55},[49,74382,74383,74385,74387,74389,74391,74393,74395,74397],{"class":51,"line":49681},[49,74384,11311],{"class":59},[49,74386,69737],{"class":66},[49,74388,13654],{"class":59},[49,74390,54485],{"class":55},[49,74392,54488],{"class":2055},[49,74394,228],{"class":55},[49,74396,69748],{"class":328},[49,74398,81],{"class":55},[49,74400,74401,74403,74405,74407,74409,74411,74413,74415],{"class":51,"line":49698},[49,74402,11311],{"class":59},[49,74404,15779],{"class":66},[49,74406,13654],{"class":59},[49,74408,54485],{"class":55},[49,74410,54488],{"class":2055},[49,74412,228],{"class":55},[49,74414,69767],{"class":328},[49,74416,81],{"class":55},[49,74418,74420,74422,74424,74426,74428,74430,74432,74434],{"class":51,"line":74419},231,[49,74421,11311],{"class":59},[49,74423,69796],{"class":66},[49,74425,13654],{"class":59},[49,74427,54485],{"class":55},[49,74429,54488],{"class":2055},[49,74431,228],{"class":55},[49,74433,69807],{"class":328},[49,74435,81],{"class":55},[49,74437,74439,74441,74443,74445,74447,74449,74451,74453],{"class":51,"line":74438},232,[49,74440,11311],{"class":59},[49,74442,69776],{"class":66},[49,74444,13654],{"class":59},[49,74446,54485],{"class":55},[49,74448,54488],{"class":2055},[49,74450,228],{"class":55},[49,74452,69787],{"class":328},[49,74454,81],{"class":55},[49,74456,74458,74460,74462,74464,74466,74468,74470,74472],{"class":51,"line":74457},233,[49,74459,11311],{"class":59},[49,74461,69816],{"class":66},[49,74463,13654],{"class":59},[49,74465,54485],{"class":55},[49,74467,54488],{"class":2055},[49,74469,228],{"class":55},[49,74471,69827],{"class":328},[49,74473,81],{"class":55},[49,74475,74477],{"class":51,"line":74476},234,[49,74478,2492],{"emptyLinePlaceholder":151},[49,74480,74482],{"class":51,"line":74481},235,[49,74483,74484],{"class":283},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[49,74486,74488,74490,74492,74494,74496,74498,74500,74502,74504],{"class":51,"line":74487},236,[49,74489,69928],{"class":55},[49,74491,57902],{"class":2055},[49,74493,228],{"class":55},[49,74495,69935],{"class":328},[49,74497,12525],{"class":55},[49,74499,54538],{"class":59},[49,74501,1750],{"class":55},[49,74503,298],{"class":126},[49,74505,12532],{"class":55},[49,74507,74509],{"class":51,"line":74508},237,[49,74510,74511],{"class":283},"      \u002F\u002F 禁止浏览器跳转\n",[49,74513,74515,74517,74519],{"class":51,"line":74514},238,[49,74516,69955],{"class":55},[49,74518,69958],{"class":2055},[49,74520,2068],{"class":55},[49,74522,74524],{"class":51,"line":74523},239,[49,74525,74526],{"class":283},"      \u002F\u002F 非空判断\n",[49,74528,74530],{"class":51,"line":74529},240,[49,74531,74532],{"class":283},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[49,74534,74536],{"class":51,"line":74535},241,[49,74537,74538],{"class":283},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[49,74540,74542,74544,74546,74548,74551,74553,74556,74559,74561,74563],{"class":51,"line":74541},242,[49,74543,54569],{"class":59},[49,74545,1750],{"class":55},[49,74547,450],{"class":59},[49,74549,74550],{"class":55},"uname.value ",[49,74552,71446],{"class":59},[49,74554,74555],{"class":59}," !",[49,74557,74558],{"class":55},"age.value ",[49,74560,71446],{"class":59},[49,74562,74555],{"class":59},[49,74564,74565],{"class":55},"salary.value) {\n",[49,74567,74569,74571,74573,74575,74577],{"class":51,"line":74568},243,[49,74570,14842],{"class":59},[49,74572,70029],{"class":2055},[49,74574,228],{"class":55},[49,74576,70034],{"class":328},[49,74578,81],{"class":55},[49,74580,74582],{"class":51,"line":74581},244,[49,74583,52487],{"class":55},[49,74585,74587,74589,74591],{"class":51,"line":74586},245,[49,74588,58096],{"class":55},[49,74590,51973],{"class":2055},[49,74592,74593],{"class":55},"({\n",[49,74595,74597],{"class":51,"line":74596},246,[49,74598,74599],{"class":283},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[49,74601,74603],{"class":51,"line":74602},247,[49,74604,74605],{"class":283},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[49,74607,74609],{"class":51,"line":74608},248,[49,74610,74611],{"class":283},"        \u002F\u002F 对象的序号应为数组长度+1\n",[49,74613,74615],{"class":51,"line":74614},249,[49,74616,74617],{"class":283},"        \u002F\u002F unameId: arr.length + 1,\n",[49,74619,74621],{"class":51,"line":74620},250,[49,74622,2492],{"emptyLinePlaceholder":151},[49,74624,74626],{"class":51,"line":74625},251,[49,74627,74628],{"class":283},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[49,74630,74632],{"class":51,"line":74631},252,[49,74633,74634],{"class":283},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[49,74636,74638],{"class":51,"line":74637},253,[49,74639,74640],{"class":283},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[49,74642,74644],{"class":51,"line":74643},254,[49,74645,74646],{"class":283},"        \u002F\u002F 0当假看\n",[49,74648,74650,74653,74655,74657,74660,74662,74664,74666,74669,74671,74673,74676,74678],{"class":51,"line":74649},255,[49,74651,74652],{"class":55},"        unameId: arr.",[49,74654,52057],{"class":66},[49,74656,73903],{"class":59},[49,74658,74659],{"class":55}," arr[arr.",[49,74661,52057],{"class":66},[49,74663,52360],{"class":59},[49,74665,25209],{"class":66},[49,74667,74668],{"class":55},"].unameId ",[49,74670,700],{"class":59},[49,74672,25209],{"class":66},[49,74674,74675],{"class":59}," :",[49,74677,25209],{"class":66},[49,74679,31555],{"class":55},[49,74681,74683],{"class":51,"line":74682},256,[49,74684,70082],{"class":55},[49,74686,74688],{"class":51,"line":74687},257,[49,74689,70087],{"class":55},[49,74691,74693],{"class":51,"line":74692},258,[49,74694,70097],{"class":55},[49,74696,74698],{"class":51,"line":74697},259,[49,74699,70092],{"class":55},[49,74701,74703],{"class":51,"line":74702},260,[49,74704,74705],{"class":55},"        city: city.value,\n",[49,74707,74709],{"class":51,"line":74708},261,[49,74710,74711],{"class":283},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[49,74713,74715],{"class":51,"line":74714},262,[49,74716,74717],{"class":283},"        \u002F\u002F time: new Date().toDateString()\n",[49,74719,74721,74724,74727],{"class":51,"line":74720},263,[49,74722,74723],{"class":55},"        time: ",[49,74725,74726],{"class":2055},"getTime",[49,74728,2068],{"class":55},[49,74730,74732],{"class":51,"line":74731},264,[49,74733,64904],{"class":55},[49,74735,74737],{"class":51,"line":74736},265,[49,74738,74739],{"class":283},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[49,74741,74743,74745],{"class":51,"line":74742},266,[49,74744,70157],{"class":2055},[49,74746,2068],{"class":55},[49,74748,74750,74752,74754,74756,74758],{"class":51,"line":74749},267,[49,74751,70140],{"class":66},[49,74753,777],{"class":55},[49,74755,70145],{"class":2055},[49,74757,13140],{"class":55},[49,74759,74760],{"class":283},"\u002F\u002F重置表单\n",[49,74762,74764],{"class":51,"line":74763},268,[49,74765,74766],{"class":283},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[49,74768,74770,74773,74775,74777,74780,74782,74784,74786,74788],{"class":51,"line":74769},269,[49,74771,74772],{"class":55},"      localStorage.",[49,74774,71743],{"class":2055},[49,74776,228],{"class":55},[49,74778,74779],{"class":328},"'data'",[49,74781,12525],{"class":55},[49,74783,71753],{"class":66},[49,74785,777],{"class":55},[49,74787,71758],{"class":2055},[49,74789,74790],{"class":55},"(arr))\n",[49,74792,74794],{"class":51,"line":74793},270,[49,74795,33550],{"class":55},[49,74797,74799],{"class":51,"line":74798},271,[49,74800,2492],{"emptyLinePlaceholder":151},[49,74802,74804],{"class":51,"line":74803},272,[49,74805,74806],{"class":283},"    \u002F\u002F 3.删除业务\n",[49,74808,74810],{"class":51,"line":74809},273,[49,74811,74812],{"class":283},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[49,74814,74816,74818,74820,74822,74824,74826,74828,74830,74832],{"class":51,"line":74815},274,[49,74817,70430],{"class":55},[49,74819,57902],{"class":2055},[49,74821,228],{"class":55},[49,74823,57907],{"class":328},[49,74825,12525],{"class":55},[49,74827,54538],{"class":59},[49,74829,1750],{"class":55},[49,74831,298],{"class":126},[49,74833,12532],{"class":55},[49,74835,74837],{"class":51,"line":74836},275,[49,74838,74839],{"class":283},"      \u002F\u002F 判断是否点击的是删除按钮\n",[49,74841,74843,74845,74847,74849,74851],{"class":51,"line":74842},276,[49,74844,54569],{"class":59},[49,74846,67123],{"class":55},[49,74848,54575],{"class":59},[49,74850,68345],{"class":328},[49,74852,12532],{"class":55},[49,74854,74856],{"class":51,"line":74855},277,[49,74857,74858],{"class":283},"        \u002F\u002F alert(1)\n",[49,74860,74862],{"class":51,"line":74861},278,[49,74863,74864],{"class":283},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[49,74866,74868],{"class":51,"line":74867},279,[49,74869,74870],{"class":283},"        \u002F\u002F console.log(e.target)\n",[49,74872,74874],{"class":51,"line":74873},280,[49,74875,74876],{"class":283},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[49,74878,74880],{"class":51,"line":74879},281,[49,74881,2492],{"emptyLinePlaceholder":151},[49,74883,74885],{"class":51,"line":74884},282,[49,74886,74887],{"class":283},"        \u002F\u002F 确认框，确然是否真的要删除\n",[49,74889,74891],{"class":51,"line":74890},283,[49,74892,74893],{"class":283},"        \u002F\u002F confirm()为确认框\n",[49,74895,74897],{"class":51,"line":74896},284,[49,74898,74899],{"class":283},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[49,74901,74903,74905,74907,74910,74912,74915],{"class":51,"line":74902},285,[49,74904,2589],{"class":59},[49,74906,1750],{"class":55},[49,74908,74909],{"class":2055},"confirm",[49,74911,228],{"class":55},[49,74913,74914],{"class":328},"'您确定要删除这条数据吗？'",[49,74916,74917],{"class":55},")) {\n",[49,74919,74921,74924,74926,74928,74930],{"class":51,"line":74920},286,[49,74922,74923],{"class":55},"          arr.",[49,74925,58099],{"class":2055},[49,74927,70483],{"class":55},[49,74929,441],{"class":66},[49,74931,81],{"class":55},[49,74933,74935],{"class":51,"line":74934},287,[49,74936,74937],{"class":283},"          \u002F\u002F 3.4 重新渲染页面\n",[49,74939,74941,74944],{"class":51,"line":74940},288,[49,74942,74943],{"class":2055},"          render",[49,74945,2068],{"class":55},[49,74947,74949],{"class":51,"line":74948},289,[49,74950,74951],{"class":283},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[49,74953,74955,74958,74960,74962,74964,74966,74968,74970,74972],{"class":51,"line":74954},290,[49,74956,74957],{"class":55},"          localStorage.",[49,74959,71743],{"class":2055},[49,74961,228],{"class":55},[49,74963,74779],{"class":328},[49,74965,12525],{"class":55},[49,74967,71753],{"class":66},[49,74969,777],{"class":55},[49,74971,71758],{"class":2055},[49,74973,74790],{"class":55},[49,74975,74977],{"class":51,"line":74976},291,[49,74978,2621],{"class":55},[49,74980,74982],{"class":51,"line":74981},292,[49,74983,52487],{"class":55},[49,74985,74987],{"class":51,"line":74986},293,[49,74988,2492],{"emptyLinePlaceholder":151},[49,74990,74992],{"class":51,"line":74991},294,[49,74993,33550],{"class":55},[49,74995,74997],{"class":51,"line":74996},295,[49,74998,2492],{"emptyLinePlaceholder":151},[49,75000,75002,75004,75006],{"class":51,"line":75001},296,[49,75003,52506],{"class":55},[49,75005,51902],{"class":51389},[49,75007,51396],{"class":55},[49,75009,75011,75013,75015],{"class":51,"line":75010},297,[49,75012,51874],{"class":55},[49,75014,51889],{"class":51389},[49,75016,51396],{"class":55},[49,75018,75020],{"class":51,"line":75019},298,[49,75021,2492],{"emptyLinePlaceholder":151},[49,75023,75025,75027,75029],{"class":51,"line":75024},299,[49,75026,51874],{"class":55},[49,75028,50724],{"class":51389},[49,75030,51396],{"class":55},[166,75032,75034],{"id":75033},"_36-正则表达式","3.6 正则表达式",[14,75036,75037],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75039,75040],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75042,75043],{},"正则表达式的作用：",[1226,75045,75046,75053,75059],{},[181,75047,75048,75049,75052],{},"表单验证（ ",[373,75050,75051],{},"匹配"," ）",[181,75054,75055,75056,75052],{},"过滤敏感词（ ",[373,75057,75058],{},"替换",[181,75060,75061,75062,75052],{},"字符串中提取我们想要的部分（ ",[373,75063,75064],{},"提取",[195,75066,75068],{"id":75067},"_361-语法","3.6.1 语法",[14,75070,75071],{},"正则表达式使用步骤：",[178,75073,75074,75077],{},[181,75075,75076],{},"定义规则",[181,75078,75079],{},"查找是否匹配",[14,75081,75082],{},"正则表达式里边不需要写引号",[14,75084,75085],{},[1554,75086],{"alt":44,"src":75087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75089,75090],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75092,75093],{},"reg.test(str)",[14,75095,75096],{},[1554,75097],{"alt":44,"src":75098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75100,75101],{},[1554,75102],{"alt":44,"src":75103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[195,75105,75107],{"id":75106},"_362-元字符","3.6.2 元字符",[178,75109,75110,75113,75116,75119,75126],{},[181,75111,75112],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[181,75114,75115],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[181,75117,75118],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[181,75120,75121,75122],{},"正则验证工具：",[56,75123,75124],{"href":75124,"rel":75125},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23955],[181,75127,75128],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22088,75130,75132],{"id":75131},"_3621-边界符","3.6.2.1 边界符",[14,75134,75135],{},[1554,75136],{"alt":44,"src":75137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75139,75140],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75142,75143],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75145,75146],{},"只匹配一次",[14,75148,75149],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22088,75151,75153],{"id":75152},"_3622-量词","3.6.2.2 量词",[14,75155,75156],{},[1554,75157],{"alt":44,"src":75158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75160,75161],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22088,75163,75165],{"id":75164},"_3623-元字符","3.6.2.3 元字符",[14,75167,75168],{},[1554,75169],{"alt":44,"src":75170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75172,75173],{},"匹配的是a或b或c []只选一个",[14,75175,75176],{},[1554,75177],{"alt":44,"src":75178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75180,75181],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75183,75184],{},[1554,75185],{"alt":44,"src":75186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75188,75189],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75191,75192],{},[1554,75193],{"alt":44,"src":75194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[39,75196,75198],{"className":50722,"code":75197,"language":50724,"meta":44,"style":44},"\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",[46,75199,75200,75210,75224,75228,75236,75250,75270,75282,75290,75294,75302,75310,75315,75346,75373,75401,75405,75410,75438,75469,75474,75479,75510,75542,75574,75578,75583,75614,75644,75674,75678,75683,75714,75745,75775,75805,75809,75814,75847,75851,75856,75887,75918,75922,75927,75958,75988,76019,76023,76028,76060,76091,76122,76149,76180,76212,76245,76276,76307,76339,76370,76378,76386,76390],{"__ignoreMap":44},[49,75201,75202,75204,75206,75208],{"class":51,"line":52},[49,75203,51386],{"class":55},[49,75205,51390],{"class":51389},[49,75207,51393],{"class":2055},[49,75209,51396],{"class":55},[49,75211,75212,75214,75216,75218,75220,75222],{"class":51,"line":84},[49,75213,1129],{"class":55},[49,75215,50724],{"class":51389},[49,75217,51405],{"class":2055},[49,75219,60],{"class":55},[49,75221,51410],{"class":328},[49,75223,51396],{"class":55},[49,75225,75226],{"class":51,"line":109},[49,75227,2492],{"emptyLinePlaceholder":151},[49,75229,75230,75232,75234],{"class":51,"line":120},[49,75231,1129],{"class":55},[49,75233,51423],{"class":51389},[49,75235,51396],{"class":55},[49,75237,75238,75240,75242,75244,75246,75248],{"class":51,"line":135},[49,75239,52233],{"class":55},[49,75241,51433],{"class":51389},[49,75243,51436],{"class":2055},[49,75245,60],{"class":55},[49,75247,51441],{"class":328},[49,75249,51396],{"class":55},[49,75251,75252,75254,75256,75258,75260,75262,75264,75266,75268],{"class":51,"line":1306},[49,75253,52233],{"class":55},[49,75255,51433],{"class":51389},[49,75257,15010],{"class":2055},[49,75259,60],{"class":55},[49,75261,51480],{"class":328},[49,75263,51460],{"class":2055},[49,75265,60],{"class":55},[49,75267,51487],{"class":328},[49,75269,51396],{"class":55},[49,75271,75272,75274,75276,75278,75280],{"class":51,"line":1312},[49,75273,52233],{"class":55},[49,75275,51496],{"class":51389},[49,75277,51499],{"class":55},[49,75279,51496],{"class":51389},[49,75281,51396],{"class":55},[49,75283,75284,75286,75288],{"class":51,"line":1403},[49,75285,51874],{"class":55},[49,75287,51423],{"class":51389},[49,75289,51396],{"class":55},[49,75291,75292],{"class":51,"line":1409},[49,75293,2492],{"emptyLinePlaceholder":151},[49,75295,75296,75298,75300],{"class":51,"line":1421},[49,75297,1129],{"class":55},[49,75299,51889],{"class":51389},[49,75301,51396],{"class":55},[49,75303,75304,75306,75308],{"class":51,"line":1704},[49,75305,52233],{"class":55},[49,75307,51902],{"class":51389},[49,75309,51396],{"class":55},[49,75311,75312],{"class":51,"line":1709},[49,75313,75314],{"class":283},"    \u002F\u002F 元字符中\n",[49,75316,75317,75319,75321,75323,75325,75328,75330,75332,75335,75337,75340,75343],{"class":51,"line":1715},[49,75318,73842],{"class":55},[49,75320,58336],{"class":2055},[49,75322,228],{"class":55},[49,75324,803],{"class":328},[49,75326,75327],{"class":48066},"哈",[49,75329,803],{"class":328},[49,75331,777],{"class":55},[49,75333,75334],{"class":2055},"test",[49,75336,228],{"class":55},[49,75338,75339],{"class":328},"'哈'",[49,75341,75342],{"class":55},"))  ",[49,75344,75345],{"class":283},"\u002F\u002Ftrue\n",[49,75347,75348,75350,75352,75354,75356,75358,75360,75362,75364,75366,75369,75371],{"class":51,"line":1720},[49,75349,73842],{"class":55},[49,75351,58336],{"class":2055},[49,75353,228],{"class":55},[49,75355,803],{"class":328},[49,75357,75327],{"class":48066},[49,75359,803],{"class":328},[49,75361,777],{"class":55},[49,75363,75334],{"class":2055},[49,75365,228],{"class":55},[49,75367,75368],{"class":328},"'哈哈'",[49,75370,75342],{"class":55},[49,75372,75345],{"class":283},[49,75374,75375,75377,75379,75381,75383,75385,75387,75389,75391,75393,75396,75399],{"class":51,"line":1734},[49,75376,73842],{"class":55},[49,75378,58336],{"class":2055},[49,75380,228],{"class":55},[49,75382,803],{"class":328},[49,75384,75327],{"class":48066},[49,75386,803],{"class":328},[49,75388,777],{"class":55},[49,75390,75334],{"class":2055},[49,75392,228],{"class":55},[49,75394,75395],{"class":328},"'二哈'",[49,75397,75398],{"class":55},"))   ",[49,75400,75345],{"class":283},[49,75402,75403],{"class":51,"line":1739},[49,75404,2492],{"emptyLinePlaceholder":151},[49,75406,75407],{"class":51,"line":1745},[49,75408,75409],{"class":283},"    \u002F\u002F 1.边界符\n",[49,75411,75412,75414,75416,75418,75420,75422,75424,75426,75428,75430,75432,75434,75436],{"class":51,"line":1766},[49,75413,73842],{"class":55},[49,75415,58336],{"class":2055},[49,75417,228],{"class":55},[49,75419,803],{"class":328},[49,75421,1185],{"class":59},[49,75423,75327],{"class":48066},[49,75425,803],{"class":328},[49,75427,777],{"class":55},[49,75429,75334],{"class":2055},[49,75431,228],{"class":55},[49,75433,75339],{"class":328},[49,75435,75342],{"class":55},[49,75437,75345],{"class":283},[49,75439,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458,75460,75462,75464,75466],{"class":51,"line":1771},[49,75441,73842],{"class":55},[49,75443,58336],{"class":2055},[49,75445,228],{"class":55},[49,75447,803],{"class":328},[49,75449,1185],{"class":59},[49,75451,75327],{"class":48066},[49,75453,524],{"class":59},[49,75455,803],{"class":328},[49,75457,777],{"class":55},[49,75459,75334],{"class":2055},[49,75461,228],{"class":55},[49,75463,75368],{"class":328},[49,75465,75342],{"class":55},[49,75467,75468],{"class":283},"\u002F\u002Ffalse\n",[49,75470,75471],{"class":51,"line":1785},[49,75472,75473],{"class":283},"    \u002F\u002F 2.量词\n",[49,75475,75476],{"class":51,"line":1790},[49,75477,75478],{"class":283},"    \u002F\u002F 量词 * 类似于 >= 0\n",[49,75480,75481,75483,75485,75487,75489,75491,75493,75496,75498,75500,75502,75504,75506,75508],{"class":51,"line":1819},[49,75482,73842],{"class":55},[49,75484,58336],{"class":2055},[49,75486,228],{"class":55},[49,75488,803],{"class":328},[49,75490,1185],{"class":59},[49,75492,75327],{"class":48066},[49,75494,75495],{"class":59},"*$",[49,75497,803],{"class":328},[49,75499,777],{"class":55},[49,75501,75334],{"class":2055},[49,75503,228],{"class":55},[49,75505,75368],{"class":328},[49,75507,75342],{"class":55},[49,75509,75345],{"class":283},[49,75511,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534,75537,75539],{"class":51,"line":1824},[49,75513,73842],{"class":55},[49,75515,58336],{"class":2055},[49,75517,228],{"class":55},[49,75519,803],{"class":328},[49,75521,1185],{"class":59},[49,75523,75327],{"class":48066},[49,75525,75495],{"class":59},[49,75527,803],{"class":328},[49,75529,777],{"class":55},[49,75531,75334],{"class":2055},[49,75533,228],{"class":55},[49,75535,75536],{"class":328},"'二哈好傻'",[49,75538,75342],{"class":55},[49,75540,75541],{"class":283},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[49,75543,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75569,75571],{"class":51,"line":1841},[49,75545,73842],{"class":55},[49,75547,58336],{"class":2055},[49,75549,228],{"class":55},[49,75551,803],{"class":328},[49,75553,1185],{"class":59},[49,75555,75327],{"class":48066},[49,75557,75495],{"class":59},[49,75559,803],{"class":328},[49,75561,777],{"class":55},[49,75563,75334],{"class":2055},[49,75565,228],{"class":55},[49,75567,75568],{"class":328},"'哈好哈'",[49,75570,75398],{"class":55},[49,75572,75573],{"class":283},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[49,75575,75576],{"class":51,"line":1846},[49,75577,2492],{"emptyLinePlaceholder":151},[49,75579,75580],{"class":51,"line":1851},[49,75581,75582],{"class":283},"    \u002F\u002F +类似于>=1\n",[49,75584,75585,75587,75589,75591,75593,75595,75597,75600,75602,75604,75606,75608,75610,75612],{"class":51,"line":1856},[49,75586,73842],{"class":55},[49,75588,58336],{"class":2055},[49,75590,228],{"class":55},[49,75592,803],{"class":328},[49,75594,1185],{"class":59},[49,75596,75327],{"class":48066},[49,75598,75599],{"class":59},"+$",[49,75601,803],{"class":328},[49,75603,777],{"class":55},[49,75605,75334],{"class":2055},[49,75607,228],{"class":55},[49,75609,75368],{"class":328},[49,75611,75342],{"class":55},[49,75613,75345],{"class":283},[49,75615,75616,75618,75620,75622,75624,75626,75628,75630,75632,75634,75636,75638,75640,75642],{"class":51,"line":1870},[49,75617,73842],{"class":55},[49,75619,58336],{"class":2055},[49,75621,228],{"class":55},[49,75623,803],{"class":328},[49,75625,1185],{"class":59},[49,75627,75327],{"class":48066},[49,75629,75599],{"class":59},[49,75631,803],{"class":328},[49,75633,777],{"class":55},[49,75635,75334],{"class":2055},[49,75637,228],{"class":55},[49,75639,75536],{"class":328},[49,75641,75342],{"class":55},[49,75643,75541],{"class":283},[49,75645,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672],{"class":51,"line":1875},[49,75647,73842],{"class":55},[49,75649,58336],{"class":2055},[49,75651,228],{"class":55},[49,75653,803],{"class":328},[49,75655,1185],{"class":59},[49,75657,75327],{"class":48066},[49,75659,75599],{"class":59},[49,75661,803],{"class":328},[49,75663,777],{"class":55},[49,75665,75334],{"class":2055},[49,75667,228],{"class":55},[49,75669,75568],{"class":328},[49,75671,75398],{"class":55},[49,75673,75468],{"class":283},[49,75675,75676],{"class":51,"line":2669},[49,75677,2492],{"emptyLinePlaceholder":151},[49,75679,75680],{"class":51,"line":2683},[49,75681,75682],{"class":283},"    \u002F\u002F ?类似于0次或一次\n",[49,75684,75685,75687,75689,75691,75693,75695,75698,75700,75702,75704,75706,75708,75710,75712],{"class":51,"line":2691},[49,75686,73842],{"class":55},[49,75688,58336],{"class":2055},[49,75690,228],{"class":55},[49,75692,803],{"class":328},[49,75694,1185],{"class":59},[49,75696,75697],{"class":48066},"哈？",[49,75699,524],{"class":59},[49,75701,803],{"class":328},[49,75703,777],{"class":55},[49,75705,75334],{"class":2055},[49,75707,228],{"class":55},[49,75709,74317],{"class":328},[49,75711,75398],{"class":55},[49,75713,75345],{"class":283},[49,75715,75716,75718,75720,75722,75724,75726,75728,75731,75733,75735,75737,75739,75741,75743],{"class":51,"line":2696},[49,75717,73842],{"class":55},[49,75719,58336],{"class":2055},[49,75721,228],{"class":55},[49,75723,803],{"class":328},[49,75725,1185],{"class":59},[49,75727,75327],{"class":48066},[49,75729,75730],{"class":59},"?$",[49,75732,803],{"class":328},[49,75734,777],{"class":55},[49,75736,75334],{"class":2055},[49,75738,228],{"class":55},[49,75740,75368],{"class":328},[49,75742,75342],{"class":55},[49,75744,75468],{"class":283},[49,75746,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765,75767,75769,75771,75773],{"class":51,"line":2702},[49,75748,73842],{"class":55},[49,75750,58336],{"class":2055},[49,75752,228],{"class":55},[49,75754,803],{"class":328},[49,75756,1185],{"class":59},[49,75758,75327],{"class":48066},[49,75760,75730],{"class":59},[49,75762,803],{"class":328},[49,75764,777],{"class":55},[49,75766,75334],{"class":2055},[49,75768,228],{"class":55},[49,75770,75536],{"class":328},[49,75772,75342],{"class":55},[49,75774,75541],{"class":283},[49,75776,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803],{"class":51,"line":2708},[49,75778,73842],{"class":55},[49,75780,58336],{"class":2055},[49,75782,228],{"class":55},[49,75784,803],{"class":328},[49,75786,1185],{"class":59},[49,75788,75327],{"class":48066},[49,75790,75730],{"class":59},[49,75792,803],{"class":328},[49,75794,777],{"class":55},[49,75796,75334],{"class":2055},[49,75798,228],{"class":55},[49,75800,75568],{"class":328},[49,75802,75342],{"class":55},[49,75804,75468],{"class":283},[49,75806,75807],{"class":51,"line":2713},[49,75808,2492],{"emptyLinePlaceholder":151},[49,75810,75811],{"class":51,"line":8038},[49,75812,75813],{"class":283},"    \u002F\u002F {n}写几，就必须出现几次\n",[49,75815,75816,75818,75820,75822,75824,75826,75828,75831,75833,75835,75837,75839,75842,75845],{"class":51,"line":8062},[49,75817,73842],{"class":55},[49,75819,58336],{"class":2055},[49,75821,228],{"class":55},[49,75823,803],{"class":328},[49,75825,1185],{"class":59},[49,75827,75327],{"class":48066},[49,75829,75830],{"class":59},"{4}$",[49,75832,803],{"class":328},[49,75834,777],{"class":55},[49,75836,75334],{"class":2055},[49,75838,228],{"class":55},[49,75840,75841],{"class":328},"'哈哈哈哈'",[49,75843,75844],{"class":55},")) ",[49,75846,75345],{"class":283},[49,75848,75849],{"class":51,"line":8067},[49,75850,2492],{"emptyLinePlaceholder":151},[49,75852,75853],{"class":51,"line":8073},[49,75854,75855],{"class":283},"    \u002F\u002F {n,}大于等于n次\n",[49,75857,75858,75860,75862,75864,75866,75868,75870,75873,75875,75877,75879,75881,75883,75885],{"class":51,"line":8100},[49,75859,73842],{"class":55},[49,75861,58336],{"class":2055},[49,75863,228],{"class":55},[49,75865,803],{"class":328},[49,75867,1185],{"class":59},[49,75869,75327],{"class":48066},[49,75871,75872],{"class":59},"{4,}$",[49,75874,803],{"class":328},[49,75876,777],{"class":55},[49,75878,75334],{"class":2055},[49,75880,228],{"class":55},[49,75882,75841],{"class":328},[49,75884,75844],{"class":55},[49,75886,75345],{"class":283},[49,75888,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75911,75914,75916],{"class":51,"line":8105},[49,75890,73842],{"class":55},[49,75892,58336],{"class":2055},[49,75894,228],{"class":55},[49,75896,803],{"class":328},[49,75898,1185],{"class":59},[49,75900,75327],{"class":48066},[49,75902,75872],{"class":59},[49,75904,803],{"class":328},[49,75906,777],{"class":55},[49,75908,75334],{"class":2055},[49,75910,228],{"class":55},[49,75912,75913],{"class":328},"'哈哈哈哈哈'",[49,75915,75844],{"class":55},[49,75917,75345],{"class":283},[49,75919,75920],{"class":51,"line":8111},[49,75921,2492],{"emptyLinePlaceholder":151},[49,75923,75924],{"class":51,"line":8123},[49,75925,75926],{"class":283},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[49,75928,75929,75931,75933,75935,75937,75939,75941,75944,75946,75948,75950,75952,75954,75956],{"class":51,"line":8135},[49,75930,73842],{"class":55},[49,75932,58336],{"class":2055},[49,75934,228],{"class":55},[49,75936,803],{"class":328},[49,75938,1185],{"class":59},[49,75940,75327],{"class":48066},[49,75942,75943],{"class":59},"{4,6}$",[49,75945,803],{"class":328},[49,75947,777],{"class":55},[49,75949,75334],{"class":2055},[49,75951,228],{"class":55},[49,75953,75841],{"class":328},[49,75955,75844],{"class":55},[49,75957,75345],{"class":283},[49,75959,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980,75982,75984,75986],{"class":51,"line":8147},[49,75961,73842],{"class":55},[49,75963,58336],{"class":2055},[49,75965,228],{"class":55},[49,75967,803],{"class":328},[49,75969,1185],{"class":59},[49,75971,75327],{"class":48066},[49,75973,75943],{"class":59},[49,75975,803],{"class":328},[49,75977,777],{"class":55},[49,75979,75334],{"class":2055},[49,75981,228],{"class":55},[49,75983,75913],{"class":328},[49,75985,75844],{"class":55},[49,75987,75345],{"class":283},[49,75989,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76015,76017],{"class":51,"line":9806},[49,75991,73842],{"class":55},[49,75993,58336],{"class":2055},[49,75995,228],{"class":55},[49,75997,803],{"class":328},[49,75999,1185],{"class":59},[49,76001,75327],{"class":48066},[49,76003,75943],{"class":59},[49,76005,803],{"class":328},[49,76007,777],{"class":55},[49,76009,75334],{"class":2055},[49,76011,228],{"class":55},[49,76013,76014],{"class":328},"'哈哈哈哈哈哈哈'",[49,76016,75844],{"class":55},[49,76018,75468],{"class":283},[49,76020,76021],{"class":51,"line":9831},[49,76022,2492],{"emptyLinePlaceholder":151},[49,76024,76025],{"class":51,"line":9854},[49,76026,76027],{"class":283},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[49,76029,76030,76032,76034,76036,76038,76040,76043,76045,76047,76049,76051,76053,76056,76058],{"class":51,"line":9878},[49,76031,73842],{"class":55},[49,76033,58336],{"class":2055},[49,76035,228],{"class":55},[49,76037,803],{"class":328},[49,76039,1185],{"class":59},[49,76041,76042],{"class":66},"[abc]",[49,76044,524],{"class":59},[49,76046,803],{"class":328},[49,76048,777],{"class":55},[49,76050,75334],{"class":2055},[49,76052,228],{"class":55},[49,76054,76055],{"class":328},"'a'",[49,76057,75342],{"class":55},[49,76059,75345],{"class":283},[49,76061,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084,76087,76089],{"class":51,"line":9883},[49,76063,73842],{"class":55},[49,76065,58336],{"class":2055},[49,76067,228],{"class":55},[49,76069,803],{"class":328},[49,76071,1185],{"class":59},[49,76073,76042],{"class":66},[49,76075,524],{"class":59},[49,76077,803],{"class":328},[49,76079,777],{"class":55},[49,76081,75334],{"class":2055},[49,76083,228],{"class":55},[49,76085,76086],{"class":328},"'b'",[49,76088,75342],{"class":55},[49,76090,75345],{"class":283},[49,76092,76093,76095,76097,76099,76101,76103,76105,76107,76109,76111,76113,76115,76118,76120],{"class":51,"line":9888},[49,76094,73842],{"class":55},[49,76096,58336],{"class":2055},[49,76098,228],{"class":55},[49,76100,803],{"class":328},[49,76102,1185],{"class":59},[49,76104,76042],{"class":66},[49,76106,524],{"class":59},[49,76108,803],{"class":328},[49,76110,777],{"class":55},[49,76112,75334],{"class":2055},[49,76114,228],{"class":55},[49,76116,76117],{"class":328},"'c'",[49,76119,75342],{"class":55},[49,76121,75345],{"class":283},[49,76123,76124,76126,76128,76130,76132,76134,76136,76138,76140,76142,76145,76147],{"class":51,"line":9893},[49,76125,73842],{"class":55},[49,76127,58336],{"class":2055},[49,76129,228],{"class":55},[49,76131,803],{"class":328},[49,76133,76042],{"class":66},[49,76135,803],{"class":328},[49,76137,777],{"class":55},[49,76139,75334],{"class":2055},[49,76141,228],{"class":55},[49,76143,76144],{"class":328},"'ab'",[49,76146,75342],{"class":55},[49,76148,75345],{"class":283},[49,76150,76151,76153,76155,76157,76159,76161,76163,76165,76167,76169,76171,76173,76175,76177],{"class":51,"line":9902},[49,76152,73842],{"class":55},[49,76154,58336],{"class":2055},[49,76156,228],{"class":55},[49,76158,803],{"class":328},[49,76160,1185],{"class":59},[49,76162,76042],{"class":66},[49,76164,524],{"class":59},[49,76166,803],{"class":328},[49,76168,777],{"class":55},[49,76170,75334],{"class":2055},[49,76172,228],{"class":55},[49,76174,76144],{"class":328},[49,76176,75342],{"class":55},[49,76178,76179],{"class":283},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[49,76181,76182,76184,76186,76188,76190,76192,76194,76197,76199,76201,76203,76205,76207,76209],{"class":51,"line":9907},[49,76183,73842],{"class":55},[49,76185,58336],{"class":2055},[49,76187,228],{"class":55},[49,76189,803],{"class":328},[49,76191,1185],{"class":59},[49,76193,76042],{"class":66},[49,76195,76196],{"class":59},"{2}$",[49,76198,803],{"class":328},[49,76200,777],{"class":55},[49,76202,75334],{"class":2055},[49,76204,228],{"class":55},[49,76206,76144],{"class":328},[49,76208,75342],{"class":55},[49,76210,76211],{"class":283},"\u002F\u002Ftrue   可以选两个\n",[49,76213,76214,76216,76218,76220,76222,76224,76227,76229,76231,76233,76235,76237,76240,76242],{"class":51,"line":9913},[49,76215,73842],{"class":55},[49,76217,58336],{"class":2055},[49,76219,228],{"class":55},[49,76221,803],{"class":328},[49,76223,1185],{"class":59},[49,76225,76226],{"class":66},"[a-z]",[49,76228,524],{"class":59},[49,76230,803],{"class":328},[49,76232,777],{"class":55},[49,76234,75334],{"class":2055},[49,76236,228],{"class":55},[49,76238,76239],{"class":328},"'p'",[49,76241,75398],{"class":55},[49,76243,76244],{"class":283},"\u002F\u002Ftrue   依然只能选一个\n",[49,76246,76247,76249,76251,76253,76255,76257,76260,76262,76264,76266,76268,76270,76272,76274],{"class":51,"line":9934},[49,76248,73842],{"class":55},[49,76250,58336],{"class":2055},[49,76252,228],{"class":55},[49,76254,803],{"class":328},[49,76256,1185],{"class":59},[49,76258,76259],{"class":66},"[A-Z]",[49,76261,524],{"class":59},[49,76263,803],{"class":328},[49,76265,777],{"class":55},[49,76267,75334],{"class":2055},[49,76269,228],{"class":55},[49,76271,76239],{"class":328},[49,76273,75398],{"class":55},[49,76275,75468],{"class":283},[49,76277,76278,76280,76282,76284,76286,76288,76290,76292,76294,76296,76298,76300,76303,76305],{"class":51,"line":9940},[49,76279,73842],{"class":55},[49,76281,58336],{"class":2055},[49,76283,228],{"class":55},[49,76285,803],{"class":328},[49,76287,1185],{"class":59},[49,76289,76259],{"class":66},[49,76291,524],{"class":59},[49,76293,803],{"class":328},[49,76295,777],{"class":55},[49,76297,75334],{"class":2055},[49,76299,228],{"class":55},[49,76301,76302],{"class":328},"'P'",[49,76304,75398],{"class":55},[49,76306,75345],{"class":283},[49,76308,76309,76311,76313,76315,76317,76319,76322,76324,76326,76328,76330,76332,76335,76337],{"class":51,"line":9954},[49,76310,73842],{"class":55},[49,76312,58336],{"class":2055},[49,76314,228],{"class":55},[49,76316,803],{"class":328},[49,76318,1185],{"class":59},[49,76320,76321],{"class":66},"[0-9]",[49,76323,524],{"class":59},[49,76325,803],{"class":328},[49,76327,777],{"class":55},[49,76329,75334],{"class":2055},[49,76331,228],{"class":55},[49,76333,76334],{"class":328},"'0'",[49,76336,75398],{"class":55},[49,76338,75345],{"class":283},[49,76340,76341,76343,76345,76347,76349,76351,76354,76356,76358,76360,76362,76364,76366,76368],{"class":51,"line":9960},[49,76342,73842],{"class":55},[49,76344,58336],{"class":2055},[49,76346,228],{"class":55},[49,76348,803],{"class":328},[49,76350,1185],{"class":59},[49,76352,76353],{"class":66},"[a-zA-Z0-9]",[49,76355,524],{"class":59},[49,76357,803],{"class":328},[49,76359,777],{"class":55},[49,76361,75334],{"class":2055},[49,76363,228],{"class":55},[49,76365,76239],{"class":328},[49,76367,75342],{"class":55},[49,76369,75345],{"class":283},[49,76371,76372,76374,76376],{"class":51,"line":9987},[49,76373,52506],{"class":55},[49,76375,51902],{"class":51389},[49,76377,51396],{"class":55},[49,76379,76380,76382,76384],{"class":51,"line":9996},[49,76381,51874],{"class":55},[49,76383,51889],{"class":51389},[49,76385,51396],{"class":55},[49,76387,76388],{"class":51,"line":10002},[49,76389,2492],{"emptyLinePlaceholder":151},[49,76391,76392,76394,76396],{"class":51,"line":10010},[49,76393,51874],{"class":55},[49,76395,50724],{"class":51389},[49,76397,51396],{"class":55},[22088,76399,76401],{"id":76400},"_3624-修饰符","3.6.2.4 修饰符",[14,76403,76404],{},[1554,76405],{"alt":44,"src":76406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76408,76409],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76411,76412],{},[1554,76413],{"alt":44,"src":76414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[39,76416,76418],{"className":50722,"code":76417,"language":50724,"meta":44,"style":44},"\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",[46,76419,76420,76430,76444,76452,76466,76486,76498,76506,76514,76522,76554,76585,76590,76622,76633,76666,76675,76683,76691],{"__ignoreMap":44},[49,76421,76422,76424,76426,76428],{"class":51,"line":52},[49,76423,51386],{"class":55},[49,76425,51390],{"class":51389},[49,76427,51393],{"class":2055},[49,76429,51396],{"class":55},[49,76431,76432,76434,76436,76438,76440,76442],{"class":51,"line":84},[49,76433,1129],{"class":55},[49,76435,50724],{"class":51389},[49,76437,51405],{"class":2055},[49,76439,60],{"class":55},[49,76441,51410],{"class":328},[49,76443,51396],{"class":55},[49,76445,76446,76448,76450],{"class":51,"line":109},[49,76447,1129],{"class":55},[49,76449,51423],{"class":51389},[49,76451,51396],{"class":55},[49,76453,76454,76456,76458,76460,76462,76464],{"class":51,"line":120},[49,76455,52233],{"class":55},[49,76457,51433],{"class":51389},[49,76459,51436],{"class":2055},[49,76461,60],{"class":55},[49,76463,51441],{"class":328},[49,76465,51396],{"class":55},[49,76467,76468,76470,76472,76474,76476,76478,76480,76482,76484],{"class":51,"line":135},[49,76469,52233],{"class":55},[49,76471,51433],{"class":51389},[49,76473,15010],{"class":2055},[49,76475,60],{"class":55},[49,76477,51480],{"class":328},[49,76479,51460],{"class":2055},[49,76481,60],{"class":55},[49,76483,51487],{"class":328},[49,76485,51396],{"class":55},[49,76487,76488,76490,76492,76494,76496],{"class":51,"line":1306},[49,76489,52233],{"class":55},[49,76491,51496],{"class":51389},[49,76493,51499],{"class":55},[49,76495,51496],{"class":51389},[49,76497,51396],{"class":55},[49,76499,76500,76502,76504],{"class":51,"line":1312},[49,76501,51874],{"class":55},[49,76503,51423],{"class":51389},[49,76505,51396],{"class":55},[49,76507,76508,76510,76512],{"class":51,"line":1403},[49,76509,1129],{"class":55},[49,76511,51889],{"class":51389},[49,76513,51396],{"class":55},[49,76515,76516,76518,76520],{"class":51,"line":1409},[49,76517,52233],{"class":55},[49,76519,51902],{"class":51389},[49,76521,51396],{"class":55},[49,76523,76524,76526,76528,76530,76532,76534,76537,76539,76541,76543,76545,76547,76550,76552],{"class":51,"line":1421},[49,76525,73842],{"class":55},[49,76527,58336],{"class":2055},[49,76529,228],{"class":55},[49,76531,803],{"class":328},[49,76533,1185],{"class":59},[49,76535,76536],{"class":48066},"java",[49,76538,524],{"class":59},[49,76540,803],{"class":328},[49,76542,777],{"class":55},[49,76544,75334],{"class":2055},[49,76546,228],{"class":55},[49,76548,76549],{"class":328},"'java'",[49,76551,75844],{"class":55},[49,76553,75345],{"class":283},[49,76555,76556,76558,76560,76562,76564,76566,76568,76570,76572,76574,76576,76578,76581,76583],{"class":51,"line":1704},[49,76557,73842],{"class":55},[49,76559,58336],{"class":2055},[49,76561,228],{"class":55},[49,76563,803],{"class":328},[49,76565,1185],{"class":59},[49,76567,76536],{"class":48066},[49,76569,524],{"class":59},[49,76571,803],{"class":328},[49,76573,777],{"class":55},[49,76575,75334],{"class":2055},[49,76577,228],{"class":55},[49,76579,76580],{"class":328},"'Java'",[49,76582,75844],{"class":55},[49,76584,75468],{"class":283},[49,76586,76587],{"class":51,"line":1709},[49,76588,76589],{"class":283},"    \u002F\u002F 不区分大小写、\n",[49,76591,76592,76594,76596,76598,76600,76602,76604,76606,76608,76610,76612,76614,76616,76618,76620],{"class":51,"line":1715},[49,76593,73842],{"class":55},[49,76595,58336],{"class":2055},[49,76597,228],{"class":55},[49,76599,803],{"class":328},[49,76601,1185],{"class":59},[49,76603,76536],{"class":48066},[49,76605,524],{"class":59},[49,76607,803],{"class":328},[49,76609,661],{"class":59},[49,76611,777],{"class":55},[49,76613,75334],{"class":2055},[49,76615,228],{"class":55},[49,76617,76580],{"class":328},[49,76619,75844],{"class":55},[49,76621,75345],{"class":283},[49,76623,76624,76626,76628,76630],{"class":51,"line":1720},[49,76625,11311],{"class":59},[49,76627,74008],{"class":66},[49,76629,13654],{"class":59},[49,76631,76632],{"class":328}," 'java是一门编程语言，学完java工资很高'\n",[49,76634,76635,76637,76640,76642,76645,76648,76650,76652,76654,76656,76659,76661,76664],{"class":51,"line":1734},[49,76636,11311],{"class":59},[49,76638,76639],{"class":66}," result",[49,76641,13654],{"class":59},[49,76643,76644],{"class":55}," str.",[49,76646,76647],{"class":2055},"replace",[49,76649,228],{"class":55},[49,76651,803],{"class":328},[49,76653,76536],{"class":48066},[49,76655,803],{"class":328},[49,76657,76658],{"class":59},"ig",[49,76660,12525],{"class":55},[49,76662,76663],{"class":328},"'前端'",[49,76665,81],{"class":55},[49,76667,76668,76670,76672],{"class":51,"line":1739},[49,76669,73842],{"class":55},[49,76671,58336],{"class":2055},[49,76673,76674],{"class":55},"(result)\n",[49,76676,76677,76679,76681],{"class":51,"line":1745},[49,76678,52506],{"class":55},[49,76680,51902],{"class":51389},[49,76682,51396],{"class":55},[49,76684,76685,76687,76689],{"class":51,"line":1766},[49,76686,51874],{"class":55},[49,76688,51889],{"class":51389},[49,76690,51396],{"class":55},[49,76692,76693,76695,76697],{"class":51,"line":1771},[49,76694,51874],{"class":55},[49,76696,50724],{"class":51389},[49,76698,51396],{"class":55},[143,76700,76701],{},"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":44,"searchDepth":84,"depth":84,"links":76703},[76704,76714,76726,76743,76750,76758],{"id":53449,"depth":84,"text":53450,"children":76705},[76706,76707,76708,76709,76710,76711,76712,76713],{"id":53453,"depth":109,"text":53454},{"id":53486,"depth":109,"text":53487},{"id":53525,"depth":109,"text":53526},{"id":53683,"depth":109,"text":53684},{"id":53731,"depth":109,"text":53732},{"id":53868,"depth":109,"text":53869},{"id":54190,"depth":109,"text":54191},{"id":57178,"depth":109,"text":57179},{"id":57206,"depth":84,"text":57207,"children":76715},[76716,76717,76718,76719,76720,76721,76722,76723,76724,76725],{"id":57210,"depth":109,"text":57211},{"id":57233,"depth":109,"text":57234},{"id":58148,"depth":109,"text":58149},{"id":58838,"depth":109,"text":58839},{"id":59120,"depth":109,"text":59121},{"id":63281,"depth":109,"text":63282},{"id":63451,"depth":109,"text":63452},{"id":63579,"depth":109,"text":63580},{"id":63604,"depth":109,"text":63605},{"id":64993,"depth":109,"text":64994},{"id":66146,"depth":84,"text":66147,"children":76727},[76728,76729,76730,76731,76732,76733,76734,76735,76736,76737,76738,76739,76740,76741,76742],{"id":66150,"depth":109,"text":66151},{"id":66804,"depth":109,"text":66805},{"id":68499,"depth":109,"text":68500},{"id":68540,"depth":109,"text":68541},{"id":68582,"depth":109,"text":68583},{"id":68596,"depth":109,"text":68597},{"id":68645,"depth":109,"text":68646},{"id":68657,"depth":109,"text":68658},{"id":68672,"depth":109,"text":68673},{"id":68708,"depth":109,"text":68709},{"id":68789,"depth":109,"text":68790},{"id":68917,"depth":109,"text":68918},{"id":68929,"depth":109,"text":68930},{"id":68948,"depth":109,"text":68949},{"id":71059,"depth":109,"text":71060},{"id":71078,"depth":84,"text":71079,"children":76744},[76745,76746,76747,76748,76749],{"id":71099,"depth":109,"text":71100},{"id":71119,"depth":109,"text":71120},{"id":71168,"depth":109,"text":71169},{"id":71293,"depth":109,"text":71294},{"id":71474,"depth":109,"text":71475},{"id":71492,"depth":84,"text":71493,"children":76751},[76752,76753,76754,76755,76756,76757],{"id":71507,"depth":109,"text":71508},{"id":71566,"depth":109,"text":71567},{"id":71590,"depth":109,"text":71591},{"id":71910,"depth":109,"text":71911},{"id":71942,"depth":109,"text":71943},{"id":71965,"depth":109,"text":71966},{"id":75033,"depth":84,"text":75034,"children":76759},[76760,76761],{"id":75067,"depth":109,"text":75068},{"id":75106,"depth":109,"text":75107},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53421,"description":148},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76768,"title":76769,"body":76770,"description":148,"extension":149,"meta":92907,"navigation":151,"path":92908,"seo":92909,"stem":92910,"__hash__":92911},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76771,"toc":92843},[76772,76775,76778,76782,76786,76791,76796,76807,76811,76816,76819,76823,76826,76831,76835,76839,76842,76847,76850,76854,76857,76865,76868,76872,76877,76882,76885,76889,76894,76899,76902,76906,76911,76914,76919,76922,76927,76930,76935,76940,76943,76946,76950,76955,76960,76963,76967,76971,76974,76977,76980,76984,76988,76993,76998,77001,77005,77010,77015,77018,77021,77024,77027,77030,77033,77036,77039,77042,77047,77051,77056,77061,77064,77067,77070,77073,77076,77079,77082,77085,77089,77093,77096,77099,77102,77107,77109,77112,77115,77118,77121,77124,77127,77130,77133,77136,77139,77142,77145,77148,77153,77158,77163,77166,77170,77173,77178,77182,77184,77195,77200,77301,77304,77307,77310,77313,77316,77319,77322,77325,77327,77330,77333,77336,77339,77342,77344,77347,77350,77353,77356,77359,77362,77364,77367,77369,77371,77374,77378,77382,77385,77388,77391,77394,77397,77400,77403,77406,77409,77414,77534,77537,77540,77545,77548,77551,77554,77557,77562,77565,77568,77571,77574,77579,77582,77682,77747,77821,77825,77828,77831,77835,77838,77852,77881,77884,77887,77890,77893,77896,77899,77902,77904,77907,77910,77913,77916,77920,77925,77929,77934,78009,78012,78195,78198,78201,78204,78207,78210,78212,78215,78218,78221,78224,78227,78230,78232,78236,78239,78244,78247,78250,78253,78256,78258,78263,78266,78269,78272,78275,78277,78282,78285,78288,78290,78292,78295,78299,78302,78305,78310,78313,78316,78319,78369,78374,78378,78383,78386,78455,78458,78467,78471,78476,78479,78482,78490,78493,78510,80312,80316,80320,80325,80328,80332,80338,80344,80496,80501,80506,80509,80512,80515,80518,80521,80524,80527,80530,80533,80536,80539,80542,80547,80551,80554,80565,80569,80574,80577,80580,80583,80586,80589,80591,80594,80597,80600,80603,80605,80622,80625,80629,80632,80637,80642,80645,80648,80652,80655,80658,80667,80670,80674,80677,80682,80687,80754,80758,80761,80764,80769,80774,80860,80865,80869,80872,80875,80890,80893,80898,80902,80907,81016,81019,81030,81180,81184,81189,81298,81302,81307,81312,81317,81320,81327,81347,81383,81547,81552,81555,81560,81567,81570,81573,81576,81635,81691,81747,81751,81756,82071,82074,82078,82081,82086,82195,82200,82204,82209,82213,82284,82288,82290,82293,82296,82334,82610,82614,82631,82697,82731,82735,82738,82743,82772,82779,82788,82793,82808,82813,82822,82825,82962,82966,83028,83032,83037,83282,83286,83291,83294,83297,83300,83303,83307,83312,84893,84897,84901,84907,84910,84915,84919,84922,84927,84930,84941,84945,84950,84954,84959,84964,84967,84972,84976,84980,84983,84988,84993,84996,84999,85002,85124,85129,85231,85234,85237,85241,85246,85418,85423,85427,85430,85435,85501,85506,85509,85640,85643,85648,85651,85654,85745,85750,85753,85756,85759,85762,85767,85772,85775,85780,85785,85790,85794,85797,85800,85805,85810,85815,85820,85874,85877,85880,85885,85888,85891,85896,85901,85906,85910,85915,85929,85934,85937,85942,85946,85951,85956,85961,85966,85971,85976,85981,85986,85989,85993,85998,86001,86004,86007,86012,86017,86020,86023,86027,86030,86033,86038,86043,86048,86053,86056,86061,86066,86127,86132,86135,86140,87381,87386,87390,87394,87399,87402,87407,87412,87415,87420,87422,87427,87431,87434,87437,87448,87452,87457,87462,87517,87522,87527,87532,87743,87748,87752,87757,87760,87762,87765,87768,88215,88220,88227,88233,88236,88239,88503,88508,88512,88777,88782,88786,88791,88796,88801,88806,89137,89140,89145,89150,89153,89157,89161,89166,89171,89176,89181,89186,89191,89195,89198,89203,89208,89211,89285,89290,89295,89300,89302,89305,89675,89680,89685,89690,89693,89696,89798,89803,89808,89911,89915,89920,89924,89928,89933,89938,89941,89946,89949,89952,90345,90350,90353,90356,90359,90362,90882,90886,90891,90896,90901,90904,90909,90912,90915,91297,91302,91304,91306,91309,91312,91824,91828,91889,91892,91895,91898,91902,91905,91910,91915,92840],[10,76773,76769],{"id":76774},"_4js进阶",[14,76776,76777],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[166,76779,76781],{"id":76780},"_41-作用域","4.1 作用域",[195,76783,76785],{"id":76784},"_411-局部作用域","4.1.1 局部作用域",[14,76787,76788],{},[1554,76789],{"alt":44,"src":76790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76792,76793],{},[1554,76794],{"alt":44,"src":76795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1226,76797,76798,76801,76804],{},[181,76799,76800],{},"函数作用域在函数内部",[181,76802,76803],{},"块级作用域在{}",[181,76805,76806],{},"对象的那个{}不是作用域，不是块作用域",[195,76808,76810],{"id":76809},"_412-全局作用域","4.1.2 全局作用域",[14,76812,76813],{},[1554,76814],{"alt":44,"src":76815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76817,76818],{},"window.a=10不要这样写",[195,76820,76822],{"id":76821},"_413-作用域链","4.1.3 作用域链",[14,76824,76825],{},"变量查找机制",[14,76827,76828],{},[1554,76829],{"alt":44,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[166,76832,76834],{"id":76833},"_42-垃圾回收机制","4.2 垃圾回收机制",[195,76836,76838],{"id":76837},"_421-大体介绍","4.2.1 大体介绍",[14,76840,76841],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76843,76844],{},[1554,76845],{"alt":44,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76848,76849],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[195,76851,76853],{"id":76852},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76855,76856],{},"堆栈空间分配区别：",[178,76858,76859,76862],{},[181,76860,76861],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[181,76863,76864],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76866,76867],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22088,76869,76871],{"id":76870},"_4221-引用计数","4.2.2.1 引用计数",[14,76873,76874],{},[1554,76875],{"alt":44,"src":76876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76878,76879],{},[1554,76880],{"alt":44,"src":76881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76883,76884],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22088,76886,76888],{"id":76887},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76890,76891],{},[1554,76892],{"alt":44,"src":76893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76895,76896],{},[1554,76897],{"alt":44,"src":76898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76900,76901],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[166,76903,76905],{"id":76904},"_43-闭包","4.3 闭包",[14,76907,76908],{},[1554,76909],{"alt":44,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76912,76913],{},"闭包：内层函数+外层函数的变量",[14,76915,76916],{},[1554,76917],{"alt":44,"src":76918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76920,76921],{},"closure就是闭包",[14,76923,76924],{},[1554,76925],{"alt":44,"src":76926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76928,76929],{},"内层函数必须包含外层函数的变量才是闭包",[14,76931,76932],{},[1554,76933],{"alt":44,"src":76934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76936,76937],{},[1554,76938],{"alt":44,"src":76939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76941,76942],{},"闭包可能会引起内存泄漏",[14,76944,76945],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[166,76947,76949],{"id":76948},"_44-变量提升","4.4 变量提升",[14,76951,76952],{},[1554,76953],{"alt":44,"src":76954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76956,76957],{},[1554,76958],{"alt":44,"src":76959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76961,76962],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[166,76964,76966],{"id":76965},"_45-函数进阶","4.5 函数进阶",[195,76968,76970],{"id":76969},"_451-函数提升","4.5.1 函数提升",[14,76972,76973],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76975,76976],{},"只提升函数声明，不提升函数调用",[51902,76978,76979],{},"\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",[195,76981,76983],{"id":76982},"_452-函数参数","4.5.2 函数参数",[22088,76985,76987],{"id":76986},"_4521-动态参数","4.5.2.1 动态参数",[14,76989,76990],{},[1554,76991],{"alt":44,"src":76992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76994,76995],{},[1554,76996],{"alt":44,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76999,77000],{},"箭头函数里边没有arguments",[22088,77002,77004],{"id":77003},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77006,77007],{},[1554,77008],{"alt":44,"src":77009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77011,77012],{},[1554,77013],{"alt":44,"src":77014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77016,77017],{},"剩余参数使用的时候不需要写...",[14,77019,77020],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77022,77023],{},"  function getSum(a,b,...arr) {",[14,77025,77026],{},"  console.log(11)",[14,77028,77029],{},"  }",[14,77031,77032],{},"  getSum(1,2,3,4)",[14,77034,77035],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77037,77038],{},"  getSum(1,2)",[14,77040,77041],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77043,77044],{},[1554,77045],{"alt":44,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22088,77048,77050],{"id":77049},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77052,77053],{},[1554,77054],{"alt":44,"src":77055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77057,77058],{},[1554,77059],{"alt":44,"src":77060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77062,77063],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77065,77066],{},"展开运算符可以用于数组之间的合并：",[14,77068,77069],{},"const arr1 = [1, 2, 3]",[14,77071,77072],{},"const arr2 = [3, 4, 5]",[14,77074,77075],{},"const arr = [...arr1, ...arr2]",[14,77077,77078],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77080,77081],{},"剩余参数：函数参数使用，得到真数组",[14,77083,77084],{},"展开运算符：数组中使用，数组展开",[195,77086,77088],{"id":77087},"_453-箭头函数","4.5.3 箭头函数",[22088,77090,77092],{"id":77091},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77094,77095],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77097,77098],{},"它不是万能的！！！",[14,77100,77101],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77103,77104],{},[1554,77105],{"alt":44,"src":77106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77108,256],{},[14,77110,77111],{},"① 只有一个形参的时候，可以省略小括号：",[14,77113,77114],{},"const fn=x=>{console.log(x)}",[14,77116,77117],{},"② 只有一行代码时可以省略大括号：",[14,77119,77120],{},"const fn=x=>console.log(11)",[14,77122,77123],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77125,77126],{},"const fn=x=>x+x",[14,77128,77129],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77131,77132],{},"⑤ 阻止表单默认提交：",[14,77134,77135],{},"const form = document.querySelector('form')",[14,77137,77138],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77140,77141],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77143,77144],{},"const fn=uname=>({uname:uname})",[14,77146,77147],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77149,77150],{},[1554,77151],{"alt":44,"src":77152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77154,77155],{},[1554,77156],{"alt":44,"src":77157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77159,77160],{},[1554,77161],{"alt":44,"src":77162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77164,77165],{},"一定不要忘记用()，有()就理解为自带return",[22088,77167,77169],{"id":77168},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77171,77172],{},"箭头函数是没有动态参数的arguments",[14,77174,77175],{},[1554,77176],{"alt":44,"src":77177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22088,77179,77181],{"id":77180},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77183,11422],{},[178,77185,77186,77189,77192],{},[181,77187,77188],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[181,77190,77191],{},"事件回调函数使用箭头函数时，this 为全局的 window",[181,77193,77194],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77196,77197],{},[1554,77198],{"alt":44,"src":77199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[39,77201,77203],{"className":53156,"code":77202,"language":53158,"meta":44,"style":44},"  \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",[46,77204,77205,77213,77218,77223,77228,77233,77238,77242,77247,77251,77255,77260,77265,77270,77274,77278,77283,77288,77293],{"__ignoreMap":44},[49,77206,77207,77209,77211],{"class":51,"line":52},[49,77208,52233],{"class":55},[49,77210,51902],{"class":51389},[49,77212,51396],{"class":55},[49,77214,77215],{"class":51,"line":84},[49,77216,77217],{"class":55},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[49,77219,77220],{"class":51,"line":109},[49,77221,77222],{"class":55},"    console.log(this) \u002F\u002F指向window\n",[49,77224,77225],{"class":51,"line":120},[49,77226,77227],{"class":55},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[49,77229,77230],{"class":51,"line":135},[49,77231,77232],{"class":55},"    function fn() {\n",[49,77234,77235],{"class":51,"line":1306},[49,77236,77237],{"class":55},"      console.log(this)  \u002F\u002F指向window\n",[49,77239,77240],{"class":51,"line":1312},[49,77241,2279],{"class":55},[49,77243,77244],{"class":51,"line":1403},[49,77245,77246],{"class":55},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[49,77248,77249],{"class":51,"line":1409},[49,77250,2492],{"emptyLinePlaceholder":151},[49,77252,77253],{"class":51,"line":1421},[49,77254,71612],{"class":55},[49,77256,77257],{"class":51,"line":1704},[49,77258,77259],{"class":55},"      name: 'andy',\n",[49,77261,77262],{"class":51,"line":1709},[49,77263,77264],{"class":55},"      sayHai: function () {\n",[49,77266,77267],{"class":51,"line":1715},[49,77268,77269],{"class":55},"        console.log(this)\n",[49,77271,77272],{"class":51,"line":1720},[49,77273,52487],{"class":55},[49,77275,77276],{"class":51,"line":1734},[49,77277,2279],{"class":55},[49,77279,77280],{"class":51,"line":1739},[49,77281,77282],{"class":55},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[49,77284,77285],{"class":51,"line":1745},[49,77286,77287],{"class":55},"    \u002F\u002F 2.箭头函数的this\n",[49,77289,77290],{"class":51,"line":1766},[49,77291,77292],{"class":55},"    const fn = () => console.log(this)\n",[49,77294,77295,77297,77299],{"class":51,"line":1771},[49,77296,52506],{"class":55},[49,77298,51902],{"class":51389},[49,77300,51396],{"class":55},[14,77302,77303],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77305,77306],{},"const fn = () => console.log(this)",[14,77308,77309],{},"fn() \u002F\u002F指向window",[14,77311,77312],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77314,77315],{},"①",[14,77317,77318],{},"const obj = {",[14,77320,77321],{},"uname: 'pink老师',",[14,77323,77324],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77326,1165],{},[14,77328,77329],{},"调用对象里边的函数",[14,77331,77332],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77334,77335],{},"obj.sayHai()",[14,77337,77338],{},"②",[14,77340,77341],{},"const obj1 = {",[14,77343,77321],{},[14,77345,77346],{},"sayHai: function () {",[14,77348,77349],{},"let i = 10",[14,77351,77352],{},"const count = () => {",[14,77354,77355],{},"console.log(this)",[14,77357,77358],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77360,77361],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77363,1165],{},[14,77365,77366],{},"count()",[14,77368,1165],{},[14,77370,1165],{},[14,77372,77373],{},"obj1.sayHai()",[166,77375,77377],{"id":77376},"_46-解构赋值","4.6 解构赋值",[195,77379,77381],{"id":77380},"_461-数组解构","4.6.1 数组解构",[14,77383,77384],{},"以前要是使用数组中的值的话：",[14,77386,77387],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77389,77390],{},"const arr=[100,60,80]",[14,77392,77393],{},"const max=arr[0]",[14,77395,77396],{},"const min=arr[1]",[14,77398,77399],{},"const avg=arr[2]",[14,77401,77402],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77404,77405],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77407,77408],{},"这个写法就类似于上边的那种用很多const的方法",[14,77410,77411],{},[1554,77412],{"alt":44,"src":77413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[39,77415,77417],{"className":50722,"code":77416,"language":50724,"meta":44,"style":44},"①变量之间交换值:\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",[46,77418,77419,77424,77429,77434,77439,77444,77448,77452,77457,77461,77466,77471,77475,77480,77485,77496,77506,77511,77516,77521,77525,77529],{"__ignoreMap":44},[49,77420,77421],{"class":51,"line":52},[49,77422,77423],{"class":55},"①变量之间交换值:\n",[49,77425,77426],{"class":51,"line":84},[49,77427,77428],{"class":55},"let a=1\n",[49,77430,77431],{"class":51,"line":109},[49,77432,77433],{"class":55},"let b=2;\n",[49,77435,77436],{"class":51,"line":120},[49,77437,77438],{"class":55},"必须加这行代码，不然就会报错\n",[49,77440,77441],{"class":51,"line":135},[49,77442,77443],{"class":55},"[b,a]=[a,b]\n",[49,77445,77446],{"class":51,"line":1306},[49,77447,2492],{"emptyLinePlaceholder":151},[49,77449,77450],{"class":51,"line":1312},[49,77451,2492],{"emptyLinePlaceholder":151},[49,77453,77454],{"class":51,"line":1403},[49,77455,77456],{"class":55},"可以写成下面的方式：\n",[49,77458,77459],{"class":51,"line":1409},[49,77460,77428],{"class":55},[49,77462,77463],{"class":51,"line":1421},[49,77464,77465],{"class":55},"let b=2\n",[49,77467,77468],{"class":51,"line":1704},[49,77469,77470],{"class":55},";[b,a]=[a,b]\n",[49,77472,77473],{"class":51,"line":1709},[49,77474,2492],{"emptyLinePlaceholder":151},[49,77476,77477],{"class":51,"line":1715},[49,77478,77479],{"class":55},"②排序\n",[49,77481,77482],{"class":51,"line":1720},[49,77483,77484],{"class":55},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[49,77486,77487,77490,77493],{"class":51,"line":1734},[49,77488,77489],{"class":55},"for (let i = 0; i ",[49,77491,1129],{"class":77492},"s7hpK",[49,77494,77495],{"class":55}," arr1.length; i++) {\n",[49,77497,77498,77501,77503],{"class":51,"line":1739},[49,77499,77500],{"class":55},"   for (let j = 0; j ",[49,77502,1129],{"class":77492},[49,77504,77505],{"class":55}," arr1.length - 1; j++) {\n",[49,77507,77508],{"class":51,"line":1745},[49,77509,77510],{"class":55},"      if (arr1[j] > arr1[j + 1]) {\n",[49,77512,77513],{"class":51,"line":1766},[49,77514,77515],{"class":55},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[49,77517,77518],{"class":51,"line":1771},[49,77519,77520],{"class":55},"       }\n",[49,77522,77523],{"class":51,"line":1785},[49,77524,4401],{"class":55},[49,77526,77527],{"class":51,"line":1790},[49,77528,1657],{"class":55},[49,77530,77531],{"class":51,"line":1819},[49,77532,77533],{"class":55},"console.log(arr1)\n",[14,77535,77536],{},"数组解构的细节：",[14,77538,77539],{},"①变量多，单元值少",[14,77541,77542],{},[1554,77543],{"alt":44,"src":77544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77546,77547],{},"防止出现undefined的方法：",[14,77549,77550],{},"const [a=0,b=0] =[1]",[14,77552,77553],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77555,77556],{},"②变量少，单元值多",[14,77558,77559],{},[1554,77560],{"alt":44,"src":77561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77563,77564],{},"此时可以使用剩余参数来接收多余的值",[14,77566,77567],{},"const [a,b,...c]=[1,2,3,4]",[14,77569,77570],{},"console.log(c) 输出[3,4]",[14,77572,77573],{},"③可以按需导入，忽略某些返回值",[14,77575,77576],{},[1554,77577],{"alt":44,"src":77578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77580,77581],{},"④支持多维数组的结构",[39,77583,77587],{"className":77584,"code":77585,"language":77586,"meta":44,"style":44},"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",[46,77588,77589,77617,77633,77648,77663],{"__ignoreMap":44},[49,77590,77591,77593,77595,77597,77599,77601,77603,77605,77608,77610,77612,77614],{"class":51,"line":52},[49,77592,6882],{"class":59},[49,77594,51922],{"class":55},[49,77596,60],{"class":59},[49,77598,52315],{"class":55},[49,77600,441],{"class":66},[49,77602,12525],{"class":55},[49,77604,301],{"class":66},[49,77606,77607],{"class":55},", [",[49,77609,73],{"class":66},[49,77611,12525],{"class":55},[49,77613,515],{"class":66},[49,77615,77616],{"class":55},"]]\n",[49,77618,77619,77622,77624,77626,77628,77630],{"class":51,"line":84},[49,77620,77621],{"class":55},"console.",[49,77623,58336],{"class":2055},[49,77625,3943],{"class":55},[49,77627,415],{"class":66},[49,77629,4308],{"class":55},[49,77631,77632],{"class":283},"  \u002F\u002F1\n",[49,77634,77635,77637,77639,77641,77643,77645],{"class":51,"line":109},[49,77636,77621],{"class":55},[49,77638,58336],{"class":2055},[49,77640,3943],{"class":55},[49,77642,441],{"class":66},[49,77644,4308],{"class":55},[49,77646,77647],{"class":283},"  \u002F\u002F2\n",[49,77649,77650,77652,77654,77656,77658,77660],{"class":51,"line":120},[49,77651,77621],{"class":55},[49,77653,58336],{"class":2055},[49,77655,3943],{"class":55},[49,77657,301],{"class":66},[49,77659,4308],{"class":55},[49,77661,77662],{"class":283},"  \u002F\u002F[3,4]\n",[49,77664,77665,77667,77669,77671,77673,77675,77677,77679],{"class":51,"line":135},[49,77666,77621],{"class":55},[49,77668,58336],{"class":2055},[49,77670,3943],{"class":55},[49,77672,301],{"class":66},[49,77674,4992],{"class":55},[49,77676,415],{"class":66},[49,77678,4308],{"class":55},[49,77680,77681],{"class":283},"  \u002F\u002F3\n",[39,77683,77685],{"className":77584,"code":77684,"language":77586,"meta":44,"style":44},"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",[46,77686,77687,77714,77725,77736],{"__ignoreMap":44},[49,77688,77689,77691,77694,77696,77698,77700,77702,77704,77706,77708,77710,77712],{"class":51,"line":52},[49,77690,6882],{"class":59},[49,77692,77693],{"class":55}," [a, b, c] ",[49,77695,60],{"class":59},[49,77697,52315],{"class":55},[49,77699,441],{"class":66},[49,77701,12525],{"class":55},[49,77703,301],{"class":66},[49,77705,77607],{"class":55},[49,77707,73],{"class":66},[49,77709,12525],{"class":55},[49,77711,515],{"class":66},[49,77713,77616],{"class":55},[49,77715,77716,77718,77720,77723],{"class":51,"line":84},[49,77717,77621],{"class":55},[49,77719,58336],{"class":2055},[49,77721,77722],{"class":55},"(a)",[49,77724,77632],{"class":283},[49,77726,77727,77729,77731,77734],{"class":51,"line":109},[49,77728,77621],{"class":55},[49,77730,58336],{"class":2055},[49,77732,77733],{"class":55},"(b)",[49,77735,77647],{"class":283},[49,77737,77738,77740,77742,77745],{"class":51,"line":120},[49,77739,77621],{"class":55},[49,77741,58336],{"class":2055},[49,77743,77744],{"class":55},"(c)",[49,77746,77662],{"class":283},[39,77748,77750],{"className":77584,"code":77749,"language":77586,"meta":44,"style":44},"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",[46,77751,77752,77779,77789,77799,77809],{"__ignoreMap":44},[49,77753,77754,77756,77759,77761,77763,77765,77767,77769,77771,77773,77775,77777],{"class":51,"line":52},[49,77755,6882],{"class":59},[49,77757,77758],{"class":55}," [a, b, [c, d]] ",[49,77760,60],{"class":59},[49,77762,52315],{"class":55},[49,77764,441],{"class":66},[49,77766,12525],{"class":55},[49,77768,301],{"class":66},[49,77770,77607],{"class":55},[49,77772,73],{"class":66},[49,77774,12525],{"class":55},[49,77776,515],{"class":66},[49,77778,77616],{"class":55},[49,77780,77781,77783,77785,77787],{"class":51,"line":84},[49,77782,77621],{"class":55},[49,77784,58336],{"class":2055},[49,77786,77722],{"class":55},[49,77788,77632],{"class":283},[49,77790,77791,77793,77795,77797],{"class":51,"line":109},[49,77792,77621],{"class":55},[49,77794,58336],{"class":2055},[49,77796,77733],{"class":55},[49,77798,77647],{"class":283},[49,77800,77801,77803,77805,77807],{"class":51,"line":120},[49,77802,77621],{"class":55},[49,77804,58336],{"class":2055},[49,77806,77744],{"class":55},[49,77808,77681],{"class":283},[49,77810,77811,77813,77815,77818],{"class":51,"line":135},[49,77812,77621],{"class":55},[49,77814,58336],{"class":2055},[49,77816,77817],{"class":55},"(d)",[49,77819,77820],{"class":283},"  \u002F\u002F4\n",[195,77822,77824],{"id":77823},"_462-对象解构","4.6.2 对象解构",[14,77826,77827],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77829,77830],{},"用的非常非常多！！！！！！",[22088,77832,77834],{"id":77833},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77836,77837],{},"基本语法：",[178,77839,77840,77843,77846,77849],{},[181,77841,77842],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[181,77844,77845],{},"对象属性的值将被赋值给与属性名相同的变量",[181,77847,77848],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[181,77850,77851],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[39,77853,77855],{"className":50722,"code":77854,"language":50724,"meta":44,"style":44},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[46,77856,77857,77862,77867,77872,77876],{"__ignoreMap":44},[49,77858,77859],{"class":51,"line":52},[49,77860,77861],{"class":55},"const obj = {\n",[49,77863,77864],{"class":51,"line":84},[49,77865,77866],{"class":55},"   uname: 'pink老师',\n",[49,77868,77869],{"class":51,"line":109},[49,77870,77871],{"class":55},"   age: 18,\n",[49,77873,77874],{"class":51,"line":120},[49,77875,1657],{"class":55},[49,77877,77878],{"class":51,"line":135},[49,77879,77880],{"class":55},"const { uname, age } = obj\n",[14,77882,77883],{},"上方代码这样写等价于：",[14,77885,77886],{},"const uname等价于obj.uname",[14,77888,77889],{},"变量名可以重新改名：",[14,77891,77892],{},"const uname='red老师'",[14,77894,77895],{},"const user={",[14,77897,77898],{},"  uname:'pink老师',",[14,77900,77901],{},"  age:18",[14,77903,1165],{},[14,77905,77906],{},"const {uname,age}=user",[14,77908,77909],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77911,77912],{},"const {旧变量名：新变量名}=对象",[14,77914,77915],{},"const {uname:username,age}=user",[22088,77917,77919],{"id":77918},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77921,77922],{},[1554,77923],{"alt":44,"src":77924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22088,77926,77928],{"id":77927},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77930,77931],{},[1554,77932],{"alt":44,"src":77933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[39,77935,77937],{"className":53156,"code":77936,"language":53158,"meta":44,"style":44},"  \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",[46,77938,77939,77947,77952,77957,77962,77967,77972,77977,77982,77987,77991,77996,78001],{"__ignoreMap":44},[49,77940,77941,77943,77945],{"class":51,"line":52},[49,77942,52233],{"class":55},[49,77944,51902],{"class":51389},[49,77946,51396],{"class":55},[49,77948,77949],{"class":51,"line":84},[49,77950,77951],{"class":55},"    const pig = {\n",[49,77953,77954],{"class":51,"line":109},[49,77955,77956],{"class":55},"      name: '佩奇',\n",[49,77958,77959],{"class":51,"line":120},[49,77960,77961],{"class":55},"      family: {\n",[49,77963,77964],{"class":51,"line":135},[49,77965,77966],{"class":55},"        mother: '猪妈妈',\n",[49,77968,77969],{"class":51,"line":1306},[49,77970,77971],{"class":55},"        father: '猪爸爸',\n",[49,77973,77974],{"class":51,"line":1312},[49,77975,77976],{"class":55},"        sister: '乔治'\n",[49,77978,77979],{"class":51,"line":1403},[49,77980,77981],{"class":55},"      },\n",[49,77983,77984],{"class":51,"line":1409},[49,77985,77986],{"class":55},"      age: 6\n",[49,77988,77989],{"class":51,"line":1421},[49,77990,2279],{"class":55},[49,77992,77993],{"class":51,"line":1704},[49,77994,77995],{"class":55},"    \u002F\u002F 多级对象解构\n",[49,77997,77998],{"class":51,"line":1709},[49,77999,78000],{"class":55},"    const { name, family: { mother, father, sister }, age } = pig\n",[49,78002,78003,78005,78007],{"class":51,"line":1715},[49,78004,52506],{"class":55},[49,78006,51902],{"class":51389},[49,78008,51396],{"class":55},[14,78010,78011],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[39,78013,78016],{"className":78014,"code":78015,"language":76536,"meta":44,"style":44},"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",[46,78017,78018,78023,78034,78046,78058,78067,78071,78082,78094,78104,78109,78113,78123,78134,78143,78147,78151,78162,78173,78182,78186,78191],{"__ignoreMap":44},[49,78019,78020],{"class":51,"line":52},[49,78021,78022],{"class":283},"    \u002F\u002F 这是后台传递过来的数据\n",[49,78024,78025,78027,78030,78032],{"class":51,"line":84},[49,78026,11311],{"class":59},[49,78028,78029],{"class":55}," msg ",[49,78031,60],{"class":59},[49,78033,15662],{"class":55},[49,78035,78036,78039,78041,78044],{"class":51,"line":109},[49,78037,78038],{"class":328},"      \"code\"",[49,78040,1078],{"class":59},[49,78042,78043],{"class":66}," 200",[49,78045,31555],{"class":55},[49,78047,78048,78051,78053,78056],{"class":51,"line":120},[49,78049,78050],{"class":328},"      \"msg\"",[49,78052,1078],{"class":59},[49,78054,78055],{"class":328}," \"获取新闻列表成功\"",[49,78057,31555],{"class":55},[49,78059,78060,78063,78065],{"class":51,"line":135},[49,78061,78062],{"class":328},"      \"data\"",[49,78064,1078],{"class":59},[49,78066,55536],{"class":55},[49,78068,78069],{"class":51,"line":1306},[49,78070,2602],{"class":55},[49,78072,78073,78076,78078,78080],{"class":51,"line":1312},[49,78074,78075],{"class":328},"          \"id\"",[49,78077,1078],{"class":59},[49,78079,25209],{"class":66},[49,78081,31555],{"class":55},[49,78083,78084,78087,78089,78092],{"class":51,"line":1403},[49,78085,78086],{"class":328},"          \"title\"",[49,78088,1078],{"class":59},[49,78090,78091],{"class":328}," \"5G商用自己，三大运用商收入下降\"",[49,78093,31555],{"class":55},[49,78095,78096,78099,78101],{"class":51,"line":1409},[49,78097,78098],{"class":328},"          \"count\"",[49,78100,1078],{"class":59},[49,78102,78103],{"class":66}," 58\n",[49,78105,78106],{"class":51,"line":1421},[49,78107,78108],{"class":55},"        },\n",[49,78110,78111],{"class":51,"line":1704},[49,78112,2602],{"class":55},[49,78114,78115,78117,78119,78121],{"class":51,"line":1709},[49,78116,78075],{"class":328},[49,78118,1078],{"class":59},[49,78120,14845],{"class":66},[49,78122,31555],{"class":55},[49,78124,78125,78127,78129,78132],{"class":51,"line":1715},[49,78126,78086],{"class":328},[49,78128,1078],{"class":59},[49,78130,78131],{"class":328}," \"国际媒体头条速览\"",[49,78133,31555],{"class":55},[49,78135,78136,78138,78140],{"class":51,"line":1720},[49,78137,78098],{"class":328},[49,78139,1078],{"class":59},[49,78141,78142],{"class":66}," 56\n",[49,78144,78145],{"class":51,"line":1734},[49,78146,78108],{"class":55},[49,78148,78149],{"class":51,"line":1739},[49,78150,2602],{"class":55},[49,78152,78153,78155,78157,78160],{"class":51,"line":1745},[49,78154,78075],{"class":328},[49,78156,1078],{"class":59},[49,78158,78159],{"class":66}," 3",[49,78161,31555],{"class":55},[49,78163,78164,78166,78168,78171],{"class":51,"line":1766},[49,78165,78086],{"class":328},[49,78167,1078],{"class":59},[49,78169,78170],{"class":328}," \"乌克兰和俄罗斯持续冲突\"",[49,78172,31555],{"class":55},[49,78174,78175,78177,78179],{"class":51,"line":1771},[49,78176,78098],{"class":328},[49,78178,1078],{"class":59},[49,78180,78181],{"class":66}," 1669\n",[49,78183,78184],{"class":51,"line":1785},[49,78185,78108],{"class":55},[49,78187,78188],{"class":51,"line":1790},[49,78189,78190],{"class":55},"      ]\n",[49,78192,78193],{"class":51,"line":1819},[49,78194,2279],{"class":55},[14,78196,78197],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78199,78200],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78202,78203],{},"\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,78205,78206],{},"function({data}) {",[14,78208,78209],{},"console.log(data)",[14,78211,1165],{},[14,78213,78214],{},"render(msg)",[14,78216,78217],{},"实参传递给形参的时候解构了",[14,78219,78220],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78222,78223],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78225,78226],{},"function render({data:mydata}) {",[14,78228,78229],{},"  console.log(data)",[14,78231,1165],{},[195,78233,78235],{"id":78234},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78237,78238],{},"有两种情况：一个是数组结构，一个是立即执行函数",[178,78240,78241],{},[181,78242,78243],{},"如果对一个数组进行遍历，有两种方式：",[14,78245,78246],{},"①法1",[14,78248,78249],{},"const arr=[1,2,3]",[14,78251,78252],{},"arr.map(function(item,index) {",[14,78254,78255],{},"  console.log(item)",[14,78257,52553],{},[14,78259,78260],{},[1554,78261],{"alt":44,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78264,78265],{},"②法2",[14,78267,78268],{},"const str='pink'",[14,78270,78271],{},"[1,2,3].map(function(item,index) {",[14,78273,78274],{},"console.log(item)",[14,78276,52553],{},[14,78278,78279],{},[1554,78280],{"alt":44,"src":78281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78283,78284],{},"此时会报错",[14,78286,78287],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78289,78274],{},[14,78291,52553],{},[14,78293,78294],{},"内部会当成这样处理，所以我们用分号进行隔开",[166,78296,78298],{"id":78297},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78300,78301],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78303,78304],{},"可以理解为加强版的for循环",[14,78306,78307],{},[1554,78308],{"alt":44,"src":78309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78311,78312],{},"里边不写return，不返回数组，只遍历不返回",[14,78314,78315],{},"map是返回数组",[14,78317,78318],{},"forEach主要用于遍历数组对象",[39,78320,78322],{"className":53156,"code":78321,"language":53158,"meta":44,"style":44},"  \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",[46,78323,78324,78332,78337,78342,78347,78352,78356,78361],{"__ignoreMap":44},[49,78325,78326,78328,78330],{"class":51,"line":52},[49,78327,52233],{"class":55},[49,78329,51902],{"class":51389},[49,78331,51396],{"class":55},[49,78333,78334],{"class":51,"line":84},[49,78335,78336],{"class":55},"    const arr = ['red', 'green', 'pink']\n",[49,78338,78339],{"class":51,"line":109},[49,78340,78341],{"class":55},"    const result = arr.forEach(function (item, index) {\n",[49,78343,78344],{"class":51,"line":120},[49,78345,78346],{"class":55},"      console.log(item)\n",[49,78348,78349],{"class":51,"line":135},[49,78350,78351],{"class":55},"      console.log(index)\n",[49,78353,78354],{"class":51,"line":1306},[49,78355,33550],{"class":55},[49,78357,78358],{"class":51,"line":1312},[49,78359,78360],{"class":55},"    console.log(result)\n",[49,78362,78363,78365,78367],{"class":51,"line":1403},[49,78364,52506],{"class":55},[49,78366,51902],{"class":51389},[49,78368,51396],{"class":55},[14,78370,78371],{},[1554,78372],{"alt":44,"src":78373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[166,78375,78377],{"id":78376},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78379,78380],{},[1554,78381],{"alt":44,"src":78382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78384,78385],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[39,78387,78389],{"className":53156,"code":78388,"language":53158,"meta":44,"style":44},"\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",[46,78390,78391,78399,78407,78412,78417,78421,78425,78430,78434,78439,78447],{"__ignoreMap":44},[49,78392,78393,78395,78397],{"class":51,"line":52},[49,78394,1129],{"class":55},[49,78396,51889],{"class":51389},[49,78398,51396],{"class":55},[49,78400,78401,78403,78405],{"class":51,"line":84},[49,78402,52233],{"class":55},[49,78404,51902],{"class":51389},[49,78406,51396],{"class":55},[49,78408,78409],{"class":51,"line":109},[49,78410,78411],{"class":55},"    const arr = [10, 20, 30]\n",[49,78413,78414],{"class":51,"line":120},[49,78415,78416],{"class":55},"    const newArr = arr.filter(function (item, index) {\n",[49,78418,78419],{"class":51,"line":135},[49,78420,78346],{"class":55},[49,78422,78423],{"class":51,"line":1306},[49,78424,78351],{"class":55},[49,78426,78427],{"class":51,"line":1312},[49,78428,78429],{"class":55},"      return item >= 20\n",[49,78431,78432],{"class":51,"line":1403},[49,78433,33550],{"class":55},[49,78435,78436],{"class":51,"line":1409},[49,78437,78438],{"class":55},"    console.log(newArr)\n",[49,78440,78441,78443,78445],{"class":51,"line":1421},[49,78442,52506],{"class":55},[49,78444,51902],{"class":51389},[49,78446,51396],{"class":55},[49,78448,78449,78451,78453],{"class":51,"line":1704},[49,78450,51874],{"class":55},[49,78452,51889],{"class":51389},[49,78454,51396],{"class":55},[14,78456,78457],{},"这个也可以写成箭头函数：",[39,78459,78461],{"className":50722,"code":78460,"language":50724,"meta":44,"style":44},"const newArr = arr.filter(item => item >= 20)\n",[46,78462,78463],{"__ignoreMap":44},[49,78464,78465],{"class":51,"line":52},[49,78466,78460],{"class":55},[166,78468,78470],{"id":78469},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78472,78473],{},[1554,78474],{"alt":44,"src":78475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78477,78478],{},"步骤：",[14,78480,78481],{},"①：渲染页面模块",[1226,78483,78484,78487],{},[181,78485,78486],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[181,78488,78489],{},"用forEach+字符串的形式",[14,78491,78492],{},"②：点击不同需求，显示不同页面内容",[1226,78494,78495,78498,78501,78504,78507],{},[181,78496,78497],{},"点击采取事件委托方式 .filter",[181,78499,78500],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[181,78502,78503],{},"筛选条件是根据点击的 data-index 来判断",[181,78505,78506],{},"可以使用对象解构，把事件对象解构",[181,78508,78509],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[39,78511,78513],{"className":50722,"code":78512,"language":50724,"meta":44,"style":44},"\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",[46,78514,78515,78525,78539,78543,78551,78565,78585,78597,78605,78611,78621,78631,78641,78645,78649,78655,78668,78680,78690,78702,78706,78710,78717,78730,78742,78759,78777,78790,78794,78798,78810,78820,78824,78828,78835,78876,78903,78913,78917,78921,78929,78941,78945,78949,78957,78969,78981,78992,78996,79000,79009,79021,79032,79036,79040,79049,79061,79073,79077,79081,79088,79098,79110,79122,79137,79141,79145,79153,79169,79179,79189,79199,79211,79215,79219,79229,79240,79250,79254,79262,79270,79274,79282,79297,79323,79348,79373,79392,79400,79414,79419,79424,79429,79434,79439,79447,79455,79460,79471,79476,79486,79496,79506,79516,79520,79524,79533,79542,79551,79560,79564,79568,79577,79586,79595,79604,79608,79612,79621,79630,79639,79648,79652,79656,79665,79674,79683,79692,79696,79700,79709,79718,79727,79736,79740,79744,79753,79762,79771,79780,79784,79788,79797,79806,79814,79823,79827,79831,79835,79840,79852,79857,79869,79873,79890,79918,79927,79932,79942,79952,79961,79966,79971,79975,79980,79997,80001,80006,80014,80019,80046,80051,80071,80076,80088,80093,80098,80103,80114,80128,80165,80183,80216,80233,80257,80261,80266,80272,80276,80280,80284,80292,80300,80304],{"__ignoreMap":44},[49,78516,78517,78519,78521,78523],{"class":51,"line":52},[49,78518,51386],{"class":55},[49,78520,51390],{"class":51389},[49,78522,51393],{"class":2055},[49,78524,51396],{"class":55},[49,78526,78527,78529,78531,78533,78535,78537],{"class":51,"line":84},[49,78528,1129],{"class":55},[49,78530,50724],{"class":51389},[49,78532,51405],{"class":2055},[49,78534,60],{"class":55},[49,78536,51410],{"class":328},[49,78538,51396],{"class":55},[49,78540,78541],{"class":51,"line":109},[49,78542,2492],{"emptyLinePlaceholder":151},[49,78544,78545,78547,78549],{"class":51,"line":120},[49,78546,1129],{"class":55},[49,78548,51423],{"class":51389},[49,78550,51396],{"class":55},[49,78552,78553,78555,78557,78559,78561,78563],{"class":51,"line":135},[49,78554,52233],{"class":55},[49,78556,51433],{"class":51389},[49,78558,51436],{"class":2055},[49,78560,60],{"class":55},[49,78562,51441],{"class":328},[49,78564,51396],{"class":55},[49,78566,78567,78569,78571,78573,78575,78577,78579,78581,78583],{"class":51,"line":1306},[49,78568,52233],{"class":55},[49,78570,51433],{"class":51389},[49,78572,15010],{"class":2055},[49,78574,60],{"class":55},[49,78576,51480],{"class":328},[49,78578,51460],{"class":2055},[49,78580,60],{"class":55},[49,78582,51487],{"class":328},[49,78584,51396],{"class":55},[49,78586,78587,78589,78591,78593,78595],{"class":51,"line":1312},[49,78588,52233],{"class":55},[49,78590,51496],{"class":51389},[49,78592,51499],{"class":55},[49,78594,51496],{"class":51389},[49,78596,51396],{"class":55},[49,78598,78599,78601,78603],{"class":51,"line":1403},[49,78600,52233],{"class":55},[49,78602,143],{"class":51389},[49,78604,51396],{"class":55},[49,78606,78607,78609],{"class":51,"line":1409},[49,78608,6493],{"class":51389},[49,78610,15662],{"class":55},[49,78612,78613,78615,78617,78619],{"class":51,"line":1421},[49,78614,54784],{"class":66},[49,78616,51526],{"class":55},[49,78618,415],{"class":66},[49,78620,1382],{"class":55},[49,78622,78623,78625,78627,78629],{"class":51,"line":1704},[49,78624,54795],{"class":66},[49,78626,51526],{"class":55},[49,78628,415],{"class":66},[49,78630,1382],{"class":55},[49,78632,78633,78635,78637,78639],{"class":51,"line":1709},[49,78634,72685],{"class":66},[49,78636,51526],{"class":55},[49,78638,60594],{"class":66},[49,78640,1382],{"class":55},[49,78642,78643],{"class":51,"line":1715},[49,78644,2279],{"class":55},[49,78646,78647],{"class":51,"line":1720},[49,78648,2492],{"emptyLinePlaceholder":151},[49,78650,78651,78653],{"class":51,"line":1734},[49,78652,62212],{"class":2055},[49,78654,15662],{"class":55},[49,78656,78657,78659,78661,78664,78666],{"class":51,"line":1739},[49,78658,54860],{"class":66},[49,78660,51526],{"class":55},[49,78662,78663],{"class":66},"990",[49,78665,51581],{"class":59},[49,78667,1382],{"class":55},[49,78669,78670,78672,78674,78676,78678],{"class":51,"line":1745},[49,78671,54795],{"class":66},[49,78673,51526],{"class":55},[49,78675,415],{"class":66},[49,78677,51645],{"class":66},[49,78679,1382],{"class":55},[49,78681,78682,78684,78686,78688],{"class":51,"line":1766},[49,78683,55098],{"class":66},[49,78685,51526],{"class":55},[49,78687,51566],{"class":66},[49,78689,1382],{"class":55},[49,78691,78692,78695,78697,78700],{"class":51,"line":1771},[49,78693,78694],{"class":66},"      flex-wrap",[49,78696,51526],{"class":55},[49,78698,78699],{"class":66},"wrap",[49,78701,1382],{"class":55},[49,78703,78704],{"class":51,"line":1785},[49,78705,2279],{"class":55},[49,78707,78708],{"class":51,"line":1790},[49,78709,2492],{"emptyLinePlaceholder":151},[49,78711,78712,78715],{"class":51,"line":1819},[49,78713,78714],{"class":2055},"    .item",[49,78716,15662],{"class":55},[49,78718,78719,78721,78723,78726,78728],{"class":51,"line":1824},[49,78720,54860],{"class":66},[49,78722,51526],{"class":55},[49,78724,78725],{"class":66},"240",[49,78727,51581],{"class":59},[49,78729,1382],{"class":55},[49,78731,78732,78734,78736,78738,78740],{"class":51,"line":1841},[49,78733,62089],{"class":66},[49,78735,51526],{"class":55},[49,78737,95],{"class":66},[49,78739,51581],{"class":59},[49,78741,1382],{"class":55},[49,78743,78744,78746,78748,78750,78752,78755,78757],{"class":51,"line":1846},[49,78745,54784],{"class":66},[49,78747,51526],{"class":55},[49,78749,919],{"class":66},[49,78751,51581],{"class":59},[49,78753,78754],{"class":66}," 30",[49,78756,51581],{"class":59},[49,78758,1382],{"class":55},[49,78760,78761,78763,78765,78767,78770,78773,78775],{"class":51,"line":1851},[49,78762,61949],{"class":66},[49,78764,51526],{"class":55},[49,78766,28212],{"class":66},[49,78768,78769],{"class":66}," ease",[49,78771,78772],{"class":66}," .5",[49,78774,914],{"class":59},[49,78776,1382],{"class":55},[49,78778,78779,78782,78784,78786,78788],{"class":51,"line":1856},[49,78780,78781],{"class":66},"      margin-bottom",[49,78783,51526],{"class":55},[49,78785,919],{"class":66},[49,78787,51581],{"class":59},[49,78789,1382],{"class":55},[49,78791,78792],{"class":51,"line":1870},[49,78793,2279],{"class":55},[49,78795,78796],{"class":51,"line":1875},[49,78797,2492],{"emptyLinePlaceholder":151},[49,78799,78800,78803,78805,78808],{"class":51,"line":2669},[49,78801,78802],{"class":2055},"    .item:nth-child",[49,78804,228],{"class":55},[49,78806,78807],{"class":66},"4n",[49,78809,12532],{"class":55},[49,78811,78812,78814,78816,78818],{"class":51,"line":2683},[49,78813,62089],{"class":66},[49,78815,51526],{"class":55},[49,78817,415],{"class":66},[49,78819,1382],{"class":55},[49,78821,78822],{"class":51,"line":2691},[49,78823,2279],{"class":55},[49,78825,78826],{"class":51,"line":2696},[49,78827,2492],{"emptyLinePlaceholder":151},[49,78829,78830,78833],{"class":51,"line":2702},[49,78831,78832],{"class":2055},"    .item:hover",[49,78834,15662],{"class":55},[49,78836,78837,78840,78842,78844,78846,78848,78850,78852,78854,78857,78859,78861,78863,78865,78867,78869,78871,78874],{"class":51,"line":2708},[49,78838,78839],{"class":66},"      box-shadow",[49,78841,51526],{"class":55},[49,78843,415],{"class":66},[49,78845,51581],{"class":59},[49,78847,4185],{"class":66},[49,78849,51581],{"class":59},[49,78851,2240],{"class":66},[49,78853,51581],{"class":59},[49,78855,78856],{"class":66}," rgba",[49,78858,228],{"class":55},[49,78860,415],{"class":66},[49,78862,12525],{"class":55},[49,78864,415],{"class":66},[49,78866,12525],{"class":55},[49,78868,415],{"class":66},[49,78870,12525],{"class":55},[49,78872,78873],{"class":66},".2",[49,78875,2811],{"class":55},[49,78877,78878,78881,78883,78886,78888,78890,78892,78895,78897,78899,78901],{"class":51,"line":2713},[49,78879,78880],{"class":66},"      transform",[49,78882,51526],{"class":55},[49,78884,78885],{"class":66},"translate3d",[49,78887,228],{"class":55},[49,78889,415],{"class":66},[49,78891,12525],{"class":55},[49,78893,78894],{"class":66},"-4",[49,78896,51581],{"class":59},[49,78898,12525],{"class":55},[49,78900,415],{"class":66},[49,78902,2811],{"class":55},[49,78904,78905,78907,78909,78911],{"class":51,"line":8038},[49,78906,62114],{"class":66},[49,78908,51526],{"class":55},[49,78910,62119],{"class":66},[49,78912,1382],{"class":55},[49,78914,78915],{"class":51,"line":8062},[49,78916,2279],{"class":55},[49,78918,78919],{"class":51,"line":8067},[49,78920,2492],{"emptyLinePlaceholder":151},[49,78922,78923,78925,78927],{"class":51,"line":8073},[49,78924,78714],{"class":2055},[49,78926,55704],{"class":51389},[49,78928,15662],{"class":55},[49,78930,78931,78933,78935,78937,78939],{"class":51,"line":8100},[49,78932,54860],{"class":66},[49,78934,51526],{"class":55},[49,78936,533],{"class":66},[49,78938,550],{"class":59},[49,78940,1382],{"class":55},[49,78942,78943],{"class":51,"line":8105},[49,78944,2279],{"class":55},[49,78946,78947],{"class":51,"line":8111},[49,78948,2492],{"emptyLinePlaceholder":151},[49,78950,78951,78953,78955],{"class":51,"line":8123},[49,78952,78714],{"class":2055},[49,78954,62393],{"class":2055},[49,78956,15662],{"class":55},[49,78958,78959,78961,78963,78965,78967],{"class":51,"line":8135},[49,78960,55011],{"class":66},[49,78962,51526],{"class":55},[49,78964,869],{"class":66},[49,78966,51581],{"class":59},[49,78968,1382],{"class":55},[49,78970,78971,78973,78975,78977,78979],{"class":51,"line":8147},[49,78972,78781],{"class":66},[49,78974,51526],{"class":55},[49,78976,95],{"class":66},[49,78978,51581],{"class":59},[49,78980,1382],{"class":55},[49,78982,78983,78985,78987,78990],{"class":51,"line":9806},[49,78984,57505],{"class":66},[49,78986,51526],{"class":55},[49,78988,78989],{"class":66},"#666",[49,78991,1382],{"class":55},[49,78993,78994],{"class":51,"line":9831},[49,78995,2279],{"class":55},[49,78997,78998],{"class":51,"line":9854},[49,78999,2492],{"emptyLinePlaceholder":151},[49,79001,79002,79004,79007],{"class":51,"line":9878},[49,79003,78714],{"class":2055},[49,79005,79006],{"class":2055}," .price",[49,79008,15662],{"class":55},[49,79010,79011,79013,79015,79017,79019],{"class":51,"line":9883},[49,79012,55011],{"class":66},[49,79014,51526],{"class":55},[49,79016,969],{"class":66},[49,79018,51581],{"class":59},[49,79020,1382],{"class":55},[49,79022,79023,79025,79027,79030],{"class":51,"line":9888},[49,79024,57505],{"class":66},[49,79026,51526],{"class":55},[49,79028,79029],{"class":66},"firebrick",[49,79031,1382],{"class":55},[49,79033,79034],{"class":51,"line":9893},[49,79035,2279],{"class":55},[49,79037,79038],{"class":51,"line":9902},[49,79039,2492],{"emptyLinePlaceholder":151},[49,79041,79042,79044,79047],{"class":51,"line":9907},[49,79043,78714],{"class":2055},[49,79045,79046],{"class":2055}," .price::before",[49,79048,15662],{"class":55},[49,79050,79051,79054,79056,79059],{"class":51,"line":9913},[49,79052,79053],{"class":66},"      content",[49,79055,51526],{"class":55},[49,79057,79058],{"class":328},"'￥'",[49,79060,1382],{"class":55},[49,79062,79063,79065,79067,79069,79071],{"class":51,"line":9934},[49,79064,55011],{"class":66},[49,79066,51526],{"class":55},[49,79068,768],{"class":66},[49,79070,51581],{"class":59},[49,79072,1382],{"class":55},[49,79074,79075],{"class":51,"line":9940},[49,79076,2279],{"class":55},[49,79078,79079],{"class":51,"line":9954},[49,79080,2492],{"emptyLinePlaceholder":151},[49,79082,79083,79086],{"class":51,"line":9960},[49,79084,79085],{"class":2055},"    .filter",[49,79087,15662],{"class":55},[49,79089,79090,79092,79094,79096],{"class":51,"line":9987},[49,79091,55098],{"class":66},[49,79093,51526],{"class":55},[49,79095,51566],{"class":66},[49,79097,1382],{"class":55},[49,79099,79100,79102,79104,79106,79108],{"class":51,"line":9996},[49,79101,54860],{"class":66},[49,79103,51526],{"class":55},[49,79105,78663],{"class":66},[49,79107,51581],{"class":59},[49,79109,1382],{"class":55},[49,79111,79112,79114,79116,79118,79120],{"class":51,"line":10002},[49,79113,54795],{"class":66},[49,79115,51526],{"class":55},[49,79117,415],{"class":66},[49,79119,51645],{"class":66},[49,79121,1382],{"class":55},[49,79123,79124,79126,79128,79130,79132,79134],{"class":51,"line":10010},[49,79125,54784],{"class":66},[49,79127,51526],{"class":55},[49,79129,875],{"class":66},[49,79131,51581],{"class":59},[49,79133,78754],{"class":66},[49,79135,79136],{"class":59},"px\n",[49,79138,79139],{"class":51,"line":10015},[49,79140,2279],{"class":55},[49,79142,79143],{"class":51,"line":16694},[49,79144,2492],{"emptyLinePlaceholder":151},[49,79146,79147,79149,79151],{"class":51,"line":16700},[49,79148,79085],{"class":2055},[49,79150,1490],{"class":51389},[49,79152,15662],{"class":55},[49,79154,79155,79157,79159,79161,79163,79165,79167],{"class":51,"line":16723},[49,79156,54784],{"class":66},[49,79158,51526],{"class":55},[49,79160,95],{"class":66},[49,79162,51581],{"class":59},[49,79164,9040],{"class":66},[49,79166,51581],{"class":59},[49,79168,1382],{"class":55},[49,79170,79171,79173,79175,79177],{"class":51,"line":16729},[49,79172,61810],{"class":66},[49,79174,51526],{"class":55},[49,79176,61907],{"class":66},[49,79178,1382],{"class":55},[49,79180,79181,79183,79185,79187],{"class":51,"line":16752},[49,79182,57505],{"class":66},[49,79184,51526],{"class":55},[49,79186,78989],{"class":66},[49,79188,1382],{"class":55},[49,79190,79191,79193,79195,79197],{"class":51,"line":16766},[49,79192,64059],{"class":66},[49,79194,51526],{"class":55},[49,79196,54826],{"class":66},[49,79198,1382],{"class":55},[49,79200,79201,79203,79205,79207,79209],{"class":51,"line":16786},[49,79202,61839],{"class":66},[49,79204,51526],{"class":55},[49,79206,919],{"class":66},[49,79208,51581],{"class":59},[49,79210,1382],{"class":55},[49,79212,79213],{"class":51,"line":16792},[49,79214,2279],{"class":55},[49,79216,79217],{"class":51,"line":16803},[49,79218,2492],{"emptyLinePlaceholder":151},[49,79220,79221,79223,79225,79227],{"class":51,"line":16826},[49,79222,79085],{"class":2055},[49,79224,1490],{"class":51389},[49,79226,61989],{"class":2055},[49,79228,15662],{"class":55},[49,79230,79231,79233,79235,79238],{"class":51,"line":16848},[49,79232,54973],{"class":66},[49,79234,51526],{"class":55},[49,79236,79237],{"class":66},"#05943c",[49,79239,1382],{"class":55},[49,79241,79242,79244,79246,79248],{"class":51,"line":16853},[49,79243,57505],{"class":66},[49,79245,51526],{"class":55},[49,79247,60931],{"class":66},[49,79249,1382],{"class":55},[49,79251,79252],{"class":51,"line":16859},[49,79253,2279],{"class":55},[49,79255,79256,79258,79260],{"class":51,"line":16873},[49,79257,52506],{"class":55},[49,79259,143],{"class":51389},[49,79261,51396],{"class":55},[49,79263,79264,79266,79268],{"class":51,"line":16886},[49,79265,51874],{"class":55},[49,79267,51423],{"class":51389},[49,79269,51396],{"class":55},[49,79271,79272],{"class":51,"line":16891},[49,79273,2492],{"emptyLinePlaceholder":151},[49,79275,79276,79278,79280],{"class":51,"line":16905},[49,79277,1129],{"class":55},[49,79279,51889],{"class":51389},[49,79281,51396],{"class":55},[49,79283,79284,79286,79288,79290,79292,79295],{"class":51,"line":16910},[49,79285,52233],{"class":55},[49,79287,51700],{"class":51389},[49,79289,53575],{"class":2055},[49,79291,60],{"class":55},[49,79293,79294],{"class":328},"\"filter\"",[49,79296,51396],{"class":55},[49,79298,79299,79301,79303,79305,79307,79309,79312,79314,79316,79319,79321],{"class":51,"line":16916},[49,79300,51430],{"class":55},[49,79302,56],{"class":51389},[49,79304,61146],{"class":2055},[49,79306,60],{"class":55},[49,79308,61151],{"class":328},[49,79310,79311],{"class":2055}," data-index",[49,79313,60],{"class":55},[49,79315,3770],{"class":328},[49,79317,79318],{"class":55},">0-100元\u003C\u002F",[49,79320,56],{"class":51389},[49,79322,51396],{"class":55},[49,79324,79325,79327,79329,79331,79333,79335,79337,79339,79341,79344,79346],{"class":51,"line":16921},[49,79326,51430],{"class":55},[49,79328,56],{"class":51389},[49,79330,61146],{"class":2055},[49,79332,60],{"class":55},[49,79334,61151],{"class":328},[49,79336,79311],{"class":2055},[49,79338,60],{"class":55},[49,79340,3793],{"class":328},[49,79342,79343],{"class":55},">100-300元\u003C\u002F",[49,79345,56],{"class":51389},[49,79347,51396],{"class":55},[49,79349,79350,79352,79354,79356,79358,79360,79362,79364,79366,79369,79371],{"class":51,"line":16935},[49,79351,51430],{"class":55},[49,79353,56],{"class":51389},[49,79355,61146],{"class":2055},[49,79357,60],{"class":55},[49,79359,61151],{"class":328},[49,79361,79311],{"class":2055},[49,79363,60],{"class":55},[49,79365,3806],{"class":328},[49,79367,79368],{"class":55},">300元以上\u003C\u002F",[49,79370,56],{"class":51389},[49,79372,51396],{"class":55},[49,79374,79375,79377,79379,79381,79383,79385,79388,79390],{"class":51,"line":16940},[49,79376,51430],{"class":55},[49,79378,56],{"class":51389},[49,79380,61146],{"class":2055},[49,79382,60],{"class":55},[49,79384,61151],{"class":328},[49,79386,79387],{"class":55},">全部区间\u003C\u002F",[49,79389,56],{"class":51389},[49,79391,51396],{"class":55},[49,79393,79394,79396,79398],{"class":51,"line":16945},[49,79395,52506],{"class":55},[49,79397,51700],{"class":51389},[49,79399,51396],{"class":55},[49,79401,79402,79404,79406,79408,79410,79412],{"class":51,"line":16959},[49,79403,52233],{"class":55},[49,79405,51700],{"class":51389},[49,79407,53575],{"class":2055},[49,79409,60],{"class":55},[49,79411,62697],{"class":328},[49,79413,51396],{"class":55},[49,79415,79416],{"class":51,"line":16971},[49,79417,79418],{"class":283},"    \u003C!-- \u003Cdiv class=\"item\">\n",[49,79420,79421],{"class":51,"line":16976},[49,79422,79423],{"class":283},"      \u003Cimg src=\"\" alt=\"\">\n",[49,79425,79426],{"class":51,"line":16989},[49,79427,79428],{"class":283},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[49,79430,79431],{"class":51,"line":16994},[49,79432,79433],{"class":283},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[49,79435,79436],{"class":51,"line":16999},[49,79437,79438],{"class":283},"    \u003C\u002Fdiv> -->\n",[49,79440,79441,79443,79445],{"class":51,"line":17004},[49,79442,52506],{"class":55},[49,79444,51700],{"class":51389},[49,79446,51396],{"class":55},[49,79448,79449,79451,79453],{"class":51,"line":17017},[49,79450,52233],{"class":55},[49,79452,51902],{"class":51389},[49,79454,51396],{"class":55},[49,79456,79457],{"class":51,"line":17022},[49,79458,79459],{"class":283},"    \u002F\u002F 2. 初始化数据\n",[49,79461,79462,79464,79467,79469],{"class":51,"line":32722},[49,79463,11311],{"class":59},[49,79465,79466],{"class":66}," goodsList",[49,79468,13654],{"class":59},[49,79470,55536],{"class":55},[49,79472,79473],{"class":51,"line":32728},[49,79474,79475],{"class":55},"      {\n",[49,79477,79478,79481,79484],{"class":51,"line":32734},[49,79479,79480],{"class":55},"        id: ",[49,79482,79483],{"class":328},"'4001172'",[49,79485,31555],{"class":55},[49,79487,79488,79491,79494],{"class":51,"line":32740},[49,79489,79490],{"class":55},"        name: ",[49,79492,79493],{"class":328},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[49,79495,31555],{"class":55},[49,79497,79498,79501,79504],{"class":51,"line":32746},[49,79499,79500],{"class":55},"        price: ",[49,79502,79503],{"class":328},"'289.00'",[49,79505,31555],{"class":55},[49,79507,79508,79511,79514],{"class":51,"line":32757},[49,79509,79510],{"class":55},"        picture: ",[49,79512,79513],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[49,79515,31555],{"class":55},[49,79517,79518],{"class":51,"line":32763},[49,79519,77981],{"class":55},[49,79521,79522],{"class":51,"line":32783},[49,79523,79475],{"class":55},[49,79525,79526,79528,79531],{"class":51,"line":32789},[49,79527,79480],{"class":55},[49,79529,79530],{"class":328},"'4001594'",[49,79532,31555],{"class":55},[49,79534,79535,79537,79540],{"class":51,"line":32800},[49,79536,79490],{"class":55},[49,79538,79539],{"class":328},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[49,79541,31555],{"class":55},[49,79543,79544,79546,79549],{"class":51,"line":32806},[49,79545,79500],{"class":55},[49,79547,79548],{"class":328},"'288.00'",[49,79550,31555],{"class":55},[49,79552,79553,79555,79558],{"class":51,"line":32812},[49,79554,79510],{"class":55},[49,79556,79557],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[49,79559,31555],{"class":55},[49,79561,79562],{"class":51,"line":32818},[49,79563,77981],{"class":55},[49,79565,79566],{"class":51,"line":32824},[49,79567,79475],{"class":55},[49,79569,79570,79572,79575],{"class":51,"line":32830},[49,79571,79480],{"class":55},[49,79573,79574],{"class":328},"'4001009'",[49,79576,31555],{"class":55},[49,79578,79579,79581,79584],{"class":51,"line":32836},[49,79580,79490],{"class":55},[49,79582,79583],{"class":328},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[49,79585,31555],{"class":55},[49,79587,79588,79590,79593],{"class":51,"line":32842},[49,79589,79500],{"class":55},[49,79591,79592],{"class":328},"'109.00'",[49,79594,31555],{"class":55},[49,79596,79597,79599,79602],{"class":51,"line":32862},[49,79598,79510],{"class":55},[49,79600,79601],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[49,79603,31555],{"class":55},[49,79605,79606],{"class":51,"line":32868},[49,79607,77981],{"class":55},[49,79609,79610],{"class":51,"line":32884},[49,79611,79475],{"class":55},[49,79613,79614,79616,79619],{"class":51,"line":32890},[49,79615,79480],{"class":55},[49,79617,79618],{"class":328},"'4001874'",[49,79620,31555],{"class":55},[49,79622,79623,79625,79628],{"class":51,"line":32904},[49,79624,79490],{"class":55},[49,79626,79627],{"class":328},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[49,79629,31555],{"class":55},[49,79631,79632,79634,79637],{"class":51,"line":32910},[49,79633,79500],{"class":55},[49,79635,79636],{"class":328},"'488.00'",[49,79638,31555],{"class":55},[49,79640,79641,79643,79646],{"class":51,"line":32925},[49,79642,79510],{"class":55},[49,79644,79645],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[49,79647,31555],{"class":55},[49,79649,79650],{"class":51,"line":32931},[49,79651,77981],{"class":55},[49,79653,79654],{"class":51,"line":32940},[49,79655,79475],{"class":55},[49,79657,79658,79660,79663],{"class":51,"line":32946},[49,79659,79480],{"class":55},[49,79661,79662],{"class":328},"'4001649'",[49,79664,31555],{"class":55},[49,79666,79667,79669,79672],{"class":51,"line":32955},[49,79668,79490],{"class":55},[49,79670,79671],{"class":328},"'大师监制龙泉青瓷茶叶罐'",[49,79673,31555],{"class":55},[49,79675,79676,79678,79681],{"class":51,"line":32961},[49,79677,79500],{"class":55},[49,79679,79680],{"class":328},"'139.00'",[49,79682,31555],{"class":55},[49,79684,79685,79687,79690],{"class":51,"line":32967},[49,79686,79510],{"class":55},[49,79688,79689],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[49,79691,31555],{"class":55},[49,79693,79694],{"class":51,"line":32976},[49,79695,77981],{"class":55},[49,79697,79698],{"class":51,"line":32982},[49,79699,79475],{"class":55},[49,79701,79702,79704,79707],{"class":51,"line":32993},[49,79703,79480],{"class":55},[49,79705,79706],{"class":328},"'3997185'",[49,79708,31555],{"class":55},[49,79710,79711,79713,79716],{"class":51,"line":32999},[49,79712,79490],{"class":55},[49,79714,79715],{"class":328},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[49,79717,31555],{"class":55},[49,79719,79720,79722,79725],{"class":51,"line":33018},[49,79721,79500],{"class":55},[49,79723,79724],{"class":328},"'108.00'",[49,79726,31555],{"class":55},[49,79728,79729,79731,79734],{"class":51,"line":33024},[49,79730,79510],{"class":55},[49,79732,79733],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[49,79735,31555],{"class":55},[49,79737,79738],{"class":51,"line":33035},[49,79739,77981],{"class":55},[49,79741,79742],{"class":51,"line":33041},[49,79743,79475],{"class":55},[49,79745,79746,79748,79751],{"class":51,"line":33061},[49,79747,79480],{"class":55},[49,79749,79750],{"class":328},"'3997403'",[49,79752,31555],{"class":55},[49,79754,79755,79757,79760],{"class":51,"line":33077},[49,79756,79490],{"class":55},[49,79758,79759],{"class":328},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[49,79761,31555],{"class":55},[49,79763,79764,79766,79769],{"class":51,"line":33083},[49,79765,79500],{"class":55},[49,79767,79768],{"class":328},"'100.00'",[49,79770,31555],{"class":55},[49,79772,79773,79775,79778],{"class":51,"line":33097},[49,79774,79510],{"class":55},[49,79776,79777],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[49,79779,31555],{"class":55},[49,79781,79782],{"class":51,"line":33103},[49,79783,77981],{"class":55},[49,79785,79786],{"class":51,"line":33109},[49,79787,79475],{"class":55},[49,79789,79790,79792,79795],{"class":51,"line":33120},[49,79791,79480],{"class":55},[49,79793,79794],{"class":328},"'3998274'",[49,79796,31555],{"class":55},[49,79798,79799,79801,79804],{"class":51,"line":33126},[49,79800,79490],{"class":55},[49,79802,79803],{"class":328},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[49,79805,31555],{"class":55},[49,79807,79808,79810,79812],{"class":51,"line":33132},[49,79809,79500],{"class":55},[49,79811,79680],{"class":328},[49,79813,31555],{"class":55},[49,79815,79816,79818,79821],{"class":51,"line":33142},[49,79817,79510],{"class":55},[49,79819,79820],{"class":328},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[49,79822,31555],{"class":55},[49,79824,79825],{"class":51,"line":33148},[49,79826,77981],{"class":55},[49,79828,79829],{"class":51,"line":33159},[49,79830,53198],{"class":55},[49,79832,79833],{"class":51,"line":33165},[49,79834,2492],{"emptyLinePlaceholder":151},[49,79836,79837],{"class":51,"line":33175},[49,79838,79839],{"class":283},"    \u002F\u002F 1.渲染函数\n",[49,79841,79842,79844,79846,79848,79850],{"class":51,"line":33180},[49,79843,70173],{"class":59},[49,79845,70176],{"class":2055},[49,79847,228],{"class":55},[49,79849,3972],{"class":126},[49,79851,12532],{"class":55},[49,79853,79854],{"class":51,"line":33186},[49,79855,79856],{"class":283},"      \u002F\u002F 声明空字符串\n",[49,79858,79859,79862,79865,79867],{"class":51,"line":33235},[49,79860,79861],{"class":59},"      let",[49,79863,79864],{"class":55}," str ",[49,79866,60],{"class":59},[49,79868,70193],{"class":328},[49,79870,79871],{"class":51,"line":33282},[49,79872,70198],{"class":283},[49,79874,79875,79877,79880,79882,79885,79888],{"class":51,"line":33287},[49,79876,58096],{"class":55},[49,79878,79879],{"class":2055},"forEach",[49,79881,228],{"class":55},[49,79883,79884],{"class":126},"item",[49,79886,79887],{"class":59}," =>",[49,79889,15662],{"class":55},[49,79891,79892,79894,79897,79900,79902,79905,79907,79910,79913,79915],{"class":51,"line":33293},[49,79893,61359],{"class":59},[49,79895,79896],{"class":55}," { ",[49,79898,79899],{"class":66},"name",[49,79901,12525],{"class":55},[49,79903,79904],{"class":66},"price",[49,79906,12525],{"class":55},[49,79908,79909],{"class":66},"picture",[49,79911,79912],{"class":55}," } ",[49,79914,60],{"class":59},[49,79916,79917],{"class":55}," item\n",[49,79919,79920,79923,79925],{"class":51,"line":33312},[49,79921,79922],{"class":55},"        str ",[49,79924,9567],{"class":59},[49,79926,70257],{"class":328},[49,79928,79929],{"class":51,"line":33318},[49,79930,79931],{"class":328},"          \u003Cdiv class=\"item\">\n",[49,79933,79934,79937,79939],{"class":51,"line":33338},[49,79935,79936],{"class":328},"            \u003Cimg src=\"${",[49,79938,79909],{"class":55},[49,79940,79941],{"class":328},"}\" alt=\"\">\n",[49,79943,79944,79947,79949],{"class":51,"line":33344},[49,79945,79946],{"class":328},"            \u003Cp class=\"name\">${",[49,79948,79899],{"class":55},[49,79950,79951],{"class":328},"}\u003C\u002Fp>\n",[49,79953,79954,79957,79959],{"class":51,"line":33350},[49,79955,79956],{"class":328},"            \u003Cp class=\"price\">${",[49,79958,79904],{"class":55},[49,79960,79951],{"class":328},[49,79962,79963],{"class":51,"line":33360},[49,79964,79965],{"class":328},"          \u003C\u002Fdiv>\n",[49,79967,79968],{"class":51,"line":33365},[49,79969,79970],{"class":328},"        `\n",[49,79972,79973],{"class":51,"line":33371},[49,79974,64904],{"class":55},[49,79976,79977],{"class":51,"line":33387},[49,79978,79979],{"class":283},"      \u002F\u002F 追加给List\n",[49,79981,79982,79984,79986,79988,79991,79993,79995],{"class":51,"line":33432},[49,79983,55860],{"class":55},[49,79985,54488],{"class":2055},[49,79987,228],{"class":55},[49,79989,79990],{"class":328},"'.list'",[49,79992,74338],{"class":55},[49,79994,60],{"class":59},[49,79996,74074],{"class":55},[49,79998,79999],{"class":51,"line":33438},[49,80000,2279],{"class":55},[49,80002,80003],{"class":51,"line":33444},[49,80004,80005],{"class":283},"    \u002F\u002F 页面一打开就需要渲染\n",[49,80007,80008,80011],{"class":51,"line":33450},[49,80009,80010],{"class":2055},"    render",[49,80012,80013],{"class":55},"(goodsList)\n",[49,80015,80016],{"class":51,"line":33461},[49,80017,80018],{"class":283},"    \u002F\u002F 2.过滤筛选\n",[49,80020,80021,80023,80025,80027,80030,80032,80034,80036,80038,80040,80042,80044],{"class":51,"line":33467},[49,80022,52496],{"class":55},[49,80024,54488],{"class":2055},[49,80026,228],{"class":55},[49,80028,80029],{"class":328},"'.filter'",[49,80031,30915],{"class":55},[49,80033,57902],{"class":2055},[49,80035,228],{"class":55},[49,80037,57907],{"class":328},[49,80039,12525],{"class":55},[49,80041,298],{"class":126},[49,80043,79887],{"class":59},[49,80045,15662],{"class":55},[49,80047,80048],{"class":51,"line":33473},[49,80049,80050],{"class":283},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[49,80052,80053,80055,80057,80060,80062,80064,80066,80068],{"class":51,"line":33479},[49,80054,58317],{"class":59},[49,80056,79896],{"class":55},[49,80058,80059],{"class":66},"tagName",[49,80061,12525],{"class":55},[49,80063,31626],{"class":66},[49,80065,79912],{"class":55},[49,80067,60],{"class":59},[49,80069,80070],{"class":55}," e.target\n",[49,80072,80073],{"class":51,"line":33497},[49,80074,80075],{"class":283},"      \u002F\u002F 判断\n",[49,80077,80078,80080,80082,80084,80086],{"class":51,"line":33511},[49,80079,54569],{"class":59},[49,80081,67123],{"class":55},[49,80083,54575],{"class":59},[49,80085,68345],{"class":328},[49,80087,12532],{"class":55},[49,80089,80090],{"class":51,"line":33520},[49,80091,80092],{"class":283},"        \u002F\u002F console.log(11)\n",[49,80094,80095],{"class":51,"line":33529},[49,80096,80097],{"class":283},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[49,80099,80100],{"class":51,"line":33538},[49,80101,80102],{"class":283},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[49,80104,80105,80107,80109,80111],{"class":51,"line":33547},[49,80106,51919],{"class":59},[49,80108,51922],{"class":55},[49,80110,60],{"class":59},[49,80112,80113],{"class":55}," goodsList\n",[49,80115,80116,80118,80121,80123,80126],{"class":51,"line":33553},[49,80117,2589],{"class":59},[49,80119,80120],{"class":55}," (dataset.index ",[49,80122,54575],{"class":59},[49,80124,80125],{"class":328}," '1'",[49,80127,12532],{"class":55},[49,80129,80130,80133,80135,80138,80141,80143,80145,80147,80150,80152,80154,80157,80159,80161,80163],{"class":51,"line":33559},[49,80131,80132],{"class":55},"          arr ",[49,80134,60],{"class":59},[49,80136,80137],{"class":55}," goodsList.",[49,80139,80140],{"class":2055},"filter",[49,80142,228],{"class":55},[49,80144,79884],{"class":126},[49,80146,79887],{"class":59},[49,80148,80149],{"class":55}," item.price ",[49,80151,1802],{"class":59},[49,80153,4185],{"class":66},[49,80155,80156],{"class":59}," &&",[49,80158,80149],{"class":55},[49,80160,1680],{"class":59},[49,80162,5844],{"class":66},[49,80164,81],{"class":55},[49,80166,80167,80170,80172,80174,80176,80178,80181],{"class":51,"line":33567},[49,80168,80169],{"class":55},"        } ",[49,80171,1793],{"class":59},[49,80173,1796],{"class":59},[49,80175,80120],{"class":55},[49,80177,54575],{"class":59},[49,80179,80180],{"class":328}," '2'",[49,80182,12532],{"class":55},[49,80184,80185,80187,80189,80191,80193,80195,80197,80199,80201,80203,80205,80207,80209,80211,80214],{"class":51,"line":33572},[49,80186,80132],{"class":55},[49,80188,60],{"class":59},[49,80190,80137],{"class":55},[49,80192,80140],{"class":2055},[49,80194,228],{"class":55},[49,80196,79884],{"class":126},[49,80198,79887],{"class":59},[49,80200,80149],{"class":55},[49,80202,1802],{"class":59},[49,80204,5844],{"class":66},[49,80206,80156],{"class":59},[49,80208,80149],{"class":55},[49,80210,1680],{"class":59},[49,80212,80213],{"class":66}," 300",[49,80215,81],{"class":55},[49,80217,80218,80220,80222,80224,80226,80228,80231],{"class":51,"line":33578},[49,80219,80169],{"class":55},[49,80221,1793],{"class":59},[49,80223,1796],{"class":59},[49,80225,80120],{"class":55},[49,80227,54575],{"class":59},[49,80229,80230],{"class":328}," '3'",[49,80232,12532],{"class":55},[49,80234,80235,80237,80239,80241,80243,80245,80247,80249,80251,80253,80255],{"class":51,"line":33589},[49,80236,80132],{"class":55},[49,80238,60],{"class":59},[49,80240,80137],{"class":55},[49,80242,80140],{"class":2055},[49,80244,228],{"class":55},[49,80246,79884],{"class":126},[49,80248,79887],{"class":59},[49,80250,80149],{"class":55},[49,80252,1802],{"class":59},[49,80254,80213],{"class":66},[49,80256,81],{"class":55},[49,80258,80259],{"class":51,"line":33595},[49,80260,2621],{"class":55},[49,80262,80263],{"class":51,"line":33615},[49,80264,80265],{"class":283},"        \u002F\u002F 渲染函数\n",[49,80267,80268,80270],{"class":51,"line":33621},[49,80269,70497],{"class":2055},[49,80271,52501],{"class":55},[49,80273,80274],{"class":51,"line":33627},[49,80275,52487],{"class":55},[49,80277,80278],{"class":51,"line":33633},[49,80279,2492],{"emptyLinePlaceholder":151},[49,80281,80282],{"class":51,"line":33650},[49,80283,33550],{"class":55},[49,80285,80286,80288,80290],{"class":51,"line":33656},[49,80287,52506],{"class":55},[49,80289,51902],{"class":51389},[49,80291,51396],{"class":55},[49,80293,80294,80296,80298],{"class":51,"line":33662},[49,80295,51874],{"class":55},[49,80297,51889],{"class":51389},[49,80299,51396],{"class":55},[49,80301,80302],{"class":51,"line":33668},[49,80303,2492],{"emptyLinePlaceholder":151},[49,80305,80306,80308,80310],{"class":51,"line":33674},[49,80307,51874],{"class":55},[49,80309,50724],{"class":51389},[49,80311,51396],{"class":55},[166,80313,80315],{"id":80314},"_410-深入了解对象","4.10 深入了解对象",[195,80317,80319],{"id":80318},"_4101-创建对象","4.10.1 创建对象",[14,80321,80322],{},[1554,80323],{"alt":44,"src":80324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80326,80327],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[195,80329,80331],{"id":80330},"_4102-构造函数","4.10.2 构造函数",[14,80333,80334,80337],{},[373,80335,80336],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80339,80340,80343],{},[373,80341,80342],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[39,80345,80347],{"className":50722,"code":80346,"language":50724,"meta":44,"style":44},"\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",[46,80348,80349,80357,80362,80383,80396,80408,80420,80424,80429,80456,80461,80488],{"__ignoreMap":44},[49,80350,80351,80353,80355],{"class":51,"line":52},[49,80352,1129],{"class":55},[49,80354,51902],{"class":51389},[49,80356,51396],{"class":55},[49,80358,80359],{"class":51,"line":84},[49,80360,80361],{"class":283},"\u002F\u002F例：\n",[49,80363,80364,80366,80369,80371,80373,80375,80377,80379,80381],{"class":51,"line":109},[49,80365,54538],{"class":59},[49,80367,80368],{"class":2055}," Pig",[49,80370,228],{"class":55},[49,80372,79899],{"class":126},[49,80374,76],{"class":55},[49,80376,70310],{"class":126},[49,80378,76],{"class":55},[49,80380,70327],{"class":126},[49,80382,12532],{"class":55},[49,80384,80385,80388,80391,80393],{"class":51,"line":120},[49,80386,80387],{"class":66},"    this",[49,80389,80390],{"class":55},".name",[49,80392,60],{"class":59},[49,80394,80395],{"class":55},"name\n",[49,80397,80398,80400,80403,80405],{"class":51,"line":135},[49,80399,80387],{"class":66},[49,80401,80402],{"class":55},".age",[49,80404,60],{"class":59},[49,80406,80407],{"class":55},"age\n",[49,80409,80410,80412,80415,80417],{"class":51,"line":1306},[49,80411,80387],{"class":66},[49,80413,80414],{"class":55},".gender",[49,80416,60],{"class":59},[49,80418,80419],{"class":55},"gender    \n",[49,80421,80422],{"class":51,"line":1312},[49,80423,1657],{"class":55},[49,80425,80426],{"class":51,"line":1403},[49,80427,80428],{"class":283},"\u002F\u002F创建佩奇对象\n",[49,80430,80431,80433,80436,80438,80440,80442,80445,80447,80449,80451,80454],{"class":51,"line":1409},[49,80432,6882],{"class":59},[49,80434,80435],{"class":66}," Peppa",[49,80437,11807],{"class":59},[49,80439,80368],{"class":2055},[49,80441,228],{"class":55},[49,80443,80444],{"class":328},"'佩奇'",[49,80446,76],{"class":55},[49,80448,566],{"class":66},[49,80450,76],{"class":55},[49,80452,80453],{"class":328},"'女'",[49,80455,81],{"class":55},[49,80457,80458],{"class":51,"line":1421},[49,80459,80460],{"class":283},"\u002F\u002F创建乔治对象\n",[49,80462,80463,80465,80468,80470,80472,80474,80477,80479,80481,80483,80486],{"class":51,"line":1704},[49,80464,6882],{"class":59},[49,80466,80467],{"class":66}," George",[49,80469,11807],{"class":59},[49,80471,80368],{"class":2055},[49,80473,228],{"class":55},[49,80475,80476],{"class":328},"'乔治'",[49,80478,76],{"class":55},[49,80480,73],{"class":66},[49,80482,76],{"class":55},[49,80484,80485],{"class":328},"'男'",[49,80487,81],{"class":55},[49,80489,80490,80492,80494],{"class":51,"line":1709},[49,80491,51874],{"class":55},[49,80493,51902],{"class":51389},[49,80495,51396],{"class":55},[14,80497,80498],{},[1554,80499],{"alt":44,"src":80500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80502,80503],{},[1554,80504],{"alt":44,"src":80505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80507,80508],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80510,80511],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80513,80514],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80516,80517],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80519,80520],{},"这里用等号是因为：对象.属性=值",[14,80522,80523],{},"①利用对象字面量创建对象",[14,80525,80526],{},"const o={",[14,80528,80529],{},"name:'pink'",[14,80531,80532],{},"} ②利用new Object创建对象",[14,80534,80535],{},"const o=new Object({name:'pink'})",[14,80537,80538],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80540,80541],{},"构造函数创建对象的执行过程：",[14,80543,80544],{},[1554,80545],{"alt":44,"src":80546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[195,80548,80550],{"id":80549},"_4103-实例成员","4.10.3 实例成员",[14,80552,80553],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[178,80555,80556,80559,80562],{},[181,80557,80558],{},"实例对象的属性和方法即为实例成员",[181,80560,80561],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[181,80563,80564],{},"构造函数创建的实例对象彼此独立互不影响",[195,80566,80568],{"id":80567},"_4104-静态成员","4.10.4 静态成员",[14,80570,80571],{},[1554,80572],{"alt":44,"src":80573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80575,80576],{},"静态成员有Date.now() Math.PI Math.random()",[14,80578,80579],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80581,80582],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80584,80585],{},"function Pig(name) n {",[14,80587,80588],{},"this.name=name",[14,80590,1165],{},[14,80592,80593],{},"Pig.eyes=2",[14,80595,80596],{},"Pig.sayHai=function () { console.log(this) }",[14,80598,80599],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80601,80602],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80604,11422],{},[178,80606,80607,80610,80613,80616,80619],{},[181,80608,80609],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[181,80611,80612],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[181,80614,80615],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[181,80617,80618],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[181,80620,80621],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80623,80624],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[195,80626,80628],{"id":80627},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80630,80631],{},"内置构造函数包含：",[14,80633,80634],{},[1554,80635],{"alt":44,"src":80636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80638,80639],{},[1554,80640],{"alt":44,"src":80641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80643,80644],{},"这些基本数据类型，js对他们进行了包装",[51902,80646,80647],{},"\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",[22088,80649,80651],{"id":80650},"_41051-object","4.10.5.1 Object",[14,80653,80654],{},"Object 是内置的构造函数，用于创建普通对象",[14,80656,80657],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[39,80659,80661],{"className":50722,"code":80660,"language":50724,"meta":44,"style":44},"const user=new Object({name:'小明',age:15})\n",[46,80662,80663],{"__ignoreMap":44},[49,80664,80665],{"class":51,"line":52},[49,80666,80660],{"class":55},[14,80668,80669],{},"三个常用的静态方法：",[23000,80671,80673],{"id":80672},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80675,80676],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80678,80679],{},[1554,80680],{"alt":44,"src":80681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80683,80684],{},[1554,80685],{"alt":44,"src":80686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[39,80688,80690],{"className":53156,"code":80689,"language":53158,"meta":44,"style":44},"\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",[46,80691,80692,80700,80708,80713,80718,80723,80728,80733,80738,80746],{"__ignoreMap":44},[49,80693,80694,80696,80698],{"class":51,"line":52},[49,80695,1129],{"class":55},[49,80697,51889],{"class":51389},[49,80699,51396],{"class":55},[49,80701,80702,80704,80706],{"class":51,"line":84},[49,80703,52233],{"class":55},[49,80705,51902],{"class":51389},[49,80707,51396],{"class":55},[49,80709,80710],{"class":51,"line":109},[49,80711,80712],{"class":55},"    const o = { name: 'pink', age: 6 }\n",[49,80714,80715],{"class":51,"line":120},[49,80716,80717],{"class":55},"    \u002F\u002F 获得所有属性名\n",[49,80719,80720],{"class":51,"line":135},[49,80721,80722],{"class":55},"    const arr = Object.keys(o)\n",[49,80724,80725],{"class":51,"line":1306},[49,80726,80727],{"class":55},"    console.log(arr)\n",[49,80729,80730],{"class":51,"line":1312},[49,80731,80732],{"class":55},"    \u002F\u002F 获得所有属性值\n",[49,80734,80735],{"class":51,"line":1403},[49,80736,80737],{"class":55},"    console.log(Object.values(o))\n",[49,80739,80740,80742,80744],{"class":51,"line":1409},[49,80741,52506],{"class":55},[49,80743,51902],{"class":51389},[49,80745,51396],{"class":55},[49,80747,80748,80750,80752],{"class":51,"line":1421},[49,80749,51874],{"class":55},[49,80751,51889],{"class":51389},[49,80753,51396],{"class":55},[23000,80755,80757],{"id":80756},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80759,80760],{},"Object.assign(oo,o)",[14,80762,80763],{},"后的东西添加给前 是追加",[14,80765,80766],{},[1554,80767],{"alt":44,"src":80768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80770,80771],{},[1554,80772],{"alt":44,"src":80773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[39,80775,80777],{"className":53156,"code":80776,"language":53158,"meta":44,"style":44},"\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",[46,80778,80779,80787,80795,80799,80803,80807,80811,80815,80819,80824,80829,80834,80839,80844,80852],{"__ignoreMap":44},[49,80780,80781,80783,80785],{"class":51,"line":52},[49,80782,1129],{"class":55},[49,80784,51889],{"class":51389},[49,80786,51396],{"class":55},[49,80788,80789,80791,80793],{"class":51,"line":84},[49,80790,52233],{"class":55},[49,80792,51902],{"class":51389},[49,80794,51396],{"class":55},[49,80796,80797],{"class":51,"line":109},[49,80798,80712],{"class":55},[49,80800,80801],{"class":51,"line":120},[49,80802,80717],{"class":55},[49,80804,80805],{"class":51,"line":135},[49,80806,80722],{"class":55},[49,80808,80809],{"class":51,"line":1306},[49,80810,80727],{"class":55},[49,80812,80813],{"class":51,"line":1312},[49,80814,80732],{"class":55},[49,80816,80817],{"class":51,"line":1403},[49,80818,80737],{"class":55},[49,80820,80821],{"class":51,"line":1409},[49,80822,80823],{"class":55},"    const oo = {}\n",[49,80825,80826],{"class":51,"line":1421},[49,80827,80828],{"class":55},"    Object.assign(oo, o)\n",[49,80830,80831],{"class":51,"line":1704},[49,80832,80833],{"class":55},"    console.log(oo)\n",[49,80835,80836],{"class":51,"line":1709},[49,80837,80838],{"class":55},"    Object.assign(o, { gender: '女' })\n",[49,80840,80841],{"class":51,"line":1715},[49,80842,80843],{"class":55},"    console.log(o)\n",[49,80845,80846,80848,80850],{"class":51,"line":1720},[49,80847,52506],{"class":55},[49,80849,51902],{"class":51389},[49,80851,51396],{"class":55},[49,80853,80854,80856,80858],{"class":51,"line":1734},[49,80855,51874],{"class":55},[49,80857,51889],{"class":51389},[49,80859,51396],{"class":55},[14,80861,80862],{},[1554,80863],{"alt":44,"src":80864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22088,80866,80868],{"id":80867},"_41052-array","4.10.5.2 Array",[14,80870,80871],{},"Array 是内置的构造函数，用于创建数组",[14,80873,80874],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[39,80876,80878],{"className":50722,"code":80877,"language":50724,"meta":44,"style":44},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[46,80879,80880,80885],{"__ignoreMap":44},[49,80881,80882],{"class":51,"line":52},[49,80883,80884],{"class":55},"const arr=new Array(3,5)\n",[49,80886,80887],{"class":51,"line":84},[49,80888,80889],{"class":55},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80891,80892],{},"Array的实例方法，这个方法是实例成员",[14,80894,80895],{},[1554,80896],{"alt":44,"src":80897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23000,80899,80901],{"id":80900},"_410521-reduce","4.10.5.2.1 reduce",[14,80903,80904],{},[1554,80905],{"alt":44,"src":80906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[39,80908,80910],{"className":53156,"code":80909,"language":53158,"meta":44,"style":44},"\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",[46,80911,80912,80920,80928,80933,80938,80943,80948,80952,80957,80962,80967,80971,80976,80981,80985,80990,80995,81000,81008],{"__ignoreMap":44},[49,80913,80914,80916,80918],{"class":51,"line":52},[49,80915,1129],{"class":55},[49,80917,51889],{"class":51389},[49,80919,51396],{"class":55},[49,80921,80922,80924,80926],{"class":51,"line":84},[49,80923,52233],{"class":55},[49,80925,51902],{"class":51389},[49,80927,51396],{"class":55},[49,80929,80930],{"class":51,"line":109},[49,80931,80932],{"class":55},"    const arr = [1, 5, 8]\n",[49,80934,80935],{"class":51,"line":120},[49,80936,80937],{"class":55},"    \u002F\u002F 1.没有初始值\n",[49,80939,80940],{"class":51,"line":135},[49,80941,80942],{"class":55},"    const total = arr.reduce(function (prev, current) {\n",[49,80944,80945],{"class":51,"line":1306},[49,80946,80947],{"class":55},"      return prev + current\n",[49,80949,80950],{"class":51,"line":1312},[49,80951,33550],{"class":55},[49,80953,80954],{"class":51,"line":1403},[49,80955,80956],{"class":55},"    console.log(total)   \u002F\u002F14\n",[49,80958,80959],{"class":51,"line":1409},[49,80960,80961],{"class":55},"    \u002F\u002F 2.有初始值\n",[49,80963,80964],{"class":51,"line":1421},[49,80965,80966],{"class":55},"    const total1 = arr.reduce(function (prev, current) {\n",[49,80968,80969],{"class":51,"line":1704},[49,80970,80947],{"class":55},[49,80972,80973],{"class":51,"line":1709},[49,80974,80975],{"class":55},"    }, 10)\n",[49,80977,80978],{"class":51,"line":1715},[49,80979,80980],{"class":55},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[49,80982,80983],{"class":51,"line":1720},[49,80984,2492],{"emptyLinePlaceholder":151},[49,80986,80987],{"class":51,"line":1734},[49,80988,80989],{"class":55},"    \u002F\u002F 3.箭头函数写法\n",[49,80991,80992],{"class":51,"line":1739},[49,80993,80994],{"class":55},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[49,80996,80997],{"class":51,"line":1745},[49,80998,80999],{"class":55},"    console.log(total2)   \u002F\u002F24\n",[49,81001,81002,81004,81006],{"class":51,"line":1766},[49,81003,52506],{"class":55},[49,81005,51902],{"class":51389},[49,81007,51396],{"class":55},[49,81009,81010,81012,81014],{"class":51,"line":1771},[49,81011,51874],{"class":55},[49,81013,51889],{"class":51389},[49,81015,51396],{"class":55},[14,81017,81018],{},"执行过程：",[178,81020,81021,81024,81027],{},[181,81022,81023],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[181,81025,81026],{},"每一次循环，把返回值给作为下一次循环的上一次值",[181,81028,81029],{},"如果有起始值，则起始值作为上一次值",[39,81031,81033],{"className":53156,"code":81032,"language":53158,"meta":44,"style":44},"\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",[46,81034,81035,81043,81051,81055,81059,81063,81067,81071,81075,81080,81085,81090,81095,81100,81104,81108,81112,81116,81120,81124,81129,81133,81138,81142,81147,81152,81156,81160,81164,81172],{"__ignoreMap":44},[49,81036,81037,81039,81041],{"class":51,"line":52},[49,81038,1129],{"class":55},[49,81040,51889],{"class":51389},[49,81042,51396],{"class":55},[49,81044,81045,81047,81049],{"class":51,"line":84},[49,81046,52233],{"class":55},[49,81048,51902],{"class":51389},[49,81050,51396],{"class":55},[49,81052,81053],{"class":51,"line":109},[49,81054,80932],{"class":55},[49,81056,81057],{"class":51,"line":120},[49,81058,80937],{"class":55},[49,81060,81061],{"class":51,"line":135},[49,81062,80942],{"class":55},[49,81064,81065],{"class":51,"line":1306},[49,81066,80947],{"class":55},[49,81068,81069],{"class":51,"line":1312},[49,81070,33550],{"class":55},[49,81072,81073],{"class":51,"line":1403},[49,81074,80956],{"class":55},[49,81076,81077],{"class":51,"line":1409},[49,81078,81079],{"class":55},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[49,81081,81082],{"class":51,"line":1421},[49,81083,81084],{"class":55},"    \u002F\u002F     1              5                    6\n",[49,81086,81087],{"class":51,"line":1704},[49,81088,81089],{"class":55},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[49,81091,81092],{"class":51,"line":1709},[49,81093,81094],{"class":55},"    \u002F\u002F     6              8                    14\n",[49,81096,81097],{"class":51,"line":1715},[49,81098,81099],{"class":55},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[49,81101,81102],{"class":51,"line":1720},[49,81103,80961],{"class":55},[49,81105,81106],{"class":51,"line":1734},[49,81107,80966],{"class":55},[49,81109,81110],{"class":51,"line":1739},[49,81111,80947],{"class":55},[49,81113,81114],{"class":51,"line":1745},[49,81115,80975],{"class":55},[49,81117,81118],{"class":51,"line":1766},[49,81119,80980],{"class":55},[49,81121,81122],{"class":51,"line":1771},[49,81123,81079],{"class":55},[49,81125,81126],{"class":51,"line":1785},[49,81127,81128],{"class":55},"    \u002F\u002F     10             1                     11\n",[49,81130,81131],{"class":51,"line":1790},[49,81132,81089],{"class":55},[49,81134,81135],{"class":51,"line":1819},[49,81136,81137],{"class":55},"    \u002F\u002F     11             5                    16\n",[49,81139,81140],{"class":51,"line":1824},[49,81141,81089],{"class":55},[49,81143,81144],{"class":51,"line":1841},[49,81145,81146],{"class":55},"    \u002F\u002F     16             8                    24\n",[49,81148,81149],{"class":51,"line":1846},[49,81150,81151],{"class":55},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[49,81153,81154],{"class":51,"line":1851},[49,81155,80989],{"class":55},[49,81157,81158],{"class":51,"line":1856},[49,81159,80994],{"class":55},[49,81161,81162],{"class":51,"line":1870},[49,81163,80999],{"class":55},[49,81165,81166,81168,81170],{"class":51,"line":1875},[49,81167,52506],{"class":55},[49,81169,51902],{"class":51389},[49,81171,51396],{"class":55},[49,81173,81174,81176,81178],{"class":51,"line":2669},[49,81175,51874],{"class":55},[49,81177,51889],{"class":51389},[49,81179,51396],{"class":55},[23000,81181,81183],{"id":81182},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81185,81186],{},[1554,81187],{"alt":44,"src":81188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[39,81190,81192],{"className":53156,"code":81191,"language":53158,"meta":44,"style":44},"\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",[46,81193,81194,81202,81210,81215,81220,81225,81230,81234,81239,81244,81249,81254,81259,81264,81268,81273,81277,81282,81290],{"__ignoreMap":44},[49,81195,81196,81198,81200],{"class":51,"line":52},[49,81197,1129],{"class":55},[49,81199,51889],{"class":51389},[49,81201,51396],{"class":55},[49,81203,81204,81206,81208],{"class":51,"line":84},[49,81205,52233],{"class":55},[49,81207,51902],{"class":51389},[49,81209,51396],{"class":55},[49,81211,81212],{"class":51,"line":109},[49,81213,81214],{"class":55},"    const arr = [\n",[49,81216,81217],{"class":51,"line":120},[49,81218,81219],{"class":55},"      { name: '张三', salary: 10000 },\n",[49,81221,81222],{"class":51,"line":135},[49,81223,81224],{"class":55},"      { name: '李四', salary: 10000 },\n",[49,81226,81227],{"class":51,"line":1306},[49,81228,81229],{"class":55},"      { name: '王五', salary: 10000 }\n",[49,81231,81232],{"class":51,"line":1312},[49,81233,53198],{"class":55},[49,81235,81236],{"class":51,"line":1403},[49,81237,81238],{"class":55},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[49,81240,81241],{"class":51,"line":1409},[49,81242,81243],{"class":55},"    \u002F\u002F prev是累计值\n",[49,81245,81246],{"class":51,"line":1421},[49,81247,81248],{"class":55},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[49,81250,81251],{"class":51,"line":1704},[49,81252,81253],{"class":55},"    console.log(total)\n",[49,81255,81256],{"class":51,"line":1709},[49,81257,81258],{"class":55},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[49,81260,81261],{"class":51,"line":1715},[49,81262,81263],{"class":55},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[49,81265,81266],{"class":51,"line":1720},[49,81267,81258],{"class":55},[49,81269,81270],{"class":51,"line":1734},[49,81271,81272],{"class":55},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[49,81274,81275],{"class":51,"line":1739},[49,81276,81258],{"class":55},[49,81278,81279],{"class":51,"line":1745},[49,81280,81281],{"class":55},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[49,81283,81284,81286,81288],{"class":51,"line":1766},[49,81285,52506],{"class":55},[49,81287,51902],{"class":51389},[49,81289,51396],{"class":55},[49,81291,81292,81294,81296],{"class":51,"line":1771},[49,81293,51874],{"class":55},[49,81295,51889],{"class":51389},[49,81297,51396],{"class":55},[23000,81299,81301],{"id":81300},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81303,81304],{},[1554,81305],{"alt":44,"src":81306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81308,81309],{},[1554,81310],{"alt":44,"src":81311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[178,81313,81314],{},[181,81315,81316],{},"find()",[14,81318,81319],{},"循环查找，找到第一个就ok",[14,81321,81322],{},[56,81323,81326],{"href":81324,"rel":81325},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23955],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[39,81328,81330],{"className":50722,"code":81329,"language":50724,"meta":44,"style":44},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[46,81331,81332,81337,81342],{"__ignoreMap":44},[49,81333,81334],{"class":51,"line":52},[49,81335,81336],{"class":55},"const array1 = [5, 12, 8, 130, 44]\n",[49,81338,81339],{"class":51,"line":84},[49,81340,81341],{"class":55},"const found = array1.find((element) => element > 10)\n",[49,81343,81344],{"class":51,"line":109},[49,81345,81346],{"class":55},"console.log(found)  \u002F\u002F12\n",[14,81348,81349,81351,81352,81357,81358,81361,81362,81364,81365,81370,81371,81373,81374,81376,81377,81379,81380],{},[46,81350,81316],{}," 方法是一个",[56,81353,81356],{"href":81354,"rel":81355},"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",[23955],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[46,81359,81360],{},"callbackFn"," 函数，直到 ",[46,81363,81360],{}," 返回一个",[56,81366,81369],{"href":81367,"rel":81368},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23955],"真值","。然后 ",[46,81372,81316],{}," 返回该元素并停止迭代数组。如果 ",[46,81375,81360],{}," 从未返回真值，则 ",[46,81378,81316],{}," 返回 ",[46,81381,81382],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[39,81384,81386],{"className":53156,"code":81385,"language":53158,"meta":44,"style":44},"\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",[46,81387,81388,81396,81404,81409,81414,81419,81423,81428,81433,81437,81442,81447,81451,81455,81460,81465,81469,81473,81478,81483,81488,81493,81498,81502,81507,81512,81517,81522,81526,81531,81539],{"__ignoreMap":44},[49,81389,81390,81392,81394],{"class":51,"line":52},[49,81391,1129],{"class":55},[49,81393,51889],{"class":51389},[49,81395,51396],{"class":55},[49,81397,81398,81400,81402],{"class":51,"line":84},[49,81399,52233],{"class":55},[49,81401,51902],{"class":51389},[49,81403,51396],{"class":55},[49,81405,81406],{"class":51,"line":109},[49,81407,81408],{"class":55},"    const arr = ['red', 'blue', 'green']\n",[49,81410,81411],{"class":51,"line":120},[49,81412,81413],{"class":55},"    const found = arr.find(item => item === 'pink')\n",[49,81415,81416],{"class":51,"line":135},[49,81417,81418],{"class":55},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[49,81420,81421],{"class":51,"line":1306},[49,81422,2492],{"emptyLinePlaceholder":151},[49,81424,81425],{"class":51,"line":1312},[49,81426,81427],{"class":55},"    \u002F\u002F 使用场景，用于查找数据\n",[49,81429,81430],{"class":51,"line":1403},[49,81431,81432],{"class":55},"    const arr1 = [\n",[49,81434,81435],{"class":51,"line":1409},[49,81436,79475],{"class":55},[49,81438,81439],{"class":51,"line":1421},[49,81440,81441],{"class":55},"        name: '小米',\n",[49,81443,81444],{"class":51,"line":1704},[49,81445,81446],{"class":55},"        price: 1999\n",[49,81448,81449],{"class":51,"line":1709},[49,81450,77981],{"class":55},[49,81452,81453],{"class":51,"line":1715},[49,81454,79475],{"class":55},[49,81456,81457],{"class":51,"line":1720},[49,81458,81459],{"class":55},"        name: '华为',\n",[49,81461,81462],{"class":51,"line":1734},[49,81463,81464],{"class":55},"        price: 3999\n",[49,81466,81467],{"class":51,"line":1739},[49,81468,52487],{"class":55},[49,81470,81471],{"class":51,"line":1745},[49,81472,53198],{"class":55},[49,81474,81475],{"class":51,"line":1766},[49,81476,81477],{"class":55},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[49,81479,81480],{"class":51,"line":1771},[49,81481,81482],{"class":55},"    \u002F\u002F const found1 = arr1.find(item => {\n",[49,81484,81485],{"class":51,"line":1785},[49,81486,81487],{"class":55},"    \u002F\u002F   if (item.name === '小米') {\n",[49,81489,81490],{"class":51,"line":1790},[49,81491,81492],{"class":55},"    \u002F\u002F     return item\n",[49,81494,81495],{"class":51,"line":1819},[49,81496,81497],{"class":55},"    \u002F\u002F   }\n",[49,81499,81500],{"class":51,"line":1824},[49,81501,63379],{"class":55},[49,81503,81504],{"class":51,"line":1841},[49,81505,81506],{"class":55},"    \u002F\u002F 另一种写法\n",[49,81508,81509],{"class":51,"line":1846},[49,81510,81511],{"class":55},"    const found1 = arr1.find(item => {\n",[49,81513,81514],{"class":51,"line":1851},[49,81515,81516],{"class":55},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[49,81518,81519],{"class":51,"line":1856},[49,81520,81521],{"class":55},"      return item.name = '小米'\n",[49,81523,81524],{"class":51,"line":1870},[49,81525,33550],{"class":55},[49,81527,81528],{"class":51,"line":1875},[49,81529,81530],{"class":55},"    console.log(found1)\n",[49,81532,81533,81535,81537],{"class":51,"line":2669},[49,81534,52506],{"class":55},[49,81536,51902],{"class":51389},[49,81538,51396],{"class":55},[49,81540,81541,81543,81545],{"class":51,"line":2683},[49,81542,51874],{"class":55},[49,81544,51889],{"class":51389},[49,81546,51396],{"class":55},[14,81548,81549],{},[1554,81550],{"alt":44,"src":81551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81553,81554],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[178,81556,81557],{"start":84},[181,81558,81559],{},"every()返回的是布尔值",[14,81561,81562],{},[56,81563,81566],{"href":81564,"rel":81565},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23955],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81568,81569],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81571,81572],{},"some是只有有一个就没问题",[14,81574,81575],{},"every是必须全是才行",[39,81577,81581],{"className":81578,"code":81579,"language":81580,"meta":44,"style":44},"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",[46,81582,81583,81599,81613,81617,81626],{"__ignoreMap":44},[49,81584,81585,81587,81590,81592,81594,81597],{"class":51,"line":52},[49,81586,54538],{"class":59},[49,81588,81589],{"class":55}," isBigEnough(element, ",[49,81591,74147],{"class":59},[49,81593,12525],{"class":55},[49,81595,81596],{"class":59},"array",[49,81598,12532],{"class":55},[49,81600,81601,81604,81607,81609,81611],{"class":51,"line":84},[49,81602,81603],{"class":59},"  return",[49,81605,81606],{"class":55}," element ",[49,81608,1802],{"class":59},[49,81610,2130],{"class":66},[49,81612,1382],{"class":55},[49,81614,81615],{"class":51,"line":109},[49,81616,1657],{"class":55},[49,81618,81619,81622,81624],{"class":51,"line":120},[49,81620,81621],{"class":55},"[12, 5, 8, 130, 44].every(isBigEnough); ",[49,81623,33418],{"class":59},[49,81625,54605],{"class":55},[49,81627,81628,81631,81633],{"class":51,"line":135},[49,81629,81630],{"class":55},"[12, 54, 18, 130, 44].every(isBigEnough); ",[49,81632,33418],{"class":59},[49,81634,58029],{"class":55},[39,81636,81638],{"className":53156,"code":81637,"language":53158,"meta":44,"style":44},"\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",[46,81639,81640,81648,81656,81661,81665,81670,81675,81683],{"__ignoreMap":44},[49,81641,81642,81644,81646],{"class":51,"line":52},[49,81643,1129],{"class":55},[49,81645,51889],{"class":51389},[49,81647,51396],{"class":55},[49,81649,81650,81652,81654],{"class":51,"line":84},[49,81651,52233],{"class":55},[49,81653,51902],{"class":51389},[49,81655,51396],{"class":55},[49,81657,81658],{"class":51,"line":109},[49,81659,81660],{"class":55},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[49,81662,81663],{"class":51,"line":120},[49,81664,78411],{"class":55},[49,81666,81667],{"class":51,"line":135},[49,81668,81669],{"class":55},"    const flag = arr.every(item => item >= 10)\n",[49,81671,81672],{"class":51,"line":1306},[49,81673,81674],{"class":55},"    console.log(flag)    \u002F\u002Ftrue\n",[49,81676,81677,81679,81681],{"class":51,"line":1312},[49,81678,52506],{"class":55},[49,81680,51902],{"class":51389},[49,81682,51396],{"class":55},[49,81684,81685,81687,81689],{"class":51,"line":1403},[49,81686,51874],{"class":55},[49,81688,51889],{"class":51389},[49,81690,51396],{"class":55},[39,81692,81694],{"className":53156,"code":81693,"language":53158,"meta":44,"style":44},"\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",[46,81695,81696,81704,81712,81716,81721,81726,81731,81739],{"__ignoreMap":44},[49,81697,81698,81700,81702],{"class":51,"line":52},[49,81699,1129],{"class":55},[49,81701,51889],{"class":51389},[49,81703,51396],{"class":55},[49,81705,81706,81708,81710],{"class":51,"line":84},[49,81707,52233],{"class":55},[49,81709,51902],{"class":51389},[49,81711,51396],{"class":55},[49,81713,81714],{"class":51,"line":109},[49,81715,81660],{"class":55},[49,81717,81718],{"class":51,"line":120},[49,81719,81720],{"class":55},"    const arr = [10, 0, 5]\n",[49,81722,81723],{"class":51,"line":135},[49,81724,81725],{"class":55},"    const flag = arr.some(item => item >= 10)\n",[49,81727,81728],{"class":51,"line":1306},[49,81729,81730],{"class":55},"    console.log(flag)   \u002F\u002Ftrue\n",[49,81732,81733,81735,81737],{"class":51,"line":1312},[49,81734,52506],{"class":55},[49,81736,51902],{"class":51389},[49,81738,51396],{"class":55},[49,81740,81741,81743,81745],{"class":51,"line":1403},[49,81742,51874],{"class":55},[49,81744,51889],{"class":51389},[49,81746,51396],{"class":55},[23000,81748,81750],{"id":81749},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81752,81753],{},[1554,81754],{"alt":44,"src":81755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[39,81757,81759],{"className":50722,"code":81758,"language":50724,"meta":44,"style":44},"\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",[46,81760,81761,81771,81785,81789,81797,81811,81831,81843,81851,81858,81870,81882,81894,81906,81916,81926,81930,81938,81946,81950,81958,81970,81978,82000,82005,82010,82043,82051,82059,82063],{"__ignoreMap":44},[49,81762,81763,81765,81767,81769],{"class":51,"line":52},[49,81764,51386],{"class":55},[49,81766,51390],{"class":51389},[49,81768,51393],{"class":2055},[49,81770,51396],{"class":55},[49,81772,81773,81775,81777,81779,81781,81783],{"class":51,"line":84},[49,81774,1129],{"class":55},[49,81776,50724],{"class":51389},[49,81778,51405],{"class":2055},[49,81780,60],{"class":55},[49,81782,51410],{"class":328},[49,81784,51396],{"class":55},[49,81786,81787],{"class":51,"line":109},[49,81788,2492],{"emptyLinePlaceholder":151},[49,81790,81791,81793,81795],{"class":51,"line":120},[49,81792,1129],{"class":55},[49,81794,51423],{"class":51389},[49,81796,51396],{"class":55},[49,81798,81799,81801,81803,81805,81807,81809],{"class":51,"line":135},[49,81800,52233],{"class":55},[49,81802,51433],{"class":51389},[49,81804,51436],{"class":2055},[49,81806,60],{"class":55},[49,81808,51441],{"class":328},[49,81810,51396],{"class":55},[49,81812,81813,81815,81817,81819,81821,81823,81825,81827,81829],{"class":51,"line":1306},[49,81814,52233],{"class":55},[49,81816,51433],{"class":51389},[49,81818,15010],{"class":2055},[49,81820,60],{"class":55},[49,81822,51480],{"class":328},[49,81824,51460],{"class":2055},[49,81826,60],{"class":55},[49,81828,51487],{"class":328},[49,81830,51396],{"class":55},[49,81832,81833,81835,81837,81839,81841],{"class":51,"line":1312},[49,81834,52233],{"class":55},[49,81836,51496],{"class":51389},[49,81838,51499],{"class":55},[49,81840,51496],{"class":51389},[49,81842,51396],{"class":55},[49,81844,81845,81847,81849],{"class":51,"line":1403},[49,81846,52233],{"class":55},[49,81848,143],{"class":51389},[49,81850,51396],{"class":55},[49,81852,81853,81856],{"class":51,"line":1409},[49,81854,81855],{"class":51389},"    div",[49,81857,15662],{"class":55},[49,81859,81860,81862,81864,81866,81868],{"class":51,"line":1421},[49,81861,54860],{"class":66},[49,81863,51526],{"class":55},[49,81865,1814],{"class":66},[49,81867,51581],{"class":59},[49,81869,1382],{"class":55},[49,81871,81872,81874,81876,81878,81880],{"class":51,"line":1704},[49,81873,54874],{"class":66},[49,81875,51526],{"class":55},[49,81877,622],{"class":66},[49,81879,51581],{"class":59},[49,81881,1382],{"class":55},[49,81883,81884,81886,81888,81890,81892],{"class":51,"line":1709},[49,81885,57448],{"class":66},[49,81887,51526],{"class":55},[49,81889,622],{"class":66},[49,81891,51581],{"class":59},[49,81893,1382],{"class":55},[49,81895,81896,81898,81900,81902,81904],{"class":51,"line":1715},[49,81897,65222],{"class":66},[49,81899,51526],{"class":55},[49,81901,717],{"class":66},[49,81903,51581],{"class":59},[49,81905,1382],{"class":55},[49,81907,81908,81910,81912,81914],{"class":51,"line":1720},[49,81909,57375],{"class":66},[49,81911,51526],{"class":55},[49,81913,51681],{"class":66},[49,81915,1382],{"class":55},[49,81917,81918,81920,81922,81924],{"class":51,"line":1734},[49,81919,54973],{"class":66},[49,81921,51526],{"class":55},[49,81923,51734],{"class":66},[49,81925,1382],{"class":55},[49,81927,81928],{"class":51,"line":1739},[49,81929,2279],{"class":55},[49,81931,81932,81934,81936],{"class":51,"line":1745},[49,81933,52506],{"class":55},[49,81935,143],{"class":51389},[49,81937,51396],{"class":55},[49,81939,81940,81942,81944],{"class":51,"line":1766},[49,81941,51874],{"class":55},[49,81943,51423],{"class":51389},[49,81945,51396],{"class":55},[49,81947,81948],{"class":51,"line":1771},[49,81949,2492],{"emptyLinePlaceholder":151},[49,81951,81952,81954,81956],{"class":51,"line":1785},[49,81953,1129],{"class":55},[49,81955,51889],{"class":51389},[49,81957,51396],{"class":55},[49,81959,81960,81962,81964,81966,81968],{"class":51,"line":1790},[49,81961,52233],{"class":55},[49,81963,51700],{"class":51389},[49,81965,55403],{"class":55},[49,81967,51700],{"class":51389},[49,81969,51396],{"class":55},[49,81971,81972,81974,81976],{"class":51,"line":1819},[49,81973,52233],{"class":55},[49,81975,51902],{"class":51389},[49,81977,51396],{"class":55},[49,81979,81980,81982,81985,81987,81990,81993,81995,81998],{"class":51,"line":1824},[49,81981,11311],{"class":59},[49,81983,81984],{"class":66}," spec",[49,81986,13654],{"class":59},[49,81988,81989],{"class":55}," { size: ",[49,81991,81992],{"class":328},"'40cm*40cm'",[49,81994,55553],{"class":55},[49,81996,81997],{"class":328},"'黑色'",[49,81999,55693],{"class":55},[49,82001,82002],{"class":51,"line":1841},[49,82003,82004],{"class":283},"    \u002F\u002F const arr = Object.values(spec)\n",[49,82006,82007],{"class":51,"line":1846},[49,82008,82009],{"class":283},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[49,82011,82012,82014,82016,82018,82021,82023,82025,82028,82031,82034,82036,82038,82041],{"class":51,"line":1851},[49,82013,52496],{"class":55},[49,82015,54488],{"class":2055},[49,82017,228],{"class":55},[49,82019,82020],{"class":328},"'div'",[49,82022,74338],{"class":55},[49,82024,60],{"class":59},[49,82026,82027],{"class":55}," Object.",[49,82029,82030],{"class":2055},"values",[49,82032,82033],{"class":55},"(spec).",[49,82035,74312],{"class":2055},[49,82037,228],{"class":55},[49,82039,82040],{"class":328},"'\u002F'",[49,82042,81],{"class":55},[49,82044,82045,82047,82049],{"class":51,"line":1856},[49,82046,52506],{"class":55},[49,82048,51902],{"class":51389},[49,82050,51396],{"class":55},[49,82052,82053,82055,82057],{"class":51,"line":1870},[49,82054,51874],{"class":55},[49,82056,51889],{"class":51389},[49,82058,51396],{"class":55},[49,82060,82061],{"class":51,"line":1875},[49,82062,2492],{"emptyLinePlaceholder":151},[49,82064,82065,82067,82069],{"class":51,"line":2669},[49,82066,51874],{"class":55},[49,82068,50724],{"class":51389},[49,82070,51396],{"class":55},[14,82072,82073],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23000,82075,82077],{"id":82076},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82079,82080],{},"静态方法，将伪数组转换为真数组",[14,82082,82083],{},[1554,82084],{"alt":44,"src":82085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[39,82087,82089],{"className":53156,"code":82088,"language":53158,"meta":44,"style":44},"\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",[46,82090,82091,82099,82107,82119,82131,82143,82151,82159,82164,82169,82174,82179,82187],{"__ignoreMap":44},[49,82092,82093,82095,82097],{"class":51,"line":52},[49,82094,1129],{"class":55},[49,82096,51889],{"class":51389},[49,82098,51396],{"class":55},[49,82100,82101,82103,82105],{"class":51,"line":84},[49,82102,52233],{"class":55},[49,82104,1226],{"class":51389},[49,82106,51396],{"class":55},[49,82108,82109,82111,82113,82115,82117],{"class":51,"line":109},[49,82110,51430],{"class":55},[49,82112,181],{"class":51389},[49,82114,55403],{"class":55},[49,82116,181],{"class":51389},[49,82118,51396],{"class":55},[49,82120,82121,82123,82125,82127,82129],{"class":51,"line":120},[49,82122,51430],{"class":55},[49,82124,181],{"class":51389},[49,82126,55403],{"class":55},[49,82128,181],{"class":51389},[49,82130,51396],{"class":55},[49,82132,82133,82135,82137,82139,82141],{"class":51,"line":135},[49,82134,51430],{"class":55},[49,82136,181],{"class":51389},[49,82138,55403],{"class":55},[49,82140,181],{"class":51389},[49,82142,51396],{"class":55},[49,82144,82145,82147,82149],{"class":51,"line":1306},[49,82146,52506],{"class":55},[49,82148,1226],{"class":51389},[49,82150,51396],{"class":55},[49,82152,82153,82155,82157],{"class":51,"line":1312},[49,82154,52233],{"class":55},[49,82156,51902],{"class":51389},[49,82158,51396],{"class":55},[49,82160,82161],{"class":51,"line":1403},[49,82162,82163],{"class":55},"    const lis = document.querySelectorAll('li')\n",[49,82165,82166],{"class":51,"line":1409},[49,82167,82168],{"class":55},"    const liss = Array.from(lis)\n",[49,82170,82171],{"class":51,"line":1421},[49,82172,82173],{"class":55},"    liss.pop()\n",[49,82175,82176],{"class":51,"line":1704},[49,82177,82178],{"class":55},"    console.log(liss)\n",[49,82180,82181,82183,82185],{"class":51,"line":1709},[49,82182,52506],{"class":55},[49,82184,51902],{"class":51389},[49,82186,51396],{"class":55},[49,82188,82189,82191,82193],{"class":51,"line":1715},[49,82190,51874],{"class":55},[49,82192,51889],{"class":51389},[49,82194,51396],{"class":55},[14,82196,82197],{},[1554,82198],{"alt":44,"src":82199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22088,82201,82203],{"id":82202},"_41053-string","4.10.5.3 String",[14,82205,82206],{},[1554,82207],{"alt":44,"src":82208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23000,82210,82212],{"id":82211},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[39,82214,82216],{"className":53156,"code":82215,"language":53158,"meta":44,"style":44},"\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",[46,82217,82218,82226,82234,82239,82244,82249,82253,82258,82263,82268,82276],{"__ignoreMap":44},[49,82219,82220,82222,82224],{"class":51,"line":52},[49,82221,1129],{"class":55},[49,82223,51889],{"class":51389},[49,82225,51396],{"class":55},[49,82227,82228,82230,82232],{"class":51,"line":84},[49,82229,52233],{"class":55},[49,82231,51902],{"class":51389},[49,82233,51396],{"class":55},[49,82235,82236],{"class":51,"line":109},[49,82237,82238],{"class":55},"    \u002F\u002F 把字符串转化为数组\n",[49,82240,82241],{"class":51,"line":120},[49,82242,82243],{"class":55},"    const str = 'pink,red'\n",[49,82245,82246],{"class":51,"line":135},[49,82247,82248],{"class":55},"    const arr = str.split(',')\n",[49,82250,82251],{"class":51,"line":1306},[49,82252,80727],{"class":55},[49,82254,82255],{"class":51,"line":1312},[49,82256,82257],{"class":55},"    const str1 = '2025-8-25'\n",[49,82259,82260],{"class":51,"line":1403},[49,82261,82262],{"class":55},"    const arr1 = str1.split('-')\n",[49,82264,82265],{"class":51,"line":1409},[49,82266,82267],{"class":55},"    console.log(arr1)\n",[49,82269,82270,82272,82274],{"class":51,"line":1421},[49,82271,52506],{"class":55},[49,82273,51902],{"class":51389},[49,82275,51396],{"class":55},[49,82277,82278,82280,82282],{"class":51,"line":1704},[49,82279,51874],{"class":55},[49,82281,51889],{"class":51389},[49,82283,51396],{"class":55},[23000,82285,82287],{"id":82286},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82289,5272],{},[14,82291,82292],{},"substring(indexStart)",[14,82294,82295],{},"substring(indexStart, indexEnd)",[1226,82297,82298,82309,82321,82331],{},[181,82299,82300,82301,82304,82305,82308],{},"如果省略了 ",[46,82302,82303],{},"indexEnd","，则 ",[46,82306,82307],{},"substring()"," 提取字符直到字符串的末尾",[181,82310,82311,82312,82315,82316,82304,82318,82320],{},"如果 ",[46,82313,82314],{},"indexStart"," 等于 ",[46,82317,82303],{},[46,82319,82307],{}," 返回一个空字符串",[181,82322,82311,82323,82325,82326,82304,82328,82330],{},[46,82324,82314],{}," 大于 ",[46,82327,82303],{},[46,82329,82307],{}," 的效果就像交换了这两个参数一样",[181,82332,82333],{},"结束的索引号不包含想要截取的部分",[39,82335,82337],{"className":81578,"code":82336,"language":81580,"meta":44,"style":44},"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",[46,82338,82339,82351,82355,82389,82419,82423,82454,82458,82485,82515,82545,82549,82580],{"__ignoreMap":44},[49,82340,82341,82344,82346,82349],{"class":51,"line":52},[49,82342,82343],{"class":55},"const anyString ",[49,82345,60],{"class":59},[49,82347,82348],{"class":328}," \"Mozilla\"",[49,82350,1382],{"class":55},[49,82352,82353],{"class":51,"line":84},[49,82354,2492],{"emptyLinePlaceholder":151},[49,82356,82357,82360,82362,82364,82366,82369,82371,82374,82376,82378,82380,82382,82384,82386],{"class":51,"line":109},[49,82358,82359],{"class":66},"console",[49,82361,777],{"class":55},[49,82363,58336],{"class":66},[49,82365,228],{"class":55},[49,82367,82368],{"class":66},"anyString",[49,82370,777],{"class":55},[49,82372,82373],{"class":66},"substring",[49,82375,228],{"class":55},[49,82377,415],{"class":66},[49,82379,12525],{"class":55},[49,82381,441],{"class":66},[49,82383,75342],{"class":55},[49,82385,33418],{"class":59},[49,82387,82388],{"class":328}," 'M'\n",[49,82390,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409,82411,82413,82415,82417],{"class":51,"line":120},[49,82392,82359],{"class":66},[49,82394,777],{"class":55},[49,82396,58336],{"class":66},[49,82398,228],{"class":55},[49,82400,82368],{"class":66},[49,82402,777],{"class":55},[49,82404,82373],{"class":66},[49,82406,228],{"class":55},[49,82408,441],{"class":66},[49,82410,12525],{"class":55},[49,82412,415],{"class":66},[49,82414,75342],{"class":55},[49,82416,33418],{"class":59},[49,82418,82388],{"class":328},[49,82420,82421],{"class":51,"line":135},[49,82422,2492],{"emptyLinePlaceholder":151},[49,82424,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451],{"class":51,"line":1306},[49,82426,82359],{"class":66},[49,82428,777],{"class":55},[49,82430,58336],{"class":66},[49,82432,228],{"class":55},[49,82434,82368],{"class":66},[49,82436,777],{"class":55},[49,82438,82373],{"class":66},[49,82440,228],{"class":55},[49,82442,415],{"class":66},[49,82444,12525],{"class":55},[49,82446,566],{"class":66},[49,82448,75342],{"class":55},[49,82450,33418],{"class":59},[49,82452,82453],{"class":328}," 'Mozill'\n",[49,82455,82456],{"class":51,"line":1312},[49,82457,2492],{"emptyLinePlaceholder":151},[49,82459,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478,82480,82482],{"class":51,"line":1403},[49,82461,82359],{"class":66},[49,82463,777],{"class":55},[49,82465,58336],{"class":66},[49,82467,228],{"class":55},[49,82469,82368],{"class":66},[49,82471,777],{"class":55},[49,82473,82373],{"class":66},[49,82475,228],{"class":55},[49,82477,515],{"class":66},[49,82479,75342],{"class":55},[49,82481,33418],{"class":59},[49,82483,82484],{"class":328}," 'lla'\n",[49,82486,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505,82507,82509,82511,82513],{"class":51,"line":1409},[49,82488,82359],{"class":66},[49,82490,777],{"class":55},[49,82492,58336],{"class":66},[49,82494,228],{"class":55},[49,82496,82368],{"class":66},[49,82498,777],{"class":55},[49,82500,82373],{"class":66},[49,82502,228],{"class":55},[49,82504,515],{"class":66},[49,82506,12525],{"class":55},[49,82508,591],{"class":66},[49,82510,75398],{"class":55},[49,82512,33418],{"class":59},[49,82514,82484],{"class":328},[49,82516,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535,82537,82539,82541,82543],{"class":51,"line":1421},[49,82518,82359],{"class":66},[49,82520,777],{"class":55},[49,82522,58336],{"class":66},[49,82524,228],{"class":55},[49,82526,82368],{"class":66},[49,82528,777],{"class":55},[49,82530,82373],{"class":66},[49,82532,228],{"class":55},[49,82534,591],{"class":66},[49,82536,12525],{"class":55},[49,82538,515],{"class":66},[49,82540,75342],{"class":55},[49,82542,33418],{"class":59},[49,82544,82484],{"class":328},[49,82546,82547],{"class":51,"line":1704},[49,82548,2492],{"emptyLinePlaceholder":151},[49,82550,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569,82571,82573,82575,82577],{"class":51,"line":1709},[49,82552,82359],{"class":66},[49,82554,777],{"class":55},[49,82556,58336],{"class":66},[49,82558,228],{"class":55},[49,82560,82368],{"class":66},[49,82562,777],{"class":55},[49,82564,82373],{"class":66},[49,82566,228],{"class":55},[49,82568,415],{"class":66},[49,82570,12525],{"class":55},[49,82572,591],{"class":66},[49,82574,75342],{"class":55},[49,82576,33418],{"class":59},[49,82578,82579],{"class":328}," 'Mozilla'\n",[49,82581,82582,82584,82586,82588,82590,82592,82594,82596,82598,82600,82602,82604,82606,82608],{"class":51,"line":1715},[49,82583,82359],{"class":66},[49,82585,777],{"class":55},[49,82587,58336],{"class":66},[49,82589,228],{"class":55},[49,82591,82368],{"class":66},[49,82593,777],{"class":55},[49,82595,82373],{"class":66},[49,82597,228],{"class":55},[49,82599,415],{"class":66},[49,82601,12525],{"class":55},[49,82603,95],{"class":66},[49,82605,75342],{"class":55},[49,82607,33418],{"class":59},[49,82609,82579],{"class":328},[23000,82611,82613],{"id":82612},"_410533-startswith","4.10.5.3.3 startsWith",[14,82615,82616,82619,82620,82625,82626,82628,82629],{},[46,82617,82618],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[373,82621,82622],{},[46,82623,82624],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[46,82627,1454],{}," 或 ",[46,82630,66109],{},[39,82632,82634],{"className":77584,"code":82633,"language":77586,"meta":44,"style":44},"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",[46,82635,82636,82648,82667,82672,82692],{"__ignoreMap":44},[49,82637,82638,82640,82643,82645],{"class":51,"line":52},[49,82639,6882],{"class":59},[49,82641,82642],{"class":55}," str1 ",[49,82644,60],{"class":59},[49,82646,82647],{"class":328}," \"Saturday night plans\"\n",[49,82649,82650,82652,82654,82657,82660,82662,82665],{"class":51,"line":84},[49,82651,77621],{"class":55},[49,82653,58336],{"class":2055},[49,82655,82656],{"class":55},"(str1.",[49,82658,82659],{"class":2055},"startsWith",[49,82661,228],{"class":55},[49,82663,82664],{"class":328},"\"Sat\"",[49,82666,30586],{"class":55},[49,82668,82669],{"class":51,"line":109},[49,82670,82671],{"class":283},"\u002F\u002F Expected output: true\n",[49,82673,82674,82676,82678,82680,82682,82684,82686,82688,82690],{"class":51,"line":120},[49,82675,77621],{"class":55},[49,82677,58336],{"class":2055},[49,82679,82656],{"class":55},[49,82681,82659],{"class":2055},[49,82683,228],{"class":55},[49,82685,82664],{"class":328},[49,82687,12525],{"class":55},[49,82689,73],{"class":66},[49,82691,30586],{"class":55},[49,82693,82694],{"class":51,"line":135},[49,82695,82696],{"class":283},"\u002F\u002F Expected output: false\n",[39,82698,82700],{"className":50722,"code":82699,"language":50724,"meta":44,"style":44},"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",[46,82701,82702,82707,82712,82716,82721,82726],{"__ignoreMap":44},[49,82703,82704],{"class":51,"line":52},[49,82705,82706],{"class":55},"startsWith(searchString)\n",[49,82708,82709],{"class":51,"line":84},[49,82710,82711],{"class":55},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[49,82713,82714],{"class":51,"line":109},[49,82715,2492],{"emptyLinePlaceholder":151},[49,82717,82718],{"class":51,"line":120},[49,82719,82720],{"class":55},"const str3 = 'pink老师上课中'\n",[49,82722,82723],{"class":51,"line":135},[49,82724,82725],{"class":55},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[49,82727,82728],{"class":51,"line":1306},[49,82729,82730],{"class":55},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23000,82732,82734],{"id":82733},"_410534-includes","4.10.5.3.4 includes",[14,82736,82737],{},"includes(searchString) includes(searchString, position)",[178,82739,82740],{},[181,82741,82742],{},"searchString:",[14,82744,82745,82746,82748,82749,82754,82755,82760,82761,21590,82764,82767,82768,82771],{},"一个要在 ",[46,82747,1391],{}," 中查找的字符串。",[56,82750,82753],{"href":82751,"rel":82752},"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",[23955],"不能是正则表达式","。所有非正则表达式的值都会被",[56,82756,82759],{"href":82757,"rel":82758},"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",[23955],"强制转换为字符串","，因此如果该参数被省略或传入 ",[46,82762,82763],{},"undefined",[46,82765,82766],{},"includes()"," 方法会在字符串中搜索 ",[46,82769,82770],{},"\"undefined\"","，这通常不是你想要的",[178,82773,82774],{"start":84},[181,82775,82776,1078],{},[46,82777,82778],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82780,82781,82782,82785,82786],{},"在字符串中开始搜索 ",[46,82783,82784],{},"searchString"," 的位置。默认值为 ",[46,82787,415],{},[178,82789,82790],{"start":109},[181,82791,82792],{},"返回值：",[14,82794,82795,82796,82798,82799,82803,82804],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[46,82797,82784],{}," 为空字符串的情况），则返回 ",[373,82800,82801],{},[46,82802,1454],{}," ，否则返回 ",[373,82805,82806],{},[46,82807,66109],{},[178,82809,82810],{"start":120},[181,82811,82812],{},"异常：",[14,82814,82311,82815,13885,82817,82821],{},[46,82816,82784],{},[56,82818,82820],{"href":82751,"rel":82819},[23955],"是一个正则表达式","，则会抛出",[14,82823,82824],{},"只要是有就是true，不需要非得以谁开头结尾",[39,82826,82828],{"className":77584,"code":82827,"language":77586,"meta":44,"style":44},"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",[46,82829,82830,82841,82864,82883,82903,82925,82944],{"__ignoreMap":44},[49,82831,82832,82834,82836,82838],{"class":51,"line":52},[49,82833,6882],{"class":59},[49,82835,79864],{"class":55},[49,82837,60],{"class":59},[49,82839,82840],{"class":328}," \"To be, or not to be, that is the question.\"\n",[49,82842,82843,82845,82847,82850,82853,82855,82858,82861],{"class":51,"line":84},[49,82844,77621],{"class":55},[49,82846,58336],{"class":2055},[49,82848,82849],{"class":55},"(str.",[49,82851,82852],{"class":2055},"includes",[49,82854,228],{"class":55},[49,82856,82857],{"class":328},"\"To be\"",[49,82859,82860],{"class":55},"))",[49,82862,82863],{"class":283},"  \u002F\u002F true\n",[49,82865,82866,82868,82870,82872,82874,82876,82879,82881],{"class":51,"line":109},[49,82867,77621],{"class":55},[49,82869,58336],{"class":2055},[49,82871,82849],{"class":55},[49,82873,82852],{"class":2055},[49,82875,228],{"class":55},[49,82877,82878],{"class":328},"\"question\"",[49,82880,82860],{"class":55},[49,82882,82863],{"class":283},[49,82884,82885,82887,82889,82891,82893,82895,82898,82900],{"class":51,"line":120},[49,82886,77621],{"class":55},[49,82888,58336],{"class":2055},[49,82890,82849],{"class":55},[49,82892,82852],{"class":2055},[49,82894,228],{"class":55},[49,82896,82897],{"class":328},"\"nonexistent\"",[49,82899,82860],{"class":55},[49,82901,82902],{"class":283},"  \u002F\u002F false\n",[49,82904,82905,82907,82909,82911,82913,82915,82917,82919,82921,82923],{"class":51,"line":135},[49,82906,77621],{"class":55},[49,82908,58336],{"class":2055},[49,82910,82849],{"class":55},[49,82912,82852],{"class":2055},[49,82914,228],{"class":55},[49,82916,82857],{"class":328},[49,82918,12525],{"class":55},[49,82920,441],{"class":66},[49,82922,82860],{"class":55},[49,82924,82902],{"class":283},[49,82926,82927,82929,82931,82933,82935,82937,82940,82942],{"class":51,"line":1306},[49,82928,77621],{"class":55},[49,82930,58336],{"class":2055},[49,82932,82849],{"class":55},[49,82934,82852],{"class":2055},[49,82936,228],{"class":55},[49,82938,82939],{"class":328},"\"TO BE\"",[49,82941,82860],{"class":55},[49,82943,82902],{"class":283},[49,82945,82946,82948,82950,82952,82954,82956,82958,82960],{"class":51,"line":1312},[49,82947,77621],{"class":55},[49,82949,58336],{"class":2055},[49,82951,82849],{"class":55},[49,82953,82852],{"class":2055},[49,82955,228],{"class":55},[49,82957,7742],{"class":328},[49,82959,82860],{"class":55},[49,82961,82863],{"class":283},[23000,82963,82965],{"id":82964},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[39,82967,82969],{"className":53156,"code":82968,"language":53158,"meta":44,"style":44},"\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",[46,82970,82971,82979,82987,82992,82997,83002,83007,83012,83020],{"__ignoreMap":44},[49,82972,82973,82975,82977],{"class":51,"line":52},[49,82974,1129],{"class":55},[49,82976,51889],{"class":51389},[49,82978,51396],{"class":55},[49,82980,82981,82983,82985],{"class":51,"line":84},[49,82982,52233],{"class":55},[49,82984,51902],{"class":51389},[49,82986,51396],{"class":55},[49,82988,82989],{"class":51,"line":109},[49,82990,82991],{"class":55},"    const num = 10\n",[49,82993,82994],{"class":51,"line":120},[49,82995,82996],{"class":55},"    \u002F\u002F 强制转换\n",[49,82998,82999],{"class":51,"line":135},[49,83000,83001],{"class":55},"    console.log(String(num))\n",[49,83003,83004],{"class":51,"line":1306},[49,83005,83006],{"class":55},"    \u002F\u002F toString()方法转换\n",[49,83008,83009],{"class":51,"line":1312},[49,83010,83011],{"class":55},"    console.log(num.toString())\n",[49,83013,83014,83016,83018],{"class":51,"line":1403},[49,83015,52506],{"class":55},[49,83017,51902],{"class":51389},[49,83019,51396],{"class":55},[49,83021,83022,83024,83026],{"class":51,"line":1409},[49,83023,51874],{"class":55},[49,83025,51889],{"class":51389},[49,83027,51396],{"class":55},[23000,83029,83031],{"id":83030},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83033,83034],{},[1554,83035],{"alt":44,"src":83036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[39,83038,83040],{"className":50722,"code":83039,"language":50724,"meta":44,"style":44},"\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",[46,83041,83042,83052,83066,83070,83078,83092,83112,83124,83132,83136,83144,83156,83164,83176,83181,83186,83191,83238,83254,83262,83270,83274],{"__ignoreMap":44},[49,83043,83044,83046,83048,83050],{"class":51,"line":52},[49,83045,51386],{"class":55},[49,83047,51390],{"class":51389},[49,83049,51393],{"class":2055},[49,83051,51396],{"class":55},[49,83053,83054,83056,83058,83060,83062,83064],{"class":51,"line":84},[49,83055,1129],{"class":55},[49,83057,50724],{"class":51389},[49,83059,51405],{"class":2055},[49,83061,60],{"class":55},[49,83063,51410],{"class":328},[49,83065,51396],{"class":55},[49,83067,83068],{"class":51,"line":109},[49,83069,2492],{"emptyLinePlaceholder":151},[49,83071,83072,83074,83076],{"class":51,"line":120},[49,83073,1129],{"class":55},[49,83075,51423],{"class":51389},[49,83077,51396],{"class":55},[49,83079,83080,83082,83084,83086,83088,83090],{"class":51,"line":135},[49,83081,52233],{"class":55},[49,83083,51433],{"class":51389},[49,83085,51436],{"class":2055},[49,83087,60],{"class":55},[49,83089,51441],{"class":328},[49,83091,51396],{"class":55},[49,83093,83094,83096,83098,83100,83102,83104,83106,83108,83110],{"class":51,"line":1306},[49,83095,52233],{"class":55},[49,83097,51433],{"class":51389},[49,83099,15010],{"class":2055},[49,83101,60],{"class":55},[49,83103,51480],{"class":328},[49,83105,51460],{"class":2055},[49,83107,60],{"class":55},[49,83109,51487],{"class":328},[49,83111,51396],{"class":55},[49,83113,83114,83116,83118,83120,83122],{"class":51,"line":1312},[49,83115,52233],{"class":55},[49,83117,51496],{"class":51389},[49,83119,51499],{"class":55},[49,83121,51496],{"class":51389},[49,83123,51396],{"class":55},[49,83125,83126,83128,83130],{"class":51,"line":1403},[49,83127,51874],{"class":55},[49,83129,51423],{"class":51389},[49,83131,51396],{"class":55},[49,83133,83134],{"class":51,"line":1409},[49,83135,2492],{"emptyLinePlaceholder":151},[49,83137,83138,83140,83142],{"class":51,"line":1421},[49,83139,1129],{"class":55},[49,83141,51889],{"class":51389},[49,83143,51396],{"class":55},[49,83145,83146,83148,83150,83152,83154],{"class":51,"line":1704},[49,83147,52233],{"class":55},[49,83149,51700],{"class":51389},[49,83151,55403],{"class":55},[49,83153,51700],{"class":51389},[49,83155,51396],{"class":55},[49,83157,83158,83160,83162],{"class":51,"line":1709},[49,83159,52233],{"class":55},[49,83161,51902],{"class":51389},[49,83163,51396],{"class":55},[49,83165,83166,83168,83171,83173],{"class":51,"line":1715},[49,83167,11311],{"class":59},[49,83169,83170],{"class":66}," gift",[49,83172,13654],{"class":59},[49,83174,83175],{"class":328}," '50g的茶叶，清洗球'\n",[49,83177,83178],{"class":51,"line":1720},[49,83179,83180],{"class":283},"    \u002F\u002F 1.把字符串拆分为数组\n",[49,83182,83183],{"class":51,"line":1734},[49,83184,83185],{"class":283},"    \u002F\u002F console.log(gift.split(','))\n",[49,83187,83188],{"class":51,"line":1739},[49,83189,83190],{"class":283},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[49,83192,83193,83195,83197,83199,83202,83205,83207,83210,83212,83214,83216,83218,83220,83223,83225,83228,83230,83232,83234,83236],{"class":51,"line":1745},[49,83194,11311],{"class":59},[49,83196,74008],{"class":66},[49,83198,13654],{"class":59},[49,83200,83201],{"class":55}," gift.",[49,83203,83204],{"class":2055},"split",[49,83206,228],{"class":55},[49,83208,83209],{"class":328},"'，'",[49,83211,30915],{"class":55},[49,83213,74133],{"class":2055},[49,83215,228],{"class":55},[49,83217,79884],{"class":126},[49,83219,79887],{"class":59},[49,83221,83222],{"class":328}," `\u003Cspan>【赠品】${",[49,83224,79884],{"class":55},[49,83226,83227],{"class":328},"}\u003C\u002Fspan>\u003Cbr>`",[49,83229,30915],{"class":55},[49,83231,74312],{"class":2055},[49,83233,228],{"class":55},[49,83235,74317],{"class":328},[49,83237,81],{"class":55},[49,83239,83240,83242,83244,83246,83248,83250,83252],{"class":51,"line":1766},[49,83241,52496],{"class":55},[49,83243,54488],{"class":2055},[49,83245,228],{"class":55},[49,83247,82020],{"class":328},[49,83249,74338],{"class":55},[49,83251,60],{"class":59},[49,83253,74074],{"class":55},[49,83255,83256,83258,83260],{"class":51,"line":1771},[49,83257,52506],{"class":55},[49,83259,51902],{"class":51389},[49,83261,51396],{"class":55},[49,83263,83264,83266,83268],{"class":51,"line":1785},[49,83265,51874],{"class":55},[49,83267,51889],{"class":51389},[49,83269,51396],{"class":55},[49,83271,83272],{"class":51,"line":1790},[49,83273,2492],{"emptyLinePlaceholder":151},[49,83275,83276,83278,83280],{"class":51,"line":1819},[49,83277,51874],{"class":55},[49,83279,50724],{"class":51389},[49,83281,51396],{"class":55},[22088,83283,83285],{"id":83284},"_41054-number","4.10.5.4 Number",[14,83287,83288],{},[1554,83289],{"alt":44,"src":83290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83292,83293],{},"整数也可以进行toFixed来保留小数",[14,83295,83296],{},"比如：",[14,83298,83299],{},"const price=10",[14,83301,83302],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22088,83304,83306],{"id":83305},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83308,83309],{},[1554,83310],{"alt":44,"src":83311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[39,83313,83315],{"className":50722,"code":83314,"language":50724,"meta":44,"style":44},"\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",[46,83316,83317,83327,83341,83345,83353,83367,83387,83399,83407,83413,83423,83433,83443,83447,83451,83457,83469,83483,83487,83491,83497,83509,83525,83535,83551,83555,83559,83565,83575,83585,83589,83593,83601,83613,83625,83637,83641,83645,83653,83665,83669,83673,83684,83694,83706,83718,83728,83732,83736,83744,83753,83765,83775,83785,83789,83793,83801,83810,83817,83827,83839,83843,83847,83856,83866,83877,83889,83901,83905,83909,83918,83928,83939,83943,83947,83953,83965,83977,83987,83997,84015,84027,84031,84035,84044,84056,84066,84076,84088,84092,84100,84108,84112,84120,84134,84142,84156,84184,84192,84200,84210,84214,84222,84230,84239,84247,84256,84266,84270,84274,84282,84290,84299,84307,84315,84328,84332,84336,84344,84352,84361,84369,84377,84392,84396,84400,84408,84416,84425,84433,84441,84455,84463,84467,84471,84476,84502,84507,84544,84549,84572,84577,84631,84636,84672,84676,84682,84687,84696,84710,84719,84738,84747,84757,84762,84767,84780,84785,84839,84865,84873,84881,84885],{"__ignoreMap":44},[49,83318,83319,83321,83323,83325],{"class":51,"line":52},[49,83320,51386],{"class":55},[49,83322,51390],{"class":51389},[49,83324,51393],{"class":2055},[49,83326,51396],{"class":55},[49,83328,83329,83331,83333,83335,83337,83339],{"class":51,"line":84},[49,83330,1129],{"class":55},[49,83332,50724],{"class":51389},[49,83334,51405],{"class":2055},[49,83336,60],{"class":55},[49,83338,51410],{"class":328},[49,83340,51396],{"class":55},[49,83342,83343],{"class":51,"line":109},[49,83344,2492],{"emptyLinePlaceholder":151},[49,83346,83347,83349,83351],{"class":51,"line":120},[49,83348,1129],{"class":55},[49,83350,51423],{"class":51389},[49,83352,51396],{"class":55},[49,83354,83355,83357,83359,83361,83363,83365],{"class":51,"line":135},[49,83356,52233],{"class":55},[49,83358,51433],{"class":51389},[49,83360,51436],{"class":2055},[49,83362,60],{"class":55},[49,83364,51441],{"class":328},[49,83366,51396],{"class":55},[49,83368,83369,83371,83373,83375,83377,83379,83381,83383,83385],{"class":51,"line":1306},[49,83370,52233],{"class":55},[49,83372,51433],{"class":51389},[49,83374,15010],{"class":2055},[49,83376,60],{"class":55},[49,83378,51480],{"class":328},[49,83380,51460],{"class":2055},[49,83382,60],{"class":55},[49,83384,51487],{"class":328},[49,83386,51396],{"class":55},[49,83388,83389,83391,83393,83395,83397],{"class":51,"line":1312},[49,83390,52233],{"class":55},[49,83392,51496],{"class":51389},[49,83394,51499],{"class":55},[49,83396,51496],{"class":51389},[49,83398,51396],{"class":55},[49,83400,83401,83403,83405],{"class":51,"line":1403},[49,83402,52233],{"class":55},[49,83404,143],{"class":51389},[49,83406,51396],{"class":55},[49,83408,83409,83411],{"class":51,"line":1409},[49,83410,6493],{"class":51389},[49,83412,15662],{"class":55},[49,83414,83415,83417,83419,83421],{"class":51,"line":1421},[49,83416,54784],{"class":66},[49,83418,51526],{"class":55},[49,83420,415],{"class":66},[49,83422,1382],{"class":55},[49,83424,83425,83427,83429,83431],{"class":51,"line":1704},[49,83426,54795],{"class":66},[49,83428,51526],{"class":55},[49,83430,415],{"class":66},[49,83432,1382],{"class":55},[49,83434,83435,83437,83439,83441],{"class":51,"line":1709},[49,83436,72685],{"class":66},[49,83438,51526],{"class":55},[49,83440,60594],{"class":66},[49,83442,1382],{"class":55},[49,83444,83445],{"class":51,"line":1715},[49,83446,2279],{"class":55},[49,83448,83449],{"class":51,"line":1720},[49,83450,2492],{"emptyLinePlaceholder":151},[49,83452,83453,83455],{"class":51,"line":1734},[49,83454,62212],{"class":2055},[49,83456,15662],{"class":55},[49,83458,83459,83461,83463,83465,83467],{"class":51,"line":1739},[49,83460,54860],{"class":66},[49,83462,51526],{"class":55},[49,83464,78663],{"class":66},[49,83466,51581],{"class":59},[49,83468,1382],{"class":55},[49,83470,83471,83473,83475,83477,83479,83481],{"class":51,"line":1745},[49,83472,54795],{"class":66},[49,83474,51526],{"class":55},[49,83476,533],{"class":66},[49,83478,51581],{"class":59},[49,83480,51645],{"class":66},[49,83482,1382],{"class":55},[49,83484,83485],{"class":51,"line":1766},[49,83486,2279],{"class":55},[49,83488,83489],{"class":51,"line":1771},[49,83490,2492],{"emptyLinePlaceholder":151},[49,83492,83493,83495],{"class":51,"line":1785},[49,83494,78714],{"class":2055},[49,83496,15662],{"class":55},[49,83498,83499,83501,83503,83505,83507],{"class":51,"line":1790},[49,83500,54784],{"class":66},[49,83502,51526],{"class":55},[49,83504,794],{"class":66},[49,83506,51581],{"class":59},[49,83508,1382],{"class":55},[49,83510,83511,83513,83515,83517,83519,83521,83523],{"class":51,"line":1819},[49,83512,61949],{"class":66},[49,83514,51526],{"class":55},[49,83516,28212],{"class":66},[49,83518,78769],{"class":66},[49,83520,78772],{"class":66},[49,83522,914],{"class":59},[49,83524,1382],{"class":55},[49,83526,83527,83529,83531,83533],{"class":51,"line":1824},[49,83528,55098],{"class":66},[49,83530,51526],{"class":55},[49,83532,51566],{"class":66},[49,83534,1382],{"class":55},[49,83536,83537,83539,83541,83543,83545,83547,83549],{"class":51,"line":1841},[49,83538,62066],{"class":66},[49,83540,51526],{"class":55},[49,83542,441],{"class":66},[49,83544,51581],{"class":59},[49,83546,51610],{"class":66},[49,83548,62333],{"class":66},[49,83550,1382],{"class":55},[49,83552,83553],{"class":51,"line":1846},[49,83554,2279],{"class":55},[49,83556,83557],{"class":51,"line":1851},[49,83558,2492],{"emptyLinePlaceholder":151},[49,83560,83561,83563],{"class":51,"line":1856},[49,83562,78832],{"class":2055},[49,83564,15662],{"class":55},[49,83566,83567,83569,83571,83573],{"class":51,"line":1870},[49,83568,62114],{"class":66},[49,83570,51526],{"class":55},[49,83572,62119],{"class":66},[49,83574,1382],{"class":55},[49,83576,83577,83579,83581,83583],{"class":51,"line":1875},[49,83578,54973],{"class":66},[49,83580,51526],{"class":55},[49,83582,61907],{"class":66},[49,83584,1382],{"class":55},[49,83586,83587],{"class":51,"line":2669},[49,83588,2279],{"class":55},[49,83590,83591],{"class":51,"line":2683},[49,83592,2492],{"emptyLinePlaceholder":151},[49,83594,83595,83597,83599],{"class":51,"line":2691},[49,83596,78714],{"class":2055},[49,83598,55704],{"class":51389},[49,83600,15662],{"class":55},[49,83602,83603,83605,83607,83609,83611],{"class":51,"line":2696},[49,83604,54860],{"class":66},[49,83606,51526],{"class":55},[49,83608,831],{"class":66},[49,83610,51581],{"class":59},[49,83612,1382],{"class":55},[49,83614,83615,83617,83619,83621,83623],{"class":51,"line":2702},[49,83616,54874],{"class":66},[49,83618,51526],{"class":55},[49,83620,831],{"class":66},[49,83622,51581],{"class":59},[49,83624,1382],{"class":55},[49,83626,83627,83629,83631,83633,83635],{"class":51,"line":2708},[49,83628,61839],{"class":66},[49,83630,51526],{"class":55},[49,83632,541],{"class":66},[49,83634,51581],{"class":59},[49,83636,1382],{"class":55},[49,83638,83639],{"class":51,"line":2713},[49,83640,2279],{"class":55},[49,83642,83643],{"class":51,"line":8038},[49,83644,2492],{"emptyLinePlaceholder":151},[49,83646,83647,83649,83651],{"class":51,"line":8062},[49,83648,78714],{"class":2055},[49,83650,62393],{"class":2055},[49,83652,15662],{"class":55},[49,83654,83655,83657,83659,83661,83663],{"class":51,"line":8067},[49,83656,54860],{"class":66},[49,83658,51526],{"class":55},[49,83660,1814],{"class":66},[49,83662,51581],{"class":59},[49,83664,1382],{"class":55},[49,83666,83667],{"class":51,"line":8073},[49,83668,2279],{"class":55},[49,83670,83671],{"class":51,"line":8100},[49,83672,2492],{"emptyLinePlaceholder":151},[49,83674,83675,83677,83679,83682],{"class":51,"line":8105},[49,83676,78714],{"class":2055},[49,83678,62393],{"class":2055},[49,83680,83681],{"class":2055}," .tag",[49,83683,15662],{"class":55},[49,83685,83686,83688,83690,83692],{"class":51,"line":8111},[49,83687,55098],{"class":66},[49,83689,51526],{"class":55},[49,83691,60958],{"class":66},[49,83693,1382],{"class":55},[49,83695,83696,83698,83700,83702,83704],{"class":51,"line":8123},[49,83697,54784],{"class":66},[49,83699,51526],{"class":55},[49,83701,301],{"class":66},[49,83703,51581],{"class":59},[49,83705,1382],{"class":55},[49,83707,83708,83710,83712,83714,83716],{"class":51,"line":8135},[49,83709,55011],{"class":66},[49,83711,51526],{"class":55},[49,83713,717],{"class":66},[49,83715,51581],{"class":59},[49,83717,1382],{"class":55},[49,83719,83720,83722,83724,83726],{"class":51,"line":8147},[49,83721,57505],{"class":66},[49,83723,51526],{"class":55},[49,83725,62159],{"class":66},[49,83727,1382],{"class":55},[49,83729,83730],{"class":51,"line":9806},[49,83731,2279],{"class":55},[49,83733,83734],{"class":51,"line":9831},[49,83735,2492],{"emptyLinePlaceholder":151},[49,83737,83738,83740,83742],{"class":51,"line":9854},[49,83739,78714],{"class":2055},[49,83741,79006],{"class":2055},[49,83743,31555],{"class":55},[49,83745,83746,83748,83751],{"class":51,"line":9878},[49,83747,78714],{"class":2055},[49,83749,83750],{"class":2055}," .sub-total",[49,83752,15662],{"class":55},[49,83754,83755,83757,83759,83761,83763],{"class":51,"line":9883},[49,83756,55011],{"class":66},[49,83758,51526],{"class":55},[49,83760,869],{"class":66},[49,83762,51581],{"class":59},[49,83764,1382],{"class":55},[49,83766,83767,83769,83771,83773],{"class":51,"line":9888},[49,83768,57505],{"class":66},[49,83770,51526],{"class":55},[49,83772,79029],{"class":66},[49,83774,1382],{"class":55},[49,83776,83777,83779,83781,83783],{"class":51,"line":9893},[49,83778,61926],{"class":66},[49,83780,51526],{"class":55},[49,83782,441],{"class":66},[49,83784,1382],{"class":55},[49,83786,83787],{"class":51,"line":9902},[49,83788,2279],{"class":55},[49,83790,83791],{"class":51,"line":9907},[49,83792,2492],{"emptyLinePlaceholder":151},[49,83794,83795,83797,83799],{"class":51,"line":9913},[49,83796,78714],{"class":2055},[49,83798,79046],{"class":2055},[49,83800,31555],{"class":55},[49,83802,83803,83805,83808],{"class":51,"line":9934},[49,83804,78714],{"class":2055},[49,83806,83807],{"class":2055}," .sub-total::before",[49,83809,31555],{"class":55},[49,83811,83812,83815],{"class":51,"line":9940},[49,83813,83814],{"class":2055},"    .amount::before",[49,83816,15662],{"class":55},[49,83818,83819,83821,83823,83825],{"class":51,"line":9954},[49,83820,79053],{"class":66},[49,83822,51526],{"class":55},[49,83824,79058],{"class":328},[49,83826,1382],{"class":55},[49,83828,83829,83831,83833,83835,83837],{"class":51,"line":9960},[49,83830,55011],{"class":66},[49,83832,51526],{"class":55},[49,83834,717],{"class":66},[49,83836,51581],{"class":59},[49,83838,1382],{"class":55},[49,83840,83841],{"class":51,"line":9987},[49,83842,2279],{"class":55},[49,83844,83845],{"class":51,"line":9996},[49,83846,2492],{"emptyLinePlaceholder":151},[49,83848,83849,83851,83854],{"class":51,"line":10002},[49,83850,78714],{"class":2055},[49,83852,83853],{"class":2055}," .spec",[49,83855,15662],{"class":55},[49,83857,83858,83860,83862,83864],{"class":51,"line":10010},[49,83859,61926],{"class":66},[49,83861,51526],{"class":55},[49,83863,301],{"class":66},[49,83865,1382],{"class":55},[49,83867,83868,83870,83872,83875],{"class":51,"line":10015},[49,83869,57505],{"class":66},[49,83871,51526],{"class":55},[49,83873,83874],{"class":66},"#888",[49,83876,1382],{"class":55},[49,83878,83879,83881,83883,83885,83887],{"class":51,"line":16694},[49,83880,55011],{"class":66},[49,83882,51526],{"class":55},[49,83884,768],{"class":66},[49,83886,51581],{"class":59},[49,83888,1382],{"class":55},[49,83890,83891,83893,83895,83897,83899],{"class":51,"line":16700},[49,83892,62089],{"class":66},[49,83894,51526],{"class":55},[49,83896,919],{"class":66},[49,83898,51581],{"class":59},[49,83900,1382],{"class":55},[49,83902,83903],{"class":51,"line":16723},[49,83904,2279],{"class":55},[49,83906,83907],{"class":51,"line":16729},[49,83908,2492],{"emptyLinePlaceholder":151},[49,83910,83911,83913,83916],{"class":51,"line":16752},[49,83912,78714],{"class":2055},[49,83914,83915],{"class":2055}," .count",[49,83917,15662],{"class":55},[49,83919,83920,83922,83924,83926],{"class":51,"line":16766},[49,83921,61926],{"class":66},[49,83923,51526],{"class":55},[49,83925,441],{"class":66},[49,83927,1382],{"class":55},[49,83929,83930,83932,83934,83937],{"class":51,"line":16786},[49,83931,57505],{"class":66},[49,83933,51526],{"class":55},[49,83935,83936],{"class":66},"#aaa",[49,83938,1382],{"class":55},[49,83940,83941],{"class":51,"line":16792},[49,83942,2279],{"class":55},[49,83944,83945],{"class":51,"line":16803},[49,83946,2492],{"emptyLinePlaceholder":151},[49,83948,83949,83951],{"class":51,"line":16826},[49,83950,72564],{"class":2055},[49,83952,15662],{"class":55},[49,83954,83955,83957,83959,83961,83963],{"class":51,"line":16848},[49,83956,54860],{"class":66},[49,83958,51526],{"class":55},[49,83960,78663],{"class":66},[49,83962,51581],{"class":59},[49,83964,1382],{"class":55},[49,83966,83967,83969,83971,83973,83975],{"class":51,"line":16853},[49,83968,54795],{"class":66},[49,83970,51526],{"class":55},[49,83972,415],{"class":66},[49,83974,51645],{"class":66},[49,83976,1382],{"class":55},[49,83978,83979,83981,83983,83985],{"class":51,"line":16859},[49,83980,55098],{"class":66},[49,83982,51526],{"class":55},[49,83984,51566],{"class":66},[49,83986,1382],{"class":55},[49,83988,83989,83991,83993,83995],{"class":51,"line":16873},[49,83990,55109],{"class":66},[49,83992,51526],{"class":55},[49,83994,51669],{"class":66},[49,83996,1382],{"class":55},[49,83998,83999,84002,84004,84006,84008,84010,84013],{"class":51,"line":16886},[49,84000,84001],{"class":66},"      border-top",[49,84003,51526],{"class":55},[49,84005,441],{"class":66},[49,84007,51581],{"class":59},[49,84009,51610],{"class":66},[49,84011,84012],{"class":66}," #4e4e4e",[49,84014,1382],{"class":55},[49,84016,84017,84019,84021,84023,84025],{"class":51,"line":16891},[49,84018,54784],{"class":66},[49,84020,51526],{"class":55},[49,84022,919],{"class":66},[49,84024,51581],{"class":59},[49,84026,1382],{"class":55},[49,84028,84029],{"class":51,"line":16905},[49,84030,2279],{"class":55},[49,84032,84033],{"class":51,"line":16910},[49,84034,2492],{"emptyLinePlaceholder":151},[49,84036,84037,84039,84042],{"class":51,"line":16916},[49,84038,72564],{"class":2055},[49,84040,84041],{"class":2055}," .amount",[49,84043,15662],{"class":55},[49,84045,84046,84048,84050,84052,84054],{"class":51,"line":16921},[49,84047,55011],{"class":66},[49,84049,51526],{"class":55},[49,84051,869],{"class":66},[49,84053,51581],{"class":59},[49,84055,1382],{"class":55},[49,84057,84058,84060,84062,84064],{"class":51,"line":16935},[49,84059,57505],{"class":66},[49,84061,51526],{"class":55},[49,84063,79029],{"class":66},[49,84065,1382],{"class":55},[49,84067,84068,84070,84072,84074],{"class":51,"line":16940},[49,84069,62423],{"class":66},[49,84071,51526],{"class":55},[49,84073,51578],{"class":66},[49,84075,1382],{"class":55},[49,84077,84078,84080,84082,84084,84086],{"class":51,"line":16945},[49,84079,61839],{"class":66},[49,84081,51526],{"class":55},[49,84083,875],{"class":66},[49,84085,51581],{"class":59},[49,84087,1382],{"class":55},[49,84089,84090],{"class":51,"line":16959},[49,84091,2279],{"class":55},[49,84093,84094,84096,84098],{"class":51,"line":16971},[49,84095,52506],{"class":55},[49,84097,143],{"class":51389},[49,84099,51396],{"class":55},[49,84101,84102,84104,84106],{"class":51,"line":16976},[49,84103,51874],{"class":55},[49,84105,51423],{"class":51389},[49,84107,51396],{"class":55},[49,84109,84110],{"class":51,"line":16989},[49,84111,2492],{"emptyLinePlaceholder":151},[49,84113,84114,84116,84118],{"class":51,"line":16994},[49,84115,1129],{"class":55},[49,84117,51889],{"class":51389},[49,84119,51396],{"class":55},[49,84121,84122,84124,84126,84128,84130,84132],{"class":51,"line":16999},[49,84123,52233],{"class":55},[49,84125,51700],{"class":51389},[49,84127,53575],{"class":2055},[49,84129,60],{"class":55},[49,84131,62697],{"class":328},[49,84133,51396],{"class":55},[49,84135,84136,84138,84140],{"class":51,"line":17004},[49,84137,52506],{"class":55},[49,84139,51700],{"class":51389},[49,84141,51396],{"class":55},[49,84143,84144,84146,84148,84150,84152,84154],{"class":51,"line":17017},[49,84145,52233],{"class":55},[49,84147,51700],{"class":51389},[49,84149,53575],{"class":2055},[49,84151,60],{"class":55},[49,84153,62669],{"class":328},[49,84155,51396],{"class":55},[49,84157,84158,84160,84162,84165,84167,84169,84171,84174,84176,84178,84180,84182],{"class":51,"line":17022},[49,84159,51430],{"class":55},[49,84161,51700],{"class":51389},[49,84163,84164],{"class":55},">合计：\u003C",[49,84166,49],{"class":51389},[49,84168,53575],{"class":2055},[49,84170,60],{"class":55},[49,84172,84173],{"class":328},"\"amount\"",[49,84175,55403],{"class":55},[49,84177,49],{"class":51389},[49,84179,55403],{"class":55},[49,84181,51700],{"class":51389},[49,84183,51396],{"class":55},[49,84185,84186,84188,84190],{"class":51,"line":32722},[49,84187,52506],{"class":55},[49,84189,51700],{"class":51389},[49,84191,51396],{"class":55},[49,84193,84194,84196,84198],{"class":51,"line":32728},[49,84195,52233],{"class":55},[49,84197,51902],{"class":51389},[49,84199,51396],{"class":55},[49,84201,84202,84204,84206,84208],{"class":51,"line":32734},[49,84203,11311],{"class":59},[49,84205,79466],{"class":66},[49,84207,13654],{"class":59},[49,84209,55536],{"class":55},[49,84211,84212],{"class":51,"line":32740},[49,84213,79475],{"class":55},[49,84215,84216,84218,84220],{"class":51,"line":32746},[49,84217,79480],{"class":55},[49,84219,79483],{"class":328},[49,84221,31555],{"class":55},[49,84223,84224,84226,84228],{"class":51,"line":32757},[49,84225,79490],{"class":55},[49,84227,79493],{"class":328},[49,84229,31555],{"class":55},[49,84231,84232,84234,84237],{"class":51,"line":32763},[49,84233,79500],{"class":55},[49,84235,84236],{"class":66},"289.9",[49,84238,31555],{"class":55},[49,84240,84241,84243,84245],{"class":51,"line":32783},[49,84242,79510],{"class":55},[49,84244,79513],{"class":328},[49,84246,31555],{"class":55},[49,84248,84249,84252,84254],{"class":51,"line":32789},[49,84250,84251],{"class":55},"        count: ",[49,84253,301],{"class":66},[49,84255,31555],{"class":55},[49,84257,84258,84261,84264],{"class":51,"line":32800},[49,84259,84260],{"class":55},"        spec: { color: ",[49,84262,84263],{"class":328},"'白色'",[49,84265,55693],{"class":55},[49,84267,84268],{"class":51,"line":32806},[49,84269,77981],{"class":55},[49,84271,84272],{"class":51,"line":32812},[49,84273,79475],{"class":55},[49,84275,84276,84278,84280],{"class":51,"line":32818},[49,84277,79480],{"class":55},[49,84279,79574],{"class":328},[49,84281,31555],{"class":55},[49,84283,84284,84286,84288],{"class":51,"line":32824},[49,84285,79490],{"class":55},[49,84287,79583],{"class":328},[49,84289,31555],{"class":55},[49,84291,84292,84294,84297],{"class":51,"line":32830},[49,84293,79500],{"class":55},[49,84295,84296],{"class":66},"109.8",[49,84298,31555],{"class":55},[49,84300,84301,84303,84305],{"class":51,"line":32836},[49,84302,79510],{"class":55},[49,84304,79601],{"class":328},[49,84306,31555],{"class":55},[49,84308,84309,84311,84313],{"class":51,"line":32842},[49,84310,84251],{"class":55},[49,84312,73],{"class":66},[49,84314,31555],{"class":55},[49,84316,84317,84320,84322,84324,84326],{"class":51,"line":32862},[49,84318,84319],{"class":55},"        spec: { size: ",[49,84321,81992],{"class":328},[49,84323,55553],{"class":55},[49,84325,81997],{"class":328},[49,84327,55693],{"class":55},[49,84329,84330],{"class":51,"line":32868},[49,84331,77981],{"class":55},[49,84333,84334],{"class":51,"line":32884},[49,84335,79475],{"class":55},[49,84337,84338,84340,84342],{"class":51,"line":32890},[49,84339,79480],{"class":55},[49,84341,79618],{"class":328},[49,84343,31555],{"class":55},[49,84345,84346,84348,84350],{"class":51,"line":32904},[49,84347,79490],{"class":55},[49,84349,79627],{"class":328},[49,84351,31555],{"class":55},[49,84353,84354,84356,84359],{"class":51,"line":32910},[49,84355,79500],{"class":55},[49,84357,84358],{"class":66},"488",[49,84360,31555],{"class":55},[49,84362,84363,84365,84367],{"class":51,"line":32925},[49,84364,79510],{"class":55},[49,84366,79645],{"class":328},[49,84368,31555],{"class":55},[49,84370,84371,84373,84375],{"class":51,"line":32931},[49,84372,84251],{"class":55},[49,84374,441],{"class":66},[49,84376,31555],{"class":55},[49,84378,84379,84381,84384,84387,84390],{"class":51,"line":32940},[49,84380,84260],{"class":55},[49,84382,84383],{"class":328},"'青色'",[49,84385,84386],{"class":55},", sum: ",[49,84388,84389],{"class":328},"'一大四小'",[49,84391,55693],{"class":55},[49,84393,84394],{"class":51,"line":32946},[49,84395,77981],{"class":55},[49,84397,84398],{"class":51,"line":32955},[49,84399,79475],{"class":55},[49,84401,84402,84404,84406],{"class":51,"line":32961},[49,84403,79480],{"class":55},[49,84405,79662],{"class":328},[49,84407,31555],{"class":55},[49,84409,84410,84412,84414],{"class":51,"line":32967},[49,84411,79490],{"class":55},[49,84413,79671],{"class":328},[49,84415,31555],{"class":55},[49,84417,84418,84420,84423],{"class":51,"line":32976},[49,84419,79500],{"class":55},[49,84421,84422],{"class":66},"139",[49,84424,31555],{"class":55},[49,84426,84427,84429,84431],{"class":51,"line":32982},[49,84428,79510],{"class":55},[49,84430,79689],{"class":328},[49,84432,31555],{"class":55},[49,84434,84435,84437,84439],{"class":51,"line":32993},[49,84436,84251],{"class":55},[49,84438,441],{"class":66},[49,84440,31555],{"class":55},[49,84442,84443,84445,84448,84450,84453],{"class":51,"line":32999},[49,84444,84319],{"class":55},[49,84446,84447],{"class":328},"'小号'",[49,84449,55553],{"class":55},[49,84451,84452],{"class":328},"'紫色'",[49,84454,55559],{"class":55},[49,84456,84457,84460],{"class":51,"line":33018},[49,84458,84459],{"class":55},"        gift: ",[49,84461,84462],{"class":328},"'50g茶叶,清洗球'\n",[49,84464,84465],{"class":51,"line":33024},[49,84466,52487],{"class":55},[49,84468,84469],{"class":51,"line":33035},[49,84470,53198],{"class":55},[49,84472,84473],{"class":51,"line":33041},[49,84474,84475],{"class":283},"    \u002F\u002F  1.根据数据渲染页面\n",[49,84477,84478,84480,84482,84484,84486,84488,84490,84492,84494,84496,84498,84500],{"class":51,"line":33061},[49,84479,52496],{"class":55},[49,84481,54488],{"class":2055},[49,84483,228],{"class":55},[49,84485,79990],{"class":328},[49,84487,74338],{"class":55},[49,84489,60],{"class":59},[49,84491,80137],{"class":55},[49,84493,74133],{"class":2055},[49,84495,228],{"class":55},[49,84497,79884],{"class":126},[49,84499,79887],{"class":59},[49,84501,15662],{"class":55},[49,84503,84504],{"class":51,"line":33077},[49,84505,84506],{"class":283},"      \u002F\u002F 对象解构\n",[49,84508,84509,84511,84513,84515,84517,84519,84521,84524,84526,84528,84530,84533,84535,84538,84540,84542],{"class":51,"line":33083},[49,84510,58317],{"class":59},[49,84512,79896],{"class":55},[49,84514,79909],{"class":66},[49,84516,12525],{"class":55},[49,84518,79899],{"class":66},[49,84520,12525],{"class":55},[49,84522,84523],{"class":66},"count",[49,84525,12525],{"class":55},[49,84527,79904],{"class":66},[49,84529,12525],{"class":55},[49,84531,84532],{"class":66},"spec",[49,84534,12525],{"class":55},[49,84536,84537],{"class":66},"gift",[49,84539,79912],{"class":55},[49,84541,60],{"class":59},[49,84543,79917],{"class":55},[49,84545,84546],{"class":51,"line":33097},[49,84547,84548],{"class":283},"      \u002F\u002F 规格文字模块处理\n",[49,84550,84551,84553,84556,84558,84560,84562,84564,84566,84568,84570],{"class":51,"line":33103},[49,84552,58317],{"class":59},[49,84554,84555],{"class":66}," text",[49,84557,13654],{"class":59},[49,84559,82027],{"class":55},[49,84561,82030],{"class":2055},[49,84563,82033],{"class":55},[49,84565,74312],{"class":2055},[49,84567,228],{"class":55},[49,84569,82040],{"class":328},[49,84571,81],{"class":55},[49,84573,84574],{"class":51,"line":33109},[49,84575,84576],{"class":283},"      \u002F\u002F 处理赠品模块\n",[49,84578,84579,84581,84583,84585,84588,84590,84592,84594,84596,84599,84601,84603,84605,84607,84609,84612,84614,84617,84619,84621,84623,84625,84627,84629],{"class":51,"line":33120},[49,84580,58317],{"class":59},[49,84582,74008],{"class":66},[49,84584,13654],{"class":59},[49,84586,84587],{"class":55}," gift ",[49,84589,1205],{"class":59},[49,84591,83201],{"class":55},[49,84593,83204],{"class":2055},[49,84595,228],{"class":55},[49,84597,84598],{"class":328},"','",[49,84600,30915],{"class":55},[49,84602,74133],{"class":2055},[49,84604,228],{"class":55},[49,84606,79884],{"class":126},[49,84608,79887],{"class":59},[49,84610,84611],{"class":328}," `\u003Cspan class=\"tag\">【赠品】${",[49,84613,79884],{"class":55},[49,84615,84616],{"class":328},"}\u003C\u002Fspan>`",[49,84618,30915],{"class":55},[49,84620,74312],{"class":2055},[49,84622,228],{"class":55},[49,84624,74317],{"class":328},[49,84626,13804],{"class":55},[49,84628,1078],{"class":59},[49,84630,70193],{"class":328},[49,84632,84633],{"class":51,"line":33126},[49,84634,84635],{"class":283},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[49,84637,84638,84640,84643,84645,84648,84650,84652,84654,84657,84659,84661,84663,84666,84668,84670],{"class":51,"line":33132},[49,84639,58317],{"class":59},[49,84641,84642],{"class":66}," subtotal",[49,84644,13654],{"class":59},[49,84646,84647],{"class":55}," ((price ",[49,84649,674],{"class":59},[49,84651,5844],{"class":66},[49,84653,6608],{"class":59},[49,84655,84656],{"class":55}," count) ",[49,84658,803],{"class":59},[49,84660,5844],{"class":66},[49,84662,30915],{"class":55},[49,84664,84665],{"class":2055},"toFixed",[49,84667,228],{"class":55},[49,84669,301],{"class":66},[49,84671,81],{"class":55},[49,84673,84674],{"class":51,"line":33142},[49,84675,2492],{"emptyLinePlaceholder":151},[49,84677,84678,84680],{"class":51,"line":33148},[49,84679,74071],{"class":59},[49,84681,70257],{"class":328},[49,84683,84684],{"class":51,"line":33159},[49,84685,84686],{"class":328},"        \u003Cdiv class=\"item\">\n",[49,84688,84689,84692,84694],{"class":51,"line":33165},[49,84690,84691],{"class":328},"          \u003Cimg src=\"${",[49,84693,79909],{"class":55},[49,84695,79941],{"class":328},[49,84697,84698,84701,84703,84706,84708],{"class":51,"line":33175},[49,84699,84700],{"class":328},"          \u003Cp class=\"name\">${",[49,84702,79899],{"class":55},[49,84704,84705],{"class":328},"}${",[49,84707,1391],{"class":55},[49,84709,79951],{"class":328},[49,84711,84712,84715,84717],{"class":51,"line":33180},[49,84713,84714],{"class":328},"          \u003Cp class=\"spec\">${",[49,84716,5278],{"class":55},[49,84718,79951],{"class":328},[49,84720,84721,84724,84726,84728,84730,84732,84734,84736],{"class":51,"line":33186},[49,84722,84723],{"class":328},"          \u003Cp class=\"price\">${",[49,84725,79904],{"class":55},[49,84727,777],{"class":328},[49,84729,84665],{"class":2055},[49,84731,228],{"class":328},[49,84733,301],{"class":66},[49,84735,649],{"class":328},[49,84737,79951],{"class":328},[49,84739,84740,84743,84745],{"class":51,"line":33235},[49,84741,84742],{"class":328},"          \u003Cp class=\"count\">x${",[49,84744,84523],{"class":55},[49,84746,79951],{"class":328},[49,84748,84749,84752,84755],{"class":51,"line":33282},[49,84750,84751],{"class":328},"          \u003Cp class=\"sub-total\">${",[49,84753,84754],{"class":55},"subtotal",[49,84756,79951],{"class":328},[49,84758,84759],{"class":51,"line":33287},[49,84760,84761],{"class":328},"        \u003C\u002Fdiv> \n",[49,84763,84764],{"class":51,"line":33293},[49,84765,84766],{"class":328},"             `\n",[49,84768,84769,84772,84774,84776,84778],{"class":51,"line":33312},[49,84770,84771],{"class":55},"    }).",[49,84773,74312],{"class":2055},[49,84775,228],{"class":55},[49,84777,74317],{"class":328},[49,84779,81],{"class":55},[49,84781,84782],{"class":51,"line":33318},[49,84783,84784],{"class":283},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[49,84786,84787,84789,84791,84793,84795,84798,84800,84803,84805,84807,84809,84812,84815,84817,84820,84822,84824,84826,84829,84831,84833,84835,84837],{"class":51,"line":33338},[49,84788,11311],{"class":59},[49,84790,62874],{"class":66},[49,84792,13654],{"class":59},[49,84794,80137],{"class":55},[49,84796,84797],{"class":2055},"reduce",[49,84799,2468],{"class":55},[49,84801,84802],{"class":126},"prev",[49,84804,12525],{"class":55},[49,84806,79884],{"class":126},[49,84808,13804],{"class":55},[49,84810,84811],{"class":59},"=>",[49,84813,84814],{"class":55}," prev ",[49,84816,700],{"class":59},[49,84818,84819],{"class":55}," (item.price ",[49,84821,674],{"class":59},[49,84823,5844],{"class":66},[49,84825,6608],{"class":59},[49,84827,84828],{"class":55}," item.count) ",[49,84830,803],{"class":59},[49,84832,5844],{"class":66},[49,84834,12525],{"class":55},[49,84836,415],{"class":66},[49,84838,81],{"class":55},[49,84840,84841,84843,84845,84847,84850,84852,84854,84857,84859,84861,84863],{"class":51,"line":33344},[49,84842,52496],{"class":55},[49,84844,54488],{"class":2055},[49,84846,228],{"class":55},[49,84848,84849],{"class":328},"'.amount'",[49,84851,74338],{"class":55},[49,84853,60],{"class":59},[49,84855,84856],{"class":55}," total.",[49,84858,84665],{"class":2055},[49,84860,228],{"class":55},[49,84862,301],{"class":66},[49,84864,81],{"class":55},[49,84866,84867,84869,84871],{"class":51,"line":33350},[49,84868,52506],{"class":55},[49,84870,51902],{"class":51389},[49,84872,51396],{"class":55},[49,84874,84875,84877,84879],{"class":51,"line":33360},[49,84876,51874],{"class":55},[49,84878,51889],{"class":51389},[49,84880,51396],{"class":55},[49,84882,84883],{"class":51,"line":33365},[49,84884,2492],{"emptyLinePlaceholder":151},[49,84886,84887,84889,84891],{"class":51,"line":33371},[49,84888,51874],{"class":55},[49,84890,50724],{"class":51389},[49,84892,51396],{"class":55},[166,84894,84896],{"id":84895},"_411-编程思想","4.11 编程思想",[195,84898,84900],{"id":84899},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84902,84903,84906],{},[373,84904,84905],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84908,84909],{},"调用就可以了",[14,84911,84912],{},[1554,84913],{"alt":44,"src":84914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[195,84916,84918],{"id":84917},"_4112-面向对象","4.11.2 面向对象",[14,84920,84921],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84923,84924],{},[1554,84925],{"alt":44,"src":84926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84928,84929],{},"面向对象的特性：",[1226,84931,84932,84935,84938],{},[181,84933,84934],{},"封装性",[181,84936,84937],{},"继承性",[181,84939,84940],{},"多态性",[195,84942,84944],{"id":84943},"_4113-两者比较","4.11.3 两者比较",[14,84946,84947],{},[1554,84948],{"alt":44,"src":84949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[166,84951,84953],{"id":84952},"_412-构造函数回顾","4.12 构造函数回顾",[14,84955,84956],{},[1554,84957],{"alt":44,"src":84958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84960,84961],{},[1554,84962],{"alt":44,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84965,84966],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84968,84969],{},[1554,84970],{"alt":44,"src":84971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[166,84973,84975],{"id":84974},"_413-原型","4.13 原型",[195,84977,84979],{"id":84978},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84981,84982],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84984,84985],{},[1554,84986],{"alt":44,"src":84987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84989,84990],{},[1554,84991],{"alt":44,"src":84992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84994,84995],{},"原型是构造函数的属性，它也是一个对象",[14,84997,84998],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85000,85001],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[39,85003,85005],{"className":53156,"code":85004,"language":53158,"meta":44,"style":44},"\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",[46,85006,85007,85015,85020,85028,85033,85038,85043,85048,85053,85057,85061,85065,85070,85075,85079,85084,85089,85094,85099,85104,85108,85116],{"__ignoreMap":44},[49,85008,85009,85011,85013],{"class":51,"line":52},[49,85010,1129],{"class":55},[49,85012,51889],{"class":51389},[49,85014,51396],{"class":55},[49,85016,85017],{"class":51,"line":84},[49,85018,85019],{"class":283},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[49,85021,85022,85024,85026],{"class":51,"line":109},[49,85023,52233],{"class":55},[49,85025,51902],{"class":51389},[49,85027,51396],{"class":55},[49,85029,85030],{"class":51,"line":120},[49,85031,85032],{"class":55},"    function Star(uname, age) {\n",[49,85034,85035],{"class":51,"line":135},[49,85036,85037],{"class":55},"      this.uname = uname,\n",[49,85039,85040],{"class":51,"line":1306},[49,85041,85042],{"class":55},"        this.age = age\n",[49,85044,85045],{"class":51,"line":1312},[49,85046,85047],{"class":55},"      \u002F\u002F this.sing = function () {\n",[49,85049,85050],{"class":51,"line":1403},[49,85051,85052],{"class":55},"      \u002F\u002F   console.log('唱歌')\n",[49,85054,85055],{"class":51,"line":1409},[49,85056,2492],{"emptyLinePlaceholder":151},[49,85058,85059],{"class":51,"line":1421},[49,85060,60126],{"class":55},[49,85062,85063],{"class":51,"line":1704},[49,85064,2279],{"class":55},[49,85066,85067],{"class":51,"line":1709},[49,85068,85069],{"class":55},"    Star.prototype.sing = function () {\n",[49,85071,85072],{"class":51,"line":1715},[49,85073,85074],{"class":55},"      console.log('唱歌')\n",[49,85076,85077],{"class":51,"line":1720},[49,85078,2279],{"class":55},[49,85080,85081],{"class":51,"line":1734},[49,85082,85083],{"class":55},"    \u002F\u002F console.dir(Star.prototype)\n",[49,85085,85086],{"class":51,"line":1739},[49,85087,85088],{"class":55},"    const pink = new Star('pink', 18)\n",[49,85090,85091],{"class":51,"line":1745},[49,85092,85093],{"class":55},"    const red = new Star('red', 20)\n",[49,85095,85096],{"class":51,"line":1766},[49,85097,85098],{"class":55},"    pink.sing()\n",[49,85100,85101],{"class":51,"line":1771},[49,85102,85103],{"class":55},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[49,85105,85106],{"class":51,"line":1785},[49,85107,2492],{"emptyLinePlaceholder":151},[49,85109,85110,85112,85114],{"class":51,"line":1790},[49,85111,52506],{"class":55},[49,85113,51902],{"class":51389},[49,85115,51396],{"class":55},[49,85117,85118,85120,85122],{"class":51,"line":1819},[49,85119,51874],{"class":55},[49,85121,51889],{"class":51389},[49,85123,51396],{"class":55},[14,85125,85126],{},[1554,85127],{"alt":44,"src":85128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[39,85130,85132],{"className":53156,"code":85131,"language":53158,"meta":44,"style":44},"\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",[46,85133,85134,85142,85150,85155,85160,85165,85170,85174,85179,85184,85189,85193,85198,85202,85206,85211,85215,85223],{"__ignoreMap":44},[49,85135,85136,85138,85140],{"class":51,"line":52},[49,85137,1129],{"class":55},[49,85139,51889],{"class":51389},[49,85141,51396],{"class":55},[49,85143,85144,85146,85148],{"class":51,"line":84},[49,85145,52233],{"class":55},[49,85147,51902],{"class":51389},[49,85149,51396],{"class":55},[49,85151,85152],{"class":51,"line":109},[49,85153,85154],{"class":55},"    let that\n",[49,85156,85157],{"class":51,"line":120},[49,85158,85159],{"class":55},"    function Star(uname) {\n",[49,85161,85162],{"class":51,"line":135},[49,85163,85164],{"class":55},"      this.uname = uname\n",[49,85166,85167],{"class":51,"line":1306},[49,85168,85169],{"class":55},"      that = this\n",[49,85171,85172],{"class":51,"line":1312},[49,85173,2279],{"class":55},[49,85175,85176],{"class":51,"line":1403},[49,85177,85178],{"class":55},"    \u002F\u002F 实例对象是 ldh\n",[49,85180,85181],{"class":51,"line":1409},[49,85182,85183],{"class":55},"    const ldh = new Star('刘德华')\n",[49,85185,85186],{"class":51,"line":1421},[49,85187,85188],{"class":55},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[49,85190,85191],{"class":51,"line":1704},[49,85192,2492],{"emptyLinePlaceholder":151},[49,85194,85195],{"class":51,"line":1709},[49,85196,85197],{"class":55},"    Star.sing = function () {\n",[49,85199,85200],{"class":51,"line":1715},[49,85201,85074],{"class":55},[49,85203,85204],{"class":51,"line":1720},[49,85205,2279],{"class":55},[49,85207,85208],{"class":51,"line":1734},[49,85209,85210],{"class":55},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[49,85212,85213],{"class":51,"line":1739},[49,85214,2492],{"emptyLinePlaceholder":151},[49,85216,85217,85219,85221],{"class":51,"line":1745},[49,85218,52506],{"class":55},[49,85220,51902],{"class":51389},[49,85222,51396],{"class":55},[49,85224,85225,85227,85229],{"class":51,"line":1766},[49,85226,51874],{"class":55},[49,85228,51889],{"class":51389},[49,85230,51396],{"class":55},[14,85232,85233],{},"构造函数的this指向的是实例对象；",[14,85235,85236],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[195,85238,85240],{"id":85239},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85242,85243],{},[1554,85244],{"alt":44,"src":85245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[39,85247,85249],{"className":53156,"code":85248,"language":53158,"meta":44,"style":44},"\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",[46,85250,85251,85259,85267,85272,85277,85282,85287,85292,85297,85302,85307,85312,85317,85321,85326,85331,85336,85341,85345,85350,85355,85360,85365,85369,85374,85379,85384,85389,85393,85398,85402,85410],{"__ignoreMap":44},[49,85252,85253,85255,85257],{"class":51,"line":52},[49,85254,1129],{"class":55},[49,85256,51889],{"class":51389},[49,85258,51396],{"class":55},[49,85260,85261,85263,85265],{"class":51,"line":84},[49,85262,52233],{"class":55},[49,85264,51902],{"class":51389},[49,85266,51396],{"class":55},[49,85268,85269],{"class":51,"line":109},[49,85270,85271],{"class":55},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[49,85273,85274],{"class":51,"line":120},[49,85275,85276],{"class":55},"    const arr = [1, 2, 3]\n",[49,85278,85279],{"class":51,"line":135},[49,85280,85281],{"class":55},"    \u002F\u002F 自己定义数组的扩展方法\n",[49,85283,85284],{"class":51,"line":1306},[49,85285,85286],{"class":55},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[49,85288,85289],{"class":51,"line":1312},[49,85290,85291],{"class":55},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[49,85293,85294],{"class":51,"line":1403},[49,85295,85296],{"class":55},"    \u002F\u002F ①.最大值\n",[49,85298,85299],{"class":51,"line":1409},[49,85300,85301],{"class":55},"    Array.prototype.max = function () {\n",[49,85303,85304],{"class":51,"line":1421},[49,85305,85306],{"class":55},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[49,85308,85309],{"class":51,"line":1704},[49,85310,85311],{"class":55},"      return Math.max(...this)\n",[49,85313,85314],{"class":51,"line":1709},[49,85315,85316],{"class":55},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[49,85318,85319],{"class":51,"line":1715},[49,85320,2279],{"class":55},[49,85322,85323],{"class":51,"line":1720},[49,85324,85325],{"class":55},"    console.log(arr.max())\n",[49,85327,85328],{"class":51,"line":1734},[49,85329,85330],{"class":55},"    \u002F\u002F ②最小值\n",[49,85332,85333],{"class":51,"line":1739},[49,85334,85335],{"class":55},"    Array.prototype.min = function () {\n",[49,85337,85338],{"class":51,"line":1745},[49,85339,85340],{"class":55},"      return Math.min(...this)\n",[49,85342,85343],{"class":51,"line":1766},[49,85344,2279],{"class":55},[49,85346,85347],{"class":51,"line":1771},[49,85348,85349],{"class":55},"    console.log(arr.min())\n",[49,85351,85352],{"class":51,"line":1785},[49,85353,85354],{"class":55},"    \u002F\u002F③求和\n",[49,85356,85357],{"class":51,"line":1790},[49,85358,85359],{"class":55},"    Array.prototype.sum = function () {\n",[49,85361,85362],{"class":51,"line":1819},[49,85363,85364],{"class":55},"      return this.reduce((prev, current) => prev + current, 0)\n",[49,85366,85367],{"class":51,"line":1824},[49,85368,2279],{"class":55},[49,85370,85371],{"class":51,"line":1841},[49,85372,85373],{"class":55},"    console.log(arr.sum())\n",[49,85375,85376],{"class":51,"line":1846},[49,85377,85378],{"class":55},"    \u002F\u002F ③排序\n",[49,85380,85381],{"class":51,"line":1851},[49,85382,85383],{"class":55},"    Array.prototype.rever = function () {\n",[49,85385,85386],{"class":51,"line":1856},[49,85387,85388],{"class":55},"      return this.reverse()\n",[49,85390,85391],{"class":51,"line":1870},[49,85392,2279],{"class":55},[49,85394,85395],{"class":51,"line":1875},[49,85396,85397],{"class":55},"    console.log(arr.rever())\n",[49,85399,85400],{"class":51,"line":2669},[49,85401,2492],{"emptyLinePlaceholder":151},[49,85403,85404,85406,85408],{"class":51,"line":2683},[49,85405,52506],{"class":55},[49,85407,51902],{"class":51389},[49,85409,51396],{"class":55},[49,85411,85412,85414,85416],{"class":51,"line":2691},[49,85413,51874],{"class":55},[49,85415,51889],{"class":51389},[49,85417,51396],{"class":55},[14,85419,85420],{},[1554,85421],{"alt":44,"src":85422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[195,85424,85426],{"id":85425},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85428,85429],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85431,85432],{},[1554,85433],{"alt":44,"src":85434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[39,85436,85438],{"className":53156,"code":85437,"language":53158,"meta":44,"style":44},"\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",[46,85439,85440,85448,85456,85461,85466,85470,85475,85480,85485,85493],{"__ignoreMap":44},[49,85441,85442,85444,85446],{"class":51,"line":52},[49,85443,1129],{"class":55},[49,85445,51889],{"class":51389},[49,85447,51396],{"class":55},[49,85449,85450,85452,85454],{"class":51,"line":84},[49,85451,52233],{"class":55},[49,85453,51902],{"class":51389},[49,85455,51396],{"class":55},[49,85457,85458],{"class":51,"line":109},[49,85459,85460],{"class":55},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[49,85462,85463],{"class":51,"line":120},[49,85464,85465],{"class":55},"    function Star() {\n",[49,85467,85468],{"class":51,"line":135},[49,85469,2279],{"class":55},[49,85471,85472],{"class":51,"line":1306},[49,85473,85474],{"class":55},"    const ldh = new Star()\n",[49,85476,85477],{"class":51,"line":1312},[49,85478,85479],{"class":55},"    console.log(Star.prototype)\n",[49,85481,85482],{"class":51,"line":1403},[49,85483,85484],{"class":55},"    console.log(Star.prototype.constructor === Star)\n",[49,85486,85487,85489,85491],{"class":51,"line":1409},[49,85488,52506],{"class":55},[49,85490,51902],{"class":51389},[49,85492,51396],{"class":55},[49,85494,85495,85497,85499],{"class":51,"line":1421},[49,85496,51874],{"class":55},[49,85498,51889],{"class":51389},[49,85500,51396],{"class":55},[14,85502,85503],{},[1554,85504],{"alt":44,"src":85505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85507,85508],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[39,85510,85512],{"className":53156,"code":85511,"language":53158,"meta":44,"style":44},"  \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",[46,85513,85514,85522,85526,85530,85534,85539,85544,85549,85553,85558,85563,85568,85573,85578,85583,85587,85591,85596,85601,85606,85610,85615,85620,85624,85628,85632],{"__ignoreMap":44},[49,85515,85516,85518,85520],{"class":51,"line":52},[49,85517,52233],{"class":55},[49,85519,51902],{"class":51389},[49,85521,51396],{"class":55},[49,85523,85524],{"class":51,"line":84},[49,85525,85460],{"class":55},[49,85527,85528],{"class":51,"line":109},[49,85529,85465],{"class":55},[49,85531,85532],{"class":51,"line":120},[49,85533,2279],{"class":55},[49,85535,85536],{"class":51,"line":135},[49,85537,85538],{"class":55},"    \u002F\u002F const ldh = new Star()\n",[49,85540,85541],{"class":51,"line":1306},[49,85542,85543],{"class":55},"    \u002F\u002F console.log(Star.prototype)\n",[49,85545,85546],{"class":51,"line":1312},[49,85547,85548],{"class":55},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[49,85550,85551],{"class":51,"line":1403},[49,85552,2492],{"emptyLinePlaceholder":151},[49,85554,85555],{"class":51,"line":1409},[49,85556,85557],{"class":55},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[49,85559,85560],{"class":51,"line":1421},[49,85561,85562],{"class":55},"    \u002F\u002F Star.prototype.sing = function () {\n",[49,85564,85565],{"class":51,"line":1704},[49,85566,85567],{"class":55},"    \u002F\u002F   console.log('唱歌')\n",[49,85569,85570],{"class":51,"line":1709},[49,85571,85572],{"class":55},"    \u002F\u002F }\n",[49,85574,85575],{"class":51,"line":1715},[49,85576,85577],{"class":55},"    \u002F\u002F Star.prototype.dance = function () {\n",[49,85579,85580],{"class":51,"line":1720},[49,85581,85582],{"class":55},"    \u002F\u002F   console.log('跳舞')\n",[49,85584,85585],{"class":51,"line":1734},[49,85586,85572],{"class":55},[49,85588,85589],{"class":51,"line":1739},[49,85590,85479],{"class":55},[49,85592,85593],{"class":51,"line":1745},[49,85594,85595],{"class":55},"    Star.prototype = {\n",[49,85597,85598],{"class":51,"line":1766},[49,85599,85600],{"class":55},"      sing: function () {\n",[49,85602,85603],{"class":51,"line":1771},[49,85604,85605],{"class":55},"        console.log('唱歌')\n",[49,85607,85608],{"class":51,"line":1785},[49,85609,77981],{"class":55},[49,85611,85612],{"class":51,"line":1790},[49,85613,85614],{"class":55},"      dance: function () {\n",[49,85616,85617],{"class":51,"line":1819},[49,85618,85619],{"class":55},"        console.log('跳舞')\n",[49,85621,85622],{"class":51,"line":1824},[49,85623,52487],{"class":55},[49,85625,85626],{"class":51,"line":1841},[49,85627,2279],{"class":55},[49,85629,85630],{"class":51,"line":1846},[49,85631,85479],{"class":55},[49,85633,85634,85636,85638],{"class":51,"line":1851},[49,85635,52506],{"class":55},[49,85637,51902],{"class":51389},[49,85639,51396],{"class":55},[14,85641,85642],{},"进行输出结果后会发现：",[14,85644,85645],{},[1554,85646],{"alt":44,"src":85647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85649,85650],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85652,85653],{},"所以，要重新指回创造这个原型对象的构造函数",[39,85655,85657],{"className":71302,"code":85656,"language":71304,"meta":44,"style":44},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[46,85658,85659,85673,85678,85683,85694,85707,85712,85723,85737,85741],{"__ignoreMap":44},[49,85660,85661,85664,85666,85669,85671],{"class":51,"line":52},[49,85662,85663],{"class":66},"Star",[49,85665,777],{"class":55},[49,85667,85668],{"class":66},"prototype",[49,85670,13654],{"class":59},[49,85672,15662],{"class":55},[49,85674,85675],{"class":51,"line":84},[49,85676,85677],{"class":283},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[49,85679,85680],{"class":51,"line":109},[49,85681,85682],{"class":55},"  constructor: Star,\n",[49,85684,85685,85688,85690,85692],{"class":51,"line":120},[49,85686,85687],{"class":2055},"  sing",[49,85689,51526],{"class":55},[49,85691,54538],{"class":59},[49,85693,54541],{"class":55},[49,85695,85696,85698,85700,85702,85705],{"class":51,"line":135},[49,85697,73842],{"class":55},[49,85699,58336],{"class":2055},[49,85701,228],{"class":55},[49,85703,85704],{"class":328},"'唱歌'",[49,85706,81],{"class":55},[49,85708,85709],{"class":51,"line":1306},[49,85710,85711],{"class":55},"   },\n",[49,85713,85714,85717,85719,85721],{"class":51,"line":1312},[49,85715,85716],{"class":2055},"   dance",[49,85718,51526],{"class":55},[49,85720,54538],{"class":59},[49,85722,54541],{"class":55},[49,85724,85725,85728,85730,85732,85735],{"class":51,"line":1403},[49,85726,85727],{"class":55},"     console.",[49,85729,58336],{"class":2055},[49,85731,228],{"class":55},[49,85733,85734],{"class":328},"'跳舞'",[49,85736,81],{"class":55},[49,85738,85739],{"class":51,"line":1409},[49,85740,4401],{"class":55},[49,85742,85743],{"class":51,"line":1421},[49,85744,1657],{"class":55},[14,85746,85747],{},[1554,85748],{"alt":44,"src":85749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85751,85752],{},"总结1：",[14,85754,85755],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85757,85758],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85760,85761],{},"constructor指的是他的来源",[14,85763,85764],{},[1554,85765],{"alt":44,"src":85766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85768,85769],{},[1554,85770],{"alt":44,"src":85771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85773,85774],{},"总结2：",[14,85776,85777],{},[1554,85778],{"alt":44,"src":85779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85781,85782],{},[1554,85783],{"alt":44,"src":85784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85786,85787],{},[1554,85788],{"alt":44,"src":85789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[195,85791,85793],{"id":85792},"_4134-对象原型","4.13.4 对象原型",[14,85795,85796],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85798,85799],{},"对象原型就是__proto__这个属性",[14,85801,85802],{},[1554,85803],{"alt":44,"src":85804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85806,85807],{},[1554,85808],{"alt":44,"src":85809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85811,85812],{},[1554,85813],{"alt":44,"src":85814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85816,85817],{},[1554,85818],{"alt":44,"src":85819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[39,85821,85823],{"className":53156,"code":85822,"language":53158,"meta":44,"style":44},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,85824,85825,85833,85841,85845,85849,85853,85858,85866],{"__ignoreMap":44},[49,85826,85827,85829,85831],{"class":51,"line":52},[49,85828,1129],{"class":55},[49,85830,51889],{"class":51389},[49,85832,51396],{"class":55},[49,85834,85835,85837,85839],{"class":51,"line":84},[49,85836,52233],{"class":55},[49,85838,51902],{"class":51389},[49,85840,51396],{"class":55},[49,85842,85843],{"class":51,"line":109},[49,85844,85465],{"class":55},[49,85846,85847],{"class":51,"line":120},[49,85848,2279],{"class":55},[49,85850,85851],{"class":51,"line":135},[49,85852,85474],{"class":55},[49,85854,85855],{"class":51,"line":1306},[49,85856,85857],{"class":55},"    console.log(ldh)\n",[49,85859,85860,85862,85864],{"class":51,"line":1312},[49,85861,52506],{"class":55},[49,85863,51902],{"class":51389},[49,85865,51396],{"class":55},[49,85867,85868,85870,85872],{"class":51,"line":1403},[49,85869,51874],{"class":55},[49,85871,51889],{"class":51389},[49,85873,51396],{"class":55},[14,85875,85876],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85878,85879],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85881,85882],{},[1554,85883],{"alt":44,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85886,85887],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85889,85890],{},"对象原型指向原型对象",[14,85892,85893],{},[1554,85894],{"alt":44,"src":85895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85897,85898],{},[1554,85899],{"alt":44,"src":85900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85902,85903],{},[1554,85904],{"alt":44,"src":85905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[195,85907,85909],{"id":85908},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85911,85912],{},[1554,85913],{"alt":44,"src":85914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[178,85916,85917,85920,85923,85926],{},[181,85918,85919],{},"构造函数通过new的形式实例化得到实例对象",[181,85921,85922],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[181,85924,85925],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[181,85927,85928],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85930,85931],{},[1554,85932],{"alt":44,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85935,85936],{},"题目梳理：",[14,85938,85939],{},[1554,85940],{"alt":44,"src":85941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[195,85943,85945],{"id":85944},"_4136-原型继承","4.13.6 原型继承",[14,85947,85948],{},[1554,85949],{"alt":44,"src":85950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85952,85953],{},[1554,85954],{"alt":44,"src":85955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85957,85958],{},[1554,85959],{"alt":44,"src":85960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85962,85963],{},[1554,85964],{"alt":44,"src":85965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85967,85968],{},[1554,85969],{"alt":44,"src":85970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85972,85973],{},[1554,85974],{"alt":44,"src":85975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85977,85978],{},[1554,85979],{"alt":44,"src":85980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85982,85983],{},[1554,85984],{"alt":44,"src":85985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85987,85988],{},"回顾：构造函数每次new得到对象都是不同的",[195,85990,85992],{"id":85991},"_4137-原型链","4.13.7 原型链",[14,85994,85995],{},[1554,85996],{"alt":44,"src":85997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85999,86000],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86002,86003],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86005,86006],{},"大哥是Object",[14,86008,86009],{},[1554,86010],{"alt":44,"src":86011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86013,86014],{},[1554,86015],{"alt":44,"src":86016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86018,86019],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86021,86022],{},"万物皆对象",[195,86024,86026],{"id":86025},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86028,86029],{},"模态框",[14,86031,86032],{},"以后遇见这个效果直接使用这个就行",[14,86034,86035],{},[1554,86036],{"alt":44,"src":86037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86039,86040],{},[1554,86041],{"alt":44,"src":86042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86044,86045],{},[1554,86046],{"alt":44,"src":86047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86049,86050],{},[1554,86051],{"alt":44,"src":86052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86054,86055],{},"补充知识点：",[178,86057,86058],{},[181,86059,86060],{},"append()",[14,86062,86063],{},[1554,86064],{"alt":44,"src":86065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[39,86067,86069],{"className":50722,"code":86068,"language":50724,"meta":44,"style":44},"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",[46,86070,86071,86076,86081,86086,86090,86094,86098,86103,86108,86113,86117],{"__ignoreMap":44},[49,86072,86073],{"class":51,"line":52},[49,86074,86075],{"class":55},"append(param1)\n",[49,86077,86078],{"class":51,"line":84},[49,86079,86080],{"class":55},"append(param1, param2)\n",[49,86082,86083],{"class":51,"line":109},[49,86084,86085],{"class":55},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[49,86087,86088],{"class":51,"line":120},[49,86089,2492],{"emptyLinePlaceholder":151},[49,86091,86092],{"class":51,"line":135},[49,86093,2492],{"emptyLinePlaceholder":151},[49,86095,86096],{"class":51,"line":1306},[49,86097,2492],{"emptyLinePlaceholder":151},[49,86099,86100],{"class":51,"line":1312},[49,86101,86102],{"class":55},"let div = document.createElement(\"div\");\n",[49,86104,86105],{"class":51,"line":1403},[49,86106,86107],{"class":55},"let p = document.createElement(\"p\");\n",[49,86109,86110],{"class":51,"line":1409},[49,86111,86112],{"class":55},"div.append(p);\n",[49,86114,86115],{"class":51,"line":1421},[49,86116,2492],{"emptyLinePlaceholder":151},[49,86118,86119,86122,86124],{"class":51,"line":1704},[49,86120,86121],{"class":55},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[49,86123,14],{"class":51389},[49,86125,86126],{"class":55},"> ]\n",[178,86128,86129],{"start":84},[181,86130,86131],{},"remove()",[14,86133,86134],{},"自己删自己",[14,86136,86137],{},[1554,86138],{"alt":44,"src":86139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[39,86141,86143],{"className":50722,"code":86142,"language":50724,"meta":44,"style":44},"\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",[46,86144,86145,86155,86169,86173,86181,86195,86215,86227,86235,86242,86254,86267,86302,86314,86325,86337,86349,86361,86388,86398,86402,86406,86415,86427,86441,86451,86463,86467,86471,86481,86492,86502,86512,86525,86538,86548,86552,86556,86565,86575,86587,86591,86595,86604,86614,86624,86636,86640,86644,86654,86670,86681,86691,86701,86713,86725,86737,86741,86745,86758,86769,86773,86781,86789,86793,86801,86821,86841,86849,86854,86880,86885,86890,86909,86914,86926,86931,86942,86952,86962,86967,86972,86976,86981,86986,86991,87011,87016,87036,87041,87055,87060,87065,87070,87086,87090,87095,87124,87129,87134,87139,87150,87154,87158,87162,87167,87192,87197,87222,87227,87236,87240,87245,87270,87274,87299,87303,87312,87316,87321,87339,87349,87353,87361,87369,87373],{"__ignoreMap":44},[49,86146,86147,86149,86151,86153],{"class":51,"line":52},[49,86148,51386],{"class":55},[49,86150,51390],{"class":51389},[49,86152,51393],{"class":2055},[49,86154,51396],{"class":55},[49,86156,86157,86159,86161,86163,86165,86167],{"class":51,"line":84},[49,86158,1129],{"class":55},[49,86160,50724],{"class":51389},[49,86162,51405],{"class":2055},[49,86164,60],{"class":55},[49,86166,51410],{"class":328},[49,86168,51396],{"class":55},[49,86170,86171],{"class":51,"line":109},[49,86172,2492],{"emptyLinePlaceholder":151},[49,86174,86175,86177,86179],{"class":51,"line":120},[49,86176,1129],{"class":55},[49,86178,51423],{"class":51389},[49,86180,51396],{"class":55},[49,86182,86183,86185,86187,86189,86191,86193],{"class":51,"line":135},[49,86184,52233],{"class":55},[49,86186,51433],{"class":51389},[49,86188,51436],{"class":2055},[49,86190,60],{"class":55},[49,86192,51441],{"class":328},[49,86194,51396],{"class":55},[49,86196,86197,86199,86201,86203,86205,86207,86209,86211,86213],{"class":51,"line":1306},[49,86198,52233],{"class":55},[49,86200,51433],{"class":51389},[49,86202,15010],{"class":2055},[49,86204,60],{"class":55},[49,86206,51480],{"class":328},[49,86208,51460],{"class":2055},[49,86210,60],{"class":55},[49,86212,51487],{"class":328},[49,86214,51396],{"class":55},[49,86216,86217,86219,86221,86223,86225],{"class":51,"line":1312},[49,86218,52233],{"class":55},[49,86220,51496],{"class":51389},[49,86222,51499],{"class":55},[49,86224,51496],{"class":51389},[49,86226,51396],{"class":55},[49,86228,86229,86231,86233],{"class":51,"line":1403},[49,86230,52233],{"class":55},[49,86232,143],{"class":51389},[49,86234,51396],{"class":55},[49,86236,86237,86240],{"class":51,"line":1409},[49,86238,86239],{"class":2055},"    .modal",[49,86241,15662],{"class":55},[49,86243,86244,86246,86248,86250,86252],{"class":51,"line":1421},[49,86245,54860],{"class":66},[49,86247,51526],{"class":55},[49,86249,4065],{"class":66},[49,86251,51581],{"class":59},[49,86253,1382],{"class":55},[49,86255,86256,86259,86261,86263,86265],{"class":51,"line":1704},[49,86257,86258],{"class":66},"      min-height",[49,86260,51526],{"class":55},[49,86262,533],{"class":66},[49,86264,51581],{"class":59},[49,86266,1382],{"class":55},[49,86268,86269,86271,86273,86275,86277,86279,86281,86283,86285,86287,86289,86291,86293,86295,86297,86300],{"class":51,"line":1709},[49,86270,78839],{"class":66},[49,86272,51526],{"class":55},[49,86274,415],{"class":66},[49,86276,4185],{"class":66},[49,86278,2130],{"class":66},[49,86280,51581],{"class":59},[49,86282,78856],{"class":66},[49,86284,228],{"class":55},[49,86286,415],{"class":66},[49,86288,12525],{"class":55},[49,86290,415],{"class":66},[49,86292,12525],{"class":55},[49,86294,415],{"class":66},[49,86296,12525],{"class":55},[49,86298,86299],{"class":66},"0.1",[49,86301,2811],{"class":55},[49,86303,86304,86306,86308,86310,86312],{"class":51,"line":1715},[49,86305,55223],{"class":66},[49,86307,51526],{"class":55},[49,86309,515],{"class":66},[49,86311,51581],{"class":59},[49,86313,1382],{"class":55},[49,86315,86316,86318,86320,86323],{"class":51,"line":1720},[49,86317,54848],{"class":66},[49,86319,51526],{"class":55},[49,86321,86322],{"class":66},"fixed",[49,86324,1382],{"class":55},[49,86326,86327,86330,86332,86335],{"class":51,"line":1734},[49,86328,86329],{"class":66},"      z-index",[49,86331,51526],{"class":55},[49,86333,86334],{"class":66},"999",[49,86336,1382],{"class":55},[49,86338,86339,86341,86343,86345,86347],{"class":51,"line":1739},[49,86340,54927],{"class":66},[49,86342,51526],{"class":55},[49,86344,875],{"class":66},[49,86346,550],{"class":59},[49,86348,1382],{"class":55},[49,86350,86351,86353,86355,86357,86359],{"class":51,"line":1745},[49,86352,55036],{"class":66},[49,86354,51526],{"class":55},[49,86356,875],{"class":66},[49,86358,550],{"class":59},[49,86360,1382],{"class":55},[49,86362,86363,86365,86367,86369,86371,86374,86376,86378,86380,86382,86384,86386],{"class":51,"line":1766},[49,86364,78880],{"class":66},[49,86366,51526],{"class":55},[49,86368,78885],{"class":66},[49,86370,228],{"class":55},[49,86372,86373],{"class":66},"-50",[49,86375,550],{"class":59},[49,86377,12525],{"class":55},[49,86379,86373],{"class":66},[49,86381,550],{"class":59},[49,86383,12525],{"class":55},[49,86385,415],{"class":66},[49,86387,2811],{"class":55},[49,86389,86390,86392,86394,86396],{"class":51,"line":1771},[49,86391,54973],{"class":66},[49,86393,51526],{"class":55},[49,86395,60931],{"class":66},[49,86397,1382],{"class":55},[49,86399,86400],{"class":51,"line":1785},[49,86401,2279],{"class":55},[49,86403,86404],{"class":51,"line":1790},[49,86405,2492],{"emptyLinePlaceholder":151},[49,86407,86408,86410,86413],{"class":51,"line":1819},[49,86409,86239],{"class":2055},[49,86411,86412],{"class":2055}," .header",[49,86414,15662],{"class":55},[49,86416,86417,86419,86421,86423,86425],{"class":51,"line":1824},[49,86418,57448],{"class":66},[49,86420,51526],{"class":55},[49,86422,622],{"class":66},[49,86424,51581],{"class":59},[49,86426,1382],{"class":55},[49,86428,86429,86431,86433,86435,86437,86439],{"class":51,"line":1841},[49,86430,54784],{"class":66},[49,86432,51526],{"class":55},[49,86434,415],{"class":66},[49,86436,2130],{"class":66},[49,86438,51581],{"class":59},[49,86440,1382],{"class":55},[49,86442,86443,86445,86447,86449],{"class":51,"line":1846},[49,86444,54848],{"class":66},[49,86446,51526],{"class":55},[49,86448,54853],{"class":66},[49,86450,1382],{"class":55},[49,86452,86453,86455,86457,86459,86461],{"class":51,"line":1851},[49,86454,55011],{"class":66},[49,86456,51526],{"class":55},[49,86458,919],{"class":66},[49,86460,51581],{"class":59},[49,86462,1382],{"class":55},[49,86464,86465],{"class":51,"line":1856},[49,86466,2279],{"class":55},[49,86468,86469],{"class":51,"line":1870},[49,86470,2492],{"emptyLinePlaceholder":151},[49,86472,86473,86475,86477,86479],{"class":51,"line":1875},[49,86474,86239],{"class":2055},[49,86476,86412],{"class":2055},[49,86478,3124],{"class":51389},[49,86480,15662],{"class":55},[49,86482,86483,86486,86488,86490],{"class":51,"line":2669},[49,86484,86485],{"class":66},"      font-style",[49,86487,51526],{"class":55},[49,86489,63930],{"class":66},[49,86491,1382],{"class":55},[49,86493,86494,86496,86498,86500],{"class":51,"line":2683},[49,86495,57505],{"class":66},[49,86497,51526],{"class":55},[49,86499,62159],{"class":66},[49,86501,1382],{"class":55},[49,86503,86504,86506,86508,86510],{"class":51,"line":2691},[49,86505,54848],{"class":66},[49,86507,51526],{"class":55},[49,86509,54920],{"class":66},[49,86511,1382],{"class":55},[49,86513,86514,86517,86519,86521,86523],{"class":51,"line":2696},[49,86515,86516],{"class":66},"      right",[49,86518,51526],{"class":55},[49,86520,794],{"class":66},[49,86522,51581],{"class":59},[49,86524,1382],{"class":55},[49,86526,86527,86529,86531,86534,86536],{"class":51,"line":2702},[49,86528,55036],{"class":66},[49,86530,51526],{"class":55},[49,86532,86533],{"class":66},"-2",[49,86535,51581],{"class":59},[49,86537,1382],{"class":55},[49,86539,86540,86542,86544,86546],{"class":51,"line":2708},[49,86541,62114],{"class":66},[49,86543,51526],{"class":55},[49,86545,62119],{"class":66},[49,86547,1382],{"class":55},[49,86549,86550],{"class":51,"line":2713},[49,86551,2279],{"class":55},[49,86553,86554],{"class":51,"line":8038},[49,86555,2492],{"emptyLinePlaceholder":151},[49,86557,86558,86560,86563],{"class":51,"line":8062},[49,86559,86239],{"class":2055},[49,86561,86562],{"class":2055}," .body",[49,86564,15662],{"class":55},[49,86566,86567,86569,86571,86573],{"class":51,"line":8067},[49,86568,57375],{"class":66},[49,86570,51526],{"class":55},[49,86572,51681],{"class":66},[49,86574,1382],{"class":55},[49,86576,86577,86579,86581,86583,86585],{"class":51,"line":8073},[49,86578,54784],{"class":66},[49,86580,51526],{"class":55},[49,86582,95],{"class":66},[49,86584,51581],{"class":59},[49,86586,1382],{"class":55},[49,86588,86589],{"class":51,"line":8100},[49,86590,2279],{"class":55},[49,86592,86593],{"class":51,"line":8105},[49,86594,2492],{"emptyLinePlaceholder":151},[49,86596,86597,86599,86602],{"class":51,"line":8111},[49,86598,86239],{"class":2055},[49,86600,86601],{"class":2055}," .footer",[49,86603,15662],{"class":55},[49,86605,86606,86608,86610,86612],{"class":51,"line":8123},[49,86607,55098],{"class":66},[49,86609,51526],{"class":55},[49,86611,51566],{"class":66},[49,86613,1382],{"class":55},[49,86615,86616,86618,86620,86622],{"class":51,"line":8135},[49,86617,55109],{"class":66},[49,86619,51526],{"class":55},[49,86621,51669],{"class":66},[49,86623,1382],{"class":55},[49,86625,86626,86628,86630,86632,86634],{"class":51,"line":8147},[49,86627,54784],{"class":66},[49,86629,51526],{"class":55},[49,86631,95],{"class":66},[49,86633,51581],{"class":59},[49,86635,1382],{"class":55},[49,86637,86638],{"class":51,"line":9806},[49,86639,2279],{"class":55},[49,86641,86642],{"class":51,"line":9831},[49,86643,2492],{"emptyLinePlaceholder":151},[49,86645,86646,86648,86650,86652],{"class":51,"line":9854},[49,86647,86239],{"class":2055},[49,86649,86601],{"class":2055},[49,86651,1490],{"class":51389},[49,86653,15662],{"class":55},[49,86655,86656,86658,86660,86662,86664,86666,86668],{"class":51,"line":9878},[49,86657,54784],{"class":66},[49,86659,51526],{"class":55},[49,86661,73],{"class":66},[49,86663,51581],{"class":59},[49,86665,2175],{"class":66},[49,86667,51581],{"class":59},[49,86669,1382],{"class":55},[49,86671,86672,86674,86676,86679],{"class":51,"line":9883},[49,86673,61810],{"class":66},[49,86675,51526],{"class":55},[49,86677,86678],{"class":66},"#ccc",[49,86680,1382],{"class":55},[49,86682,86683,86685,86687,86689],{"class":51,"line":9888},[49,86684,64059],{"class":66},[49,86686,51526],{"class":55},[49,86688,54826],{"class":66},[49,86690,1382],{"class":55},[49,86692,86693,86695,86697,86699],{"class":51,"line":9893},[49,86694,57505],{"class":66},[49,86696,51526],{"class":55},[49,86698,60931],{"class":66},[49,86700,1382],{"class":55},[49,86702,86703,86705,86707,86709,86711],{"class":51,"line":9902},[49,86704,55223],{"class":66},[49,86706,51526],{"class":55},[49,86708,301],{"class":66},[49,86710,51581],{"class":59},[49,86712,1382],{"class":55},[49,86714,86715,86717,86719,86721,86723],{"class":51,"line":9907},[49,86716,61839],{"class":66},[49,86718,51526],{"class":55},[49,86720,95],{"class":66},[49,86722,51581],{"class":59},[49,86724,1382],{"class":55},[49,86726,86727,86729,86731,86733,86735],{"class":51,"line":9913},[49,86728,55011],{"class":66},[49,86730,51526],{"class":55},[49,86732,768],{"class":66},[49,86734,51581],{"class":59},[49,86736,1382],{"class":55},[49,86738,86739],{"class":51,"line":9934},[49,86740,2279],{"class":55},[49,86742,86743],{"class":51,"line":9940},[49,86744,2492],{"emptyLinePlaceholder":151},[49,86746,86747,86749,86751,86753,86756],{"class":51,"line":9954},[49,86748,86239],{"class":2055},[49,86750,86601],{"class":2055},[49,86752,1490],{"class":51389},[49,86754,86755],{"class":2055},".submit",[49,86757,15662],{"class":55},[49,86759,86760,86762,86764,86767],{"class":51,"line":9960},[49,86761,54973],{"class":66},[49,86763,51526],{"class":55},[49,86765,86766],{"class":66},"#369",[49,86768,1382],{"class":55},[49,86770,86771],{"class":51,"line":9987},[49,86772,2279],{"class":55},[49,86774,86775,86777,86779],{"class":51,"line":9996},[49,86776,52506],{"class":55},[49,86778,143],{"class":51389},[49,86780,51396],{"class":55},[49,86782,86783,86785,86787],{"class":51,"line":10002},[49,86784,51874],{"class":55},[49,86786,51423],{"class":51389},[49,86788,51396],{"class":55},[49,86790,86791],{"class":51,"line":10010},[49,86792,2492],{"emptyLinePlaceholder":151},[49,86794,86795,86797,86799],{"class":51,"line":10015},[49,86796,1129],{"class":55},[49,86798,51889],{"class":51389},[49,86800,51396],{"class":55},[49,86802,86803,86805,86807,86809,86811,86814,86817,86819],{"class":51,"line":16694},[49,86804,52233],{"class":55},[49,86806,53976],{"class":51389},[49,86808,15049],{"class":2055},[49,86810,60],{"class":55},[49,86812,86813],{"class":328},"\"delete\"",[49,86815,86816],{"class":55},">删除\u003C\u002F",[49,86818,53976],{"class":51389},[49,86820,51396],{"class":55},[49,86822,86823,86825,86827,86829,86831,86834,86837,86839],{"class":51,"line":16700},[49,86824,52233],{"class":55},[49,86826,53976],{"class":51389},[49,86828,15049],{"class":2055},[49,86830,60],{"class":55},[49,86832,86833],{"class":328},"\"login\"",[49,86835,86836],{"class":55},">登录\u003C\u002F",[49,86838,53976],{"class":51389},[49,86840,51396],{"class":55},[49,86842,86843,86845,86847],{"class":51,"line":16723},[49,86844,52233],{"class":55},[49,86846,51902],{"class":51389},[49,86848,51396],{"class":55},[49,86850,86851],{"class":51,"line":16729},[49,86852,86853],{"class":283},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[49,86855,86856,86858,86861,86863,86865,86867,86869,86871,86874,86876,86878],{"class":51,"line":16752},[49,86857,70173],{"class":59},[49,86859,86860],{"class":2055}," Modal",[49,86862,228],{"class":55},[49,86864,51496],{"class":126},[49,86866,13654],{"class":59},[49,86868,70019],{"class":328},[49,86870,12525],{"class":55},[49,86872,86873],{"class":126},"message",[49,86875,13654],{"class":59},[49,86877,70019],{"class":328},[49,86879,12532],{"class":55},[49,86881,86882],{"class":51,"line":16766},[49,86883,86884],{"class":283},"      \u002F\u002F 创建Model 模态框盒子\n",[49,86886,86887],{"class":51,"line":16786},[49,86888,86889],{"class":283},"      \u002F\u002F 1.1 创建div标签\n",[49,86891,86892,86894,86897,86899,86901,86903,86905,86907],{"class":51,"line":16792},[49,86893,70140],{"class":66},[49,86895,86896],{"class":55},".modalBox ",[49,86898,60],{"class":59},[49,86900,54485],{"class":55},[49,86902,70240],{"class":2055},[49,86904,228],{"class":55},[49,86906,82020],{"class":328},[49,86908,81],{"class":55},[49,86910,86911],{"class":51,"line":16803},[49,86912,86913],{"class":283},"      \u002F\u002F 1.2 给div 添加类名为model\n",[49,86915,86916,86918,86921,86923],{"class":51,"line":16826},[49,86917,70140],{"class":66},[49,86919,86920],{"class":55},".modalBox.className ",[49,86922,60],{"class":59},[49,86924,86925],{"class":328}," 'modal'\n",[49,86927,86928],{"class":51,"line":16848},[49,86929,86930],{"class":283},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[49,86932,86933,86935,86938,86940],{"class":51,"line":16853},[49,86934,70140],{"class":66},[49,86936,86937],{"class":55},".modalBox.innerHTML ",[49,86939,60],{"class":59},[49,86941,70257],{"class":328},[49,86943,86944,86947,86949],{"class":51,"line":16859},[49,86945,86946],{"class":328},"        \u003Cdiv class=\"header\">${",[49,86948,51496],{"class":55},[49,86950,86951],{"class":328},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[49,86953,86954,86957,86959],{"class":51,"line":16873},[49,86955,86956],{"class":328},"        \u003Cdiv class=\"body\">${",[49,86958,86873],{"class":55},[49,86960,86961],{"class":328},"}\u003C\u002Fdiv>\n",[49,86963,86964],{"class":51,"line":16886},[49,86965,86966],{"class":328},"      `\n",[49,86968,86969],{"class":51,"line":16891},[49,86970,86971],{"class":283},"      \u002F\u002F console.log(this.modalBox)\n",[49,86973,86974],{"class":51,"line":16905},[49,86975,2279],{"class":55},[49,86977,86978],{"class":51,"line":16910},[49,86979,86980],{"class":283},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[49,86982,86983],{"class":51,"line":16916},[49,86984,86985],{"class":283},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[49,86987,86988],{"class":51,"line":16921},[49,86989,86990],{"class":283},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[49,86992,86993,86996,86998,87000,87002,87005,87007,87009],{"class":51,"line":16935},[49,86994,86995],{"class":66},"    Modal",[49,86997,777],{"class":55},[49,86999,85668],{"class":66},[49,87001,777],{"class":55},[49,87003,87004],{"class":2055},"open",[49,87006,13654],{"class":59},[49,87008,59007],{"class":59},[49,87010,54541],{"class":55},[49,87012,87013],{"class":51,"line":16940},[49,87014,87015],{"class":283},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[49,87017,87018,87020,87023,87025,87027,87029,87031,87034],{"class":51,"line":16945},[49,87019,58317],{"class":59},[49,87021,87022],{"class":66}," box",[49,87024,13654],{"class":59},[49,87026,54485],{"class":55},[49,87028,54488],{"class":2055},[49,87030,228],{"class":55},[49,87032,87033],{"class":328},"'.modal'",[49,87035,81],{"class":55},[49,87037,87038],{"class":51,"line":16959},[49,87039,87040],{"class":283},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[49,87042,87043,87046,87048,87051,87053],{"class":51,"line":16971},[49,87044,87045],{"class":55},"      box ",[49,87047,1807],{"class":59},[49,87049,87050],{"class":55}," box.",[49,87052,57095],{"class":2055},[49,87054,2068],{"class":55},[49,87056,87057],{"class":51,"line":16976},[49,87058,87059],{"class":283},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[49,87061,87062],{"class":51,"line":16989},[49,87063,87064],{"class":283},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[49,87066,87067],{"class":51,"line":16994},[49,87068,87069],{"class":283},"      \u002F\u002F append可以增加对象\n",[49,87071,87072,87075,87078,87080,87083],{"class":51,"line":16999},[49,87073,87074],{"class":55},"      document.body.",[49,87076,87077],{"class":2055},"append",[49,87079,228],{"class":55},[49,87081,87082],{"class":66},"this",[49,87084,87085],{"class":55},".modalBox)\n",[49,87087,87088],{"class":51,"line":17004},[49,87089,2492],{"emptyLinePlaceholder":151},[49,87091,87092],{"class":51,"line":17017},[49,87093,87094],{"class":283},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[49,87096,87097,87099,87102,87104,87106,87109,87111,87113,87115,87117,87120,87122],{"class":51,"line":17022},[49,87098,70140],{"class":66},[49,87100,87101],{"class":55},".modalBox.",[49,87103,54488],{"class":2055},[49,87105,228],{"class":55},[49,87107,87108],{"class":328},"'i'",[49,87110,30915],{"class":55},[49,87112,57902],{"class":2055},[49,87114,228],{"class":55},[49,87116,57907],{"class":328},[49,87118,87119],{"class":55},", () ",[49,87121,84811],{"class":59},[49,87123,15662],{"class":55},[49,87125,87126],{"class":51,"line":32722},[49,87127,87128],{"class":283},"        \u002F\u002F 这个地方需要用到箭头函数\n",[49,87130,87131],{"class":51,"line":32728},[49,87132,87133],{"class":283},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[49,87135,87136],{"class":51,"line":32734},[49,87137,87138],{"class":283},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[49,87140,87141,87143,87145,87148],{"class":51,"line":32740},[49,87142,64815],{"class":66},[49,87144,777],{"class":55},[49,87146,87147],{"class":2055},"close",[49,87149,2068],{"class":55},[49,87151,87152],{"class":51,"line":32746},[49,87153,64904],{"class":55},[49,87155,87156],{"class":51,"line":32757},[49,87157,2279],{"class":55},[49,87159,87160],{"class":51,"line":32763},[49,87161,2492],{"emptyLinePlaceholder":151},[49,87163,87164],{"class":51,"line":32783},[49,87165,87166],{"class":283},"    \u002F\u002F 测试一下 点击 删除按钮\n",[49,87168,87169,87171,87173,87175,87178,87180,87182,87184,87186,87188,87190],{"class":51,"line":32789},[49,87170,52496],{"class":55},[49,87172,54488],{"class":2055},[49,87174,228],{"class":55},[49,87176,87177],{"class":328},"'#delete'",[49,87179,30915],{"class":55},[49,87181,57902],{"class":2055},[49,87183,228],{"class":55},[49,87185,57907],{"class":328},[49,87187,87119],{"class":55},[49,87189,84811],{"class":59},[49,87191,15662],{"class":55},[49,87193,87194],{"class":51,"line":32800},[49,87195,87196],{"class":283},"      \u002F\u002F 先调用Model构造函数\n",[49,87198,87199,87201,87204,87206,87208,87210,87212,87215,87217,87220],{"class":51,"line":32806},[49,87200,58317],{"class":59},[49,87202,87203],{"class":66}," del",[49,87205,13654],{"class":59},[49,87207,11668],{"class":59},[49,87209,86860],{"class":2055},[49,87211,228],{"class":55},[49,87213,87214],{"class":328},"'温馨的提示'",[49,87216,12525],{"class":55},[49,87218,87219],{"class":328},"'您没有删除权限操作'",[49,87221,81],{"class":55},[49,87223,87224],{"class":51,"line":32812},[49,87225,87226],{"class":283},"      \u002F\u002F 实例对象调用open方法\n",[49,87228,87229,87232,87234],{"class":51,"line":32818},[49,87230,87231],{"class":55},"      del.",[49,87233,87004],{"class":2055},[49,87235,2068],{"class":55},[49,87237,87238],{"class":51,"line":32824},[49,87239,33550],{"class":55},[49,87241,87242],{"class":51,"line":32830},[49,87243,87244],{"class":283},"    \u002F\u002F 测试一下 点击 登录按钮\n",[49,87246,87247,87249,87251,87253,87256,87258,87260,87262,87264,87266,87268],{"class":51,"line":32836},[49,87248,52496],{"class":55},[49,87250,54488],{"class":2055},[49,87252,228],{"class":55},[49,87254,87255],{"class":328},"'#login'",[49,87257,30915],{"class":55},[49,87259,57902],{"class":2055},[49,87261,228],{"class":55},[49,87263,57907],{"class":328},[49,87265,87119],{"class":55},[49,87267,84811],{"class":59},[49,87269,15662],{"class":55},[49,87271,87272],{"class":51,"line":32842},[49,87273,87196],{"class":283},[49,87275,87276,87278,87281,87283,87285,87287,87289,87292,87294,87297],{"class":51,"line":32862},[49,87277,58317],{"class":59},[49,87279,87280],{"class":66}," log",[49,87282,13654],{"class":59},[49,87284,11668],{"class":59},[49,87286,86860],{"class":2055},[49,87288,228],{"class":55},[49,87290,87291],{"class":328},"'友情提示'",[49,87293,12525],{"class":55},[49,87295,87296],{"class":328},"'您还没有登录呢'",[49,87298,81],{"class":55},[49,87300,87301],{"class":51,"line":32868},[49,87302,87226],{"class":283},[49,87304,87305,87308,87310],{"class":51,"line":32884},[49,87306,87307],{"class":55},"      log.",[49,87309,87004],{"class":2055},[49,87311,2068],{"class":55},[49,87313,87314],{"class":51,"line":32890},[49,87315,33550],{"class":55},[49,87317,87318],{"class":51,"line":32904},[49,87319,87320],{"class":283},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[49,87322,87323,87325,87327,87329,87331,87333,87335,87337],{"class":51,"line":32910},[49,87324,86995],{"class":66},[49,87326,777],{"class":55},[49,87328,85668],{"class":66},[49,87330,777],{"class":55},[49,87332,87147],{"class":2055},[49,87334,13654],{"class":59},[49,87336,59007],{"class":59},[49,87338,54541],{"class":55},[49,87340,87341,87343,87345,87347],{"class":51,"line":32925},[49,87342,70140],{"class":66},[49,87344,87101],{"class":55},[49,87346,57095],{"class":2055},[49,87348,2068],{"class":55},[49,87350,87351],{"class":51,"line":32931},[49,87352,2279],{"class":55},[49,87354,87355,87357,87359],{"class":51,"line":32940},[49,87356,52506],{"class":55},[49,87358,51902],{"class":51389},[49,87360,51396],{"class":55},[49,87362,87363,87365,87367],{"class":51,"line":32946},[49,87364,51874],{"class":55},[49,87366,51889],{"class":51389},[49,87368,51396],{"class":55},[49,87370,87371],{"class":51,"line":32955},[49,87372,2492],{"emptyLinePlaceholder":151},[49,87374,87375,87377,87379],{"class":51,"line":32961},[49,87376,51874],{"class":55},[49,87378,50724],{"class":51389},[49,87380,51396],{"class":55},[14,87382,87383],{},[1554,87384],{"alt":44,"src":87385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[166,87387,87389],{"id":87388},"_414-深浅拷贝","4.14 深浅拷贝",[195,87391,87393],{"id":87392},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87395,87396],{},[1554,87397],{"alt":44,"src":87398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87400,87401],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87403,87404],{},[1554,87405],{"alt":44,"src":87406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87408,87409],{},[1554,87410],{"alt":44,"src":87411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87413,87414],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87416,87417],{},[1554,87418],{"alt":44,"src":87419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87421,11422],{},[14,87423,87424],{},[1554,87425],{"alt":44,"src":87426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[195,87428,87430],{"id":87429},"_4142-深拷贝","4.14.2 深拷贝",[14,87432,87433],{},"深拷贝：拷贝的是对象，不是地址",[14,87435,87436],{},"常用的三种方法：",[178,87438,87439,87442,87445],{},[181,87440,87441],{},"通过递归实现深拷贝",[181,87443,87444],{},"lodash\u002FcloneDeep",[181,87446,87447],{},"通过JSON.stringify()实现",[22088,87449,87451],{"id":87450},"_41421-递归函数","4.14.2.1 递归函数",[14,87453,87454],{},[1554,87455],{"alt":44,"src":87456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[178,87458,87459],{},[181,87460,87461],{},"死递归占溢出：",[39,87463,87465],{"className":53156,"code":87464,"language":53158,"meta":44,"style":44},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,87466,87467,87475,87483,87487,87492,87496,87501,87509],{"__ignoreMap":44},[49,87468,87469,87471,87473],{"class":51,"line":52},[49,87470,1129],{"class":55},[49,87472,51889],{"class":51389},[49,87474,51396],{"class":55},[49,87476,87477,87479,87481],{"class":51,"line":84},[49,87478,52233],{"class":55},[49,87480,51902],{"class":51389},[49,87482,51396],{"class":55},[49,87484,87485],{"class":51,"line":109},[49,87486,77232],{"class":55},[49,87488,87489],{"class":51,"line":120},[49,87490,87491],{"class":55},"      fn()\n",[49,87493,87494],{"class":51,"line":135},[49,87495,2279],{"class":55},[49,87497,87498],{"class":51,"line":1306},[49,87499,87500],{"class":55},"    fn()\n",[49,87502,87503,87505,87507],{"class":51,"line":1312},[49,87504,52506],{"class":55},[49,87506,51902],{"class":51389},[49,87508,51396],{"class":55},[49,87510,87511,87513,87515],{"class":51,"line":1403},[49,87512,51874],{"class":55},[49,87514,51889],{"class":51389},[49,87516,51396],{"class":55},[178,87518,87519],{"start":84},[181,87520,87521],{},"递归函数要加判断条件：",[14,87523,87524],{},[1554,87525],{"alt":44,"src":87526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[178,87528,87529],{"start":109},[181,87530,87531],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[39,87533,87535],{"className":50722,"code":87534,"language":50724,"meta":44,"style":44},"\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",[46,87536,87537,87547,87561,87565,87573,87587,87607,87619,87627,87631,87639,87651,87659,87667,87692,87704,87708,87715,87723,87731,87735],{"__ignoreMap":44},[49,87538,87539,87541,87543,87545],{"class":51,"line":52},[49,87540,51386],{"class":55},[49,87542,51390],{"class":51389},[49,87544,51393],{"class":2055},[49,87546,51396],{"class":55},[49,87548,87549,87551,87553,87555,87557,87559],{"class":51,"line":84},[49,87550,1129],{"class":55},[49,87552,50724],{"class":51389},[49,87554,51405],{"class":2055},[49,87556,60],{"class":55},[49,87558,51410],{"class":328},[49,87560,51396],{"class":55},[49,87562,87563],{"class":51,"line":109},[49,87564,2492],{"emptyLinePlaceholder":151},[49,87566,87567,87569,87571],{"class":51,"line":120},[49,87568,1129],{"class":55},[49,87570,51423],{"class":51389},[49,87572,51396],{"class":55},[49,87574,87575,87577,87579,87581,87583,87585],{"class":51,"line":135},[49,87576,52233],{"class":55},[49,87578,51433],{"class":51389},[49,87580,51436],{"class":2055},[49,87582,60],{"class":55},[49,87584,51441],{"class":328},[49,87586,51396],{"class":55},[49,87588,87589,87591,87593,87595,87597,87599,87601,87603,87605],{"class":51,"line":1306},[49,87590,52233],{"class":55},[49,87592,51433],{"class":51389},[49,87594,15010],{"class":2055},[49,87596,60],{"class":55},[49,87598,51480],{"class":328},[49,87600,51460],{"class":2055},[49,87602,60],{"class":55},[49,87604,51487],{"class":328},[49,87606,51396],{"class":55},[49,87608,87609,87611,87613,87615,87617],{"class":51,"line":1312},[49,87610,52233],{"class":55},[49,87612,51496],{"class":51389},[49,87614,51499],{"class":55},[49,87616,51496],{"class":51389},[49,87618,51396],{"class":55},[49,87620,87621,87623,87625],{"class":51,"line":1403},[49,87622,51874],{"class":55},[49,87624,51423],{"class":51389},[49,87626,51396],{"class":55},[49,87628,87629],{"class":51,"line":1409},[49,87630,2492],{"emptyLinePlaceholder":151},[49,87632,87633,87635,87637],{"class":51,"line":1421},[49,87634,1129],{"class":55},[49,87636,51889],{"class":51389},[49,87638,51396],{"class":55},[49,87640,87641,87643,87645,87647,87649],{"class":51,"line":1704},[49,87642,52233],{"class":55},[49,87644,51700],{"class":51389},[49,87646,55403],{"class":55},[49,87648,51700],{"class":51389},[49,87650,51396],{"class":55},[49,87652,87653,87655,87657],{"class":51,"line":1709},[49,87654,52233],{"class":55},[49,87656,51902],{"class":51389},[49,87658,51396],{"class":55},[49,87660,87661,87663,87665],{"class":51,"line":1715},[49,87662,70173],{"class":59},[49,87664,73862],{"class":2055},[49,87666,10943],{"class":55},[49,87668,87669,87671,87673,87675,87677,87679,87681,87683,87685,87687,87690],{"class":51,"line":1720},[49,87670,55860],{"class":55},[49,87672,54488],{"class":2055},[49,87674,228],{"class":55},[49,87676,82020],{"class":328},[49,87678,74338],{"class":55},[49,87680,60],{"class":59},[49,87682,11668],{"class":59},[49,87684,73878],{"class":2055},[49,87686,17351],{"class":55},[49,87688,87689],{"class":2055},"toLocaleString",[49,87691,2068],{"class":55},[49,87693,87694,87697,87700,87702],{"class":51,"line":1734},[49,87695,87696],{"class":2055},"      setTimeout",[49,87698,87699],{"class":55},"(getTime, ",[49,87701,6500],{"class":66},[49,87703,81],{"class":55},[49,87705,87706],{"class":51,"line":1739},[49,87707,2279],{"class":55},[49,87709,87710,87713],{"class":51,"line":1745},[49,87711,87712],{"class":2055},"    getTime",[49,87714,2068],{"class":55},[49,87716,87717,87719,87721],{"class":51,"line":1766},[49,87718,52506],{"class":55},[49,87720,51902],{"class":51389},[49,87722,51396],{"class":55},[49,87724,87725,87727,87729],{"class":51,"line":1771},[49,87726,51874],{"class":55},[49,87728,51889],{"class":51389},[49,87730,51396],{"class":55},[49,87732,87733],{"class":51,"line":1785},[49,87734,2492],{"emptyLinePlaceholder":151},[49,87736,87737,87739,87741],{"class":51,"line":1790},[49,87738,51874],{"class":55},[49,87740,50724],{"class":51389},[49,87742,51396],{"class":55},[14,87744,87745],{},[1554,87746],{"alt":44,"src":87747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[178,87749,87750],{"start":120},[181,87751,87441],{},[14,87753,87754],{},[1554,87755],{"alt":44,"src":87756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87758,87759],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87761,39278],{},[14,87763,87764],{},"这个是简易版的递归函数深拷贝",[14,87766,87767],{},"一定要注意先数组再对象，因为万物皆可对象",[39,87769,87771],{"className":50722,"code":87770,"language":50724,"meta":44,"style":44},"\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",[46,87772,87773,87783,87797,87801,87809,87823,87843,87855,87863,87867,87875,87883,87893,87902,87910,87926,87930,87938,87942,87946,87958,87963,87982,87998,88003,88008,88013,88028,88033,88038,88047,88055,88072,88080,88086,88094,88099,88104,88113,88117,88121,88125,88136,88145,88155,88169,88179,88187,88195,88203,88207],{"__ignoreMap":44},[49,87774,87775,87777,87779,87781],{"class":51,"line":52},[49,87776,51386],{"class":55},[49,87778,51390],{"class":51389},[49,87780,51393],{"class":2055},[49,87782,51396],{"class":55},[49,87784,87785,87787,87789,87791,87793,87795],{"class":51,"line":84},[49,87786,1129],{"class":55},[49,87788,50724],{"class":51389},[49,87790,51405],{"class":2055},[49,87792,60],{"class":55},[49,87794,51410],{"class":328},[49,87796,51396],{"class":55},[49,87798,87799],{"class":51,"line":109},[49,87800,2492],{"emptyLinePlaceholder":151},[49,87802,87803,87805,87807],{"class":51,"line":120},[49,87804,1129],{"class":55},[49,87806,51423],{"class":51389},[49,87808,51396],{"class":55},[49,87810,87811,87813,87815,87817,87819,87821],{"class":51,"line":135},[49,87812,52233],{"class":55},[49,87814,51433],{"class":51389},[49,87816,51436],{"class":2055},[49,87818,60],{"class":55},[49,87820,51441],{"class":328},[49,87822,51396],{"class":55},[49,87824,87825,87827,87829,87831,87833,87835,87837,87839,87841],{"class":51,"line":1306},[49,87826,52233],{"class":55},[49,87828,51433],{"class":51389},[49,87830,15010],{"class":2055},[49,87832,60],{"class":55},[49,87834,51480],{"class":328},[49,87836,51460],{"class":2055},[49,87838,60],{"class":55},[49,87840,51487],{"class":328},[49,87842,51396],{"class":55},[49,87844,87845,87847,87849,87851,87853],{"class":51,"line":1312},[49,87846,52233],{"class":55},[49,87848,51496],{"class":51389},[49,87850,51499],{"class":55},[49,87852,51496],{"class":51389},[49,87854,51396],{"class":55},[49,87856,87857,87859,87861],{"class":51,"line":1403},[49,87858,51874],{"class":55},[49,87860,51423],{"class":51389},[49,87862,51396],{"class":55},[49,87864,87865],{"class":51,"line":1409},[49,87866,2492],{"emptyLinePlaceholder":151},[49,87868,87869,87871,87873],{"class":51,"line":1421},[49,87870,1129],{"class":55},[49,87872,51889],{"class":51389},[49,87874,51396],{"class":55},[49,87876,87877,87879,87881],{"class":51,"line":1704},[49,87878,52233],{"class":55},[49,87880,51902],{"class":51389},[49,87882,51396],{"class":55},[49,87884,87885,87887,87889,87891],{"class":51,"line":1709},[49,87886,11311],{"class":59},[49,87888,70060],{"class":66},[49,87890,13654],{"class":59},[49,87892,15662],{"class":55},[49,87894,87895,87897,87900],{"class":51,"line":1715},[49,87896,71705],{"class":55},[49,87898,87899],{"class":328},"'pink'",[49,87901,31555],{"class":55},[49,87903,87904,87906,87908],{"class":51,"line":1720},[49,87905,71715],{"class":55},[49,87907,869],{"class":66},[49,87909,31555],{"class":55},[49,87911,87912,87915,87918,87920,87923],{"class":51,"line":1734},[49,87913,87914],{"class":55},"      hobby: [",[49,87916,87917],{"class":328},"'乒乓球'",[49,87919,12525],{"class":55},[49,87921,87922],{"class":328},"'足球'",[49,87924,87925],{"class":55},"],\n",[49,87927,87928],{"class":51,"line":1739},[49,87929,77961],{"class":55},[49,87931,87932,87935],{"class":51,"line":1745},[49,87933,87934],{"class":55},"        baby: ",[49,87936,87937],{"class":328},"'小pink'\n",[49,87939,87940],{"class":51,"line":1766},[49,87941,52487],{"class":55},[49,87943,87944],{"class":51,"line":1771},[49,87945,2279],{"class":55},[49,87947,87948,87950,87953,87955],{"class":51,"line":1785},[49,87949,11311],{"class":59},[49,87951,87952],{"class":66}," o",[49,87954,13654],{"class":59},[49,87956,87957],{"class":55}," {}\n",[49,87959,87960],{"class":51,"line":1790},[49,87961,87962],{"class":283},"    \u002F\u002F 拷贝函数\n",[49,87964,87965,87967,87970,87972,87975,87977,87980],{"class":51,"line":1819},[49,87966,70173],{"class":59},[49,87968,87969],{"class":2055}," deepCopy",[49,87971,228],{"class":55},[49,87973,87974],{"class":126},"newObj",[49,87976,12525],{"class":55},[49,87978,87979],{"class":126},"oldObj",[49,87981,12532],{"class":55},[49,87983,87984,87986,87988,87990,87993,87995],{"class":51,"line":1824},[49,87985,52373],{"class":59},[49,87987,1750],{"class":55},[49,87989,51936],{"class":59},[49,87991,87992],{"class":55}," k ",[49,87994,26134],{"class":59},[49,87996,87997],{"class":55}," oldObj) {\n",[49,87999,88000],{"class":51,"line":1841},[49,88001,88002],{"class":283},"        \u002F\u002F 处理数组的问题\n",[49,88004,88005],{"class":51,"line":1846},[49,88006,88007],{"class":283},"        \u002F\u002F 判断是否属于数组\n",[49,88009,88010],{"class":51,"line":1851},[49,88011,88012],{"class":283},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[49,88014,88015,88017,88020,88023,88026],{"class":51,"line":1856},[49,88016,2589],{"class":59},[49,88018,88019],{"class":55}," (oldObj[k] ",[49,88021,88022],{"class":59},"instanceof",[49,88024,88025],{"class":2055}," Array",[49,88027,12532],{"class":55},[49,88029,88030],{"class":51,"line":1870},[49,88031,88032],{"class":283},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[49,88034,88035],{"class":51,"line":1875},[49,88036,88037],{"class":283},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[49,88039,88040,88043,88045],{"class":51,"line":2669},[49,88041,88042],{"class":55},"          newObj[k] ",[49,88044,60],{"class":59},[49,88046,51927],{"class":55},[49,88048,88049,88052],{"class":51,"line":2683},[49,88050,88051],{"class":2055},"          deepCopy",[49,88053,88054],{"class":55},"(newObj[k], oldObj[k])\n",[49,88056,88057,88059,88061,88063,88065,88067,88070],{"class":51,"line":2691},[49,88058,80169],{"class":55},[49,88060,1793],{"class":59},[49,88062,1796],{"class":59},[49,88064,88019],{"class":55},[49,88066,88022],{"class":59},[49,88068,88069],{"class":2055}," Object",[49,88071,12532],{"class":55},[49,88073,88074,88076,88078],{"class":51,"line":2696},[49,88075,88042],{"class":55},[49,88077,60],{"class":59},[49,88079,87957],{"class":55},[49,88081,88082,88084],{"class":51,"line":2702},[49,88083,88051],{"class":2055},[49,88085,88054],{"class":55},[49,88087,88088,88090,88092],{"class":51,"line":2708},[49,88089,80169],{"class":55},[49,88091,1793],{"class":59},[49,88093,15662],{"class":55},[49,88095,88096],{"class":51,"line":2713},[49,88097,88098],{"class":283},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[49,88100,88101],{"class":51,"line":8038},[49,88102,88103],{"class":283},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[49,88105,88106,88108,88110],{"class":51,"line":8062},[49,88107,88042],{"class":55},[49,88109,60],{"class":59},[49,88111,88112],{"class":55}," oldObj[k]\n",[49,88114,88115],{"class":51,"line":8067},[49,88116,2621],{"class":55},[49,88118,88119],{"class":51,"line":8073},[49,88120,52487],{"class":55},[49,88122,88123],{"class":51,"line":8100},[49,88124,2279],{"class":55},[49,88126,88127,88130,88133],{"class":51,"line":8105},[49,88128,88129],{"class":2055},"    deepCopy",[49,88131,88132],{"class":55},"(o, obj) ",[49,88134,88135],{"class":283},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[49,88137,88138,88140,88142],{"class":51,"line":8111},[49,88139,73842],{"class":55},[49,88141,58336],{"class":2055},[49,88143,88144],{"class":55},"(o)\n",[49,88146,88147,88150,88152],{"class":51,"line":8123},[49,88148,88149],{"class":55},"    o.age ",[49,88151,60],{"class":59},[49,88153,88154],{"class":66}," 20\n",[49,88156,88157,88160,88162,88164,88166],{"class":51,"line":8135},[49,88158,88159],{"class":55},"    o.hobby[",[49,88161,415],{"class":66},[49,88163,4535],{"class":55},[49,88165,60],{"class":59},[49,88167,88168],{"class":328}," '篮球'\n",[49,88170,88171,88174,88176],{"class":51,"line":8147},[49,88172,88173],{"class":55},"    o.family ",[49,88175,60],{"class":59},[49,88177,88178],{"class":328}," '老pink'\n",[49,88180,88181,88183,88185],{"class":51,"line":9806},[49,88182,73842],{"class":55},[49,88184,58336],{"class":2055},[49,88186,70125],{"class":55},[49,88188,88189,88191,88193],{"class":51,"line":9831},[49,88190,52506],{"class":55},[49,88192,51902],{"class":51389},[49,88194,51396],{"class":55},[49,88196,88197,88199,88201],{"class":51,"line":9854},[49,88198,51874],{"class":55},[49,88200,51889],{"class":51389},[49,88202,51396],{"class":55},[49,88204,88205],{"class":51,"line":9878},[49,88206,2492],{"emptyLinePlaceholder":151},[49,88208,88209,88211,88213],{"class":51,"line":9883},[49,88210,51874],{"class":55},[49,88212,50724],{"class":51389},[49,88214,51396],{"class":55},[14,88216,88217],{},[1554,88218],{"alt":44,"src":88219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22088,88221,88223,88224],{"id":88222},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[373,88225,88226],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88228,88229],{},[56,88230,88231],{"href":88231,"rel":88232},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23955],[14,88234,88235],{},"lodash里边的方法都要加上一个下划线_",[14,88237,88238],{},"_.cloneDeep()",[39,88240,88242],{"className":50722,"code":88241,"language":50724,"meta":44,"style":44},"\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",[46,88243,88244,88254,88268,88272,88280,88294,88314,88326,88334,88338,88346,88351,88370,88378,88388,88396,88404,88416,88420,88426,88430,88434,88450,88458,88467,88475,88483,88491,88495],{"__ignoreMap":44},[49,88245,88246,88248,88250,88252],{"class":51,"line":52},[49,88247,51386],{"class":55},[49,88249,51390],{"class":51389},[49,88251,51393],{"class":2055},[49,88253,51396],{"class":55},[49,88255,88256,88258,88260,88262,88264,88266],{"class":51,"line":84},[49,88257,1129],{"class":55},[49,88259,50724],{"class":51389},[49,88261,51405],{"class":2055},[49,88263,60],{"class":55},[49,88265,51410],{"class":328},[49,88267,51396],{"class":55},[49,88269,88270],{"class":51,"line":109},[49,88271,2492],{"emptyLinePlaceholder":151},[49,88273,88274,88276,88278],{"class":51,"line":120},[49,88275,1129],{"class":55},[49,88277,51423],{"class":51389},[49,88279,51396],{"class":55},[49,88281,88282,88284,88286,88288,88290,88292],{"class":51,"line":135},[49,88283,52233],{"class":55},[49,88285,51433],{"class":51389},[49,88287,51436],{"class":2055},[49,88289,60],{"class":55},[49,88291,51441],{"class":328},[49,88293,51396],{"class":55},[49,88295,88296,88298,88300,88302,88304,88306,88308,88310,88312],{"class":51,"line":1306},[49,88297,52233],{"class":55},[49,88299,51433],{"class":51389},[49,88301,15010],{"class":2055},[49,88303,60],{"class":55},[49,88305,51480],{"class":328},[49,88307,51460],{"class":2055},[49,88309,60],{"class":55},[49,88311,51487],{"class":328},[49,88313,51396],{"class":55},[49,88315,88316,88318,88320,88322,88324],{"class":51,"line":1312},[49,88317,52233],{"class":55},[49,88319,51496],{"class":51389},[49,88321,51499],{"class":55},[49,88323,51496],{"class":51389},[49,88325,51396],{"class":55},[49,88327,88328,88330,88332],{"class":51,"line":1403},[49,88329,51874],{"class":55},[49,88331,51423],{"class":51389},[49,88333,51396],{"class":55},[49,88335,88336],{"class":51,"line":1409},[49,88337,2492],{"emptyLinePlaceholder":151},[49,88339,88340,88342,88344],{"class":51,"line":1421},[49,88341,1129],{"class":55},[49,88343,51889],{"class":51389},[49,88345,51396],{"class":55},[49,88347,88348],{"class":51,"line":1704},[49,88349,88350],{"class":283},"  \u003C!-- 先引用这个库 -->\n",[49,88352,88353,88355,88357,88359,88361,88364,88366,88368],{"class":51,"line":1709},[49,88354,52233],{"class":55},[49,88356,51902],{"class":51389},[49,88358,55328],{"class":2055},[49,88360,60],{"class":55},[49,88362,88363],{"class":328},"\"lodash.min.js\"",[49,88365,55403],{"class":55},[49,88367,51902],{"class":51389},[49,88369,51396],{"class":55},[49,88371,88372,88374,88376],{"class":51,"line":1715},[49,88373,52233],{"class":55},[49,88375,51902],{"class":51389},[49,88377,51396],{"class":55},[49,88379,88380,88382,88384,88386],{"class":51,"line":1720},[49,88381,11311],{"class":59},[49,88383,70060],{"class":66},[49,88385,13654],{"class":59},[49,88387,15662],{"class":55},[49,88389,88390,88392,88394],{"class":51,"line":1734},[49,88391,71705],{"class":55},[49,88393,87899],{"class":328},[49,88395,31555],{"class":55},[49,88397,88398,88400,88402],{"class":51,"line":1739},[49,88399,71715],{"class":55},[49,88401,869],{"class":66},[49,88403,31555],{"class":55},[49,88405,88406,88408,88410,88412,88414],{"class":51,"line":1745},[49,88407,87914],{"class":55},[49,88409,87917],{"class":328},[49,88411,12525],{"class":55},[49,88413,87922],{"class":328},[49,88415,87925],{"class":55},[49,88417,88418],{"class":51,"line":1766},[49,88419,77961],{"class":55},[49,88421,88422,88424],{"class":51,"line":1771},[49,88423,87934],{"class":55},[49,88425,87937],{"class":328},[49,88427,88428],{"class":51,"line":1785},[49,88429,52487],{"class":55},[49,88431,88432],{"class":51,"line":1790},[49,88433,2279],{"class":55},[49,88435,88436,88438,88440,88442,88445,88448],{"class":51,"line":1819},[49,88437,11311],{"class":59},[49,88439,87952],{"class":66},[49,88441,13654],{"class":59},[49,88443,88444],{"class":55}," _.",[49,88446,88447],{"class":2055},"cloneDeep",[49,88449,70125],{"class":55},[49,88451,88452,88454,88456],{"class":51,"line":1824},[49,88453,73842],{"class":55},[49,88455,58336],{"class":2055},[49,88457,88144],{"class":55},[49,88459,88460,88463,88465],{"class":51,"line":1841},[49,88461,88462],{"class":55},"    o.family.baby ",[49,88464,60],{"class":59},[49,88466,88178],{"class":328},[49,88468,88469,88471,88473],{"class":51,"line":1846},[49,88470,73842],{"class":55},[49,88472,58336],{"class":2055},[49,88474,70125],{"class":55},[49,88476,88477,88479,88481],{"class":51,"line":1851},[49,88478,52506],{"class":55},[49,88480,51902],{"class":51389},[49,88482,51396],{"class":55},[49,88484,88485,88487,88489],{"class":51,"line":1856},[49,88486,51874],{"class":55},[49,88488,51889],{"class":51389},[49,88490,51396],{"class":55},[49,88492,88493],{"class":51,"line":1870},[49,88494,2492],{"emptyLinePlaceholder":151},[49,88496,88497,88499,88501],{"class":51,"line":1875},[49,88498,51874],{"class":55},[49,88500,50724],{"class":51389},[49,88502,51396],{"class":55},[14,88504,88505],{},[1554,88506],{"alt":44,"src":88507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22088,88509,88511],{"id":88510},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[39,88513,88515],{"className":50722,"code":88514,"language":50724,"meta":44,"style":44},"\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",[46,88516,88517,88527,88541,88545,88553,88567,88587,88599,88607,88611,88619,88627,88637,88645,88653,88665,88669,88675,88679,88683,88688,88693,88698,88724,88732,88741,88749,88757,88765,88769],{"__ignoreMap":44},[49,88518,88519,88521,88523,88525],{"class":51,"line":52},[49,88520,51386],{"class":55},[49,88522,51390],{"class":51389},[49,88524,51393],{"class":2055},[49,88526,51396],{"class":55},[49,88528,88529,88531,88533,88535,88537,88539],{"class":51,"line":84},[49,88530,1129],{"class":55},[49,88532,50724],{"class":51389},[49,88534,51405],{"class":2055},[49,88536,60],{"class":55},[49,88538,51410],{"class":328},[49,88540,51396],{"class":55},[49,88542,88543],{"class":51,"line":109},[49,88544,2492],{"emptyLinePlaceholder":151},[49,88546,88547,88549,88551],{"class":51,"line":120},[49,88548,1129],{"class":55},[49,88550,51423],{"class":51389},[49,88552,51396],{"class":55},[49,88554,88555,88557,88559,88561,88563,88565],{"class":51,"line":135},[49,88556,52233],{"class":55},[49,88558,51433],{"class":51389},[49,88560,51436],{"class":2055},[49,88562,60],{"class":55},[49,88564,51441],{"class":328},[49,88566,51396],{"class":55},[49,88568,88569,88571,88573,88575,88577,88579,88581,88583,88585],{"class":51,"line":1306},[49,88570,52233],{"class":55},[49,88572,51433],{"class":51389},[49,88574,15010],{"class":2055},[49,88576,60],{"class":55},[49,88578,51480],{"class":328},[49,88580,51460],{"class":2055},[49,88582,60],{"class":55},[49,88584,51487],{"class":328},[49,88586,51396],{"class":55},[49,88588,88589,88591,88593,88595,88597],{"class":51,"line":1312},[49,88590,52233],{"class":55},[49,88592,51496],{"class":51389},[49,88594,51499],{"class":55},[49,88596,51496],{"class":51389},[49,88598,51396],{"class":55},[49,88600,88601,88603,88605],{"class":51,"line":1403},[49,88602,51874],{"class":55},[49,88604,51423],{"class":51389},[49,88606,51396],{"class":55},[49,88608,88609],{"class":51,"line":1409},[49,88610,2492],{"emptyLinePlaceholder":151},[49,88612,88613,88615,88617],{"class":51,"line":1421},[49,88614,1129],{"class":55},[49,88616,51889],{"class":51389},[49,88618,51396],{"class":55},[49,88620,88621,88623,88625],{"class":51,"line":1704},[49,88622,52233],{"class":55},[49,88624,51902],{"class":51389},[49,88626,51396],{"class":55},[49,88628,88629,88631,88633,88635],{"class":51,"line":1709},[49,88630,11311],{"class":59},[49,88632,70060],{"class":66},[49,88634,13654],{"class":59},[49,88636,15662],{"class":55},[49,88638,88639,88641,88643],{"class":51,"line":1715},[49,88640,71705],{"class":55},[49,88642,87899],{"class":328},[49,88644,31555],{"class":55},[49,88646,88647,88649,88651],{"class":51,"line":1720},[49,88648,71715],{"class":55},[49,88650,869],{"class":66},[49,88652,31555],{"class":55},[49,88654,88655,88657,88659,88661,88663],{"class":51,"line":1734},[49,88656,87914],{"class":55},[49,88658,87917],{"class":328},[49,88660,12525],{"class":55},[49,88662,87922],{"class":328},[49,88664,87925],{"class":55},[49,88666,88667],{"class":51,"line":1739},[49,88668,77961],{"class":55},[49,88670,88671,88673],{"class":51,"line":1745},[49,88672,87934],{"class":55},[49,88674,87937],{"class":328},[49,88676,88677],{"class":51,"line":1766},[49,88678,52487],{"class":55},[49,88680,88681],{"class":51,"line":1771},[49,88682,2279],{"class":55},[49,88684,88685],{"class":51,"line":1785},[49,88686,88687],{"class":283},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[49,88689,88690],{"class":51,"line":1790},[49,88691,88692],{"class":283},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[49,88694,88695],{"class":51,"line":1819},[49,88696,88697],{"class":283},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[49,88699,88700,88702,88704,88706,88709,88711,88714,88716,88718,88720,88722],{"class":51,"line":1824},[49,88701,11311],{"class":59},[49,88703,87952],{"class":66},[49,88705,13654],{"class":59},[49,88707,88708],{"class":66}," JSON",[49,88710,777],{"class":55},[49,88712,88713],{"class":2055},"parse",[49,88715,228],{"class":55},[49,88717,71753],{"class":66},[49,88719,777],{"class":55},[49,88721,71758],{"class":2055},[49,88723,71761],{"class":55},[49,88725,88726,88728,88730],{"class":51,"line":1841},[49,88727,73842],{"class":55},[49,88729,58336],{"class":2055},[49,88731,88144],{"class":55},[49,88733,88734,88736,88738],{"class":51,"line":1846},[49,88735,88462],{"class":55},[49,88737,60],{"class":59},[49,88739,88740],{"class":328}," '123'\n",[49,88742,88743,88745,88747],{"class":51,"line":1851},[49,88744,73842],{"class":55},[49,88746,58336],{"class":2055},[49,88748,70125],{"class":55},[49,88750,88751,88753,88755],{"class":51,"line":1856},[49,88752,52506],{"class":55},[49,88754,51902],{"class":51389},[49,88756,51396],{"class":55},[49,88758,88759,88761,88763],{"class":51,"line":1870},[49,88760,51874],{"class":55},[49,88762,51889],{"class":51389},[49,88764,51396],{"class":55},[49,88766,88767],{"class":51,"line":1875},[49,88768,2492],{"emptyLinePlaceholder":151},[49,88770,88771,88773,88775],{"class":51,"line":2669},[49,88772,51874],{"class":55},[49,88774,50724],{"class":51389},[49,88776,51396],{"class":55},[14,88778,88779],{},[1554,88780],{"alt":44,"src":88781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[166,88783,88785],{"id":88784},"_415-异常处理","4.15 异常处理",[178,88787,88788],{},[181,88789,88790],{},"throw抛异常",[14,88792,88793],{},[1554,88794],{"alt":44,"src":88795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[178,88797,88798],{"start":84},[181,88799,88800],{},"try\u002Fcatch 捕获错误信息",[14,88802,88803],{},[1554,88804],{"alt":44,"src":88805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[39,88807,88809],{"className":50722,"code":88808,"language":50724,"meta":44,"style":44},"\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",[46,88810,88811,88821,88835,88839,88847,88861,88881,88893,88901,88905,88913,88925,88933,88942,88949,88954,88973,88982,88993,88998,89008,89013,89018,89023,89040,89044,89049,89056,89068,89072,89084,89088,89092,89097,89102,89109,89117,89125,89129],{"__ignoreMap":44},[49,88812,88813,88815,88817,88819],{"class":51,"line":52},[49,88814,51386],{"class":55},[49,88816,51390],{"class":51389},[49,88818,51393],{"class":2055},[49,88820,51396],{"class":55},[49,88822,88823,88825,88827,88829,88831,88833],{"class":51,"line":84},[49,88824,1129],{"class":55},[49,88826,50724],{"class":51389},[49,88828,51405],{"class":2055},[49,88830,60],{"class":55},[49,88832,51410],{"class":328},[49,88834,51396],{"class":55},[49,88836,88837],{"class":51,"line":109},[49,88838,2492],{"emptyLinePlaceholder":151},[49,88840,88841,88843,88845],{"class":51,"line":120},[49,88842,1129],{"class":55},[49,88844,51423],{"class":51389},[49,88846,51396],{"class":55},[49,88848,88849,88851,88853,88855,88857,88859],{"class":51,"line":135},[49,88850,52233],{"class":55},[49,88852,51433],{"class":51389},[49,88854,51436],{"class":2055},[49,88856,60],{"class":55},[49,88858,51441],{"class":328},[49,88860,51396],{"class":55},[49,88862,88863,88865,88867,88869,88871,88873,88875,88877,88879],{"class":51,"line":1306},[49,88864,52233],{"class":55},[49,88866,51433],{"class":51389},[49,88868,15010],{"class":2055},[49,88870,60],{"class":55},[49,88872,51480],{"class":328},[49,88874,51460],{"class":2055},[49,88876,60],{"class":55},[49,88878,51487],{"class":328},[49,88880,51396],{"class":55},[49,88882,88883,88885,88887,88889,88891],{"class":51,"line":1312},[49,88884,52233],{"class":55},[49,88886,51496],{"class":51389},[49,88888,51499],{"class":55},[49,88890,51496],{"class":51389},[49,88892,51396],{"class":55},[49,88894,88895,88897,88899],{"class":51,"line":1403},[49,88896,51874],{"class":55},[49,88898,51423],{"class":51389},[49,88900,51396],{"class":55},[49,88902,88903],{"class":51,"line":1409},[49,88904,2492],{"emptyLinePlaceholder":151},[49,88906,88907,88909,88911],{"class":51,"line":1421},[49,88908,1129],{"class":55},[49,88910,51889],{"class":51389},[49,88912,51396],{"class":55},[49,88914,88915,88917,88919,88921,88923],{"class":51,"line":1704},[49,88916,52233],{"class":55},[49,88918,14],{"class":51389},[49,88920,53583],{"class":55},[49,88922,14],{"class":51389},[49,88924,51396],{"class":55},[49,88926,88927,88929,88931],{"class":51,"line":1709},[49,88928,52233],{"class":55},[49,88930,51902],{"class":51389},[49,88932,51396],{"class":55},[49,88934,88935,88937,88940],{"class":51,"line":1715},[49,88936,70173],{"class":59},[49,88938,88939],{"class":2055}," fn",[49,88941,10943],{"class":55},[49,88943,88944,88947],{"class":51,"line":1720},[49,88945,88946],{"class":59},"      try",[49,88948,15662],{"class":55},[49,88950,88951],{"class":51,"line":1734},[49,88952,88953],{"class":283},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[49,88955,88956,88958,88960,88962,88964,88966,88968,88971],{"class":51,"line":1739},[49,88957,61359],{"class":59},[49,88959,6915],{"class":66},[49,88961,13654],{"class":59},[49,88963,54485],{"class":55},[49,88965,54488],{"class":2055},[49,88967,228],{"class":55},[49,88969,88970],{"class":328},"'.p'",[49,88972,81],{"class":55},[49,88974,88975,88978,88980],{"class":51,"line":1745},[49,88976,88977],{"class":55},"        p.style.color ",[49,88979,60],{"class":59},[49,88981,67140],{"class":328},[49,88983,88984,88987,88990],{"class":51,"line":1766},[49,88985,88986],{"class":55},"      } ",[49,88988,88989],{"class":59},"catch",[49,88991,88992],{"class":55}," (err) {\n",[49,88994,88995],{"class":51,"line":1771},[49,88996,88997],{"class":283},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[49,88999,89000,89003,89005],{"class":51,"line":1785},[49,89001,89002],{"class":55},"        console.",[49,89004,58336],{"class":2055},[49,89006,89007],{"class":55},"(err.message)\n",[49,89009,89010],{"class":51,"line":1790},[49,89011,89012],{"class":283},"        \u002F\u002F 想要中断程序，需要加return\n",[49,89014,89015],{"class":51,"line":1819},[49,89016,89017],{"class":283},"        \u002F\u002F return\n",[49,89019,89020],{"class":51,"line":1824},[49,89021,89022],{"class":283},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[49,89024,89025,89028,89030,89033,89035,89038],{"class":51,"line":1841},[49,89026,89027],{"class":59},"        throw",[49,89029,11668],{"class":59},[49,89031,89032],{"class":2055}," Error",[49,89034,228],{"class":55},[49,89036,89037],{"class":328},"'你看看，选择器错误了吧'",[49,89039,81],{"class":55},[49,89041,89042],{"class":51,"line":1846},[49,89043,52487],{"class":55},[49,89045,89046],{"class":51,"line":1851},[49,89047,89048],{"class":283},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[49,89050,89051,89054],{"class":51,"line":1856},[49,89052,89053],{"class":59},"      finally",[49,89055,15662],{"class":55},[49,89057,89058,89061,89063,89066],{"class":51,"line":1870},[49,89059,89060],{"class":2055},"        alert",[49,89062,228],{"class":55},[49,89064,89065],{"class":328},"'弹出对话框'",[49,89067,81],{"class":55},[49,89069,89070],{"class":51,"line":1875},[49,89071,52487],{"class":55},[49,89073,89074,89076,89078,89080,89082],{"class":51,"line":2669},[49,89075,58333],{"class":55},[49,89077,58336],{"class":2055},[49,89079,228],{"class":55},[49,89081,691],{"class":66},[49,89083,81],{"class":55},[49,89085,89086],{"class":51,"line":2683},[49,89087,2492],{"emptyLinePlaceholder":151},[49,89089,89090],{"class":51,"line":2691},[49,89091,2279],{"class":55},[49,89093,89094],{"class":51,"line":2696},[49,89095,89096],{"class":283},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[49,89098,89099],{"class":51,"line":2702},[49,89100,89101],{"class":283},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[49,89103,89104,89107],{"class":51,"line":2708},[49,89105,89106],{"class":2055},"    fn",[49,89108,2068],{"class":55},[49,89110,89111,89113,89115],{"class":51,"line":2713},[49,89112,52506],{"class":55},[49,89114,51902],{"class":51389},[49,89116,51396],{"class":55},[49,89118,89119,89121,89123],{"class":51,"line":8038},[49,89120,51874],{"class":55},[49,89122,51889],{"class":51389},[49,89124,51396],{"class":55},[49,89126,89127],{"class":51,"line":8062},[49,89128,2492],{"emptyLinePlaceholder":151},[49,89130,89131,89133,89135],{"class":51,"line":8067},[49,89132,51874],{"class":55},[49,89134,50724],{"class":51389},[49,89136,51396],{"class":55},[14,89138,89139],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[178,89141,89142],{"start":109},[181,89143,89144],{},"debugger",[14,89146,89147],{},[1554,89148],{"alt":44,"src":89149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89151,89152],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[166,89154,89156],{"id":89155},"_416-处理this","4.16 处理this",[195,89158,89160],{"id":89159},"_4161-this的指向","4.16.1 this的指向",[178,89162,89163],{},[181,89164,89165],{},"普通函数的this",[14,89167,89168],{},[1554,89169],{"alt":44,"src":89170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[178,89172,89173],{"start":84},[181,89174,89175],{},"箭头函数的this",[14,89177,89178],{},[1554,89179],{"alt":44,"src":89180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89182,89183],{},[1554,89184],{"alt":44,"src":89185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89187,89188],{},[1554,89189],{"alt":44,"src":89190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[195,89192,89194],{"id":89193},"_4162-this的改变","4.16.2 this的改变",[14,89196,89197],{},"call() apply() bind()",[178,89199,89200],{},[181,89201,89202],{},"call()",[14,89204,89205],{},[1554,89206],{"alt":44,"src":89207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89209,89210],{},"两个作用：①调用函数；②改变this指向",[39,89212,89214],{"className":53156,"code":89213,"language":53158,"meta":44,"style":44},"\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",[46,89215,89216,89224,89232,89236,89241,89245,89250,89255,89260,89264,89269,89277],{"__ignoreMap":44},[49,89217,89218,89220,89222],{"class":51,"line":52},[49,89219,1129],{"class":55},[49,89221,51889],{"class":51389},[49,89223,51396],{"class":55},[49,89225,89226,89228,89230],{"class":51,"line":84},[49,89227,52233],{"class":55},[49,89229,51902],{"class":51389},[49,89231,51396],{"class":55},[49,89233,89234],{"class":51,"line":109},[49,89235,71612],{"class":55},[49,89237,89238],{"class":51,"line":120},[49,89239,89240],{"class":55},"      uname: 'pink'\n",[49,89242,89243],{"class":51,"line":135},[49,89244,2279],{"class":55},[49,89246,89247],{"class":51,"line":1306},[49,89248,89249],{"class":55},"    function fn(x, y) {\n",[49,89251,89252],{"class":51,"line":1312},[49,89253,89254],{"class":55},"      console.log(this)  \u002F\u002Fwindow\n",[49,89256,89257],{"class":51,"line":1403},[49,89258,89259],{"class":55},"      console.log(x + y)\n",[49,89261,89262],{"class":51,"line":1409},[49,89263,2279],{"class":55},[49,89265,89266],{"class":51,"line":1421},[49,89267,89268],{"class":55},"    fn.call(obj, 1, 2)\n",[49,89270,89271,89273,89275],{"class":51,"line":1704},[49,89272,52506],{"class":55},[49,89274,51902],{"class":51389},[49,89276,51396],{"class":55},[49,89278,89279,89281,89283],{"class":51,"line":1709},[49,89280,51874],{"class":55},[49,89282,51889],{"class":51389},[49,89284,51396],{"class":55},[14,89286,89287],{},[1554,89288],{"alt":44,"src":89289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[178,89291,89292],{"start":84},[181,89293,89294],{},"apply()",[14,89296,89297],{},[1554,89298],{"alt":44,"src":89299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89301,89210],{},[14,89303,89304],{},"call传递的是普通参数，而apply必须传递的是数组",[39,89306,89308],{"className":50722,"code":89307,"language":50724,"meta":44,"style":44},"\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",[46,89309,89310,89320,89334,89338,89346,89360,89380,89392,89400,89404,89412,89420,89430,89437,89441,89446,89462,89474,89488,89492,89497,89516,89521,89525,89530,89535,89543,89548,89570,89575,89591,89607,89619,89623,89628,89647,89655,89663,89667],{"__ignoreMap":44},[49,89311,89312,89314,89316,89318],{"class":51,"line":52},[49,89313,51386],{"class":55},[49,89315,51390],{"class":51389},[49,89317,51393],{"class":2055},[49,89319,51396],{"class":55},[49,89321,89322,89324,89326,89328,89330,89332],{"class":51,"line":84},[49,89323,1129],{"class":55},[49,89325,50724],{"class":51389},[49,89327,51405],{"class":2055},[49,89329,60],{"class":55},[49,89331,51410],{"class":328},[49,89333,51396],{"class":55},[49,89335,89336],{"class":51,"line":109},[49,89337,2492],{"emptyLinePlaceholder":151},[49,89339,89340,89342,89344],{"class":51,"line":120},[49,89341,1129],{"class":55},[49,89343,51423],{"class":51389},[49,89345,51396],{"class":55},[49,89347,89348,89350,89352,89354,89356,89358],{"class":51,"line":135},[49,89349,52233],{"class":55},[49,89351,51433],{"class":51389},[49,89353,51436],{"class":2055},[49,89355,60],{"class":55},[49,89357,51441],{"class":328},[49,89359,51396],{"class":55},[49,89361,89362,89364,89366,89368,89370,89372,89374,89376,89378],{"class":51,"line":1306},[49,89363,52233],{"class":55},[49,89365,51433],{"class":51389},[49,89367,15010],{"class":2055},[49,89369,60],{"class":55},[49,89371,51480],{"class":328},[49,89373,51460],{"class":2055},[49,89375,60],{"class":55},[49,89377,51487],{"class":328},[49,89379,51396],{"class":55},[49,89381,89382,89384,89386,89388,89390],{"class":51,"line":1312},[49,89383,52233],{"class":55},[49,89385,51496],{"class":51389},[49,89387,51499],{"class":55},[49,89389,51496],{"class":51389},[49,89391,51396],{"class":55},[49,89393,89394,89396,89398],{"class":51,"line":1403},[49,89395,51874],{"class":55},[49,89397,51423],{"class":51389},[49,89399,51396],{"class":55},[49,89401,89402],{"class":51,"line":1409},[49,89403,2492],{"emptyLinePlaceholder":151},[49,89405,89406,89408,89410],{"class":51,"line":1421},[49,89407,1129],{"class":55},[49,89409,51889],{"class":51389},[49,89411,51396],{"class":55},[49,89413,89414,89416,89418],{"class":51,"line":1704},[49,89415,52233],{"class":55},[49,89417,51902],{"class":51389},[49,89419,51396],{"class":55},[49,89421,89422,89424,89426,89428],{"class":51,"line":1709},[49,89423,11311],{"class":59},[49,89425,70060],{"class":66},[49,89427,13654],{"class":59},[49,89429,15662],{"class":55},[49,89431,89432,89434],{"class":51,"line":1715},[49,89433,71715],{"class":55},[49,89435,89436],{"class":66},"18\n",[49,89438,89439],{"class":51,"line":1720},[49,89440,2279],{"class":55},[49,89442,89443],{"class":51,"line":1734},[49,89444,89445],{"class":283},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[49,89447,89448,89450,89452,89454,89456,89458,89460],{"class":51,"line":1739},[49,89449,70173],{"class":59},[49,89451,88939],{"class":2055},[49,89453,228],{"class":55},[49,89455,1039],{"class":126},[49,89457,12525],{"class":55},[49,89459,1064],{"class":126},[49,89461,12532],{"class":55},[49,89463,89464,89466,89468,89470,89472],{"class":51,"line":1745},[49,89465,58333],{"class":55},[49,89467,58336],{"class":2055},[49,89469,228],{"class":55},[49,89471,87082],{"class":66},[49,89473,81],{"class":55},[49,89475,89476,89478,89480,89483,89485],{"class":51,"line":1766},[49,89477,58333],{"class":55},[49,89479,58336],{"class":2055},[49,89481,89482],{"class":55},"(x ",[49,89484,700],{"class":59},[49,89486,89487],{"class":55}," y)\n",[49,89489,89490],{"class":51,"line":1771},[49,89491,2279],{"class":55},[49,89493,89494],{"class":51,"line":1785},[49,89495,89496],{"class":283},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[49,89498,89499,89502,89505,89508,89510,89512,89514],{"class":51,"line":1790},[49,89500,89501],{"class":55},"    fn.",[49,89503,89504],{"class":2055},"apply",[49,89506,89507],{"class":55},"(obj, [",[49,89509,441],{"class":66},[49,89511,12525],{"class":55},[49,89513,301],{"class":66},[49,89515,106],{"class":55},[49,89517,89518],{"class":51,"line":1819},[49,89519,89520],{"class":283},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[49,89522,89523],{"class":51,"line":1824},[49,89524,2492],{"emptyLinePlaceholder":151},[49,89526,89527],{"class":51,"line":1841},[49,89528,89529],{"class":283},"    \u002F\u002F 使用场景：求数组最大值\n",[49,89531,89532],{"class":51,"line":1846},[49,89533,89534],{"class":283},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[49,89536,89537,89540],{"class":51,"line":1851},[49,89538,89539],{"class":283},"    \u002F\u002F console.log(max)",[49,89541,89542],{"class":283},"   \u002F\u002F3\n",[49,89544,89545],{"class":51,"line":1856},[49,89546,89547],{"class":283},"    \u002F\u002F 指向空或者Math都是可以的\n",[49,89549,89550,89552,89554,89556,89558,89560,89562,89564,89566,89568],{"class":51,"line":1870},[49,89551,11311],{"class":59},[49,89553,57784],{"class":66},[49,89555,13654],{"class":59},[49,89557,52315],{"class":55},[49,89559,533],{"class":66},[49,89561,12525],{"class":55},[49,89563,723],{"class":66},[49,89565,12525],{"class":55},[49,89567,754],{"class":66},[49,89569,33335],{"class":55},[49,89571,89572],{"class":51,"line":1875},[49,89573,89574],{"class":283},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[49,89576,89577,89579,89581,89583,89586,89588],{"class":51,"line":2669},[49,89578,11311],{"class":59},[49,89580,6041],{"class":66},[49,89582,13654],{"class":59},[49,89584,89585],{"class":55}," Math.max.",[49,89587,89504],{"class":2055},[49,89589,89590],{"class":55},"(Math, arr)\n",[49,89592,89593,89595,89598,89600,89603,89605],{"class":51,"line":2683},[49,89594,11311],{"class":59},[49,89596,89597],{"class":66}," min",[49,89599,13654],{"class":59},[49,89601,89602],{"class":55}," Math.min.",[49,89604,89504],{"class":2055},[49,89606,89590],{"class":55},[49,89608,89609,89611,89613,89616],{"class":51,"line":2691},[49,89610,73842],{"class":55},[49,89612,58336],{"class":2055},[49,89614,89615],{"class":55},"(max, min)     ",[49,89617,89618],{"class":283},"\u002F\u002F100,4\n",[49,89620,89621],{"class":51,"line":2696},[49,89622,2492],{"emptyLinePlaceholder":151},[49,89624,89625],{"class":51,"line":2702},[49,89626,89627],{"class":283},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[49,89629,89630,89632,89634,89637,89639,89641,89644],{"class":51,"line":2708},[49,89631,73842],{"class":55},[49,89633,58336],{"class":2055},[49,89635,89636],{"class":55},"(Max.",[49,89638,6105],{"class":2055},[49,89640,228],{"class":55},[49,89642,89643],{"class":59},"...",[49,89645,89646],{"class":55},"arr))\n",[49,89648,89649,89651,89653],{"class":51,"line":2713},[49,89650,52506],{"class":55},[49,89652,51902],{"class":51389},[49,89654,51396],{"class":55},[49,89656,89657,89659,89661],{"class":51,"line":8038},[49,89658,51874],{"class":55},[49,89660,51889],{"class":51389},[49,89662,51396],{"class":55},[49,89664,89665],{"class":51,"line":8062},[49,89666,2492],{"emptyLinePlaceholder":151},[49,89668,89669,89671,89673],{"class":51,"line":8067},[49,89670,51874],{"class":55},[49,89672,50724],{"class":51389},[49,89674,51396],{"class":55},[14,89676,89677],{},[1554,89678],{"alt":44,"src":89679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[178,89681,89682],{"start":109},[181,89683,89684],{},"bind()",[14,89686,89687],{},[1554,89688],{"alt":44,"src":89689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89691,89692],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89694,89695],{},"bind的语法跟call很相似",[39,89697,89699],{"className":53156,"code":89698,"language":53158,"meta":44,"style":44},"\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",[46,89700,89701,89709,89717,89721,89726,89730,89734,89739,89743,89748,89753,89758,89763,89768,89773,89778,89782,89790],{"__ignoreMap":44},[49,89702,89703,89705,89707],{"class":51,"line":52},[49,89704,1129],{"class":55},[49,89706,51889],{"class":51389},[49,89708,51396],{"class":55},[49,89710,89711,89713,89715],{"class":51,"line":84},[49,89712,52233],{"class":55},[49,89714,51902],{"class":51389},[49,89716,51396],{"class":55},[49,89718,89719],{"class":51,"line":109},[49,89720,71612],{"class":55},[49,89722,89723],{"class":51,"line":120},[49,89724,89725],{"class":55},"      age: 18\n",[49,89727,89728],{"class":51,"line":135},[49,89729,2279],{"class":55},[49,89731,89732],{"class":51,"line":1306},[49,89733,77232],{"class":55},[49,89735,89736],{"class":51,"line":1312},[49,89737,89738],{"class":55},"      console.log(this)\n",[49,89740,89741],{"class":51,"line":1403},[49,89742,2279],{"class":55},[49,89744,89745],{"class":51,"line":1409},[49,89746,89747],{"class":55},"    \u002F\u002F 1.bind 不会调用函数\n",[49,89749,89750],{"class":51,"line":1421},[49,89751,89752],{"class":55},"    \u002F\u002F 2.bind能改变this的指向\n",[49,89754,89755],{"class":51,"line":1704},[49,89756,89757],{"class":55},"    fn.bind()\n",[49,89759,89760],{"class":51,"line":1709},[49,89761,89762],{"class":55},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[49,89764,89765],{"class":51,"line":1715},[49,89766,89767],{"class":55},"    const fun = fn.bind(obj)\n",[49,89769,89770],{"class":51,"line":1720},[49,89771,89772],{"class":55},"    \u002F\u002F console.log(fun)\n",[49,89774,89775],{"class":51,"line":1734},[49,89776,89777],{"class":55},"    \u002F\u002F 调用,查看this的指向\n",[49,89779,89780],{"class":51,"line":1739},[49,89781,52740],{"class":55},[49,89783,89784,89786,89788],{"class":51,"line":1745},[49,89785,52506],{"class":55},[49,89787,51902],{"class":51389},[49,89789,51396],{"class":55},[49,89791,89792,89794,89796],{"class":51,"line":1766},[49,89793,51874],{"class":55},[49,89795,51889],{"class":51389},[49,89797,51396],{"class":55},[14,89799,89800],{},[1554,89801],{"alt":44,"src":89802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[178,89804,89805],{"start":120},[181,89806,89807],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[39,89809,89811],{"className":53156,"code":89810,"language":53158,"meta":44,"style":44},"\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",[46,89812,89813,89821,89834,89842,89847,89851,89856,89861,89866,89871,89876,89881,89886,89891,89895,89903],{"__ignoreMap":44},[49,89814,89815,89817,89819],{"class":51,"line":52},[49,89816,1129],{"class":55},[49,89818,51889],{"class":51389},[49,89820,51396],{"class":55},[49,89822,89823,89825,89827,89830,89832],{"class":51,"line":84},[49,89824,52233],{"class":55},[49,89826,53976],{"class":51389},[49,89828,89829],{"class":55},">禁用\u003C\u002F",[49,89831,53976],{"class":51389},[49,89833,51396],{"class":55},[49,89835,89836,89838,89840],{"class":51,"line":109},[49,89837,52233],{"class":55},[49,89839,51902],{"class":51389},[49,89841,51396],{"class":55},[49,89843,89844],{"class":51,"line":120},[49,89845,89846],{"class":55},"    const btn = document.querySelector('button')\n",[49,89848,89849],{"class":51,"line":135},[49,89850,59105],{"class":55},[49,89852,89853],{"class":51,"line":1306},[49,89854,89855],{"class":55},"      this.disabled = true\n",[49,89857,89858],{"class":51,"line":1312},[49,89859,89860],{"class":55},"      \u002F\u002F 定时器是window进行调用的\n",[49,89862,89863],{"class":51,"line":1403},[49,89864,89865],{"class":55},"      setTimeout(function () {\n",[49,89867,89868],{"class":51,"line":1409},[49,89869,89870],{"class":55},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[49,89872,89873],{"class":51,"line":1421},[49,89874,89875],{"class":55},"        this.disabled = false\n",[49,89877,89878],{"class":51,"line":1704},[49,89879,89880],{"class":55},"      }.bind(this), 2000)\n",[49,89882,89883],{"class":51,"line":1709},[49,89884,89885],{"class":55},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[49,89887,89888],{"class":51,"line":1715},[49,89889,89890],{"class":55},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[49,89892,89893],{"class":51,"line":1720},[49,89894,33550],{"class":55},[49,89896,89897,89899,89901],{"class":51,"line":1734},[49,89898,52506],{"class":55},[49,89900,51902],{"class":51389},[49,89902,51396],{"class":55},[49,89904,89905,89907,89909],{"class":51,"line":1739},[49,89906,51874],{"class":55},[49,89908,51889],{"class":51389},[49,89910,51396],{"class":55},[178,89912,89913],{"start":135},[181,89914,22043],{},[14,89916,89917],{},[1554,89918],{"alt":44,"src":89919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[166,89921,89923],{"id":89922},"_417-性能优化","4.17 性能优化",[195,89925,89927],{"id":89926},"_4171-防抖","4.17.1 防抖",[14,89929,89930],{},[1554,89931],{"alt":44,"src":89932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89934,89935],{},[373,89936,89937],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89939,89940],{},"防抖实现方式：",[1226,89942,89943],{},[181,89944,89945],{},"lodash 提供了防抖处理",[14,89947,89948],{},"_.debounce(func,[wait=0],[options={}])",[14,89950,89951],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[39,89953,89955],{"className":50722,"code":89954,"language":50724,"meta":44,"style":44},"\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",[46,89956,89957,89967,89981,89985,89993,90007,90027,90039,90047,90053,90063,90075,90087,90098,90110,90120,90130,90143,90147,90155,90163,90167,90175,90193,90211,90219,90238,90248,90257,90268,90273,90277,90282,90287,90292,90317,90325,90333,90337],{"__ignoreMap":44},[49,89958,89959,89961,89963,89965],{"class":51,"line":52},[49,89960,51386],{"class":55},[49,89962,51390],{"class":51389},[49,89964,51393],{"class":2055},[49,89966,51396],{"class":55},[49,89968,89969,89971,89973,89975,89977,89979],{"class":51,"line":84},[49,89970,1129],{"class":55},[49,89972,50724],{"class":51389},[49,89974,51405],{"class":2055},[49,89976,60],{"class":55},[49,89978,51410],{"class":328},[49,89980,51396],{"class":55},[49,89982,89983],{"class":51,"line":109},[49,89984,2492],{"emptyLinePlaceholder":151},[49,89986,89987,89989,89991],{"class":51,"line":120},[49,89988,1129],{"class":55},[49,89990,51423],{"class":51389},[49,89992,51396],{"class":55},[49,89994,89995,89997,89999,90001,90003,90005],{"class":51,"line":135},[49,89996,52233],{"class":55},[49,89998,51433],{"class":51389},[49,90000,51436],{"class":2055},[49,90002,60],{"class":55},[49,90004,51441],{"class":328},[49,90006,51396],{"class":55},[49,90008,90009,90011,90013,90015,90017,90019,90021,90023,90025],{"class":51,"line":1306},[49,90010,52233],{"class":55},[49,90012,51433],{"class":51389},[49,90014,15010],{"class":2055},[49,90016,60],{"class":55},[49,90018,51480],{"class":328},[49,90020,51460],{"class":2055},[49,90022,60],{"class":55},[49,90024,51487],{"class":328},[49,90026,51396],{"class":55},[49,90028,90029,90031,90033,90035,90037],{"class":51,"line":1312},[49,90030,52233],{"class":55},[49,90032,51496],{"class":51389},[49,90034,51499],{"class":55},[49,90036,51496],{"class":51389},[49,90038,51396],{"class":55},[49,90040,90041,90043,90045],{"class":51,"line":1403},[49,90042,52233],{"class":55},[49,90044,143],{"class":51389},[49,90046,51396],{"class":55},[49,90048,90049,90051],{"class":51,"line":1409},[49,90050,54841],{"class":2055},[49,90052,15662],{"class":55},[49,90054,90055,90057,90059,90061],{"class":51,"line":1421},[49,90056,72685],{"class":66},[49,90058,51526],{"class":55},[49,90060,60594],{"class":66},[49,90062,1382],{"class":55},[49,90064,90065,90067,90069,90071,90073],{"class":51,"line":1704},[49,90066,54860],{"class":66},[49,90068,51526],{"class":55},[49,90070,1814],{"class":66},[49,90072,51581],{"class":59},[49,90074,1382],{"class":55},[49,90076,90077,90079,90081,90083,90085],{"class":51,"line":1709},[49,90078,54874],{"class":66},[49,90080,51526],{"class":55},[49,90082,1814],{"class":66},[49,90084,51581],{"class":59},[49,90086,1382],{"class":55},[49,90088,90089,90091,90093,90096],{"class":51,"line":1715},[49,90090,54973],{"class":66},[49,90092,51526],{"class":55},[49,90094,90095],{"class":66},"gray",[49,90097,1382],{"class":55},[49,90099,90100,90102,90104,90106,90108],{"class":51,"line":1720},[49,90101,55011],{"class":66},[49,90103,51526],{"class":55},[49,90105,1044],{"class":66},[49,90107,51581],{"class":59},[49,90109,1382],{"class":55},[49,90111,90112,90114,90116,90118],{"class":51,"line":1734},[49,90113,57505],{"class":66},[49,90115,51526],{"class":55},[49,90117,60931],{"class":66},[49,90119,1382],{"class":55},[49,90121,90122,90124,90126,90128],{"class":51,"line":1739},[49,90123,57375],{"class":66},[49,90125,51526],{"class":55},[49,90127,51681],{"class":66},[49,90129,1382],{"class":55},[49,90131,90132,90135,90137,90139,90141],{"class":51,"line":1745},[49,90133,90134],{"class":66},"      padding-top",[49,90136,51526],{"class":55},[49,90138,541],{"class":66},[49,90140,51581],{"class":59},[49,90142,1382],{"class":55},[49,90144,90145],{"class":51,"line":1766},[49,90146,2279],{"class":55},[49,90148,90149,90151,90153],{"class":51,"line":1771},[49,90150,52506],{"class":55},[49,90152,143],{"class":51389},[49,90154,51396],{"class":55},[49,90156,90157,90159,90161],{"class":51,"line":1785},[49,90158,51874],{"class":55},[49,90160,51423],{"class":51389},[49,90162,51396],{"class":55},[49,90164,90165],{"class":51,"line":1790},[49,90166,2492],{"emptyLinePlaceholder":151},[49,90168,90169,90171,90173],{"class":51,"line":1819},[49,90170,1129],{"class":55},[49,90172,51889],{"class":51389},[49,90174,51396],{"class":55},[49,90176,90177,90179,90181,90183,90185,90187,90189,90191],{"class":51,"line":1824},[49,90178,52233],{"class":55},[49,90180,51700],{"class":51389},[49,90182,53575],{"class":2055},[49,90184,60],{"class":55},[49,90186,53580],{"class":328},[49,90188,55403],{"class":55},[49,90190,51700],{"class":51389},[49,90192,51396],{"class":55},[49,90194,90195,90197,90199,90201,90203,90205,90207,90209],{"class":51,"line":1841},[49,90196,52233],{"class":55},[49,90198,51902],{"class":51389},[49,90200,55328],{"class":2055},[49,90202,60],{"class":55},[49,90204,88363],{"class":328},[49,90206,55403],{"class":55},[49,90208,51902],{"class":51389},[49,90210,51396],{"class":55},[49,90212,90213,90215,90217],{"class":51,"line":1846},[49,90214,52233],{"class":55},[49,90216,51902],{"class":51389},[49,90218,51396],{"class":55},[49,90220,90221,90223,90225,90227,90229,90231,90233,90236],{"class":51,"line":1851},[49,90222,11311],{"class":59},[49,90224,87022],{"class":66},[49,90226,13654],{"class":59},[49,90228,54485],{"class":55},[49,90230,54488],{"class":2055},[49,90232,228],{"class":55},[49,90234,90235],{"class":328},"'.box'",[49,90237,81],{"class":55},[49,90239,90240,90242,90244,90246],{"class":51,"line":1856},[49,90241,52308],{"class":59},[49,90243,9528],{"class":55},[49,90245,60],{"class":59},[49,90247,47422],{"class":66},[49,90249,90250,90252,90255],{"class":51,"line":1870},[49,90251,70173],{"class":59},[49,90253,90254],{"class":2055}," mouseMove",[49,90256,10943],{"class":55},[49,90258,90259,90262,90264,90266],{"class":51,"line":1875},[49,90260,90261],{"class":55},"      box.innerHTML ",[49,90263,60],{"class":59},[49,90265,3124],{"class":55},[49,90267,2794],{"class":59},[49,90269,90270],{"class":51,"line":2669},[49,90271,90272],{"class":283},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[49,90274,90275],{"class":51,"line":2683},[49,90276,2279],{"class":55},[49,90278,90279],{"class":51,"line":2691},[49,90280,90281],{"class":283},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[49,90283,90284],{"class":51,"line":2696},[49,90285,90286],{"class":283},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[49,90288,90289],{"class":51,"line":2702},[49,90290,90291],{"class":283},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[49,90293,90294,90297,90299,90301,90304,90307,90310,90313,90315],{"class":51,"line":2708},[49,90295,90296],{"class":55},"    box.",[49,90298,57902],{"class":2055},[49,90300,228],{"class":55},[49,90302,90303],{"class":328},"'mousemove'",[49,90305,90306],{"class":55},", _.",[49,90308,90309],{"class":2055},"debounce",[49,90311,90312],{"class":55},"(mouseMove, ",[49,90314,65163],{"class":66},[49,90316,30586],{"class":55},[49,90318,90319,90321,90323],{"class":51,"line":2713},[49,90320,52506],{"class":55},[49,90322,51902],{"class":51389},[49,90324,51396],{"class":55},[49,90326,90327,90329,90331],{"class":51,"line":8038},[49,90328,51874],{"class":55},[49,90330,51889],{"class":51389},[49,90332,51396],{"class":55},[49,90334,90335],{"class":51,"line":8062},[49,90336,2492],{"emptyLinePlaceholder":151},[49,90338,90339,90341,90343],{"class":51,"line":8067},[49,90340,51874],{"class":55},[49,90342,50724],{"class":51389},[49,90344,51396],{"class":55},[1226,90346,90347],{},[181,90348,90349],{},"手写一个防抖函数来处理",[14,90351,90352],{},"防抖的核心就是利用定时器来实现的：",[14,90354,90355],{},"①声明一个定时器变量",[14,90357,90358],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90360,90361],{},"③如果没有定时器则开启定时器，记得存到变量里面",[39,90363,90365],{"className":50722,"code":90364,"language":50724,"meta":44,"style":44},"\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",[46,90366,90367,90377,90391,90395,90403,90417,90437,90449,90457,90463,90473,90485,90497,90507,90519,90529,90539,90551,90555,90563,90571,90575,90583,90601,90619,90627,90645,90655,90663,90673,90677,90681,90685,90690,90695,90700,90705,90710,90715,90733,90740,90745,90753,90758,90771,90787,90797,90802,90806,90810,90830,90834,90839,90844,90849,90854,90862,90870,90874],{"__ignoreMap":44},[49,90368,90369,90371,90373,90375],{"class":51,"line":52},[49,90370,51386],{"class":55},[49,90372,51390],{"class":51389},[49,90374,51393],{"class":2055},[49,90376,51396],{"class":55},[49,90378,90379,90381,90383,90385,90387,90389],{"class":51,"line":84},[49,90380,1129],{"class":55},[49,90382,50724],{"class":51389},[49,90384,51405],{"class":2055},[49,90386,60],{"class":55},[49,90388,51410],{"class":328},[49,90390,51396],{"class":55},[49,90392,90393],{"class":51,"line":109},[49,90394,2492],{"emptyLinePlaceholder":151},[49,90396,90397,90399,90401],{"class":51,"line":120},[49,90398,1129],{"class":55},[49,90400,51423],{"class":51389},[49,90402,51396],{"class":55},[49,90404,90405,90407,90409,90411,90413,90415],{"class":51,"line":135},[49,90406,52233],{"class":55},[49,90408,51433],{"class":51389},[49,90410,51436],{"class":2055},[49,90412,60],{"class":55},[49,90414,51441],{"class":328},[49,90416,51396],{"class":55},[49,90418,90419,90421,90423,90425,90427,90429,90431,90433,90435],{"class":51,"line":1306},[49,90420,52233],{"class":55},[49,90422,51433],{"class":51389},[49,90424,15010],{"class":2055},[49,90426,60],{"class":55},[49,90428,51480],{"class":328},[49,90430,51460],{"class":2055},[49,90432,60],{"class":55},[49,90434,51487],{"class":328},[49,90436,51396],{"class":55},[49,90438,90439,90441,90443,90445,90447],{"class":51,"line":1312},[49,90440,52233],{"class":55},[49,90442,51496],{"class":51389},[49,90444,51499],{"class":55},[49,90446,51496],{"class":51389},[49,90448,51396],{"class":55},[49,90450,90451,90453,90455],{"class":51,"line":1403},[49,90452,52233],{"class":55},[49,90454,143],{"class":51389},[49,90456,51396],{"class":55},[49,90458,90459,90461],{"class":51,"line":1409},[49,90460,54841],{"class":2055},[49,90462,15662],{"class":55},[49,90464,90465,90467,90469,90471],{"class":51,"line":1421},[49,90466,72685],{"class":66},[49,90468,51526],{"class":55},[49,90470,60594],{"class":66},[49,90472,1382],{"class":55},[49,90474,90475,90477,90479,90481,90483],{"class":51,"line":1704},[49,90476,54860],{"class":66},[49,90478,51526],{"class":55},[49,90480,1814],{"class":66},[49,90482,51581],{"class":59},[49,90484,1382],{"class":55},[49,90486,90487,90489,90491,90493,90495],{"class":51,"line":1709},[49,90488,54874],{"class":66},[49,90490,51526],{"class":55},[49,90492,1814],{"class":66},[49,90494,51581],{"class":59},[49,90496,1382],{"class":55},[49,90498,90499,90501,90503,90505],{"class":51,"line":1715},[49,90500,54973],{"class":66},[49,90502,51526],{"class":55},[49,90504,90095],{"class":66},[49,90506,1382],{"class":55},[49,90508,90509,90511,90513,90515,90517],{"class":51,"line":1720},[49,90510,55011],{"class":66},[49,90512,51526],{"class":55},[49,90514,1044],{"class":66},[49,90516,51581],{"class":59},[49,90518,1382],{"class":55},[49,90520,90521,90523,90525,90527],{"class":51,"line":1734},[49,90522,57505],{"class":66},[49,90524,51526],{"class":55},[49,90526,60931],{"class":66},[49,90528,1382],{"class":55},[49,90530,90531,90533,90535,90537],{"class":51,"line":1739},[49,90532,57375],{"class":66},[49,90534,51526],{"class":55},[49,90536,51681],{"class":66},[49,90538,1382],{"class":55},[49,90540,90541,90543,90545,90547,90549],{"class":51,"line":1745},[49,90542,90134],{"class":66},[49,90544,51526],{"class":55},[49,90546,541],{"class":66},[49,90548,51581],{"class":59},[49,90550,1382],{"class":55},[49,90552,90553],{"class":51,"line":1766},[49,90554,2279],{"class":55},[49,90556,90557,90559,90561],{"class":51,"line":1771},[49,90558,52506],{"class":55},[49,90560,143],{"class":51389},[49,90562,51396],{"class":55},[49,90564,90565,90567,90569],{"class":51,"line":1785},[49,90566,51874],{"class":55},[49,90568,51423],{"class":51389},[49,90570,51396],{"class":55},[49,90572,90573],{"class":51,"line":1790},[49,90574,2492],{"emptyLinePlaceholder":151},[49,90576,90577,90579,90581],{"class":51,"line":1819},[49,90578,1129],{"class":55},[49,90580,51889],{"class":51389},[49,90582,51396],{"class":55},[49,90584,90585,90587,90589,90591,90593,90595,90597,90599],{"class":51,"line":1824},[49,90586,52233],{"class":55},[49,90588,51700],{"class":51389},[49,90590,53575],{"class":2055},[49,90592,60],{"class":55},[49,90594,53580],{"class":328},[49,90596,55403],{"class":55},[49,90598,51700],{"class":51389},[49,90600,51396],{"class":55},[49,90602,90603,90605,90607,90609,90611,90613,90615,90617],{"class":51,"line":1841},[49,90604,52233],{"class":55},[49,90606,51902],{"class":51389},[49,90608,55328],{"class":2055},[49,90610,60],{"class":55},[49,90612,88363],{"class":328},[49,90614,55403],{"class":55},[49,90616,51902],{"class":51389},[49,90618,51396],{"class":55},[49,90620,90621,90623,90625],{"class":51,"line":1846},[49,90622,52233],{"class":55},[49,90624,51902],{"class":51389},[49,90626,51396],{"class":55},[49,90628,90629,90631,90633,90635,90637,90639,90641,90643],{"class":51,"line":1851},[49,90630,11311],{"class":59},[49,90632,87022],{"class":66},[49,90634,13654],{"class":59},[49,90636,54485],{"class":55},[49,90638,54488],{"class":2055},[49,90640,228],{"class":55},[49,90642,90235],{"class":328},[49,90644,81],{"class":55},[49,90646,90647,90649,90651,90653],{"class":51,"line":1856},[49,90648,52308],{"class":59},[49,90650,9528],{"class":55},[49,90652,60],{"class":59},[49,90654,47422],{"class":66},[49,90656,90657,90659,90661],{"class":51,"line":1870},[49,90658,70173],{"class":59},[49,90660,90254],{"class":2055},[49,90662,10943],{"class":55},[49,90664,90665,90667,90669,90671],{"class":51,"line":1875},[49,90666,90261],{"class":55},[49,90668,60],{"class":59},[49,90670,3124],{"class":55},[49,90672,2794],{"class":59},[49,90674,90675],{"class":51,"line":2669},[49,90676,90272],{"class":283},[49,90678,90679],{"class":51,"line":2683},[49,90680,2279],{"class":55},[49,90682,90683],{"class":51,"line":2691},[49,90684,90281],{"class":283},[49,90686,90687],{"class":51,"line":2696},[49,90688,90689],{"class":283},"    \u002F\u002F 手写防抖函数\n",[49,90691,90692],{"class":51,"line":2702},[49,90693,90694],{"class":283},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[49,90696,90697],{"class":51,"line":2708},[49,90698,90699],{"class":283},"    \u002F\u002F 1.声明定时器变量\n",[49,90701,90702],{"class":51,"line":2713},[49,90703,90704],{"class":283},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[49,90706,90707],{"class":51,"line":8038},[49,90708,90709],{"class":283},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[49,90711,90712],{"class":51,"line":8062},[49,90713,90714],{"class":283},"    \u002F\u002F 4.定时器里面写函数调用\n",[49,90716,90717,90719,90722,90724,90727,90729,90731],{"class":51,"line":8067},[49,90718,70173],{"class":59},[49,90720,90721],{"class":2055}," debounce",[49,90723,228],{"class":55},[49,90725,90726],{"class":126},"fn",[49,90728,12525],{"class":55},[49,90730,939],{"class":126},[49,90732,12532],{"class":55},[49,90734,90735,90737],{"class":51,"line":8073},[49,90736,79861],{"class":59},[49,90738,90739],{"class":55}," timer\n",[49,90741,90742],{"class":51,"line":8100},[49,90743,90744],{"class":283},"      \u002F\u002F return 返回一个匿名函数\n",[49,90746,90747,90749,90751],{"class":51,"line":8105},[49,90748,74071],{"class":59},[49,90750,59007],{"class":59},[49,90752,54541],{"class":55},[49,90754,90755],{"class":51,"line":8111},[49,90756,90757],{"class":283},"        \u002F\u002F 这里边写第二三四步\n",[49,90759,90760,90762,90765,90768],{"class":51,"line":8123},[49,90761,2589],{"class":59},[49,90763,90764],{"class":55}," (timer) ",[49,90766,90767],{"class":2055},"clearTimeout",[49,90769,90770],{"class":55},"(timer)\n",[49,90772,90773,90776,90778,90781,90783,90785],{"class":51,"line":8135},[49,90774,90775],{"class":55},"        timer ",[49,90777,60],{"class":59},[49,90779,90780],{"class":2055}," setTimeout",[49,90782,228],{"class":55},[49,90784,54538],{"class":59},[49,90786,54541],{"class":55},[49,90788,90789,90792,90794],{"class":51,"line":8147},[49,90790,90791],{"class":2055},"          fn",[49,90793,13140],{"class":55},[49,90795,90796],{"class":283},"\u002F\u002F加小括号调用fn }, t)\n",[49,90798,90799],{"class":51,"line":9806},[49,90800,90801],{"class":55},"        }, t)\n",[49,90803,90804],{"class":51,"line":9831},[49,90805,52487],{"class":55},[49,90807,90808],{"class":51,"line":9854},[49,90809,2279],{"class":55},[49,90811,90812,90814,90816,90818,90820,90822,90824,90826,90828],{"class":51,"line":9878},[49,90813,90296],{"class":55},[49,90815,57902],{"class":2055},[49,90817,228],{"class":55},[49,90819,90303],{"class":328},[49,90821,12525],{"class":55},[49,90823,90309],{"class":2055},[49,90825,90312],{"class":55},[49,90827,65163],{"class":66},[49,90829,30586],{"class":55},[49,90831,90832],{"class":51,"line":9883},[49,90833,2492],{"emptyLinePlaceholder":151},[49,90835,90836],{"class":51,"line":9888},[49,90837,90838],{"class":283},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[49,90840,90841],{"class":51,"line":9893},[49,90842,90843],{"class":283},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[49,90845,90846],{"class":51,"line":9902},[49,90847,90848],{"class":283},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[49,90850,90851],{"class":51,"line":9907},[49,90852,90853],{"class":283},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[49,90855,90856,90858,90860],{"class":51,"line":9913},[49,90857,52506],{"class":55},[49,90859,51902],{"class":51389},[49,90861,51396],{"class":55},[49,90863,90864,90866,90868],{"class":51,"line":9934},[49,90865,51874],{"class":55},[49,90867,51889],{"class":51389},[49,90869,51396],{"class":55},[49,90871,90872],{"class":51,"line":9940},[49,90873,2492],{"emptyLinePlaceholder":151},[49,90875,90876,90878,90880],{"class":51,"line":9954},[49,90877,51874],{"class":55},[49,90879,50724],{"class":51389},[49,90881,51396],{"class":55},[195,90883,90885],{"id":90884},"_4172-节流","4.17.2 节流",[14,90887,90888],{},[1554,90889],{"alt":44,"src":90890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90892,90893],{},[1554,90894],{"alt":44,"src":90895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90897,90898],{},[373,90899,90900],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90902,90903],{},"实现方式：",[1226,90905,90906],{},[181,90907,90908],{},"lodash 提供的节流函数来处理",[14,90910,90911],{},"_.throttle(func,[wait=0],[options=])",[14,90913,90914],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[39,90916,90918],{"className":50722,"code":90917,"language":50724,"meta":44,"style":44},"\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",[46,90919,90920,90930,90944,90948,90956,90970,90990,91002,91010,91016,91026,91038,91050,91060,91072,91082,91092,91104,91108,91116,91124,91128,91136,91154,91172,91180,91198,91208,91216,91226,91230,91234,91238,91243,91248,91269,91277,91285,91289],{"__ignoreMap":44},[49,90921,90922,90924,90926,90928],{"class":51,"line":52},[49,90923,51386],{"class":55},[49,90925,51390],{"class":51389},[49,90927,51393],{"class":2055},[49,90929,51396],{"class":55},[49,90931,90932,90934,90936,90938,90940,90942],{"class":51,"line":84},[49,90933,1129],{"class":55},[49,90935,50724],{"class":51389},[49,90937,51405],{"class":2055},[49,90939,60],{"class":55},[49,90941,51410],{"class":328},[49,90943,51396],{"class":55},[49,90945,90946],{"class":51,"line":109},[49,90947,2492],{"emptyLinePlaceholder":151},[49,90949,90950,90952,90954],{"class":51,"line":120},[49,90951,1129],{"class":55},[49,90953,51423],{"class":51389},[49,90955,51396],{"class":55},[49,90957,90958,90960,90962,90964,90966,90968],{"class":51,"line":135},[49,90959,52233],{"class":55},[49,90961,51433],{"class":51389},[49,90963,51436],{"class":2055},[49,90965,60],{"class":55},[49,90967,51441],{"class":328},[49,90969,51396],{"class":55},[49,90971,90972,90974,90976,90978,90980,90982,90984,90986,90988],{"class":51,"line":1306},[49,90973,52233],{"class":55},[49,90975,51433],{"class":51389},[49,90977,15010],{"class":2055},[49,90979,60],{"class":55},[49,90981,51480],{"class":328},[49,90983,51460],{"class":2055},[49,90985,60],{"class":55},[49,90987,51487],{"class":328},[49,90989,51396],{"class":55},[49,90991,90992,90994,90996,90998,91000],{"class":51,"line":1312},[49,90993,52233],{"class":55},[49,90995,51496],{"class":51389},[49,90997,51499],{"class":55},[49,90999,51496],{"class":51389},[49,91001,51396],{"class":55},[49,91003,91004,91006,91008],{"class":51,"line":1403},[49,91005,52233],{"class":55},[49,91007,143],{"class":51389},[49,91009,51396],{"class":55},[49,91011,91012,91014],{"class":51,"line":1409},[49,91013,54841],{"class":2055},[49,91015,15662],{"class":55},[49,91017,91018,91020,91022,91024],{"class":51,"line":1421},[49,91019,72685],{"class":66},[49,91021,51526],{"class":55},[49,91023,60594],{"class":66},[49,91025,1382],{"class":55},[49,91027,91028,91030,91032,91034,91036],{"class":51,"line":1704},[49,91029,54860],{"class":66},[49,91031,51526],{"class":55},[49,91033,1814],{"class":66},[49,91035,51581],{"class":59},[49,91037,1382],{"class":55},[49,91039,91040,91042,91044,91046,91048],{"class":51,"line":1709},[49,91041,54874],{"class":66},[49,91043,51526],{"class":55},[49,91045,1814],{"class":66},[49,91047,51581],{"class":59},[49,91049,1382],{"class":55},[49,91051,91052,91054,91056,91058],{"class":51,"line":1715},[49,91053,54973],{"class":66},[49,91055,51526],{"class":55},[49,91057,90095],{"class":66},[49,91059,1382],{"class":55},[49,91061,91062,91064,91066,91068,91070],{"class":51,"line":1720},[49,91063,55011],{"class":66},[49,91065,51526],{"class":55},[49,91067,1044],{"class":66},[49,91069,51581],{"class":59},[49,91071,1382],{"class":55},[49,91073,91074,91076,91078,91080],{"class":51,"line":1734},[49,91075,57505],{"class":66},[49,91077,51526],{"class":55},[49,91079,60931],{"class":66},[49,91081,1382],{"class":55},[49,91083,91084,91086,91088,91090],{"class":51,"line":1739},[49,91085,57375],{"class":66},[49,91087,51526],{"class":55},[49,91089,51681],{"class":66},[49,91091,1382],{"class":55},[49,91093,91094,91096,91098,91100,91102],{"class":51,"line":1745},[49,91095,90134],{"class":66},[49,91097,51526],{"class":55},[49,91099,541],{"class":66},[49,91101,51581],{"class":59},[49,91103,1382],{"class":55},[49,91105,91106],{"class":51,"line":1766},[49,91107,2279],{"class":55},[49,91109,91110,91112,91114],{"class":51,"line":1771},[49,91111,52506],{"class":55},[49,91113,143],{"class":51389},[49,91115,51396],{"class":55},[49,91117,91118,91120,91122],{"class":51,"line":1785},[49,91119,51874],{"class":55},[49,91121,51423],{"class":51389},[49,91123,51396],{"class":55},[49,91125,91126],{"class":51,"line":1790},[49,91127,2492],{"emptyLinePlaceholder":151},[49,91129,91130,91132,91134],{"class":51,"line":1819},[49,91131,1129],{"class":55},[49,91133,51889],{"class":51389},[49,91135,51396],{"class":55},[49,91137,91138,91140,91142,91144,91146,91148,91150,91152],{"class":51,"line":1824},[49,91139,52233],{"class":55},[49,91141,51700],{"class":51389},[49,91143,53575],{"class":2055},[49,91145,60],{"class":55},[49,91147,53580],{"class":328},[49,91149,55403],{"class":55},[49,91151,51700],{"class":51389},[49,91153,51396],{"class":55},[49,91155,91156,91158,91160,91162,91164,91166,91168,91170],{"class":51,"line":1841},[49,91157,52233],{"class":55},[49,91159,51902],{"class":51389},[49,91161,55328],{"class":2055},[49,91163,60],{"class":55},[49,91165,88363],{"class":328},[49,91167,55403],{"class":55},[49,91169,51902],{"class":51389},[49,91171,51396],{"class":55},[49,91173,91174,91176,91178],{"class":51,"line":1846},[49,91175,52233],{"class":55},[49,91177,51902],{"class":51389},[49,91179,51396],{"class":55},[49,91181,91182,91184,91186,91188,91190,91192,91194,91196],{"class":51,"line":1851},[49,91183,11311],{"class":59},[49,91185,87022],{"class":66},[49,91187,13654],{"class":59},[49,91189,54485],{"class":55},[49,91191,54488],{"class":2055},[49,91193,228],{"class":55},[49,91195,90235],{"class":328},[49,91197,81],{"class":55},[49,91199,91200,91202,91204,91206],{"class":51,"line":1856},[49,91201,52308],{"class":59},[49,91203,9528],{"class":55},[49,91205,60],{"class":59},[49,91207,47422],{"class":66},[49,91209,91210,91212,91214],{"class":51,"line":1870},[49,91211,70173],{"class":59},[49,91213,90254],{"class":2055},[49,91215,10943],{"class":55},[49,91217,91218,91220,91222,91224],{"class":51,"line":1875},[49,91219,90261],{"class":55},[49,91221,60],{"class":59},[49,91223,3124],{"class":55},[49,91225,2794],{"class":59},[49,91227,91228],{"class":51,"line":2669},[49,91229,90272],{"class":283},[49,91231,91232],{"class":51,"line":2683},[49,91233,2279],{"class":55},[49,91235,91236],{"class":51,"line":2691},[49,91237,90281],{"class":283},[49,91239,91240],{"class":51,"line":2696},[49,91241,91242],{"class":283},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[49,91244,91245],{"class":51,"line":2702},[49,91246,91247],{"class":283},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[49,91249,91250,91252,91254,91256,91258,91260,91263,91265,91267],{"class":51,"line":2708},[49,91251,90296],{"class":55},[49,91253,57902],{"class":2055},[49,91255,228],{"class":55},[49,91257,90303],{"class":328},[49,91259,90306],{"class":55},[49,91261,91262],{"class":2055},"throttle",[49,91264,90312],{"class":55},[49,91266,65163],{"class":66},[49,91268,30586],{"class":55},[49,91270,91271,91273,91275],{"class":51,"line":2713},[49,91272,52506],{"class":55},[49,91274,51902],{"class":51389},[49,91276,51396],{"class":55},[49,91278,91279,91281,91283],{"class":51,"line":8038},[49,91280,51874],{"class":55},[49,91282,51889],{"class":51389},[49,91284,51396],{"class":55},[49,91286,91287],{"class":51,"line":8062},[49,91288,2492],{"emptyLinePlaceholder":151},[49,91290,91291,91293,91295],{"class":51,"line":8067},[49,91292,51874],{"class":55},[49,91294,50724],{"class":51389},[49,91296,51396],{"class":55},[1226,91298,91299],{},[181,91300,91301],{},"手写一个节流函数来处理",[14,91303,71041],{},[14,91305,90355],{},[14,91307,91308],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91310,91311],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[39,91313,91315],{"className":50722,"code":91314,"language":50724,"meta":44,"style":44},"\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",[46,91316,91317,91327,91341,91345,91353,91367,91387,91399,91407,91413,91423,91435,91447,91457,91469,91479,91489,91501,91505,91513,91521,91525,91533,91551,91569,91577,91595,91605,91613,91623,91627,91631,91635,91640,91645,91650,91655,91660,91665,91682,91688,91696,91707,91722,91729,91734,91739,91749,91754,91759,91764,91768,91772,91776,91796,91804,91812,91816],{"__ignoreMap":44},[49,91318,91319,91321,91323,91325],{"class":51,"line":52},[49,91320,51386],{"class":55},[49,91322,51390],{"class":51389},[49,91324,51393],{"class":2055},[49,91326,51396],{"class":55},[49,91328,91329,91331,91333,91335,91337,91339],{"class":51,"line":84},[49,91330,1129],{"class":55},[49,91332,50724],{"class":51389},[49,91334,51405],{"class":2055},[49,91336,60],{"class":55},[49,91338,51410],{"class":328},[49,91340,51396],{"class":55},[49,91342,91343],{"class":51,"line":109},[49,91344,2492],{"emptyLinePlaceholder":151},[49,91346,91347,91349,91351],{"class":51,"line":120},[49,91348,1129],{"class":55},[49,91350,51423],{"class":51389},[49,91352,51396],{"class":55},[49,91354,91355,91357,91359,91361,91363,91365],{"class":51,"line":135},[49,91356,52233],{"class":55},[49,91358,51433],{"class":51389},[49,91360,51436],{"class":2055},[49,91362,60],{"class":55},[49,91364,51441],{"class":328},[49,91366,51396],{"class":55},[49,91368,91369,91371,91373,91375,91377,91379,91381,91383,91385],{"class":51,"line":1306},[49,91370,52233],{"class":55},[49,91372,51433],{"class":51389},[49,91374,15010],{"class":2055},[49,91376,60],{"class":55},[49,91378,51480],{"class":328},[49,91380,51460],{"class":2055},[49,91382,60],{"class":55},[49,91384,51487],{"class":328},[49,91386,51396],{"class":55},[49,91388,91389,91391,91393,91395,91397],{"class":51,"line":1312},[49,91390,52233],{"class":55},[49,91392,51496],{"class":51389},[49,91394,51499],{"class":55},[49,91396,51496],{"class":51389},[49,91398,51396],{"class":55},[49,91400,91401,91403,91405],{"class":51,"line":1403},[49,91402,52233],{"class":55},[49,91404,143],{"class":51389},[49,91406,51396],{"class":55},[49,91408,91409,91411],{"class":51,"line":1409},[49,91410,54841],{"class":2055},[49,91412,15662],{"class":55},[49,91414,91415,91417,91419,91421],{"class":51,"line":1421},[49,91416,72685],{"class":66},[49,91418,51526],{"class":55},[49,91420,60594],{"class":66},[49,91422,1382],{"class":55},[49,91424,91425,91427,91429,91431,91433],{"class":51,"line":1704},[49,91426,54860],{"class":66},[49,91428,51526],{"class":55},[49,91430,1814],{"class":66},[49,91432,51581],{"class":59},[49,91434,1382],{"class":55},[49,91436,91437,91439,91441,91443,91445],{"class":51,"line":1709},[49,91438,54874],{"class":66},[49,91440,51526],{"class":55},[49,91442,1814],{"class":66},[49,91444,51581],{"class":59},[49,91446,1382],{"class":55},[49,91448,91449,91451,91453,91455],{"class":51,"line":1715},[49,91450,54973],{"class":66},[49,91452,51526],{"class":55},[49,91454,90095],{"class":66},[49,91456,1382],{"class":55},[49,91458,91459,91461,91463,91465,91467],{"class":51,"line":1720},[49,91460,55011],{"class":66},[49,91462,51526],{"class":55},[49,91464,1044],{"class":66},[49,91466,51581],{"class":59},[49,91468,1382],{"class":55},[49,91470,91471,91473,91475,91477],{"class":51,"line":1734},[49,91472,57505],{"class":66},[49,91474,51526],{"class":55},[49,91476,60931],{"class":66},[49,91478,1382],{"class":55},[49,91480,91481,91483,91485,91487],{"class":51,"line":1739},[49,91482,57375],{"class":66},[49,91484,51526],{"class":55},[49,91486,51681],{"class":66},[49,91488,1382],{"class":55},[49,91490,91491,91493,91495,91497,91499],{"class":51,"line":1745},[49,91492,90134],{"class":66},[49,91494,51526],{"class":55},[49,91496,541],{"class":66},[49,91498,51581],{"class":59},[49,91500,1382],{"class":55},[49,91502,91503],{"class":51,"line":1766},[49,91504,2279],{"class":55},[49,91506,91507,91509,91511],{"class":51,"line":1771},[49,91508,52506],{"class":55},[49,91510,143],{"class":51389},[49,91512,51396],{"class":55},[49,91514,91515,91517,91519],{"class":51,"line":1785},[49,91516,51874],{"class":55},[49,91518,51423],{"class":51389},[49,91520,51396],{"class":55},[49,91522,91523],{"class":51,"line":1790},[49,91524,2492],{"emptyLinePlaceholder":151},[49,91526,91527,91529,91531],{"class":51,"line":1819},[49,91528,1129],{"class":55},[49,91530,51889],{"class":51389},[49,91532,51396],{"class":55},[49,91534,91535,91537,91539,91541,91543,91545,91547,91549],{"class":51,"line":1824},[49,91536,52233],{"class":55},[49,91538,51700],{"class":51389},[49,91540,53575],{"class":2055},[49,91542,60],{"class":55},[49,91544,53580],{"class":328},[49,91546,55403],{"class":55},[49,91548,51700],{"class":51389},[49,91550,51396],{"class":55},[49,91552,91553,91555,91557,91559,91561,91563,91565,91567],{"class":51,"line":1841},[49,91554,52233],{"class":55},[49,91556,51902],{"class":51389},[49,91558,55328],{"class":2055},[49,91560,60],{"class":55},[49,91562,88363],{"class":328},[49,91564,55403],{"class":55},[49,91566,51902],{"class":51389},[49,91568,51396],{"class":55},[49,91570,91571,91573,91575],{"class":51,"line":1846},[49,91572,52233],{"class":55},[49,91574,51902],{"class":51389},[49,91576,51396],{"class":55},[49,91578,91579,91581,91583,91585,91587,91589,91591,91593],{"class":51,"line":1851},[49,91580,11311],{"class":59},[49,91582,87022],{"class":66},[49,91584,13654],{"class":59},[49,91586,54485],{"class":55},[49,91588,54488],{"class":2055},[49,91590,228],{"class":55},[49,91592,90235],{"class":328},[49,91594,81],{"class":55},[49,91596,91597,91599,91601,91603],{"class":51,"line":1856},[49,91598,52308],{"class":59},[49,91600,9528],{"class":55},[49,91602,60],{"class":59},[49,91604,47422],{"class":66},[49,91606,91607,91609,91611],{"class":51,"line":1870},[49,91608,70173],{"class":59},[49,91610,90254],{"class":2055},[49,91612,10943],{"class":55},[49,91614,91615,91617,91619,91621],{"class":51,"line":1875},[49,91616,90261],{"class":55},[49,91618,60],{"class":59},[49,91620,3124],{"class":55},[49,91622,2794],{"class":59},[49,91624,91625],{"class":51,"line":2669},[49,91626,90272],{"class":283},[49,91628,91629],{"class":51,"line":2683},[49,91630,2279],{"class":55},[49,91632,91633],{"class":51,"line":2691},[49,91634,90281],{"class":283},[49,91636,91637],{"class":51,"line":2696},[49,91638,91639],{"class":283},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[49,91641,91642],{"class":51,"line":2702},[49,91643,91644],{"class":283},"    \u002F\u002F 1.声明一个定时器变量\n",[49,91646,91647],{"class":51,"line":2708},[49,91648,91649],{"class":283},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[49,91651,91652],{"class":51,"line":2713},[49,91653,91654],{"class":283},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[49,91656,91657],{"class":51,"line":8038},[49,91658,91659],{"class":283},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[49,91661,91662],{"class":51,"line":8062},[49,91663,91664],{"class":283},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[49,91666,91667,91669,91672,91674,91676,91678,91680],{"class":51,"line":8067},[49,91668,70173],{"class":59},[49,91670,91671],{"class":2055}," throttle",[49,91673,228],{"class":55},[49,91675,90726],{"class":126},[49,91677,12525],{"class":55},[49,91679,939],{"class":126},[49,91681,12532],{"class":55},[49,91683,91684,91686],{"class":51,"line":8073},[49,91685,79861],{"class":59},[49,91687,90739],{"class":55},[49,91689,91690,91692,91694],{"class":51,"line":8100},[49,91691,74071],{"class":59},[49,91693,59007],{"class":59},[49,91695,54541],{"class":55},[49,91697,91698,91700,91702,91704],{"class":51,"line":8105},[49,91699,2589],{"class":59},[49,91701,1750],{"class":55},[49,91703,450],{"class":59},[49,91705,91706],{"class":55},"timer) {\n",[49,91708,91709,91712,91714,91716,91718,91720],{"class":51,"line":8111},[49,91710,91711],{"class":55},"          timer ",[49,91713,60],{"class":59},[49,91715,90780],{"class":2055},[49,91717,228],{"class":55},[49,91719,54538],{"class":59},[49,91721,54541],{"class":55},[49,91723,91724,91727],{"class":51,"line":8123},[49,91725,91726],{"class":2055},"            fn",[49,91728,2068],{"class":55},[49,91730,91731],{"class":51,"line":8135},[49,91732,91733],{"class":283},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[49,91735,91736],{"class":51,"line":8147},[49,91737,91738],{"class":283},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[49,91740,91741,91744,91746],{"class":51,"line":9806},[49,91742,91743],{"class":55},"            timer ",[49,91745,60],{"class":59},[49,91747,91748],{"class":66}," null\n",[49,91750,91751],{"class":51,"line":9831},[49,91752,91753],{"class":283},"            \u002F\u002F 不能用clearTimeout(timer)\n",[49,91755,91756],{"class":51,"line":9854},[49,91757,91758],{"class":283},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[49,91760,91761],{"class":51,"line":9878},[49,91762,91763],{"class":55},"          }, t)\n",[49,91765,91766],{"class":51,"line":9883},[49,91767,2621],{"class":55},[49,91769,91770],{"class":51,"line":9888},[49,91771,52487],{"class":55},[49,91773,91774],{"class":51,"line":9893},[49,91775,2279],{"class":55},[49,91777,91778,91780,91782,91784,91786,91788,91790,91792,91794],{"class":51,"line":9902},[49,91779,90296],{"class":55},[49,91781,57902],{"class":2055},[49,91783,228],{"class":55},[49,91785,90303],{"class":328},[49,91787,12525],{"class":55},[49,91789,91262],{"class":2055},[49,91791,90312],{"class":55},[49,91793,65163],{"class":66},[49,91795,30586],{"class":55},[49,91797,91798,91800,91802],{"class":51,"line":9907},[49,91799,52506],{"class":55},[49,91801,51902],{"class":51389},[49,91803,51396],{"class":55},[49,91805,91806,91808,91810],{"class":51,"line":9913},[49,91807,51874],{"class":55},[49,91809,51889],{"class":51389},[49,91811,51396],{"class":55},[49,91813,91814],{"class":51,"line":9934},[49,91815,2492],{"emptyLinePlaceholder":151},[49,91817,91818,91820,91822],{"class":51,"line":9940},[49,91819,51874],{"class":55},[49,91821,50724],{"class":51389},[49,91823,51396],{"class":55},[195,91825,91827],{"id":91826},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[39,91829,91831],{"className":53156,"code":91830,"language":53158,"meta":44,"style":44},"\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",[46,91832,91833,91841,91849,91854,91859,91864,91869,91873,91881],{"__ignoreMap":44},[49,91834,91835,91837,91839],{"class":51,"line":52},[49,91836,1129],{"class":55},[49,91838,51889],{"class":51389},[49,91840,51396],{"class":55},[49,91842,91843,91845,91847],{"class":51,"line":84},[49,91844,52233],{"class":55},[49,91846,51902],{"class":51389},[49,91848,51396],{"class":55},[49,91850,91851],{"class":51,"line":109},[49,91852,91853],{"class":55},"    let timer = null\n",[49,91855,91856],{"class":51,"line":120},[49,91857,91858],{"class":55},"    timer = setTimeout(() => {\n",[49,91860,91861],{"class":51,"line":135},[49,91862,91863],{"class":55},"      clearTimeout(timer)\n",[49,91865,91866],{"class":51,"line":1306},[49,91867,91868],{"class":55},"      console.log(timer)\n",[49,91870,91871],{"class":51,"line":1312},[49,91872,60314],{"class":55},[49,91874,91875,91877,91879],{"class":51,"line":1403},[49,91876,52506],{"class":55},[49,91878,51902],{"class":51389},[49,91880,51396],{"class":55},[49,91882,91883,91885,91887],{"class":51,"line":1409},[49,91884,51874],{"class":55},[49,91886,51889],{"class":51389},[49,91888,51396],{"class":55},[14,91890,91891],{},"输出为1",[14,91893,91894],{},"在开启的定时器里边写清除定时器",[14,91896,91897],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[195,91899,91901],{"id":91900},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91903,91904],{},"页面打开，可以记录上一次的视频播放位置",[14,91906,91907],{},[1554,91908],{"alt":44,"src":91909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91911,91912],{},[1554,91913],{"alt":44,"src":91914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[39,91916,91918],{"className":50722,"code":91917,"language":50724,"meta":44,"style":44},"\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",[46,91919,91920,91930,91944,91948,91956,91970,91990,92010,92032,92045,92053,92059,92069,92079,92089,92093,92097,92104,92117,92129,92133,92137,92147,92159,92173,92177,92181,92188,92198,92211,92223,92233,92243,92259,92271,92275,92279,92287,92297,92309,92319,92329,92339,92343,92347,92357,92368,92372,92380,92388,92392,92400,92415,92430,92445,92466,92474,92482,92497,92519,92527,92542,92568,92594,92620,92628,92636,92655,92663,92668,92687,92692,92710,92715,92720,92728,92733,92747,92755,92760,92777,92781,92786,92808,92812,92820,92828,92832],{"__ignoreMap":44},[49,91921,91922,91924,91926,91928],{"class":51,"line":52},[49,91923,51386],{"class":55},[49,91925,51390],{"class":51389},[49,91927,51393],{"class":2055},[49,91929,51396],{"class":55},[49,91931,91932,91934,91936,91938,91940,91942],{"class":51,"line":84},[49,91933,1129],{"class":55},[49,91935,50724],{"class":51389},[49,91937,51405],{"class":2055},[49,91939,60],{"class":55},[49,91941,51410],{"class":328},[49,91943,51396],{"class":55},[49,91945,91946],{"class":51,"line":109},[49,91947,2492],{"emptyLinePlaceholder":151},[49,91949,91950,91952,91954],{"class":51,"line":120},[49,91951,1129],{"class":55},[49,91953,51423],{"class":51389},[49,91955,51396],{"class":55},[49,91957,91958,91960,91962,91964,91966,91968],{"class":51,"line":135},[49,91959,52233],{"class":55},[49,91961,51433],{"class":51389},[49,91963,51436],{"class":2055},[49,91965,60],{"class":55},[49,91967,51441],{"class":328},[49,91969,59216],{"class":55},[49,91971,91972,91974,91976,91978,91980,91982,91984,91986,91988],{"class":51,"line":1306},[49,91973,52233],{"class":55},[49,91975,51433],{"class":51389},[49,91977,51452],{"class":2055},[49,91979,60],{"class":55},[49,91981,51457],{"class":328},[49,91983,51460],{"class":2055},[49,91985,60],{"class":55},[49,91987,51465],{"class":328},[49,91989,59216],{"class":55},[49,91991,91992,91994,91996,91998,92000,92002,92004,92006,92008],{"class":51,"line":1312},[49,91993,52233],{"class":55},[49,91995,51433],{"class":51389},[49,91997,15010],{"class":2055},[49,91999,60],{"class":55},[49,92001,51480],{"class":328},[49,92003,51460],{"class":2055},[49,92005,60],{"class":55},[49,92007,51487],{"class":328},[49,92009,59216],{"class":55},[49,92011,92012,92014,92016,92018,92020,92023,92025,92027,92030],{"class":51,"line":1403},[49,92013,52233],{"class":55},[49,92015,51433],{"class":51389},[49,92017,15010],{"class":2055},[49,92019,60],{"class":55},[49,92021,92022],{"class":328},"\"referrer\"",[49,92024,51460],{"class":2055},[49,92026,60],{"class":55},[49,92028,92029],{"class":328},"\"never\"",[49,92031,59216],{"class":55},[49,92033,92034,92036,92038,92041,92043],{"class":51,"line":1409},[49,92035,52233],{"class":55},[49,92037,51496],{"class":51389},[49,92039,92040],{"class":55},">综合案例\u003C\u002F",[49,92042,51496],{"class":51389},[49,92044,51396],{"class":55},[49,92046,92047,92049,92051],{"class":51,"line":1421},[49,92048,52233],{"class":55},[49,92050,143],{"class":51389},[49,92052,51396],{"class":55},[49,92054,92055,92057],{"class":51,"line":1704},[49,92056,6493],{"class":51389},[49,92058,15662],{"class":55},[49,92060,92061,92063,92065,92067],{"class":51,"line":1709},[49,92062,54784],{"class":66},[49,92064,51526],{"class":55},[49,92066,415],{"class":66},[49,92068,1382],{"class":55},[49,92070,92071,92073,92075,92077],{"class":51,"line":1715},[49,92072,54795],{"class":66},[49,92074,51526],{"class":55},[49,92076,415],{"class":66},[49,92078,1382],{"class":55},[49,92080,92081,92083,92085,92087],{"class":51,"line":1720},[49,92082,72685],{"class":66},[49,92084,51526],{"class":55},[49,92086,60594],{"class":66},[49,92088,1382],{"class":55},[49,92090,92091],{"class":51,"line":1734},[49,92092,2279],{"class":55},[49,92094,92095],{"class":51,"line":1739},[49,92096,2492],{"emptyLinePlaceholder":151},[49,92098,92099,92102],{"class":51,"line":1745},[49,92100,92101],{"class":2055},"    .container",[49,92103,15662],{"class":55},[49,92105,92106,92108,92110,92113,92115],{"class":51,"line":1766},[49,92107,54860],{"class":66},[49,92109,51526],{"class":55},[49,92111,92112],{"class":66},"1200",[49,92114,51581],{"class":59},[49,92116,1382],{"class":55},[49,92118,92119,92121,92123,92125,92127],{"class":51,"line":1771},[49,92120,54795],{"class":66},[49,92122,51526],{"class":55},[49,92124,415],{"class":66},[49,92126,51645],{"class":66},[49,92128,1382],{"class":55},[49,92130,92131],{"class":51,"line":1785},[49,92132,2279],{"class":55},[49,92134,92135],{"class":51,"line":1790},[49,92136,2492],{"emptyLinePlaceholder":151},[49,92138,92139,92142,92145],{"class":51,"line":1819},[49,92140,92141],{"class":2055},"    .video",[49,92143,92144],{"class":51389}," video",[49,92146,15662],{"class":55},[49,92148,92149,92151,92153,92155,92157],{"class":51,"line":1824},[49,92150,54860],{"class":66},[49,92152,51526],{"class":55},[49,92154,533],{"class":66},[49,92156,550],{"class":59},[49,92158,1382],{"class":55},[49,92160,92161,92163,92165,92167,92169,92171],{"class":51,"line":1841},[49,92162,54784],{"class":66},[49,92164,51526],{"class":55},[49,92166,919],{"class":66},[49,92168,51581],{"class":59},[49,92170,4185],{"class":66},[49,92172,1382],{"class":55},[49,92174,92175],{"class":51,"line":1846},[49,92176,2279],{"class":55},[49,92178,92179],{"class":51,"line":1851},[49,92180,2492],{"emptyLinePlaceholder":151},[49,92182,92183,92186],{"class":51,"line":1856},[49,92184,92185],{"class":2055},"    .elevator",[49,92187,15662],{"class":55},[49,92189,92190,92192,92194,92196],{"class":51,"line":1870},[49,92191,54848],{"class":66},[49,92193,51526],{"class":55},[49,92195,86322],{"class":66},[49,92197,1382],{"class":55},[49,92199,92200,92202,92204,92207,92209],{"class":51,"line":1875},[49,92201,55036],{"class":66},[49,92203,51526],{"class":55},[49,92205,92206],{"class":66},"280",[49,92208,51581],{"class":59},[49,92210,1382],{"class":55},[49,92212,92213,92215,92217,92219,92221],{"class":51,"line":2669},[49,92214,86516],{"class":66},[49,92216,51526],{"class":55},[49,92218,919],{"class":66},[49,92220,51581],{"class":59},[49,92222,1382],{"class":55},[49,92224,92225,92227,92229,92231],{"class":51,"line":2683},[49,92226,86329],{"class":66},[49,92228,51526],{"class":55},[49,92230,86334],{"class":66},[49,92232,1382],{"class":55},[49,92234,92235,92237,92239,92241],{"class":51,"line":2691},[49,92236,61810],{"class":66},[49,92238,51526],{"class":55},[49,92240,60931],{"class":66},[49,92242,1382],{"class":55},[49,92244,92245,92247,92249,92251,92253,92255,92257],{"class":51,"line":2696},[49,92246,62066],{"class":66},[49,92248,51526],{"class":55},[49,92250,441],{"class":66},[49,92252,51581],{"class":59},[49,92254,51610],{"class":66},[49,92256,62333],{"class":66},[49,92258,1382],{"class":55},[49,92260,92261,92263,92265,92267,92269],{"class":51,"line":2702},[49,92262,54860],{"class":66},[49,92264,51526],{"class":55},[49,92266,1126],{"class":66},[49,92268,51581],{"class":59},[49,92270,1382],{"class":55},[49,92272,92273],{"class":51,"line":2708},[49,92274,2279],{"class":55},[49,92276,92277],{"class":51,"line":2713},[49,92278,2492],{"emptyLinePlaceholder":151},[49,92280,92281,92283,92285],{"class":51,"line":8038},[49,92282,92185],{"class":2055},[49,92284,1490],{"class":51389},[49,92286,15662],{"class":55},[49,92288,92289,92291,92293,92295],{"class":51,"line":8062},[49,92290,55098],{"class":66},[49,92292,51526],{"class":55},[49,92294,60958],{"class":66},[49,92296,1382],{"class":55},[49,92298,92299,92301,92303,92305,92307],{"class":51,"line":8067},[49,92300,54784],{"class":66},[49,92302,51526],{"class":55},[49,92304,95],{"class":66},[49,92306,51581],{"class":59},[49,92308,1382],{"class":55},[49,92310,92311,92313,92315,92317],{"class":51,"line":8073},[49,92312,64059],{"class":66},[49,92314,51526],{"class":55},[49,92316,54826],{"class":66},[49,92318,1382],{"class":55},[49,92320,92321,92323,92325,92327],{"class":51,"line":8100},[49,92322,57375],{"class":66},[49,92324,51526],{"class":55},[49,92326,51681],{"class":66},[49,92328,1382],{"class":55},[49,92330,92331,92333,92335,92337],{"class":51,"line":8105},[49,92332,57505],{"class":66},[49,92334,51526],{"class":55},[49,92336,62159],{"class":66},[49,92338,1382],{"class":55},[49,92340,92341],{"class":51,"line":8111},[49,92342,2279],{"class":55},[49,92344,92345],{"class":51,"line":8123},[49,92346,2492],{"emptyLinePlaceholder":151},[49,92348,92349,92351,92353,92355],{"class":51,"line":8135},[49,92350,92185],{"class":2055},[49,92352,1490],{"class":51389},[49,92354,64113],{"class":2055},[49,92356,15662],{"class":55},[49,92358,92359,92361,92363,92366],{"class":51,"line":8147},[49,92360,57505],{"class":66},[49,92362,51526],{"class":55},[49,92364,92365],{"class":66},"#1286ff",[49,92367,1382],{"class":55},[49,92369,92370],{"class":51,"line":9806},[49,92371,2279],{"class":55},[49,92373,92374,92376,92378],{"class":51,"line":9831},[49,92375,52506],{"class":55},[49,92377,143],{"class":51389},[49,92379,51396],{"class":55},[49,92381,92382,92384,92386],{"class":51,"line":9854},[49,92383,51874],{"class":55},[49,92385,51423],{"class":51389},[49,92387,51396],{"class":55},[49,92389,92390],{"class":51,"line":9878},[49,92391,2492],{"emptyLinePlaceholder":151},[49,92393,92394,92396,92398],{"class":51,"line":9883},[49,92395,1129],{"class":55},[49,92397,51889],{"class":51389},[49,92399,51396],{"class":55},[49,92401,92402,92404,92406,92408,92410,92413],{"class":51,"line":9888},[49,92403,52233],{"class":55},[49,92405,51700],{"class":51389},[49,92407,53575],{"class":2055},[49,92409,60],{"class":55},[49,92411,92412],{"class":328},"\"container\"",[49,92414,51396],{"class":55},[49,92416,92417,92419,92421,92423,92425,92428],{"class":51,"line":9893},[49,92418,51430],{"class":55},[49,92420,51700],{"class":51389},[49,92422,53575],{"class":2055},[49,92424,60],{"class":55},[49,92426,92427],{"class":328},"\"header\"",[49,92429,51396],{"class":55},[49,92431,92432,92434,92436,92438,92440,92443],{"class":51,"line":9902},[49,92433,55323],{"class":55},[49,92435,56],{"class":51389},[49,92437,61146],{"class":2055},[49,92439,60],{"class":55},[49,92441,92442],{"class":328},"\"http:\u002F\u002Fpip.itcast.cn\"",[49,92444,51396],{"class":55},[49,92446,92447,92449,92451,92453,92455,92458,92460,92462,92464],{"class":51,"line":9907},[49,92448,55391],{"class":55},[49,92450,1554],{"class":51389},[49,92452,55328],{"class":2055},[49,92454,60],{"class":55},[49,92456,92457],{"class":328},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[49,92459,55336],{"class":2055},[49,92461,60],{"class":55},[49,92463,7742],{"class":328},[49,92465,59216],{"class":55},[49,92467,92468,92470,92472],{"class":51,"line":9913},[49,92469,55496],{"class":55},[49,92471,56],{"class":51389},[49,92473,51396],{"class":55},[49,92475,92476,92478,92480],{"class":51,"line":9934},[49,92477,51865],{"class":55},[49,92479,51700],{"class":51389},[49,92481,51396],{"class":55},[49,92483,92484,92486,92488,92490,92492,92495],{"class":51,"line":9940},[49,92485,51430],{"class":55},[49,92487,51700],{"class":51389},[49,92489,53575],{"class":2055},[49,92491,60],{"class":55},[49,92493,92494],{"class":328},"\"video\"",[49,92496,51396],{"class":55},[49,92498,92499,92501,92503,92505,92507,92510,92513,92515,92517],{"class":51,"line":9954},[49,92500,55323],{"class":55},[49,92502,28274],{"class":51389},[49,92504,55328],{"class":2055},[49,92506,60],{"class":55},[49,92508,92509],{"class":328},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[49,92511,92512],{"class":2055}," controls",[49,92514,55403],{"class":55},[49,92516,28274],{"class":51389},[49,92518,51396],{"class":55},[49,92520,92521,92523,92525],{"class":51,"line":9960},[49,92522,51865],{"class":55},[49,92524,51700],{"class":51389},[49,92526,51396],{"class":55},[49,92528,92529,92531,92533,92535,92537,92540],{"class":51,"line":9987},[49,92530,51430],{"class":55},[49,92532,51700],{"class":51389},[49,92534,53575],{"class":2055},[49,92536,60],{"class":55},[49,92538,92539],{"class":328},"\"elevator\"",[49,92541,51396],{"class":55},[49,92543,92544,92546,92548,92550,92552,92554,92557,92559,92561,92564,92566],{"class":51,"line":9996},[49,92545,55323],{"class":55},[49,92547,56],{"class":51389},[49,92549,61146],{"class":2055},[49,92551,60],{"class":55},[49,92553,64325],{"class":328},[49,92555,92556],{"class":2055}," data-ref",[49,92558,60],{"class":55},[49,92560,92494],{"class":328},[49,92562,92563],{"class":55},">视频介绍\u003C\u002F",[49,92565,56],{"class":51389},[49,92567,51396],{"class":55},[49,92569,92570,92572,92574,92576,92578,92580,92582,92584,92587,92590,92592],{"class":51,"line":10002},[49,92571,55323],{"class":55},[49,92573,56],{"class":51389},[49,92575,61146],{"class":2055},[49,92577,60],{"class":55},[49,92579,64325],{"class":328},[49,92581,92556],{"class":2055},[49,92583,60],{"class":55},[49,92585,92586],{"class":328},"\"intro\"",[49,92588,92589],{"class":55},">课程简介\u003C\u002F",[49,92591,56],{"class":51389},[49,92593,51396],{"class":55},[49,92595,92596,92598,92600,92602,92604,92606,92608,92610,92613,92616,92618],{"class":51,"line":10010},[49,92597,55323],{"class":55},[49,92599,56],{"class":51389},[49,92601,61146],{"class":2055},[49,92603,60],{"class":55},[49,92605,64325],{"class":328},[49,92607,92556],{"class":2055},[49,92609,60],{"class":55},[49,92611,92612],{"class":328},"\"outline\"",[49,92614,92615],{"class":55},">评论列表\u003C\u002F",[49,92617,56],{"class":51389},[49,92619,51396],{"class":55},[49,92621,92622,92624,92626],{"class":51,"line":10015},[49,92623,51865],{"class":55},[49,92625,51700],{"class":51389},[49,92627,51396],{"class":55},[49,92629,92630,92632,92634],{"class":51,"line":16694},[49,92631,52506],{"class":55},[49,92633,51700],{"class":51389},[49,92635,51396],{"class":55},[49,92637,92638,92640,92642,92644,92646,92649,92651,92653],{"class":51,"line":16700},[49,92639,52233],{"class":55},[49,92641,51902],{"class":51389},[49,92643,55328],{"class":2055},[49,92645,60],{"class":55},[49,92647,92648],{"class":328},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[49,92650,55403],{"class":55},[49,92652,51902],{"class":51389},[49,92654,51396],{"class":55},[49,92656,92657,92659,92661],{"class":51,"line":16723},[49,92658,52233],{"class":55},[49,92660,51902],{"class":51389},[49,92662,51396],{"class":55},[49,92664,92665],{"class":51,"line":16729},[49,92666,92667],{"class":283},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[49,92669,92670,92672,92674,92676,92678,92680,92682,92685],{"class":51,"line":16752},[49,92671,11311],{"class":59},[49,92673,92144],{"class":66},[49,92675,13654],{"class":59},[49,92677,54485],{"class":55},[49,92679,54488],{"class":2055},[49,92681,228],{"class":55},[49,92683,92684],{"class":328},"'video'",[49,92686,81],{"class":55},[49,92688,92689],{"class":51,"line":16766},[49,92690,92691],{"class":283},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[49,92693,92694,92697,92699,92701,92703,92706,92708],{"class":51,"line":16786},[49,92695,92696],{"class":55},"    video.ontimeupdate ",[49,92698,60],{"class":59},[49,92700,88444],{"class":55},[49,92702,91262],{"class":2055},[49,92704,92705],{"class":55},"(() ",[49,92707,84811],{"class":59},[49,92709,15662],{"class":55},[49,92711,92712],{"class":51,"line":16792},[49,92713,92714],{"class":283},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[49,92716,92717],{"class":51,"line":16803},[49,92718,92719],{"class":283},"      \u002F\u002F 控制台输出当前的时间\n",[49,92721,92722,92725],{"class":51,"line":16826},[49,92723,92724],{"class":283},"      \u002F\u002F console.log(video.currentTime)",[49,92726,92727],{"class":283},"  \u002F\u002F获得当前的视频时间\n",[49,92729,92730],{"class":51,"line":16848},[49,92731,92732],{"class":283},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[49,92734,92735,92737,92739,92741,92744],{"class":51,"line":16853},[49,92736,74772],{"class":55},[49,92738,71743],{"class":2055},[49,92740,228],{"class":55},[49,92742,92743],{"class":328},"'currentTime'",[49,92745,92746],{"class":55},", video.currentTime)\n",[49,92748,92749,92751,92753],{"class":51,"line":16859},[49,92750,54624],{"class":55},[49,92752,6500],{"class":66},[49,92754,81],{"class":55},[49,92756,92757],{"class":51,"line":16873},[49,92758,92759],{"class":283},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[49,92761,92762,92765,92768,92770,92773,92775],{"class":51,"line":16886},[49,92763,92764],{"class":55},"    video.",[49,92766,92767],{"class":2055},"onloadeddata",[49,92769,13654],{"class":59},[49,92771,92772],{"class":55}," () ",[49,92774,84811],{"class":59},[49,92776,15662],{"class":55},[49,92778,92779],{"class":51,"line":16891},[49,92780,60101],{"class":283},[49,92782,92783],{"class":51,"line":16905},[49,92784,92785],{"class":283},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[49,92787,92788,92791,92793,92796,92798,92800,92802,92804,92806],{"class":51,"line":16910},[49,92789,92790],{"class":55},"      video.currentTime ",[49,92792,60],{"class":59},[49,92794,92795],{"class":55}," localStorage.",[49,92797,71774],{"class":2055},[49,92799,228],{"class":55},[49,92801,92743],{"class":328},[49,92803,13804],{"class":55},[49,92805,71446],{"class":59},[49,92807,47422],{"class":66},[49,92809,92810],{"class":51,"line":16916},[49,92811,2279],{"class":55},[49,92813,92814,92816,92818],{"class":51,"line":16921},[49,92815,52506],{"class":55},[49,92817,51902],{"class":51389},[49,92819,51396],{"class":55},[49,92821,92822,92824,92826],{"class":51,"line":16935},[49,92823,51874],{"class":55},[49,92825,51889],{"class":51389},[49,92827,51396],{"class":55},[49,92829,92830],{"class":51,"line":16940},[49,92831,2492],{"emptyLinePlaceholder":151},[49,92833,92834,92836,92838],{"class":51,"line":16945},[49,92835,51874],{"class":55},[49,92837,50724],{"class":51389},[49,92839,51396],{"class":55},[143,92841,92842],{},"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":44,"searchDepth":84,"depth":84,"links":92844},[92845,92850,92854,92855,92856,92861,92866,92867,92868,92869,92876,92881,92882,92892,92896,92897,92901],{"id":76780,"depth":84,"text":76781,"children":92846},[92847,92848,92849],{"id":76784,"depth":109,"text":76785},{"id":76809,"depth":109,"text":76810},{"id":76821,"depth":109,"text":76822},{"id":76833,"depth":84,"text":76834,"children":92851},[92852,92853],{"id":76837,"depth":109,"text":76838},{"id":76852,"depth":109,"text":76853},{"id":76904,"depth":84,"text":76905},{"id":76948,"depth":84,"text":76949},{"id":76965,"depth":84,"text":76966,"children":92857},[92858,92859,92860],{"id":76969,"depth":109,"text":76970},{"id":76982,"depth":109,"text":76983},{"id":77087,"depth":109,"text":77088},{"id":77376,"depth":84,"text":77377,"children":92862},[92863,92864,92865],{"id":77380,"depth":109,"text":77381},{"id":77823,"depth":109,"text":77824},{"id":78234,"depth":109,"text":78235},{"id":78297,"depth":84,"text":78298},{"id":78376,"depth":84,"text":78377},{"id":78469,"depth":84,"text":78470},{"id":80314,"depth":84,"text":80315,"children":92870},[92871,92872,92873,92874,92875],{"id":80318,"depth":109,"text":80319},{"id":80330,"depth":109,"text":80331},{"id":80549,"depth":109,"text":80550},{"id":80567,"depth":109,"text":80568},{"id":80627,"depth":109,"text":80628},{"id":84895,"depth":84,"text":84896,"children":92877},[92878,92879,92880],{"id":84899,"depth":109,"text":84900},{"id":84917,"depth":109,"text":84918},{"id":84943,"depth":109,"text":84944},{"id":84952,"depth":84,"text":84953},{"id":84974,"depth":84,"text":84975,"children":92883},[92884,92885,92886,92887,92888,92889,92890,92891],{"id":84978,"depth":109,"text":84979},{"id":85239,"depth":109,"text":85240},{"id":85425,"depth":109,"text":85426},{"id":85792,"depth":109,"text":85793},{"id":85908,"depth":109,"text":85909},{"id":85944,"depth":109,"text":85945},{"id":85991,"depth":109,"text":85992},{"id":86025,"depth":109,"text":86026},{"id":87388,"depth":84,"text":87389,"children":92893},[92894,92895],{"id":87392,"depth":109,"text":87393},{"id":87429,"depth":109,"text":87430},{"id":88784,"depth":84,"text":88785},{"id":89155,"depth":84,"text":89156,"children":92898},[92899,92900],{"id":89159,"depth":109,"text":89160},{"id":89193,"depth":109,"text":89194},{"id":89922,"depth":84,"text":89923,"children":92902},[92903,92904,92905,92906],{"id":89926,"depth":109,"text":89927},{"id":90884,"depth":109,"text":90885},{"id":91826,"depth":109,"text":91827},{"id":91900,"depth":109,"text":91901},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76769,"description":148},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92913,"title":92914,"body":92915,"description":92926,"extension":149,"meta":92927,"navigation":151,"path":92929,"seo":92930,"stem":92931,"__hash__":92932},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92916,"toc":92924},[92917],[14,92918,92919,92920],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[56,92921,92922],{"href":92922,"rel":92923},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23955],{"title":44,"searchDepth":84,"depth":84,"links":92925},[],"三件套第三套学习",{"category":92928},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92914,"description":92926},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92934,"title":92935,"body":92936,"description":148,"extension":149,"meta":93041,"navigation":151,"path":93042,"seo":93043,"stem":93044,"__hash__":93045},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92937,"toc":93036},[92938,92945,92948,92951,92954,92958,92967,92970,92973,92977,92986,92989,92993,92996,93016,93019,93033],[14,92939,92940],{},[56,92941,92944],{"href":92942,"rel":92943},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23955],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92946,92935],{"id":92947},"_1安装",[14,92949,92950],{},"numpy是科学计算基础库,底层是C语言",[14,92952,92953],{},"三种方式：",[166,92955,92957],{"id":92956},"_11-通过pip安装","1.1 通过pip安装",[39,92959,92961],{"className":41,"code":92960,"language":43,"meta":44,"style":44},"pip install numpy\n",[46,92962,92963],{"__ignoreMap":44},[49,92964,92965],{"class":51,"line":52},[49,92966,92960],{"class":55},[14,92968,92969],{},"首选方式，自动处理依赖项",[14,92971,92972],{},"在提示系统命令符中使用cmd",[166,92974,92976],{"id":92975},"_12-通过anaconda安装","1.2 通过Anaconda安装",[39,92978,92980],{"className":41,"code":92979,"language":43,"meta":44,"style":44},"conda install numpy\n",[46,92981,92982],{"__ignoreMap":44},[49,92983,92984],{"class":51,"line":52},[49,92985,92979],{"class":55},[14,92987,92988],{},"自动解决环境依赖",[166,92990,92992],{"id":92991},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92994,92995],{},"对于Debian\u002FUbuntu",[39,92997,92999],{"className":41,"code":92998,"language":43,"meta":44,"style":44},"sudo apt-get install python3-numpy\n",[46,93000,93001],{"__ignoreMap":44},[49,93002,93003,93006,93008,93011,93013],{"class":51,"line":52},[49,93004,93005],{"class":55},"sudo apt",[49,93007,751],{"class":59},[49,93009,93010],{"class":55},"get install python3",[49,93012,751],{"class":59},[49,93014,93015],{"class":55},"numpy\n",[14,93017,93018],{},"对于Fedora:",[39,93020,93022],{"className":41,"code":93021,"language":43,"meta":44,"style":44},"sudo dnf install python3-numpy\n",[46,93023,93024],{"__ignoreMap":44},[49,93025,93026,93029,93031],{"class":51,"line":52},[49,93027,93028],{"class":55},"sudo dnf install python3",[49,93030,751],{"class":59},[49,93032,93015],{"class":55},[143,93034,93035],{},"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":44,"searchDepth":84,"depth":84,"links":93037},[93038,93039,93040],{"id":92956,"depth":84,"text":92957},{"id":92975,"depth":84,"text":92976},{"id":92991,"depth":84,"text":92992},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92935,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":4,"title":5,"body":93047,"description":148,"extension":149,"meta":93139,"navigation":151,"path":152,"seo":93140,"stem":154,"__hash__":155},{"type":7,"value":93048,"toc":93137},[93049,93051,93053,93055,93057,93059,93061,93063,93065,93067,93133,93135],[10,93050,5],{"id":12},[14,93052,16],{},[14,93054,19],{},[14,93056,22],{},[14,93058,25],{},[14,93060,28],{},[14,93062,31],{},[14,93064,34],{},[14,93066,37],{},[39,93068,93069],{"className":41,"code":42,"language":43,"meta":44,"style":44},[46,93070,93071,93091,93111,93119,93129],{"__ignoreMap":44},[49,93072,93073,93075,93077,93079,93081,93083,93085,93087,93089],{"class":51,"line":52},[49,93074,56],{"class":55},[49,93076,60],{"class":59},[49,93078,63],{"class":55},[49,93080,67],{"class":66},[49,93082,70],{"class":55},[49,93084,73],{"class":66},[49,93086,76],{"class":55},[49,93088,73],{"class":66},[49,93090,81],{"class":55},[49,93092,93093,93095,93097,93099,93101,93103,93105,93107,93109],{"class":51,"line":84},[49,93094,87],{"class":55},[49,93096,60],{"class":59},[49,93098,92],{"class":55},[49,93100,95],{"class":66},[49,93102,76],{"class":55},[49,93104,95],{"class":66},[49,93106,76],{"class":55},[49,93108,95],{"class":66},[49,93110,106],{"class":55},[49,93112,93113,93115,93117],{"class":51,"line":109},[49,93114,112],{"class":55},[49,93116,60],{"class":59},[49,93118,117],{"class":55},[49,93120,93121,93123,93125,93127],{"class":51,"line":120},[49,93122,123],{"class":55},[49,93124,127],{"class":126},[49,93126,60],{"class":59},[49,93128,132],{"class":55},[49,93130,93131],{"class":51,"line":135},[49,93132,138],{"class":55},[14,93134,141],{},[143,93136,145],{},{"title":44,"searchDepth":84,"depth":84,"links":93138},[],{},{"title":5,"description":148},{"id":93142,"title":93143,"body":93144,"description":148,"extension":149,"meta":93906,"navigation":151,"path":93907,"seo":93908,"stem":93909,"__hash__":93910},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93145,"toc":93893},[93146,93149,93152,93155,93159,93198,93202,93246,93306,93310,93313,93352,93355,93400,93404,93440,93444,93513,93517,93581,93585,93588,93591,93594,93597,93633,93637,93677,93681,93753,93756,93760,93823,93827,93890],[10,93147,93143],{"id":93148},"_11统计函数",[14,93150,93151],{},"sum max min mean",[14,93153,93154],{},"这些有axis参数，可以指定方向",[166,93156,93158],{"id":93157},"_111-sum求和函数","11.1 sum()求和函数",[39,93160,93162],{"className":41,"code":93161,"language":43,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[46,93163,93164,93169,93190],{"__ignoreMap":44},[49,93165,93166],{"class":51,"line":52},[49,93167,93168],{"class":283},"#创建一维数组\n",[49,93170,93171,93173,93175,93178,93180,93182,93184,93186,93188],{"class":51,"line":84},[49,93172,56],{"class":55},[49,93174,60],{"class":59},[49,93176,93177],{"class":55},"np.random.randint(",[49,93179,441],{"class":66},[49,93181,76],{"class":55},[49,93183,533],{"class":66},[49,93185,76],{"class":55},[49,93187,919],{"class":66},[49,93189,81],{"class":55},[49,93191,93192,93195],{"class":51,"line":109},[49,93193,93194],{"class":55},"np.sum(a)",[49,93196,93197],{"class":283},"#求和\n",[166,93199,93201],{"id":93200},"_112-max求最大值函数","11.2 max()求最大值函数",[39,93203,93205],{"className":41,"code":93204,"language":43,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[46,93206,93207,93211,93231,93236,93241],{"__ignoreMap":44},[49,93208,93209],{"class":51,"line":52},[49,93210,93168],{"class":283},[49,93212,93213,93215,93217,93219,93221,93223,93225,93227,93229],{"class":51,"line":84},[49,93214,56],{"class":55},[49,93216,60],{"class":59},[49,93218,93177],{"class":55},[49,93220,441],{"class":66},[49,93222,76],{"class":55},[49,93224,533],{"class":66},[49,93226,76],{"class":55},[49,93228,919],{"class":66},[49,93230,81],{"class":55},[49,93232,93233],{"class":51,"line":109},[49,93234,93235],{"class":55},"np.max(a)\n",[49,93237,93238],{"class":51,"line":120},[49,93239,93240],{"class":283},"#最大索引(求最大元素的索引)arg\n",[49,93242,93243],{"class":51,"line":135},[49,93244,93245],{"class":55},"np.argmax(a)\n",[39,93247,93249],{"className":41,"code":93248,"language":43,"meta":44,"style":44},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[46,93250,93251,93272,93292,93296],{"__ignoreMap":44},[49,93252,93253,93255,93257,93260,93262,93264,93266,93268,93270],{"class":51,"line":52},[49,93254,11009],{"class":55},[49,93256,60],{"class":59},[49,93258,93259],{"class":55}," np.array([",[49,93261,441],{"class":66},[49,93263,12525],{"class":55},[49,93265,541],{"class":66},[49,93267,12525],{"class":55},[49,93269,73],{"class":66},[49,93271,106],{"class":55},[49,93273,93274,93276,93278,93280,93282,93284,93286,93288,93290],{"class":51,"line":84},[49,93275,11035],{"class":55},[49,93277,60],{"class":59},[49,93279,93259],{"class":55},[49,93281,73],{"class":66},[49,93283,12525],{"class":55},[49,93285,301],{"class":66},[49,93287,12525],{"class":55},[49,93289,515],{"class":66},[49,93291,106],{"class":55},[49,93293,93294],{"class":51,"line":109},[49,93295,2492],{"emptyLinePlaceholder":151},[49,93297,93298,93300,93303],{"class":51,"line":120},[49,93299,30504],{"class":66},[49,93301,93302],{"class":55},"(np.maximum(a, b))   ",[49,93304,93305],{"class":283},"# [3 5 4]，每个位置上取较大值\n",[166,93307,93309],{"id":93308},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93311,93312],{},"①一维数组：",[39,93314,93316],{"className":41,"code":93315,"language":43,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[46,93317,93318,93322,93342,93347],{"__ignoreMap":44},[49,93319,93320],{"class":51,"line":52},[49,93321,93168],{"class":283},[49,93323,93324,93326,93328,93330,93332,93334,93336,93338,93340],{"class":51,"line":84},[49,93325,56],{"class":55},[49,93327,60],{"class":59},[49,93329,93177],{"class":55},[49,93331,441],{"class":66},[49,93333,76],{"class":55},[49,93335,533],{"class":66},[49,93337,76],{"class":55},[49,93339,919],{"class":66},[49,93341,81],{"class":55},[49,93343,93344],{"class":51,"line":109},[49,93345,93346],{"class":283},"#求平均值\n",[49,93348,93349],{"class":51,"line":120},[49,93350,93351],{"class":55},"np.mean(a)\n",[14,93353,93354],{},"②二维数组",[39,93356,93358],{"className":41,"code":93357,"language":43,"meta":44,"style":44},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[46,93359,93360,93365,93390,93395],{"__ignoreMap":44},[49,93361,93362],{"class":51,"line":52},[49,93363,93364],{"class":283},"#二维数组\n",[49,93366,93367,93370,93372,93374,93376,93378,93380,93382,93384,93386,93388],{"class":51,"line":84},[49,93368,93369],{"class":55},"aa",[49,93371,60],{"class":59},[49,93373,63],{"class":55},[49,93375,441],{"class":66},[49,93377,76],{"class":55},[49,93379,742],{"class":66},[49,93381,70],{"class":55},[49,93383,73],{"class":66},[49,93385,76],{"class":55},[49,93387,515],{"class":66},[49,93389,81],{"class":55},[49,93391,93392],{"class":51,"line":109},[49,93393,93394],{"class":283},"#对数组中的所有数求平均\n",[49,93396,93397],{"class":51,"line":120},[49,93398,93399],{"class":55},"np.mean(aa)\n",[166,93401,93403],{"id":93402},"_114-median求中位数函数","11.4 median()求中位数函数",[39,93405,93407],{"className":41,"code":93406,"language":43,"meta":44,"style":44},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[46,93408,93409,93414,93430,93435],{"__ignoreMap":44},[49,93410,93411],{"class":51,"line":52},[49,93412,93413],{"class":283},"#求中位数\n",[49,93415,93416,93418,93420,93422,93424,93426,93428],{"class":51,"line":84},[49,93417,87],{"class":55},[49,93419,60],{"class":59},[49,93421,63],{"class":55},[49,93423,441],{"class":66},[49,93425,76],{"class":55},[49,93427,95],{"class":66},[49,93429,81],{"class":55},[49,93431,93432],{"class":51,"line":109},[49,93433,93434],{"class":55},"np.median(b)\n",[49,93436,93437],{"class":51,"line":120},[49,93438,93439],{"class":283},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[166,93441,93443],{"id":93442},"_115-power求幂运算函数","11.5 power()求幂运算函数",[39,93445,93447],{"className":41,"code":93446,"language":43,"meta":44,"style":44},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[46,93448,93449,93465,93470,93475,93484,93489,93498],{"__ignoreMap":44},[49,93450,93451,93453,93455,93457,93459,93461,93463],{"class":51,"line":52},[49,93452,87],{"class":55},[49,93454,60],{"class":59},[49,93456,63],{"class":55},[49,93458,441],{"class":66},[49,93460,76],{"class":55},[49,93462,95],{"class":66},[49,93464,81],{"class":55},[49,93466,93467],{"class":51,"line":84},[49,93468,93469],{"class":283},"#幂运算\n",[49,93471,93472],{"class":51,"line":109},[49,93473,93474],{"class":283},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[49,93476,93477,93480,93482],{"class":51,"line":120},[49,93478,93479],{"class":55},"np.power(b,",[49,93481,301],{"class":66},[49,93483,81],{"class":55},[49,93485,93486],{"class":51,"line":135},[49,93487,93488],{"class":283},"#或者以下代码，将数据存储起来\n",[49,93490,93491,93493,93495],{"class":51,"line":1306},[49,93492,1064],{"class":55},[49,93494,60],{"class":59},[49,93496,93497],{"class":55},"np.empty_like(b)\n",[49,93499,93500,93502,93504,93506,93508,93510],{"class":51,"line":1312},[49,93501,93479],{"class":55},[49,93503,301],{"class":66},[49,93505,76],{"class":55},[49,93507,127],{"class":126},[49,93509,60],{"class":59},[49,93511,93512],{"class":55},"y)\n",[166,93514,93516],{"id":93515},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[39,93518,93520],{"className":41,"code":93519,"language":43,"meta":44,"style":44},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[46,93521,93522,93538,93543,93548,93552,93570],{"__ignoreMap":44},[49,93523,93524,93526,93528,93530,93532,93534,93536],{"class":51,"line":52},[49,93525,87],{"class":55},[49,93527,60],{"class":59},[49,93529,63],{"class":55},[49,93531,441],{"class":66},[49,93533,76],{"class":55},[49,93535,95],{"class":66},[49,93537,81],{"class":55},[49,93539,93540],{"class":51,"line":84},[49,93541,93542],{"class":283},"#开方\n",[49,93544,93545],{"class":51,"line":109},[49,93546,93547],{"class":55},"np.sqrt(b)\n",[49,93549,93550],{"class":51,"line":120},[49,93551,93488],{"class":283},[49,93553,93554,93556,93558,93561,93564,93566,93568],{"class":51,"line":135},[49,93555,1064],{"class":55},[49,93557,60],{"class":59},[49,93559,93560],{"class":55},"np.empty_like(b,",[49,93562,93563],{"class":126},"dtype",[49,93565,60],{"class":59},[49,93567,266],{"class":66},[49,93569,81],{"class":55},[49,93571,93572,93575,93577,93579],{"class":51,"line":1306},[49,93573,93574],{"class":55},"np.sqrt(b,",[49,93576,127],{"class":126},[49,93578,60],{"class":59},[49,93580,93512],{"class":55},[166,93582,93584],{"id":93583},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93586,93587],{},"对数组中的元素累计求和，可指定轴",[14,93589,93590],{},"#累计求和的意思是：",[14,93592,93593],{},"a = np.array([1, 2, 3, 4])",[14,93595,93596],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[39,93598,93600],{"className":41,"code":93599,"language":43,"meta":44,"style":44},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[46,93601,93602,93618,93623,93628],{"__ignoreMap":44},[49,93603,93604,93606,93608,93610,93612,93614,93616],{"class":51,"line":52},[49,93605,87],{"class":55},[49,93607,60],{"class":59},[49,93609,63],{"class":55},[49,93611,441],{"class":66},[49,93613,76],{"class":55},[49,93615,95],{"class":66},[49,93617,81],{"class":55},[49,93619,93620],{"class":51,"line":84},[49,93621,93622],{"class":55},"np.cumsum(b)\n",[49,93624,93625],{"class":51,"line":109},[49,93626,93627],{"class":283},"#结果：\n",[49,93629,93630],{"class":51,"line":120},[49,93631,93632],{"class":283},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[166,93634,93636],{"id":93635},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[39,93638,93640],{"className":41,"code":93639,"language":43,"meta":44,"style":44},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[46,93641,93642,93658,93663,93668,93672],{"__ignoreMap":44},[49,93643,93644,93646,93648,93650,93652,93654,93656],{"class":51,"line":52},[49,93645,87],{"class":55},[49,93647,60],{"class":59},[49,93649,63],{"class":55},[49,93651,441],{"class":66},[49,93653,76],{"class":55},[49,93655,95],{"class":66},[49,93657,81],{"class":55},[49,93659,93660],{"class":51,"line":84},[49,93661,93662],{"class":283},"#对数组中的元素累计求积，可指定轴\n",[49,93664,93665],{"class":51,"line":109},[49,93666,93667],{"class":55},"np.cumprod(b)\n",[49,93669,93670],{"class":51,"line":120},[49,93671,93627],{"class":283},[49,93673,93674],{"class":51,"line":135},[49,93675,93676],{"class":283},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[166,93678,93680],{"id":93679},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[39,93682,93684],{"className":41,"code":93683,"language":43,"meta":44,"style":44},"#删除数组中的重复数据，并对数据进行排序\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",[46,93685,93686,93691,93739,93744,93748],{"__ignoreMap":44},[49,93687,93688],{"class":51,"line":52},[49,93689,93690],{"class":283},"#删除数组中的重复数据，并对数据进行排序\n",[49,93692,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737],{"class":51,"line":84},[49,93694,56],{"class":55},[49,93696,60],{"class":59},[49,93698,92],{"class":55},[49,93700,441],{"class":66},[49,93702,76],{"class":55},[49,93704,301],{"class":66},[49,93706,76],{"class":55},[49,93708,73],{"class":66},[49,93710,76],{"class":55},[49,93712,717],{"class":66},[49,93714,76],{"class":55},[49,93716,73],{"class":66},[49,93718,76],{"class":55},[49,93720,95],{"class":66},[49,93722,76],{"class":55},[49,93724,421],{"class":66},[49,93726,76],{"class":55},[49,93728,415],{"class":66},[49,93730,76],{"class":55},[49,93732,994],{"class":66},[49,93734,76],{"class":55},[49,93736,515],{"class":66},[49,93738,106],{"class":55},[49,93740,93741],{"class":51,"line":109},[49,93742,93743],{"class":55},"np.unique(a)\n",[49,93745,93746],{"class":51,"line":120},[49,93747,93627],{"class":283},[49,93749,93750],{"class":51,"line":135},[49,93751,93752],{"class":283},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93754,93755],{},"升序形式排序",[166,93757,93759],{"id":93758},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[39,93761,93763],{"className":41,"code":93762,"language":43,"meta":44,"style":44},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[46,93764,93765,93813,93818],{"__ignoreMap":44},[49,93766,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809,93811],{"class":51,"line":52},[49,93768,56],{"class":55},[49,93770,60],{"class":59},[49,93772,92],{"class":55},[49,93774,441],{"class":66},[49,93776,76],{"class":55},[49,93778,301],{"class":66},[49,93780,76],{"class":55},[49,93782,73],{"class":66},[49,93784,76],{"class":55},[49,93786,717],{"class":66},[49,93788,76],{"class":55},[49,93790,73],{"class":66},[49,93792,76],{"class":55},[49,93794,95],{"class":66},[49,93796,76],{"class":55},[49,93798,421],{"class":66},[49,93800,76],{"class":55},[49,93802,415],{"class":66},[49,93804,76],{"class":55},[49,93806,994],{"class":66},[49,93808,76],{"class":55},[49,93810,515],{"class":66},[49,93812,106],{"class":55},[49,93814,93815],{"class":51,"line":84},[49,93816,93817],{"class":283},"#返回数组中非零元素的索引\n",[49,93819,93820],{"class":51,"line":109},[49,93821,93822],{"class":55},"np.nonzero(a)\n",[166,93824,93826],{"id":93825},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[39,93828,93830],{"className":41,"code":93829,"language":43,"meta":44,"style":44},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[46,93831,93832,93880,93885],{"__ignoreMap":44},[49,93833,93834,93836,93838,93840,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866,93868,93870,93872,93874,93876,93878],{"class":51,"line":52},[49,93835,56],{"class":55},[49,93837,60],{"class":59},[49,93839,92],{"class":55},[49,93841,441],{"class":66},[49,93843,76],{"class":55},[49,93845,301],{"class":66},[49,93847,76],{"class":55},[49,93849,73],{"class":66},[49,93851,76],{"class":55},[49,93853,717],{"class":66},[49,93855,76],{"class":55},[49,93857,73],{"class":66},[49,93859,76],{"class":55},[49,93861,95],{"class":66},[49,93863,76],{"class":55},[49,93865,421],{"class":66},[49,93867,76],{"class":55},[49,93869,415],{"class":66},[49,93871,76],{"class":55},[49,93873,994],{"class":66},[49,93875,76],{"class":55},[49,93877,515],{"class":66},[49,93879,106],{"class":55},[49,93881,93882],{"class":51,"line":84},[49,93883,93884],{"class":283},"#计算一组数中最大值与最小值的差，可指定轴\n",[49,93886,93887],{"class":51,"line":109},[49,93888,93889],{"class":55},"np.ptp(a)\n",[143,93891,93892],{},"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":44,"searchDepth":84,"depth":84,"links":93894},[93895,93896,93897,93898,93899,93900,93901,93902,93903,93904,93905],{"id":93157,"depth":84,"text":93158},{"id":93200,"depth":84,"text":93201},{"id":93308,"depth":84,"text":93309},{"id":93402,"depth":84,"text":93403},{"id":93442,"depth":84,"text":93443},{"id":93515,"depth":84,"text":93516},{"id":93583,"depth":84,"text":93584},{"id":93635,"depth":84,"text":93636},{"id":93679,"depth":84,"text":93680},{"id":93758,"depth":84,"text":93759},{"id":93825,"depth":84,"text":93826},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93143,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93912,"title":93913,"body":93914,"description":148,"extension":149,"meta":94569,"navigation":151,"path":94570,"seo":94571,"stem":94572,"__hash__":94573},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93915,"toc":94557},[93916,93919,93923,93926,94142,94146,94149,94358,94362,94428,94433,94437,94440,94443,94481,94485,94488,94493,94497,94500,94503,94508,94512,94515,94519,94522,94525,94530,94534,94537,94540,94545,94549,94554],[10,93917,93913],{"id":93918},"_12其他常用函数",[166,93920,93922],{"id":93921},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93924,93925],{},"将数组的数据按照行列复制扩展",[39,93927,93929],{"className":41,"code":93928,"language":43,"meta":44,"style":44},"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",[46,93930,93931,93947,93956,93960,93965,93970,93983,93987,93992,93997,94002,94006,94011,94035,94047,94051,94055,94060,94065,94070,94075,94079,94092,94096,94100,94105,94110,94115,94120,94125,94129,94133,94138],{"__ignoreMap":44},[49,93932,93933,93935,93937,93939,93941,93943,93945],{"class":51,"line":52},[49,93934,56],{"class":55},[49,93936,60],{"class":59},[49,93938,63],{"class":55},[49,93940,441],{"class":66},[49,93942,76],{"class":55},[49,93944,541],{"class":66},[49,93946,81],{"class":55},[49,93948,93949,93952,93954],{"class":51,"line":84},[49,93950,93951],{"class":55},"np.tile(a,",[49,93953,301],{"class":66},[49,93955,81],{"class":55},[49,93957,93958],{"class":51,"line":109},[49,93959,93627],{"class":283},[49,93961,93962],{"class":51,"line":120},[49,93963,93964],{"class":283},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[49,93966,93967],{"class":51,"line":135},[49,93968,93969],{"class":283},"#行复制两次，列复制三次\n",[49,93971,93972,93975,93977,93979,93981],{"class":51,"line":1306},[49,93973,93974],{"class":55},"np.tile(a,(",[49,93976,301],{"class":66},[49,93978,76],{"class":55},[49,93980,73],{"class":66},[49,93982,30586],{"class":55},[49,93984,93985],{"class":51,"line":1312},[49,93986,93627],{"class":283},[49,93988,93989],{"class":51,"line":1403},[49,93990,93991],{"class":328},"'''\n",[49,93993,93994],{"class":51,"line":1409},[49,93995,93996],{"class":328},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[49,93998,93999],{"class":51,"line":1421},[49,94000,94001],{"class":328},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[49,94003,94004],{"class":51,"line":1704},[49,94005,93991],{"class":328},[49,94007,94008],{"class":51,"line":1709},[49,94009,94010],{"class":283},"#创建二维数组\n",[49,94012,94013,94015,94017,94019,94021,94023,94025,94027,94029,94031,94033],{"class":51,"line":1715},[49,94014,93369],{"class":55},[49,94016,60],{"class":59},[49,94018,63],{"class":55},[49,94020,441],{"class":66},[49,94022,76],{"class":55},[49,94024,742],{"class":66},[49,94026,70],{"class":55},[49,94028,515],{"class":66},[49,94030,76],{"class":55},[49,94032,73],{"class":66},[49,94034,81],{"class":55},[49,94036,94037,94040,94042,94044],{"class":51,"line":1720},[49,94038,94039],{"class":55},"np.tile(aa,",[49,94041,301],{"class":66},[49,94043,649],{"class":55},[49,94045,94046],{"class":283},"#一个数的时候就是行\n",[49,94048,94049],{"class":51,"line":1734},[49,94050,93627],{"class":283},[49,94052,94053],{"class":51,"line":1739},[49,94054,93991],{"class":328},[49,94056,94057],{"class":51,"line":1745},[49,94058,94059],{"class":328},"array([[ 1,  2,  3,  1,  2,  3],\n",[49,94061,94062],{"class":51,"line":1766},[49,94063,94064],{"class":328},"       [ 4,  5,  6,  4,  5,  6],\n",[49,94066,94067],{"class":51,"line":1771},[49,94068,94069],{"class":328},"       [ 7,  8,  9,  7,  8,  9],\n",[49,94071,94072],{"class":51,"line":1785},[49,94073,94074],{"class":328},"       [10, 11, 12, 10, 11, 12]])\n",[49,94076,94077],{"class":51,"line":1790},[49,94078,93991],{"class":328},[49,94080,94081,94084,94086,94088,94090],{"class":51,"line":1819},[49,94082,94083],{"class":55},"np.tile(aa,(",[49,94085,301],{"class":66},[49,94087,76],{"class":55},[49,94089,73],{"class":66},[49,94091,30586],{"class":55},[49,94093,94094],{"class":51,"line":1824},[49,94095,93627],{"class":283},[49,94097,94098],{"class":51,"line":1841},[49,94099,93991],{"class":328},[49,94101,94102],{"class":51,"line":1846},[49,94103,94104],{"class":328},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,94106,94107],{"class":51,"line":1851},[49,94108,94109],{"class":328},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[49,94111,94112],{"class":51,"line":1856},[49,94113,94114],{"class":328},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[49,94116,94117],{"class":51,"line":1870},[49,94118,94119],{"class":328},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[49,94121,94122],{"class":51,"line":1875},[49,94123,94124],{"class":328},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,94126,94127],{"class":51,"line":2669},[49,94128,94109],{"class":328},[49,94130,94131],{"class":51,"line":2683},[49,94132,94114],{"class":328},[49,94134,94135],{"class":51,"line":2691},[49,94136,94137],{"class":328},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[49,94139,94140],{"class":51,"line":2696},[49,94141,93991],{"class":328},[166,94143,94145],{"id":94144},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94147,94148],{},"repeat()将数组中的每个元素重复若干次",[39,94150,94152],{"className":41,"code":94151,"language":43,"meta":44,"style":44},"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",[46,94153,94154,94170,94179,94183,94188,94212,94217,94226,94230,94235,94239,94244,94260,94264,94268,94273,94278,94283,94287,94292,94296,94301,94306,94310,94326,94330,94334,94339,94344,94349,94354],{"__ignoreMap":44},[49,94155,94156,94158,94160,94162,94164,94166,94168],{"class":51,"line":52},[49,94157,56],{"class":55},[49,94159,60],{"class":59},[49,94161,63],{"class":55},[49,94163,441],{"class":66},[49,94165,76],{"class":55},[49,94167,541],{"class":66},[49,94169,81],{"class":55},[49,94171,94172,94175,94177],{"class":51,"line":84},[49,94173,94174],{"class":55},"np.repeat(a,",[49,94176,73],{"class":66},[49,94178,81],{"class":55},[49,94180,94181],{"class":51,"line":109},[49,94182,93627],{"class":283},[49,94184,94185],{"class":51,"line":120},[49,94186,94187],{"class":283},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[49,94189,94190,94192,94194,94196,94198,94200,94202,94204,94206,94208,94210],{"class":51,"line":135},[49,94191,93369],{"class":55},[49,94193,60],{"class":59},[49,94195,63],{"class":55},[49,94197,441],{"class":66},[49,94199,76],{"class":55},[49,94201,742],{"class":66},[49,94203,70],{"class":55},[49,94205,515],{"class":66},[49,94207,76],{"class":55},[49,94209,73],{"class":66},[49,94211,81],{"class":55},[49,94213,94214],{"class":51,"line":1306},[49,94215,94216],{"class":283},"#这个重复之后二维变成一维\n",[49,94218,94219,94222,94224],{"class":51,"line":1312},[49,94220,94221],{"class":55},"np.repeat(aa,",[49,94223,301],{"class":66},[49,94225,81],{"class":55},[49,94227,94228],{"class":51,"line":1403},[49,94229,93991],{"class":328},[49,94231,94232],{"class":51,"line":1409},[49,94233,94234],{"class":328},"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",[49,94236,94237],{"class":51,"line":1421},[49,94238,93991],{"class":328},[49,94240,94241],{"class":51,"line":1704},[49,94242,94243],{"class":283},"#指定axis\n",[49,94245,94246,94248,94250,94252,94254,94256,94258],{"class":51,"line":1709},[49,94247,94221],{"class":55},[49,94249,301],{"class":66},[49,94251,76],{"class":55},[49,94253,47603],{"class":126},[49,94255,60],{"class":59},[49,94257,415],{"class":66},[49,94259,81],{"class":55},[49,94261,94262],{"class":51,"line":1715},[49,94263,93627],{"class":283},[49,94265,94266],{"class":51,"line":1720},[49,94267,93991],{"class":328},[49,94269,94270],{"class":51,"line":1734},[49,94271,94272],{"class":328},"array([[ 1,  2,  3],\n",[49,94274,94275],{"class":51,"line":1739},[49,94276,94277],{"class":328},"       [ 1,  2,  3],\n",[49,94279,94280],{"class":51,"line":1745},[49,94281,94282],{"class":328},"       [ 4,  5,  6],\n",[49,94284,94285],{"class":51,"line":1766},[49,94286,94282],{"class":328},[49,94288,94289],{"class":51,"line":1771},[49,94290,94291],{"class":328},"       [ 7,  8,  9],\n",[49,94293,94294],{"class":51,"line":1785},[49,94295,94291],{"class":328},[49,94297,94298],{"class":51,"line":1790},[49,94299,94300],{"class":328},"       [10, 11, 12],\n",[49,94302,94303],{"class":51,"line":1819},[49,94304,94305],{"class":328},"       [10, 11, 12]])\n",[49,94307,94308],{"class":51,"line":1824},[49,94309,93991],{"class":328},[49,94311,94312,94314,94316,94318,94320,94322,94324],{"class":51,"line":1841},[49,94313,94221],{"class":55},[49,94315,301],{"class":66},[49,94317,76],{"class":55},[49,94319,47603],{"class":126},[49,94321,60],{"class":59},[49,94323,441],{"class":66},[49,94325,81],{"class":55},[49,94327,94328],{"class":51,"line":1846},[49,94329,93627],{"class":283},[49,94331,94332],{"class":51,"line":1851},[49,94333,93991],{"class":328},[49,94335,94336],{"class":51,"line":1856},[49,94337,94338],{"class":328},"array([[ 1,  1,  2,  2,  3,  3],\n",[49,94340,94341],{"class":51,"line":1870},[49,94342,94343],{"class":328},"       [ 4,  4,  5,  5,  6,  6],\n",[49,94345,94346],{"class":51,"line":1875},[49,94347,94348],{"class":328},"       [ 7,  7,  8,  8,  9,  9],\n",[49,94350,94351],{"class":51,"line":2669},[49,94352,94353],{"class":328},"       [10, 10, 11, 11, 12, 12]])\n",[49,94355,94356],{"class":51,"line":2683},[49,94357,93991],{"class":328},[166,94359,94361],{"id":94360},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[39,94363,94365],{"className":41,"code":94364,"language":43,"meta":44,"style":44},"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",[46,94366,94367,94383,94388,94400,94404,94409,94419,94423],{"__ignoreMap":44},[49,94368,94369,94371,94373,94375,94377,94379,94381],{"class":51,"line":52},[49,94370,56],{"class":55},[49,94372,60],{"class":59},[49,94374,63],{"class":55},[49,94376,441],{"class":66},[49,94378,76],{"class":55},[49,94380,541],{"class":66},[49,94382,81],{"class":55},[49,94384,94385],{"class":51,"line":84},[49,94386,94387],{"class":283},"#array([，2，3，4])\n",[49,94389,94390,94393,94395,94397],{"class":51,"line":109},[49,94391,94392],{"class":55},"np.roll(a,",[49,94394,301],{"class":66},[49,94396,649],{"class":55},[49,94398,94399],{"class":283},"#传正数向后调多少位，传负数向前调多少位\n",[49,94401,94402],{"class":51,"line":120},[49,94403,93627],{"class":283},[49,94405,94406],{"class":51,"line":135},[49,94407,94408],{"class":283},"#array([3, 4, 1, 2])\n",[49,94410,94411,94413,94415,94417],{"class":51,"line":1306},[49,94412,94392],{"class":55},[49,94414,751],{"class":59},[49,94416,441],{"class":66},[49,94418,81],{"class":55},[49,94420,94421],{"class":51,"line":1312},[49,94422,93627],{"class":283},[49,94424,94425],{"class":51,"line":1403},[49,94426,94427],{"class":283},"#array([2, 3, 4, 1])\n",[14,94429,94430],{},[1554,94431],{"alt":44,"src":94432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[166,94434,94436],{"id":94435},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94438,94439],{},"resize()重新调整数组的大小",[14,94441,94442],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[39,94444,94446],{"className":41,"code":94445,"language":43,"meta":44,"style":44},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[46,94447,94448,94453,94466],{"__ignoreMap":44},[49,94449,94450],{"class":51,"line":52},[49,94451,94452],{"class":283},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[49,94454,94455,94458,94460,94462,94464],{"class":51,"line":84},[49,94456,94457],{"class":55},"np.resize(aa,(",[49,94459,301],{"class":66},[49,94461,76],{"class":55},[49,94463,566],{"class":66},[49,94465,30586],{"class":55},[49,94467,94468,94470,94472,94474,94476,94478],{"class":51,"line":109},[49,94469,94457],{"class":55},[49,94471,301],{"class":66},[49,94473,76],{"class":55},[49,94475,67],{"class":66},[49,94477,82860],{"class":55},[49,94479,94480],{"class":283},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[166,94482,94484],{"id":94483},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94486,94487],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94489,94490],{},[1554,94491],{"alt":44,"src":94492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[166,94494,94496],{"id":94495},"_126-保存加载文件","12.6 保存加载文件",[14,94498,94499],{},"savetxt():将数据保存到txt文件中",[14,94501,94502],{},"loadtxt():从文件加载数据",[14,94504,94505],{},[1554,94506],{"alt":44,"src":94507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[166,94509,94511],{"id":94510},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94513,94514],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[166,94516,94518],{"id":94517},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94520,94521],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94523,94524],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94526,94527],{},[1554,94528],{"alt":44,"src":94529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[166,94531,94533],{"id":94532},"_129-where语句","12.9 where语句",[14,94535,94536],{},"np.where(条件,x,y)",[14,94538,94539],{},"如果条件为True,对应值为x,否则对应值为y",[14,94541,94542],{},[1554,94543],{"alt":44,"src":94544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[166,94546,94548],{"id":94547},"_1210-dot矩阵","12.10 dot()矩阵",[14,94550,94551],{},[1554,94552],{"alt":44,"src":94553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[143,94555,94556],{},"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":44,"searchDepth":84,"depth":84,"links":94558},[94559,94560,94561,94562,94563,94564,94565,94566,94567,94568],{"id":93921,"depth":84,"text":93922},{"id":94144,"depth":84,"text":94145},{"id":94360,"depth":84,"text":94361},{"id":94435,"depth":84,"text":94436},{"id":94483,"depth":84,"text":94484},{"id":94495,"depth":84,"text":94496},{"id":94510,"depth":84,"text":94511},{"id":94517,"depth":84,"text":94518},{"id":94532,"depth":84,"text":94533},{"id":94547,"depth":84,"text":94548},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93913,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94575,"title":94576,"body":94577,"description":148,"extension":149,"meta":94930,"navigation":151,"path":94931,"seo":94932,"stem":94933,"__hash__":94934},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94578,"toc":94928},[94579,94582,94585,94588,94591,94594,94659,94661,94925],[10,94580,94576],{"id":94581},"_13数组排序",[14,94583,94584],{},"排序主要用到的方法是np.sort和np.argsort",[14,94586,94587],{},"其中np.sort()对数组直接排序",[14,94589,94590],{},"而np.argsort()是返回排序后的原始索引",[14,94592,94593],{},"①一维数组",[39,94595,94597],{"className":41,"code":94596,"language":43,"meta":44,"style":44},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[46,94598,94599,94603,94643,94651],{"__ignoreMap":44},[49,94600,94601],{"class":51,"line":52},[49,94602,93168],{"class":283},[49,94604,94605,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629,94631,94633,94635,94637,94639,94641],{"class":51,"line":84},[49,94606,56],{"class":55},[49,94608,60],{"class":59},[49,94610,92],{"class":55},[49,94612,73],{"class":66},[49,94614,76],{"class":55},[49,94616,717],{"class":66},[49,94618,76],{"class":55},[49,94620,616],{"class":66},[49,94622,76],{"class":55},[49,94624,994],{"class":66},[49,94626,76],{"class":55},[49,94628,501],{"class":66},[49,94630,76],{"class":55},[49,94632,1112],{"class":66},[49,94634,76],{"class":55},[49,94636,566],{"class":66},[49,94638,76],{"class":55},[49,94640,95],{"class":66},[49,94642,106],{"class":55},[49,94644,94645,94648],{"class":51,"line":109},[49,94646,94647],{"class":55},"np.sort(a)",[49,94649,94650],{"class":283},"#升序排序\n",[49,94652,94653,94656],{"class":51,"line":120},[49,94654,94655],{"class":55},"np.argsort(a)",[49,94657,94658],{"class":283},"#按照元素大小来索引排序\n",[14,94660,93354],{},[39,94662,94664],{"className":41,"code":94663,"language":43,"meta":44,"style":44},"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",[46,94665,94666,94678,94704,94709,94713,94718,94723,94728,94733,94737,94745,94749,94754,94759,94764,94769,94773,94778,94791,94795,94800,94805,94810,94815,94819,94824,94836,94840,94844,94848,94852,94856,94860,94865,94880,94885,94894,94899,94903,94907,94912,94916,94921],{"__ignoreMap":44},[49,94667,94668,94671,94673,94675],{"class":51,"line":52},[49,94669,94670],{"class":55},"np.random.seed(",[49,94672,415],{"class":66},[49,94674,649],{"class":55},[49,94676,94677],{"class":283},"#保证每次值一样\n",[49,94679,94680,94682,94684,94686,94688,94690,94692,94694,94696,94698,94700,94702],{"class":51,"line":84},[49,94681,93369],{"class":55},[49,94683,60],{"class":59},[49,94685,93177],{"class":55},[49,94687,533],{"class":66},[49,94689,76],{"class":55},[49,94691,31585],{"class":126},[49,94693,60],{"class":59},[49,94695,228],{"class":55},[49,94697,515],{"class":66},[49,94699,76],{"class":55},[49,94701,566],{"class":66},[49,94703,30586],{"class":55},[49,94705,94706],{"class":51,"line":109},[49,94707,94708],{"class":283},"#原数组：\n",[49,94710,94711],{"class":51,"line":120},[49,94712,93991],{"class":328},[49,94714,94715],{"class":51,"line":135},[49,94716,94717],{"class":328},"array([[44, 47, 64, 67, 67,  9],\n",[49,94719,94720],{"class":51,"line":1306},[49,94721,94722],{"class":328},"       [83, 21, 36, 87, 70, 88],\n",[49,94724,94725],{"class":51,"line":1312},[49,94726,94727],{"class":328},"       [88, 12, 58, 65, 39, 87],\n",[49,94729,94730],{"class":51,"line":1403},[49,94731,94732],{"class":328},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[49,94734,94735],{"class":51,"line":1409},[49,94736,93991],{"class":328},[49,94738,94739,94742],{"class":51,"line":1421},[49,94740,94741],{"class":55},"np.sort(aa)",[49,94743,94744],{"class":283},"#每行进行了排序\n",[49,94746,94747],{"class":51,"line":1704},[49,94748,93991],{"class":328},[49,94750,94751],{"class":51,"line":1709},[49,94752,94753],{"class":328},"array([[ 9, 44, 47, 64, 67, 67],\n",[49,94755,94756],{"class":51,"line":1715},[49,94757,94758],{"class":328},"       [21, 36, 70, 83, 87, 88],\n",[49,94760,94761],{"class":51,"line":1720},[49,94762,94763],{"class":328},"       [12, 39, 58, 65, 87, 88],\n",[49,94765,94766],{"class":51,"line":1734},[49,94767,94768],{"class":328},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[49,94770,94771],{"class":51,"line":1739},[49,94772,93991],{"class":328},[49,94774,94775],{"class":51,"line":1745},[49,94776,94777],{"class":283},"#axis=0时\n",[49,94779,94780,94783,94785,94787,94789],{"class":51,"line":1766},[49,94781,94782],{"class":55},"np.sort(aa,",[49,94784,47603],{"class":126},[49,94786,60],{"class":59},[49,94788,415],{"class":66},[49,94790,81],{"class":55},[49,94792,94793],{"class":51,"line":1771},[49,94794,93991],{"class":328},[49,94796,94797],{"class":51,"line":1785},[49,94798,94799],{"class":328},"array([[44, 12, 36, 37, 25,  9],\n",[49,94801,94802],{"class":51,"line":1790},[49,94803,94804],{"class":328},"       [46, 21, 58, 65, 39, 77],\n",[49,94806,94807],{"class":51,"line":1819},[49,94808,94809],{"class":328},"       [83, 47, 64, 67, 67, 87],\n",[49,94811,94812],{"class":51,"line":1824},[49,94813,94814],{"class":328},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[49,94816,94817],{"class":51,"line":1841},[49,94818,93991],{"class":328},[49,94820,94821],{"class":51,"line":1846},[49,94822,94823],{"class":283},"#axis=1时,为默认值\n",[49,94825,94826,94828,94830,94832,94834],{"class":51,"line":1851},[49,94827,94782],{"class":55},[49,94829,47603],{"class":126},[49,94831,60],{"class":59},[49,94833,441],{"class":66},[49,94835,81],{"class":55},[49,94837,94838],{"class":51,"line":1856},[49,94839,93991],{"class":328},[49,94841,94842],{"class":51,"line":1870},[49,94843,94753],{"class":328},[49,94845,94846],{"class":51,"line":1875},[49,94847,94758],{"class":328},[49,94849,94850],{"class":51,"line":2669},[49,94851,94763],{"class":328},[49,94853,94854],{"class":51,"line":2683},[49,94855,94768],{"class":328},[49,94857,94858],{"class":51,"line":2691},[49,94859,93991],{"class":328},[49,94861,94862],{"class":51,"line":2696},[49,94863,94864],{"class":283},"#按最后一列排序\n",[49,94866,94867,94869,94871,94874,94876,94878],{"class":51,"line":2702},[49,94868,87],{"class":55},[49,94870,60],{"class":59},[49,94872,94873],{"class":55},"aa[:,",[49,94875,751],{"class":59},[49,94877,441],{"class":66},[49,94879,33335],{"class":55},[49,94881,94882],{"class":51,"line":2708},[49,94883,94884],{"class":283},"#获取最后一列排好序的索引\n",[49,94886,94887,94889,94891],{"class":51,"line":2713},[49,94888,74147],{"class":55},[49,94890,60],{"class":59},[49,94892,94893],{"class":55},"np.argsort(b)\n",[49,94895,94896],{"class":51,"line":8038},[49,94897,94898],{"class":55},"aa[index]\n",[49,94900,94901],{"class":51,"line":8062},[49,94902,93991],{"class":328},[49,94904,94905],{"class":51,"line":8067},[49,94906,94717],{"class":328},[49,94908,94909],{"class":51,"line":8073},[49,94910,94911],{"class":328},"       [46, 88, 81, 37, 25, 77],\n",[49,94913,94914],{"class":51,"line":8100},[49,94915,94727],{"class":328},[49,94917,94918],{"class":51,"line":8105},[49,94919,94920],{"class":328},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[49,94922,94923],{"class":51,"line":8111},[49,94924,93991],{"class":328},[143,94926,94927],{},"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":44,"searchDepth":84,"depth":84,"links":94929},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94576,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94936,"title":94937,"body":94938,"description":148,"extension":149,"meta":94968,"navigation":151,"path":94969,"seo":94970,"stem":94971,"__hash__":94972},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94939,"toc":94966},[94940,94943,94946,94949,94952,94955,94958,94961],[10,94941,94937],{"id":94942},"_14广播机制",[14,94944,94945],{},"广播的规则：",[14,94947,94948],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94950,94951],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94953,94954],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94956,94957],{},"3.如果没有维度形状为1，则会引发异常",[14,94959,94960],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94962,94963],{},[1554,94964],{"alt":44,"src":94965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":44,"searchDepth":84,"depth":84,"links":94967},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94937,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94974,"title":94975,"body":94976,"description":148,"extension":149,"meta":95074,"navigation":151,"path":95075,"seo":95076,"stem":95077,"__hash__":95078},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94977,"toc":95072},[94978,94981,94984,95069],[10,94979,94975],{"id":94980},"_15比较掩码",[14,94982,94983],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[39,94985,94987],{"className":41,"code":94986,"language":43,"meta":44,"style":44},"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",[46,94988,94989,95035,95046,95060,95064],{"__ignoreMap":44},[49,94990,94991,94993,94995,94998,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020,95022,95024,95026,95028,95030,95032],{"class":51,"line":52},[49,94992,56],{"class":55},[49,94994,60],{"class":59},[49,94996,94997],{"class":55},"np.array([[",[49,94999,441],{"class":66},[49,95001,76],{"class":55},[49,95003,301],{"class":66},[49,95005,76],{"class":55},[49,95007,73],{"class":66},[49,95009,48119],{"class":55},[49,95011,691],{"class":66},[49,95013,76],{"class":55},[49,95015,717],{"class":66},[49,95017,76],{"class":55},[49,95019,742],{"class":66},[49,95021,48119],{"class":55},[49,95023,944],{"class":66},[49,95025,76],{"class":55},[49,95027,969],{"class":66},[49,95029,76],{"class":55},[49,95031,994],{"class":66},[49,95033,95034],{"class":55},"]])\n",[49,95036,95037,95039,95041,95043],{"class":51,"line":84},[49,95038,56],{"class":55},[49,95040,1129],{"class":59},[49,95042,919],{"class":66},[49,95044,95045],{"class":283},"#结果是一个由True,False组成的数组\n",[49,95047,95048,95051,95053,95055,95057],{"class":51,"line":109},[49,95049,95050],{"class":55},"a[a",[49,95052,1129],{"class":59},[49,95054,919],{"class":66},[49,95056,1159],{"class":55},[49,95058,95059],{"class":283},"#小于20的元素会存到这个数组中\n",[49,95061,95062],{"class":51,"line":120},[49,95063,93627],{"class":283},[49,95065,95066],{"class":51,"line":135},[49,95067,95068],{"class":283},"#array([ 1,  2,  3, 11, 12, 13])\n",[143,95070,95071],{},"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":44,"searchDepth":84,"depth":84,"links":95073},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94975,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95080,"title":95081,"body":95082,"description":148,"extension":149,"meta":95174,"navigation":151,"path":95175,"seo":95176,"stem":95177,"__hash__":95178},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95083,"toc":95172},[95084,95087,95090,95093,95096,95099,95164,95169],[10,95085,95081],{"id":95086},"_16魔法命令time",[14,95088,95089],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95091,95092],{},"%:行模式",[14,95094,95095],{},"%%:单元格模式",[14,95097,95098],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[39,95100,95102],{"className":41,"code":95101,"language":43,"meta":44,"style":44},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[46,95103,95104,95109,95116,95121,95130,95143,95147,95155],{"__ignoreMap":44},[49,95105,95106],{"class":51,"line":52},[49,95107,95108],{"class":283},"#程序执行时间\n",[49,95110,95111,95113],{"class":51,"line":84},[49,95112,30481],{"class":59},[49,95114,95115],{"class":55}," time \n",[49,95117,95118],{"class":51,"line":109},[49,95119,95120],{"class":283},"#获取时间\n",[49,95122,95123,95126,95128],{"class":51,"line":120},[49,95124,95125],{"class":55},"start",[49,95127,60],{"class":59},[49,95129,32507],{"class":55},[49,95131,95132,95135,95138,95140],{"class":51,"line":135},[49,95133,95134],{"class":55},"time.sleep(",[49,95136,95137],{"class":66},"0.4",[49,95139,649],{"class":55},[49,95141,95142],{"class":283},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[49,95144,95145],{"class":51,"line":1306},[49,95146,95120],{"class":283},[49,95148,95149,95151,95153],{"class":51,"line":1312},[49,95150,45890],{"class":55},[49,95152,60],{"class":59},[49,95154,32507],{"class":55},[49,95156,95157,95159,95161],{"class":51,"line":1403},[49,95158,45890],{"class":55},[49,95160,751],{"class":59},[49,95162,95163],{"class":55},"start\n",[14,95165,95166],{},[1554,95167],{"alt":44,"src":95168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[143,95170,95171],{},"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":44,"searchDepth":84,"depth":84,"links":95173},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95081,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95180,"title":95181,"body":95182,"description":148,"extension":149,"meta":95217,"navigation":151,"path":95218,"seo":95219,"stem":95220,"__hash__":95221},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95183,"toc":95215},[95184,95187,95190,95193,95196,95199,95202,95205,95210],[10,95185,95181],{"id":95186},"_17魔法命令timeit",[14,95188,95189],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95191,95192],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95194,95195],{},"单元格模式：",[14,95197,95198],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95200,95201],{},"初始化语句执行次数由轮数来决定",[14,95203,95204],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95206,95207],{},[1554,95208],{"alt":44,"src":95209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95211,95212],{},[1554,95213],{"alt":44,"src":95214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":44,"searchDepth":84,"depth":84,"links":95216},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95181,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95223,"title":95224,"body":95225,"description":148,"extension":149,"meta":95243,"navigation":151,"path":95244,"seo":95245,"stem":95246,"__hash__":95247},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95226,"toc":95241},[95227,95230,95233,95236],[10,95228,95224],{"id":95229},"_18魔法命令writefile和run",[14,95231,95232],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95234,95235],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95237,95238],{},[1554,95239],{"alt":44,"src":95240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":44,"searchDepth":84,"depth":84,"links":95242},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95224,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95249,"title":95250,"body":95251,"description":148,"extension":149,"meta":95304,"navigation":151,"path":95305,"seo":95306,"stem":95307,"__hash__":95308},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95252,"toc":95302},[95253,95256,95259,95261,95264,95267,95272,95275,95278,95281,95284,95287,95290,95293,95296,95299],[10,95254,95250],{"id":95255},"_19魔法命令memit",[14,95257,95258],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95260,24690],{},[14,95262,95263],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95265,95266],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95268,95269],{},[1554,95270],{"alt":44,"src":95271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95273,95274],{},"补充：",[14,95276,95277],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95279,95280],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95282,95283],{},"解决方法：",[14,95285,95286],{},"1.cmd",[14,95288,95289],{},"2.依次输入以下代码：",[14,95291,95292],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95294,95295],{},"pip install --upgrade ipython",[14,95297,95298],{},"#升级 memory_profiler 和 setuptools",[14,95300,95301],{},"pip install --upgrade memory_profiler setuptools",{"title":44,"searchDepth":84,"depth":84,"links":95303},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95250,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95310,"title":95311,"body":95312,"description":148,"extension":149,"meta":96958,"navigation":151,"path":96959,"seo":96960,"stem":96961,"__hash__":96962},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95313,"toc":96928},[95314,95317,95321,95325,95386,95389,95394,95398,95403,95408,95413,95418,95421,95426,95430,95434,95467,95470,95473,95476,95528,95531,95567,95570,95612,95616,95637,95639,95676,95678,95683,95685,95690,95694,95697,95725,95729,95733,95786,95790,95882,95886,95890,95893,95898,95902,95927,95932,95936,95939,95942,95945,95948,95951,95954,95957,95969,95973,95977,95980,96012,96015,96038,96041,96067,96070,96096,96099,96133,96136,96198,96202,96205,96209,96212,96238,96241,96244,96249,96252,96321,96323,96328,96389,96392,96403,96409,96414,96418,96421,96434,96438,96453,96455,96478,96480,96506,96509,96512,96515,96563,96565,96570,96574,96578,96605,96609,96636,96639,96644,96649,96739,96743,96801,96806,96809,96812,96854,96858,96914,96919,96922,96925],[10,95315,95311],{"id":95316},"_2创建数组",[166,95318,95320],{"id":95319},"_21-array函数创建数组","2.1 array()函数创建数组",[195,95322,95324],{"id":95323},"_221-函数语句","2.2.1 函数语句",[39,95326,95328],{"className":41,"code":95327,"language":43,"meta":44,"style":44},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[46,95329,95330],{"__ignoreMap":44},[49,95331,95332,95335,95338,95340,95342,95344,95346,95348,95351,95353,95356,95358,95361,95363,95365,95367,95370,95372,95375,95377,95380,95382,95384],{"class":51,"line":52},[49,95333,95334],{"class":55},"numpy.array(",[49,95336,95337],{"class":66},"object",[49,95339,12525],{"class":55},[49,95341,93563],{"class":126},[49,95343,13654],{"class":59},[49,95345,39022],{"class":66},[49,95347,12525],{"class":55},[49,95349,95350],{"class":126},"copy",[49,95352,13654],{"class":59},[49,95354,95355],{"class":66}," True",[49,95357,12525],{"class":55},[49,95359,95360],{"class":126},"order",[49,95362,13654],{"class":59},[49,95364,39022],{"class":66},[49,95366,12525],{"class":55},[49,95368,95369],{"class":126},"subok",[49,95371,13654],{"class":59},[49,95373,95374],{"class":66}," False",[49,95376,12525],{"class":55},[49,95378,95379],{"class":126},"ndmin",[49,95381,13654],{"class":59},[49,95383,4185],{"class":66},[49,95385,81],{"class":55},[14,95387,95388],{},"参数：",[14,95390,95391],{},[1554,95392],{"alt":44,"src":95393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[195,95395,95397],{"id":95396},"_222-实例","2.2.2 实例",[14,95399,95400],{},[1554,95401],{"alt":44,"src":95402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95404,95405],{},[1554,95406],{"alt":44,"src":95407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95409,95410],{},[1554,95411],{"alt":44,"src":95412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95414,95415],{},[1554,95416],{"alt":44,"src":95417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95419,95420],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95422,95423],{},[1554,95424],{"alt":44,"src":95425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[166,95427,95429],{"id":95428},"_22-随机数创建数组","2.2 随机数创建数组",[195,95431,95433],{"id":95432},"_221-random语句","2.2.1 random语句",[39,95435,95437],{"className":41,"code":95436,"language":43,"meta":44,"style":44},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[46,95438,95439,95444,95449,95457,95462],{"__ignoreMap":44},[49,95440,95441],{"class":51,"line":52},[49,95442,95443],{"class":283},"#random.random()\n",[49,95445,95446],{"class":51,"line":84},[49,95447,95448],{"class":283},"#确定随机种子,就是每次运行结果是相同的\n",[49,95450,95451,95453,95455],{"class":51,"line":109},[49,95452,94670],{"class":55},[49,95454,415],{"class":66},[49,95456,81],{"class":55},[49,95458,95459],{"class":51,"line":120},[49,95460,95461],{"class":55},"np.random.random()\n",[49,95463,95464],{"class":51,"line":135},[49,95465,95466],{"class":283},"#生成一个随机的数目\n",[14,95468,95469],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95471,95472],{},"可以指定数组形状 size",[14,95474,95475],{},"①生成一维数组",[39,95477,95479],{"className":41,"code":95478,"language":43,"meta":44,"style":44},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[46,95480,95481,95486,95499,95504,95520],{"__ignoreMap":44},[49,95482,95483],{"class":51,"line":52},[49,95484,95485],{"class":283},"#random.random(size())\n",[49,95487,95488,95491,95493,95495,95497],{"class":51,"line":84},[49,95489,95490],{"class":55},"np.random.random(",[49,95492,31585],{"class":126},[49,95494,60],{"class":59},[49,95496,541],{"class":66},[49,95498,81],{"class":55},[49,95500,95501],{"class":51,"line":109},[49,95502,95503],{"class":283},"#生成一位的五个元素\n",[49,95505,95506,95508,95510,95512,95514,95516,95518],{"class":51,"line":120},[49,95507,56],{"class":55},[49,95509,60],{"class":59},[49,95511,95490],{"class":55},[49,95513,31585],{"class":126},[49,95515,60],{"class":59},[49,95517,515],{"class":66},[49,95519,81],{"class":55},[49,95521,95522,95525],{"class":51,"line":135},[49,95523,95524],{"class":55},"a.shape ",[49,95526,95527],{"class":283},"#输出数组形状\n",[14,95529,95530],{},"②生成二维数组",[39,95532,95534],{"className":41,"code":95533,"language":43,"meta":44,"style":44},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[46,95535,95536,95540,95562],{"__ignoreMap":44},[49,95537,95538],{"class":51,"line":52},[49,95539,93364],{"class":283},[49,95541,95542,95544,95546,95548,95550,95552,95554,95556,95558,95560],{"class":51,"line":84},[49,95543,93369],{"class":55},[49,95545,60],{"class":59},[49,95547,95490],{"class":55},[49,95549,31585],{"class":126},[49,95551,60],{"class":59},[49,95553,228],{"class":55},[49,95555,515],{"class":66},[49,95557,76],{"class":55},[49,95559,541],{"class":66},[49,95561,30586],{"class":55},[49,95563,95564],{"class":51,"line":109},[49,95565,95566],{"class":283},"#生成四行五列的数组\n",[14,95568,95569],{},"③生成三维数组",[39,95571,95573],{"className":41,"code":95572,"language":43,"meta":44,"style":44},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[46,95574,95575,95580,95607],{"__ignoreMap":44},[49,95576,95577],{"class":51,"line":52},[49,95578,95579],{"class":283},"#三维数组\n",[49,95581,95582,95585,95587,95589,95591,95593,95595,95597,95599,95601,95603,95605],{"class":51,"line":84},[49,95583,95584],{"class":55},"aaa",[49,95586,60],{"class":59},[49,95588,95490],{"class":55},[49,95590,31585],{"class":126},[49,95592,60],{"class":59},[49,95594,228],{"class":55},[49,95596,301],{"class":66},[49,95598,76],{"class":55},[49,95600,73],{"class":66},[49,95602,76],{"class":55},[49,95604,515],{"class":66},[49,95606,30586],{"class":55},[49,95608,95609],{"class":51,"line":109},[49,95610,95611],{"class":55},"aaa.shape\n",[195,95613,95615],{"id":95614},"_222-randint语句","2.2.2 randint语句",[39,95617,95619],{"className":41,"code":95618,"language":43,"meta":44,"style":44},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[46,95620,95621,95626],{"__ignoreMap":44},[49,95622,95623],{"class":51,"line":52},[49,95624,95625],{"class":283},"#生成随机的整数 random.randint(low,high,size)\n",[49,95627,95628,95630,95632,95634],{"class":51,"line":84},[49,95629,93177],{"class":55},[49,95631,541],{"class":66},[49,95633,13804],{"class":55},[49,95635,95636],{"class":283},"#0~5中的随机一个数\n",[14,95638,95475],{},[39,95640,95642],{"className":41,"code":95641,"language":43,"meta":44,"style":44},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[46,95643,95644,95649,95671],{"__ignoreMap":44},[49,95645,95646],{"class":51,"line":52},[49,95647,95648],{"class":283},"#一维\n",[49,95650,95651,95653,95655,95657,95659,95661,95663,95665,95667,95669],{"class":51,"line":84},[49,95652,93177],{"class":55},[49,95654,441],{"class":66},[49,95656,76],{"class":55},[49,95658,691],{"class":66},[49,95660,76],{"class":55},[49,95662,31585],{"class":126},[49,95664,60],{"class":59},[49,95666,228],{"class":55},[49,95668,95],{"class":66},[49,95670,30586],{"class":55},[49,95672,95673],{"class":51,"line":109},[49,95674,95675],{"class":283},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95677,95530],{},[14,95679,95680],{},[1554,95681],{"alt":44,"src":95682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95684,95569],{},[14,95686,95687],{},[1554,95688],{"alt":44,"src":95689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[195,95691,95693],{"id":95692},"_222-rand语句","2.2.2 rand语句",[14,95695,95696],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[39,95698,95700],{"className":41,"code":95699,"language":43,"meta":44,"style":44},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[46,95701,95702,95715,95720],{"__ignoreMap":44},[49,95703,95704,95707,95709,95711,95713],{"class":51,"line":52},[49,95705,95706],{"class":55},"np.random.rand(",[49,95708,533],{"class":66},[49,95710,76],{"class":55},[49,95712,95],{"class":66},[49,95714,81],{"class":55},[49,95716,95717],{"class":51,"line":84},[49,95718,95719],{"class":283},"#第一个参数100：行数，表示有100个样本\n",[49,95721,95722],{"class":51,"line":109},[49,95723,95724],{"class":283},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[166,95726,95728],{"id":95727},"_23-arange创建数组","2.3 arange()创建数组",[195,95730,95732],{"id":95731},"_231-函数语句","2.3.1 函数语句",[39,95734,95736],{"className":41,"code":95735,"language":43,"meta":44,"style":44},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[46,95737,95738,95752,95757,95762,95767,95772,95777,95782],{"__ignoreMap":44},[49,95739,95740,95743,95745,95747,95750],{"class":51,"line":52},[49,95741,95742],{"class":55},"numpy.arange([start,] stop[, step], ",[49,95744,93563],{"class":126},[49,95746,60],{"class":59},[49,95748,95749],{"class":66},"None",[49,95751,81],{"class":55},[49,95753,95754],{"class":51,"line":84},[49,95755,95756],{"class":283},"#参数\n",[49,95758,95759],{"class":51,"line":109},[49,95760,95761],{"class":328},"\"\"\"\n",[49,95763,95764],{"class":51,"line":120},[49,95765,95766],{"class":328},"start:起始值，可选，默认从 0 开始。\n",[49,95768,95769],{"class":51,"line":135},[49,95770,95771],{"class":328},"stop:结束值（不包含该值）。\n",[49,95773,95774],{"class":51,"line":1306},[49,95775,95776],{"class":328},"step:步长，可选，默认是 1。可以为浮点数。\n",[49,95778,95779],{"class":51,"line":1312},[49,95780,95781],{"class":328},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[49,95783,95784],{"class":51,"line":1403},[49,95785,95761],{"class":328},[195,95787,95789],{"id":95788},"_232-实例","2.3.2 实例",[39,95791,95793],{"className":41,"code":95792,"language":43,"meta":44,"style":44},"#创建一维数组\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",[46,95794,95795,95799,95823,95828,95833,95837,95860,95864,95868,95873,95878],{"__ignoreMap":44},[49,95796,95797],{"class":51,"line":52},[49,95798,93168],{"class":283},[49,95800,95801,95803,95805,95807,95809,95811,95813,95815,95817,95819,95821],{"class":51,"line":84},[49,95802,63],{"class":55},[49,95804,441],{"class":66},[49,95806,76],{"class":55},[49,95808,944],{"class":66},[49,95810,76],{"class":55},[49,95812,441],{"class":66},[49,95814,76],{"class":55},[49,95816,93563],{"class":126},[49,95818,60],{"class":59},[49,95820,231],{"class":66},[49,95822,81],{"class":55},[49,95824,95825],{"class":51,"line":109},[49,95826,95827],{"class":283},"#输出结果：\n",[49,95829,95830],{"class":51,"line":120},[49,95831,95832],{"class":283},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[49,95834,95835],{"class":51,"line":135},[49,95836,94010],{"class":283},[49,95838,95839,95842,95844,95846,95848,95851,95853,95855,95857],{"class":51,"line":1306},[49,95840,95841],{"class":55},"np.array([np.arange(",[49,95843,441],{"class":66},[49,95845,76],{"class":55},[49,95847,515],{"class":66},[49,95849,95850],{"class":55},"),np.arange(",[49,95852,515],{"class":66},[49,95854,76],{"class":55},[49,95856,591],{"class":66},[49,95858,95859],{"class":55},")])\n",[49,95861,95862],{"class":51,"line":1312},[49,95863,93627],{"class":283},[49,95865,95866],{"class":51,"line":1403},[49,95867,95761],{"class":328},[49,95869,95870],{"class":51,"line":1409},[49,95871,95872],{"class":328},"array([[1, 2, 3],\n",[49,95874,95875],{"class":51,"line":1421},[49,95876,95877],{"class":328},"       [4, 5, 6]])\n",[49,95879,95880],{"class":51,"line":1704},[49,95881,95761],{"class":328},[166,95883,95885],{"id":95884},"_24-生态分布","2.4 生态分布",[195,95887,95889],{"id":95888},"_241-标准正态分布","2.4.1 标准正态分布",[14,95891,95892],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95894,95895],{},[1554,95896],{"alt":44,"src":95897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[195,95899,95901],{"id":95900},"_242-常规正态分布","2.4.2 常规正态分布",[39,95903,95905],{"className":41,"code":95904,"language":43,"meta":44,"style":44},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[46,95906,95907,95912,95917,95922],{"__ignoreMap":44},[49,95908,95909],{"class":51,"line":52},[49,95910,95911],{"class":55},"random.normal(loc,scale,size)也可以生成正态分布\n",[49,95913,95914],{"class":51,"line":84},[49,95915,95916],{"class":283},"#loc:期望\n",[49,95918,95919],{"class":51,"line":109},[49,95920,95921],{"class":283},"#scale:方差\n",[49,95923,95924],{"class":51,"line":120},[49,95925,95926],{"class":283},"#size:用于确定是几维的数列\n",[14,95928,95929],{},[1554,95930],{"alt":44,"src":95931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[166,95933,95935],{"id":95934},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95937,95938],{},"ndim:秩，维度个数",[14,95940,95941],{},"size:数组元素的个数",[14,95943,95944],{},"shape:数组的形状",[14,95946,95947],{},"dtype:数组元素的类型",[14,95949,95950],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95952,95953],{},"他们都是属性，通过数组.属性的形式来确定",[14,95955,95956],{},"如果需要输出多个可以通过以下方式：",[39,95958,95960],{"className":41,"code":95959,"language":43,"meta":44,"style":44},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[46,95961,95962],{"__ignoreMap":44},[49,95963,95964,95966],{"class":51,"line":52},[49,95965,30504],{"class":66},[49,95967,95968],{"class":55},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[166,95970,95972],{"id":95971},"_26-其他方式创建数组","2.6 其他方式创建数组",[195,95974,95976],{"id":95975},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95978,95979],{},"①创建一维数组",[39,95981,95983],{"className":41,"code":95982,"language":43,"meta":44,"style":44},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[46,95984,95985,95994,95998,96003,96008],{"__ignoreMap":44},[49,95986,95987,95990,95992],{"class":51,"line":52},[49,95988,95989],{"class":55},"np.zeros(",[49,95991,95],{"class":66},[49,95993,81],{"class":55},[49,95995,95996],{"class":51,"line":84},[49,95997,95761],{"class":328},[49,95999,96000],{"class":51,"line":109},[49,96001,96002],{"class":328},"输出结果：\n",[49,96004,96005],{"class":51,"line":120},[49,96006,96007],{"class":328},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[49,96009,96010],{"class":51,"line":135},[49,96011,95761],{"class":328},[14,96013,96014],{},"上方代码等价于：",[39,96016,96018],{"className":41,"code":96017,"language":43,"meta":44,"style":44},"np.zeros(shape=(10))#创建10个元素的0数组\n",[46,96019,96020],{"__ignoreMap":44},[49,96021,96022,96024,96027,96029,96031,96033,96035],{"class":51,"line":52},[49,96023,95989],{"class":55},[49,96025,96026],{"class":126},"shape",[49,96028,60],{"class":59},[49,96030,228],{"class":55},[49,96032,95],{"class":66},[49,96034,82860],{"class":55},[49,96036,96037],{"class":283},"#创建10个元素的0数组\n",[14,96039,96040],{},"也可以指定类型",[39,96042,96044],{"className":41,"code":96043,"language":43,"meta":44,"style":44},"#指定类型\nnp.zeros(5,dtype=int)\n",[46,96045,96046,96051],{"__ignoreMap":44},[49,96047,96048],{"class":51,"line":52},[49,96049,96050],{"class":283},"#指定类型\n",[49,96052,96053,96055,96057,96059,96061,96063,96065],{"class":51,"line":84},[49,96054,95989],{"class":55},[49,96056,541],{"class":66},[49,96058,76],{"class":55},[49,96060,93563],{"class":126},[49,96062,60],{"class":59},[49,96064,231],{"class":66},[49,96066,81],{"class":55},[14,96068,96069],{},"②创建二维数组",[39,96071,96073],{"className":41,"code":96072,"language":43,"meta":44,"style":44},"np.zeros((3,4),dtype=int)\n",[46,96074,96075],{"__ignoreMap":44},[49,96076,96077,96080,96082,96084,96086,96088,96090,96092,96094],{"class":51,"line":52},[49,96078,96079],{"class":55},"np.zeros((",[49,96081,73],{"class":66},[49,96083,76],{"class":55},[49,96085,515],{"class":66},[49,96087,42345],{"class":55},[49,96089,93563],{"class":126},[49,96091,60],{"class":59},[49,96093,231],{"class":66},[49,96095,81],{"class":55},[14,96097,96098],{},"③创建三维数组",[39,96100,96102],{"className":41,"code":96101,"language":43,"meta":44,"style":44},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[46,96103,96104,96109],{"__ignoreMap":44},[49,96105,96106],{"class":51,"line":52},[49,96107,96108],{"class":283},"#创建三维数组\n",[49,96110,96111,96113,96115,96117,96119,96121,96123,96125,96127,96129,96131],{"class":51,"line":84},[49,96112,96079],{"class":55},[49,96114,73],{"class":66},[49,96116,76],{"class":55},[49,96118,515],{"class":66},[49,96120,76],{"class":55},[49,96122,541],{"class":66},[49,96124,42345],{"class":55},[49,96126,93563],{"class":126},[49,96128,60],{"class":59},[49,96130,231],{"class":66},[49,96132,81],{"class":55},[14,96134,96135],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[39,96137,96139],{"className":41,"code":96138,"language":43,"meta":44,"style":44},"#使用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",[46,96140,96141,96146,96161,96166,96171,96193],{"__ignoreMap":44},[49,96142,96143],{"class":51,"line":52},[49,96144,96145],{"class":283},"#使用zeros_like将创建的一维数组变成全0的数组\n",[49,96147,96148,96150,96152,96154,96156,96158],{"class":51,"line":84},[49,96149,56],{"class":55},[49,96151,60],{"class":59},[49,96153,63],{"class":55},[49,96155,515],{"class":66},[49,96157,649],{"class":55},[49,96159,96160],{"class":283},"#这个得到的结果：一维数组0，1，2，3\n",[49,96162,96163],{"class":51,"line":109},[49,96164,96165],{"class":55},"np.zeros_like(a)\n",[49,96167,96168],{"class":51,"line":120},[49,96169,96170],{"class":283},"#使用zeros_like将创建的二维数组变成全0的数组\n",[49,96172,96173,96175,96177,96179,96181,96183,96185,96187,96189,96191],{"class":51,"line":135},[49,96174,93369],{"class":55},[49,96176,60],{"class":59},[49,96178,95490],{"class":55},[49,96180,31585],{"class":126},[49,96182,60],{"class":59},[49,96184,228],{"class":55},[49,96186,515],{"class":66},[49,96188,76],{"class":55},[49,96190,541],{"class":66},[49,96192,30586],{"class":55},[49,96194,96195],{"class":51,"line":1306},[49,96196,96197],{"class":55},"np.zeros_like(aa)\n",[195,96199,96201],{"id":96200},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96203,96204],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[195,96206,96208],{"id":96207},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96210,96211],{},"①empty()用法",[39,96213,96215],{"className":41,"code":96214,"language":43,"meta":44,"style":44},"numpy.empty(shape,dtype=float,order='c')\n",[46,96216,96217],{"__ignoreMap":44},[49,96218,96219,96222,96224,96226,96228,96230,96232,96234,96236],{"class":51,"line":52},[49,96220,96221],{"class":55},"numpy.empty(shape,",[49,96223,93563],{"class":126},[49,96225,60],{"class":59},[49,96227,266],{"class":66},[49,96229,76],{"class":55},[49,96231,95360],{"class":126},[49,96233,60],{"class":59},[49,96235,76117],{"class":328},[49,96237,81],{"class":55},[14,96239,96240],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96242,96243],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96245,96246],{},[1554,96247],{"alt":44,"src":96248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96250,96251],{},"②empty()用法",[39,96253,96255],{"className":41,"code":96254,"language":43,"meta":44,"style":44},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[46,96256,96257,96278,96290,96311,96316],{"__ignoreMap":44},[49,96258,96259,96261,96263,96266,96268,96270,96272,96274,96276],{"class":51,"line":52},[49,96260,1064],{"class":55},[49,96262,60],{"class":59},[49,96264,96265],{"class":55},"np.empty(",[49,96267,95],{"class":66},[49,96269,76],{"class":55},[49,96271,93563],{"class":126},[49,96273,60],{"class":59},[49,96275,231],{"class":66},[49,96277,81],{"class":55},[49,96279,96280,96282,96284,96286,96288],{"class":51,"line":84},[49,96281,1039],{"class":55},[49,96283,60],{"class":59},[49,96285,63],{"class":55},[49,96287,541],{"class":66},[49,96289,81],{"class":55},[49,96291,96292,96295,96297,96300,96302,96304,96307,96309],{"class":51,"line":109},[49,96293,96294],{"class":55},"np.add(",[49,96296,301],{"class":66},[49,96298,96299],{"class":55},",x,",[49,96301,127],{"class":126},[49,96303,60],{"class":59},[49,96305,96306],{"class":55},"y[:",[49,96308,541],{"class":66},[49,96310,106],{"class":55},[49,96312,96313],{"class":51,"line":120},[49,96314,96315],{"class":283},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[49,96317,96318],{"class":51,"line":135},[49,96319,96320],{"class":55},"y\n",[14,96322,11604],{},[14,96324,96325],{},[1554,96326],{"alt":44,"src":96327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[39,96329,96331],{"className":41,"code":96330,"language":43,"meta":44,"style":44},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[46,96332,96333,96349,96369,96384],{"__ignoreMap":44},[49,96334,96335,96337,96339,96341,96343,96345,96347],{"class":51,"line":52},[49,96336,1039],{"class":55},[49,96338,60],{"class":59},[49,96340,63],{"class":55},[49,96342,441],{"class":66},[49,96344,76],{"class":55},[49,96346,566],{"class":66},[49,96348,81],{"class":55},[49,96350,96351,96353,96355,96357,96359,96361,96363,96365,96367],{"class":51,"line":84},[49,96352,1064],{"class":55},[49,96354,60],{"class":59},[49,96356,96265],{"class":55},[49,96358,541],{"class":66},[49,96360,76],{"class":55},[49,96362,93563],{"class":126},[49,96364,60],{"class":59},[49,96366,231],{"class":66},[49,96368,81],{"class":55},[49,96370,96371,96374,96376,96378,96380,96382],{"class":51,"line":109},[49,96372,96373],{"class":55},"np.add(x,",[49,96375,301],{"class":66},[49,96377,76],{"class":55},[49,96379,127],{"class":126},[49,96381,60],{"class":59},[49,96383,93512],{"class":55},[49,96385,96386],{"class":51,"line":120},[49,96387,96388],{"class":283},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96390,96391],{},"③empty_like()",[14,96393,96394],{},[373,96395,96396,96397,96402],{},"创建一个",[373,96398,96399],{},[373,96400,96401],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96404,96405,96408],{},[46,96406,96407],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96410,96411],{},[1554,96412],{"alt":44,"src":96413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[195,96415,96417],{"id":96416},"_264-用法","2.6.4 ？？用法",[14,96419,96420],{},"当想查看一个函数的参数时，可以通过？？来实现",[39,96422,96424],{"className":41,"code":96423,"language":43,"meta":44,"style":44},"np.full??\n",[46,96425,96426],{"__ignoreMap":44},[49,96427,96428,96431],{"class":51,"line":52},[49,96429,96430],{"class":55},"np.full",[49,96432,96433],{"class":77492},"??\n",[195,96435,96437],{"id":96436},"_265-full创建数组","2.6.5 full()创建数组",[39,96439,96441],{"className":41,"code":96440,"language":43,"meta":44,"style":44},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[46,96442,96443,96448],{"__ignoreMap":44},[49,96444,96445],{"class":51,"line":52},[49,96446,96447],{"class":55},"full(shape,fill_value)\n",[49,96449,96450],{"class":51,"line":84},[49,96451,96452],{"class":55},"创建全为某个指定值的数组\n",[14,96454,94593],{},[39,96456,96458],{"className":41,"code":96457,"language":43,"meta":44,"style":44},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[46,96459,96460,96465],{"__ignoreMap":44},[49,96461,96462],{"class":51,"line":52},[49,96463,96464],{"class":283},"#创建一个一维数组,以20进行填充\n",[49,96466,96467,96470,96472,96474,96476],{"class":51,"line":84},[49,96468,96469],{"class":55},"np.full(",[49,96471,95],{"class":66},[49,96473,76],{"class":55},[49,96475,919],{"class":66},[49,96477,81],{"class":55},[14,96479,93354],{},[39,96481,96483],{"className":41,"code":96482,"language":43,"meta":44,"style":44},"#创建二维数组\nnp.full((3,5),11)\n",[46,96484,96485,96489],{"__ignoreMap":44},[49,96486,96487],{"class":51,"line":52},[49,96488,94010],{"class":283},[49,96490,96491,96494,96496,96498,96500,96502,96504],{"class":51,"line":84},[49,96492,96493],{"class":55},"np.full((",[49,96495,73],{"class":66},[49,96497,76],{"class":55},[49,96499,541],{"class":66},[49,96501,42345],{"class":55},[49,96503,691],{"class":66},[49,96505,81],{"class":55},[14,96507,96508],{},"③full_like用法",[14,96510,96511],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96513,96514],{},"这里是指定填充而已",[39,96516,96518],{"className":41,"code":96517,"language":43,"meta":44,"style":44},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[46,96519,96520,96525,96549,96554],{"__ignoreMap":44},[49,96521,96522],{"class":51,"line":52},[49,96523,96524],{"class":283},"#创建一个指定形状数组\n",[49,96526,96527,96529,96531,96533,96535,96537,96539,96541,96543,96545,96547],{"class":51,"line":84},[49,96528,56],{"class":55},[49,96530,60],{"class":59},[49,96532,63],{"class":55},[49,96534,441],{"class":66},[49,96536,76],{"class":55},[49,96538,547],{"class":66},[49,96540,70],{"class":55},[49,96542,515],{"class":66},[49,96544,76],{"class":55},[49,96546,67],{"class":66},[49,96548,81],{"class":55},[49,96550,96551],{"class":51,"line":109},[49,96552,96553],{"class":283},"#进行指定填充\n",[49,96555,96556,96559,96561],{"class":51,"line":120},[49,96557,96558],{"class":55},"np.full_like(a,",[49,96560,95],{"class":66},[49,96562,81],{"class":55},[14,96564,11604],{},[14,96566,96567],{},[1554,96568],{"alt":44,"src":96569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[195,96571,96573],{"id":96572},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22088,96575,96577],{"id":96576},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[39,96579,96581],{"className":41,"code":96580,"language":43,"meta":44,"style":44},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[46,96582,96583,96600],{"__ignoreMap":44},[49,96584,96585,96588,96590,96592,96594,96596,96598],{"class":51,"line":52},[49,96586,96587],{"class":55},"np.eye(",[49,96589,515],{"class":66},[49,96591,76],{"class":55},[49,96593,93563],{"class":126},[49,96595,60],{"class":59},[49,96597,231],{"class":66},[49,96599,81],{"class":55},[49,96601,96602],{"class":51,"line":84},[49,96603,96604],{"class":283},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22088,96606,96608],{"id":96607},"_2662-法2identity","2.6.6.2 法2：identity()",[39,96610,96612],{"className":41,"code":96611,"language":43,"meta":44,"style":44},"#identity()\nnp.identity(5,dtype=int)\n",[46,96613,96614,96619],{"__ignoreMap":44},[49,96615,96616],{"class":51,"line":52},[49,96617,96618],{"class":283},"#identity()\n",[49,96620,96621,96624,96626,96628,96630,96632,96634],{"class":51,"line":84},[49,96622,96623],{"class":55},"np.identity(",[49,96625,541],{"class":66},[49,96627,76],{"class":55},[49,96629,93563],{"class":126},[49,96631,60],{"class":59},[49,96633,231],{"class":66},[49,96635,81],{"class":55},[14,96637,96638],{},"两个函数是有区别的",[14,96640,96641],{},[1554,96642],{"alt":44,"src":96643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96645,96646],{},[1554,96647],{"alt":44,"src":96648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[39,96650,96652],{"className":41,"code":96651,"language":43,"meta":44,"style":44},"# 创建一个 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",[46,96653,96654,96659,96671,96676,96681,96686,96691,96695,96700,96720,96724,96729,96734],{"__ignoreMap":44},[49,96655,96656],{"class":51,"line":52},[49,96657,96658],{"class":283},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[49,96660,96661,96663,96665,96667,96669],{"class":51,"line":84},[49,96662,96587],{"class":55},[49,96664,73],{"class":66},[49,96666,12525],{"class":55},[49,96668,515],{"class":66},[49,96670,81],{"class":55},[49,96672,96673],{"class":51,"line":109},[49,96674,96675],{"class":283},"# 输出:\n",[49,96677,96678],{"class":51,"line":120},[49,96679,96680],{"class":283},"# [[1. 0. 0. 0.]\n",[49,96682,96683],{"class":51,"line":135},[49,96684,96685],{"class":283},"#  [0. 1. 0. 0.]\n",[49,96687,96688],{"class":51,"line":1306},[49,96689,96690],{"class":283},"#  [0. 0. 1. 0.]]\n",[49,96692,96693],{"class":51,"line":1312},[49,96694,2492],{"emptyLinePlaceholder":151},[49,96696,96697],{"class":51,"line":1403},[49,96698,96699],{"class":283},"# 对角线向上偏移1\n",[49,96701,96702,96704,96706,96708,96710,96712,96714,96716,96718],{"class":51,"line":1409},[49,96703,96587],{"class":55},[49,96705,73],{"class":66},[49,96707,12525],{"class":55},[49,96709,515],{"class":66},[49,96711,12525],{"class":55},[49,96713,712],{"class":126},[49,96715,60],{"class":59},[49,96717,441],{"class":66},[49,96719,81],{"class":55},[49,96721,96722],{"class":51,"line":1421},[49,96723,96675],{"class":283},[49,96725,96726],{"class":51,"line":1704},[49,96727,96728],{"class":283},"# [[0. 1. 0. 0.]\n",[49,96730,96731],{"class":51,"line":1709},[49,96732,96733],{"class":283},"#  [0. 0. 1. 0.]\n",[49,96735,96736],{"class":51,"line":1715},[49,96737,96738],{"class":283},"#  [0. 0. 0. 1.]]\n",[195,96740,96742],{"id":96741},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[39,96744,96746],{"className":41,"code":96745,"language":43,"meta":44,"style":44},"#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",[46,96747,96748,96753,96757,96762,96767,96772,96777,96782,96787,96792,96797],{"__ignoreMap":44},[49,96749,96750],{"class":51,"line":52},[49,96751,96752],{"class":283},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[49,96754,96755],{"class":51,"line":84},[49,96756,95761],{"class":328},[49,96758,96759],{"class":51,"line":109},[49,96760,96761],{"class":328},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[49,96763,96764],{"class":51,"line":120},[49,96765,96766],{"class":328},"参数介绍：\n",[49,96768,96769],{"class":51,"line":135},[49,96770,96771],{"class":328},"start：序列的起始值\n",[49,96773,96774],{"class":51,"line":1306},[49,96775,96776],{"class":328},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[49,96778,96779],{"class":51,"line":1312},[49,96780,96781],{"class":328},"num：要生长的等步长的样本数量，默认为50\n",[49,96783,96784],{"class":51,"line":1403},[49,96785,96786],{"class":328},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[49,96788,96789],{"class":51,"line":1409},[49,96790,96791],{"class":328},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[49,96793,96794],{"class":51,"line":1421},[49,96795,96796],{"class":328},"dtype：ndarry的数据类型\n",[49,96798,96799],{"class":51,"line":1704},[49,96800,95761],{"class":328},[14,96802,96803],{},[1554,96804],{"alt":44,"src":96805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96807,96808],{},"这里num=是可以省略的",[14,96810,96811],{},"也就是下方两行代码结果是一模一样的",[39,96813,96815],{"className":41,"code":96814,"language":43,"meta":44,"style":44},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[46,96816,96817,96834],{"__ignoreMap":44},[49,96818,96819,96822,96824,96826,96828,96830,96832],{"class":51,"line":52},[49,96820,96821],{"class":55},"np.linspace(",[49,96823,441],{"class":66},[49,96825,76],{"class":55},[49,96827,541],{"class":66},[49,96829,76],{"class":55},[49,96831,541],{"class":66},[49,96833,81],{"class":55},[49,96835,96836,96838,96840,96842,96844,96846,96848,96850,96852],{"class":51,"line":84},[49,96837,96821],{"class":55},[49,96839,441],{"class":66},[49,96841,76],{"class":55},[49,96843,541],{"class":66},[49,96845,76],{"class":55},[49,96847,1757],{"class":126},[49,96849,60],{"class":59},[49,96851,541],{"class":66},[49,96853,81],{"class":55},[195,96855,96857],{"id":96856},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[39,96859,96861],{"className":41,"code":96860,"language":43,"meta":44,"style":44},"#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",[46,96862,96863,96868,96872,96877,96882,96887,96892,96896,96901,96906,96910],{"__ignoreMap":44},[49,96864,96865],{"class":51,"line":52},[49,96866,96867],{"class":283},"#logspace函数用于创建一个等比数列，格式如下：\n",[49,96869,96870],{"class":51,"line":84},[49,96871,95761],{"class":328},[49,96873,96874],{"class":51,"line":109},[49,96875,96876],{"class":328},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[49,96878,96879],{"class":51,"line":120},[49,96880,96881],{"class":328},"参数为：\n",[49,96883,96884],{"class":51,"line":135},[49,96885,96886],{"class":328},"start:序列的起始位置为：base**start\n",[49,96888,96889],{"class":51,"line":1306},[49,96890,96891],{"class":328},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[49,96893,96894],{"class":51,"line":1312},[49,96895,96781],{"class":328},[49,96897,96898],{"class":51,"line":1403},[49,96899,96900],{"class":328},"endpoint：是否包含 stop 这个值，默认是 True\n",[49,96902,96903],{"class":51,"line":1409},[49,96904,96905],{"class":328},"base：对数的底数，默认是 10（常见对数）\n",[49,96907,96908],{"class":51,"line":1421},[49,96909,96796],{"class":328},[49,96911,96912],{"class":51,"line":1704},[49,96913,95761],{"class":328},[14,96915,96916],{},[1554,96917],{"alt":44,"src":96918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96920,96921],{},"logspace()函数中的num参数也是可以不写num=的",[14,96923,96924],{},"endpoint是不可以省略的",[143,96926,96927],{},"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":44,"searchDepth":84,"depth":84,"links":96929},[96930,96934,96939,96943,96947,96948],{"id":95319,"depth":84,"text":95320,"children":96931},[96932,96933],{"id":95323,"depth":109,"text":95324},{"id":95396,"depth":109,"text":95397},{"id":95428,"depth":84,"text":95429,"children":96935},[96936,96937,96938],{"id":95432,"depth":109,"text":95433},{"id":95614,"depth":109,"text":95615},{"id":95692,"depth":109,"text":95693},{"id":95727,"depth":84,"text":95728,"children":96940},[96941,96942],{"id":95731,"depth":109,"text":95732},{"id":95788,"depth":109,"text":95789},{"id":95884,"depth":84,"text":95885,"children":96944},[96945,96946],{"id":95888,"depth":109,"text":95889},{"id":95900,"depth":109,"text":95901},{"id":95934,"depth":84,"text":95935},{"id":95971,"depth":84,"text":95972,"children":96949},[96950,96951,96952,96953,96954,96955,96956,96957],{"id":95975,"depth":109,"text":95976},{"id":96200,"depth":109,"text":96201},{"id":96207,"depth":109,"text":96208},{"id":96416,"depth":109,"text":96417},{"id":96436,"depth":109,"text":96437},{"id":96572,"depth":109,"text":96573},{"id":96741,"depth":109,"text":96742},{"id":96856,"depth":109,"text":96857},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95311,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96964,"title":96965,"body":96966,"description":148,"extension":149,"meta":97059,"navigation":151,"path":97060,"seo":97061,"stem":97062,"__hash__":97063},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96967,"toc":97057},[96968,96971,96974,96977,96980,96983,96986,96989,96992,96995,96998,97001,97003,97006,97009,97014,97017,97020,97054],[10,96969,96965],{"id":96970},"_20魔法命令mprun",[14,96972,96973],{},"逐行分析数据内存的使用情况",[14,96975,96976],{},"语法格式：",[14,96978,96979],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96981,96982],{},"分析结果列如下：",[14,96984,96985],{},"Line行号",[14,96987,96988],{},"Mem usage内存使用大小",[14,96990,96991],{},"increment内存增量",[14,96993,96994],{},"Line content代码内容",[14,96996,96997],{},"补充说明：",[14,96999,97000],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97002,95266],{},[14,97004,97005],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97007,97008],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97010,97011],{},[1554,97012],{"alt":44,"src":97013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97015,97016],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97018,97019],{},"这时候需要重新加载模块",[39,97021,97023],{"className":41,"code":97022,"language":43,"meta":44,"style":44},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[46,97024,97025,97030,97037,97042],{"__ignoreMap":44},[49,97026,97027],{"class":51,"line":52},[49,97028,97029],{"class":283},"#重新加载模块\n",[49,97031,97032,97034],{"class":51,"line":84},[49,97033,30481],{"class":59},[49,97035,97036],{"class":55}," importlib\n",[49,97038,97039],{"class":51,"line":109},[49,97040,97041],{"class":55},"importlib.reload(mprun_test)\n",[49,97043,97044,97046,97049,97051],{"class":51,"line":120},[49,97045,550],{"class":59},[49,97047,97048],{"class":55},"mprun ",[49,97050,751],{"class":59},[49,97052,97053],{"class":55},"f mprun_test.fun_test mprun_test.fun_test()\n",[143,97055,97056],{},"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":44,"searchDepth":84,"depth":84,"links":97058},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96965,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97065,"title":97066,"body":97067,"description":148,"extension":149,"meta":97084,"navigation":151,"path":97085,"seo":97086,"stem":97087,"__hash__":97088},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97068,"toc":97082},[97069,97072,97077],[10,97070,97066],{"id":97071},"_3一维数组的索引和切片",[14,97073,97074],{},[1554,97075],{"alt":44,"src":97076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97078,97079],{},[1554,97080],{"alt":44,"src":97081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":44,"searchDepth":84,"depth":84,"links":97083},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97066,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97090,"title":97091,"body":97092,"description":148,"extension":149,"meta":97575,"navigation":151,"path":97576,"seo":97577,"stem":97578,"__hash__":97579},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97093,"toc":97573},[97094,97097,97100,97105,97138,97141,97179,97182,97216,97219,97324,97327,97364,97367,97468,97471,97522,97525,97567,97570],[10,97095,97091],{"id":97096},"_4二维数组的索引与切片",[14,97098,97099],{},"①获取指定单个元素",[14,97101,97102],{},[1554,97103],{"alt":44,"src":97104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[39,97106,97108],{"className":41,"code":97107,"language":43,"meta":44,"style":44},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[46,97109,97110,97115,97120,97125],{"__ignoreMap":44},[49,97111,97112],{"class":51,"line":52},[49,97113,97114],{"class":283},"#获取元素9\n",[49,97116,97117],{"class":51,"line":84},[49,97118,97119],{"class":283},"#先获取所在行，再获取所在列\n",[49,97121,97122],{"class":51,"line":109},[49,97123,97124],{"class":283},"#数组[行索引号，列索引号]\n",[49,97126,97127,97130,97132,97134,97136],{"class":51,"line":120},[49,97128,97129],{"class":55},"a[",[49,97131,441],{"class":66},[49,97133,76],{"class":55},[49,97135,301],{"class":66},[49,97137,33335],{"class":55},[14,97139,97140],{},"②获取整行元素",[39,97142,97144],{"className":41,"code":97143,"language":43,"meta":44,"style":44},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[46,97145,97146,97151,97156,97164,97169],{"__ignoreMap":44},[49,97147,97148],{"class":51,"line":52},[49,97149,97150],{"class":283},"#获取整行 数组[行索引号]\n",[49,97152,97153],{"class":51,"line":84},[49,97154,97155],{"class":283},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[49,97157,97158,97160,97162],{"class":51,"line":109},[49,97159,97129],{"class":55},[49,97161,301],{"class":66},[49,97163,33335],{"class":55},[49,97165,97166],{"class":51,"line":120},[49,97167,97168],{"class":283},"#也可以负索引获取一行\n",[49,97170,97171,97173,97175,97177],{"class":51,"line":135},[49,97172,97129],{"class":55},[49,97174,751],{"class":59},[49,97176,441],{"class":66},[49,97178,33335],{"class":55},[14,97180,97181],{},"③获取整列元素",[39,97183,97185],{"className":41,"code":97184,"language":43,"meta":44,"style":44},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[46,97186,97187,97192,97201,97206],{"__ignoreMap":44},[49,97188,97189],{"class":51,"line":52},[49,97190,97191],{"class":283},"#获取整列 数组名[:,列索引]\n",[49,97193,97194,97197,97199],{"class":51,"line":84},[49,97195,97196],{"class":55},"a[:,",[49,97198,301],{"class":66},[49,97200,33335],{"class":55},[49,97202,97203],{"class":51,"line":109},[49,97204,97205],{"class":283},"#也可以负索引获取一列\n",[49,97207,97208,97210,97212,97214],{"class":51,"line":120},[49,97209,97196],{"class":55},[49,97211,751],{"class":59},[49,97213,441],{"class":66},[49,97215,33335],{"class":55},[14,97217,97218],{},"④部分行部分列的元素",[39,97220,97222],{"className":41,"code":97221,"language":43,"meta":44,"style":44},"#部分行部分列 数组名[行切片，列切片]\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",[46,97223,97224,97229,97239,97243,97247,97252,97257,97261,97273,97277,97281,97286,97291,97296,97301,97305,97310],{"__ignoreMap":44},[49,97225,97226],{"class":51,"line":52},[49,97227,97228],{"class":283},"#部分行部分列 数组名[行切片，列切片]\n",[49,97230,97231,97234,97236],{"class":51,"line":84},[49,97232,97233],{"class":55},"a[:",[49,97235,301],{"class":66},[49,97237,97238],{"class":55},",:]\n",[49,97240,97241],{"class":51,"line":109},[49,97242,93627],{"class":283},[49,97244,97245],{"class":51,"line":120},[49,97246,93991],{"class":328},[49,97248,97249],{"class":51,"line":135},[49,97250,97251],{"class":328},"array([[ 1,  2,  3,  4,  5,  6],\n",[49,97253,97254],{"class":51,"line":1306},[49,97255,97256],{"class":328},"       [ 7,  8,  9, 10, 11, 12]])\n",[49,97258,97259],{"class":51,"line":1312},[49,97260,93991],{"class":328},[49,97262,97263,97265,97267,97269,97271],{"class":51,"line":1403},[49,97264,97196],{"class":55},[49,97266,441],{"class":66},[49,97268,1078],{"class":55},[49,97270,515],{"class":66},[49,97272,33335],{"class":55},[49,97274,97275],{"class":51,"line":1409},[49,97276,93627],{"class":283},[49,97278,97279],{"class":51,"line":1421},[49,97280,93991],{"class":328},[49,97282,97283],{"class":51,"line":1704},[49,97284,97285],{"class":328},"array([[ 2,  3,  4],\n",[49,97287,97288],{"class":51,"line":1709},[49,97289,97290],{"class":328},"       [ 8,  9, 10],\n",[49,97292,97293],{"class":51,"line":1715},[49,97294,97295],{"class":328},"       [14, 15, 16],\n",[49,97297,97298],{"class":51,"line":1720},[49,97299,97300],{"class":328},"       [20, 21, 22]])\n",[49,97302,97303],{"class":51,"line":1734},[49,97304,93991],{"class":328},[49,97306,97307],{"class":51,"line":1739},[49,97308,97309],{"class":283},"#对列行同时进行切片，使用了step参数\n",[49,97311,97312,97315,97317,97320,97322],{"class":51,"line":1745},[49,97313,97314],{"class":55},"a[::",[49,97316,301],{"class":66},[49,97318,97319],{"class":55},",::",[49,97321,301],{"class":66},[49,97323,33335],{"class":55},[14,97325,97326],{},"⑤同时获取两个元素",[39,97328,97330],{"className":41,"code":97329,"language":43,"meta":44,"style":44},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[46,97331,97332,97337,97342],{"__ignoreMap":44},[49,97333,97334],{"class":51,"line":52},[49,97335,97336],{"class":283},"#同时获取第三行第二列，第四行第一列\n",[49,97338,97339],{"class":51,"line":84},[49,97340,97341],{"class":283},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[49,97343,97344,97347,97349,97351,97353,97355,97357,97359,97361],{"class":51,"line":109},[49,97345,97346],{"class":55},"a[(",[49,97348,301],{"class":66},[49,97350,76],{"class":55},[49,97352,73],{"class":66},[49,97354,42336],{"class":55},[49,97356,441],{"class":66},[49,97358,76],{"class":55},[49,97360,415],{"class":66},[49,97362,97363],{"class":55},")]\n",[14,97365,97366],{},"⑥切片，对行进行反向获取",[39,97368,97370],{"className":41,"code":97369,"language":43,"meta":44,"style":44},"#切片 对所有行进行反向获取\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",[46,97371,97372,97377,97387,97391,97395,97400,97405,97410,97415,97419,97424,97440,97444,97449,97454,97459,97464],{"__ignoreMap":44},[49,97373,97374],{"class":51,"line":52},[49,97375,97376],{"class":283},"#切片 对所有行进行反向获取\n",[49,97378,97379,97381,97383,97385],{"class":51,"line":84},[49,97380,97314],{"class":55},[49,97382,751],{"class":59},[49,97384,441],{"class":66},[49,97386,33335],{"class":55},[49,97388,97389],{"class":51,"line":109},[49,97390,93627],{"class":283},[49,97392,97393],{"class":51,"line":120},[49,97394,93991],{"class":328},[49,97396,97397],{"class":51,"line":135},[49,97398,97399],{"class":328},"array([[19, 20, 21, 22, 23, 24],\n",[49,97401,97402],{"class":51,"line":1306},[49,97403,97404],{"class":328},"       [13, 14, 15, 16, 17, 18],\n",[49,97406,97407],{"class":51,"line":1312},[49,97408,97409],{"class":328},"       [ 7,  8,  9, 10, 11, 12],\n",[49,97411,97412],{"class":51,"line":1403},[49,97413,97414],{"class":328},"       [ 1,  2,  3,  4,  5,  6]])\n",[49,97416,97417],{"class":51,"line":1409},[49,97418,93991],{"class":328},[49,97420,97421],{"class":51,"line":1421},[49,97422,97423],{"class":283},"#对行列都进行反向切片获取\n",[49,97425,97426,97428,97430,97432,97434,97436,97438],{"class":51,"line":1704},[49,97427,97314],{"class":55},[49,97429,751],{"class":59},[49,97431,441],{"class":66},[49,97433,97319],{"class":55},[49,97435,751],{"class":59},[49,97437,441],{"class":66},[49,97439,33335],{"class":55},[49,97441,97442],{"class":51,"line":1709},[49,97443,93991],{"class":328},[49,97445,97446],{"class":51,"line":1715},[49,97447,97448],{"class":328},"array([[24, 23, 22, 21, 20, 19],\n",[49,97450,97451],{"class":51,"line":1720},[49,97452,97453],{"class":328},"       [18, 17, 16, 15, 14, 13],\n",[49,97455,97456],{"class":51,"line":1734},[49,97457,97458],{"class":328},"       [12, 11, 10,  9,  8,  7],\n",[49,97460,97461],{"class":51,"line":1739},[49,97462,97463],{"class":328},"       [ 6,  5,  4,  3,  2,  1]])\n",[49,97465,97466],{"class":51,"line":1745},[49,97467,93991],{"class":328},[14,97469,97470],{},"⑦修改元素",[39,97472,97474],{"className":41,"code":97473,"language":43,"meta":44,"style":44},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[46,97475,97476,97481,97499,97504],{"__ignoreMap":44},[49,97477,97478],{"class":51,"line":52},[49,97479,97480],{"class":283},"#获取前两行和前两列\n",[49,97482,97483,97486,97488,97490,97492,97495,97497],{"class":51,"line":84},[49,97484,97485],{"class":55},"sub_a",[49,97487,60],{"class":59},[49,97489,97233],{"class":55},[49,97491,301],{"class":66},[49,97493,97494],{"class":55},",:",[49,97496,301],{"class":66},[49,97498,33335],{"class":55},[49,97500,97501],{"class":51,"line":109},[49,97502,97503],{"class":283},"#修改sub_a第一个元素的值\n",[49,97505,97506,97509,97511,97513,97515,97517,97519],{"class":51,"line":120},[49,97507,97508],{"class":55},"sub_a[",[49,97510,415],{"class":66},[49,97512,76],{"class":55},[49,97514,415],{"class":66},[49,97516,1159],{"class":55},[49,97518,60],{"class":59},[49,97520,97521],{"class":66},"100\n",[14,97523,97524],{},"⑧数组复制copy()",[39,97526,97528],{"className":41,"code":97527,"language":43,"meta":44,"style":44},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[46,97529,97530,97535,97545,97550],{"__ignoreMap":44},[49,97531,97532],{"class":51,"line":52},[49,97533,97534],{"class":283},"#数组复制\n",[49,97536,97537,97540,97542],{"class":51,"line":84},[49,97538,97539],{"class":55},"copy_a",[49,97541,60],{"class":59},[49,97543,97544],{"class":55},"np.copy(sub_a)\n",[49,97546,97547],{"class":51,"line":109},[49,97548,97549],{"class":283},"#修改copy_a后不影响原数组\n",[49,97551,97552,97555,97557,97559,97561,97563,97565],{"class":51,"line":120},[49,97553,97554],{"class":55},"copy_a[",[49,97556,415],{"class":66},[49,97558,76],{"class":55},[49,97560,415],{"class":66},[49,97562,1159],{"class":55},[49,97564,60],{"class":59},[49,97566,97521],{"class":66},[14,97568,97569],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[143,97571,97572],{},"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":44,"searchDepth":84,"depth":84,"links":97574},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97091,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97581,"title":97582,"body":97583,"description":148,"extension":149,"meta":98075,"navigation":151,"path":98076,"seo":98077,"stem":98078,"__hash__":98079},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97584,"toc":98067},[97585,97588,97592,97595,97598,97651,97654,97679,97682,97701,97721,97724,97740,97744,97790,97794,97836,97840,97843,97846,97849,97852,97855,97917,97977,97981,97984,98041,98045,98050,98059,98064],[10,97586,97582],{"id":97587},"_5改变数组的维度",[166,97589,97591],{"id":97590},"_51-使用reshape","5.1 使用reshape()",[14,97593,97594],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97596,97597],{},"①一维数组转换为二维数组",[39,97599,97601],{"className":41,"code":97600,"language":43,"meta":44,"style":44},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[46,97602,97603,97619,97624,97629,97634],{"__ignoreMap":44},[49,97604,97605,97607,97609,97611,97613,97615,97617],{"class":51,"line":52},[49,97606,56],{"class":55},[49,97608,60],{"class":59},[49,97610,63],{"class":55},[49,97612,441],{"class":66},[49,97614,76],{"class":55},[49,97616,742],{"class":66},[49,97618,81],{"class":55},[49,97620,97621],{"class":51,"line":84},[49,97622,97623],{"class":283},"#将一维数组进行转换\n",[49,97625,97626],{"class":51,"line":109},[49,97627,97628],{"class":283},"#注意点：元素个数不可以变\n",[49,97630,97631],{"class":51,"line":120},[49,97632,97633],{"class":283},"#转换维度要保持一致，不一致就异常！！！\n",[49,97635,97636,97638,97640,97643,97645,97647,97649],{"class":51,"line":135},[49,97637,93369],{"class":55},[49,97639,60],{"class":59},[49,97641,97642],{"class":55},"a.reshape(",[49,97644,301],{"class":66},[49,97646,76],{"class":55},[49,97648,566],{"class":66},[49,97650,81],{"class":55},[14,97652,97653],{},"②一维数组转换为三维数组",[39,97655,97657],{"className":41,"code":97656,"language":43,"meta":44,"style":44},"aaa=a.reshape(2,3,2)\n",[46,97658,97659],{"__ignoreMap":44},[49,97660,97661,97663,97665,97667,97669,97671,97673,97675,97677],{"class":51,"line":52},[49,97662,95584],{"class":55},[49,97664,60],{"class":59},[49,97666,97642],{"class":55},[49,97668,301],{"class":66},[49,97670,76],{"class":55},[49,97672,73],{"class":66},[49,97674,76],{"class":55},[49,97676,301],{"class":66},[49,97678,81],{"class":55},[14,97680,97681],{},"③二维数组转化为一维数组",[39,97683,97685],{"className":41,"code":97684,"language":43,"meta":44,"style":44},"#知道元素个数：\naa.reshape(12)\n",[46,97686,97687,97692],{"__ignoreMap":44},[49,97688,97689],{"class":51,"line":52},[49,97690,97691],{"class":283},"#知道元素个数：\n",[49,97693,97694,97697,97699],{"class":51,"line":84},[49,97695,97696],{"class":55},"aa.reshape(",[49,97698,717],{"class":66},[49,97700,81],{"class":55},[39,97702,97704],{"className":41,"code":97703,"language":43,"meta":44,"style":44},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[46,97705,97706,97711],{"__ignoreMap":44},[49,97707,97708],{"class":51,"line":52},[49,97709,97710],{"class":283},"#不知道元素个数，参数传递-1\n",[49,97712,97713,97715,97717,97719],{"class":51,"line":84},[49,97714,97696],{"class":55},[49,97716,751],{"class":59},[49,97718,441],{"class":66},[49,97720,81],{"class":55},[14,97722,97723],{},"④三维数组转换为一维数组",[39,97725,97727],{"className":41,"code":97726,"language":43,"meta":44,"style":44},"aaa.reshape(-1)\n",[46,97728,97729],{"__ignoreMap":44},[49,97730,97731,97734,97736,97738],{"class":51,"line":52},[49,97732,97733],{"class":55},"aaa.reshape(",[49,97735,751],{"class":59},[49,97737,441],{"class":66},[49,97739,81],{"class":55},[166,97741,97743],{"id":97742},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[39,97745,97747],{"className":41,"code":97746,"language":43,"meta":44,"style":44},"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",[46,97748,97749,97776,97781,97785],{"__ignoreMap":44},[49,97750,97751,97753,97755,97757,97759,97761,97763,97765,97767,97769,97771,97773],{"class":51,"line":52},[49,97752,93369],{"class":55},[49,97754,60],{"class":59},[49,97756,63],{"class":55},[49,97758,441],{"class":66},[49,97760,76],{"class":55},[49,97762,742],{"class":66},[49,97764,70],{"class":55},[49,97766,301],{"class":66},[49,97768,76],{"class":55},[49,97770,566],{"class":66},[49,97772,649],{"class":55},[49,97774,97775],{"class":283},"#转换为2行6列的数组\n",[49,97777,97778],{"class":51,"line":84},[49,97779,97780],{"class":55},"aa.revel()\n",[49,97782,97783],{"class":51,"line":109},[49,97784,93627],{"class":283},[49,97786,97787],{"class":51,"line":120},[49,97788,97789],{"class":283},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[166,97791,97793],{"id":97792},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[39,97795,97797],{"className":41,"code":97796,"language":43,"meta":44,"style":44},"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",[46,97798,97799,97823,97828,97832],{"__ignoreMap":44},[49,97800,97801,97803,97805,97807,97809,97811,97813,97815,97817,97819,97821],{"class":51,"line":52},[49,97802,93369],{"class":55},[49,97804,60],{"class":59},[49,97806,63],{"class":55},[49,97808,441],{"class":66},[49,97810,76],{"class":55},[49,97812,742],{"class":66},[49,97814,70],{"class":55},[49,97816,301],{"class":66},[49,97818,76],{"class":55},[49,97820,566],{"class":66},[49,97822,81],{"class":55},[49,97824,97825],{"class":51,"line":84},[49,97826,97827],{"class":55},"aa.flatten()\n",[49,97829,97830],{"class":51,"line":109},[49,97831,93627],{"class":283},[49,97833,97834],{"class":51,"line":120},[49,97835,97789],{"class":283},[166,97837,97839],{"id":97838},"_54-使用resize","5.4 使用resize()",[14,97841,97842],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97844,97845],{},"通过resize方法可以改变数组的维度",[14,97847,97848],{},"#resize修改数组维度",[14,97850,97851],{},"#以元组的形式指定形状",[14,97853,97854],{},"#改变的是原数组",[39,97856,97858],{"className":41,"code":97857,"language":43,"meta":44,"style":44},"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",[46,97859,97860,97876,97896,97909,97913],{"__ignoreMap":44},[49,97861,97862,97864,97866,97868,97870,97872,97874],{"class":51,"line":52},[49,97863,56],{"class":55},[49,97865,60],{"class":59},[49,97867,63],{"class":55},[49,97869,441],{"class":66},[49,97871,76],{"class":55},[49,97873,742],{"class":66},[49,97875,81],{"class":55},[49,97877,97878,97881,97883,97885,97887,97889,97891,97893],{"class":51,"line":84},[49,97879,97880],{"class":55},"a.shape",[49,97882,60],{"class":59},[49,97884,228],{"class":55},[49,97886,301],{"class":66},[49,97888,76],{"class":55},[49,97890,566],{"class":66},[49,97892,649],{"class":55},[49,97894,97895],{"class":283},"#改变了原数组\n",[49,97897,97898,97900,97902,97905,97907],{"class":51,"line":109},[49,97899,56],{"class":55},[49,97901,60],{"class":59},[49,97903,97904],{"class":55},"resize((",[49,97906,717],{"class":66},[49,97908,30586],{"class":55},[49,97910,97911],{"class":51,"line":120},[49,97912,93627],{"class":283},[49,97914,97915],{"class":51,"line":135},[49,97916,97789],{"class":283},[39,97918,97920],{"className":41,"code":97919,"language":43,"meta":44,"style":44},"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",[46,97921,97922,97935,97939,97943,97948,97953,97958,97963,97968,97973],{"__ignoreMap":44},[49,97923,97924,97927,97929,97931,97933],{"class":51,"line":52},[49,97925,97926],{"class":55},"a.resize((",[49,97928,566],{"class":66},[49,97930,76],{"class":55},[49,97932,301],{"class":66},[49,97934,30586],{"class":55},[49,97936,97937],{"class":51,"line":84},[49,97938,93627],{"class":283},[49,97940,97941],{"class":51,"line":109},[49,97942,93991],{"class":328},[49,97944,97945],{"class":51,"line":120},[49,97946,97947],{"class":328},"array([[ 1,  2],\n",[49,97949,97950],{"class":51,"line":135},[49,97951,97952],{"class":328},"       [ 3,  4],\n",[49,97954,97955],{"class":51,"line":1306},[49,97956,97957],{"class":328},"       [ 5,  6],\n",[49,97959,97960],{"class":51,"line":1312},[49,97961,97962],{"class":328},"       [ 7,  8],\n",[49,97964,97965],{"class":51,"line":1403},[49,97966,97967],{"class":328},"       [ 9, 10],\n",[49,97969,97970],{"class":51,"line":1409},[49,97971,97972],{"class":328},"       [11, 12]])\n",[49,97974,97975],{"class":51,"line":1421},[49,97976,93991],{"class":328},[166,97978,97980],{"id":97979},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97982,97983],{},"改变了原数组",[39,97985,97987],{"className":41,"code":97986,"language":43,"meta":44,"style":44},"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",[46,97988,97989,98005,98021,98025,98029,98033,98037],{"__ignoreMap":44},[49,97990,97991,97993,97995,97997,97999,98001,98003],{"class":51,"line":52},[49,97992,56],{"class":55},[49,97994,60],{"class":59},[49,97996,63],{"class":55},[49,97998,441],{"class":66},[49,98000,76],{"class":55},[49,98002,742],{"class":66},[49,98004,81],{"class":55},[49,98006,98007,98009,98011,98013,98015,98017,98019],{"class":51,"line":84},[49,98008,97880],{"class":55},[49,98010,60],{"class":59},[49,98012,228],{"class":55},[49,98014,301],{"class":66},[49,98016,76],{"class":55},[49,98018,566],{"class":66},[49,98020,81],{"class":55},[49,98022,98023],{"class":51,"line":109},[49,98024,93627],{"class":283},[49,98026,98027],{"class":51,"line":120},[49,98028,93991],{"class":328},[49,98030,98031],{"class":51,"line":135},[49,98032,97251],{"class":328},[49,98034,98035],{"class":51,"line":1306},[49,98036,97256],{"class":328},[49,98038,98039],{"class":51,"line":1312},[49,98040,93991],{"class":328},[166,98042,98044],{"id":98043},"_56-重要比较","5.6 重要比较：",[14,98046,98047],{},[1554,98048],{"alt":44,"src":98049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98051,98052,98053,98055,98056,98058],{},"口诀：NumPy 函数要么用 ",[46,98054,96026],{},"，要么用 ",[46,98057,31585],{},"，创建结构用 shape，造数据用 size",[14,98060,98061],{},[1554,98062],{"alt":44,"src":98063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[143,98065,98066],{},"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":44,"searchDepth":84,"depth":84,"links":98068},[98069,98070,98071,98072,98073,98074],{"id":97590,"depth":84,"text":97591},{"id":97742,"depth":84,"text":97743},{"id":97792,"depth":84,"text":97793},{"id":97838,"depth":84,"text":97839},{"id":97979,"depth":84,"text":97980},{"id":98043,"depth":84,"text":98044},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97582,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98081,"title":98082,"body":98083,"description":148,"extension":149,"meta":99155,"navigation":151,"path":99156,"seo":99157,"stem":99158,"__hash__":99159},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98084,"toc":99149},[98085,98088,98092,98095,98098,98101,98166,98169,98209,98212,98294,98297,98302,98324,98326,98331,98336,98339,98342,98497,98500,98702,98706,98709,98712,98780,98782,98787,98790,98793,98873,98877,98880,98882,98955,98957,98962,98964,99044,99048,99051,99054,99057,99060,99063,99066,99146],[10,98086,98082],{"id":98087},"_6数组的拼接",[166,98089,98091],{"id":98090},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98093,98094],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98096,98097],{},"函数内部传两个数列构成的数列或者元组",[14,98099,98100],{},"①一维数组的拼接",[39,98102,98104],{"className":41,"code":98103,"language":43,"meta":44,"style":44},"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",[46,98105,98106,98126,98146,98151,98156,98161],{"__ignoreMap":44},[49,98107,98108,98110,98112,98114,98116,98118,98120,98122,98124],{"class":51,"line":52},[49,98109,56],{"class":55},[49,98111,60],{"class":59},[49,98113,92],{"class":55},[49,98115,441],{"class":66},[49,98117,76],{"class":55},[49,98119,301],{"class":66},[49,98121,76],{"class":55},[49,98123,73],{"class":66},[49,98125,106],{"class":55},[49,98127,98128,98130,98132,98134,98136,98138,98140,98142,98144],{"class":51,"line":84},[49,98129,87],{"class":55},[49,98131,60],{"class":59},[49,98133,92],{"class":55},[49,98135,515],{"class":66},[49,98137,76],{"class":55},[49,98139,541],{"class":66},[49,98141,76],{"class":55},[49,98143,566],{"class":66},[49,98145,106],{"class":55},[49,98147,98148],{"class":51,"line":109},[49,98149,98150],{"class":283},"#调用concatenate进行数组拼接\n",[49,98152,98153],{"class":51,"line":120},[49,98154,98155],{"class":55},"np.concatenate((a,b))\n",[49,98157,98158],{"class":51,"line":135},[49,98159,98160],{"class":283},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[49,98162,98163],{"class":51,"line":1306},[49,98164,98165],{"class":283},"#np.concatenate([a,b])\n",[14,98167,98168],{},"②一维多个数组拼接",[39,98170,98172],{"className":41,"code":98171,"language":43,"meta":44,"style":44},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[46,98173,98174,98179,98199,98204],{"__ignoreMap":44},[49,98175,98176],{"class":51,"line":52},[49,98177,98178],{"class":283},"#也可以多个数组进行拼接\n",[49,98180,98181,98183,98185,98187,98189,98191,98193,98195,98197],{"class":51,"line":84},[49,98182,510],{"class":55},[49,98184,60],{"class":59},[49,98186,92],{"class":55},[49,98188,95],{"class":66},[49,98190,76],{"class":55},[49,98192,691],{"class":66},[49,98194,76],{"class":55},[49,98196,742],{"class":66},[49,98198,106],{"class":55},[49,98200,98201],{"class":51,"line":109},[49,98202,98203],{"class":55},"c\n",[49,98205,98206],{"class":51,"line":120},[49,98207,98208],{"class":55},"np.concatenate((a,b,c))\n",[14,98210,98211],{},"③二维数组拼接",[39,98213,98215],{"className":41,"code":98214,"language":43,"meta":44,"style":44},"#二维数组使用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",[46,98216,98217,98222,98246,98271,98276,98281],{"__ignoreMap":44},[49,98218,98219],{"class":51,"line":52},[49,98220,98221],{"class":283},"#二维数组使用concatenate进行拼接\n",[49,98223,98224,98226,98228,98230,98232,98234,98236,98238,98240,98242,98244],{"class":51,"line":84},[49,98225,93369],{"class":55},[49,98227,60],{"class":59},[49,98229,63],{"class":55},[49,98231,441],{"class":66},[49,98233,76],{"class":55},[49,98235,742],{"class":66},[49,98237,70],{"class":55},[49,98239,73],{"class":66},[49,98241,76],{"class":55},[49,98243,515],{"class":66},[49,98245,81],{"class":55},[49,98247,98248,98251,98253,98255,98257,98259,98261,98263,98265,98267,98269],{"class":51,"line":109},[49,98249,98250],{"class":55},"bb",[49,98252,60],{"class":59},[49,98254,63],{"class":55},[49,98256,559],{"class":66},[49,98258,76],{"class":55},[49,98260,861],{"class":66},[49,98262,70],{"class":55},[49,98264,73],{"class":66},[49,98266,76],{"class":55},[49,98268,515],{"class":66},[49,98270,81],{"class":55},[49,98272,98273],{"class":51,"line":120},[49,98274,98275],{"class":283},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[49,98277,98278],{"class":51,"line":135},[49,98279,98280],{"class":283},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[49,98282,98283,98286,98288,98290,98292],{"class":51,"line":1306},[49,98284,98285],{"class":55},"np.concatenate((aa,bb),",[49,98287,47603],{"class":126},[49,98289,60],{"class":59},[49,98291,415],{"class":66},[49,98293,81],{"class":55},[14,98295,98296],{},"结果：",[14,98298,98299],{},[1554,98300],{"alt":44,"src":98301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[39,98303,98305],{"className":41,"code":98304,"language":43,"meta":44,"style":44},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[46,98306,98307,98312],{"__ignoreMap":44},[49,98308,98309],{"class":51,"line":52},[49,98310,98311],{"class":283},"#指定axis为1进行拼接\n",[49,98313,98314,98316,98318,98320,98322],{"class":51,"line":84},[49,98315,98285],{"class":55},[49,98317,47603],{"class":126},[49,98319,60],{"class":59},[49,98321,441],{"class":66},[49,98323,81],{"class":55},[14,98325,98296],{},[14,98327,98328],{},[1554,98329],{"alt":44,"src":98330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98332,98333],{},[373,98334,98335],{},"二维数组总结：0竖着方向，1横着方向",[14,98337,98338],{},"④三维数组拼接",[14,98340,98341],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[39,98343,98345],{"className":41,"code":98344,"language":43,"meta":44,"style":44},"#两个三行六列\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",[46,98346,98347,98352,98380,98410,98415,98432,98437,98442,98447,98464,98469,98474,98479,98492],{"__ignoreMap":44},[49,98348,98349],{"class":51,"line":52},[49,98350,98351],{"class":283},"#两个三行六列\n",[49,98353,98354,98356,98358,98360,98362,98364,98366,98368,98370,98372,98374,98376,98378],{"class":51,"line":84},[49,98355,95584],{"class":55},[49,98357,60],{"class":59},[49,98359,63],{"class":55},[49,98361,441],{"class":66},[49,98363,76],{"class":55},[49,98365,547],{"class":66},[49,98367,70],{"class":55},[49,98369,301],{"class":66},[49,98371,76],{"class":55},[49,98373,73],{"class":66},[49,98375,76],{"class":55},[49,98377,566],{"class":66},[49,98379,81],{"class":55},[49,98381,98382,98385,98387,98389,98391,98393,98396,98398,98400,98402,98404,98406,98408],{"class":51,"line":109},[49,98383,98384],{"class":55},"bbb",[49,98386,60],{"class":59},[49,98388,63],{"class":55},[49,98390,559],{"class":66},[49,98392,76],{"class":55},[49,98394,98395],{"class":66},"137",[49,98397,70],{"class":55},[49,98399,301],{"class":66},[49,98401,76],{"class":55},[49,98403,73],{"class":66},[49,98405,76],{"class":55},[49,98407,566],{"class":66},[49,98409,81],{"class":55},[49,98411,98412],{"class":51,"line":120},[49,98413,98414],{"class":283},"#axis=0\n",[49,98416,98417,98419,98421,98424,98426,98428,98430],{"class":51,"line":135},[49,98418,914],{"class":55},[49,98420,60],{"class":59},[49,98422,98423],{"class":55},"np.concatenate((aaa,bbb),",[49,98425,47603],{"class":126},[49,98427,60],{"class":59},[49,98429,415],{"class":66},[49,98431,81],{"class":55},[49,98433,98434],{"class":51,"line":1306},[49,98435,98436],{"class":55},"s.shape\n",[49,98438,98439],{"class":51,"line":1312},[49,98440,98441],{"class":283},"#输出：(4,3,6)\n",[49,98443,98444],{"class":51,"line":1403},[49,98445,98446],{"class":283},"#axis=1\n",[49,98448,98449,98452,98454,98456,98458,98460,98462],{"class":51,"line":1409},[49,98450,98451],{"class":55},"ss",[49,98453,60],{"class":59},[49,98455,98423],{"class":55},[49,98457,47603],{"class":126},[49,98459,60],{"class":59},[49,98461,441],{"class":66},[49,98463,81],{"class":55},[49,98465,98466],{"class":51,"line":1421},[49,98467,98468],{"class":55},"ss.shape\n",[49,98470,98471],{"class":51,"line":1704},[49,98472,98473],{"class":283},"#输出：(2,6,6)\n",[49,98475,98476],{"class":51,"line":1709},[49,98477,98478],{"class":283},"#axis=2\n",[49,98480,98481,98483,98485,98487,98489],{"class":51,"line":1715},[49,98482,98423],{"class":55},[49,98484,47603],{"class":126},[49,98486,60],{"class":59},[49,98488,301],{"class":66},[49,98490,98491],{"class":55},").shape\n",[49,98493,98494],{"class":51,"line":1720},[49,98495,98496],{"class":283},"#输出：（2，3，12）\n",[14,98498,98499],{},"⑤四维数组拼接",[39,98501,98503],{"className":41,"code":98502,"language":43,"meta":44,"style":44},"#两个三行六列\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",[46,98504,98505,98509,98537,98565,98590,98616,98620,98633,98638,98642,98654,98659,98663,98675,98680,98685,98697],{"__ignoreMap":44},[49,98506,98507],{"class":51,"line":52},[49,98508,98351],{"class":283},[49,98510,98511,98513,98515,98517,98519,98521,98523,98525,98527,98529,98531,98533,98535],{"class":51,"line":84},[49,98512,95584],{"class":55},[49,98514,60],{"class":59},[49,98516,63],{"class":55},[49,98518,441],{"class":66},[49,98520,76],{"class":55},[49,98522,547],{"class":66},[49,98524,70],{"class":55},[49,98526,301],{"class":66},[49,98528,76],{"class":55},[49,98530,73],{"class":66},[49,98532,76],{"class":55},[49,98534,566],{"class":66},[49,98536,81],{"class":55},[49,98538,98539,98541,98543,98545,98547,98549,98551,98553,98555,98557,98559,98561,98563],{"class":51,"line":109},[49,98540,98384],{"class":55},[49,98542,60],{"class":59},[49,98544,63],{"class":55},[49,98546,559],{"class":66},[49,98548,76],{"class":55},[49,98550,98395],{"class":66},[49,98552,70],{"class":55},[49,98554,301],{"class":66},[49,98556,76],{"class":55},[49,98558,73],{"class":66},[49,98560,76],{"class":55},[49,98562,566],{"class":66},[49,98564,81],{"class":55},[49,98566,98567,98570,98572,98574,98576,98578,98580,98582,98584,98586,98588],{"class":51,"line":120},[49,98568,98569],{"class":55},"aaaa",[49,98571,60],{"class":59},[49,98573,97733],{"class":55},[49,98575,301],{"class":66},[49,98577,76],{"class":55},[49,98579,73],{"class":66},[49,98581,76],{"class":55},[49,98583,73],{"class":66},[49,98585,76],{"class":55},[49,98587,301],{"class":66},[49,98589,81],{"class":55},[49,98591,98592,98595,98597,98600,98602,98604,98606,98608,98610,98612,98614],{"class":51,"line":135},[49,98593,98594],{"class":55},"bbbb",[49,98596,60],{"class":59},[49,98598,98599],{"class":55},"bbb.reshape(",[49,98601,301],{"class":66},[49,98603,76],{"class":55},[49,98605,73],{"class":66},[49,98607,76],{"class":55},[49,98609,73],{"class":66},[49,98611,76],{"class":55},[49,98613,301],{"class":66},[49,98615,81],{"class":55},[49,98617,98618],{"class":51,"line":1306},[49,98619,98414],{"class":283},[49,98621,98622,98625,98627,98629,98631],{"class":51,"line":1312},[49,98623,98624],{"class":55},"np.concatenate((aaaa,bbbb),",[49,98626,47603],{"class":126},[49,98628,60],{"class":59},[49,98630,415],{"class":66},[49,98632,98491],{"class":55},[49,98634,98635],{"class":51,"line":1403},[49,98636,98637],{"class":283},"#结果：（4，3，3，2）\n",[49,98639,98640],{"class":51,"line":1409},[49,98641,98446],{"class":283},[49,98643,98644,98646,98648,98650,98652],{"class":51,"line":1421},[49,98645,98624],{"class":55},[49,98647,47603],{"class":126},[49,98649,60],{"class":59},[49,98651,441],{"class":66},[49,98653,98491],{"class":55},[49,98655,98656],{"class":51,"line":1704},[49,98657,98658],{"class":283},"#结果：（2，6，3，2）\n",[49,98660,98661],{"class":51,"line":1709},[49,98662,98478],{"class":283},[49,98664,98665,98667,98669,98671,98673],{"class":51,"line":1715},[49,98666,98624],{"class":55},[49,98668,47603],{"class":126},[49,98670,60],{"class":59},[49,98672,301],{"class":66},[49,98674,98491],{"class":55},[49,98676,98677],{"class":51,"line":1720},[49,98678,98679],{"class":283},"#结果：（2，3，6，2）\n",[49,98681,98682],{"class":51,"line":1734},[49,98683,98684],{"class":283},"#axis=3\n",[49,98686,98687,98689,98691,98693,98695],{"class":51,"line":1739},[49,98688,98624],{"class":55},[49,98690,47603],{"class":126},[49,98692,60],{"class":59},[49,98694,73],{"class":66},[49,98696,98491],{"class":55},[49,98698,98699],{"class":51,"line":1745},[49,98700,98701],{"class":283},"#结果：（2，3，3，4）\n",[166,98703,98705],{"id":98704},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98707,98708],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98710,98711],{},"①二维数组",[39,98713,98715],{"className":41,"code":98714,"language":43,"meta":44,"style":44},"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",[46,98716,98717,98741,98765,98770,98775],{"__ignoreMap":44},[49,98718,98719,98721,98723,98725,98727,98729,98731,98733,98735,98737,98739],{"class":51,"line":52},[49,98720,93369],{"class":55},[49,98722,60],{"class":59},[49,98724,63],{"class":55},[49,98726,441],{"class":66},[49,98728,76],{"class":55},[49,98730,742],{"class":66},[49,98732,70],{"class":55},[49,98734,73],{"class":66},[49,98736,76],{"class":55},[49,98738,515],{"class":66},[49,98740,81],{"class":55},[49,98742,98743,98745,98747,98749,98751,98753,98755,98757,98759,98761,98763],{"class":51,"line":84},[49,98744,98250],{"class":55},[49,98746,60],{"class":59},[49,98748,63],{"class":55},[49,98750,559],{"class":66},[49,98752,76],{"class":55},[49,98754,861],{"class":66},[49,98756,70],{"class":55},[49,98758,73],{"class":66},[49,98760,76],{"class":55},[49,98762,515],{"class":66},[49,98764,81],{"class":55},[49,98766,98767],{"class":51,"line":109},[49,98768,98769],{"class":55},"np.hstack((aa,bb))\n",[49,98771,98772],{"class":51,"line":120},[49,98773,98774],{"class":283},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[49,98776,98777],{"class":51,"line":135},[49,98778,98779],{"class":283},"#np.hstack([aa,bb])\n",[14,98781,98296],{},[14,98783,98784],{},[1554,98785],{"alt":44,"src":98786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98788,98789],{},"等效于concatenate()函数中axis=1时的情况",[14,98791,98792],{},"②三维数组",[39,98794,98796],{"className":41,"code":98795,"language":43,"meta":44,"style":44},"#两个三行六列\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",[46,98797,98798,98802,98830,98858,98863,98868],{"__ignoreMap":44},[49,98799,98800],{"class":51,"line":52},[49,98801,98351],{"class":283},[49,98803,98804,98806,98808,98810,98812,98814,98816,98818,98820,98822,98824,98826,98828],{"class":51,"line":84},[49,98805,95584],{"class":55},[49,98807,60],{"class":59},[49,98809,63],{"class":55},[49,98811,441],{"class":66},[49,98813,76],{"class":55},[49,98815,547],{"class":66},[49,98817,70],{"class":55},[49,98819,301],{"class":66},[49,98821,76],{"class":55},[49,98823,73],{"class":66},[49,98825,76],{"class":55},[49,98827,566],{"class":66},[49,98829,81],{"class":55},[49,98831,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852,98854,98856],{"class":51,"line":109},[49,98833,98384],{"class":55},[49,98835,60],{"class":59},[49,98837,63],{"class":55},[49,98839,559],{"class":66},[49,98841,76],{"class":55},[49,98843,98395],{"class":66},[49,98845,70],{"class":55},[49,98847,301],{"class":66},[49,98849,76],{"class":55},[49,98851,73],{"class":66},[49,98853,76],{"class":55},[49,98855,566],{"class":66},[49,98857,81],{"class":55},[49,98859,98860],{"class":51,"line":120},[49,98861,98862],{"class":283},"#使用hstack\n",[49,98864,98865],{"class":51,"line":135},[49,98866,98867],{"class":55},"np.hstack((aaa,bbb)).shape\n",[49,98869,98870],{"class":51,"line":1306},[49,98871,98872],{"class":283},"#输出：（2，6，6）\n",[166,98874,98876],{"id":98875},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98878,98879],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98881,98711],{},[39,98883,98885],{"className":41,"code":98884,"language":43,"meta":44,"style":44},"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",[46,98886,98887,98911,98935,98940,98945,98950],{"__ignoreMap":44},[49,98888,98889,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909],{"class":51,"line":52},[49,98890,93369],{"class":55},[49,98892,60],{"class":59},[49,98894,63],{"class":55},[49,98896,441],{"class":66},[49,98898,76],{"class":55},[49,98900,742],{"class":66},[49,98902,70],{"class":55},[49,98904,73],{"class":66},[49,98906,76],{"class":55},[49,98908,515],{"class":66},[49,98910,81],{"class":55},[49,98912,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933],{"class":51,"line":84},[49,98914,98250],{"class":55},[49,98916,60],{"class":59},[49,98918,63],{"class":55},[49,98920,559],{"class":66},[49,98922,76],{"class":55},[49,98924,861],{"class":66},[49,98926,70],{"class":55},[49,98928,73],{"class":66},[49,98930,76],{"class":55},[49,98932,515],{"class":66},[49,98934,81],{"class":55},[49,98936,98937],{"class":51,"line":109},[49,98938,98939],{"class":283},"#vstack 垂直方向进行堆叠\n",[49,98941,98942],{"class":51,"line":120},[49,98943,98944],{"class":55},"np.vstack((aa,bb))\n",[49,98946,98947],{"class":51,"line":135},[49,98948,98949],{"class":283},"#与hstack传的参数类似，等价于：\n",[49,98951,98952],{"class":51,"line":1306},[49,98953,98954],{"class":55},"np.vstack([aa,bb])\n",[14,98956,98296],{},[14,98958,98959],{},[1554,98960],{"alt":44,"src":98961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98963,98792],{},[39,98965,98967],{"className":41,"code":98966,"language":43,"meta":44,"style":44},"#两个三行六列\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",[46,98968,98969,98973,99001,99029,99034,99039],{"__ignoreMap":44},[49,98970,98971],{"class":51,"line":52},[49,98972,98351],{"class":283},[49,98974,98975,98977,98979,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999],{"class":51,"line":84},[49,98976,95584],{"class":55},[49,98978,60],{"class":59},[49,98980,63],{"class":55},[49,98982,441],{"class":66},[49,98984,76],{"class":55},[49,98986,547],{"class":66},[49,98988,70],{"class":55},[49,98990,301],{"class":66},[49,98992,76],{"class":55},[49,98994,73],{"class":66},[49,98996,76],{"class":55},[49,98998,566],{"class":66},[49,99000,81],{"class":55},[49,99002,99003,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025,99027],{"class":51,"line":109},[49,99004,98384],{"class":55},[49,99006,60],{"class":59},[49,99008,63],{"class":55},[49,99010,559],{"class":66},[49,99012,76],{"class":55},[49,99014,98395],{"class":66},[49,99016,70],{"class":55},[49,99018,301],{"class":66},[49,99020,76],{"class":55},[49,99022,73],{"class":66},[49,99024,76],{"class":55},[49,99026,566],{"class":66},[49,99028,81],{"class":55},[49,99030,99031],{"class":51,"line":120},[49,99032,99033],{"class":283},"#使用vstack\n",[49,99035,99036],{"class":51,"line":135},[49,99037,99038],{"class":55},"np.vstack((aaa,bbb)).shape\n",[49,99040,99041],{"class":51,"line":1306},[49,99042,99043],{"class":283},"#输出：（4，3，6）\n",[166,99045,99047],{"id":99046},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99049,99050],{},"该方法是三维数组特有的方法",[14,99052,99053],{},"也就是说",[14,99055,99056],{},"一维数组拼接方法用：concatenate()",[14,99058,99059],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99061,99062],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99064,99065],{},"四维数组及多维数组只能用concatenate进行拼接",[39,99067,99069],{"className":41,"code":99068,"language":43,"meta":44,"style":44},"#两个三行六列\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",[46,99070,99071,99075,99103,99131,99136,99141],{"__ignoreMap":44},[49,99072,99073],{"class":51,"line":52},[49,99074,98351],{"class":283},[49,99076,99077,99079,99081,99083,99085,99087,99089,99091,99093,99095,99097,99099,99101],{"class":51,"line":84},[49,99078,95584],{"class":55},[49,99080,60],{"class":59},[49,99082,63],{"class":55},[49,99084,441],{"class":66},[49,99086,76],{"class":55},[49,99088,547],{"class":66},[49,99090,70],{"class":55},[49,99092,301],{"class":66},[49,99094,76],{"class":55},[49,99096,73],{"class":66},[49,99098,76],{"class":55},[49,99100,566],{"class":66},[49,99102,81],{"class":55},[49,99104,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125,99127,99129],{"class":51,"line":109},[49,99106,98384],{"class":55},[49,99108,60],{"class":59},[49,99110,63],{"class":55},[49,99112,559],{"class":66},[49,99114,76],{"class":55},[49,99116,98395],{"class":66},[49,99118,70],{"class":55},[49,99120,301],{"class":66},[49,99122,76],{"class":55},[49,99124,73],{"class":66},[49,99126,76],{"class":55},[49,99128,566],{"class":66},[49,99130,81],{"class":55},[49,99132,99133],{"class":51,"line":120},[49,99134,99135],{"class":283},"#使用dstack\n",[49,99137,99138],{"class":51,"line":135},[49,99139,99140],{"class":55},"np.dstack((aaa,bbb)).shape\n",[49,99142,99143],{"class":51,"line":1306},[49,99144,99145],{"class":283},"#结果：（2，3，12）\n",[143,99147,99148],{},"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":44,"searchDepth":84,"depth":84,"links":99150},[99151,99152,99153,99154],{"id":98090,"depth":84,"text":98091},{"id":98704,"depth":84,"text":98705},{"id":98875,"depth":84,"text":98876},{"id":99046,"depth":84,"text":99047},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98082,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99161,"title":99162,"body":99163,"description":148,"extension":149,"meta":99438,"navigation":151,"path":99439,"seo":99440,"stem":99441,"__hash__":99442},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99164,"toc":99436},[99165,99168,99171,99265,99268,99271,99274,99277,99280,99283,99286,99289,99433],[10,99166,99162],{"id":99167},"_7数组转置",[14,99169,99170],{},"使用transpose()函数",[39,99172,99174],{"className":41,"code":99173,"language":43,"meta":44,"style":44},"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",[46,99175,99176,99186,99210,99215,99220,99225,99230,99238,99242,99246,99251,99256,99261],{"__ignoreMap":44},[49,99177,99178,99180,99182,99184],{"class":51,"line":52},[49,99179,30481],{"class":59},[49,99181,31469],{"class":55},[49,99183,31472],{"class":59},[49,99185,31475],{"class":55},[49,99187,99188,99190,99192,99194,99196,99198,99200,99202,99204,99206,99208],{"class":51,"line":84},[49,99189,56],{"class":55},[49,99191,60],{"class":59},[49,99193,31806],{"class":55},[49,99195,441],{"class":66},[49,99197,76],{"class":55},[49,99199,742],{"class":66},[49,99201,70],{"class":55},[49,99203,515],{"class":66},[49,99205,76],{"class":55},[49,99207,73],{"class":66},[49,99209,81],{"class":55},[49,99211,99212],{"class":51,"line":109},[49,99213,99214],{"class":283},"#二维数组转置\n",[49,99216,99217],{"class":51,"line":120},[49,99218,99219],{"class":283},"#调用transpose()函数\n",[49,99221,99222],{"class":51,"line":135},[49,99223,99224],{"class":55},"a.transpose()\n",[49,99226,99227],{"class":51,"line":1306},[49,99228,99229],{"class":283},"#对于二维数组也可以采用.T来实现\n",[49,99231,99232,99235],{"class":51,"line":1312},[49,99233,99234],{"class":55},"a.T",[49,99236,99237],{"class":283},"#与上述代码一样\n",[49,99239,99240],{"class":51,"line":1403},[49,99241,93627],{"class":283},[49,99243,99244],{"class":51,"line":1409},[49,99245,93991],{"class":328},[49,99247,99248],{"class":51,"line":1421},[49,99249,99250],{"class":328},"array([[ 1,  4,  7, 10],\n",[49,99252,99253],{"class":51,"line":1704},[49,99254,99255],{"class":328},"       [ 2,  5,  8, 11],\n",[49,99257,99258],{"class":51,"line":1709},[49,99259,99260],{"class":328},"       [ 3,  6,  9, 12]])\n",[49,99262,99263],{"class":51,"line":1715},[49,99264,93991],{"class":328},[14,99266,99267],{},"也可以使用np.transpose()的形式",[14,99269,99270],{},"#多维数组进行转置 np.transpose()",[14,99272,99273],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99275,99276],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99278,99279],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99281,99282],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99284,99285],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99287,99288],{},"四维及以上的数组也是一样的道理",[39,99290,99292],{"className":41,"code":99291,"language":43,"meta":44,"style":44},"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",[46,99293,99294,99322,99327,99332,99337,99355,99360,99392,99397,99402,99407,99428],{"__ignoreMap":44},[49,99295,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320],{"class":51,"line":52},[49,99297,1039],{"class":55},[49,99299,60],{"class":59},[49,99301,63],{"class":55},[49,99303,441],{"class":66},[49,99305,76],{"class":55},[49,99307,547],{"class":66},[49,99309,70],{"class":55},[49,99311,73],{"class":66},[49,99313,76],{"class":55},[49,99315,566],{"class":66},[49,99317,76],{"class":55},[49,99319,301],{"class":66},[49,99321,81],{"class":55},[49,99323,99324],{"class":51,"line":84},[49,99325,99326],{"class":55},"x.shape\n",[49,99328,99329],{"class":51,"line":109},[49,99330,99331],{"class":283},"#结果：（3,6,2）\n",[49,99333,99334],{"class":51,"line":120},[49,99335,99336],{"class":283},"#使用np.transpose()进行转置 变为(2,6,3)\n",[49,99338,99339,99342,99344,99346,99348,99350,99352],{"class":51,"line":135},[49,99340,99341],{"class":55},"np.transpose(x,(",[49,99343,301],{"class":66},[49,99345,76],{"class":55},[49,99347,441],{"class":66},[49,99349,76],{"class":55},[49,99351,415],{"class":66},[49,99353,99354],{"class":55},")).shape\n",[49,99356,99357],{"class":51,"line":1306},[49,99358,99359],{"class":283},"#结果：(2,6,3)\n",[49,99361,99362,99364,99366,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390],{"class":51,"line":1312},[49,99363,98569],{"class":55},[49,99365,60],{"class":59},[49,99367,63],{"class":55},[49,99369,441],{"class":66},[49,99371,76],{"class":55},[49,99373,547],{"class":66},[49,99375,70],{"class":55},[49,99377,73],{"class":66},[49,99379,76],{"class":55},[49,99381,301],{"class":66},[49,99383,76],{"class":55},[49,99385,441],{"class":66},[49,99387,76],{"class":55},[49,99389,566],{"class":66},[49,99391,81],{"class":55},[49,99393,99394],{"class":51,"line":1403},[49,99395,99396],{"class":55},"aaaa.shape\n",[49,99398,99399],{"class":51,"line":1409},[49,99400,99401],{"class":283},"#结果：（3，2，1，6）\n",[49,99403,99404],{"class":51,"line":1421},[49,99405,99406],{"class":283},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[49,99408,99409,99412,99414,99416,99418,99420,99422,99424,99426],{"class":51,"line":1704},[49,99410,99411],{"class":55},"np.transpose(aaaa,(",[49,99413,441],{"class":66},[49,99415,76],{"class":55},[49,99417,301],{"class":66},[49,99419,76],{"class":55},[49,99421,415],{"class":66},[49,99423,76],{"class":55},[49,99425,73],{"class":66},[49,99427,99354],{"class":55},[49,99429,99430],{"class":51,"line":1709},[49,99431,99432],{"class":283},"#结果：(2,1,3,6)\n",[143,99434,99435],{},"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":44,"searchDepth":84,"depth":84,"links":99437},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99162,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99444,"title":99445,"body":99446,"description":148,"extension":149,"meta":100180,"navigation":151,"path":100181,"seo":100182,"stem":100183,"__hash__":100184},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99447,"toc":100178},[99448,99451,99454,99457,99460,99463,99466,99469,99472,99581,99584,99587,100175],[10,99449,99445],{"id":99450},"_8数组分割",[14,99452,99453],{},"split分割",[14,99455,99456],{},"numpy.split(ary,indics_or_sections,axis)",[14,99458,99459],{},"解释：",[14,99461,99462],{},"ary:被分割的数组",[14,99464,99465],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99467,99468],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99470,99471],{},"①一维数组的分割",[39,99473,99475],{"className":41,"code":99474,"language":43,"meta":44,"style":44},"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",[46,99476,99477,99493,99498,99507,99511,99516,99524,99528,99533,99538,99551,99555,99560,99572,99576],{"__ignoreMap":44},[49,99478,99479,99481,99483,99485,99487,99489,99491],{"class":51,"line":52},[49,99480,56],{"class":55},[49,99482,60],{"class":59},[49,99484,63],{"class":55},[49,99486,441],{"class":66},[49,99488,76],{"class":55},[49,99490,67],{"class":66},[49,99492,81],{"class":55},[49,99494,99495],{"class":51,"line":84},[49,99496,99497],{"class":283},"#如果传入整数，必须能够平分，否则会报错\n",[49,99499,99500,99503,99505],{"class":51,"line":109},[49,99501,99502],{"class":55},"np.split(a,",[49,99504,301],{"class":66},[49,99506,81],{"class":55},[49,99508,99509],{"class":51,"line":120},[49,99510,93627],{"class":283},[49,99512,99513],{"class":51,"line":135},[49,99514,99515],{"class":283},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[49,99517,99518,99520,99522],{"class":51,"line":1306},[49,99519,99502],{"class":55},[49,99521,515],{"class":66},[49,99523,81],{"class":55},[49,99525,99526],{"class":51,"line":1312},[49,99527,93627],{"class":283},[49,99529,99530],{"class":51,"line":1403},[49,99531,99532],{"class":283},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[49,99534,99535],{"class":51,"line":1409},[49,99536,99537],{"class":283},"#传入数组\n",[49,99539,99540,99543,99545,99547,99549],{"class":51,"line":1421},[49,99541,99542],{"class":55},"np.split(a,[",[49,99544,73],{"class":66},[49,99546,76],{"class":55},[49,99548,541],{"class":66},[49,99550,106],{"class":55},[49,99552,99553],{"class":51,"line":1704},[49,99554,93627],{"class":283},[49,99556,99557],{"class":51,"line":1709},[49,99558,99559],{"class":283},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[49,99561,99562,99564,99566,99568,99570],{"class":51,"line":1715},[49,99563,99542],{"class":55},[49,99565,541],{"class":66},[49,99567,76],{"class":55},[49,99569,591],{"class":66},[49,99571,106],{"class":55},[49,99573,99574],{"class":51,"line":1720},[49,99575,93627],{"class":283},[49,99577,99578],{"class":51,"line":1734},[49,99579,99580],{"class":283},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99582,99583],{},"②二维数组的分割",[14,99585,99586],{},"使用split()",[39,99588,99590],{"className":41,"code":99589,"language":43,"meta":44,"style":44},"#二维数组分割\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",[46,99591,99592,99597,99621,99626,99635,99639,99643,99648,99653,99658,99663,99668,99673,99678,99682,99695,99699,99703,99707,99711,99715,99720,99725,99730,99734,99739,99755,99759,99763,99768,99773,99778,99783,99788,99793,99798,99803,99808,99813,99818,99823,99828,99833,99838,99843,99848,99853,99857,99861,99881,99885,99889,99894,99899,99904,99909,99914,99919,99924,99929,99934,99939,99944,99949,99954,99959,99964,99969,99974,99979,99983,99988,99997,100001,100005,100009,100013,100017,100021,100025,100029,100033,100042,100046,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100114,100118,100122,100126,100139,100143,100147,100151,100155,100159,100163,100167,100171],{"__ignoreMap":44},[49,99593,99594],{"class":51,"line":52},[49,99595,99596],{"class":283},"#二维数组分割\n",[49,99598,99599,99601,99603,99605,99607,99609,99611,99613,99615,99617,99619],{"class":51,"line":84},[49,99600,93369],{"class":55},[49,99602,60],{"class":59},[49,99604,63],{"class":55},[49,99606,441],{"class":66},[49,99608,76],{"class":55},[49,99610,547],{"class":66},[49,99612,70],{"class":55},[49,99614,566],{"class":66},[49,99616,76],{"class":55},[49,99618,566],{"class":66},[49,99620,81],{"class":55},[49,99622,99623],{"class":51,"line":109},[49,99624,99625],{"class":283},"#默认axis=0  传入整数平均分,按行来的\n",[49,99627,99628,99631,99633],{"class":51,"line":120},[49,99629,99630],{"class":55},"np.split(aa,",[49,99632,73],{"class":66},[49,99634,81],{"class":55},[49,99636,99637],{"class":51,"line":135},[49,99638,95827],{"class":283},[49,99640,99641],{"class":51,"line":1306},[49,99642,93991],{"class":328},[49,99644,99645],{"class":51,"line":1312},[49,99646,99647],{"class":328},"[array([[ 1,  2,  3,  4,  5,  6],\n",[49,99649,99650],{"class":51,"line":1403},[49,99651,99652],{"class":328},"        [ 7,  8,  9, 10, 11, 12]]),\n",[49,99654,99655],{"class":51,"line":1409},[49,99656,99657],{"class":328}," array([[13, 14, 15, 16, 17, 18],\n",[49,99659,99660],{"class":51,"line":1421},[49,99661,99662],{"class":328},"        [19, 20, 21, 22, 23, 24]]),\n",[49,99664,99665],{"class":51,"line":1704},[49,99666,99667],{"class":328}," array([[25, 26, 27, 28, 29, 30],\n",[49,99669,99670],{"class":51,"line":1709},[49,99671,99672],{"class":328},"        [31, 32, 33, 34, 35, 36]])]\n",[49,99674,99675],{"class":51,"line":1715},[49,99676,99677],{"class":328}," '''\n",[49,99679,99680],{"class":51,"line":1720},[49,99681,99537],{"class":283},[49,99683,99684,99687,99689,99691,99693],{"class":51,"line":1734},[49,99685,99686],{"class":55},"np.split(aa,[",[49,99688,301],{"class":66},[49,99690,76],{"class":55},[49,99692,541],{"class":66},[49,99694,106],{"class":55},[49,99696,99697],{"class":51,"line":1739},[49,99698,95827],{"class":283},[49,99700,99701],{"class":51,"line":1745},[49,99702,93991],{"class":328},[49,99704,99705],{"class":51,"line":1766},[49,99706,99647],{"class":328},[49,99708,99709],{"class":51,"line":1771},[49,99710,99652],{"class":328},[49,99712,99713],{"class":51,"line":1785},[49,99714,99657],{"class":328},[49,99716,99717],{"class":51,"line":1790},[49,99718,99719],{"class":328},"        [19, 20, 21, 22, 23, 24],\n",[49,99721,99722],{"class":51,"line":1819},[49,99723,99724],{"class":328},"        [25, 26, 27, 28, 29, 30]]),\n",[49,99726,99727],{"class":51,"line":1824},[49,99728,99729],{"class":328}," array([[31, 32, 33, 34, 35, 36]])]\n",[49,99731,99732],{"class":51,"line":1841},[49,99733,93991],{"class":328},[49,99735,99736],{"class":51,"line":1846},[49,99737,99738],{"class":283},"#axis=1 按照列来分\n",[49,99740,99741,99743,99745,99747,99749,99751,99753],{"class":51,"line":1851},[49,99742,99630],{"class":55},[49,99744,73],{"class":66},[49,99746,76],{"class":55},[49,99748,47603],{"class":126},[49,99750,60],{"class":59},[49,99752,441],{"class":66},[49,99754,81],{"class":55},[49,99756,99757],{"class":51,"line":1856},[49,99758,95827],{"class":283},[49,99760,99761],{"class":51,"line":1870},[49,99762,93991],{"class":328},[49,99764,99765],{"class":51,"line":1875},[49,99766,99767],{"class":328},"[array([[ 1,  2],\n",[49,99769,99770],{"class":51,"line":2669},[49,99771,99772],{"class":328},"        [ 7,  8],\n",[49,99774,99775],{"class":51,"line":2683},[49,99776,99777],{"class":328},"        [13, 14],\n",[49,99779,99780],{"class":51,"line":2691},[49,99781,99782],{"class":328},"        [19, 20],\n",[49,99784,99785],{"class":51,"line":2696},[49,99786,99787],{"class":328},"        [25, 26],\n",[49,99789,99790],{"class":51,"line":2702},[49,99791,99792],{"class":328},"        [31, 32]]),\n",[49,99794,99795],{"class":51,"line":2708},[49,99796,99797],{"class":328}," array([[ 3,  4],\n",[49,99799,99800],{"class":51,"line":2713},[49,99801,99802],{"class":328},"        [ 9, 10],\n",[49,99804,99805],{"class":51,"line":8038},[49,99806,99807],{"class":328},"        [15, 16],\n",[49,99809,99810],{"class":51,"line":8062},[49,99811,99812],{"class":328},"        [21, 22],\n",[49,99814,99815],{"class":51,"line":8067},[49,99816,99817],{"class":328},"        [27, 28],\n",[49,99819,99820],{"class":51,"line":8073},[49,99821,99822],{"class":328},"        [33, 34]]),\n",[49,99824,99825],{"class":51,"line":8100},[49,99826,99827],{"class":328}," array([[ 5,  6],\n",[49,99829,99830],{"class":51,"line":8105},[49,99831,99832],{"class":328},"        [11, 12],\n",[49,99834,99835],{"class":51,"line":8111},[49,99836,99837],{"class":328},"        [17, 18],\n",[49,99839,99840],{"class":51,"line":8123},[49,99841,99842],{"class":328},"        [23, 24],\n",[49,99844,99845],{"class":51,"line":8135},[49,99846,99847],{"class":328},"        [29, 30],\n",[49,99849,99850],{"class":51,"line":8147},[49,99851,99852],{"class":328},"        [35, 36]])]\n",[49,99854,99855],{"class":51,"line":9806},[49,99856,99677],{"class":328},[49,99858,99859],{"class":51,"line":9831},[49,99860,99537],{"class":283},[49,99862,99863,99865,99867,99869,99871,99873,99875,99877,99879],{"class":51,"line":9854},[49,99864,99686],{"class":55},[49,99866,441],{"class":66},[49,99868,76],{"class":55},[49,99870,301],{"class":66},[49,99872,41698],{"class":55},[49,99874,47603],{"class":126},[49,99876,60],{"class":59},[49,99878,441],{"class":66},[49,99880,81],{"class":55},[49,99882,99883],{"class":51,"line":9878},[49,99884,93627],{"class":283},[49,99886,99887],{"class":51,"line":9883},[49,99888,93991],{"class":328},[49,99890,99891],{"class":51,"line":9888},[49,99892,99893],{"class":328},"[array([[ 1],\n",[49,99895,99896],{"class":51,"line":9893},[49,99897,99898],{"class":328},"        [ 7],\n",[49,99900,99901],{"class":51,"line":9902},[49,99902,99903],{"class":328},"        [13],\n",[49,99905,99906],{"class":51,"line":9907},[49,99907,99908],{"class":328},"        [19],\n",[49,99910,99911],{"class":51,"line":9913},[49,99912,99913],{"class":328},"        [25],\n",[49,99915,99916],{"class":51,"line":9934},[49,99917,99918],{"class":328},"        [31]]),\n",[49,99920,99921],{"class":51,"line":9940},[49,99922,99923],{"class":328}," array([[ 2],\n",[49,99925,99926],{"class":51,"line":9954},[49,99927,99928],{"class":328},"        [ 8],\n",[49,99930,99931],{"class":51,"line":9960},[49,99932,99933],{"class":328},"        [14],\n",[49,99935,99936],{"class":51,"line":9987},[49,99937,99938],{"class":328},"        [20],\n",[49,99940,99941],{"class":51,"line":9996},[49,99942,99943],{"class":328},"        [26],\n",[49,99945,99946],{"class":51,"line":10002},[49,99947,99948],{"class":328},"        [32]]),\n",[49,99950,99951],{"class":51,"line":10010},[49,99952,99953],{"class":328}," array([[ 3,  4,  5,  6],\n",[49,99955,99956],{"class":51,"line":10015},[49,99957,99958],{"class":328},"        [ 9, 10, 11, 12],\n",[49,99960,99961],{"class":51,"line":16694},[49,99962,99963],{"class":328},"        [15, 16, 17, 18],\n",[49,99965,99966],{"class":51,"line":16700},[49,99967,99968],{"class":328},"        [21, 22, 23, 24],\n",[49,99970,99971],{"class":51,"line":16723},[49,99972,99973],{"class":328},"        [27, 28, 29, 30],\n",[49,99975,99976],{"class":51,"line":16729},[49,99977,99978],{"class":328},"        [33, 34, 35, 36]])]\n",[49,99980,99981],{"class":51,"line":16752},[49,99982,93991],{"class":328},[49,99984,99985],{"class":51,"line":16766},[49,99986,99987],{"class":283},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[49,99989,99990,99993,99995],{"class":51,"line":16786},[49,99991,99992],{"class":55},"np.vsplit(aa,",[49,99994,73],{"class":66},[49,99996,81],{"class":55},[49,99998,99999],{"class":51,"line":16792},[49,100000,93627],{"class":283},[49,100002,100003],{"class":51,"line":16803},[49,100004,93991],{"class":328},[49,100006,100007],{"class":51,"line":16826},[49,100008,99647],{"class":328},[49,100010,100011],{"class":51,"line":16848},[49,100012,99652],{"class":328},[49,100014,100015],{"class":51,"line":16853},[49,100016,99657],{"class":328},[49,100018,100019],{"class":51,"line":16859},[49,100020,99662],{"class":328},[49,100022,100023],{"class":51,"line":16873},[49,100024,99667],{"class":328},[49,100026,100027],{"class":51,"line":16886},[49,100028,99672],{"class":328},[49,100030,100031],{"class":51,"line":16891},[49,100032,93991],{"class":328},[49,100034,100035,100038,100040],{"class":51,"line":16905},[49,100036,100037],{"class":55},"np.hsplit(aa,",[49,100039,73],{"class":66},[49,100041,81],{"class":55},[49,100043,100044],{"class":51,"line":16910},[49,100045,93627],{"class":283},[49,100047,100048],{"class":51,"line":16916},[49,100049,93991],{"class":328},[49,100051,100052],{"class":51,"line":16921},[49,100053,99767],{"class":328},[49,100055,100056],{"class":51,"line":16935},[49,100057,99772],{"class":328},[49,100059,100060],{"class":51,"line":16940},[49,100061,99777],{"class":328},[49,100063,100064],{"class":51,"line":16945},[49,100065,99782],{"class":328},[49,100067,100068],{"class":51,"line":16959},[49,100069,99787],{"class":328},[49,100071,100072],{"class":51,"line":16971},[49,100073,99792],{"class":328},[49,100075,100076],{"class":51,"line":16976},[49,100077,99797],{"class":328},[49,100079,100080],{"class":51,"line":16989},[49,100081,99802],{"class":328},[49,100083,100084],{"class":51,"line":16994},[49,100085,99807],{"class":328},[49,100087,100088],{"class":51,"line":16999},[49,100089,99812],{"class":328},[49,100091,100092],{"class":51,"line":17004},[49,100093,99817],{"class":328},[49,100095,100096],{"class":51,"line":17017},[49,100097,99822],{"class":328},[49,100099,100100],{"class":51,"line":17022},[49,100101,99827],{"class":328},[49,100103,100104],{"class":51,"line":32722},[49,100105,99832],{"class":328},[49,100107,100108],{"class":51,"line":32728},[49,100109,99837],{"class":328},[49,100111,100112],{"class":51,"line":32734},[49,100113,99842],{"class":328},[49,100115,100116],{"class":51,"line":32740},[49,100117,99847],{"class":328},[49,100119,100120],{"class":51,"line":32746},[49,100121,99852],{"class":328},[49,100123,100124],{"class":51,"line":32757},[49,100125,93991],{"class":328},[49,100127,100128,100131,100133,100135,100137],{"class":51,"line":32763},[49,100129,100130],{"class":55},"np.vsplit(aa,[",[49,100132,301],{"class":66},[49,100134,76],{"class":55},[49,100136,541],{"class":66},[49,100138,106],{"class":55},[49,100140,100141],{"class":51,"line":32783},[49,100142,93627],{"class":283},[49,100144,100145],{"class":51,"line":32789},[49,100146,93991],{"class":328},[49,100148,100149],{"class":51,"line":32800},[49,100150,99647],{"class":328},[49,100152,100153],{"class":51,"line":32806},[49,100154,99652],{"class":328},[49,100156,100157],{"class":51,"line":32812},[49,100158,99657],{"class":328},[49,100160,100161],{"class":51,"line":32818},[49,100162,99719],{"class":328},[49,100164,100165],{"class":51,"line":32824},[49,100166,99724],{"class":328},[49,100168,100169],{"class":51,"line":32830},[49,100170,99729],{"class":328},[49,100172,100173],{"class":51,"line":32836},[49,100174,99677],{"class":328},[143,100176,100177],{},"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":44,"searchDepth":84,"depth":84,"links":100179},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99445,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100186,"title":100187,"body":100188,"description":148,"extension":149,"meta":100682,"navigation":151,"path":100683,"seo":100684,"stem":100685,"__hash__":100686},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100189,"toc":100673},[100190,100193,100196,100221,100225,100284,100336,100340,100342,100378,100432,100434,100472,100543,100547,100552,100556,100559,100592,100595,100599,100602,100605,100608,100611,100616,100620,100623,100626,100629,100632,100637,100641,100646,100649,100670],[10,100191,100187],{"id":100192},"_9数学函数",[14,100194,100195],{},"补充回顾：python的列表推导式",[39,100197,100199],{"className":41,"code":100198,"language":43,"meta":44,"style":44},"[1\u002Fi for i in a]\n",[46,100200,100201],{"__ignoreMap":44},[49,100202,100203,100205,100207,100209,100212,100214,100216,100218],{"class":51,"line":52},[49,100204,1109],{"class":55},[49,100206,441],{"class":66},[49,100208,803],{"class":59},[49,100210,100211],{"class":55},"i ",[49,100213,3117],{"class":59},[49,100215,9528],{"class":55},[49,100217,26134],{"class":59},[49,100219,100220],{"class":55}," a]\n",[166,100222,100224],{"id":100223},"_91-求倒数","9.1 求倒数",[39,100226,100228],{"className":41,"code":100227,"language":43,"meta":44,"style":44},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[46,100229,100230,100235,100263,100275],{"__ignoreMap":44},[49,100231,100232],{"class":51,"line":52},[49,100233,100234],{"class":283},"#数组求倒数\n",[49,100236,100237,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257,100259,100261],{"class":51,"line":84},[49,100238,56],{"class":55},[49,100240,60],{"class":59},[49,100242,1109],{"class":55},[49,100244,441],{"class":66},[49,100246,76],{"class":55},[49,100248,301],{"class":66},[49,100250,76],{"class":55},[49,100252,73],{"class":66},[49,100254,76],{"class":55},[49,100256,515],{"class":66},[49,100258,76],{"class":55},[49,100260,541],{"class":66},[49,100262,33335],{"class":55},[49,100264,100265,100267,100269,100272],{"class":51,"line":109},[49,100266,87],{"class":55},[49,100268,60],{"class":59},[49,100270,100271],{"class":55},"np.array(a)",[49,100273,100274],{"class":283},"#将列表转换为数组\n",[49,100276,100277,100279,100281],{"class":51,"line":120},[49,100278,441],{"class":66},[49,100280,803],{"class":59},[49,100282,100283],{"class":55},"b\n",[39,100285,100287],{"className":41,"code":100286,"language":43,"meta":44,"style":44},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[46,100288,100289,100317,100326,100331],{"__ignoreMap":44},[49,100290,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309,100311,100313,100315],{"class":51,"line":52},[49,100292,56],{"class":55},[49,100294,60],{"class":59},[49,100296,1109],{"class":55},[49,100298,441],{"class":66},[49,100300,76],{"class":55},[49,100302,301],{"class":66},[49,100304,76],{"class":55},[49,100306,73],{"class":66},[49,100308,76],{"class":55},[49,100310,515],{"class":66},[49,100312,76],{"class":55},[49,100314,541],{"class":66},[49,100316,33335],{"class":55},[49,100318,100319,100321,100323],{"class":51,"line":84},[49,100320,87],{"class":55},[49,100322,60],{"class":59},[49,100324,100325],{"class":55},"np.array(a)\n",[49,100327,100328],{"class":51,"line":109},[49,100329,100330],{"class":283},"#调用numpy中的函数reciprocal()\n",[49,100332,100333],{"class":51,"line":120},[49,100334,100335],{"class":55},"np.reciprocal(b)\n",[166,100337,100339],{"id":100338},"_92-求平方","9.2 求平方",[14,100341,94593],{},[39,100343,100345],{"className":41,"code":100344,"language":43,"meta":44,"style":44},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[46,100346,100347,100352,100357,100373],{"__ignoreMap":44},[49,100348,100349],{"class":51,"line":52},[49,100350,100351],{"class":283},"#square()，求平方\n",[49,100353,100354],{"class":51,"line":84},[49,100355,100356],{"class":283},"#一维数组\n",[49,100358,100359,100361,100363,100365,100367,100369,100371],{"class":51,"line":109},[49,100360,56],{"class":55},[49,100362,60],{"class":59},[49,100364,63],{"class":55},[49,100366,441],{"class":66},[49,100368,76],{"class":55},[49,100370,95],{"class":66},[49,100372,81],{"class":55},[49,100374,100375],{"class":51,"line":120},[49,100376,100377],{"class":55},"np.square(a)\n",[39,100379,100381],{"className":41,"code":100380,"language":43,"meta":44,"style":44},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[46,100382,100383,100388,100393,100414],{"__ignoreMap":44},[49,100384,100385],{"class":51,"line":52},[49,100386,100387],{"class":283},"#或者通过循环遍历的形式来计算\n",[49,100389,100390],{"class":51,"line":84},[49,100391,100392],{"class":283},"#这是一个列表\n",[49,100394,100395,100398,100400,100402,100404,100406,100408,100411],{"class":51,"line":109},[49,100396,100397],{"class":55},"[i",[49,100399,674],{"class":59},[49,100401,100211],{"class":55},[49,100403,3117],{"class":59},[49,100405,9528],{"class":55},[49,100407,26134],{"class":59},[49,100409,100410],{"class":55}," a]",[49,100412,100413],{"class":283},"#这个求完之后在数列当中\n",[49,100415,100416,100419,100421,100423,100425,100427,100429],{"class":51,"line":120},[49,100417,100418],{"class":55},"np.array([i",[49,100420,674],{"class":59},[49,100422,100211],{"class":55},[49,100424,3117],{"class":59},[49,100426,9528],{"class":55},[49,100428,26134],{"class":59},[49,100430,100431],{"class":55}," a])\n",[14,100433,93354],{},[39,100435,100437],{"className":41,"code":100436,"language":43,"meta":44,"style":44},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[46,100438,100439,100443,100467],{"__ignoreMap":44},[49,100440,100441],{"class":51,"line":52},[49,100442,93364],{"class":283},[49,100444,100445,100447,100449,100451,100453,100455,100457,100459,100461,100463,100465],{"class":51,"line":84},[49,100446,93369],{"class":55},[49,100448,60],{"class":59},[49,100450,63],{"class":55},[49,100452,441],{"class":66},[49,100454,76],{"class":55},[49,100456,742],{"class":66},[49,100458,70],{"class":55},[49,100460,515],{"class":66},[49,100462,76],{"class":55},[49,100464,73],{"class":66},[49,100466,81],{"class":55},[49,100468,100469],{"class":51,"line":109},[49,100470,100471],{"class":55},"np.square(aa)\n",[39,100473,100475],{"className":41,"code":100474,"language":43,"meta":44,"style":44},"#传统的方式\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",[46,100476,100477,100482,100491,100507,100523,100538],{"__ignoreMap":44},[49,100478,100479],{"class":51,"line":52},[49,100480,100481],{"class":283},"#传统的方式\n",[49,100483,100484,100486,100488],{"class":51,"line":84},[49,100485,98250],{"class":55},[49,100487,60],{"class":59},[49,100489,100490],{"class":55},"np.empty_like(aa)\n",[49,100492,100493,100495,100497,100499,100501,100503,100505],{"class":51,"line":109},[49,100494,3117],{"class":59},[49,100496,9528],{"class":55},[49,100498,26134],{"class":59},[49,100500,32532],{"class":66},[49,100502,228],{"class":55},[49,100504,515],{"class":66},[49,100506,30875],{"class":55},[49,100508,100509,100511,100513,100515,100517,100519,100521],{"class":51,"line":120},[49,100510,3293],{"class":59},[49,100512,9590],{"class":55},[49,100514,26134],{"class":59},[49,100516,32532],{"class":66},[49,100518,228],{"class":55},[49,100520,73],{"class":66},[49,100522,30875],{"class":55},[49,100524,100525,100528,100530,100533,100535],{"class":51,"line":135},[49,100526,100527],{"class":55},"        bb[i,j]",[49,100529,60],{"class":59},[49,100531,100532],{"class":55},"aa[i,j]",[49,100534,674],{"class":59},[49,100536,100537],{"class":55},"aa[i,j]\n",[49,100539,100540],{"class":51,"line":1306},[49,100541,100542],{"class":55},"bb\n",[166,100544,100546],{"id":100545},"_93-求各元素的符号","9.3 求各元素的符号",[14,100548,100549],{},[1554,100550],{"alt":44,"src":100551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[166,100553,100555],{"id":100554},"_94-modf函数","9.4 modf函数",[14,100557,100558],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[39,100560,100562],{"className":41,"code":100561,"language":43,"meta":44,"style":44},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[46,100563,100564,100587],{"__ignoreMap":44},[49,100565,100566,100568,100570,100572,100574,100576,100578,100580,100582,100585],{"class":51,"line":52},[49,100567,56],{"class":55},[49,100569,60],{"class":59},[49,100571,63],{"class":55},[49,100573,751],{"class":59},[49,100575,95],{"class":66},[49,100577,76],{"class":55},[49,100579,95],{"class":66},[49,100581,76],{"class":55},[49,100583,100584],{"class":66},"0.3",[49,100586,81],{"class":55},[49,100588,100589],{"class":51,"line":84},[49,100590,100591],{"class":55},"np.modf(a)\n",[14,100593,100594],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[166,100596,100598],{"id":100597},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100600,100601],{},"np.cell()",[14,100603,100604],{},"np.floor()",[14,100606,100607],{},"np.rint()",[14,100609,100610],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100612,100613],{},[1554,100614],{"alt":44,"src":100615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[166,100617,100619],{"id":100618},"_96-around函数","9.6 around()函数",[14,100621,100622],{},"around()函数也可以实现对数的小数位数进行操作",[14,100624,100625],{},"其中的参数：",[14,100627,100628],{},"1.要传的数组",[14,100630,100631],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100633,100634],{},[1554,100635],{"alt":44,"src":100636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[166,100638,100640],{"id":100639},"_97-三角函数","9.7 三角函数",[14,100642,100643],{},[1554,100644],{"alt":44,"src":100645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100647,100648],{},"引入图像模块非常重要",[39,100650,100652],{"className":41,"code":100651,"language":43,"meta":44,"style":44},"from matplotlib import pyplot as plt\n",[46,100653,100654],{"__ignoreMap":44},[49,100655,100656,100658,100661,100663,100666,100668],{"class":51,"line":52},[49,100657,30826],{"class":59},[49,100659,100660],{"class":55}," matplotlib ",[49,100662,30481],{"class":59},[49,100664,100665],{"class":55}," pyplot ",[49,100667,31472],{"class":59},[49,100669,31526],{"class":55},[143,100671,100672],{},"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":44,"searchDepth":84,"depth":84,"links":100674},[100675,100676,100677,100678,100679,100680,100681],{"id":100223,"depth":84,"text":100224},{"id":100338,"depth":84,"text":100339},{"id":100545,"depth":84,"text":100546},{"id":100554,"depth":84,"text":100555},{"id":100597,"depth":84,"text":100598},{"id":100618,"depth":84,"text":100619},{"id":100639,"depth":84,"text":100640},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100187,"description":148},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100688,"title":100689,"body":100690,"description":148,"extension":149,"meta":100694,"navigation":151,"path":100695,"seo":100696,"stem":100697,"__hash__":100698},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100691,"toc":100692},[],{"title":44,"searchDepth":84,"depth":84,"links":100693},[],{"category":50509},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100689,"description":148},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100700,"title":100701,"body":100702,"description":44,"extension":149,"meta":102710,"navigation":151,"path":102711,"seo":102712,"stem":102713,"__hash__":102714},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100703,"toc":102686},[100704,100707,100711,100714,100717,100723,100726,100749,100752,100786,100789,100830,100834,100837,100930,100933,100977,100980,100997,101000,101014,101017,101020,101065,101068,101105,101109,101112,101118,101123,101143,101147,101150,101216,101219,101237,101241,101244,101273,101283,101289,101293,101296,101302,101313,101317,101320,101350,101353,101633,101636,101639,101650,101653,101656,101678,101685,101688,101706,101709,101712,101726,101734,101737,101763,101769,101772,101775,101785,101797,101817,101826,101846,101856,101880,101893,101907,101912,101953,101970,101995,102007,102027,102033,102078,102097,102114,102127,102143,102150,102162,102171,102206,102227,102252,102265,102289,102304,102329,102332,102353,102362,102365,102376,102380,102383,102389,102401,102408,102412,102415,102427,102430,102444,102447,102457,102467,102470,102510,102513,102517,102523,102526,102540,102544,102547,102580,102584,102587,102610,102618,102621,102627,102633,102636,102639,102667,102671,102674,102680,102683],[10,100705,100701],{"id":100706},"_1环境安装与第一个-mujoco-程序",[166,100708,100710],{"id":100709},"_1目标说明","1.目标说明",[14,100712,100713],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100715,100716],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[39,100718,100721],{"className":100719,"code":100720,"language":5278,"meta":44},[5276],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[46,100722,100720],{"__ignoreMap":44},[14,100724,100725],{},"需要掌握:",[178,100727,100728,100731,100734,100739,100744],{},[181,100729,100730],{},"Fedora 44 下 MuJoCo 的系统依赖",[181,100732,100733],{},"Python 虚拟环境创建",[181,100735,100736],{},[46,100737,100738],{},"mujoco.MjModel",[181,100740,100741],{},[46,100742,100743],{},"mujoco.MjData",[181,100745,100746],{},[46,100747,100748],{},"mujoco.mj_step(model, data)",[14,100750,100751],{},"MuJoCo 中最重要的两个对象:",[361,100753,100754,100764],{},[364,100755,100756],{},[367,100757,100758,100761],{},[370,100759,100760],{"align":23826},"对象",[370,100762,100763],{"align":23826},"含义",[408,100765,100766,100776],{},[367,100767,100768,100773],{},[413,100769,100770],{"align":23826},[46,100771,100772],{},"MjModel",[413,100774,100775],{"align":23826},"模型结构，来自 XML，基本不随时间变化",[367,100777,100778,100783],{},[413,100779,100780],{"align":23826},[46,100781,100782],{},"MjData",[413,100784,100785],{"align":23826},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100787,100788],{},"可以先用一个类比理解：",[361,100790,100791,100801],{},[364,100792,100793],{},[367,100794,100795,100798],{},[370,100796,100797],{"align":23826},"类比",[370,100799,100800],{"align":23826},"MuJoCo 对象",[408,100802,100803,100812,100821],{},[367,100804,100805,100808],{},[413,100806,100807],{"align":23826},"游戏地图和角色配置",[413,100809,100810],{"align":23826},[46,100811,100772],{},[367,100813,100814,100817],{},[413,100815,100816],{"align":23826},"游戏运行到当前帧的状态",[413,100818,100819],{"align":23826},[46,100820,100782],{},[367,100822,100823,100826],{},[413,100824,100825],{"align":23826},"前进一帧",[413,100827,100828],{"align":23826},[46,100829,100748],{},[166,100831,100833],{"id":100832},"_2环境与依赖安装","2.环境与依赖安装",[14,100835,100836],{},"Fedora 44 系统依赖:",[39,100838,100840],{"className":23912,"code":100839,"language":23914,"meta":44,"style":44},"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",[46,100841,100842,100854,100867,100880,100890,100900,100919],{"__ignoreMap":44},[49,100843,100844,100846,100848,100850,100852],{"class":51,"line":52},[49,100845,24667],{"class":2055},[49,100847,26406],{"class":328},[49,100849,23924],{"class":328},[49,100851,26491],{"class":66},[49,100853,24769],{"class":66},[49,100855,100856,100859,100862,100865],{"class":51,"line":84},[49,100857,100858],{"class":328},"  python3",[49,100860,100861],{"class":328}," python3-pip",[49,100863,100864],{"class":328}," python3-virtualenv",[49,100866,24769],{"class":66},[49,100868,100869,100872,100875,100878],{"class":51,"line":109},[49,100870,100871],{"class":328},"  mesa-libGL",[49,100873,100874],{"class":328}," mesa-libGLU",[49,100876,100877],{"class":328}," mesa-dri-drivers",[49,100879,24769],{"class":66},[49,100881,100882,100885,100888],{"class":51,"line":120},[49,100883,100884],{"class":328},"  libglvnd-glx",[49,100886,100887],{"class":328}," libglvnd-opengl",[49,100889,24769],{"class":66},[49,100891,100892,100895,100898],{"class":51,"line":135},[49,100893,100894],{"class":328},"  glfw",[49,100896,100897],{"class":328}," glfw-devel",[49,100899,24769],{"class":66},[49,100901,100902,100905,100908,100911,100914,100917],{"class":51,"line":1306},[49,100903,100904],{"class":328},"  libX11",[49,100906,100907],{"class":328}," libXcursor",[49,100909,100910],{"class":328}," libXi",[49,100912,100913],{"class":328}," libXinerama",[49,100915,100916],{"class":328}," libXrandr",[49,100918,24769],{"class":66},[49,100920,100921,100924,100927],{"class":51,"line":1312},[49,100922,100923],{"class":328},"  gcc",[49,100925,100926],{"class":328}," gcc-c++",[49,100928,100929],{"class":328}," make\n",[14,100931,100932],{},"创建 Python 环境:",[39,100934,100936],{"className":23912,"code":100935,"language":23914,"meta":44,"style":44},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[46,100937,100938,100952,100960],{"__ignoreMap":44},[49,100939,100940,100943,100946,100949],{"class":51,"line":52},[49,100941,100942],{"class":2055},"python3",[49,100944,100945],{"class":66}," -m",[49,100947,100948],{"class":328}," venv",[49,100950,100951],{"class":328}," .venv\n",[49,100953,100954,100957],{"class":51,"line":84},[49,100955,100956],{"class":66},"source",[49,100958,100959],{"class":328}," .venv\u002Fbin\u002Factivate\n",[49,100961,100962,100964,100966,100969,100971,100974],{"class":51,"line":109},[49,100963,43],{"class":2055},[49,100965,100945],{"class":66},[49,100967,100968],{"class":328}," pip",[49,100970,23924],{"class":328},[49,100972,100973],{"class":66}," --upgrade",[49,100975,100976],{"class":328}," pip\n",[14,100978,100979],{},"pip 安装:",[39,100981,100983],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy\n",[46,100984,100985],{"__ignoreMap":44},[49,100986,100987,100989,100991,100994],{"class":51,"line":52},[49,100988,23921],{"class":2055},[49,100990,23924],{"class":328},[49,100992,100993],{"class":328}," \"mujoco>=2.3\"",[49,100995,100996],{"class":328}," numpy\n",[14,100998,100999],{},"安装完成后，先做最小检查：",[39,101001,101003],{"className":23912,"code":101002,"language":23914,"meta":44,"style":44},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[46,101004,101005],{"__ignoreMap":44},[49,101006,101007,101009,101011],{"class":51,"line":52},[49,101008,43],{"class":2055},[49,101010,30449],{"class":66},[49,101012,101013],{"class":328}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101015,101016],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101018,101019],{},"conda 安装:",[39,101021,101023],{"className":23912,"code":101022,"language":23914,"meta":44,"style":44},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[46,101024,101025,101045,101055],{"__ignoreMap":44},[49,101026,101027,101029,101031,101033,101036,101039,101042],{"class":51,"line":52},[49,101028,30421],{"class":2055},[49,101030,29267],{"class":328},[49,101032,25206],{"class":66},[49,101034,101035],{"class":328}," mujoco-study",[49,101037,101038],{"class":328}," python=",[49,101040,101041],{"class":66},"3.10",[49,101043,101044],{"class":66}," -y\n",[49,101046,101047,101049,101052],{"class":51,"line":84},[49,101048,30421],{"class":2055},[49,101050,101051],{"class":328}," activate",[49,101053,101054],{"class":328}," mujoco-study\n",[49,101056,101057,101059,101061,101063],{"class":51,"line":109},[49,101058,23921],{"class":2055},[49,101060,23924],{"class":328},[49,101062,100993],{"class":328},[49,101064,100996],{"class":328},[14,101066,101067],{},"版本冲突说明:",[178,101069,101070,101076,101086,101095],{},[181,101071,101072,101073,28476],{},"不要安装 ",[46,101074,101075],{},"mujoco-py",[181,101077,101078,101079,101081,101082,101085],{},"如果旧项目里同时安装了 ",[46,101080,101075],{}," 和 ",[46,101083,101084],{},"mujoco","，建议新建干净虚拟环境。",[181,101087,101088,101091,101092,28476],{},[46,101089,101090],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[46,101093,101094],{},"~\u002F.mujoco\u002Fmujoco210",[181,101096,101097,101098,82628,101101,101104],{},"离屏渲染可能涉及 OpenGL 后端，",[46,101099,101100],{},"MUJOCO_GL=egl",[46,101102,101103],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[166,101106,101108],{"id":101107},"_3核心概念解释","3.核心概念解释",[14,101110,101111],{},"MuJoCo 的基本执行流程:",[39,101113,101116],{"className":101114,"code":101115,"language":5278,"meta":44},[5276],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[46,101117,101115],{"__ignoreMap":44},[14,101119,101120,101122],{},[46,101121,100772],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101124,101125,101127,101128,436,101131,436,101134,436,101137,436,101140,28476],{},[46,101126,100782],{}," 存放仿真运行时状态，例如 ",[46,101129,101130],{},"data.time",[46,101132,101133],{},"data.qpos",[46,101135,101136],{},"data.qvel",[46,101138,101139],{},"data.ctrl",[46,101141,101142],{},"data.xpos",[195,101144,101146],{"id":101145},"xml-是什么","XML 是什么",[14,101148,101149],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[39,101151,101153],{"className":53156,"code":101152,"language":53158,"meta":44,"style":44},"\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",[46,101154,101155,101177,101208],{"__ignoreMap":44},[49,101156,101157,101159,101161,101163,101165,101167,101170,101172,101175],{"class":51,"line":52},[49,101158,1129],{"class":55},[49,101160,51889],{"class":51389},[49,101162,15010],{"class":2055},[49,101164,60],{"class":55},[49,101166,53580],{"class":328},[49,101168,101169],{"class":2055}," pos",[49,101171,60],{"class":55},[49,101173,101174],{"class":328},"\"0 0 1\"",[49,101176,51396],{"class":55},[49,101178,101179,101181,101184,101186,101188,101191,101193,101195,101197,101200,101202,101205],{"class":51,"line":84},[49,101180,52233],{"class":55},[49,101182,101183],{"class":51389},"geom",[49,101185,15010],{"class":2055},[49,101187,60],{"class":55},[49,101189,101190],{"class":328},"\"box_geom\"",[49,101192,53913],{"class":2055},[49,101194,60],{"class":55},[49,101196,53580],{"class":328},[49,101198,101199],{"class":2055}," size",[49,101201,60],{"class":55},[49,101203,101204],{"class":328},"\"0.1 0.1 0.1\"",[49,101206,101207],{"class":55},"\u002F>\n",[49,101209,101210,101212,101214],{"class":51,"line":109},[49,101211,51874],{"class":55},[49,101213,51889],{"class":51389},[49,101215,51396],{"class":55},[14,101217,101218],{},"这段意思是：",[178,101220,101221,101227,101234],{},[181,101222,101223,101224,101226],{},"创建一个叫 ",[46,101225,53803],{}," 的刚体。",[181,101228,101229,101230,101233],{},"它初始放在 ",[46,101231,101232],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[181,101235,101236],{},"它里面有一个盒子形状的几何体。",[195,101238,101240],{"id":101239},"timestep-是什么","timestep 是什么",[14,101242,101243],{},"XML 里的：",[39,101245,101247],{"className":53156,"code":101246,"language":53158,"meta":44,"style":44},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[46,101248,101249],{"__ignoreMap":44},[49,101250,101251,101253,101255,101258,101260,101263,101266,101268,101271],{"class":51,"line":52},[49,101252,1129],{"class":55},[49,101254,69255],{"class":51389},[49,101256,101257],{"class":2055}," timestep",[49,101259,60],{"class":55},[49,101261,101262],{"class":328},"\"0.01\"",[49,101264,101265],{"class":2055}," gravity",[49,101267,60],{"class":55},[49,101269,101270],{"class":328},"\"0 0 -9.81\"",[49,101272,101207],{"class":55},[14,101274,101275,101276,101279,101280,101282],{},"表示每调用一次 ",[46,101277,101278],{},"mj_step","，仿真时间前进 ",[46,101281,39075],{}," 秒。循环 100 次，大约就是 1 秒：",[39,101284,101287],{"className":101285,"code":101286,"language":5278,"meta":44},[5276],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[46,101288,101286],{"__ignoreMap":44},[195,101290,101292],{"id":101291},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101294,101295],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[39,101297,101300],{"className":101298,"code":101299,"language":5278,"meta":44},[5276],"x y z qw qx qy qz\n",[46,101301,101299],{"__ignoreMap":44},[14,101303,101304,101305,101308,101309,101312],{},"表示一个自由刚体的位置和姿态。其中 ",[46,101306,101307],{},"x y z"," 是位置，",[46,101310,101311],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[166,101314,101316],{"id":101315},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101318,101319],{},"新建文件:",[39,101321,101323],{"className":23912,"code":101322,"language":23914,"meta":44,"style":44},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[46,101324,101325,101335,101342],{"__ignoreMap":44},[49,101326,101327,101330,101332],{"class":51,"line":52},[49,101328,101329],{"class":2055},"mkdir",[49,101331,29307],{"class":66},[49,101333,101334],{"class":328}," mujoco_tutorial\n",[49,101336,101337,101340],{"class":51,"line":84},[49,101338,101339],{"class":66},"cd",[49,101341,101334],{"class":328},[49,101343,101344,101347],{"class":51,"line":109},[49,101345,101346],{"class":2055},"touch",[49,101348,101349],{"class":328}," ch1_first_sim.py\n",[14,101351,101352],{},"写入:",[39,101354,101356],{"className":41,"code":101355,"language":43,"meta":44,"style":44},"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",[46,101357,101358,101365,101369,101373,101383,101388,101393,101397,101402,101407,101411,101416,101421,101426,101431,101436,101441,101445,101449,101453,101466,101480,101490,101494,101506,101518,101530,101542,101554,101558,101575,101580,101584,101595,101606,101610,101614,101628],{"__ignoreMap":44},[49,101359,101360,101362],{"class":51,"line":52},[49,101361,30481],{"class":59},[49,101363,101364],{"class":55}," mujoco\n",[49,101366,101367],{"class":51,"line":84},[49,101368,2492],{"emptyLinePlaceholder":151},[49,101370,101371],{"class":51,"line":109},[49,101372,2492],{"emptyLinePlaceholder":151},[49,101374,101375,101378,101380],{"class":51,"line":120},[49,101376,101377],{"class":66},"XML",[49,101379,13654],{"class":59},[49,101381,101382],{"class":328}," \"\"\"\n",[49,101384,101385],{"class":51,"line":135},[49,101386,101387],{"class":328},"\u003Cmujoco model=\"first_sim\">\n",[49,101389,101390],{"class":51,"line":1306},[49,101391,101392],{"class":328},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[49,101394,101395],{"class":51,"line":1312},[49,101396,2492],{"emptyLinePlaceholder":151},[49,101398,101399],{"class":51,"line":1403},[49,101400,101401],{"class":328},"  \u003Cworldbody>\n",[49,101403,101404],{"class":51,"line":1409},[49,101405,101406],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,101408,101409],{"class":51,"line":1421},[49,101410,2492],{"emptyLinePlaceholder":151},[49,101412,101413],{"class":51,"line":1704},[49,101414,101415],{"class":328},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[49,101417,101418],{"class":51,"line":1709},[49,101419,101420],{"class":328},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[49,101422,101423],{"class":51,"line":1715},[49,101424,101425],{"class":328},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,101427,101428],{"class":51,"line":1720},[49,101429,101430],{"class":328},"    \u003C\u002Fbody>\n",[49,101432,101433],{"class":51,"line":1734},[49,101434,101435],{"class":328},"  \u003C\u002Fworldbody>\n",[49,101437,101438],{"class":51,"line":1739},[49,101439,101440],{"class":328},"\u003C\u002Fmujoco>\n",[49,101442,101443],{"class":51,"line":1745},[49,101444,95761],{"class":328},[49,101446,101447],{"class":51,"line":1766},[49,101448,2492],{"emptyLinePlaceholder":151},[49,101450,101451],{"class":51,"line":1771},[49,101452,2492],{"emptyLinePlaceholder":151},[49,101454,101455,101457,101459,101462,101464],{"class":51,"line":1785},[49,101456,32036],{"class":59},[49,101458,2065],{"class":2055},[49,101460,101461],{"class":55},"() -> ",[49,101463,95749],{"class":66},[49,101465,3831],{"class":55},[49,101467,101468,101471,101473,101476,101478],{"class":51,"line":1790},[49,101469,101470],{"class":55},"    model ",[49,101472,60],{"class":59},[49,101474,101475],{"class":55}," mujoco.MjModel.from_xml_string(",[49,101477,101377],{"class":66},[49,101479,81],{"class":55},[49,101481,101482,101485,101487],{"class":51,"line":1819},[49,101483,101484],{"class":55},"    data ",[49,101486,60],{"class":59},[49,101488,101489],{"class":55}," mujoco.MjData(model)\n",[49,101491,101492],{"class":51,"line":1824},[49,101493,2492],{"emptyLinePlaceholder":151},[49,101495,101496,101498,101500,101503],{"class":51,"line":1841},[49,101497,31388],{"class":66},[49,101499,228],{"class":55},[49,101501,101502],{"class":328},"\"nq:\"",[49,101504,101505],{"class":55},", model.nq)\n",[49,101507,101508,101510,101512,101515],{"class":51,"line":1846},[49,101509,31388],{"class":66},[49,101511,228],{"class":55},[49,101513,101514],{"class":328},"\"nv:\"",[49,101516,101517],{"class":55},", model.nv)\n",[49,101519,101520,101522,101524,101527],{"class":51,"line":1851},[49,101521,31388],{"class":66},[49,101523,228],{"class":55},[49,101525,101526],{"class":328},"\"nu:\"",[49,101528,101529],{"class":55},", model.nu)\n",[49,101531,101532,101534,101536,101539],{"class":51,"line":1856},[49,101533,31388],{"class":66},[49,101535,228],{"class":55},[49,101537,101538],{"class":328},"\"initial time:\"",[49,101540,101541],{"class":55},", data.time)\n",[49,101543,101544,101546,101548,101551],{"class":51,"line":1870},[49,101545,31388],{"class":66},[49,101547,228],{"class":55},[49,101549,101550],{"class":328},"\"initial qpos:\"",[49,101552,101553],{"class":55},", data.qpos.copy())\n",[49,101555,101556],{"class":51,"line":1875},[49,101557,2492],{"emptyLinePlaceholder":151},[49,101559,101560,101562,101565,101567,101569,101571,101573],{"class":51,"line":2669},[49,101561,3293],{"class":59},[49,101563,101564],{"class":55}," _ ",[49,101566,26134],{"class":59},[49,101568,32532],{"class":66},[49,101570,228],{"class":55},[49,101572,533],{"class":66},[49,101574,30875],{"class":55},[49,101576,101577],{"class":51,"line":2683},[49,101578,101579],{"class":55},"        mujoco.mj_step(model, data)\n",[49,101581,101582],{"class":51,"line":2691},[49,101583,2492],{"emptyLinePlaceholder":151},[49,101585,101586,101588,101590,101593],{"class":51,"line":2696},[49,101587,31388],{"class":66},[49,101589,228],{"class":55},[49,101591,101592],{"class":328},"\"final time:\"",[49,101594,101541],{"class":55},[49,101596,101597,101599,101601,101604],{"class":51,"line":2702},[49,101598,31388],{"class":66},[49,101600,228],{"class":55},[49,101602,101603],{"class":328},"\"final qpos:\"",[49,101605,101553],{"class":55},[49,101607,101608],{"class":51,"line":2708},[49,101609,2492],{"emptyLinePlaceholder":151},[49,101611,101612],{"class":51,"line":2713},[49,101613,2492],{"emptyLinePlaceholder":151},[49,101615,101616,101618,101620,101623,101626],{"class":51,"line":8038},[49,101617,1623],{"class":59},[49,101619,31309],{"class":66},[49,101621,101622],{"class":59}," ==",[49,101624,101625],{"class":328}," \"__main__\"",[49,101627,3831],{"class":55},[49,101629,101630],{"class":51,"line":8062},[49,101631,101632],{"class":55},"    main()\n",[195,101634,101635],{"id":101635},"代码逐段解释",[14,101637,101638],{},"导入库：",[39,101640,101642],{"className":41,"code":101641,"language":43,"meta":44,"style":44},"import mujoco\n",[46,101643,101644],{"__ignoreMap":44},[49,101645,101646,101648],{"class":51,"line":52},[49,101647,30481],{"class":59},[49,101649,101364],{"class":55},[14,101651,101652],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101654,101655],{},"定义 XML：",[39,101657,101659],{"className":41,"code":101658,"language":43,"meta":44,"style":44},"XML = \"\"\"\n...\n\"\"\"\n",[46,101660,101661,101669,101674],{"__ignoreMap":44},[49,101662,101663,101665,101667],{"class":51,"line":52},[49,101664,101377],{"class":66},[49,101666,13654],{"class":59},[49,101668,101382],{"class":328},[49,101670,101671],{"class":51,"line":84},[49,101672,101673],{"class":328},"...\n",[49,101675,101676],{"class":51,"line":109},[49,101677,95761],{"class":328},[14,101679,101680,101681,101684],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[46,101682,101683],{},"freejoint"," 的方块。",[14,101686,101687],{},"编译模型：",[39,101689,101691],{"className":41,"code":101690,"language":43,"meta":44,"style":44},"model = mujoco.MjModel.from_xml_string(XML)\n",[46,101692,101693],{"__ignoreMap":44},[49,101694,101695,101698,101700,101702,101704],{"class":51,"line":52},[49,101696,101697],{"class":55},"model ",[49,101699,60],{"class":59},[49,101701,101475],{"class":55},[49,101703,101377],{"class":66},[49,101705,81],{"class":55},[14,101707,101708],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101710,101711],{},"创建数据：",[39,101713,101715],{"className":41,"code":101714,"language":43,"meta":44,"style":44},"data = mujoco.MjData(model)\n",[46,101716,101717],{"__ignoreMap":44},[49,101718,101719,101722,101724],{"class":51,"line":52},[49,101720,101721],{"class":55},"data ",[49,101723,60],{"class":59},[49,101725,101489],{"class":55},[14,101727,101728,101730,101731,101733],{},[46,101729,33490],{}," 会保存仿真当前状态。刚创建时，时间是 ",[46,101732,415],{},"，方块还在初始位置。",[14,101735,101736],{},"推进仿真：",[39,101738,101740],{"className":41,"code":101739,"language":43,"meta":44,"style":44},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[46,101741,101742,101758],{"__ignoreMap":44},[49,101743,101744,101746,101748,101750,101752,101754,101756],{"class":51,"line":52},[49,101745,3117],{"class":59},[49,101747,101564],{"class":55},[49,101749,26134],{"class":59},[49,101751,32532],{"class":66},[49,101753,228],{"class":55},[49,101755,533],{"class":66},[49,101757,30875],{"class":55},[49,101759,101760],{"class":51,"line":84},[49,101761,101762],{"class":55},"    mujoco.mj_step(model, data)\n",[14,101764,101765,101766,101768],{},"每次 ",[46,101767,101278],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[195,101770,101771],{"id":101771},"代码逐行细讲",[14,101773,101774],{},"下面把完整代码按新手视角拆开讲。",[39,101776,101777],{"className":41,"code":101641,"language":43,"meta":44,"style":44},[46,101778,101779],{"__ignoreMap":44},[49,101780,101781,101783],{"class":51,"line":52},[49,101782,30481],{"class":59},[49,101784,101364],{"class":55},[14,101786,101787,101789,101790,436,101792,436,101794,28476],{},[46,101788,30481],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[46,101791,100738],{},[46,101793,100743],{},[46,101795,101796],{},"mujoco.mj_step",[39,101798,101799],{"className":41,"code":101658,"language":43,"meta":44,"style":44},[46,101800,101801,101809,101813],{"__ignoreMap":44},[49,101802,101803,101805,101807],{"class":51,"line":52},[49,101804,101377],{"class":66},[49,101806,13654],{"class":59},[49,101808,101382],{"class":328},[49,101810,101811],{"class":51,"line":84},[49,101812,101673],{"class":328},[49,101814,101815],{"class":51,"line":109},[49,101816,95761],{"class":328},[14,101818,101819,101821,101822,101825],{},[46,101820,101377],{}," 是一个变量名。右边的三引号 ",[46,101823,101824],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[39,101827,101828],{"className":53156,"code":101387,"language":53158,"meta":44,"style":44},[46,101829,101830],{"__ignoreMap":44},[49,101831,101832,101834,101836,101839,101841,101844],{"class":51,"line":52},[49,101833,1129],{"class":55},[49,101835,101084],{"class":51389},[49,101837,101838],{"class":2055}," model",[49,101840,60],{"class":55},[49,101842,101843],{"class":328},"\"first_sim\"",[49,101845,51396],{"class":55},[14,101847,101848,101849,101852,101853,28476],{},"这是 XML 的根标签。",[46,101850,101851],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[46,101854,101855],{},"first_sim",[39,101857,101858],{"className":53156,"code":101246,"language":53158,"meta":44,"style":44},[46,101859,101860],{"__ignoreMap":44},[49,101861,101862,101864,101866,101868,101870,101872,101874,101876,101878],{"class":51,"line":52},[49,101863,1129],{"class":55},[49,101865,69255],{"class":51389},[49,101867,101257],{"class":2055},[49,101869,60],{"class":55},[49,101871,101262],{"class":328},[49,101873,101265],{"class":2055},[49,101875,60],{"class":55},[49,101877,101270],{"class":328},[49,101879,101207],{"class":55},[14,101881,101882,101884,101885,101888,101889,101892],{},[46,101883,69255],{}," 用来设置仿真参数。",[46,101886,101887],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[46,101890,101891],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[39,101894,101896],{"className":53156,"code":101895,"language":53158,"meta":44,"style":44},"\u003Cworldbody>\n",[46,101897,101898],{"__ignoreMap":44},[49,101899,101900,101902,101905],{"class":51,"line":52},[49,101901,1129],{"class":55},[49,101903,101904],{"class":51389},"worldbody",[49,101906,51396],{"class":55},[14,101908,101909,101911],{},[46,101910,101904],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[39,101913,101915],{"className":53156,"code":101914,"language":53158,"meta":44,"style":44},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,101916,101917],{"__ignoreMap":44},[49,101918,101919,101921,101923,101925,101927,101930,101932,101934,101937,101939,101941,101944,101946,101948,101951],{"class":51,"line":52},[49,101920,1129],{"class":55},[49,101922,101183],{"class":51389},[49,101924,15010],{"class":2055},[49,101926,60],{"class":55},[49,101928,101929],{"class":328},"\"floor\"",[49,101931,53913],{"class":2055},[49,101933,60],{"class":55},[49,101935,101936],{"class":328},"\"plane\"",[49,101938,101199],{"class":2055},[49,101940,60],{"class":55},[49,101942,101943],{"class":328},"\"2 2 0.1\"",[49,101945,78856],{"class":2055},[49,101947,60],{"class":55},[49,101949,101950],{"class":328},"\"0.8 0.8 0.8 1\"",[49,101952,101207],{"class":55},[14,101954,101955,101956,101958,101959,101962,101963,101966,101967,101969],{},"这行创建地面。",[46,101957,101183],{}," 是几何体。",[46,101960,101961],{},"name=\"floor\""," 是名字。",[46,101964,101965],{},"type=\"plane\""," 表示平面。",[46,101968,55199],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[39,101971,101973],{"className":53156,"code":101972,"language":53158,"meta":44,"style":44},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[46,101974,101975],{"__ignoreMap":44},[49,101976,101977,101979,101981,101983,101985,101987,101989,101991,101993],{"class":51,"line":52},[49,101978,1129],{"class":55},[49,101980,51889],{"class":51389},[49,101982,15010],{"class":2055},[49,101984,60],{"class":55},[49,101986,53580],{"class":328},[49,101988,101169],{"class":2055},[49,101990,60],{"class":55},[49,101992,101174],{"class":328},[49,101994,51396],{"class":55},[14,101996,101997,101998,28476,102000,102003,102004,102006],{},"这行创建一个刚体，名字叫 ",[46,101999,53803],{},[46,102001,102002],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[46,102005,101232],{},"，也就是离地面 1 米高。",[39,102008,102010],{"className":53156,"code":102009,"language":53158,"meta":44,"style":44},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[46,102011,102012],{"__ignoreMap":44},[49,102013,102014,102016,102018,102020,102022,102025],{"class":51,"line":52},[49,102015,1129],{"class":55},[49,102017,101683],{"class":51389},[49,102019,15010],{"class":2055},[49,102021,60],{"class":55},[49,102023,102024],{"class":328},"\"box_free\"",[49,102026,101207],{"class":55},[14,102028,102029,102030,102032],{},"这行很重要。",[46,102031,101683],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[39,102034,102036],{"className":53156,"code":102035,"language":53158,"meta":44,"style":44},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,102037,102038],{"__ignoreMap":44},[49,102039,102040,102042,102044,102046,102048,102050,102052,102054,102056,102058,102060,102062,102065,102067,102069,102071,102073,102076],{"class":51,"line":52},[49,102041,1129],{"class":55},[49,102043,101183],{"class":51389},[49,102045,15010],{"class":2055},[49,102047,60],{"class":55},[49,102049,101190],{"class":328},[49,102051,53913],{"class":2055},[49,102053,60],{"class":55},[49,102055,53580],{"class":328},[49,102057,101199],{"class":2055},[49,102059,60],{"class":55},[49,102061,101204],{"class":328},[49,102063,102064],{"class":2055}," mass",[49,102066,60],{"class":55},[49,102068,3770],{"class":328},[49,102070,78856],{"class":2055},[49,102072,60],{"class":55},[49,102074,102075],{"class":328},"\"1 0 0 1\"",[49,102077,101207],{"class":55},[14,102079,102080,102081,102084,102085,102088,102089,102092,102093,102096],{},"这行给 box body 添加一个盒子形状。",[46,102082,102083],{},"type=\"box\""," 表示形状是盒子。",[46,102086,102087],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[46,102090,102091],{},"mass=\"1\""," 表示质量是 1。",[46,102094,102095],{},"rgba=\"1 0 0 1\""," 表示红色。",[39,102098,102100],{"className":41,"code":102099,"language":43,"meta":44,"style":44},"def main() -> None:\n",[46,102101,102102],{"__ignoreMap":44},[49,102103,102104,102106,102108,102110,102112],{"class":51,"line":52},[49,102105,32036],{"class":59},[49,102107,2065],{"class":2055},[49,102109,101461],{"class":55},[49,102111,95749],{"class":66},[49,102113,3831],{"class":55},[14,102115,102116,102118,102119,102122,102123,102126],{},[46,102117,32036],{}," 用来定义函数。这里定义了一个叫 ",[46,102120,102121],{},"main"," 的函数。",[46,102124,102125],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[39,102128,102129],{"className":41,"code":101690,"language":43,"meta":44,"style":44},[46,102130,102131],{"__ignoreMap":44},[49,102132,102133,102135,102137,102139,102141],{"class":51,"line":52},[49,102134,101697],{"class":55},[49,102136,60],{"class":59},[49,102138,101475],{"class":55},[49,102140,101377],{"class":66},[49,102142,81],{"class":55},[14,102144,102145,102146,102149],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[46,102147,102148],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[39,102151,102152],{"className":41,"code":101714,"language":43,"meta":44,"style":44},[46,102153,102154],{"__ignoreMap":44},[49,102155,102156,102158,102160],{"class":51,"line":52},[49,102157,101721],{"class":55},[49,102159,60],{"class":59},[49,102161,101489],{"class":55},[14,102163,102164,102165,102167,102168,102170],{},"这行创建仿真数据。",[46,102166,33490],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[46,102169,33490],{}," 都会变化。",[39,102172,102174],{"className":41,"code":102173,"language":43,"meta":44,"style":44},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[46,102175,102176,102186,102196],{"__ignoreMap":44},[49,102177,102178,102180,102182,102184],{"class":51,"line":52},[49,102179,30504],{"class":66},[49,102181,228],{"class":55},[49,102183,101502],{"class":328},[49,102185,101505],{"class":55},[49,102187,102188,102190,102192,102194],{"class":51,"line":84},[49,102189,30504],{"class":66},[49,102191,228],{"class":55},[49,102193,101514],{"class":328},[49,102195,101517],{"class":55},[49,102197,102198,102200,102202,102204],{"class":51,"line":109},[49,102199,30504],{"class":66},[49,102201,228],{"class":55},[49,102203,101526],{"class":328},[49,102205,101529],{"class":55},[14,102207,102208,102210,102211,102214,102215,102218,102219,102222,102223,102226],{},[46,102209,30504],{}," 用来输出信息。",[46,102212,102213],{},"model.nq"," 是位置变量数量，",[46,102216,102217],{},"model.nv"," 是速度变量数量，",[46,102220,102221],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[46,102224,102225],{},"nu"," 是 0。",[39,102228,102230],{"className":41,"code":102229,"language":43,"meta":44,"style":44},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[46,102231,102232,102242],{"__ignoreMap":44},[49,102233,102234,102236,102238,102240],{"class":51,"line":52},[49,102235,30504],{"class":66},[49,102237,228],{"class":55},[49,102239,101538],{"class":328},[49,102241,101541],{"class":55},[49,102243,102244,102246,102248,102250],{"class":51,"line":84},[49,102245,30504],{"class":66},[49,102247,228],{"class":55},[49,102249,101550],{"class":328},[49,102251,101553],{"class":55},[14,102253,102254,102255,102257,102258,102260,102261,102264],{},"这里打印初始时间和初始位置。",[46,102256,101130],{}," 一开始是 0。",[46,102259,101133],{}," 是位置数组。",[46,102262,102263],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[39,102266,102267],{"className":41,"code":101739,"language":43,"meta":44,"style":44},[46,102268,102269,102285],{"__ignoreMap":44},[49,102270,102271,102273,102275,102277,102279,102281,102283],{"class":51,"line":52},[49,102272,3117],{"class":59},[49,102274,101564],{"class":55},[49,102276,26134],{"class":59},[49,102278,32532],{"class":66},[49,102280,228],{"class":55},[49,102282,533],{"class":66},[49,102284,30875],{"class":55},[49,102286,102287],{"class":51,"line":84},[49,102288,101762],{"class":55},[14,102290,102291,102293,102294,102297,102298,102300,102301,102303],{},[46,102292,3117],{}," 是循环。",[46,102295,102296],{},"range(100)"," 表示循环 100 次。",[46,102299,1211],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[46,102302,101278],{},"，仿真就前进一步。",[39,102305,102307],{"className":41,"code":102306,"language":43,"meta":44,"style":44},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[46,102308,102309,102319],{"__ignoreMap":44},[49,102310,102311,102313,102315,102317],{"class":51,"line":52},[49,102312,30504],{"class":66},[49,102314,228],{"class":55},[49,102316,101592],{"class":328},[49,102318,101541],{"class":55},[49,102320,102321,102323,102325,102327],{"class":51,"line":84},[49,102322,30504],{"class":66},[49,102324,228],{"class":55},[49,102326,101603],{"class":328},[49,102328,101553],{"class":55},[14,102330,102331],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[39,102333,102335],{"className":41,"code":102334,"language":43,"meta":44,"style":44},"if __name__ == \"__main__\":\n    main()\n",[46,102336,102337,102349],{"__ignoreMap":44},[49,102338,102339,102341,102343,102345,102347],{"class":51,"line":52},[49,102340,1623],{"class":59},[49,102342,31309],{"class":66},[49,102344,101622],{"class":59},[49,102346,101625],{"class":328},[49,102348,3831],{"class":55},[49,102350,102351],{"class":51,"line":84},[49,102352,101632],{"class":55},[14,102354,102355,102356,102359,102360,28476],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[46,102357,102358],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[46,102361,102358],{},[14,102363,102364],{},"运行:",[39,102366,102368],{"className":23912,"code":102367,"language":23914,"meta":44,"style":44},"python ch1_first_sim.py\n",[46,102369,102370],{"__ignoreMap":44},[49,102371,102372,102374],{"class":51,"line":52},[49,102373,43],{"class":2055},[49,102375,101349],{"class":328},[166,102377,102379],{"id":102378},"_5运行结果说明","5.运行结果说明",[14,102381,102382],{},"你应该看到类似输出:",[39,102384,102387],{"className":102385,"code":102386,"language":5278,"meta":44},[5276],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[46,102388,102386],{"__ignoreMap":44},[14,102390,102391,102393,102394,102397,102398,28476],{},[46,102392,101683],{}," 有 7 个位置变量: ",[46,102395,102396],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[46,102399,102400],{},"vx vy vz wx wy wz",[14,102402,102403,102404,102407],{},"你还会看到 ",[46,102405,102406],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[166,102409,102411],{"id":102410},"_6验证步骤","6.验证步骤",[14,102413,102414],{},"确认版本:",[39,102416,102417],{"className":23912,"code":101002,"language":23914,"meta":44,"style":44},[46,102418,102419],{"__ignoreMap":44},[49,102420,102421,102423,102425],{"class":51,"line":52},[49,102422,43],{"class":2055},[49,102424,30449],{"class":66},[49,102426,101013],{"class":328},[14,102428,102429],{},"确认导入的是官方 bindings:",[39,102431,102433],{"className":23912,"code":102432,"language":23914,"meta":44,"style":44},"python -c \"import mujoco; print(mujoco)\"\n",[46,102434,102435],{"__ignoreMap":44},[49,102436,102437,102439,102441],{"class":51,"line":52},[49,102438,43],{"class":2055},[49,102440,30449],{"class":66},[49,102442,102443],{"class":328}," \"import mujoco; print(mujoco)\"\n",[14,102445,102446],{},"运行程序:",[39,102448,102449],{"className":23912,"code":102367,"language":23914,"meta":44,"style":44},[46,102450,102451],{"__ignoreMap":44},[49,102452,102453,102455],{"class":51,"line":52},[49,102454,43],{"class":2055},[49,102456,101349],{"class":328},[14,102458,102459,102460,102463,102464,28476],{},"检查 ",[46,102461,102462],{},"final time"," 是否约等于 ",[46,102465,102466],{},"1.0",[14,102468,102469],{},"再做几个小实验：",[178,102471,102472,102482,102490,102503],{},[181,102473,102474,102475,102477,102478,102481],{},"把 ",[46,102476,102002],{}," 改成 ",[46,102479,102480],{},"pos=\"0 0 2\"","，观察初始高度变化。",[181,102483,102474,102484,102477,102486,102489],{},[46,102485,101891],{},[46,102487,102488],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[181,102491,102474,102492,102477,102494,102497,102498,102500,102501,28476],{},[46,102493,101887],{},[46,102495,102496],{},"timestep=\"0.005\"","，观察 100 步后的 ",[46,102499,102462],{}," 是否变成约 ",[46,102502,35418],{},[181,102504,102505,102506,102509],{},"删除 ",[46,102507,102508],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102511,102512],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[166,102514,102516],{"id":102515},"_7常见错误与解决方案","7.常见错误与解决方案",[195,102518,102520],{"id":102519},"modulenotfounderror-no-module-named-mujoco",[46,102521,102522],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102524,102525],{},"解决:",[39,102527,102529],{"className":23912,"code":102528,"language":23914,"meta":44,"style":44},"pip install \"mujoco>=2.3\"\n",[46,102530,102531],{"__ignoreMap":44},[49,102532,102533,102535,102537],{"class":51,"line":52},[49,102534,23921],{"class":2055},[49,102536,23924],{"class":328},[49,102538,102539],{"class":328}," \"mujoco>=2.3\"\n",[195,102541,102543],{"id":102542},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102545,102546],{},"先安装系统依赖:",[39,102548,102550],{"className":23912,"code":102549,"language":23914,"meta":44,"style":44},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[46,102551,102552],{"__ignoreMap":44},[49,102553,102554,102556,102558,102560,102562,102565,102567,102570,102572,102575,102577],{"class":51,"line":52},[49,102555,24667],{"class":2055},[49,102557,26406],{"class":328},[49,102559,23924],{"class":328},[49,102561,26491],{"class":66},[49,102563,102564],{"class":328}," mesa-libGL",[49,102566,100877],{"class":328},[49,102568,102569],{"class":328}," glfw",[49,102571,100897],{"class":328},[49,102573,102574],{"class":328}," libX11",[49,102576,100910],{"class":328},[49,102578,102579],{"class":328}," libXrandr\n",[195,102581,102583],{"id":102582},"xml-解析失败","XML 解析失败",[14,102585,102586],{},"检查:",[178,102588,102589,102592,102595,102601],{},[181,102590,102591],{},"标签是否闭合",[181,102593,102594],{},"属性是否带引号",[181,102596,102597,102598],{},"根节点是否是 ",[46,102599,102600],{},"\u003Cmujoco>",[181,102602,102603,102605,102606,102609],{},[46,102604,51889],{}," 是否放在 ",[46,102607,102608],{},"\u003Cworldbody>"," 内部",[195,102611,102613,102615,102616],{"id":102612},"final-time-不是严格等于-10",[46,102614,102462],{}," 不是严格等于 ",[46,102617,102466],{},[14,102619,102620],{},"这通常不是错误。浮点数计算可能得到：",[39,102622,102625],{"className":102623,"code":102624,"language":5278,"meta":44},[5276],"1.0000000000000007\n",[46,102626,102624],{"__ignoreMap":44},[14,102628,102629,102630,102632],{},"只要接近 ",[46,102631,102466],{}," 就正常。",[195,102634,102635],{"id":102635},"方块没有掉下来",[14,102637,102638],{},"检查：",[178,102640,102641,102647,102653,102658],{},[181,102642,102643,102644],{},"方块 body 里是否有 ",[46,102645,102646],{},"\u003Cfreejoint\u002F>",[181,102648,102649,102650],{},"重力是否是 ",[46,102651,102652],{},"0 0 -9.81",[181,102654,102655,102656],{},"是否真的调用了 ",[46,102657,100748],{},[181,102659,102660,102661,102663,102664],{},"你看的是否是 ",[46,102662,102406],{},"，不是 ",[46,102665,102666],{},"initial qpos",[166,102668,102670],{"id":102669},"_8本章小结","8.本章小结",[14,102672,102673],{},"本章你已经完成了 MuJoCo 的最小闭环：",[39,102675,102678],{"className":102676,"code":102677,"language":5278,"meta":44},[5276],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[46,102679,102677],{"__ignoreMap":44},[14,102681,102682],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[143,102684,102685],{},"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":44,"searchDepth":84,"depth":84,"links":102687},[102688,102689,102690,102695,102699,102700,102701,102709],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":102691},[102692,102693,102694],{"id":101145,"depth":109,"text":101146},{"id":101239,"depth":109,"text":101240},{"id":101291,"depth":109,"text":101292},{"id":101315,"depth":84,"text":101316,"children":102696},[102697,102698],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":102702},[102703,102704,102705,102706,102708],{"id":102519,"depth":109,"text":102522},{"id":102542,"depth":109,"text":102543},{"id":102582,"depth":109,"text":102583},{"id":102612,"depth":109,"text":102707},"final time 不是严格等于 1.0",{"id":102635,"depth":109,"text":102635},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100701,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102716,"title":102717,"body":102718,"description":44,"extension":149,"meta":104374,"navigation":151,"path":104375,"seo":104376,"stem":104377,"__hash__":104378},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102719,"toc":104350},[102720,102723,102725,102728,102731,102748,102843,102846,102852,102854,102856,102880,102883,102897,102900,102941,102943,102956,102958,102961,103009,103021,103024,103027,103033,103046,103113,103116,103135,103138,103141,103147,103149,103158,103161,103165,103174,103256,103265,103269,103275,103289,103299,103301,103631,103634,103646,103648,103659,103661,103664,103682,103685,103688,103706,103717,103720,103735,103745,103747,103768,103785,103805,103811,103851,103867,103883,103889,103892,103916,103932,103937,103967,103984,104009,104012,104027,104036,104051,104060,104075,104082,104084,104094,104107,104114,104117,104156,104163,104165,104217,104219,104225,104228,104235,104242,104245,104247,104265,104268,104271,104305,104317,104319,104322,104344,104347],[10,102721,102717],{"id":102722},"_2xml-与-mjcf-物理建模基础",[166,102724,100710],{"id":100709},[14,102726,102727],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102729,102730],{},"本章结束后，你应该能看懂一个简单模型里：",[178,102732,102733,102736,102739,102742,102745],{},[181,102734,102735],{},"地面在哪里。",[181,102737,102738],{},"物体初始位置在哪里。",[181,102740,102741],{},"几何体是什么形状。",[181,102743,102744],{},"哪些 body 可以自由运动。",[181,102746,102747],{},"如何用名字在 Python 里找到 XML 中的对象。",[361,102749,102750,102760],{},[364,102751,102752],{},[367,102753,102754,102757],{},[370,102755,102756],{"align":23826},"标签",[370,102758,102759],{"align":23826},"作用",[408,102761,102762,102771,102781,102790,102800,102810,102823,102833],{},[367,102763,102764,102768],{},[413,102765,102766],{"align":23826},[46,102767,102600],{},[413,102769,102770],{"align":23826},"根节点",[367,102772,102773,102778],{},[413,102774,102775],{"align":23826},[46,102776,102777],{},"\u003Coption>",[413,102779,102780],{"align":23826},"仿真参数",[367,102782,102783,102787],{},[413,102784,102785],{"align":23826},[46,102786,102608],{},[413,102788,102789],{"align":23826},"世界中的物体",[367,102791,102792,102797],{},[413,102793,102794],{"align":23826},[46,102795,102796],{},"\u003Cbody>",[413,102798,102799],{"align":23826},"刚体",[367,102801,102802,102807],{},[413,102803,102804],{"align":23826},[46,102805,102806],{},"\u003Cgeom>",[413,102808,102809],{"align":23826},"几何体、碰撞体、可视体",[367,102811,102812,102820],{},[413,102813,102814,25069,102817],{"align":23826},[46,102815,102816],{},"\u003Cjoint>",[46,102818,102819],{},"\u003Cfreejoint>",[413,102821,102822],{"align":23826},"关节",[367,102824,102825,102830],{},[413,102826,102827],{"align":23826},[46,102828,102829],{},"\u003Csite>",[413,102831,102832],{"align":23826},"标记点",[367,102834,102835,102840],{},[413,102836,102837],{"align":23826},[46,102838,102839],{},"\u003Cactuator>",[413,102841,102842],{"align":23826},"控制器",[14,102844,102845],{},"初学时可以先记住：",[39,102847,102850],{"className":102848,"code":102849,"language":5278,"meta":44},[5276],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[46,102851,102849],{"__ignoreMap":44},[166,102853,100833],{"id":100832},[14,102855,100836],{},[39,102857,102859],{"className":23912,"code":102858,"language":23914,"meta":44,"style":44},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[46,102860,102861],{"__ignoreMap":44},[49,102862,102863,102865,102867,102869,102871,102873,102875,102877],{"class":51,"line":52},[49,102864,24667],{"class":2055},[49,102866,26406],{"class":328},[49,102868,23924],{"class":328},[49,102870,26491],{"class":66},[49,102872,102564],{"class":328},[49,102874,100877],{"class":328},[49,102876,102569],{"class":328},[49,102878,102879],{"class":328}," glfw-devel\n",[14,102881,102882],{},"pip:",[39,102884,102885],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},[46,102886,102887],{"__ignoreMap":44},[49,102888,102889,102891,102893,102895],{"class":51,"line":52},[49,102890,23921],{"class":2055},[49,102892,23924],{"class":328},[49,102894,100993],{"class":328},[49,102896,100996],{"class":328},[14,102898,102899],{},"conda:",[39,102901,102903],{"className":23912,"code":102902,"language":23914,"meta":44,"style":44},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[46,102904,102905,102922,102931],{"__ignoreMap":44},[49,102906,102907,102909,102911,102913,102916,102918,102920],{"class":51,"line":52},[49,102908,30421],{"class":2055},[49,102910,29267],{"class":328},[49,102912,25206],{"class":66},[49,102914,102915],{"class":328}," mujoco-xml",[49,102917,101038],{"class":328},[49,102919,101041],{"class":66},[49,102921,101044],{"class":66},[49,102923,102924,102926,102928],{"class":51,"line":84},[49,102925,30421],{"class":2055},[49,102927,101051],{"class":328},[49,102929,102930],{"class":328}," mujoco-xml\n",[49,102932,102933,102935,102937,102939],{"class":51,"line":109},[49,102934,23921],{"class":2055},[49,102936,23924],{"class":328},[49,102938,100993],{"class":328},[49,102940,100996],{"class":328},[14,102942,101067],{},[178,102944,102945,102948,102953],{},[181,102946,102947],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[181,102949,102950,102951,28476],{},"本章使用基础标签，适用于 ",[46,102952,101090],{},[181,102954,102955],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[166,102957,101108],{"id":101107},[14,102959,102960],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[39,102962,102964],{"className":53156,"code":102963,"language":53158,"meta":44,"style":44},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[46,102965,102966,102980,102988,102993,103001],{"__ignoreMap":44},[49,102967,102968,102970,102972,102974,102976,102978],{"class":51,"line":52},[49,102969,1129],{"class":55},[49,102971,101084],{"class":51389},[49,102973,101838],{"class":2055},[49,102975,60],{"class":55},[49,102977,62768],{"class":328},[49,102979,51396],{"class":55},[49,102981,102982,102984,102986],{"class":51,"line":84},[49,102983,52233],{"class":55},[49,102985,101904],{"class":51389},[49,102987,51396],{"class":55},[49,102989,102990],{"class":51,"line":109},[49,102991,102992],{"class":55},"    ...\n",[49,102994,102995,102997,102999],{"class":51,"line":120},[49,102996,52506],{"class":55},[49,102998,101904],{"class":51389},[49,103000,51396],{"class":55},[49,103002,103003,103005,103007],{"class":51,"line":135},[49,103004,51874],{"class":55},[49,103006,101084],{"class":51389},[49,103008,51396],{"class":55},[14,103010,103011,103013,103014,103016,103017,103020],{},[46,103012,51889],{}," 表示刚体。",[46,103015,101183],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[46,103018,103019],{},"joint"," 表示刚体相对父刚体如何运动。",[195,103022,103023],{"id":103023},"层级结构非常重要",[14,103025,103026],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[39,103028,103031],{"className":103029,"code":103030,"language":5278,"meta":44},[5276],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[46,103032,103030],{"__ignoreMap":44},[14,103034,103035,101081,103038,103041,103042,103045],{},[46,103036,103037],{},"red_box_geom",[46,103039,103040],{},"box_center"," 都属于 ",[46,103043,103044],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[39,103047,103049],{"className":53156,"code":103048,"language":53158,"meta":44,"style":44},"\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",[46,103050,103051,103071,103085,103105],{"__ignoreMap":44},[49,103052,103053,103055,103057,103059,103061,103063,103065,103067,103069],{"class":51,"line":52},[49,103054,1129],{"class":55},[49,103056,51889],{"class":51389},[49,103058,15010],{"class":2055},[49,103060,60],{"class":55},[49,103062,53580],{"class":328},[49,103064,101169],{"class":2055},[49,103066,60],{"class":55},[49,103068,101174],{"class":328},[49,103070,51396],{"class":55},[49,103072,103073,103075,103077,103079,103081,103083],{"class":51,"line":84},[49,103074,52233],{"class":55},[49,103076,101683],{"class":51389},[49,103078,15010],{"class":2055},[49,103080,60],{"class":55},[49,103082,102024],{"class":328},[49,103084,101207],{"class":55},[49,103086,103087,103089,103091,103093,103095,103097,103099,103101,103103],{"class":51,"line":109},[49,103088,52233],{"class":55},[49,103090,101183],{"class":51389},[49,103092,53913],{"class":2055},[49,103094,60],{"class":55},[49,103096,53580],{"class":328},[49,103098,101199],{"class":2055},[49,103100,60],{"class":55},[49,103102,101204],{"class":328},[49,103104,101207],{"class":55},[49,103106,103107,103109,103111],{"class":51,"line":120},[49,103108,51874],{"class":55},[49,103110,51889],{"class":51389},[49,103112,51396],{"class":55},[14,103114,103115],{},"含义:",[178,103117,103118,103124,103129,103132],{},[181,103119,103120,103121,103123],{},"创建名为 ",[46,103122,53803],{}," 的刚体",[181,103125,103126,103127],{},"初始位置在世界坐标 ",[46,103128,101232],{},[181,103130,103131],{},"它有一个自由关节",[181,103133,103134],{},"它有一个盒子几何体",[195,103136,103137],{"id":103137},"坐标怎么理解",[14,103139,103140],{},"MuJoCo 默认使用三维坐标：",[39,103142,103145],{"className":103143,"code":103144,"language":5278,"meta":44},[5276],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[46,103146,103144],{"__ignoreMap":44},[14,103148,14723],{},[39,103150,103152],{"className":53156,"code":103151,"language":53158,"meta":44,"style":44},"pos=\"0 0 1\"\n",[46,103153,103154],{"__ignoreMap":44},[49,103155,103156],{"class":51,"line":52},[49,103157,103151],{"class":55},[14,103159,103160],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[195,103162,103164],{"id":103163},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103166,103167,103168,82619,103171,103173],{},"不同 ",[46,103169,103170],{},"type",[46,103172,31585],{}," 含义不同：",[361,103175,103176,103191],{},[364,103177,103178],{},[367,103179,103180,103184,103189],{},[370,103181,103182],{"align":23826},[46,103183,103170],{},[370,103185,103186,103188],{"align":23826},[46,103187,31585],{}," 示例",[370,103190,100763],{"align":23826},[408,103192,103193,103207,103222,103241],{},[367,103194,103195,103199,103204],{},[413,103196,103197],{"align":23826},[46,103198,53803],{},[413,103200,103201],{"align":23826},[46,103202,103203],{},"size=\"0.1 0.2 0.3\"",[413,103205,103206],{"align":23826},"x\u002Fy\u002Fz 半边长，不是完整长度",[367,103208,103209,103214,103219],{},[413,103210,103211],{"align":23826},[46,103212,103213],{},"sphere",[413,103215,103216],{"align":23826},[46,103217,103218],{},"size=\"0.1\"",[413,103220,103221],{"align":23826},"球半径",[367,103223,103224,103229,103234],{},[413,103225,103226],{"align":23826},[46,103227,103228],{},"capsule",[413,103230,103231],{"align":23826},[46,103232,103233],{},"size=\"0.03\"",[413,103235,103236,103237,103240],{"align":23826},"胶囊半径，长度常用 ",[46,103238,103239],{},"fromto"," 指定",[367,103242,103243,103248,103253],{},[413,103244,103245],{"align":23826},[46,103246,103247],{},"plane",[413,103249,103250],{"align":23826},[46,103251,103252],{},"size=\"3 3 0.1\"",[413,103254,103255],{"align":23826},"可视平面大小，通常当地面",[14,103257,103258,103259,103261,103262,103264],{},"最容易踩坑的是 box：",[46,103260,102087],{}," 表示边长大约是 ",[46,103263,32126],{},"，因为 MuJoCo 用的是半边长。",[195,103266,103268],{"id":103267},"site-是什么","site 是什么",[14,103270,103271,103274],{},[46,103272,103273],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[178,103276,103277,103280,103283,103286],{},[181,103278,103279],{},"标记机械臂末端。",[181,103281,103282],{},"标记目标位置。",[181,103284,103285],{},"放传感器或相机参考点。",[181,103287,103288],{},"在 Python 中读取某个关键点的世界坐标。",[14,103290,103291,103292,101081,103295,103298],{},"在后面的 Reacher 任务中，",[46,103293,103294],{},"tip",[46,103296,103297],{},"target"," 就会用 site 表示。",[166,103300,101316],{"id":101315},[39,103302,103304],{"className":41,"code":103303,"language":43,"meta":44,"style":44},"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",[46,103305,103306,103312,103322,103326,103330,103338,103343,103347,103351,103355,103360,103364,103369,103374,103379,103384,103388,103392,103396,103400,103404,103408,103420,103432,103440,103444,103459,103474,103478,103491,103506,103519,103532,103536,103552,103556,103560,103571,103583,103595,103607,103611,103615,103627],{"__ignoreMap":44},[49,103307,103308,103310],{"class":51,"line":52},[49,103309,30481],{"class":59},[49,103311,101364],{"class":55},[49,103313,103314,103316,103318,103320],{"class":51,"line":84},[49,103315,30481],{"class":59},[49,103317,31469],{"class":55},[49,103319,31472],{"class":59},[49,103321,31475],{"class":55},[49,103323,103324],{"class":51,"line":109},[49,103325,2492],{"emptyLinePlaceholder":151},[49,103327,103328],{"class":51,"line":120},[49,103329,2492],{"emptyLinePlaceholder":151},[49,103331,103332,103334,103336],{"class":51,"line":135},[49,103333,101377],{"class":66},[49,103335,13654],{"class":59},[49,103337,101382],{"class":328},[49,103339,103340],{"class":51,"line":1306},[49,103341,103342],{"class":328},"\u003Cmujoco model=\"xml_basic\">\n",[49,103344,103345],{"class":51,"line":1312},[49,103346,101392],{"class":328},[49,103348,103349],{"class":51,"line":1403},[49,103350,2492],{"emptyLinePlaceholder":151},[49,103352,103353],{"class":51,"line":1409},[49,103354,101401],{"class":328},[49,103356,103357],{"class":51,"line":1421},[49,103358,103359],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[49,103361,103362],{"class":51,"line":1704},[49,103363,2492],{"emptyLinePlaceholder":151},[49,103365,103366],{"class":51,"line":1709},[49,103367,103368],{"class":328},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[49,103370,103371],{"class":51,"line":1715},[49,103372,103373],{"class":328},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[49,103375,103376],{"class":51,"line":1720},[49,103377,103378],{"class":328},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,103380,103381],{"class":51,"line":1734},[49,103382,103383],{"class":328},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,103385,103386],{"class":51,"line":1739},[49,103387,101430],{"class":328},[49,103389,103390],{"class":51,"line":1745},[49,103391,101435],{"class":328},[49,103393,103394],{"class":51,"line":1766},[49,103395,101440],{"class":328},[49,103397,103398],{"class":51,"line":1771},[49,103399,95761],{"class":328},[49,103401,103402],{"class":51,"line":1785},[49,103403,2492],{"emptyLinePlaceholder":151},[49,103405,103406],{"class":51,"line":1790},[49,103407,2492],{"emptyLinePlaceholder":151},[49,103409,103410,103412,103414,103416,103418],{"class":51,"line":1819},[49,103411,32036],{"class":59},[49,103413,2065],{"class":2055},[49,103415,101461],{"class":55},[49,103417,95749],{"class":66},[49,103419,3831],{"class":55},[49,103421,103422,103424,103426,103428,103430],{"class":51,"line":1824},[49,103423,101470],{"class":55},[49,103425,60],{"class":59},[49,103427,101475],{"class":55},[49,103429,101377],{"class":66},[49,103431,81],{"class":55},[49,103433,103434,103436,103438],{"class":51,"line":1841},[49,103435,101484],{"class":55},[49,103437,60],{"class":59},[49,103439,101489],{"class":55},[49,103441,103442],{"class":51,"line":1846},[49,103443,2492],{"emptyLinePlaceholder":151},[49,103445,103446,103449,103451,103454,103457],{"class":51,"line":1851},[49,103447,103448],{"class":55},"    box_body_id ",[49,103450,60],{"class":59},[49,103452,103453],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[49,103455,103456],{"class":328},"\"red_box\"",[49,103458,81],{"class":55},[49,103460,103461,103464,103466,103469,103472],{"class":51,"line":1856},[49,103462,103463],{"class":55},"    site_id ",[49,103465,60],{"class":59},[49,103467,103468],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[49,103470,103471],{"class":328},"\"box_center\"",[49,103473,81],{"class":55},[49,103475,103476],{"class":51,"line":1870},[49,103477,2492],{"emptyLinePlaceholder":151},[49,103479,103480,103482,103485,103487,103489],{"class":51,"line":1875},[49,103481,3193],{"class":59},[49,103483,103484],{"class":55}," box_body_id ",[49,103486,1129],{"class":59},[49,103488,4185],{"class":66},[49,103490,3831],{"class":55},[49,103492,103493,103496,103499,103501,103504],{"class":51,"line":2669},[49,103494,103495],{"class":59},"        raise",[49,103497,103498],{"class":66}," RuntimeError",[49,103500,228],{"class":55},[49,103502,103503],{"class":328},"\"body red_box not found\"",[49,103505,81],{"class":55},[49,103507,103508,103510,103513,103515,103517],{"class":51,"line":2683},[49,103509,3193],{"class":59},[49,103511,103512],{"class":55}," site_id ",[49,103514,1129],{"class":59},[49,103516,4185],{"class":66},[49,103518,3831],{"class":55},[49,103520,103521,103523,103525,103527,103530],{"class":51,"line":2691},[49,103522,103495],{"class":59},[49,103524,103498],{"class":66},[49,103526,228],{"class":55},[49,103528,103529],{"class":328},"\"site box_center not found\"",[49,103531,81],{"class":55},[49,103533,103534],{"class":51,"line":2696},[49,103535,2492],{"emptyLinePlaceholder":151},[49,103537,103538,103540,103542,103544,103546,103548,103550],{"class":51,"line":2702},[49,103539,3293],{"class":59},[49,103541,101564],{"class":55},[49,103543,26134],{"class":59},[49,103545,32532],{"class":66},[49,103547,228],{"class":55},[49,103549,1814],{"class":66},[49,103551,30875],{"class":55},[49,103553,103554],{"class":51,"line":2708},[49,103555,101579],{"class":55},[49,103557,103558],{"class":51,"line":2713},[49,103559,2492],{"emptyLinePlaceholder":151},[49,103561,103562,103564,103566,103569],{"class":51,"line":8038},[49,103563,31388],{"class":66},[49,103565,228],{"class":55},[49,103567,103568],{"class":328},"\"simulation time:\"",[49,103570,101541],{"class":55},[49,103572,103573,103575,103577,103580],{"class":51,"line":8062},[49,103574,31388],{"class":66},[49,103576,228],{"class":55},[49,103578,103579],{"class":328},"\"box body position:\"",[49,103581,103582],{"class":55},", data.xpos[box_body_id].copy())\n",[49,103584,103585,103587,103589,103592],{"class":51,"line":8067},[49,103586,31388],{"class":66},[49,103588,228],{"class":55},[49,103590,103591],{"class":328},"\"site position:\"",[49,103593,103594],{"class":55},", data.site_xpos[site_id].copy())\n",[49,103596,103597,103599,103601,103604],{"class":51,"line":8073},[49,103598,31388],{"class":66},[49,103600,228],{"class":55},[49,103602,103603],{"class":328},"\"box qpos:\"",[49,103605,103606],{"class":55},", np.array(data.qpos))\n",[49,103608,103609],{"class":51,"line":8100},[49,103610,2492],{"emptyLinePlaceholder":151},[49,103612,103613],{"class":51,"line":8105},[49,103614,2492],{"emptyLinePlaceholder":151},[49,103616,103617,103619,103621,103623,103625],{"class":51,"line":8111},[49,103618,1623],{"class":59},[49,103620,31309],{"class":66},[49,103622,101622],{"class":59},[49,103624,101625],{"class":328},[49,103626,3831],{"class":55},[49,103628,103629],{"class":51,"line":8123},[49,103630,101632],{"class":55},[14,103632,103633],{},"保存为：",[39,103635,103637],{"className":23912,"code":103636,"language":23914,"meta":44,"style":44},"touch ch2_xml_basic.py\n",[46,103638,103639],{"__ignoreMap":44},[49,103640,103641,103643],{"class":51,"line":52},[49,103642,101346],{"class":2055},[49,103644,103645],{"class":328}," ch2_xml_basic.py\n",[14,103647,102364],{},[39,103649,103651],{"className":23912,"code":103650,"language":23914,"meta":44,"style":44},"python ch2_xml_basic.py\n",[46,103652,103653],{"__ignoreMap":44},[49,103654,103655,103657],{"class":51,"line":52},[49,103656,43],{"class":2055},[49,103658,103645],{"class":328},[195,103660,101635],{"id":101635},[14,103662,103663],{},"用名字查找 body：",[39,103665,103667],{"className":41,"code":103666,"language":43,"meta":44,"style":44},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[46,103668,103669],{"__ignoreMap":44},[49,103670,103671,103674,103676,103678,103680],{"class":51,"line":52},[49,103672,103673],{"class":55},"box_body_id ",[49,103675,60],{"class":59},[49,103677,103453],{"class":55},[49,103679,103456],{"class":328},[49,103681,81],{"class":55},[14,103683,103684],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103686,103687],{},"用名字查找 site：",[39,103689,103691],{"className":41,"code":103690,"language":43,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[46,103692,103693],{"__ignoreMap":44},[49,103694,103695,103698,103700,103702,103704],{"class":51,"line":52},[49,103696,103697],{"class":55},"site_id ",[49,103699,60],{"class":59},[49,103701,103468],{"class":55},[49,103703,103471],{"class":328},[49,103705,81],{"class":55},[14,103707,103708,103709,103712,103713,103716],{},"注意第二个参数是对象类型。查 body 就用 ",[46,103710,103711],{},"mjOBJ_BODY","，查 site 就用 ",[46,103714,103715],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103718,103719],{},"读取世界坐标：",[39,103721,103723],{"className":41,"code":103722,"language":43,"meta":44,"style":44},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[46,103724,103725,103730],{"__ignoreMap":44},[49,103726,103727],{"class":51,"line":52},[49,103728,103729],{"class":55},"data.xpos[box_body_id]\n",[49,103731,103732],{"class":51,"line":84},[49,103733,103734],{"class":55},"data.site_xpos[site_id]\n",[14,103736,103737,103740,103741,103744],{},[46,103738,103739],{},"xpos"," 是 body 的世界坐标，",[46,103742,103743],{},"site_xpos"," 是 site 的世界坐标。",[195,103746,101771],{"id":101771},[39,103748,103750],{"className":41,"code":103749,"language":43,"meta":44,"style":44},"import mujoco\nimport numpy as np\n",[46,103751,103752,103758],{"__ignoreMap":44},[49,103753,103754,103756],{"class":51,"line":52},[49,103755,30481],{"class":59},[49,103757,101364],{"class":55},[49,103759,103760,103762,103764,103766],{"class":51,"line":84},[49,103761,30481],{"class":59},[49,103763,31469],{"class":55},[49,103765,31472],{"class":59},[49,103767,31475],{"class":55},[14,103769,103770,103771,103774,103775,103778,103779,436,103782,28476],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[46,103772,103773],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[46,103776,103777],{},"as np"," 是习惯写法，后面就可以写 ",[46,103780,103781],{},"np.array(...)",[46,103783,103784],{},"np.round(...)",[39,103786,103787],{"className":41,"code":101658,"language":43,"meta":44,"style":44},[46,103788,103789,103797,103801],{"__ignoreMap":44},[49,103790,103791,103793,103795],{"class":51,"line":52},[49,103792,101377],{"class":66},[49,103794,13654],{"class":59},[49,103796,101382],{"class":328},[49,103798,103799],{"class":51,"line":84},[49,103800,101673],{"class":328},[49,103802,103803],{"class":51,"line":109},[49,103804,95761],{"class":328},[14,103806,103807,103808,28476],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[46,103809,103810],{},"mujoco.MjModel.from_xml_string(XML)",[39,103812,103814],{"className":53156,"code":103813,"language":53158,"meta":44,"style":44},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,103815,103816],{"__ignoreMap":44},[49,103817,103818,103820,103822,103824,103826,103828,103830,103832,103835,103837,103839,103842,103844,103846,103849],{"class":51,"line":52},[49,103819,1129],{"class":55},[49,103821,103273],{"class":51389},[49,103823,15010],{"class":2055},[49,103825,60],{"class":55},[49,103827,103471],{"class":328},[49,103829,101169],{"class":2055},[49,103831,60],{"class":55},[49,103833,103834],{"class":328},"\"0 0 0\"",[49,103836,101199],{"class":2055},[49,103838,60],{"class":55},[49,103840,103841],{"class":328},"\"0.03\"",[49,103843,78856],{"class":2055},[49,103845,60],{"class":55},[49,103847,103848],{"class":328},"\"0 1 0 1\"",[49,103850,101207],{"class":55},[14,103852,103853,103855,103856,103859,103860,103862,103863,103866],{},[46,103854,103273],{}," 是标记点。",[46,103857,103858],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[46,103861,103233],{}," 表示显示出来的小球大小。",[46,103864,103865],{},"rgba=\"0 1 0 1\""," 表示绿色。",[39,103868,103869],{"className":41,"code":103666,"language":43,"meta":44,"style":44},[46,103870,103871],{"__ignoreMap":44},[49,103872,103873,103875,103877,103879,103881],{"class":51,"line":52},[49,103874,103673],{"class":55},[49,103876,60],{"class":59},[49,103878,103453],{"class":55},[49,103880,103456],{"class":328},[49,103882,81],{"class":55},[14,103884,103885,103886,103888],{},"这行的作用是：根据名字 ",[46,103887,103456],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103890,103891],{},"拆开看：",[178,103893,103894,103900,103905,103911],{},[181,103895,103896,103899],{},[46,103897,103898],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[181,103901,103902,103904],{},[46,103903,102148],{}," 是被查询的模型。",[181,103906,103907,103910],{},[46,103908,103909],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[181,103912,103913,103915],{},[46,103914,103456],{}," 是 XML 里写的名字。",[39,103917,103918],{"className":41,"code":103690,"language":43,"meta":44,"style":44},[46,103919,103920],{"__ignoreMap":44},[49,103921,103922,103924,103926,103928,103930],{"class":51,"line":52},[49,103923,103697],{"class":55},[49,103925,60],{"class":59},[49,103927,103468],{"class":55},[49,103929,103471],{"class":328},[49,103931,81],{"class":55},[14,103933,103934,103935,28476],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[46,103936,103471],{},[39,103938,103940],{"className":41,"code":103939,"language":43,"meta":44,"style":44},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[46,103941,103942,103954],{"__ignoreMap":44},[49,103943,103944,103946,103948,103950,103952],{"class":51,"line":52},[49,103945,1623],{"class":59},[49,103947,103484],{"class":55},[49,103949,1129],{"class":59},[49,103951,4185],{"class":66},[49,103953,3831],{"class":55},[49,103955,103956,103959,103961,103963,103965],{"class":51,"line":84},[49,103957,103958],{"class":59},"    raise",[49,103960,103498],{"class":66},[49,103962,228],{"class":55},[49,103964,103503],{"class":328},[49,103966,81],{"class":55},[14,103968,103969,103971,103972,103975,103976,103979,103980,103983],{},[46,103970,1623],{}," 是条件判断。",[46,103973,103974],{},"mj_name2id"," 找不到对象时会返回 ",[46,103977,103978],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[46,103981,103982],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[39,103985,103987],{"className":41,"code":103986,"language":43,"meta":44,"style":44},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[46,103988,103989,104005],{"__ignoreMap":44},[49,103990,103991,103993,103995,103997,103999,104001,104003],{"class":51,"line":52},[49,103992,3117],{"class":59},[49,103994,101564],{"class":55},[49,103996,26134],{"class":59},[49,103998,32532],{"class":66},[49,104000,228],{"class":55},[49,104002,1814],{"class":66},[49,104004,30875],{"class":55},[49,104006,104007],{"class":51,"line":84},[49,104008,101762],{"class":55},[14,104010,104011],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[39,104013,104015],{"className":41,"code":104014,"language":43,"meta":44,"style":44},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[46,104016,104017],{"__ignoreMap":44},[49,104018,104019,104021,104023,104025],{"class":51,"line":52},[49,104020,30504],{"class":66},[49,104022,228],{"class":55},[49,104024,103579],{"class":328},[49,104026,103582],{"class":55},[14,104028,104029,104031,104032,104035],{},[46,104030,101142],{}," 保存所有 body 的世界坐标。",[46,104033,104034],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[39,104037,104039],{"className":41,"code":104038,"language":43,"meta":44,"style":44},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[46,104040,104041],{"__ignoreMap":44},[49,104042,104043,104045,104047,104049],{"class":51,"line":52},[49,104044,30504],{"class":66},[49,104046,228],{"class":55},[49,104048,103591],{"class":328},[49,104050,103594],{"class":55},[14,104052,104053,104056,104057,104059],{},[46,104054,104055],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[46,104058,103040],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[39,104061,104063],{"className":41,"code":104062,"language":43,"meta":44,"style":44},"print(\"box qpos:\", np.array(data.qpos))\n",[46,104064,104065],{"__ignoreMap":44},[49,104066,104067,104069,104071,104073],{"class":51,"line":52},[49,104068,30504],{"class":66},[49,104070,228],{"class":55},[49,104072,103603],{"class":328},[49,104074,103606],{"class":55},[14,104076,104077,104078,104081],{},"这里打印广义位置数组。",[46,104079,104080],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[166,104083,102379],{"id":102378},[14,104085,104086,104087,104090,104091,28476],{},"程序会输出 ",[46,104088,104089],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[46,104092,104093],{},"qpos",[14,104095,104096,104098,104099,104102,104103,104106],{},[46,104097,104034],{}," 是 body 的世界坐标位置。",[46,104100,104101],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[46,104104,104105],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104108,82311,104109,82619,104111,104113],{},[46,104110,103040],{},[46,104112,103858],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104115,104116],{},"如果你把 site 改成：",[39,104118,104120],{"className":53156,"code":104119,"language":53158,"meta":44,"style":44},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,104121,104122],{"__ignoreMap":44},[49,104123,104124,104126,104128,104130,104132,104135,104137,104139,104142,104144,104146,104148,104150,104152,104154],{"class":51,"line":52},[49,104125,1129],{"class":55},[49,104127,103273],{"class":51389},[49,104129,15010],{"class":2055},[49,104131,60],{"class":55},[49,104133,104134],{"class":328},"\"box_top\"",[49,104136,101169],{"class":2055},[49,104138,60],{"class":55},[49,104140,104141],{"class":328},"\"0 0 0.15\"",[49,104143,101199],{"class":2055},[49,104145,60],{"class":55},[49,104147,103841],{"class":328},[49,104149,78856],{"class":2055},[49,104151,60],{"class":55},[49,104153,103848],{"class":328},[49,104155,101207],{"class":55},[14,104157,104158,104159,104162],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[46,104160,104161],{},"site position"," 就会比 body position 的 z 坐标更高。",[166,104164,102411],{"id":102410},[178,104166,104167,104176,104179,104186,104192,104203],{},[181,104168,102474,104169,104171,104172,102477,104174,28476],{},[46,104170,103044],{}," 的初始高度从 ",[46,104173,441],{},[46,104175,301],{},[181,104177,104178],{},"重新运行程序。",[181,104180,104181,104182,104185],{},"观察 ",[46,104183,104184],{},"box qpos"," 和最终位置是否变化。",[181,104187,104188,104189,104191],{},"故意把 ",[46,104190,103273],{}," 名称改错，确认程序能报错。",[181,104193,102474,104194,104196,104197,102477,104199,104202],{},[46,104195,101183],{}," 的颜色 ",[46,104198,102095],{},[46,104200,104201],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[181,104204,102474,104205,82619,104207,102477,104210,104213,104214,104216],{},[46,104206,103040],{},[46,104208,104209],{},"pos",[46,104211,104212],{},"0 0 0.2","，观察 ",[46,104215,104161],{}," 如何变化。",[166,104218,102516],{"id":102515},[195,104220,104222],{"id":104221},"xml-error-schema-violation",[46,104223,104224],{},"XML Error: Schema violation",[14,104226,104227],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[195,104229,104231,81379,104233],{"id":104230},"mj_name2id-返回-1",[46,104232,103974],{},[46,104234,103978],{},[14,104236,104237,104238,104241],{},"说明名字没有找到。检查 XML 中 ",[46,104239,104240],{},"name=\"...\"","，并确认对象类型正确。",[195,104243,104244],{"id":104244},"物体不下落",[14,104246,102586],{},[178,104248,104249,104254,104259],{},[181,104250,104251,104252],{},"body 是否有 ",[46,104253,101683],{},[181,104255,104256,104257],{},"gravity 是否为 ",[46,104258,102652],{},[181,104260,104261,104262,104264],{},"body 是否被固定在 ",[46,104263,101904],{}," 中",[195,104266,104267],{"id":104267},"坐标看起来不符合预期",[14,104269,104270],{},"先区分两种坐标：",[361,104272,104273,104282],{},[364,104274,104275],{},[367,104276,104277,104280],{},[370,104278,104279],{"align":23826},"坐标",[370,104281,100763],{"align":23826},[408,104283,104284,104294],{},[367,104285,104286,104291],{},[413,104287,104288,104289],{"align":23826},"XML 里的 ",[46,104290,104209],{},[413,104292,104293],{"align":23826},"相对父 body 的局部坐标",[367,104295,104296,104302],{},[413,104297,104298,25069,104300],{"align":23826},[46,104299,101142],{},[46,104301,104055],{},[413,104303,104304],{"align":23826},"仿真更新后的世界坐标",[14,104306,104307,104308,104310,104311,82628,104314,104316],{},"如果你修改了 ",[46,104309,101133],{},"，但还没调用 ",[46,104312,104313],{},"mj_forward",[46,104315,101278],{},"，世界坐标可能还没有更新。",[166,104318,102670],{"id":102669},[14,104320,104321],{},"MJCF 建模先掌握四件事：",[178,104323,104324,104329,104334,104339],{},[181,104325,104326,104328],{},[46,104327,51889],{}," 表示刚体层级。",[181,104330,104331,104333],{},[46,104332,101183],{}," 表示形状、碰撞和质量。",[181,104335,104336,104338],{},[46,104337,103019],{}," 决定 body 能不能动、怎么动。",[181,104340,104341,104343],{},[46,104342,103273],{}," 用来标记关键点，方便 Python 读取位置。",[14,104345,104346],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[143,104348,104349],{},"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":44,"searchDepth":84,"depth":84,"links":104351},[104352,104353,104354,104360,104364,104365,104366,104373],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":104355},[104356,104357,104358,104359],{"id":103023,"depth":109,"text":103023},{"id":103137,"depth":109,"text":103137},{"id":103163,"depth":109,"text":103164},{"id":103267,"depth":109,"text":103268},{"id":101315,"depth":84,"text":101316,"children":104361},[104362,104363],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":104367},[104368,104369,104371,104372],{"id":104221,"depth":109,"text":104224},{"id":104230,"depth":109,"text":104370},"mj_name2id 返回 -1",{"id":104244,"depth":109,"text":104244},{"id":104267,"depth":109,"text":104267},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102717,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104380,"title":104381,"body":104382,"description":44,"extension":149,"meta":105877,"navigation":151,"path":105878,"seo":105879,"stem":105880,"__hash__":105881},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104383,"toc":105849},[104384,104387,104389,104392,104395,104433,104436,104442,104445,104447,104449,104476,104478,104492,104494,104535,104537,104561,104563,104566,104575,104584,104587,104596,104604,104613,104616,104626,104629,104681,104688,104694,104702,104750,104753,104772,104775,104783,104787,104796,104829,104831,105179,105181,105193,105195,105206,105208,105211,105232,105238,105241,105266,105276,105279,105287,105290,105293,105314,105325,105327,105347,105350,105371,105380,105399,105405,105430,105433,105447,105454,105478,105481,105489,105498,105514,105526,105534,105543,105545,105548,105572,105577,105580,105602,105604,105643,105645,105652,105654,105662,105665,105668,105680,105721,105728,105739,105746,105749,105798,105801,105804,105810,105812,105817,105843,105846],[10,104385,104381],{"id":104386},"_3python-控制接口读取状态与推进仿真",[166,104388,100710],{"id":100709},[14,104390,104391],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104393,104394],{},"你将学习:",[178,104396,104397,104402,104407,104411,104416,104427],{},[181,104398,104399],{},[46,104400,104401],{},"MjModel.from_xml_string",[181,104403,104404],{},[46,104405,104406],{},"MjData(model)",[181,104408,104409],{},[46,104410,101278],{},[181,104412,104413],{},[46,104414,104415],{},"mj_resetData",[181,104417,104418,104419,436,104421,436,104424],{},"读取 ",[46,104420,104093],{},[46,104422,104423],{},"qvel",[46,104425,104426],{},"ctrl",[181,104428,104429,104430],{},"使用 ",[46,104431,104432],{},"model.opt.timestep",[14,104434,104435],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[39,104437,104440],{"className":104438,"code":104439,"language":5278,"meta":44},[5276],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[46,104441,104439],{"__ignoreMap":44},[14,104443,104444],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[166,104446,100833],{"id":100832},[14,104448,100836],{},[39,104450,104452],{"className":23912,"code":104451,"language":23914,"meta":44,"style":44},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[46,104453,104454],{"__ignoreMap":44},[49,104455,104456,104458,104460,104462,104464,104467,104469,104471,104473],{"class":51,"line":52},[49,104457,24667],{"class":2055},[49,104459,26406],{"class":328},[49,104461,23924],{"class":328},[49,104463,26491],{"class":66},[49,104465,104466],{"class":328}," python3",[49,104468,100861],{"class":328},[49,104470,102564],{"class":328},[49,104472,100877],{"class":328},[49,104474,104475],{"class":328}," glfw\n",[14,104477,102882],{},[39,104479,104480],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},[46,104481,104482],{"__ignoreMap":44},[49,104483,104484,104486,104488,104490],{"class":51,"line":52},[49,104485,23921],{"class":2055},[49,104487,23924],{"class":328},[49,104489,100993],{"class":328},[49,104491,100996],{"class":328},[14,104493,102899],{},[39,104495,104497],{"className":23912,"code":104496,"language":23914,"meta":44,"style":44},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[46,104498,104499,104516,104525],{"__ignoreMap":44},[49,104500,104501,104503,104505,104507,104510,104512,104514],{"class":51,"line":52},[49,104502,30421],{"class":2055},[49,104504,29267],{"class":328},[49,104506,25206],{"class":66},[49,104508,104509],{"class":328}," mujoco-python-api",[49,104511,101038],{"class":328},[49,104513,101041],{"class":66},[49,104515,101044],{"class":66},[49,104517,104518,104520,104522],{"class":51,"line":84},[49,104519,30421],{"class":2055},[49,104521,101051],{"class":328},[49,104523,104524],{"class":328}," mujoco-python-api\n",[49,104526,104527,104529,104531,104533],{"class":51,"line":109},[49,104528,23921],{"class":2055},[49,104530,23924],{"class":328},[49,104532,100993],{"class":328},[49,104534,100996],{"class":328},[14,104536,101067],{},[178,104538,104539,104546,104555],{},[181,104540,104541,101081,104543,104545],{},[46,104542,100738],{},[46,104544,100743],{}," 是官方 Python bindings 的类名。",[181,104547,104548,104549,104552,104553,28476],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[46,104550,104551],{},"mjModel"," 在 Python 中是 ",[46,104554,100772],{},[181,104556,104557,104558,28476],{},"不要使用 ",[46,104559,104560],{},"sim = mujoco_py.MjSim(...)",[166,104562,101108],{"id":101107},[14,104564,104565],{},"仿真推进核心代码:",[39,104567,104569],{"className":41,"code":104568,"language":43,"meta":44,"style":44},"mujoco.mj_step(model, data)\n",[46,104570,104571],{"__ignoreMap":44},[49,104572,104573],{"class":51,"line":52},[49,104574,104568],{"class":55},[14,104576,104577,104578,436,104580,436,104582,28476],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[46,104579,101133],{},[46,104581,101136],{},[46,104583,101130],{},[14,104585,104586],{},"重置仿真:",[39,104588,104590],{"className":41,"code":104589,"language":43,"meta":44,"style":44},"mujoco.mj_resetData(model, data)\n",[46,104591,104592],{"__ignoreMap":44},[49,104593,104594],{"class":51,"line":52},[49,104595,104589],{"class":55},[14,104597,104598,104599,82628,104601,104603],{},"如果手动修改了 ",[46,104600,101133],{},[46,104602,101136],{},"，通常应调用:",[39,104605,104607],{"className":41,"code":104606,"language":43,"meta":44,"style":44},"mujoco.mj_forward(model, data)\n",[46,104608,104609],{"__ignoreMap":44},[49,104610,104611],{"class":51,"line":52},[49,104612,104606],{"class":55},[14,104614,104615],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[195,104617,104619,436,104621,436,104623,104625],{"id":104618},"qposqvelctrl-是什么",[46,104620,104093],{},[46,104622,104423],{},[46,104624,104426],{}," 是什么",[14,104627,104628],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[361,104630,104631,104643],{},[364,104632,104633],{},[367,104634,104635,104638,104640],{},[370,104636,104637],{"align":23826},"字段",[370,104639,100763],{"align":23826},[370,104641,104642],{"align":23826},"谁来修改",[408,104644,104645,104657,104669],{},[367,104646,104647,104651,104654],{},[413,104648,104649],{"align":23826},[46,104650,101133],{},[413,104652,104653],{"align":23826},"广义位置，例如小车位置、关节角、自由物体位置姿态",[413,104655,104656],{"align":23826},"MuJoCo 更新，也可以手动设置初始状态",[367,104658,104659,104663,104666],{},[413,104660,104661],{"align":23826},[46,104662,101136],{},[413,104664,104665],{"align":23826},"广义速度，例如小车速度、关节角速度",[413,104667,104668],{"align":23826},"MuJoCo 更新，也可以手动清零",[367,104670,104671,104675,104678],{},[413,104672,104673],{"align":23826},[46,104674,101139],{},[413,104676,104677],{"align":23826},"actuator 的控制输入",[413,104679,104680],{"align":23826},"主要由你的控制代码写入",[14,104682,9115,104683,101081,104685,104687],{},[46,104684,104093],{},[46,104686,104423],{}," 不一定同维。自由刚体就是典型例子：",[39,104689,104692],{"className":104690,"code":104691,"language":5278,"meta":44},[5276],"freejoint: qpos 7 维，qvel 6 维\n",[46,104693,104691],{"__ignoreMap":44},[195,104695,104697,101081,104699,104701],{"id":104696},"mj_step-和-mj_forward-的区别",[46,104698,101278],{},[46,104700,104313],{}," 的区别",[361,104703,104704,104717],{},[364,104705,104706],{},[367,104707,104708,104711,104714],{},[370,104709,104710],{"align":23826},"函数",[370,104712,104713],{"align":23826},"是否推进时间",[370,104715,104716],{"align":23826},"什么时候用",[408,104718,104719,104732],{},[367,104720,104721,104726,104729],{},[413,104722,104723],{"align":23826},[46,104724,104725],{},"mj_step(model, data)",[413,104727,104728],{"align":23826},"是",[413,104730,104731],{"align":23826},"正常仿真循环，每调用一次前进一步",[367,104733,104734,104739,104742],{},[413,104735,104736],{"align":23826},[46,104737,104738],{},"mj_forward(model, data)",[413,104740,104741],{"align":23826},"否",[413,104743,104744,104745,436,104747,104749],{"align":23826},"手动改了 ",[46,104746,104093],{},[46,104748,104423],{}," 后，刷新派生量",[14,104751,104752],{},"例如你写：",[39,104754,104756],{"className":41,"code":104755,"language":43,"meta":44,"style":44},"data.qpos[2] = 2.0\n",[46,104757,104758],{"__ignoreMap":44},[49,104759,104760,104763,104765,104767,104769],{"class":51,"line":52},[49,104761,104762],{"class":55},"data.qpos[",[49,104764,301],{"class":66},[49,104766,4535],{"class":55},[49,104768,60],{"class":59},[49,104770,104771],{"class":66}," 2.0\n",[14,104773,104774],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[39,104776,104777],{"className":41,"code":104606,"language":43,"meta":44,"style":44},[46,104778,104779],{"__ignoreMap":44},[49,104780,104781],{"class":51,"line":52},[49,104782,104606],{"class":55},[195,104784,104786],{"id":104785},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104788,104789,104792,104793,104795],{},[46,104790,104791],{},"mujoco.mj_resetData(model, data)"," 会把 ",[46,104794,33490],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[39,104797,104799],{"className":41,"code":104798,"language":43,"meta":44,"style":44},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[46,104800,104801,104805,104815,104825],{"__ignoreMap":44},[49,104802,104803],{"class":51,"line":52},[49,104804,104589],{"class":55},[49,104806,104807,104810,104812],{"class":51,"line":84},[49,104808,104809],{"class":55},"data.qpos[:] ",[49,104811,60],{"class":59},[49,104813,104814],{"class":55}," random_qpos\n",[49,104816,104817,104820,104822],{"class":51,"line":109},[49,104818,104819],{"class":55},"data.qvel[:] ",[49,104821,60],{"class":59},[49,104823,104824],{"class":66}," 0.0\n",[49,104826,104827],{"class":51,"line":120},[49,104828,104606],{"class":55},[166,104830,101316],{"id":101315},[39,104832,104834],{"className":41,"code":104833,"language":43,"meta":44,"style":44},"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",[46,104835,104836,104842,104852,104856,104860,104868,104873,104877,104881,104885,104890,104894,104899,104904,104909,104913,104917,104921,104925,104929,104933,104952,104959,104971,104982,104998,105014,105018,105022,105034,105046,105054,105058,105069,105073,105089,105093,105097,105106,105110,105115,105124,105128,105141,105146,105155,105159,105163,105175],{"__ignoreMap":44},[49,104837,104838,104840],{"class":51,"line":52},[49,104839,30481],{"class":59},[49,104841,101364],{"class":55},[49,104843,104844,104846,104848,104850],{"class":51,"line":84},[49,104845,30481],{"class":59},[49,104847,31469],{"class":55},[49,104849,31472],{"class":59},[49,104851,31475],{"class":55},[49,104853,104854],{"class":51,"line":109},[49,104855,2492],{"emptyLinePlaceholder":151},[49,104857,104858],{"class":51,"line":120},[49,104859,2492],{"emptyLinePlaceholder":151},[49,104861,104862,104864,104866],{"class":51,"line":135},[49,104863,101377],{"class":66},[49,104865,13654],{"class":59},[49,104867,101382],{"class":328},[49,104869,104870],{"class":51,"line":1306},[49,104871,104872],{"class":328},"\u003Cmujoco model=\"state_api\">\n",[49,104874,104875],{"class":51,"line":1312},[49,104876,101392],{"class":328},[49,104878,104879],{"class":51,"line":1403},[49,104880,2492],{"emptyLinePlaceholder":151},[49,104882,104883],{"class":51,"line":1409},[49,104884,101401],{"class":328},[49,104886,104887],{"class":51,"line":1421},[49,104888,104889],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[49,104891,104892],{"class":51,"line":1704},[49,104893,2492],{"emptyLinePlaceholder":151},[49,104895,104896],{"class":51,"line":1709},[49,104897,104898],{"class":328},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[49,104900,104901],{"class":51,"line":1715},[49,104902,104903],{"class":328},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[49,104905,104906],{"class":51,"line":1720},[49,104907,104908],{"class":328},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[49,104910,104911],{"class":51,"line":1734},[49,104912,101430],{"class":328},[49,104914,104915],{"class":51,"line":1739},[49,104916,101435],{"class":328},[49,104918,104919],{"class":51,"line":1745},[49,104920,101440],{"class":328},[49,104922,104923],{"class":51,"line":1766},[49,104924,95761],{"class":328},[49,104926,104927],{"class":51,"line":1771},[49,104928,2492],{"emptyLinePlaceholder":151},[49,104930,104931],{"class":51,"line":1785},[49,104932,2492],{"emptyLinePlaceholder":151},[49,104934,104935,104937,104940,104943,104945,104948,104950],{"class":51,"line":1790},[49,104936,32036],{"class":59},[49,104938,104939],{"class":2055}," print_state",[49,104941,104942],{"class":55},"(prefix: ",[49,104944,1391],{"class":66},[49,104946,104947],{"class":55},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,104949,95749],{"class":66},[49,104951,3831],{"class":55},[49,104953,104954,104956],{"class":51,"line":1819},[49,104955,31388],{"class":66},[49,104957,104958],{"class":55},"(prefix)\n",[49,104960,104961,104963,104965,104968],{"class":51,"line":1824},[49,104962,31388],{"class":66},[49,104964,228],{"class":55},[49,104966,104967],{"class":328},"\"  timestep:\"",[49,104969,104970],{"class":55},", model.opt.timestep)\n",[49,104972,104973,104975,104977,104980],{"class":51,"line":1841},[49,104974,31388],{"class":66},[49,104976,228],{"class":55},[49,104978,104979],{"class":328},"\"  time:\"",[49,104981,101541],{"class":55},[49,104983,104984,104986,104988,104991,104994,104996],{"class":51,"line":1846},[49,104985,31388],{"class":66},[49,104987,228],{"class":55},[49,104989,104990],{"class":328},"\"  qpos:\"",[49,104992,104993],{"class":55},", np.round(data.qpos.copy(), ",[49,104995,515],{"class":66},[49,104997,30586],{"class":55},[49,104999,105000,105002,105004,105007,105010,105012],{"class":51,"line":1851},[49,105001,31388],{"class":66},[49,105003,228],{"class":55},[49,105005,105006],{"class":328},"\"  qvel:\"",[49,105008,105009],{"class":55},", np.round(data.qvel.copy(), ",[49,105011,515],{"class":66},[49,105013,30586],{"class":55},[49,105015,105016],{"class":51,"line":1856},[49,105017,2492],{"emptyLinePlaceholder":151},[49,105019,105020],{"class":51,"line":1870},[49,105021,2492],{"emptyLinePlaceholder":151},[49,105023,105024,105026,105028,105030,105032],{"class":51,"line":1875},[49,105025,32036],{"class":59},[49,105027,2065],{"class":2055},[49,105029,101461],{"class":55},[49,105031,95749],{"class":66},[49,105033,3831],{"class":55},[49,105035,105036,105038,105040,105042,105044],{"class":51,"line":2669},[49,105037,101470],{"class":55},[49,105039,60],{"class":59},[49,105041,101475],{"class":55},[49,105043,101377],{"class":66},[49,105045,81],{"class":55},[49,105047,105048,105050,105052],{"class":51,"line":2683},[49,105049,101484],{"class":55},[49,105051,60],{"class":59},[49,105053,101489],{"class":55},[49,105055,105056],{"class":51,"line":2691},[49,105057,2492],{"emptyLinePlaceholder":151},[49,105059,105060,105063,105066],{"class":51,"line":2696},[49,105061,105062],{"class":55},"    print_state(",[49,105064,105065],{"class":328},"\"initial\"",[49,105067,105068],{"class":55},", model, data)\n",[49,105070,105071],{"class":51,"line":2702},[49,105072,2492],{"emptyLinePlaceholder":151},[49,105074,105075,105077,105079,105081,105083,105085,105087],{"class":51,"line":2708},[49,105076,3293],{"class":59},[49,105078,101564],{"class":55},[49,105080,26134],{"class":59},[49,105082,32532],{"class":66},[49,105084,228],{"class":55},[49,105086,875],{"class":66},[49,105088,30875],{"class":55},[49,105090,105091],{"class":51,"line":2713},[49,105092,101579],{"class":55},[49,105094,105095],{"class":51,"line":8038},[49,105096,2492],{"emptyLinePlaceholder":151},[49,105098,105099,105101,105104],{"class":51,"line":8062},[49,105100,105062],{"class":55},[49,105102,105103],{"class":328},"\"after 50 steps\"",[49,105105,105068],{"class":55},[49,105107,105108],{"class":51,"line":8067},[49,105109,2492],{"emptyLinePlaceholder":151},[49,105111,105112],{"class":51,"line":8073},[49,105113,105114],{"class":55},"    mujoco.mj_resetData(model, data)\n",[49,105116,105117,105119,105122],{"class":51,"line":8100},[49,105118,105062],{"class":55},[49,105120,105121],{"class":328},"\"after reset\"",[49,105123,105068],{"class":55},[49,105125,105126],{"class":51,"line":8105},[49,105127,2492],{"emptyLinePlaceholder":151},[49,105129,105130,105133,105135,105137,105139],{"class":51,"line":8111},[49,105131,105132],{"class":55},"    data.qpos[",[49,105134,301],{"class":66},[49,105136,4535],{"class":55},[49,105138,60],{"class":59},[49,105140,104771],{"class":66},[49,105142,105143],{"class":51,"line":8123},[49,105144,105145],{"class":55},"    mujoco.mj_forward(model, data)\n",[49,105147,105148,105150,105153],{"class":51,"line":8135},[49,105149,105062],{"class":55},[49,105151,105152],{"class":328},"\"after manual qpos edit\"",[49,105154,105068],{"class":55},[49,105156,105157],{"class":51,"line":8147},[49,105158,2492],{"emptyLinePlaceholder":151},[49,105160,105161],{"class":51,"line":9806},[49,105162,2492],{"emptyLinePlaceholder":151},[49,105164,105165,105167,105169,105171,105173],{"class":51,"line":9831},[49,105166,1623],{"class":59},[49,105168,31309],{"class":66},[49,105170,101622],{"class":59},[49,105172,101625],{"class":328},[49,105174,3831],{"class":55},[49,105176,105177],{"class":51,"line":9854},[49,105178,101632],{"class":55},[14,105180,103633],{},[39,105182,105184],{"className":23912,"code":105183,"language":23914,"meta":44,"style":44},"touch ch3_python_state.py\n",[46,105185,105186],{"__ignoreMap":44},[49,105187,105188,105190],{"class":51,"line":52},[49,105189,101346],{"class":2055},[49,105191,105192],{"class":328}," ch3_python_state.py\n",[14,105194,102364],{},[39,105196,105198],{"className":23912,"code":105197,"language":23914,"meta":44,"style":44},"python ch3_python_state.py\n",[46,105199,105200],{"__ignoreMap":44},[49,105201,105202,105204],{"class":51,"line":52},[49,105203,43],{"class":2055},[49,105205,105192],{"class":328},[195,105207,101635],{"id":101635},[14,105209,105210],{},"打印状态的函数：",[39,105212,105214],{"className":41,"code":105213,"language":43,"meta":44,"style":44},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[46,105215,105216],{"__ignoreMap":44},[49,105217,105218,105220,105222,105224,105226,105228,105230],{"class":51,"line":52},[49,105219,32036],{"class":59},[49,105221,104939],{"class":2055},[49,105223,104942],{"class":55},[49,105225,1391],{"class":66},[49,105227,104947],{"class":55},[49,105229,95749],{"class":66},[49,105231,3831],{"class":55},[14,105233,105234,105235,105237],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[46,105236,33490],{}," 里发生了什么。",[14,105239,105240],{},"推进 50 步：",[39,105242,105244],{"className":41,"code":105243,"language":43,"meta":44,"style":44},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[46,105245,105246,105262],{"__ignoreMap":44},[49,105247,105248,105250,105252,105254,105256,105258,105260],{"class":51,"line":52},[49,105249,3117],{"class":59},[49,105251,101564],{"class":55},[49,105253,26134],{"class":59},[49,105255,32532],{"class":66},[49,105257,228],{"class":55},[49,105259,875],{"class":66},[49,105261,30875],{"class":55},[49,105263,105264],{"class":51,"line":84},[49,105265,101762],{"class":55},[14,105267,105268,105269,105272,105273,105275],{},"由于 ",[46,105270,105271],{},"timestep=0.01","，所以 50 步后时间约为 ",[46,105274,35418],{}," 秒。",[14,105277,105278],{},"重置：",[39,105280,105281],{"className":41,"code":104589,"language":43,"meta":44,"style":44},[46,105282,105283],{"__ignoreMap":44},[49,105284,105285],{"class":51,"line":52},[49,105286,104589],{"class":55},[14,105288,105289],{},"这会把时间、位置、速度恢复到初始状态。",[14,105291,105292],{},"手动改高度：",[39,105294,105296],{"className":41,"code":105295,"language":43,"meta":44,"style":44},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[46,105297,105298,105310],{"__ignoreMap":44},[49,105299,105300,105302,105304,105306,105308],{"class":51,"line":52},[49,105301,104762],{"class":55},[49,105303,301],{"class":66},[49,105305,4535],{"class":55},[49,105307,60],{"class":59},[49,105309,104771],{"class":66},[49,105311,105312],{"class":51,"line":84},[49,105313,104606],{"class":55},[14,105315,105316,105317,105320,105321,105324],{},"这个例子里 ",[46,105318,105319],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[46,105322,105323],{},"2.0"," 表示把小球放到更高的位置。",[195,105326,101771],{"id":101771},[39,105328,105329],{"className":41,"code":105213,"language":43,"meta":44,"style":44},[46,105330,105331],{"__ignoreMap":44},[49,105332,105333,105335,105337,105339,105341,105343,105345],{"class":51,"line":52},[49,105334,32036],{"class":59},[49,105336,104939],{"class":2055},[49,105338,104942],{"class":55},[49,105340,1391],{"class":66},[49,105342,104947],{"class":55},[49,105344,95749],{"class":66},[49,105346,3831],{"class":55},[14,105348,105349],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[178,105351,105352,105361,105366],{},[181,105353,105354,105357,105358,105360],{},[46,105355,105356],{},"prefix","：一段文字，比如 ",[46,105359,105065],{},"，用来说明现在打印的是哪个阶段。",[181,105362,105363,105365],{},[46,105364,102148],{},"：MuJoCo 模型。",[181,105367,105368,105370],{},[46,105369,33490],{},"：MuJoCo 当前状态。",[14,105372,105373,436,105376,105379],{},[46,105374,105375],{},"prefix: str",[46,105377,105378],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[39,105381,105383],{"className":41,"code":105382,"language":43,"meta":44,"style":44},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[46,105384,105385],{"__ignoreMap":44},[49,105386,105387,105389,105391,105393,105395,105397],{"class":51,"line":52},[49,105388,30504],{"class":66},[49,105390,228],{"class":55},[49,105392,104990],{"class":328},[49,105394,104993],{"class":55},[49,105396,515],{"class":66},[49,105398,30586],{"class":55},[14,105400,105401,105404],{},[46,105402,105403],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[39,105406,105408],{"className":41,"code":105407,"language":43,"meta":44,"style":44},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[46,105409,105410,105422],{"__ignoreMap":44},[49,105411,105412,105414,105416,105418,105420],{"class":51,"line":52},[49,105413,101697],{"class":55},[49,105415,60],{"class":59},[49,105417,101475],{"class":55},[49,105419,101377],{"class":66},[49,105421,81],{"class":55},[49,105423,105424,105426,105428],{"class":51,"line":84},[49,105425,101721],{"class":55},[49,105427,60],{"class":59},[49,105429,101489],{"class":55},[14,105431,105432],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[39,105434,105436],{"className":41,"code":105435,"language":43,"meta":44,"style":44},"print_state(\"initial\", model, data)\n",[46,105437,105438],{"__ignoreMap":44},[49,105439,105440,105443,105445],{"class":51,"line":52},[49,105441,105442],{"class":55},"print_state(",[49,105444,105065],{"class":328},[49,105446,105068],{"class":55},[14,105448,105449,105450,105453],{},"调用刚才定义的 ",[46,105451,105452],{},"print_state"," 函数，打印初始状态。",[39,105455,105456],{"className":41,"code":105243,"language":43,"meta":44,"style":44},[46,105457,105458,105474],{"__ignoreMap":44},[49,105459,105460,105462,105464,105466,105468,105470,105472],{"class":51,"line":52},[49,105461,3117],{"class":59},[49,105463,101564],{"class":55},[49,105465,26134],{"class":59},[49,105467,32532],{"class":66},[49,105469,228],{"class":55},[49,105471,875],{"class":66},[49,105473,30875],{"class":55},[49,105475,105476],{"class":51,"line":84},[49,105477,101762],{"class":55},[14,105479,105480],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[39,105482,105483],{"className":41,"code":104589,"language":43,"meta":44,"style":44},[46,105484,105485],{"__ignoreMap":44},[49,105486,105487],{"class":51,"line":52},[49,105488,104589],{"class":55},[14,105490,105491,105492,105494,105495,105497],{},"重置 ",[46,105493,33490],{},"。注意它不会重新创建 ",[46,105496,102148],{},"，因为模型结构没有变，只是状态回到初始值。",[39,105499,105500],{"className":41,"code":104755,"language":43,"meta":44,"style":44},[46,105501,105502],{"__ignoreMap":44},[49,105503,105504,105506,105508,105510,105512],{"class":51,"line":52},[49,105505,104762],{"class":55},[49,105507,301],{"class":66},[49,105509,4535],{"class":55},[49,105511,60],{"class":59},[49,105513,104771],{"class":66},[14,105515,105516,105517,436,105520,436,105523,105525],{},"这行是“手动改状态”。在 freejoint 中，",[46,105518,105519],{},"qpos[0]",[46,105521,105522],{},"qpos[1]",[46,105524,105319],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[39,105527,105528],{"className":41,"code":104606,"language":43,"meta":44,"style":44},[46,105529,105530],{"__ignoreMap":44},[49,105531,105532],{"class":51,"line":52},[49,105533,104606],{"class":55},[14,105535,105536,105537,105539,105540,105542],{},"手动改完 ",[46,105538,104093],{}," 后，调用 ",[46,105541,104313],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[166,105544,102379],{"id":102378},[14,105546,105547],{},"你会看到:",[178,105549,105550,105555,105560,105563],{},[181,105551,105552,105553],{},"初始时间为 ",[46,105554,415],{},[181,105556,105557,105558],{},"50 步后时间约为 ",[46,105559,35418],{},[181,105561,105562],{},"reset 后状态恢复",[181,105564,105565,105566,105569,105570],{},"手动修改 ",[46,105567,105568],{},"data.qpos[2]"," 后，小球高度变为 ",[46,105571,105323],{},[14,105573,105574,105576],{},[46,105575,105319],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105578,105579],{},"输出里可以重点看三件事：",[178,105581,105582,105590,105595],{},[181,105583,105584,105586,105587,105589],{},[46,105585,2479],{}," 是否随着 ",[46,105588,101278],{}," 增加。",[181,105591,105592,105594],{},[46,105593,104093],{}," 的 z 坐标是否因为下落而变化。",[181,105596,105597,105599,105600,28476],{},[46,105598,104415],{}," 后时间是否回到 ",[46,105601,415],{},[166,105603,102411],{"id":102410},[178,105605,105606,105612,105618,105624,105627,105636],{},[181,105607,105608,105609,28476],{},"修改 timestep 为 ",[46,105610,105611],{},"0.005",[181,105613,105614,105615,28476],{},"重新运行，检查 50 步后时间是否约为 ",[46,105616,105617],{},"0.25",[181,105619,105620,105621,28476],{},"修改重力为 ",[46,105622,105623],{},"0 0 -1.0",[181,105625,105626],{},"观察小球下降速度是否变慢。",[181,105628,102474,105629,102477,105632,105635],{},[46,105630,105631],{},"data.qpos[2] = 2.0",[46,105633,105634],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[181,105637,105638,105639,105642],{},"注释掉 ",[46,105640,105641],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[166,105644,102516],{"id":102515},[195,105646,105648,105649,105651],{"id":105647},"修改-dataqpos-后位置没有更新","修改 ",[46,105650,101133],{}," 后位置没有更新",[14,105653,102525],{},[39,105655,105656],{"className":41,"code":104606,"language":43,"meta":44,"style":44},[46,105657,105658],{"__ignoreMap":44},[49,105659,105660],{"class":51,"line":52},[49,105661,104606],{"class":55},[195,105663,105664],{"id":105664},"数组维度看不懂",[14,105666,105667],{},"打印模型维度:",[39,105669,105671],{"className":41,"code":105670,"language":43,"meta":44,"style":44},"print(model.nq, model.nv, model.nu)\n",[46,105672,105673],{"__ignoreMap":44},[49,105674,105675,105677],{"class":51,"line":52},[49,105676,30504],{"class":66},[49,105678,105679],{"class":55},"(model.nq, model.nv, model.nu)\n",[361,105681,105682,105690],{},[364,105683,105684],{},[367,105685,105686,105688],{},[370,105687,104637],{"align":23826},[370,105689,100763],{"align":23826},[408,105691,105692,105702,105712],{},[367,105693,105694,105699],{},[413,105695,105696],{"align":23826},[46,105697,105698],{},"nq",[413,105700,105701],{"align":23826},"位置变量数量",[367,105703,105704,105709],{},[413,105705,105706],{"align":23826},[46,105707,105708],{},"nv",[413,105710,105711],{"align":23826},"速度变量数量",[367,105713,105714,105718],{},[413,105715,105716],{"align":23826},[46,105717,102225],{},[413,105719,105720],{"align":23826},"控制输入数量",[195,105722,105724,105725,105727],{"id":105723},"误以为-qpos-一定等于关节数","误以为 ",[46,105726,104093],{}," 一定等于关节数",[14,105729,105730,105731,82619,105733,105735,105736,105738],{},"不是。例如 ",[46,105732,101683],{},[46,105734,104093],{}," 是 7 维，但 ",[46,105737,104423],{}," 是 6 维。",[195,105740,105742,105743,105745],{"id":105741},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[46,105744,104093],{}," 的第几位",[14,105747,105748],{},"初学时可以先打印：",[39,105750,105752],{"className":41,"code":105751,"language":43,"meta":44,"style":44},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[46,105753,105754,105764,105774,105786],{"__ignoreMap":44},[49,105755,105756,105758,105760,105762],{"class":51,"line":52},[49,105757,30504],{"class":66},[49,105759,228],{"class":55},[49,105761,101502],{"class":328},[49,105763,101505],{"class":55},[49,105765,105766,105768,105770,105772],{"class":51,"line":84},[49,105767,30504],{"class":66},[49,105769,228],{"class":55},[49,105771,101514],{"class":328},[49,105773,101517],{"class":55},[49,105775,105776,105778,105780,105783],{"class":51,"line":109},[49,105777,30504],{"class":66},[49,105779,228],{"class":55},[49,105781,105782],{"class":328},"\"qpos:\"",[49,105784,105785],{"class":55},", data.qpos)\n",[49,105787,105788,105790,105792,105795],{"class":51,"line":120},[49,105789,30504],{"class":66},[49,105791,228],{"class":55},[49,105793,105794],{"class":328},"\"qvel:\"",[49,105796,105797],{"class":55},", data.qvel)\n",[14,105799,105800],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[195,105802,105803],{"id":105803},"仿真结果每次都一样",[14,105805,105806,105807,105809],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[46,105808,104093],{},"、目标点或控制输入。",[166,105811,102670],{"id":102669},[14,105813,105814,105815,24709],{},"Python 控制 MuJoCo 的核心就是读写 ",[46,105816,33490],{},[178,105818,105819,105827,105832,105837],{},[181,105820,105821,105822,101081,105824,105826],{},"用 ",[46,105823,101133],{},[46,105825,101136],{}," 读取状态。",[181,105828,105821,105829,105831],{},[46,105830,101139],{}," 写入控制。",[181,105833,105821,105834,105836],{},[46,105835,101278],{}," 推进时间。",[181,105838,105839,105840,105842],{},"手动改状态后用 ",[46,105841,104313],{}," 刷新派生量。",[14,105844,105845],{},"理解这一章后，就可以进入关节和 actuator 控制。",[143,105847,105848],{},"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":44,"searchDepth":84,"depth":84,"links":105850},[105851,105852,105853,105860,105864,105865,105866,105876],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":105854},[105855,105857,105859],{"id":104618,"depth":109,"text":105856},"qpos、qvel、ctrl 是什么",{"id":104696,"depth":109,"text":105858},"mj_step 和 mj_forward 的区别",{"id":104785,"depth":109,"text":104786},{"id":101315,"depth":84,"text":101316,"children":105861},[105862,105863],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":105867},[105868,105870,105871,105873,105875],{"id":105647,"depth":109,"text":105869},"修改 data.qpos 后位置没有更新",{"id":105664,"depth":109,"text":105664},{"id":105723,"depth":109,"text":105872},"误以为 qpos 一定等于关节数",{"id":105741,"depth":109,"text":105874},"不知道某个元素在 qpos 的第几位",{"id":105803,"depth":109,"text":105803},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104381,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105883,"title":105884,"body":105885,"description":44,"extension":149,"meta":107575,"navigation":151,"path":107576,"seo":107577,"stem":107578,"__hash__":107579},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105886,"toc":107551},[105887,105890,105892,105895,105897,105922,105925,105944,105947,105949,105951,105975,105977,105991,105993,106034,106036,106060,106062,106065,106099,106101,106114,106117,106185,106194,106198,106201,106235,106241,106244,106248,106287,106290,106310,106314,106357,106359,106388,106391,106397,106400,106402,106796,106798,106810,106812,106823,106825,106828,106857,106865,106868,106903,106906,106908,106916,106919,106921,106932,106942,106962,106965,107001,107013,107061,107080,107122,107135,107163,107168,107189,107199,107217,107220,107254,107257,107277,107280,107299,107305,107307,107310,107316,107322,107332,107335,107341,107350,107352,107398,107400,107406,107412,107415,107418,107438,107441,107447,107453,107455,107478,107481,107484,107493,107496,107534,107536,107539,107545,107548],[10,105888,105884],{"id":105889},"_4关节actuator-与力控制",[166,105891,100710],{"id":100709},[14,105893,105894],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105896,104394],{},[178,105898,105899,105905,105910,105914,105919],{},[181,105900,105901,105904],{},[46,105902,105903],{},"hinge"," 关节",[181,105906,105907],{},[46,105908,105909],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[181,105911,105912],{},[46,105913,101139],{},[181,105915,105916],{},[46,105917,105918],{},"ctrlrange",[181,105920,105921],{},"读取关节角和角速度",[14,105923,105924],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[39,105926,105928],{"className":41,"code":105927,"language":43,"meta":44,"style":44},"data.ctrl[0] = ...\n",[46,105929,105930],{"__ignoreMap":44},[49,105931,105932,105935,105937,105939,105941],{"class":51,"line":52},[49,105933,105934],{"class":55},"data.ctrl[",[49,105936,415],{"class":66},[49,105938,4535],{"class":55},[49,105940,60],{"class":59},[49,105942,105943],{"class":66}," ...\n",[14,105945,105946],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[166,105948,100833],{"id":100832},[14,105950,100836],{},[39,105952,105953],{"className":23912,"code":104451,"language":23914,"meta":44,"style":44},[46,105954,105955],{"__ignoreMap":44},[49,105956,105957,105959,105961,105963,105965,105967,105969,105971,105973],{"class":51,"line":52},[49,105958,24667],{"class":2055},[49,105960,26406],{"class":328},[49,105962,23924],{"class":328},[49,105964,26491],{"class":66},[49,105966,104466],{"class":328},[49,105968,100861],{"class":328},[49,105970,102564],{"class":328},[49,105972,100877],{"class":328},[49,105974,104475],{"class":328},[14,105976,102882],{},[39,105978,105979],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},[46,105980,105981],{"__ignoreMap":44},[49,105982,105983,105985,105987,105989],{"class":51,"line":52},[49,105984,23921],{"class":2055},[49,105986,23924],{"class":328},[49,105988,100993],{"class":328},[49,105990,100996],{"class":328},[14,105992,102899],{},[39,105994,105996],{"className":23912,"code":105995,"language":23914,"meta":44,"style":44},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[46,105997,105998,106015,106024],{"__ignoreMap":44},[49,105999,106000,106002,106004,106006,106009,106011,106013],{"class":51,"line":52},[49,106001,30421],{"class":2055},[49,106003,29267],{"class":328},[49,106005,25206],{"class":66},[49,106007,106008],{"class":328}," mujoco-control",[49,106010,101038],{"class":328},[49,106012,101041],{"class":66},[49,106014,101044],{"class":66},[49,106016,106017,106019,106021],{"class":51,"line":84},[49,106018,30421],{"class":2055},[49,106020,101051],{"class":328},[49,106022,106023],{"class":328}," mujoco-control\n",[49,106025,106026,106028,106030,106032],{"class":51,"line":109},[49,106027,23921],{"class":2055},[49,106029,23924],{"class":328},[49,106031,100993],{"class":328},[49,106033,100996],{"class":328},[14,106035,101067],{},[178,106037,106038,106044,106051,106057],{},[181,106039,106040,106043],{},[46,106041,106042],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[181,106045,106046,106048,106049,28476],{},[46,106047,101139],{}," 长度等于 ",[46,106050,102221],{},[181,106052,82311,106053,106056],{},[46,106054,106055],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[181,106058,106059],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[166,106061,101108],{"id":101107},[14,106063,106064],{},"关节决定 body 如何运动:",[39,106066,106068],{"className":53156,"code":106067,"language":53158,"meta":44,"style":44},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,106069,106070],{"__ignoreMap":44},[49,106071,106072,106074,106076,106078,106080,106083,106085,106087,106089,106092,106094,106097],{"class":51,"line":52},[49,106073,1129],{"class":55},[49,106075,103019],{"class":51389},[49,106077,15010],{"class":2055},[49,106079,60],{"class":55},[49,106081,106082],{"class":328},"\"hinge\"",[49,106084,53913],{"class":2055},[49,106086,60],{"class":55},[49,106088,106082],{"class":328},[49,106090,106091],{"class":2055}," axis",[49,106093,60],{"class":55},[49,106095,106096],{"class":328},"\"0 1 0\"",[49,106098,101207],{"class":55},[14,106100,103115],{},[178,106102,106103,106108,106111],{},[181,106104,106105,106106],{},"名字是 ",[46,106107,105903],{},[181,106109,106110],{},"类型是旋转关节",[181,106112,106113],{},"绕 y 轴旋转",[14,106115,106116],{},"actuator 决定如何施加控制:",[39,106118,106120],{"className":53156,"code":106119,"language":53158,"meta":44,"style":44},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[46,106121,106122,106131,106177],{"__ignoreMap":44},[49,106123,106124,106126,106129],{"class":51,"line":52},[49,106125,1129],{"class":55},[49,106127,106128],{"class":51389},"actuator",[49,106130,51396],{"class":55},[49,106132,106133,106135,106138,106140,106142,106145,106148,106150,106152,106155,106157,106159,106162,106164,106167,106170,106172,106175],{"class":51,"line":84},[49,106134,52233],{"class":55},[49,106136,106137],{"class":51389},"motor",[49,106139,15010],{"class":2055},[49,106141,60],{"class":55},[49,106143,106144],{"class":328},"\"hinge_motor\"",[49,106146,106147],{"class":2055}," joint",[49,106149,60],{"class":55},[49,106151,106082],{"class":328},[49,106153,106154],{"class":2055}," gear",[49,106156,60],{"class":55},[49,106158,3770],{"class":328},[49,106160,106161],{"class":2055}," ctrlrange",[49,106163,60],{"class":55},[49,106165,106166],{"class":328},"\"-2 2\"",[49,106168,106169],{"class":2055}," ctrllimited",[49,106171,60],{"class":55},[49,106173,106174],{"class":328},"\"true\"",[49,106176,101207],{"class":55},[49,106178,106179,106181,106183],{"class":51,"line":109},[49,106180,51874],{"class":55},[49,106182,106128],{"class":51389},[49,106184,51396],{"class":55},[14,106186,106187,106190,106191,28476],{},[46,106188,106189],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[46,106192,106193],{},"[-2, 2]",[195,106195,106197],{"id":106196},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106199,106200],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[361,106202,106203,106213],{},[364,106204,106205],{},[367,106206,106207,106209,106211],{},[370,106208,25844],{"align":23826},[370,106210,102759],{"align":23826},[370,106212,100797],{"align":23826},[408,106214,106215,106225],{},[367,106216,106217,106219,106222],{},[413,106218,103019],{"align":23826},[413,106220,106221],{"align":23826},"定义能怎么动",[413,106223,106224],{"align":23826},"门轴允许门旋转",[367,106226,106227,106229,106232],{},[413,106228,106128],{"align":23826},[413,106230,106231],{"align":23826},"定义怎么施力或控制",[413,106233,106234],{"align":23826},"人推门、马达带动门",[14,106236,106237,106238,106240],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[46,106239,101139],{}," 主动控制它。",[14,106242,106243],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[195,106245,106247],{"id":106246},"hinge-joint","hinge joint",[39,106249,106251],{"className":53156,"code":106250,"language":53158,"meta":44,"style":44},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,106252,106253],{"__ignoreMap":44},[49,106254,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277,106280,106282,106285],{"class":51,"line":52},[49,106256,1129],{"class":55},[49,106258,103019],{"class":51389},[49,106260,15010],{"class":2055},[49,106262,60],{"class":55},[49,106264,106082],{"class":328},[49,106266,53913],{"class":2055},[49,106268,60],{"class":55},[49,106270,106082],{"class":328},[49,106272,106091],{"class":2055},[49,106274,60],{"class":55},[49,106276,106096],{"class":328},[49,106278,106279],{"class":2055}," damping",[49,106281,60],{"class":55},[49,106283,106284],{"class":328},"\"0.1\"",[49,106286,101207],{"class":55},[14,106288,106289],{},"含义：",[178,106291,106292,106298,106304],{},[181,106293,106294,106297],{},[46,106295,106296],{},"type=\"hinge\"","：只能绕一个轴旋转。",[181,106299,106300,106303],{},[46,106301,106302],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[181,106305,106306,106309],{},[46,106307,106308],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[195,106311,106313],{"id":106312},"motor-actuator","motor actuator",[39,106315,106317],{"className":53156,"code":106316,"language":53158,"meta":44,"style":44},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[46,106318,106319],{"__ignoreMap":44},[49,106320,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339,106341,106343,106345,106347,106349,106351,106353,106355],{"class":51,"line":52},[49,106322,1129],{"class":55},[49,106324,106137],{"class":51389},[49,106326,15010],{"class":2055},[49,106328,60],{"class":55},[49,106330,106144],{"class":328},[49,106332,106147],{"class":2055},[49,106334,60],{"class":55},[49,106336,106082],{"class":328},[49,106338,106154],{"class":2055},[49,106340,60],{"class":55},[49,106342,3770],{"class":328},[49,106344,106161],{"class":2055},[49,106346,60],{"class":55},[49,106348,106166],{"class":328},[49,106350,106169],{"class":2055},[49,106352,60],{"class":55},[49,106354,106174],{"class":328},[49,106356,101207],{"class":55},[14,106358,106289],{},[178,106360,106361,106370,106376,106382],{},[181,106362,106363,106366,106367,106369],{},[46,106364,106365],{},"joint=\"hinge\"","：这个电机作用在名为 ",[46,106368,105903],{}," 的关节上。",[181,106371,106372,106375],{},[46,106373,106374],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[181,106377,106378,106381],{},[46,106379,106380],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[181,106383,106384,106387],{},[46,106385,106386],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106389,106390],{},"简单理解：",[39,106392,106395],{"className":106393,"code":106394,"language":5278,"meta":44},[5276],"实际施加效果 ≈ data.ctrl[0] * gear\n",[46,106396,106394],{"__ignoreMap":44},[14,106398,106399],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[166,106401,101316],{"id":101315},[39,106403,106405],{"className":41,"code":106404,"language":43,"meta":44,"style":44},"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",[46,106406,106407,106414,106418,106424,106434,106438,106442,106450,106455,106460,106464,106468,106473,106478,106482,106487,106492,106497,106502,106506,106510,106514,106519,106524,106529,106533,106537,106541,106545,106557,106569,106577,106581,106591,106601,106611,106615,106628,106641,106645,106662,106676,106711,106715,106719,106730,106745,106760,106772,106776,106780,106792],{"__ignoreMap":44},[49,106408,106409,106411],{"class":51,"line":52},[49,106410,30481],{"class":59},[49,106412,106413],{"class":55}," math\n",[49,106415,106416],{"class":51,"line":84},[49,106417,2492],{"emptyLinePlaceholder":151},[49,106419,106420,106422],{"class":51,"line":109},[49,106421,30481],{"class":59},[49,106423,101364],{"class":55},[49,106425,106426,106428,106430,106432],{"class":51,"line":120},[49,106427,30481],{"class":59},[49,106429,31469],{"class":55},[49,106431,31472],{"class":59},[49,106433,31475],{"class":55},[49,106435,106436],{"class":51,"line":135},[49,106437,2492],{"emptyLinePlaceholder":151},[49,106439,106440],{"class":51,"line":1306},[49,106441,2492],{"emptyLinePlaceholder":151},[49,106443,106444,106446,106448],{"class":51,"line":1312},[49,106445,101377],{"class":66},[49,106447,13654],{"class":59},[49,106449,101382],{"class":328},[49,106451,106452],{"class":51,"line":1403},[49,106453,106454],{"class":328},"\u003Cmujoco model=\"one_link_motor\">\n",[49,106456,106457],{"class":51,"line":1409},[49,106458,106459],{"class":328},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[49,106461,106462],{"class":51,"line":1421},[49,106463,2492],{"emptyLinePlaceholder":151},[49,106465,106466],{"class":51,"line":1704},[49,106467,101401],{"class":328},[49,106469,106470],{"class":51,"line":1709},[49,106471,106472],{"class":328},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[49,106474,106475],{"class":51,"line":1715},[49,106476,106477],{"class":328},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[49,106479,106480],{"class":51,"line":1720},[49,106481,2492],{"emptyLinePlaceholder":151},[49,106483,106484],{"class":51,"line":1734},[49,106485,106486],{"class":328},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[49,106488,106489],{"class":51,"line":1739},[49,106490,106491],{"class":328},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,106493,106494],{"class":51,"line":1745},[49,106495,106496],{"class":328},"        \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",[49,106498,106499],{"class":51,"line":1766},[49,106500,106501],{"class":328},"      \u003C\u002Fbody>\n",[49,106503,106504],{"class":51,"line":1771},[49,106505,101430],{"class":328},[49,106507,106508],{"class":51,"line":1785},[49,106509,101435],{"class":328},[49,106511,106512],{"class":51,"line":1790},[49,106513,2492],{"emptyLinePlaceholder":151},[49,106515,106516],{"class":51,"line":1819},[49,106517,106518],{"class":328},"  \u003Cactuator>\n",[49,106520,106521],{"class":51,"line":1824},[49,106522,106523],{"class":328},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[49,106525,106526],{"class":51,"line":1841},[49,106527,106528],{"class":328},"  \u003C\u002Factuator>\n",[49,106530,106531],{"class":51,"line":1846},[49,106532,101440],{"class":328},[49,106534,106535],{"class":51,"line":1851},[49,106536,95761],{"class":328},[49,106538,106539],{"class":51,"line":1856},[49,106540,2492],{"emptyLinePlaceholder":151},[49,106542,106543],{"class":51,"line":1870},[49,106544,2492],{"emptyLinePlaceholder":151},[49,106546,106547,106549,106551,106553,106555],{"class":51,"line":1875},[49,106548,32036],{"class":59},[49,106550,2065],{"class":2055},[49,106552,101461],{"class":55},[49,106554,95749],{"class":66},[49,106556,3831],{"class":55},[49,106558,106559,106561,106563,106565,106567],{"class":51,"line":2669},[49,106560,101470],{"class":55},[49,106562,60],{"class":59},[49,106564,101475],{"class":55},[49,106566,101377],{"class":66},[49,106568,81],{"class":55},[49,106570,106571,106573,106575],{"class":51,"line":2683},[49,106572,101484],{"class":55},[49,106574,60],{"class":59},[49,106576,101489],{"class":55},[49,106578,106579],{"class":51,"line":2691},[49,106580,2492],{"emptyLinePlaceholder":151},[49,106582,106583,106585,106587,106589],{"class":51,"line":2696},[49,106584,31388],{"class":66},[49,106586,228],{"class":55},[49,106588,101502],{"class":328},[49,106590,101505],{"class":55},[49,106592,106593,106595,106597,106599],{"class":51,"line":2702},[49,106594,31388],{"class":66},[49,106596,228],{"class":55},[49,106598,101514],{"class":328},[49,106600,101517],{"class":55},[49,106602,106603,106605,106607,106609],{"class":51,"line":2708},[49,106604,31388],{"class":66},[49,106606,228],{"class":55},[49,106608,101526],{"class":328},[49,106610,101529],{"class":55},[49,106612,106613],{"class":51,"line":2713},[49,106614,2492],{"emptyLinePlaceholder":151},[49,106616,106617,106619,106622,106624,106626],{"class":51,"line":8038},[49,106618,3193],{"class":59},[49,106620,106621],{"class":55}," model.nu ",[49,106623,21038],{"class":59},[49,106625,25209],{"class":66},[49,106627,3831],{"class":55},[49,106629,106630,106632,106634,106636,106639],{"class":51,"line":8062},[49,106631,103495],{"class":59},[49,106633,103498],{"class":66},[49,106635,228],{"class":55},[49,106637,106638],{"class":328},"\"expected exactly one actuator\"",[49,106640,81],{"class":55},[49,106642,106643],{"class":51,"line":8067},[49,106644,2492],{"emptyLinePlaceholder":151},[49,106646,106647,106649,106651,106653,106655,106657,106660],{"class":51,"line":8073},[49,106648,3293],{"class":59},[49,106650,31705],{"class":55},[49,106652,26134],{"class":59},[49,106654,32532],{"class":66},[49,106656,228],{"class":55},[49,106658,106659],{"class":66},"2000",[49,106661,30875],{"class":55},[49,106663,106664,106667,106669,106671,106673],{"class":51,"line":8100},[49,106665,106666],{"class":55},"        t ",[49,106668,60],{"class":59},[49,106670,31705],{"class":55},[49,106672,674],{"class":59},[49,106674,106675],{"class":55}," model.opt.timestep\n",[49,106677,106678,106681,106683,106685,106687,106690,106692,106695,106697,106699,106702,106704,106706,106708],{"class":51,"line":8105},[49,106679,106680],{"class":55},"        data.ctrl[",[49,106682,415],{"class":66},[49,106684,4535],{"class":55},[49,106686,60],{"class":59},[49,106688,106689],{"class":66}," 1.5",[49,106691,6608],{"class":59},[49,106693,106694],{"class":55}," math.sin(",[49,106696,105323],{"class":66},[49,106698,6608],{"class":59},[49,106700,106701],{"class":55}," math.pi ",[49,106703,674],{"class":59},[49,106705,61956],{"class":66},[49,106707,6608],{"class":59},[49,106709,106710],{"class":55}," t)\n",[49,106712,106713],{"class":51,"line":8111},[49,106714,101579],{"class":55},[49,106716,106717],{"class":51,"line":8123},[49,106718,2492],{"emptyLinePlaceholder":151},[49,106720,106721,106723,106725,106728],{"class":51,"line":8135},[49,106722,31388],{"class":66},[49,106724,228],{"class":55},[49,106726,106727],{"class":328},"\"time:\"",[49,106729,101541],{"class":55},[49,106731,106732,106734,106736,106739,106741,106743],{"class":51,"line":8147},[49,106733,31388],{"class":66},[49,106735,228],{"class":55},[49,106737,106738],{"class":328},"\"joint qpos:\"",[49,106740,104993],{"class":55},[49,106742,515],{"class":66},[49,106744,30586],{"class":55},[49,106746,106747,106749,106751,106754,106756,106758],{"class":51,"line":9806},[49,106748,31388],{"class":66},[49,106750,228],{"class":55},[49,106752,106753],{"class":328},"\"joint qvel:\"",[49,106755,105009],{"class":55},[49,106757,515],{"class":66},[49,106759,30586],{"class":55},[49,106761,106762,106764,106766,106769],{"class":51,"line":9831},[49,106763,31388],{"class":66},[49,106765,228],{"class":55},[49,106767,106768],{"class":328},"\"last ctrl:\"",[49,106770,106771],{"class":55},", data.ctrl.copy())\n",[49,106773,106774],{"class":51,"line":9854},[49,106775,2492],{"emptyLinePlaceholder":151},[49,106777,106778],{"class":51,"line":9878},[49,106779,2492],{"emptyLinePlaceholder":151},[49,106781,106782,106784,106786,106788,106790],{"class":51,"line":9883},[49,106783,1623],{"class":59},[49,106785,31309],{"class":66},[49,106787,101622],{"class":59},[49,106789,101625],{"class":328},[49,106791,3831],{"class":55},[49,106793,106794],{"class":51,"line":9888},[49,106795,101632],{"class":55},[14,106797,103633],{},[39,106799,106801],{"className":23912,"code":106800,"language":23914,"meta":44,"style":44},"touch ch4_joint_motor.py\n",[46,106802,106803],{"__ignoreMap":44},[49,106804,106805,106807],{"class":51,"line":52},[49,106806,101346],{"class":2055},[49,106808,106809],{"class":328}," ch4_joint_motor.py\n",[14,106811,102364],{},[39,106813,106815],{"className":23912,"code":106814,"language":23914,"meta":44,"style":44},"python ch4_joint_motor.py\n",[46,106816,106817],{"__ignoreMap":44},[49,106818,106819,106821],{"class":51,"line":52},[49,106820,43],{"class":2055},[49,106822,106809],{"class":328},[195,106824,101635],{"id":101635},[14,106826,106827],{},"检查 actuator 数量：",[39,106829,106831],{"className":41,"code":106830,"language":43,"meta":44,"style":44},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[46,106832,106833,106845],{"__ignoreMap":44},[49,106834,106835,106837,106839,106841,106843],{"class":51,"line":52},[49,106836,1623],{"class":59},[49,106838,106621],{"class":55},[49,106840,21038],{"class":59},[49,106842,25209],{"class":66},[49,106844,3831],{"class":55},[49,106846,106847,106849,106851,106853,106855],{"class":51,"line":84},[49,106848,103958],{"class":59},[49,106850,103498],{"class":66},[49,106852,228],{"class":55},[49,106854,106638],{"class":328},[49,106856,81],{"class":55},[14,106858,106859,106861,106862,106864],{},[46,106860,102221],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[46,106863,101139],{}," 长度应该是 1。",[14,106866,106867],{},"产生正弦控制信号：",[39,106869,106871],{"className":41,"code":106870,"language":43,"meta":44,"style":44},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[46,106872,106873],{"__ignoreMap":44},[49,106874,106875,106877,106879,106881,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901],{"class":51,"line":52},[49,106876,105934],{"class":55},[49,106878,415],{"class":66},[49,106880,4535],{"class":55},[49,106882,60],{"class":59},[49,106884,106689],{"class":66},[49,106886,6608],{"class":59},[49,106888,106694],{"class":55},[49,106890,105323],{"class":66},[49,106892,6608],{"class":59},[49,106894,106701],{"class":55},[49,106896,674],{"class":59},[49,106898,61956],{"class":66},[49,106900,6608],{"class":59},[49,106902,106710],{"class":55},[14,106904,106905],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106907,101736],{},[39,106909,106910],{"className":41,"code":104568,"language":43,"meta":44,"style":44},[46,106911,106912],{"__ignoreMap":44},[49,106913,106914],{"class":51,"line":52},[49,106915,104568],{"class":55},[14,106917,106918],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[195,106920,101771],{"id":101771},[39,106922,106924],{"className":41,"code":106923,"language":43,"meta":44,"style":44},"import math\n",[46,106925,106926],{"__ignoreMap":44},[49,106927,106928,106930],{"class":51,"line":52},[49,106929,30481],{"class":59},[49,106931,106413],{"class":55},[14,106933,106934,106935,101081,106938,106941],{},"导入 Python 标准库里的数学模块。后面要用 ",[46,106936,106937],{},"math.sin",[46,106939,106940],{},"math.pi"," 生成周期变化的控制信号。",[39,106943,106944],{"className":41,"code":103749,"language":43,"meta":44,"style":44},[46,106945,106946,106952],{"__ignoreMap":44},[49,106947,106948,106950],{"class":51,"line":52},[49,106949,30481],{"class":59},[49,106951,101364],{"class":55},[49,106953,106954,106956,106958,106960],{"class":51,"line":84},[49,106955,30481],{"class":59},[49,106957,31469],{"class":55},[49,106959,31472],{"class":59},[49,106961,31475],{"class":55},[14,106963,106964],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[39,106966,106967],{"className":53156,"code":106250,"language":53158,"meta":44,"style":44},[46,106968,106969],{"__ignoreMap":44},[49,106970,106971,106973,106975,106977,106979,106981,106983,106985,106987,106989,106991,106993,106995,106997,106999],{"class":51,"line":52},[49,106972,1129],{"class":55},[49,106974,103019],{"class":51389},[49,106976,15010],{"class":2055},[49,106978,60],{"class":55},[49,106980,106082],{"class":328},[49,106982,53913],{"class":2055},[49,106984,60],{"class":55},[49,106986,106082],{"class":328},[49,106988,106091],{"class":2055},[49,106990,60],{"class":55},[49,106992,106096],{"class":328},[49,106994,106279],{"class":2055},[49,106996,60],{"class":55},[49,106998,106284],{"class":328},[49,107000,101207],{"class":55},[14,107002,107003,107004,107006,107007,107009,107010,107012],{},"这行定义关节。",[46,107005,105903],{}," 表示旋转关节。",[46,107008,106302],{}," 表示绕 y 轴旋转。",[46,107011,106308],{}," 表示有一点阻尼，运动不会完全无损耗。",[39,107014,107016],{"className":53156,"code":107015,"language":53158,"meta":44,"style":44},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[46,107017,107018],{"__ignoreMap":44},[49,107019,107020,107022,107024,107026,107028,107031,107033,107035,107038,107041,107043,107046,107048,107050,107052,107054,107056,107059],{"class":51,"line":52},[49,107021,1129],{"class":55},[49,107023,101183],{"class":51389},[49,107025,15010],{"class":2055},[49,107027,60],{"class":55},[49,107029,107030],{"class":328},"\"link_geom\"",[49,107032,53913],{"class":2055},[49,107034,60],{"class":55},[49,107036,107037],{"class":328},"\"capsule\"",[49,107039,107040],{"class":2055}," fromto",[49,107042,60],{"class":55},[49,107044,107045],{"class":328},"\"0 0 0 0 0 0.5\"",[49,107047,101199],{"class":2055},[49,107049,60],{"class":55},[49,107051,103841],{"class":328},[49,107053,102064],{"class":2055},[49,107055,60],{"class":55},[49,107057,107058],{"class":328},"\"0.5\"",[49,107060,101207],{"class":55},[14,107062,107063,107064,107066,107067,107069,107070,107073,107074,28476,107077,107079],{},"这行定义摆杆的形状。",[46,107065,103228],{}," 是胶囊体，适合表示杆子。",[46,107068,103239],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[46,107071,107072],{},"(0,0,0)"," 延伸到 ",[46,107075,107076],{},"(0,0,0.5)",[46,107078,103233],{}," 是半径。",[39,107081,107082],{"className":53156,"code":106316,"language":53158,"meta":44,"style":44},[46,107083,107084],{"__ignoreMap":44},[49,107085,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104,107106,107108,107110,107112,107114,107116,107118,107120],{"class":51,"line":52},[49,107087,1129],{"class":55},[49,107089,106137],{"class":51389},[49,107091,15010],{"class":2055},[49,107093,60],{"class":55},[49,107095,106144],{"class":328},[49,107097,106147],{"class":2055},[49,107099,60],{"class":55},[49,107101,106082],{"class":328},[49,107103,106154],{"class":2055},[49,107105,60],{"class":55},[49,107107,3770],{"class":328},[49,107109,106161],{"class":2055},[49,107111,60],{"class":55},[49,107113,106166],{"class":328},[49,107115,106169],{"class":2055},[49,107117,60],{"class":55},[49,107119,106174],{"class":328},[49,107121,101207],{"class":55},[14,107123,107124,107125,107127,107128,107131,107132,107134],{},"这行定义电机。它作用在 ",[46,107126,105903],{}," 关节上。",[46,107129,107130],{},"gear"," 可以理解成放大倍数。",[46,107133,105918],{}," 限制控制输入范围。",[39,107136,107137],{"className":41,"code":106830,"language":43,"meta":44,"style":44},[46,107138,107139,107151],{"__ignoreMap":44},[49,107140,107141,107143,107145,107147,107149],{"class":51,"line":52},[49,107142,1623],{"class":59},[49,107144,106621],{"class":55},[49,107146,21038],{"class":59},[49,107148,25209],{"class":66},[49,107150,3831],{"class":55},[49,107152,107153,107155,107157,107159,107161],{"class":51,"line":84},[49,107154,103958],{"class":59},[49,107156,103498],{"class":66},[49,107158,228],{"class":55},[49,107160,106638],{"class":328},[49,107162,81],{"class":55},[14,107164,107165,107167],{},[46,107166,102221],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[39,107169,107171],{"className":41,"code":107170,"language":43,"meta":44,"style":44},"for step in range(2000):\n",[46,107172,107173],{"__ignoreMap":44},[49,107174,107175,107177,107179,107181,107183,107185,107187],{"class":51,"line":52},[49,107176,3117],{"class":59},[49,107178,31705],{"class":55},[49,107180,26134],{"class":59},[49,107182,32532],{"class":66},[49,107184,228],{"class":55},[49,107186,106659],{"class":66},[49,107188,30875],{"class":55},[14,107190,107191,107192,107194,107195,107198],{},"循环 2000 步。这里没有用 ",[46,107193,1211],{},"，而是用 ",[46,107196,107197],{},"step","，因为后面要用当前步数计算时间。",[39,107200,107202],{"className":41,"code":107201,"language":43,"meta":44,"style":44},"t = step * model.opt.timestep\n",[46,107203,107204],{"__ignoreMap":44},[49,107205,107206,107209,107211,107213,107215],{"class":51,"line":52},[49,107207,107208],{"class":55},"t ",[49,107210,60],{"class":59},[49,107212,31705],{"class":55},[49,107214,674],{"class":59},[49,107216,106675],{"class":55},[14,107218,107219],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[39,107221,107222],{"className":41,"code":106870,"language":43,"meta":44,"style":44},[46,107223,107224],{"__ignoreMap":44},[49,107225,107226,107228,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252],{"class":51,"line":52},[49,107227,105934],{"class":55},[49,107229,415],{"class":66},[49,107231,4535],{"class":55},[49,107233,60],{"class":59},[49,107235,106689],{"class":66},[49,107237,6608],{"class":59},[49,107239,106694],{"class":55},[49,107241,105323],{"class":66},[49,107243,6608],{"class":59},[49,107245,106701],{"class":55},[49,107247,674],{"class":59},[49,107249,61956],{"class":66},[49,107251,6608],{"class":59},[49,107253,106710],{"class":55},[14,107255,107256],{},"这行给电机输入一个正弦波。拆开看：",[178,107258,107259,107265,107271],{},[181,107260,107261,107264],{},[46,107262,107263],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[181,107266,107267,107270],{},[46,107268,107269],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[181,107272,107273,107276],{},[46,107274,107275],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107278,107279],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[39,107281,107283],{"className":41,"code":107282,"language":43,"meta":44,"style":44},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[46,107284,107285],{"__ignoreMap":44},[49,107286,107287,107289,107291,107293,107295,107297],{"class":51,"line":52},[49,107288,30504],{"class":66},[49,107290,228],{"class":55},[49,107292,106738],{"class":328},[49,107294,104993],{"class":55},[49,107296,515],{"class":66},[49,107298,30586],{"class":55},[14,107300,107301,107302,107304],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[46,107303,101133],{}," 只有一个数。",[166,107306,102379],{"id":102378},[14,107308,107309],{},"输出类似:",[39,107311,107314],{"className":107312,"code":107313,"language":5278,"meta":44},[5276],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[46,107315,107313],{"__ignoreMap":44},[14,107317,107318,107319,107321],{},"这里 ",[46,107320,106189],{}," 是电机输入。",[14,107323,107324,107327,107328,107331],{},[46,107325,107326],{},"joint qpos"," 是关节角度，单位通常是弧度。",[46,107329,107330],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107333,107334],{},"角度单位提示：",[39,107336,107339],{"className":107337,"code":107338,"language":5278,"meta":44},[5276],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[46,107340,107338],{"__ignoreMap":44},[14,107342,107343,107344,107346,107347,107349],{},"如果你看到 ",[46,107345,104093],{}," 是 ",[46,107348,35418],{},"，大约就是 28.6 度。",[166,107351,102411],{"id":102410},[178,107353,107354,107361,107364,107371,107374,107382,107390],{},[181,107355,102474,107356,102477,107358,28476],{},[46,107357,106374],{},[46,107359,107360],{},"gear=\"5\"",[181,107362,107363],{},"重新运行，观察关节运动是否更剧烈。",[181,107365,102474,107366,102477,107368,28476],{},[46,107367,105918],{},[46,107369,107370],{},"-0.2 0.2",[181,107372,107373],{},"重新运行，观察控制能力是否变弱。",[181,107375,107376,107377,107379,107380,28476],{},"去掉 actuator，确认 ",[46,107378,102221],{}," 变成 ",[46,107381,415],{},[181,107383,102474,107384,102477,107386,107389],{},[46,107385,106308],{},[46,107387,107388],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[181,107391,102474,107392,102477,107394,107397],{},[46,107393,106302],{},[46,107395,107396],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[166,107399,102516],{"id":102515},[195,107401,107403],{"id":107402},"indexerror-index-0-is-out-of-bounds",[46,107404,107405],{},"IndexError: index 0 is out of bounds",[14,107407,107408,107409,107411],{},"原因是 ",[46,107410,106055],{},"，没有 actuator。",[195,107413,107414],{"id":107414},"关节几乎不动",[14,107416,107417],{},"可能原因:",[178,107419,107420,107425,107429,107435],{},[181,107421,107422,107424],{},[46,107423,107130],{}," 太小",[181,107426,107427,107424],{},[46,107428,105918],{},[181,107430,107431,107434],{},[46,107432,107433],{},"damping"," 太大",[181,107436,107437],{},"重力方向导致运动不明显",[195,107439,107440],{"id":107440},"模型编译失败",[14,107442,107443,107444,107446],{},"检查 actuator 引用的 ",[46,107445,106365],{}," 是否存在，joint 名称是否拼写一致。",[195,107448,107450,107452],{"id":107449},"datactrl0-写了但没有效果",[46,107451,106189],{}," 写了但没有效果",[14,107454,102638],{},[178,107456,107457,107462,107465,107470,107475],{},[181,107458,107459,107461],{},[46,107460,102221],{}," 是否大于 0。",[181,107463,107464],{},"motor 是否引用了正确 joint。",[181,107466,107467,107469],{},[46,107468,107130],{}," 是否太小。",[181,107471,107472,107474],{},[46,107473,105918],{}," 是否把输入限制得太小。",[181,107476,107477],{},"body 是否真的有可动 joint。",[195,107479,107480],{"id":107480},"控制输入超过范围会怎样",[14,107482,107483],{},"如果设置了：",[39,107485,107487],{"className":53156,"code":107486,"language":53158,"meta":44,"style":44},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[46,107488,107489],{"__ignoreMap":44},[49,107490,107491],{"class":51,"line":52},[49,107492,107486],{"class":55},[14,107494,107495],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[39,107497,107499],{"className":41,"code":107498,"language":43,"meta":44,"style":44},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[46,107500,107501,107521],{"__ignoreMap":44},[49,107502,107503,107506,107508,107511,107513,107515,107517,107519],{"class":51,"line":52},[49,107504,107505],{"class":55},"action ",[49,107507,60],{"class":59},[49,107509,107510],{"class":55}," np.clip(action, ",[49,107512,751],{"class":59},[49,107514,105323],{"class":66},[49,107516,12525],{"class":55},[49,107518,105323],{"class":66},[49,107520,81],{"class":55},[49,107522,107523,107525,107527,107529,107531],{"class":51,"line":84},[49,107524,105934],{"class":55},[49,107526,415],{"class":66},[49,107528,4535],{"class":55},[49,107530,60],{"class":59},[49,107532,107533],{"class":55}," action\n",[166,107535,102670],{"id":102669},[14,107537,107538],{},"这一章建立了控制任务的基本形式：",[39,107540,107543],{"className":107541,"code":107542,"language":5278,"meta":44},[5276],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[46,107544,107542],{"__ignoreMap":44},[14,107546,107547],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[143,107549,107550],{},"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":44,"searchDepth":84,"depth":84,"links":107552},[107553,107554,107555,107560,107564,107565,107566,107574],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":107556},[107557,107558,107559],{"id":106196,"depth":109,"text":106197},{"id":106246,"depth":109,"text":106247},{"id":106312,"depth":109,"text":106313},{"id":101315,"depth":84,"text":101316,"children":107561},[107562,107563],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":107567},[107568,107569,107570,107571,107573],{"id":107402,"depth":109,"text":107405},{"id":107414,"depth":109,"text":107414},{"id":107440,"depth":109,"text":107440},{"id":107449,"depth":109,"text":107572},"data.ctrl[0] 写了但没有效果",{"id":107480,"depth":109,"text":107480},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105884,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107581,"title":107582,"body":107583,"description":44,"extension":149,"meta":109492,"navigation":151,"path":109493,"seo":109494,"stem":109495,"__hash__":109496},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107584,"toc":109468},[107585,107588,107590,107593,107601,107604,107621,107624,107649,107652,107698,107700,107702,107757,107759,107778,107780,107823,107826,107843,107846,107862,107872,107879,107881,107884,107887,107921,107924,107972,107976,107979,107993,108002,108006,108009,108034,108037,108041,108054,108057,108063,108066,108081,108083,108086,108346,108348,108360,108363,108675,108677,108689,108691,108694,108709,108714,108717,108739,108742,108745,108779,108782,108786,108797,108800,108817,108820,108834,108841,108861,108868,108882,108885,108897,108912,108932,108935,108957,108960,108964,108979,108990,109005,109008,109038,109054,109083,109091,109115,109118,109136,109146,109158,109165,109174,109180,109189,109192,109194,109203,109206,109221,109223,109226,109237,109240,109251,109254,109272,109274,109291,109294,109322,109324,109328,109331,109361,109367,109370,109374,109382,109385,109387,109408,109411,109414,109430,109433,109449,109451,109454,109465],[10,107586,107582],{"id":107587},"_5viewer-可视化与-renderer-离屏渲染",[166,107589,100710],{"id":100709},[14,107591,107592],{},"本章掌握两类可视化方式:",[178,107594,107595,107598],{},[181,107596,107597],{},"交互式 viewer: 适合人工观察仿真",[181,107599,107600],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107602,107603],{},"使用官方接口:",[39,107605,107607],{"className":41,"code":107606,"language":43,"meta":44,"style":44},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[46,107608,107609,107616],{"__ignoreMap":44},[49,107610,107611,107613],{"class":51,"line":52},[49,107612,30481],{"class":59},[49,107614,107615],{"class":55}," mujoco.viewer\n",[49,107617,107618],{"class":51,"line":84},[49,107619,107620],{"class":55},"mujoco.viewer.launch_passive(model, data)\n",[14,107622,107623],{},"以及:",[39,107625,107627],{"className":41,"code":107626,"language":43,"meta":44,"style":44},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[46,107628,107629,107639],{"__ignoreMap":44},[49,107630,107631,107634,107636],{"class":51,"line":52},[49,107632,107633],{"class":55},"renderer ",[49,107635,60],{"class":59},[49,107637,107638],{"class":55}," mujoco.Renderer(model)\n",[49,107640,107641,107644,107646],{"class":51,"line":84},[49,107642,107643],{"class":55},"image ",[49,107645,60],{"class":59},[49,107647,107648],{"class":55}," renderer.render()\n",[14,107650,107651],{},"新手建议先理解二者区别：",[361,107653,107654,107670],{},[364,107655,107656],{},[367,107657,107658,107661,107664,107667],{},[370,107659,107660],{"align":23826},"工具",[370,107662,107663],{"align":23826},"用途",[370,107665,107666],{"align":23826},"是否打开窗口",[370,107668,107669],{"align":23826},"常见场景",[408,107671,107672,107685],{},[367,107673,107674,107677,107680,107682],{},[413,107675,107676],{"align":23826},"Viewer",[413,107678,107679],{"align":23826},"人眼实时观察仿真",[413,107681,104728],{"align":23826},[413,107683,107684],{"align":23826},"调试模型、看控制效果",[367,107686,107687,107690,107693,107695],{},[413,107688,107689],{"align":23826},"Renderer",[413,107691,107692],{"align":23826},"生成图像数组",[413,107694,104741],{"align":23826},[413,107696,107697],{"align":23826},"保存图片、训练视觉策略、服务器批量采集",[166,107699,100833],{"id":100832},[14,107701,100836],{},[39,107703,107705],{"className":23912,"code":107704,"language":23914,"meta":44,"style":44},"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",[46,107706,107707,107719,107729,107737,107745],{"__ignoreMap":44},[49,107708,107709,107711,107713,107715,107717],{"class":51,"line":52},[49,107710,24667],{"class":2055},[49,107712,26406],{"class":328},[49,107714,23924],{"class":328},[49,107716,26491],{"class":66},[49,107718,24769],{"class":66},[49,107720,107721,107723,107725,107727],{"class":51,"line":84},[49,107722,100871],{"class":328},[49,107724,100874],{"class":328},[49,107726,100877],{"class":328},[49,107728,24769],{"class":66},[49,107730,107731,107733,107735],{"class":51,"line":109},[49,107732,100884],{"class":328},[49,107734,100887],{"class":328},[49,107736,24769],{"class":66},[49,107738,107739,107741,107743],{"class":51,"line":120},[49,107740,100894],{"class":328},[49,107742,100897],{"class":328},[49,107744,24769],{"class":66},[49,107746,107747,107749,107751,107753,107755],{"class":51,"line":135},[49,107748,100904],{"class":328},[49,107750,100907],{"class":328},[49,107752,100910],{"class":328},[49,107754,100913],{"class":328},[49,107756,102579],{"class":328},[14,107758,102882],{},[39,107760,107762],{"className":23912,"code":107761,"language":23914,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy pillow\n",[46,107763,107764],{"__ignoreMap":44},[49,107765,107766,107768,107770,107772,107775],{"class":51,"line":52},[49,107767,23921],{"class":2055},[49,107769,23924],{"class":328},[49,107771,100993],{"class":328},[49,107773,107774],{"class":328}," numpy",[49,107776,107777],{"class":328}," pillow\n",[14,107779,102899],{},[39,107781,107783],{"className":23912,"code":107782,"language":23914,"meta":44,"style":44},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[46,107784,107785,107802,107811],{"__ignoreMap":44},[49,107786,107787,107789,107791,107793,107796,107798,107800],{"class":51,"line":52},[49,107788,30421],{"class":2055},[49,107790,29267],{"class":328},[49,107792,25206],{"class":66},[49,107794,107795],{"class":328}," mujoco-render",[49,107797,101038],{"class":328},[49,107799,101041],{"class":66},[49,107801,101044],{"class":66},[49,107803,107804,107806,107808],{"class":51,"line":84},[49,107805,30421],{"class":2055},[49,107807,101051],{"class":328},[49,107809,107810],{"class":328}," mujoco-render\n",[49,107812,107813,107815,107817,107819,107821],{"class":51,"line":109},[49,107814,23921],{"class":2055},[49,107816,23924],{"class":328},[49,107818,100993],{"class":328},[49,107820,107774],{"class":328},[49,107822,107777],{"class":328},[14,107824,107825],{},"离屏渲染后端:",[39,107827,107829],{"className":23912,"code":107828,"language":23914,"meta":44,"style":44},"export MUJOCO_GL=egl\n",[46,107830,107831],{"__ignoreMap":44},[49,107832,107833,107835,107838,107840],{"class":51,"line":52},[49,107834,25133],{"class":59},[49,107836,107837],{"class":55}," MUJOCO_GL",[49,107839,60],{"class":59},[49,107841,107842],{"class":55},"egl\n",[14,107844,107845],{},"或:",[39,107847,107849],{"className":23912,"code":107848,"language":23914,"meta":44,"style":44},"export MUJOCO_GL=osmesa\n",[46,107850,107851],{"__ignoreMap":44},[49,107852,107853,107855,107857,107859],{"class":51,"line":52},[49,107854,25133],{"class":59},[49,107856,107837],{"class":55},[49,107858,60],{"class":59},[49,107860,107861],{"class":55},"osmesa\n",[14,107863,107864,107865,107868,107869,28476],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[46,107866,107867],{},"egl"," 失败，再尝试 ",[46,107870,107871],{},"osmesa",[14,107873,107874,107875,107878],{},"如果你在本机桌面环境运行，通常先不要设置 ",[46,107876,107877],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[166,107880,101108],{"id":101107},[14,107882,107883],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107885,107886],{},"典型 viewer 流程:",[39,107888,107890],{"className":41,"code":107889,"language":43,"meta":44,"style":44},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[46,107891,107892,107905,107912,107916],{"__ignoreMap":44},[49,107893,107894,107897,107900,107902],{"class":51,"line":52},[49,107895,107896],{"class":59},"with",[49,107898,107899],{"class":55}," mujoco.viewer.launch_passive(model, data) ",[49,107901,31472],{"class":59},[49,107903,107904],{"class":55}," viewer:\n",[49,107906,107907,107909],{"class":51,"line":84},[49,107908,2343],{"class":59},[49,107910,107911],{"class":55}," viewer.is_running():\n",[49,107913,107914],{"class":51,"line":109},[49,107915,101579],{"class":55},[49,107917,107918],{"class":51,"line":120},[49,107919,107920],{"class":55},"        viewer.sync()\n",[14,107922,107923],{},"典型 renderer 流程:",[39,107925,107927],{"className":41,"code":107926,"language":43,"meta":44,"style":44},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[46,107928,107929,107955,107959,107964],{"__ignoreMap":44},[49,107930,107931,107933,107935,107938,107940,107942,107944,107946,107948,107950,107953],{"class":51,"line":52},[49,107932,107633],{"class":55},[49,107934,60],{"class":59},[49,107936,107937],{"class":55}," mujoco.Renderer(model, ",[49,107939,25072],{"class":126},[49,107941,60],{"class":59},[49,107943,42431],{"class":66},[49,107945,12525],{"class":55},[49,107947,25068],{"class":126},[49,107949,60],{"class":59},[49,107951,107952],{"class":66},"640",[49,107954,81],{"class":55},[49,107956,107957],{"class":51,"line":84},[49,107958,104568],{"class":55},[49,107960,107961],{"class":51,"line":109},[49,107962,107963],{"class":55},"renderer.update_scene(data)\n",[49,107965,107966,107968,107970],{"class":51,"line":120},[49,107967,107643],{"class":55},[49,107969,60],{"class":59},[49,107971,107648],{"class":55},[195,107973,107975],{"id":107974},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107977,107978],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[39,107980,107982],{"className":41,"code":107981,"language":43,"meta":44,"style":44},"mujoco.mj_step(model, data)\nviewer.sync()\n",[46,107983,107984,107988],{"__ignoreMap":44},[49,107985,107986],{"class":51,"line":52},[49,107987,104568],{"class":55},[49,107989,107990],{"class":51,"line":84},[49,107991,107992],{"class":55},"viewer.sync()\n",[14,107994,107995,107997,107998,108001],{},[46,107996,101278],{}," 负责算物理，",[46,107999,108000],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[195,108003,108005],{"id":108004},"为什么要-sleep","为什么要 sleep",[14,108007,108008],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[39,108010,108012],{"className":41,"code":108011,"language":43,"meta":44,"style":44},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[46,108013,108014],{"__ignoreMap":44},[49,108015,108016,108019,108021,108024,108026,108029,108031],{"class":51,"line":52},[49,108017,108018],{"class":55},"sleep_time ",[49,108020,60],{"class":59},[49,108022,108023],{"class":55}," model.opt.timestep ",[49,108025,751],{"class":59},[49,108027,108028],{"class":55}," (time.time() ",[49,108030,751],{"class":59},[49,108032,108033],{"class":55}," step_start)\n",[14,108035,108036],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[195,108038,108040],{"id":108039},"renderer-输出是什么","renderer 输出是什么",[39,108042,108044],{"className":41,"code":108043,"language":43,"meta":44,"style":44},"image = renderer.render()\n",[46,108045,108046],{"__ignoreMap":44},[49,108047,108048,108050,108052],{"class":51,"line":52},[49,108049,107643],{"class":55},[49,108051,60],{"class":59},[49,108053,107648],{"class":55},[14,108055,108056],{},"得到的是 NumPy 数组，形状通常是：",[39,108058,108061],{"className":108059,"code":108060,"language":5278,"meta":44},[5276],"(height, width, 3)\n",[46,108062,108060],{"__ignoreMap":44},[14,108064,108065],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[39,108067,108069],{"className":41,"code":108068,"language":43,"meta":44,"style":44},"Image.fromarray(image).save(\"render_output.png\")\n",[46,108070,108071],{"__ignoreMap":44},[49,108072,108073,108076,108079],{"class":51,"line":52},[49,108074,108075],{"class":55},"Image.fromarray(image).save(",[49,108077,108078],{"class":328},"\"render_output.png\"",[49,108080,81],{"class":55},[166,108082,101316],{"id":101315},[14,108084,108085],{},"交互式 Viewer:",[39,108087,108089],{"className":41,"code":108088,"language":43,"meta":44,"style":44},"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",[46,108090,108091,108097,108101,108107,108113,108117,108121,108129,108134,108138,108142,108146,108151,108156,108160,108164,108168,108173,108177,108181,108185,108189,108193,108197,108209,108221,108229,108233,108243,108263,108273,108278,108283,108287,108304,108317,108322,108326,108330,108342],{"__ignoreMap":44},[49,108092,108093,108095],{"class":51,"line":52},[49,108094,30481],{"class":59},[49,108096,31918],{"class":55},[49,108098,108099],{"class":51,"line":84},[49,108100,2492],{"emptyLinePlaceholder":151},[49,108102,108103,108105],{"class":51,"line":109},[49,108104,30481],{"class":59},[49,108106,101364],{"class":55},[49,108108,108109,108111],{"class":51,"line":120},[49,108110,30481],{"class":59},[49,108112,107615],{"class":55},[49,108114,108115],{"class":51,"line":135},[49,108116,2492],{"emptyLinePlaceholder":151},[49,108118,108119],{"class":51,"line":1306},[49,108120,2492],{"emptyLinePlaceholder":151},[49,108122,108123,108125,108127],{"class":51,"line":1312},[49,108124,101377],{"class":66},[49,108126,13654],{"class":59},[49,108128,101382],{"class":328},[49,108130,108131],{"class":51,"line":1403},[49,108132,108133],{"class":328},"\u003Cmujoco model=\"viewer_demo\">\n",[49,108135,108136],{"class":51,"line":1409},[49,108137,101392],{"class":328},[49,108139,108140],{"class":51,"line":1421},[49,108141,2492],{"emptyLinePlaceholder":151},[49,108143,108144],{"class":51,"line":1704},[49,108145,101401],{"class":328},[49,108147,108148],{"class":51,"line":1709},[49,108149,108150],{"class":328},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[49,108152,108153],{"class":51,"line":1715},[49,108154,108155],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,108157,108158],{"class":51,"line":1720},[49,108159,2492],{"emptyLinePlaceholder":151},[49,108161,108162],{"class":51,"line":1734},[49,108163,101415],{"class":328},[49,108165,108166],{"class":51,"line":1739},[49,108167,101420],{"class":328},[49,108169,108170],{"class":51,"line":1745},[49,108171,108172],{"class":328},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,108174,108175],{"class":51,"line":1766},[49,108176,101430],{"class":328},[49,108178,108179],{"class":51,"line":1771},[49,108180,101435],{"class":328},[49,108182,108183],{"class":51,"line":1785},[49,108184,101440],{"class":328},[49,108186,108187],{"class":51,"line":1790},[49,108188,95761],{"class":328},[49,108190,108191],{"class":51,"line":1819},[49,108192,2492],{"emptyLinePlaceholder":151},[49,108194,108195],{"class":51,"line":1824},[49,108196,2492],{"emptyLinePlaceholder":151},[49,108198,108199,108201,108203,108205,108207],{"class":51,"line":1841},[49,108200,32036],{"class":59},[49,108202,2065],{"class":2055},[49,108204,101461],{"class":55},[49,108206,95749],{"class":66},[49,108208,3831],{"class":55},[49,108210,108211,108213,108215,108217,108219],{"class":51,"line":1846},[49,108212,101470],{"class":55},[49,108214,60],{"class":59},[49,108216,101475],{"class":55},[49,108218,101377],{"class":66},[49,108220,81],{"class":55},[49,108222,108223,108225,108227],{"class":51,"line":1851},[49,108224,101484],{"class":55},[49,108226,60],{"class":59},[49,108228,101489],{"class":55},[49,108230,108231],{"class":51,"line":1856},[49,108232,2492],{"emptyLinePlaceholder":151},[49,108234,108235,108237,108239,108241],{"class":51,"line":1870},[49,108236,34267],{"class":59},[49,108238,107899],{"class":55},[49,108240,31472],{"class":59},[49,108242,107904],{"class":55},[49,108244,108245,108248,108251,108253,108256,108258,108261],{"class":51,"line":1875},[49,108246,108247],{"class":59},"        while",[49,108249,108250],{"class":55}," viewer.is_running() ",[49,108252,30551],{"class":59},[49,108254,108255],{"class":55}," data.time ",[49,108257,1129],{"class":59},[49,108259,108260],{"class":66}," 5.0",[49,108262,3831],{"class":55},[49,108264,108265,108268,108270],{"class":51,"line":2669},[49,108266,108267],{"class":55},"            step_start ",[49,108269,60],{"class":59},[49,108271,108272],{"class":55}," time.time()\n",[49,108274,108275],{"class":51,"line":2683},[49,108276,108277],{"class":55},"            mujoco.mj_step(model, data)\n",[49,108279,108280],{"class":51,"line":2691},[49,108281,108282],{"class":55},"            viewer.sync()\n",[49,108284,108285],{"class":51,"line":2696},[49,108286,2492],{"emptyLinePlaceholder":151},[49,108288,108289,108292,108294,108296,108298,108300,108302],{"class":51,"line":2702},[49,108290,108291],{"class":55},"            sleep_time ",[49,108293,60],{"class":59},[49,108295,108023],{"class":55},[49,108297,751],{"class":59},[49,108299,108028],{"class":55},[49,108301,751],{"class":59},[49,108303,108033],{"class":55},[49,108305,108306,108308,108311,108313,108315],{"class":51,"line":2708},[49,108307,4734],{"class":59},[49,108309,108310],{"class":55}," sleep_time ",[49,108312,1179],{"class":59},[49,108314,4185],{"class":66},[49,108316,3831],{"class":55},[49,108318,108319],{"class":51,"line":2713},[49,108320,108321],{"class":55},"                time.sleep(sleep_time)\n",[49,108323,108324],{"class":51,"line":8038},[49,108325,2492],{"emptyLinePlaceholder":151},[49,108327,108328],{"class":51,"line":8062},[49,108329,2492],{"emptyLinePlaceholder":151},[49,108331,108332,108334,108336,108338,108340],{"class":51,"line":8067},[49,108333,1623],{"class":59},[49,108335,31309],{"class":66},[49,108337,101622],{"class":59},[49,108339,101625],{"class":328},[49,108341,3831],{"class":55},[49,108343,108344],{"class":51,"line":8073},[49,108345,101632],{"class":55},[14,108347,103633],{},[39,108349,108351],{"className":23912,"code":108350,"language":23914,"meta":44,"style":44},"touch ch5_viewer.py\n",[46,108352,108353],{"__ignoreMap":44},[49,108354,108355,108357],{"class":51,"line":52},[49,108356,101346],{"class":2055},[49,108358,108359],{"class":328}," ch5_viewer.py\n",[14,108361,108362],{},"离屏 Renderer 保存图片:",[39,108364,108366],{"className":41,"code":108365,"language":43,"meta":44,"style":44},"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",[46,108367,108368,108380,108384,108390,108400,108404,108408,108416,108421,108425,108429,108433,108437,108442,108446,108450,108454,108458,108462,108466,108470,108474,108478,108482,108486,108498,108510,108518,108543,108547,108563,108567,108571,108586,108595,108599,108613,108618,108623,108627,108639,108651,108655,108659,108671],{"__ignoreMap":44},[49,108369,108370,108372,108375,108377],{"class":51,"line":52},[49,108371,30826],{"class":59},[49,108373,108374],{"class":55}," pathlib ",[49,108376,30481],{"class":59},[49,108378,108379],{"class":55}," Path\n",[49,108381,108382],{"class":51,"line":84},[49,108383,2492],{"emptyLinePlaceholder":151},[49,108385,108386,108388],{"class":51,"line":109},[49,108387,30481],{"class":59},[49,108389,101364],{"class":55},[49,108391,108392,108394,108396,108398],{"class":51,"line":120},[49,108393,30826],{"class":59},[49,108395,47352],{"class":66},[49,108397,47355],{"class":59},[49,108399,47358],{"class":55},[49,108401,108402],{"class":51,"line":135},[49,108403,2492],{"emptyLinePlaceholder":151},[49,108405,108406],{"class":51,"line":1306},[49,108407,2492],{"emptyLinePlaceholder":151},[49,108409,108410,108412,108414],{"class":51,"line":1312},[49,108411,101377],{"class":66},[49,108413,13654],{"class":59},[49,108415,101382],{"class":328},[49,108417,108418],{"class":51,"line":1403},[49,108419,108420],{"class":328},"\u003Cmujoco model=\"renderer_demo\">\n",[49,108422,108423],{"class":51,"line":1409},[49,108424,101392],{"class":328},[49,108426,108427],{"class":51,"line":1421},[49,108428,2492],{"emptyLinePlaceholder":151},[49,108430,108431],{"class":51,"line":1704},[49,108432,101401],{"class":328},[49,108434,108435],{"class":51,"line":1709},[49,108436,108150],{"class":328},[49,108438,108439],{"class":51,"line":1715},[49,108440,108441],{"class":328},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[49,108443,108444],{"class":51,"line":1720},[49,108445,108155],{"class":328},[49,108447,108448],{"class":51,"line":1734},[49,108449,2492],{"emptyLinePlaceholder":151},[49,108451,108452],{"class":51,"line":1739},[49,108453,101415],{"class":328},[49,108455,108456],{"class":51,"line":1745},[49,108457,101420],{"class":328},[49,108459,108460],{"class":51,"line":1766},[49,108461,108172],{"class":328},[49,108463,108464],{"class":51,"line":1771},[49,108465,101430],{"class":328},[49,108467,108468],{"class":51,"line":1785},[49,108469,101435],{"class":328},[49,108471,108472],{"class":51,"line":1790},[49,108473,101440],{"class":328},[49,108475,108476],{"class":51,"line":1819},[49,108477,95761],{"class":328},[49,108479,108480],{"class":51,"line":1824},[49,108481,2492],{"emptyLinePlaceholder":151},[49,108483,108484],{"class":51,"line":1841},[49,108485,2492],{"emptyLinePlaceholder":151},[49,108487,108488,108490,108492,108494,108496],{"class":51,"line":1846},[49,108489,32036],{"class":59},[49,108491,2065],{"class":2055},[49,108493,101461],{"class":55},[49,108495,95749],{"class":66},[49,108497,3831],{"class":55},[49,108499,108500,108502,108504,108506,108508],{"class":51,"line":1851},[49,108501,101470],{"class":55},[49,108503,60],{"class":59},[49,108505,101475],{"class":55},[49,108507,101377],{"class":66},[49,108509,81],{"class":55},[49,108511,108512,108514,108516],{"class":51,"line":1856},[49,108513,101484],{"class":55},[49,108515,60],{"class":59},[49,108517,101489],{"class":55},[49,108519,108520,108523,108525,108527,108529,108531,108533,108535,108537,108539,108541],{"class":51,"line":1870},[49,108521,108522],{"class":55},"    renderer ",[49,108524,60],{"class":59},[49,108526,107937],{"class":55},[49,108528,25072],{"class":126},[49,108530,60],{"class":59},[49,108532,42431],{"class":66},[49,108534,12525],{"class":55},[49,108536,25068],{"class":126},[49,108538,60],{"class":59},[49,108540,107952],{"class":66},[49,108542,81],{"class":55},[49,108544,108545],{"class":51,"line":1875},[49,108546,2492],{"emptyLinePlaceholder":151},[49,108548,108549,108551,108553,108555,108557,108559,108561],{"class":51,"line":2669},[49,108550,3293],{"class":59},[49,108552,101564],{"class":55},[49,108554,26134],{"class":59},[49,108556,32532],{"class":66},[49,108558,228],{"class":55},[49,108560,533],{"class":66},[49,108562,30875],{"class":55},[49,108564,108565],{"class":51,"line":2683},[49,108566,101579],{"class":55},[49,108568,108569],{"class":51,"line":2691},[49,108570,2492],{"emptyLinePlaceholder":151},[49,108572,108573,108576,108579,108581,108584],{"class":51,"line":2696},[49,108574,108575],{"class":55},"    renderer.update_scene(data, ",[49,108577,108578],{"class":126},"camera",[49,108580,60],{"class":59},[49,108582,108583],{"class":328},"\"fixed_camera\"",[49,108585,81],{"class":55},[49,108587,108588,108591,108593],{"class":51,"line":2702},[49,108589,108590],{"class":55},"    image ",[49,108592,60],{"class":59},[49,108594,107648],{"class":55},[49,108596,108597],{"class":51,"line":2708},[49,108598,2492],{"emptyLinePlaceholder":151},[49,108600,108601,108604,108606,108609,108611],{"class":51,"line":2713},[49,108602,108603],{"class":55},"    output_path ",[49,108605,60],{"class":59},[49,108607,108608],{"class":55}," Path(",[49,108610,108078],{"class":328},[49,108612,81],{"class":55},[49,108614,108615],{"class":51,"line":8038},[49,108616,108617],{"class":55},"    Image.fromarray(image).save(output_path)\n",[49,108619,108620],{"class":51,"line":8062},[49,108621,108622],{"class":55},"    renderer.close()\n",[49,108624,108625],{"class":51,"line":8067},[49,108626,2492],{"emptyLinePlaceholder":151},[49,108628,108629,108631,108633,108636],{"class":51,"line":8073},[49,108630,31388],{"class":66},[49,108632,228],{"class":55},[49,108634,108635],{"class":328},"\"saved:\"",[49,108637,108638],{"class":55},", output_path.resolve())\n",[49,108640,108641,108643,108645,108648],{"class":51,"line":8100},[49,108642,31388],{"class":66},[49,108644,228],{"class":55},[49,108646,108647],{"class":328},"\"image shape:\"",[49,108649,108650],{"class":55},", image.shape)\n",[49,108652,108653],{"class":51,"line":8105},[49,108654,2492],{"emptyLinePlaceholder":151},[49,108656,108657],{"class":51,"line":8111},[49,108658,2492],{"emptyLinePlaceholder":151},[49,108660,108661,108663,108665,108667,108669],{"class":51,"line":8123},[49,108662,1623],{"class":59},[49,108664,31309],{"class":66},[49,108666,101622],{"class":59},[49,108668,101625],{"class":328},[49,108670,3831],{"class":55},[49,108672,108673],{"class":51,"line":8135},[49,108674,101632],{"class":55},[14,108676,103633],{},[39,108678,108680],{"className":23912,"code":108679,"language":23914,"meta":44,"style":44},"touch ch5_renderer.py\n",[46,108681,108682],{"__ignoreMap":44},[49,108683,108684,108686],{"class":51,"line":52},[49,108685,101346],{"class":2055},[49,108687,108688],{"class":328}," ch5_renderer.py\n",[195,108690,101635],{"id":101635},[14,108692,108693],{},"viewer 上下文：",[39,108695,108697],{"className":41,"code":108696,"language":43,"meta":44,"style":44},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[46,108698,108699],{"__ignoreMap":44},[49,108700,108701,108703,108705,108707],{"class":51,"line":52},[49,108702,107896],{"class":59},[49,108704,107899],{"class":55},[49,108706,31472],{"class":59},[49,108708,107904],{"class":55},[14,108710,108711,108713],{},[46,108712,107896],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108715,108716],{},"窗口循环：",[39,108718,108720],{"className":41,"code":108719,"language":43,"meta":44,"style":44},"while viewer.is_running() and data.time \u003C 5.0:\n",[46,108721,108722],{"__ignoreMap":44},[49,108723,108724,108727,108729,108731,108733,108735,108737],{"class":51,"line":52},[49,108725,108726],{"class":59},"while",[49,108728,108250],{"class":55},[49,108730,30551],{"class":59},[49,108732,108255],{"class":55},[49,108734,1129],{"class":59},[49,108736,108260],{"class":66},[49,108738,3831],{"class":55},[14,108740,108741],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108743,108744],{},"固定相机：",[39,108746,108748],{"className":53156,"code":108747,"language":53158,"meta":44,"style":44},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[46,108749,108750],{"__ignoreMap":44},[49,108751,108752,108754,108756,108758,108760,108762,108764,108766,108769,108772,108774,108777],{"class":51,"line":52},[49,108753,1129],{"class":55},[49,108755,108578],{"class":51389},[49,108757,15010],{"class":2055},[49,108759,60],{"class":55},[49,108761,108583],{"class":328},[49,108763,101169],{"class":2055},[49,108765,60],{"class":55},[49,108767,108768],{"class":328},"\"1.5 -2.0 1.2\"",[49,108770,108771],{"class":2055}," xyaxes",[49,108773,60],{"class":55},[49,108775,108776],{"class":328},"\"1 0.75 0 0 0 1\"",[49,108778,101207],{"class":55},[14,108780,108781],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[195,108783,108785],{"id":108784},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[39,108787,108789],{"className":41,"code":108788,"language":43,"meta":44,"style":44},"import time\n",[46,108790,108791],{"__ignoreMap":44},[49,108792,108793,108795],{"class":51,"line":52},[49,108794,30481],{"class":59},[49,108796,31918],{"class":55},[14,108798,108799],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[39,108801,108803],{"className":41,"code":108802,"language":43,"meta":44,"style":44},"import mujoco\nimport mujoco.viewer\n",[46,108804,108805,108811],{"__ignoreMap":44},[49,108806,108807,108809],{"class":51,"line":52},[49,108808,30481],{"class":59},[49,108810,101364],{"class":55},[49,108812,108813,108815],{"class":51,"line":84},[49,108814,30481],{"class":59},[49,108816,107615],{"class":55},[14,108818,108819],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[39,108821,108822],{"className":41,"code":108696,"language":43,"meta":44,"style":44},[46,108823,108824],{"__ignoreMap":44},[49,108825,108826,108828,108830,108832],{"class":51,"line":52},[49,108827,107896],{"class":59},[49,108829,107899],{"class":55},[49,108831,31472],{"class":59},[49,108833,107904],{"class":55},[14,108835,108836,108837,108840],{},"打开一个 viewer 窗口。",[46,108838,108839],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[39,108842,108843],{"className":41,"code":108719,"language":43,"meta":44,"style":44},[46,108844,108845],{"__ignoreMap":44},[49,108846,108847,108849,108851,108853,108855,108857,108859],{"class":51,"line":52},[49,108848,108726],{"class":59},[49,108850,108250],{"class":55},[49,108852,30551],{"class":59},[49,108854,108255],{"class":55},[49,108856,1129],{"class":59},[49,108858,108260],{"class":66},[49,108860,3831],{"class":55},[14,108862,108863,108864,108867],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[46,108865,108866],{},"viewer.is_running()"," 会变成 false，循环结束。",[39,108869,108871],{"className":41,"code":108870,"language":43,"meta":44,"style":44},"step_start = time.time()\n",[46,108872,108873],{"__ignoreMap":44},[49,108874,108875,108878,108880],{"class":51,"line":52},[49,108876,108877],{"class":55},"step_start ",[49,108879,60],{"class":59},[49,108881,108272],{"class":55},[14,108883,108884],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[39,108886,108887],{"className":41,"code":107981,"language":43,"meta":44,"style":44},[46,108888,108889,108893],{"__ignoreMap":44},[49,108890,108891],{"class":51,"line":52},[49,108892,104568],{"class":55},[49,108894,108895],{"class":51,"line":84},[49,108896,107992],{"class":55},[14,108898,108899,108901,108902,108904,108905,108907,108908,108911],{},[46,108900,101278],{}," 推进物理仿真。",[46,108903,108000],{}," 把最新的 ",[46,108906,33490],{}," 同步到窗口里显示。没有 ",[46,108909,108910],{},"sync()","，窗口可能看不到最新状态。",[39,108913,108914],{"className":41,"code":108011,"language":43,"meta":44,"style":44},[46,108915,108916],{"__ignoreMap":44},[49,108917,108918,108920,108922,108924,108926,108928,108930],{"class":51,"line":52},[49,108919,108018],{"class":55},[49,108921,60],{"class":59},[49,108923,108023],{"class":55},[49,108925,751],{"class":59},[49,108927,108028],{"class":55},[49,108929,751],{"class":59},[49,108931,108033],{"class":55},[14,108933,108934],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[39,108936,108938],{"className":41,"code":108937,"language":43,"meta":44,"style":44},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[46,108939,108940,108952],{"__ignoreMap":44},[49,108941,108942,108944,108946,108948,108950],{"class":51,"line":52},[49,108943,1623],{"class":59},[49,108945,108310],{"class":55},[49,108947,1179],{"class":59},[49,108949,4185],{"class":66},[49,108951,3831],{"class":55},[49,108953,108954],{"class":51,"line":84},[49,108955,108956],{"class":55},"    time.sleep(sleep_time)\n",[14,108958,108959],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[195,108961,108963],{"id":108962},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[39,108965,108967],{"className":41,"code":108966,"language":43,"meta":44,"style":44},"from pathlib import Path\n",[46,108968,108969],{"__ignoreMap":44},[49,108970,108971,108973,108975,108977],{"class":51,"line":52},[49,108972,30826],{"class":59},[49,108974,108374],{"class":55},[49,108976,30481],{"class":59},[49,108978,108379],{"class":55},[14,108980,108981,108982,108985,108986,108989],{},"导入 ",[46,108983,108984],{},"Path","，用来处理文件路径。相比直接写字符串，",[46,108987,108988],{},"Path(\"render_output.png\")"," 更清晰。",[39,108991,108993],{"className":41,"code":108992,"language":43,"meta":44,"style":44},"from PIL import Image\n",[46,108994,108995],{"__ignoreMap":44},[49,108996,108997,108999,109001,109003],{"class":51,"line":52},[49,108998,30826],{"class":59},[49,109000,47352],{"class":66},[49,109002,47355],{"class":59},[49,109004,47358],{"class":55},[14,109006,109007],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[39,109009,109010],{"className":53156,"code":108747,"language":53158,"meta":44,"style":44},[46,109011,109012],{"__ignoreMap":44},[49,109013,109014,109016,109018,109020,109022,109024,109026,109028,109030,109032,109034,109036],{"class":51,"line":52},[49,109015,1129],{"class":55},[49,109017,108578],{"class":51389},[49,109019,15010],{"class":2055},[49,109021,60],{"class":55},[49,109023,108583],{"class":328},[49,109025,101169],{"class":2055},[49,109027,60],{"class":55},[49,109029,108768],{"class":328},[49,109031,108771],{"class":2055},[49,109033,60],{"class":55},[49,109035,108776],{"class":328},[49,109037,101207],{"class":55},[14,109039,109040,109041,109043,109044,109046,109047,109050,109051,109053],{},"定义一个相机。",[46,109042,79899],{}," 是相机名字。",[46,109045,104209],{}," 是相机在世界里的位置。",[46,109048,109049],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[46,109052,104209],{}," 来调视角。",[39,109055,109057],{"className":41,"code":109056,"language":43,"meta":44,"style":44},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[46,109058,109059],{"__ignoreMap":44},[49,109060,109061,109063,109065,109067,109069,109071,109073,109075,109077,109079,109081],{"class":51,"line":52},[49,109062,107633],{"class":55},[49,109064,60],{"class":59},[49,109066,107937],{"class":55},[49,109068,25072],{"class":126},[49,109070,60],{"class":59},[49,109072,42431],{"class":66},[49,109074,12525],{"class":55},[49,109076,25068],{"class":126},[49,109078,60],{"class":59},[49,109080,107952],{"class":66},[49,109082,81],{"class":55},[14,109084,109085,109086,101081,109088,109090],{},"创建离屏渲染器。",[46,109087,25072],{},[46,109089,25068],{}," 决定输出图片大小。",[39,109092,109093],{"className":41,"code":101739,"language":43,"meta":44,"style":44},[46,109094,109095,109111],{"__ignoreMap":44},[49,109096,109097,109099,109101,109103,109105,109107,109109],{"class":51,"line":52},[49,109098,3117],{"class":59},[49,109100,101564],{"class":55},[49,109102,26134],{"class":59},[49,109104,32532],{"class":66},[49,109106,228],{"class":55},[49,109108,533],{"class":66},[49,109110,30875],{"class":55},[49,109112,109113],{"class":51,"line":84},[49,109114,101762],{"class":55},[14,109116,109117],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[39,109119,109121],{"className":41,"code":109120,"language":43,"meta":44,"style":44},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[46,109122,109123],{"__ignoreMap":44},[49,109124,109125,109128,109130,109132,109134],{"class":51,"line":52},[49,109126,109127],{"class":55},"renderer.update_scene(data, ",[49,109129,108578],{"class":126},[49,109131,60],{"class":59},[49,109133,108583],{"class":328},[49,109135,81],{"class":55},[14,109137,109138,109139,109141,109142,109145],{},"告诉 renderer：用当前 ",[46,109140,33490],{}," 的状态更新画面，并使用名为 ",[46,109143,109144],{},"fixed_camera"," 的相机视角。",[39,109147,109148],{"className":41,"code":108043,"language":43,"meta":44,"style":44},[46,109149,109150],{"__ignoreMap":44},[49,109151,109152,109154,109156],{"class":51,"line":52},[49,109153,107643],{"class":55},[49,109155,60],{"class":59},[49,109157,107648],{"class":55},[14,109159,109160,109161,109164],{},"真正渲染出图像。",[46,109162,109163],{},"image"," 是一个 NumPy 数组，不是文件。",[39,109166,109168],{"className":41,"code":109167,"language":43,"meta":44,"style":44},"Image.fromarray(image).save(output_path)\n",[46,109169,109170],{"__ignoreMap":44},[49,109171,109172],{"class":51,"line":52},[49,109173,109167],{"class":55},[14,109175,109176,109177,28476],{},"把数组转换成图片，并保存到 ",[46,109178,109179],{},"render_output.png",[39,109181,109183],{"className":41,"code":109182,"language":43,"meta":44,"style":44},"renderer.close()\n",[46,109184,109185],{"__ignoreMap":44},[49,109186,109187],{"class":51,"line":52},[49,109188,109182],{"class":55},[14,109190,109191],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[166,109193,102379],{"id":102378},[14,109195,109196,109197,109199,109200,28476],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[46,109198,109179],{},"，并输出图像数组形状，例如 ",[46,109201,109202],{},"(480, 640, 3)",[14,109204,109205],{},"如果图片里看不到方块，先检查：",[178,109207,109208,109211,109214],{},[181,109209,109210],{},"方块是否掉到相机视野外。",[181,109212,109213],{},"camera 位置是否合理。",[181,109215,109216,109217,109220],{},"是否在 ",[46,109218,109219],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[166,109222,102411],{"id":102410},[14,109224,109225],{},"运行 viewer:",[39,109227,109229],{"className":23912,"code":109228,"language":23914,"meta":44,"style":44},"python ch5_viewer.py\n",[46,109230,109231],{"__ignoreMap":44},[49,109232,109233,109235],{"class":51,"line":52},[49,109234,43],{"class":2055},[49,109236,108359],{"class":328},[14,109238,109239],{},"运行 renderer:",[39,109241,109243],{"className":23912,"code":109242,"language":23914,"meta":44,"style":44},"python ch5_renderer.py\n",[46,109244,109245],{"__ignoreMap":44},[49,109246,109247,109249],{"class":51,"line":52},[49,109248,43],{"class":2055},[49,109250,108688],{"class":328},[14,109252,109253],{},"如果在服务器上运行:",[39,109255,109257],{"className":23912,"code":109256,"language":23914,"meta":44,"style":44},"MUJOCO_GL=egl python ch5_renderer.py\n",[46,109258,109259],{"__ignoreMap":44},[49,109260,109261,109263,109265,109267,109270],{"class":51,"line":52},[49,109262,107877],{"class":55},[49,109264,60],{"class":59},[49,109266,107867],{"class":328},[49,109268,109269],{"class":2055}," python",[49,109271,108688],{"class":328},[14,109273,107845],{},[39,109275,109277],{"className":23912,"code":109276,"language":23914,"meta":44,"style":44},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[46,109278,109279],{"__ignoreMap":44},[49,109280,109281,109283,109285,109287,109289],{"class":51,"line":52},[49,109282,107877],{"class":55},[49,109284,60],{"class":59},[49,109286,107871],{"class":328},[49,109288,109269],{"class":2055},[49,109290,108688],{"class":328},[14,109292,109293],{},"再做几个练习：",[178,109295,109296,109303,109306,109312],{},[181,109297,109298,109299,109302],{},"把 renderer 分辨率改成 ",[46,109300,109301],{},"height=240, width=320","，观察输出 shape。",[181,109304,109305],{},"把方块颜色改成蓝色，重新保存图片。",[181,109307,109308,109309,109311],{},"把相机 ",[46,109310,104209],{}," 改远一点，观察画面中物体是否变小。",[181,109313,109314,109315,102477,109318,109321],{},"把 viewer 示例中的 ",[46,109316,109317],{},"data.time \u003C 5.0",[46,109319,109320],{},"data.time \u003C 20.0","，观察更长时间。",[166,109323,102516],{"id":102515},[195,109325,109327],{"id":109326},"viewer-窗口打不开","viewer 窗口打不开",[14,109329,109330],{},"安装:",[39,109332,109334],{"className":23912,"code":109333,"language":23914,"meta":44,"style":44},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[46,109335,109336],{"__ignoreMap":44},[49,109337,109338,109340,109342,109344,109346,109348,109350,109352,109354,109356,109358],{"class":51,"line":52},[49,109339,24667],{"class":2055},[49,109341,26406],{"class":328},[49,109343,23924],{"class":328},[49,109345,26491],{"class":66},[49,109347,102569],{"class":328},[49,109349,100897],{"class":328},[49,109351,102574],{"class":328},[49,109353,100910],{"class":328},[49,109355,100916],{"class":328},[49,109357,100907],{"class":328},[49,109359,109360],{"class":328}," libXinerama\n",[195,109362,109364],{"id":109363},"glfwerror",[46,109365,109366],{},"GLFWError",[14,109368,109369],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[195,109371,109373],{"id":109372},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109375,109376,109377,82628,109379,109381],{},"尝试 ",[46,109378,101100],{},[46,109380,101103],{},"。可能存在版本差异。",[195,109383,109384],{"id":109384},"保存图片是黑的",[14,109386,102638],{},[178,109388,109389,109392,109395,109405],{},[181,109390,109391],{},"XML 里是否有 light。",[181,109393,109394],{},"相机是否对着模型。",[181,109396,109397,109398,109401,109402,28476],{},"是否先 ",[46,109399,109400],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[46,109403,109404],{},"renderer.render()",[181,109406,109407],{},"物体是否已经掉出视野。",[195,109409,109410],{"id":109410},"远程服务器没有显示器",[14,109412,109413],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[39,109415,109416],{"className":23912,"code":109256,"language":23914,"meta":44,"style":44},[46,109417,109418],{"__ignoreMap":44},[49,109419,109420,109422,109424,109426,109428],{"class":51,"line":52},[49,109421,107877],{"class":55},[49,109423,60],{"class":59},[49,109425,107867],{"class":328},[49,109427,109269],{"class":2055},[49,109429,108688],{"class":328},[14,109431,109432],{},"如果 EGL 不可用，再尝试：",[39,109434,109435],{"className":23912,"code":109276,"language":23914,"meta":44,"style":44},[46,109436,109437],{"__ignoreMap":44},[49,109438,109439,109441,109443,109445,109447],{"class":51,"line":52},[49,109440,107877],{"class":55},[49,109442,60],{"class":59},[49,109444,107871],{"class":328},[49,109446,109269],{"class":2055},[49,109448,108688],{"class":328},[166,109450,102670],{"id":102669},[14,109452,109453],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[178,109455,109456,109459,109462],{},[181,109457,109458],{},"先用 viewer 看模型和控制是否正常。",[181,109460,109461],{},"再用 renderer 保存图片或构造视觉观测。",[181,109463,109464],{},"最后把状态、动作、图像、奖励组织成训练数据。",[143,109466,109467],{},"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":44,"searchDepth":84,"depth":84,"links":109469},[109470,109471,109472,109477,109482,109483,109484,109491],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":109473},[109474,109475,109476],{"id":107974,"depth":109,"text":107975},{"id":108004,"depth":109,"text":108005},{"id":108039,"depth":109,"text":108040},{"id":101315,"depth":84,"text":101316,"children":109478},[109479,109480,109481],{"id":101635,"depth":109,"text":101635},{"id":108784,"depth":109,"text":108785},{"id":108962,"depth":109,"text":108963},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":109485},[109486,109487,109488,109489,109490],{"id":109326,"depth":109,"text":109327},{"id":109363,"depth":109,"text":109366},{"id":109372,"depth":109,"text":109373},{"id":109384,"depth":109,"text":109384},{"id":109410,"depth":109,"text":109410},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107582,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109498,"title":109499,"body":109500,"description":44,"extension":149,"meta":111411,"navigation":151,"path":111412,"seo":111413,"stem":111414,"__hash__":111415},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109501,"toc":111387},[109502,109505,109507,109510,109512,109531,109534,109540,109543,109545,109547,109571,109573,109587,109589,109630,109632,109643,109645,109648,109654,109657,109691,109694,109726,109729,109761,109765,109768,109808,109811,109817,109820,109826,109830,109833,109839,109842,109846,109849,109889,109891,109904,109907,109909,110491,110493,110505,110508,110519,110521,110524,110543,110555,110558,110579,110582,110585,110628,110631,110634,110654,110661,110663,110681,110696,110699,110705,110708,110714,110731,110738,110769,110780,110814,110825,110842,110851,110859,110864,110878,110881,110902,110908,110922,110927,110957,110967,110992,111000,111023,111026,111042,111045,111053,111059,111081,111094,111115,111124,111163,111174,111176,111179,111185,111188,111191,111197,111200,111220,111223,111225,111264,111266,111269,111277,111280,111283,111310,111313,111323,111329,111332,111338,111340,111346,111350,111353,111355,111358,111382,111385],[10,109503,109499],{"id":109504},"_6控制任务cartpole",[166,109506,100710],{"id":100709},[14,109508,109509],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109511,104394],{},[178,109513,109514,109517,109519,109522,109525,109528],{},[181,109515,109516],{},"slide joint",[181,109518,106247],{},[181,109520,109521],{},"cart force actuator",[181,109523,109524],{},"状态观测",[181,109526,109527],{},"简单控制循环",[181,109529,109530],{},"reward 设计雏形",[14,109532,109533],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[39,109535,109538],{"className":109536,"code":109537,"language":5278,"meta":44},[5276],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[46,109539,109537],{"__ignoreMap":44},[14,109541,109542],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[166,109544,100833],{"id":100832},[14,109546,100836],{},[39,109548,109549],{"className":23912,"code":104451,"language":23914,"meta":44,"style":44},[46,109550,109551],{"__ignoreMap":44},[49,109552,109553,109555,109557,109559,109561,109563,109565,109567,109569],{"class":51,"line":52},[49,109554,24667],{"class":2055},[49,109556,26406],{"class":328},[49,109558,23924],{"class":328},[49,109560,26491],{"class":66},[49,109562,104466],{"class":328},[49,109564,100861],{"class":328},[49,109566,102564],{"class":328},[49,109568,100877],{"class":328},[49,109570,104475],{"class":328},[14,109572,102882],{},[39,109574,109575],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},[46,109576,109577],{"__ignoreMap":44},[49,109578,109579,109581,109583,109585],{"class":51,"line":52},[49,109580,23921],{"class":2055},[49,109582,23924],{"class":328},[49,109584,100993],{"class":328},[49,109586,100996],{"class":328},[14,109588,102899],{},[39,109590,109592],{"className":23912,"code":109591,"language":23914,"meta":44,"style":44},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[46,109593,109594,109611,109620],{"__ignoreMap":44},[49,109595,109596,109598,109600,109602,109605,109607,109609],{"class":51,"line":52},[49,109597,30421],{"class":2055},[49,109599,29267],{"class":328},[49,109601,25206],{"class":66},[49,109603,109604],{"class":328}," mujoco-cartpole",[49,109606,101038],{"class":328},[49,109608,101041],{"class":66},[49,109610,101044],{"class":66},[49,109612,109613,109615,109617],{"class":51,"line":84},[49,109614,30421],{"class":2055},[49,109616,101051],{"class":328},[49,109618,109619],{"class":328}," mujoco-cartpole\n",[49,109621,109622,109624,109626,109628],{"class":51,"line":109},[49,109623,23921],{"class":2055},[49,109625,23924],{"class":328},[49,109627,100993],{"class":328},[49,109629,100996],{"class":328},[14,109631,101067],{},[178,109633,109634,109637,109640],{},[181,109635,109636],{},"本章不依赖 Gymnasium。",[181,109638,109639],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[181,109641,109642],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[166,109644,101108],{"id":101107},[14,109646,109647],{},"Cartpole 的模型结构:",[39,109649,109652],{"className":109650,"code":109651,"language":5278,"meta":44},[5276],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[46,109653,109651],{"__ignoreMap":44},[14,109655,109656],{},"小车通过 slide joint 左右移动:",[39,109658,109660],{"className":53156,"code":109659,"language":53158,"meta":44,"style":44},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[46,109661,109662],{"__ignoreMap":44},[49,109663,109664,109666,109668,109670,109672,109675,109677,109679,109682,109684,109686,109689],{"class":51,"line":52},[49,109665,1129],{"class":55},[49,109667,103019],{"class":51389},[49,109669,15010],{"class":2055},[49,109671,60],{"class":55},[49,109673,109674],{"class":328},"\"cart_x\"",[49,109676,53913],{"class":2055},[49,109678,60],{"class":55},[49,109680,109681],{"class":328},"\"slide\"",[49,109683,106091],{"class":2055},[49,109685,60],{"class":55},[49,109687,109688],{"class":328},"\"1 0 0\"",[49,109690,101207],{"class":55},[14,109692,109693],{},"杆子通过 hinge joint 旋转:",[39,109695,109697],{"className":53156,"code":109696,"language":53158,"meta":44,"style":44},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,109698,109699],{"__ignoreMap":44},[49,109700,109701,109703,109705,109707,109709,109712,109714,109716,109718,109720,109722,109724],{"class":51,"line":52},[49,109702,1129],{"class":55},[49,109704,103019],{"class":51389},[49,109706,15010],{"class":2055},[49,109708,60],{"class":55},[49,109710,109711],{"class":328},"\"pole_hinge\"",[49,109713,53913],{"class":2055},[49,109715,60],{"class":55},[49,109717,106082],{"class":328},[49,109719,106091],{"class":2055},[49,109721,60],{"class":55},[49,109723,106096],{"class":328},[49,109725,101207],{"class":55},[14,109727,109728],{},"控制力作用在小车 slide joint 上:",[39,109730,109732],{"className":53156,"code":109731,"language":53158,"meta":44,"style":44},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[46,109733,109734],{"__ignoreMap":44},[49,109735,109736,109738,109740,109742,109744,109747,109749,109751,109753,109755,109757,109759],{"class":51,"line":52},[49,109737,1129],{"class":55},[49,109739,106137],{"class":51389},[49,109741,15010],{"class":2055},[49,109743,60],{"class":55},[49,109745,109746],{"class":328},"\"cart_motor\"",[49,109748,106147],{"class":2055},[49,109750,60],{"class":55},[49,109752,109674],{"class":328},[49,109754,106154],{"class":2055},[49,109756,60],{"class":55},[49,109758,54405],{"class":328},[49,109760,101207],{"class":55},[195,109762,109764],{"id":109763},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109766,109767],{},"这个简化模型有两个关节：",[361,109769,109770,109781],{},[364,109771,109772],{},[367,109773,109774,109776,109778],{},[370,109775,102822],{"align":23826},[370,109777,23827],{"align":23826},[370,109779,109780],{"align":23826},"对应状态",[408,109782,109783,109796],{},[367,109784,109785,109790,109793],{},[413,109786,109787],{"align":23826},[46,109788,109789],{},"cart_x",[413,109791,109792],{"align":23826},"slide",[413,109794,109795],{"align":23826},"小车 x 位置",[367,109797,109798,109803,109805],{},[413,109799,109800],{"align":23826},[46,109801,109802],{},"pole_hinge",[413,109804,105903],{"align":23826},[413,109806,109807],{"align":23826},"杆子角度",[14,109809,109810],{},"所以：",[39,109812,109815],{"className":109813,"code":109814,"language":5278,"meta":44},[5276],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[46,109816,109814],{"__ignoreMap":44},[14,109818,109819],{},"把它们拼起来就是观测：",[39,109821,109824],{"className":109822,"code":109823,"language":5278,"meta":44},[5276],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,109825,109823],{"__ignoreMap":44},[195,109827,109829],{"id":109828},"action-是什么","action 是什么",[14,109831,109832],{},"本章只有一个 actuator：",[39,109834,109837],{"className":109835,"code":109836,"language":5278,"meta":44},[5276],"data.ctrl[0] = action\n",[46,109838,109836],{"__ignoreMap":44},[14,109840,109841],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[195,109843,109845],{"id":109844},"reward-是什么","reward 是什么",[14,109847,109848],{},"奖励函数：",[39,109850,109852],{"className":41,"code":109851,"language":43,"meta":44,"style":44},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[46,109853,109854],{"__ignoreMap":44},[49,109855,109856,109858,109861,109863,109865,109867,109870,109872,109875,109877,109879,109881,109884,109886],{"class":51,"line":52},[49,109857,17136],{"class":59},[49,109859,109860],{"class":66}," float",[49,109862,228],{"class":55},[49,109864,102466],{"class":66},[49,109866,52360],{"class":59},[49,109868,109869],{"class":66}," 0.1",[49,109871,6608],{"class":59},[49,109873,109874],{"class":55}," cart_x ",[49,109876,674],{"class":59},[49,109878,109874],{"class":55},[49,109880,751],{"class":59},[49,109882,109883],{"class":55}," pole_angle ",[49,109885,674],{"class":59},[49,109887,109888],{"class":55}," pole_angle)\n",[14,109890,106289],{},[178,109892,109893,109898,109901],{},[181,109894,109895,109896,28476],{},"基础奖励是 ",[46,109897,102466],{},[181,109899,109900],{},"小车离中心越远，扣分越多。",[181,109902,109903],{},"杆子角度越大，扣分越多。",[14,109905,109906],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[166,109908,101316],{"id":101315},[39,109910,109912],{"className":41,"code":109911,"language":43,"meta":44,"style":44},"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",[46,109913,109914,109920,109930,109934,109938,109946,109951,109955,109959,109963,109968,109972,109977,109982,109987,109991,109996,110001,110006,110010,110014,110018,110022,110026,110031,110035,110039,110043,110047,110051,110061,110068,110072,110076,110090,110104,110117,110147,110151,110155,110167,110179,110187,110191,110204,110208,110212,110221,110225,110241,110251,110264,110277,110281,110304,110322,110326,110338,110342,110346,110356,110366,110370,110386,110427,110431,110451,110467,110471,110475,110487],{"__ignoreMap":44},[49,109915,109916,109918],{"class":51,"line":52},[49,109917,30481],{"class":59},[49,109919,101364],{"class":55},[49,109921,109922,109924,109926,109928],{"class":51,"line":84},[49,109923,30481],{"class":59},[49,109925,31469],{"class":55},[49,109927,31472],{"class":59},[49,109929,31475],{"class":55},[49,109931,109932],{"class":51,"line":109},[49,109933,2492],{"emptyLinePlaceholder":151},[49,109935,109936],{"class":51,"line":120},[49,109937,2492],{"emptyLinePlaceholder":151},[49,109939,109940,109942,109944],{"class":51,"line":135},[49,109941,101377],{"class":66},[49,109943,13654],{"class":59},[49,109945,101382],{"class":328},[49,109947,109948],{"class":51,"line":1306},[49,109949,109950],{"class":328},"\u003Cmujoco model=\"cartpole\">\n",[49,109952,109953],{"class":51,"line":1312},[49,109954,101392],{"class":328},[49,109956,109957],{"class":51,"line":1403},[49,109958,2492],{"emptyLinePlaceholder":151},[49,109960,109961],{"class":51,"line":1409},[49,109962,101401],{"class":328},[49,109964,109965],{"class":51,"line":1421},[49,109966,109967],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,109969,109970],{"class":51,"line":1704},[49,109971,2492],{"emptyLinePlaceholder":151},[49,109973,109974],{"class":51,"line":1709},[49,109975,109976],{"class":328},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[49,109978,109979],{"class":51,"line":1715},[49,109980,109981],{"class":328},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[49,109983,109984],{"class":51,"line":1720},[49,109985,109986],{"class":328},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[49,109988,109989],{"class":51,"line":1734},[49,109990,2492],{"emptyLinePlaceholder":151},[49,109992,109993],{"class":51,"line":1739},[49,109994,109995],{"class":328},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[49,109997,109998],{"class":51,"line":1745},[49,109999,110000],{"class":328},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[49,110002,110003],{"class":51,"line":1766},[49,110004,110005],{"class":328},"        \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",[49,110007,110008],{"class":51,"line":1771},[49,110009,106501],{"class":328},[49,110011,110012],{"class":51,"line":1785},[49,110013,101430],{"class":328},[49,110015,110016],{"class":51,"line":1790},[49,110017,101435],{"class":328},[49,110019,110020],{"class":51,"line":1819},[49,110021,2492],{"emptyLinePlaceholder":151},[49,110023,110024],{"class":51,"line":1824},[49,110025,106518],{"class":328},[49,110027,110028],{"class":51,"line":1841},[49,110029,110030],{"class":328},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,110032,110033],{"class":51,"line":1846},[49,110034,106528],{"class":328},[49,110036,110037],{"class":51,"line":1851},[49,110038,101440],{"class":328},[49,110040,110041],{"class":51,"line":1856},[49,110042,95761],{"class":328},[49,110044,110045],{"class":51,"line":1870},[49,110046,2492],{"emptyLinePlaceholder":151},[49,110048,110049],{"class":51,"line":1875},[49,110050,2492],{"emptyLinePlaceholder":151},[49,110052,110053,110055,110058],{"class":51,"line":2669},[49,110054,32036],{"class":59},[49,110056,110057],{"class":2055}," get_observation",[49,110059,110060],{"class":55},"(data: mujoco.MjData) -> np.ndarray:\n",[49,110062,110063,110065],{"class":51,"line":2683},[49,110064,4182],{"class":59},[49,110066,110067],{"class":55}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[49,110069,110070],{"class":51,"line":2691},[49,110071,2492],{"emptyLinePlaceholder":151},[49,110073,110074],{"class":51,"line":2696},[49,110075,2492],{"emptyLinePlaceholder":151},[49,110077,110078,110080,110083,110086,110088],{"class":51,"line":2702},[49,110079,32036],{"class":59},[49,110081,110082],{"class":2055}," compute_reward",[49,110084,110085],{"class":55},"(obs: np.ndarray) -> ",[49,110087,266],{"class":66},[49,110089,3831],{"class":55},[49,110091,110092,110095,110097,110100,110102],{"class":51,"line":2708},[49,110093,110094],{"class":55},"    cart_x ",[49,110096,60],{"class":59},[49,110098,110099],{"class":55}," obs[",[49,110101,415],{"class":66},[49,110103,33335],{"class":55},[49,110105,110106,110109,110111,110113,110115],{"class":51,"line":2713},[49,110107,110108],{"class":55},"    pole_angle ",[49,110110,60],{"class":59},[49,110112,110099],{"class":55},[49,110114,441],{"class":66},[49,110116,33335],{"class":55},[49,110118,110119,110121,110123,110125,110127,110129,110131,110133,110135,110137,110139,110141,110143,110145],{"class":51,"line":8038},[49,110120,4182],{"class":59},[49,110122,109860],{"class":66},[49,110124,228],{"class":55},[49,110126,102466],{"class":66},[49,110128,52360],{"class":59},[49,110130,109869],{"class":66},[49,110132,6608],{"class":59},[49,110134,109874],{"class":55},[49,110136,674],{"class":59},[49,110138,109874],{"class":55},[49,110140,751],{"class":59},[49,110142,109883],{"class":55},[49,110144,674],{"class":59},[49,110146,109888],{"class":55},[49,110148,110149],{"class":51,"line":8062},[49,110150,2492],{"emptyLinePlaceholder":151},[49,110152,110153],{"class":51,"line":8067},[49,110154,2492],{"emptyLinePlaceholder":151},[49,110156,110157,110159,110161,110163,110165],{"class":51,"line":8073},[49,110158,32036],{"class":59},[49,110160,2065],{"class":2055},[49,110162,101461],{"class":55},[49,110164,95749],{"class":66},[49,110166,3831],{"class":55},[49,110168,110169,110171,110173,110175,110177],{"class":51,"line":8100},[49,110170,101470],{"class":55},[49,110172,60],{"class":59},[49,110174,101475],{"class":55},[49,110176,101377],{"class":66},[49,110178,81],{"class":55},[49,110180,110181,110183,110185],{"class":51,"line":8105},[49,110182,101484],{"class":55},[49,110184,60],{"class":59},[49,110186,101489],{"class":55},[49,110188,110189],{"class":51,"line":8111},[49,110190,2492],{"emptyLinePlaceholder":151},[49,110192,110193,110195,110197,110199,110201],{"class":51,"line":8123},[49,110194,105132],{"class":55},[49,110196,441],{"class":66},[49,110198,4535],{"class":55},[49,110200,60],{"class":59},[49,110202,110203],{"class":66}," 0.1\n",[49,110205,110206],{"class":51,"line":8135},[49,110207,105145],{"class":55},[49,110209,110210],{"class":51,"line":8147},[49,110211,2492],{"emptyLinePlaceholder":151},[49,110213,110214,110217,110219],{"class":51,"line":9806},[49,110215,110216],{"class":55},"    total_reward ",[49,110218,60],{"class":59},[49,110220,104824],{"class":66},[49,110222,110223],{"class":51,"line":9831},[49,110224,2492],{"emptyLinePlaceholder":151},[49,110226,110227,110229,110231,110233,110235,110237,110239],{"class":51,"line":9854},[49,110228,3293],{"class":59},[49,110230,31705],{"class":55},[49,110232,26134],{"class":59},[49,110234,32532],{"class":66},[49,110236,228],{"class":55},[49,110238,6500],{"class":66},[49,110240,30875],{"class":55},[49,110242,110243,110246,110248],{"class":51,"line":9878},[49,110244,110245],{"class":55},"        obs ",[49,110247,60],{"class":59},[49,110249,110250],{"class":55}," get_observation(data)\n",[49,110252,110253,110256,110258,110260,110262],{"class":51,"line":9883},[49,110254,110255],{"class":55},"        pole_angle ",[49,110257,60],{"class":59},[49,110259,110099],{"class":55},[49,110261,441],{"class":66},[49,110263,33335],{"class":55},[49,110265,110266,110269,110271,110273,110275],{"class":51,"line":9888},[49,110267,110268],{"class":55},"        pole_angular_velocity ",[49,110270,60],{"class":59},[49,110272,110099],{"class":55},[49,110274,73],{"class":66},[49,110276,33335],{"class":55},[49,110278,110279],{"class":51,"line":9893},[49,110280,2492],{"emptyLinePlaceholder":151},[49,110282,110283,110286,110288,110291,110293,110295,110297,110299,110301],{"class":51,"line":9902},[49,110284,110285],{"class":55},"        action ",[49,110287,60],{"class":59},[49,110289,110290],{"class":66}," 2.0",[49,110292,6608],{"class":59},[49,110294,109883],{"class":55},[49,110296,700],{"class":59},[49,110298,61956],{"class":66},[49,110300,6608],{"class":59},[49,110302,110303],{"class":55}," pole_angular_velocity\n",[49,110305,110306,110308,110310,110312,110314,110316,110318,110320],{"class":51,"line":9907},[49,110307,110285],{"class":55},[49,110309,60],{"class":59},[49,110311,107510],{"class":55},[49,110313,751],{"class":59},[49,110315,102466],{"class":66},[49,110317,12525],{"class":55},[49,110319,102466],{"class":66},[49,110321,81],{"class":55},[49,110323,110324],{"class":51,"line":9913},[49,110325,2492],{"emptyLinePlaceholder":151},[49,110327,110328,110330,110332,110334,110336],{"class":51,"line":9934},[49,110329,106680],{"class":55},[49,110331,415],{"class":66},[49,110333,4535],{"class":55},[49,110335,60],{"class":59},[49,110337,107533],{"class":55},[49,110339,110340],{"class":51,"line":9940},[49,110341,101579],{"class":55},[49,110343,110344],{"class":51,"line":9954},[49,110345,2492],{"emptyLinePlaceholder":151},[49,110347,110348,110351,110353],{"class":51,"line":9960},[49,110349,110350],{"class":55},"        reward ",[49,110352,60],{"class":59},[49,110354,110355],{"class":55}," compute_reward(get_observation(data))\n",[49,110357,110358,110361,110363],{"class":51,"line":9987},[49,110359,110360],{"class":55},"        total_reward ",[49,110362,9567],{"class":59},[49,110364,110365],{"class":55}," reward\n",[49,110367,110368],{"class":51,"line":9996},[49,110369,2492],{"emptyLinePlaceholder":151},[49,110371,110372,110374,110376,110378,110380,110382,110384],{"class":51,"line":10002},[49,110373,2589],{"class":59},[49,110375,31705],{"class":55},[49,110377,550],{"class":59},[49,110379,5844],{"class":66},[49,110381,101622],{"class":59},[49,110383,4185],{"class":66},[49,110385,3831],{"class":55},[49,110387,110388,110390,110392,110395,110398,110401,110404,110406,110409,110412,110414,110416,110418,110420,110423,110425],{"class":51,"line":10010},[49,110389,34739],{"class":66},[49,110391,228],{"class":55},[49,110393,110394],{"class":328},"\"step:\"",[49,110396,110397],{"class":55},", step, ",[49,110399,110400],{"class":328},"\"obs:\"",[49,110402,110403],{"class":55},", np.round(obs, ",[49,110405,73],{"class":66},[49,110407,110408],{"class":55},"), ",[49,110410,110411],{"class":328},"\"action:\"",[49,110413,12525],{"class":55},[49,110415,32107],{"class":66},[49,110417,228],{"class":55},[49,110419,266],{"class":66},[49,110421,110422],{"class":55},"(action), ",[49,110424,73],{"class":66},[49,110426,30586],{"class":55},[49,110428,110429],{"class":51,"line":10015},[49,110430,2492],{"emptyLinePlaceholder":151},[49,110432,110433,110435,110437,110440,110442,110444,110447,110449],{"class":51,"line":16694},[49,110434,31388],{"class":66},[49,110436,228],{"class":55},[49,110438,110439],{"class":328},"\"total_reward:\"",[49,110441,12525],{"class":55},[49,110443,32107],{"class":66},[49,110445,110446],{"class":55},"(total_reward, ",[49,110448,73],{"class":66},[49,110450,30586],{"class":55},[49,110452,110453,110455,110457,110460,110463,110465],{"class":51,"line":16700},[49,110454,31388],{"class":66},[49,110456,228],{"class":55},[49,110458,110459],{"class":328},"\"final obs:\"",[49,110461,110462],{"class":55},", np.round(get_observation(data), ",[49,110464,73],{"class":66},[49,110466,30586],{"class":55},[49,110468,110469],{"class":51,"line":16723},[49,110470,2492],{"emptyLinePlaceholder":151},[49,110472,110473],{"class":51,"line":16729},[49,110474,2492],{"emptyLinePlaceholder":151},[49,110476,110477,110479,110481,110483,110485],{"class":51,"line":16752},[49,110478,1623],{"class":59},[49,110480,31309],{"class":66},[49,110482,101622],{"class":59},[49,110484,101625],{"class":328},[49,110486,3831],{"class":55},[49,110488,110489],{"class":51,"line":16766},[49,110490,101632],{"class":55},[14,110492,103633],{},[39,110494,110496],{"className":23912,"code":110495,"language":23914,"meta":44,"style":44},"touch ch6_cartpole.py\n",[46,110497,110498],{"__ignoreMap":44},[49,110499,110500,110502],{"class":51,"line":52},[49,110501,101346],{"class":2055},[49,110503,110504],{"class":328}," ch6_cartpole.py\n",[14,110506,110507],{},"运行：",[39,110509,110511],{"className":23912,"code":110510,"language":23914,"meta":44,"style":44},"python ch6_cartpole.py\n",[46,110512,110513],{"__ignoreMap":44},[49,110514,110515,110517],{"class":51,"line":52},[49,110516,43],{"class":2055},[49,110518,110504],{"class":328},[195,110520,101635],{"id":101635},[14,110522,110523],{},"构造观测：",[39,110525,110527],{"className":41,"code":110526,"language":43,"meta":44,"style":44},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[46,110528,110529,110537],{"__ignoreMap":44},[49,110530,110531,110533,110535],{"class":51,"line":52},[49,110532,32036],{"class":59},[49,110534,110057],{"class":2055},[49,110536,110060],{"class":55},[49,110538,110539,110541],{"class":51,"line":84},[49,110540,4182],{"class":59},[49,110542,110067],{"class":55},[14,110544,110545,110548,110549,110551,110552,110554],{},[46,110546,110547],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[46,110550,104093],{}," 2 维，",[46,110553,104423],{}," 2 维，所以 obs 是 4 维。",[14,110556,110557],{},"设置初始角度：",[39,110559,110561],{"className":41,"code":110560,"language":43,"meta":44,"style":44},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[46,110562,110563,110575],{"__ignoreMap":44},[49,110564,110565,110567,110569,110571,110573],{"class":51,"line":52},[49,110566,104762],{"class":55},[49,110568,441],{"class":66},[49,110570,4535],{"class":55},[49,110572,60],{"class":59},[49,110574,110203],{"class":66},[49,110576,110577],{"class":51,"line":84},[49,110578,104606],{"class":55},[14,110580,110581],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110583,110584],{},"简单反馈控制：",[39,110586,110588],{"className":41,"code":110587,"language":43,"meta":44,"style":44},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[46,110589,110590,110610],{"__ignoreMap":44},[49,110591,110592,110594,110596,110598,110600,110602,110604,110606,110608],{"class":51,"line":52},[49,110593,107505],{"class":55},[49,110595,60],{"class":59},[49,110597,110290],{"class":66},[49,110599,6608],{"class":59},[49,110601,109883],{"class":55},[49,110603,700],{"class":59},[49,110605,61956],{"class":66},[49,110607,6608],{"class":59},[49,110609,110303],{"class":55},[49,110611,110612,110614,110616,110618,110620,110622,110624,110626],{"class":51,"line":84},[49,110613,107505],{"class":55},[49,110615,60],{"class":59},[49,110617,107510],{"class":55},[49,110619,751],{"class":59},[49,110621,102466],{"class":66},[49,110623,12525],{"class":55},[49,110625,102466],{"class":66},[49,110627,81],{"class":55},[14,110629,110630],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110632,110633],{},"限制动作：",[39,110635,110637],{"className":41,"code":110636,"language":43,"meta":44,"style":44},"np.clip(action, -1.0, 1.0)\n",[46,110638,110639],{"__ignoreMap":44},[49,110640,110641,110644,110646,110648,110650,110652],{"class":51,"line":52},[49,110642,110643],{"class":55},"np.clip(action, ",[49,110645,751],{"class":59},[49,110647,102466],{"class":66},[49,110649,12525],{"class":55},[49,110651,102466],{"class":66},[49,110653,81],{"class":55},[14,110655,110656,110657,110660],{},"因为 XML 里 ",[46,110658,110659],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[195,110662,101771],{"id":101771},[39,110664,110665],{"className":41,"code":110526,"language":43,"meta":44,"style":44},[46,110666,110667,110675],{"__ignoreMap":44},[49,110668,110669,110671,110673],{"class":51,"line":52},[49,110670,32036],{"class":59},[49,110672,110057],{"class":2055},[49,110674,110060],{"class":55},[49,110676,110677,110679],{"class":51,"line":84},[49,110678,4182],{"class":59},[49,110680,110067],{"class":55},[14,110682,110683,110684,110687,110688,110691,110692,110695],{},"这段定义了一个函数，用来获取当前观测。",[46,110685,110686],{},"data.qpos.copy()"," 是位置数组副本，",[46,110689,110690],{},"data.qvel.copy()"," 是速度数组副本。",[46,110693,110694],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110697,110698],{},"在本章模型里：",[39,110700,110703],{"className":110701,"code":110702,"language":5278,"meta":44},[5276],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[46,110704,110702],{"__ignoreMap":44},[14,110706,110707],{},"所以返回的 obs 是：",[39,110709,110712],{"className":110710,"code":110711,"language":5278,"meta":44},[5276],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[46,110713,110711],{"__ignoreMap":44},[39,110715,110717],{"className":41,"code":110716,"language":43,"meta":44,"style":44},"def compute_reward(obs: np.ndarray) -> float:\n",[46,110718,110719],{"__ignoreMap":44},[49,110720,110721,110723,110725,110727,110729],{"class":51,"line":52},[49,110722,32036],{"class":59},[49,110724,110082],{"class":2055},[49,110726,110085],{"class":55},[49,110728,266],{"class":66},[49,110730,3831],{"class":55},[14,110732,110733,110734,110737],{},"这行定义奖励函数。输入是观测 ",[46,110735,110736],{},"obs","，输出是一个浮点数奖励。",[39,110739,110741],{"className":41,"code":110740,"language":43,"meta":44,"style":44},"cart_x = obs[0]\npole_angle = obs[1]\n",[46,110742,110743,110756],{"__ignoreMap":44},[49,110744,110745,110748,110750,110752,110754],{"class":51,"line":52},[49,110746,110747],{"class":55},"cart_x ",[49,110749,60],{"class":59},[49,110751,110099],{"class":55},[49,110753,415],{"class":66},[49,110755,33335],{"class":55},[49,110757,110758,110761,110763,110765,110767],{"class":51,"line":84},[49,110759,110760],{"class":55},"pole_angle ",[49,110762,60],{"class":59},[49,110764,110099],{"class":55},[49,110766,441],{"class":66},[49,110768,33335],{"class":55},[14,110770,110771,110772,110775,110776,110779],{},"数组索引从 0 开始。",[46,110773,110774],{},"obs[0]"," 是第一个元素，也就是小车位置。",[46,110777,110778],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[39,110781,110782],{"className":41,"code":109851,"language":43,"meta":44,"style":44},[46,110783,110784],{"__ignoreMap":44},[49,110785,110786,110788,110790,110792,110794,110796,110798,110800,110802,110804,110806,110808,110810,110812],{"class":51,"line":52},[49,110787,17136],{"class":59},[49,110789,109860],{"class":66},[49,110791,228],{"class":55},[49,110793,102466],{"class":66},[49,110795,52360],{"class":59},[49,110797,109869],{"class":66},[49,110799,6608],{"class":59},[49,110801,109874],{"class":55},[49,110803,674],{"class":59},[49,110805,109874],{"class":55},[49,110807,751],{"class":59},[49,110809,109883],{"class":55},[49,110811,674],{"class":59},[49,110813,109888],{"class":55},[14,110815,110816,110817,110820,110821,110824],{},"这行计算奖励。",[46,110818,110819],{},"cart_x * cart_x"," 是小车位置的平方，",[46,110822,110823],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[39,110826,110828],{"className":41,"code":110827,"language":43,"meta":44,"style":44},"data.qpos[1] = 0.1\n",[46,110829,110830],{"__ignoreMap":44},[49,110831,110832,110834,110836,110838,110840],{"class":51,"line":52},[49,110833,104762],{"class":55},[49,110835,441],{"class":66},[49,110837,4535],{"class":55},[49,110839,60],{"class":59},[49,110841,110203],{"class":66},[14,110843,110844,110845,110847,110848,110850],{},"手动设置杆子的初始角度。因为 ",[46,110846,105519],{}," 是小车位置，",[46,110849,105522],{}," 是杆子角度，所以这里改的是杆子。",[39,110852,110853],{"className":41,"code":104606,"language":43,"meta":44,"style":44},[46,110854,110855],{"__ignoreMap":44},[49,110856,110857],{"class":51,"line":52},[49,110858,104606],{"class":55},[14,110860,105565,110861,110863],{},[46,110862,104093],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[39,110865,110867],{"className":41,"code":110866,"language":43,"meta":44,"style":44},"total_reward = 0.0\n",[46,110868,110869],{"__ignoreMap":44},[49,110870,110871,110874,110876],{"class":51,"line":52},[49,110872,110873],{"class":55},"total_reward ",[49,110875,60],{"class":59},[49,110877,104824],{"class":66},[14,110879,110880],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[39,110882,110884],{"className":41,"code":110883,"language":43,"meta":44,"style":44},"for step in range(1000):\n",[46,110885,110886],{"__ignoreMap":44},[49,110887,110888,110890,110892,110894,110896,110898,110900],{"class":51,"line":52},[49,110889,3117],{"class":59},[49,110891,31705],{"class":55},[49,110893,26134],{"class":59},[49,110895,32532],{"class":66},[49,110897,228],{"class":55},[49,110899,6500],{"class":66},[49,110901,30875],{"class":55},[14,110903,110904,110905,110907],{},"循环 1000 步。",[46,110906,107197],{}," 是当前步数，从 0 到 999。",[39,110909,110911],{"className":41,"code":110910,"language":43,"meta":44,"style":44},"obs = get_observation(data)\n",[46,110912,110913],{"__ignoreMap":44},[49,110914,110915,110918,110920],{"class":51,"line":52},[49,110916,110917],{"class":55},"obs ",[49,110919,60],{"class":59},[49,110921,110250],{"class":55},[14,110923,110924,110925,28476],{},"读取当前状态，保存到 ",[46,110926,110736],{},[39,110928,110930],{"className":41,"code":110929,"language":43,"meta":44,"style":44},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[46,110931,110932,110944],{"__ignoreMap":44},[49,110933,110934,110936,110938,110940,110942],{"class":51,"line":52},[49,110935,110760],{"class":55},[49,110937,60],{"class":59},[49,110939,110099],{"class":55},[49,110941,441],{"class":66},[49,110943,33335],{"class":55},[49,110945,110946,110949,110951,110953,110955],{"class":51,"line":84},[49,110947,110948],{"class":55},"pole_angular_velocity ",[49,110950,60],{"class":59},[49,110952,110099],{"class":55},[49,110954,73],{"class":66},[49,110956,33335],{"class":55},[14,110958,110959,110960,110963,110964,28476],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[46,110961,110962],{},"obs[3]","？因为 obs 的顺序是 ",[46,110965,110966],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[39,110968,110970],{"className":41,"code":110969,"language":43,"meta":44,"style":44},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[46,110971,110972],{"__ignoreMap":44},[49,110973,110974,110976,110978,110980,110982,110984,110986,110988,110990],{"class":51,"line":52},[49,110975,107505],{"class":55},[49,110977,60],{"class":59},[49,110979,110290],{"class":66},[49,110981,6608],{"class":59},[49,110983,109883],{"class":55},[49,110985,700],{"class":59},[49,110987,61956],{"class":66},[49,110989,6608],{"class":59},[49,110991,110303],{"class":55},[14,110993,110994,110995,101081,110997,110999],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[46,110996,105323],{},[46,110998,35418],{}," 是人为设置的系数，不是固定公式。",[39,111001,111003],{"className":41,"code":111002,"language":43,"meta":44,"style":44},"action = np.clip(action, -1.0, 1.0)\n",[46,111004,111005],{"__ignoreMap":44},[49,111006,111007,111009,111011,111013,111015,111017,111019,111021],{"class":51,"line":52},[49,111008,107505],{"class":55},[49,111010,60],{"class":59},[49,111012,107510],{"class":55},[49,111014,751],{"class":59},[49,111016,102466],{"class":66},[49,111018,12525],{"class":55},[49,111020,102466],{"class":66},[49,111022,81],{"class":55},[14,111024,111025],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[39,111027,111028],{"className":41,"code":109836,"language":43,"meta":44,"style":44},[46,111029,111030],{"__ignoreMap":44},[49,111031,111032,111034,111036,111038,111040],{"class":51,"line":52},[49,111033,105934],{"class":55},[49,111035,415],{"class":66},[49,111037,4535],{"class":55},[49,111039,60],{"class":59},[49,111041,107533],{"class":55},[14,111043,111044],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[39,111046,111047],{"className":41,"code":104568,"language":43,"meta":44,"style":44},[46,111048,111049],{"__ignoreMap":44},[49,111050,111051],{"class":51,"line":52},[49,111052,104568],{"class":55},[14,111054,111055,111056,111058],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[46,111057,106189],{}," 计算小车和杆子的下一刻状态。",[39,111060,111062],{"className":41,"code":111061,"language":43,"meta":44,"style":44},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[46,111063,111064,111073],{"__ignoreMap":44},[49,111065,111066,111069,111071],{"class":51,"line":52},[49,111067,111068],{"class":55},"reward ",[49,111070,60],{"class":59},[49,111072,110355],{"class":55},[49,111074,111075,111077,111079],{"class":51,"line":84},[49,111076,110873],{"class":55},[49,111078,9567],{"class":59},[49,111080,110365],{"class":55},[14,111082,111083,111084,111086,111087,111090,111091,28476],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[46,111085,9567],{}," 是简写，",[46,111088,111089],{},"total_reward += reward"," 等价于 ",[46,111092,111093],{},"total_reward = total_reward + reward",[39,111095,111097],{"className":41,"code":111096,"language":43,"meta":44,"style":44},"if step % 100 == 0:\n",[46,111098,111099],{"__ignoreMap":44},[49,111100,111101,111103,111105,111107,111109,111111,111113],{"class":51,"line":52},[49,111102,1623],{"class":59},[49,111104,31705],{"class":55},[49,111106,550],{"class":59},[49,111108,5844],{"class":66},[49,111110,101622],{"class":59},[49,111112,4185],{"class":66},[49,111114,3831],{"class":55},[14,111116,111117,111119,111120,111123],{},[46,111118,550],{}," 是取余数。",[46,111121,111122],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[39,111125,111127],{"className":41,"code":111126,"language":43,"meta":44,"style":44},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[46,111128,111129],{"__ignoreMap":44},[49,111130,111131,111133,111135,111137,111139,111141,111143,111145,111147,111149,111151,111153,111155,111157,111159,111161],{"class":51,"line":52},[49,111132,30504],{"class":66},[49,111134,228],{"class":55},[49,111136,110394],{"class":328},[49,111138,110397],{"class":55},[49,111140,110400],{"class":328},[49,111142,110403],{"class":55},[49,111144,73],{"class":66},[49,111146,110408],{"class":55},[49,111148,110411],{"class":328},[49,111150,12525],{"class":55},[49,111152,32107],{"class":66},[49,111154,228],{"class":55},[49,111156,266],{"class":66},[49,111158,110422],{"class":55},[49,111160,73],{"class":66},[49,111162,30586],{"class":55},[14,111164,111165,111166,111169,111170,111173],{},"打印当前步数、观测和动作。",[46,111167,111168],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[46,111171,111172],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[166,111175,102379],{"id":102378},[14,111177,111178],{},"观测向量:",[39,111180,111183],{"className":111181,"code":111182,"language":5278,"meta":44},[5276],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,111184,111182],{"__ignoreMap":44},[14,111186,111187],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111189,111190],{},"每隔 100 步会打印一次：",[39,111192,111195],{"className":111193,"code":111194,"language":5278,"meta":44},[5276],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[46,111196,111194],{"__ignoreMap":44},[14,111198,111199],{},"重点观察：",[178,111201,111202,111208,111213],{},[181,111203,111204,111207],{},[46,111205,111206],{},"pole_angle"," 是否越来越大。",[181,111209,111210,111212],{},[46,111211,109789],{}," 是否跑得太远。",[181,111214,111215,111216,82628,111218,28476],{},"action 是否经常被 clip 到 ",[46,111217,103978],{},[46,111219,441],{},[14,111221,111222],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[166,111224,102411],{"id":102410},[178,111226,111227,111233,111236,111242,111252,111258,111261],{},[181,111228,111229,111230,28476],{},"把初始角度改为 ",[46,111231,111232],{},"data.qpos[1] = 0.3",[181,111234,111235],{},"重新运行，观察控制是否变差。",[181,111237,111238,111239,111241],{},"把 actuator ",[46,111240,107130],{}," 改小。",[181,111243,111244,111245,111248,111249,28476],{},"打印 ",[46,111246,111247],{},"model.nq, model.nv, model.nu","，应为 ",[46,111250,111251],{},"2 2 1",[181,111253,111254,111255,111257],{},"把 reward 里的 ",[46,111256,110823],{}," 系数改大，观察总奖励变化。",[181,111259,111260],{},"把控制器改成反号，观察杆子是否更容易倒。",[181,111262,111263],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[166,111265,102516],{"id":102515},[195,111267,111268],{"id":111268},"杆子方向和预期不一致",[14,111270,102459,111271,111273,111274,111276],{},[46,111272,106302],{}," 和 capsule 的 ",[46,111275,103239],{},"，必要时用 viewer 可视化确认。",[195,111278,111279],{"id":111279},"控制器越控越倒",[14,111281,111282],{},"说明反馈符号可能反了，尝试:",[39,111284,111286],{"className":41,"code":111285,"language":43,"meta":44,"style":44},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[46,111287,111288],{"__ignoreMap":44},[49,111289,111290,111292,111294,111296,111298,111300,111302,111304,111306,111308],{"class":51,"line":52},[49,111291,107505],{"class":55},[49,111293,60],{"class":59},[49,111295,52360],{"class":59},[49,111297,105323],{"class":66},[49,111299,6608],{"class":59},[49,111301,109883],{"class":55},[49,111303,751],{"class":59},[49,111305,61956],{"class":66},[49,111307,6608],{"class":59},[49,111309,110303],{"class":55},[195,111311,111312],{"id":111312},"小车飞走",[14,111314,111315,111316,111318,111319,111322],{},"降低 ",[46,111317,107130],{}," 或缩小 ",[46,111320,111321],{},"action"," 的 clip 范围。",[195,111324,111326,111328],{"id":111325},"obs3-为什么是杆子角速度",[46,111327,110962],{}," 为什么是杆子角速度",[14,111330,111331],{},"因为这个模型里：",[39,111333,111336],{"className":111334,"code":111335,"language":5278,"meta":44},[5276],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[46,111337,111335],{"__ignoreMap":44},[14,111339,109810],{},[39,111341,111344],{"className":111342,"code":111343,"language":5278,"meta":44},[5276],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[46,111345,111343],{"__ignoreMap":44},[195,111347,111349],{"id":111348},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111351,111352],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[166,111354,102670],{"id":102669},[14,111356,111357],{},"一个控制任务通常包含：",[178,111359,111360,111363,111371,111376,111379],{},[181,111361,111362],{},"模型：Cartpole 的 body、joint、actuator。",[181,111364,111365,111366,436,111368,111370],{},"观测：从 ",[46,111367,104093],{},[46,111369,104423],{}," 里取状态。",[181,111372,111373,111374,28476],{},"动作：写入 ",[46,111375,101139],{},[181,111377,111378],{},"奖励：根据任务目标打分。",[181,111380,111381],{},"循环：obs -> action -> step -> reward。",[14,111383,111384],{},"这就是后面 Gymnasium 环境的基本骨架。",[143,111386,104349],{},{"title":44,"searchDepth":84,"depth":84,"links":111388},[111389,111390,111391,111396,111400,111401,111402,111410],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":111392},[111393,111394,111395],{"id":109763,"depth":109,"text":109764},{"id":109828,"depth":109,"text":109829},{"id":109844,"depth":109,"text":109845},{"id":101315,"depth":84,"text":101316,"children":111397},[111398,111399],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":111403},[111404,111405,111406,111407,111409],{"id":111268,"depth":109,"text":111268},{"id":111279,"depth":109,"text":111279},{"id":111312,"depth":109,"text":111312},{"id":111325,"depth":109,"text":111408},"obs[3] 为什么是杆子角速度",{"id":111348,"depth":109,"text":111349},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109499,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111417,"title":111418,"body":111419,"description":44,"extension":149,"meta":113433,"navigation":151,"path":113434,"seo":113435,"stem":113436,"__hash__":113437},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111420,"toc":113409},[111421,111424,111426,111429,111431,111448,111451,111454,111460,111463,111465,111467,111491,111493,111507,111509,111550,111552,111570,111572,111575,111581,111584,111612,111616,111622,111647,111650,111681,111688,111691,111694,111700,111703,111709,111712,111718,111722,111725,111750,111753,111755,112515,112517,112529,112531,112542,112544,112547,112564,112567,112569,112580,112583,112585,112631,112634,112647,112650,112732,112735,112737,112753,112763,112776,112779,112818,112828,112839,112849,112862,112865,112894,112897,112907,112910,112916,112933,112944,112946,112952,112969,112980,113001,113004,113016,113019,113040,113043,113051,113059,113076,113079,113148,113155,113163,113166,113179,113186,113188,113191,113197,113200,113203,113209,113215,113217,113257,113259,113265,113274,113277,113279,113299,113302,113305,113311,113315,113317,113344,113347,113350,113377,113383,113386,113389,113391,113394,113397,113403,113406],[10,111422,111418],{"id":111423},"_7控制任务reacher-机械臂到达目标",[166,111425,100710],{"id":100709},[14,111427,111428],{},"本章搭建一个二维两关节 reacher 任务。",[14,111430,104394],{},[178,111432,111433,111436,111439,111442,111445],{},[181,111434,111435],{},"两个 hinge joint",[181,111437,111438],{},"两个 motor actuator",[181,111440,111441],{},"site 作为末端点和目标点",[181,111443,111444],{},"根据末端和目标距离设计 reward",[181,111446,111447],{},"构造机械臂任务的基本形式",[14,111449,111450],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111452,111453],{},"Reacher 任务可以理解为：",[39,111455,111458],{"className":111456,"code":111457,"language":5278,"meta":44},[5276],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[46,111459,111457],{"__ignoreMap":44},[14,111461,111462],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[166,111464,100833],{"id":100832},[14,111466,100836],{},[39,111468,111469],{"className":23912,"code":104451,"language":23914,"meta":44,"style":44},[46,111470,111471],{"__ignoreMap":44},[49,111472,111473,111475,111477,111479,111481,111483,111485,111487,111489],{"class":51,"line":52},[49,111474,24667],{"class":2055},[49,111476,26406],{"class":328},[49,111478,23924],{"class":328},[49,111480,26491],{"class":66},[49,111482,104466],{"class":328},[49,111484,100861],{"class":328},[49,111486,102564],{"class":328},[49,111488,100877],{"class":328},[49,111490,104475],{"class":328},[14,111492,102882],{},[39,111494,111495],{"className":23912,"code":100982,"language":23914,"meta":44,"style":44},[46,111496,111497],{"__ignoreMap":44},[49,111498,111499,111501,111503,111505],{"class":51,"line":52},[49,111500,23921],{"class":2055},[49,111502,23924],{"class":328},[49,111504,100993],{"class":328},[49,111506,100996],{"class":328},[14,111508,102899],{},[39,111510,111512],{"className":23912,"code":111511,"language":23914,"meta":44,"style":44},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[46,111513,111514,111531,111540],{"__ignoreMap":44},[49,111515,111516,111518,111520,111522,111525,111527,111529],{"class":51,"line":52},[49,111517,30421],{"class":2055},[49,111519,29267],{"class":328},[49,111521,25206],{"class":66},[49,111523,111524],{"class":328}," mujoco-reacher",[49,111526,101038],{"class":328},[49,111528,101041],{"class":66},[49,111530,101044],{"class":66},[49,111532,111533,111535,111537],{"class":51,"line":84},[49,111534,30421],{"class":2055},[49,111536,101051],{"class":328},[49,111538,111539],{"class":328}," mujoco-reacher\n",[49,111541,111542,111544,111546,111548],{"class":51,"line":109},[49,111543,23921],{"class":2055},[49,111545,23924],{"class":328},[49,111547,100993],{"class":328},[49,111549,100996],{"class":328},[14,111551,101067],{},[178,111553,111554,111557,111560],{},[181,111555,111556],{},"本章使用低维状态，不使用图像输入。",[181,111558,111559],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[181,111561,111562,111563,436,111565,436,111567,111569],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[46,111564,104093],{},[46,111566,104423],{},[46,111568,103743],{}," 的方法一致。",[166,111571,101108],{"id":101107},[14,111573,111574],{},"Reacher 任务核心:",[39,111576,111579],{"className":111577,"code":111578,"language":5278,"meta":44},[5276],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[46,111580,111578],{"__ignoreMap":44},[14,111582,111583],{},"读取 site 世界坐标:",[39,111585,111587],{"className":41,"code":111586,"language":43,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[46,111588,111589,111602],{"__ignoreMap":44},[49,111590,111591,111593,111595,111597,111600],{"class":51,"line":52},[49,111592,103697],{"class":55},[49,111594,60],{"class":59},[49,111596,103468],{"class":55},[49,111598,111599],{"class":328},"\"tip\"",[49,111601,81],{"class":55},[49,111603,111604,111607,111609],{"class":51,"line":84},[49,111605,111606],{"class":55},"tip_pos ",[49,111608,60],{"class":59},[49,111610,111611],{"class":55}," data.site_xpos[site_id]\n",[195,111613,111615],{"id":111614},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111617,111618,111619,111621],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[46,111620,104093],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[39,111623,111625],{"className":41,"code":111624,"language":43,"meta":44,"style":44},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[46,111626,111627,111637],{"__ignoreMap":44},[49,111628,111629,111632,111634],{"class":51,"line":52},[49,111630,111631],{"class":55},"tip ",[49,111633,60],{"class":59},[49,111635,111636],{"class":55}," data.site_xpos[tip_site_id]\n",[49,111638,111639,111642,111644],{"class":51,"line":84},[49,111640,111641],{"class":55},"target ",[49,111643,60],{"class":59},[49,111645,111646],{"class":55}," data.site_xpos[target_site_id]\n",[14,111648,111649],{},"这样 reward 就很容易写：",[39,111651,111653],{"className":41,"code":111652,"language":43,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[46,111654,111655,111670],{"__ignoreMap":44},[49,111656,111657,111660,111662,111665,111667],{"class":51,"line":52},[49,111658,111659],{"class":55},"dist ",[49,111661,60],{"class":59},[49,111663,111664],{"class":55}," np.linalg.norm(tip ",[49,111666,751],{"class":59},[49,111668,111669],{"class":55}," target)\n",[49,111671,111672,111674,111676,111678],{"class":51,"line":84},[49,111673,111068],{"class":55},[49,111675,60],{"class":59},[49,111677,52360],{"class":59},[49,111679,111680],{"class":55},"dist\n",[14,111682,111683,111684,111687],{},"距离越小，",[46,111685,111686],{},"-dist"," 越接近 0，奖励越高。",[195,111689,111690],{"id":111690},"两关节机械臂的状态",[14,111692,111693],{},"这个模型有两个 hinge joint：",[39,111695,111698],{"className":111696,"code":111697,"language":5278,"meta":44},[5276],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[46,111699,111697],{"__ignoreMap":44},[14,111701,111702],{},"再加上末端和目标位置：",[39,111704,111707],{"className":111705,"code":111706,"language":5278,"meta":44},[5276],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[46,111708,111706],{"__ignoreMap":44},[14,111710,111711],{},"总维度：",[39,111713,111716],{"className":111714,"code":111715,"language":5278,"meta":44},[5276],"2 + 2 + 3 + 3 = 10\n",[46,111717,111715],{"__ignoreMap":44},[195,111719,111721],{"id":111720},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111723,111724],{},"本章把重力设为：",[39,111726,111728],{"className":53156,"code":111727,"language":53158,"meta":44,"style":44},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[46,111729,111730],{"__ignoreMap":44},[49,111731,111732,111734,111736,111738,111740,111742,111744,111746,111748],{"class":51,"line":52},[49,111733,1129],{"class":55},[49,111735,69255],{"class":51389},[49,111737,101257],{"class":2055},[49,111739,60],{"class":55},[49,111741,101262],{"class":328},[49,111743,101265],{"class":2055},[49,111745,60],{"class":55},[49,111747,103834],{"class":328},[49,111749,101207],{"class":55},[14,111751,111752],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[166,111754,101316],{"id":101315},[39,111756,111758],{"className":41,"code":111757,"language":43,"meta":44,"style":44},"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",[46,111759,111760,111766,111776,111780,111784,111792,111797,111802,111806,111810,111815,111820,111824,111829,111834,111839,111843,111848,111853,111858,111863,111867,111871,111875,111879,111883,111888,111893,111897,111901,111905,111909,111913,111928,111937,111949,111972,111979,111983,111987,111997,112011,112025,112032,112036,112040,112054,112066,112078,112091,112106,112123,112127,112131,112143,112155,112163,112171,112175,112191,112196,112209,112222,112237,112241,112276,112308,112312,112316,112325,112329,112345,112355,112366,112382,112398,112414,112430,112434,112452,112472,112491,112495,112499,112511],{"__ignoreMap":44},[49,111761,111762,111764],{"class":51,"line":52},[49,111763,30481],{"class":59},[49,111765,101364],{"class":55},[49,111767,111768,111770,111772,111774],{"class":51,"line":84},[49,111769,30481],{"class":59},[49,111771,31469],{"class":55},[49,111773,31472],{"class":59},[49,111775,31475],{"class":55},[49,111777,111778],{"class":51,"line":109},[49,111779,2492],{"emptyLinePlaceholder":151},[49,111781,111782],{"class":51,"line":120},[49,111783,2492],{"emptyLinePlaceholder":151},[49,111785,111786,111788,111790],{"class":51,"line":135},[49,111787,101377],{"class":66},[49,111789,13654],{"class":59},[49,111791,101382],{"class":328},[49,111793,111794],{"class":51,"line":1306},[49,111795,111796],{"class":328},"\u003Cmujoco model=\"two_link_reacher\">\n",[49,111798,111799],{"class":51,"line":1312},[49,111800,111801],{"class":328},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[49,111803,111804],{"class":51,"line":1403},[49,111805,2492],{"emptyLinePlaceholder":151},[49,111807,111808],{"class":51,"line":1409},[49,111809,101401],{"class":328},[49,111811,111812],{"class":51,"line":1421},[49,111813,111814],{"class":328},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[49,111816,111817],{"class":51,"line":1704},[49,111818,111819],{"class":328},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[49,111821,111822],{"class":51,"line":1709},[49,111823,2492],{"emptyLinePlaceholder":151},[49,111825,111826],{"class":51,"line":1715},[49,111827,111828],{"class":328},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[49,111830,111831],{"class":51,"line":1720},[49,111832,111833],{"class":328},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,111835,111836],{"class":51,"line":1734},[49,111837,111838],{"class":328},"      \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",[49,111840,111841],{"class":51,"line":1739},[49,111842,2492],{"emptyLinePlaceholder":151},[49,111844,111845],{"class":51,"line":1745},[49,111846,111847],{"class":328},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[49,111849,111850],{"class":51,"line":1766},[49,111851,111852],{"class":328},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,111854,111855],{"class":51,"line":1771},[49,111856,111857],{"class":328},"        \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",[49,111859,111860],{"class":51,"line":1785},[49,111861,111862],{"class":328},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[49,111864,111865],{"class":51,"line":1790},[49,111866,106501],{"class":328},[49,111868,111869],{"class":51,"line":1819},[49,111870,101430],{"class":328},[49,111872,111873],{"class":51,"line":1824},[49,111874,101435],{"class":328},[49,111876,111877],{"class":51,"line":1841},[49,111878,2492],{"emptyLinePlaceholder":151},[49,111880,111881],{"class":51,"line":1846},[49,111882,106518],{"class":328},[49,111884,111885],{"class":51,"line":1851},[49,111886,111887],{"class":328},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,111889,111890],{"class":51,"line":1856},[49,111891,111892],{"class":328},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,111894,111895],{"class":51,"line":1870},[49,111896,106528],{"class":328},[49,111898,111899],{"class":51,"line":1875},[49,111900,101440],{"class":328},[49,111902,111903],{"class":51,"line":2669},[49,111904,95761],{"class":328},[49,111906,111907],{"class":51,"line":2683},[49,111908,2492],{"emptyLinePlaceholder":151},[49,111910,111911],{"class":51,"line":2691},[49,111912,2492],{"emptyLinePlaceholder":151},[49,111914,111915,111917,111920,111923,111925],{"class":51,"line":2696},[49,111916,32036],{"class":59},[49,111918,111919],{"class":2055}," site_position",[49,111921,111922],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[49,111924,1391],{"class":66},[49,111926,111927],{"class":55},") -> np.ndarray:\n",[49,111929,111930,111932,111934],{"class":51,"line":2702},[49,111931,103463],{"class":55},[49,111933,60],{"class":59},[49,111935,111936],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[49,111938,111939,111941,111943,111945,111947],{"class":51,"line":2708},[49,111940,3193],{"class":59},[49,111942,103512],{"class":55},[49,111944,1129],{"class":59},[49,111946,4185],{"class":66},[49,111948,3831],{"class":55},[49,111950,111951,111953,111955,111957,111959,111962,111964,111966,111968,111970],{"class":51,"line":2713},[49,111952,103495],{"class":59},[49,111954,103498],{"class":66},[49,111956,228],{"class":55},[49,111958,277],{"class":59},[49,111960,111961],{"class":328},"\"site not found: ",[49,111963,1115],{"class":66},[49,111965,79899],{"class":55},[49,111967,1165],{"class":66},[49,111969,474],{"class":328},[49,111971,81],{"class":55},[49,111973,111974,111976],{"class":51,"line":8038},[49,111975,4182],{"class":59},[49,111977,111978],{"class":55}," data.site_xpos[site_id].copy()\n",[49,111980,111981],{"class":51,"line":8062},[49,111982,2492],{"emptyLinePlaceholder":151},[49,111984,111985],{"class":51,"line":8067},[49,111986,2492],{"emptyLinePlaceholder":151},[49,111988,111989,111991,111994],{"class":51,"line":8073},[49,111990,32036],{"class":59},[49,111992,111993],{"class":2055}," get_obs",[49,111995,111996],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[49,111998,111999,112002,112004,112007,112009],{"class":51,"line":8100},[49,112000,112001],{"class":55},"    tip ",[49,112003,60],{"class":59},[49,112005,112006],{"class":55}," site_position(model, data, ",[49,112008,111599],{"class":328},[49,112010,81],{"class":55},[49,112012,112013,112016,112018,112020,112023],{"class":51,"line":8105},[49,112014,112015],{"class":55},"    target ",[49,112017,60],{"class":59},[49,112019,112006],{"class":55},[49,112021,112022],{"class":328},"\"target\"",[49,112024,81],{"class":55},[49,112026,112027,112029],{"class":51,"line":8111},[49,112028,4182],{"class":59},[49,112030,112031],{"class":55}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[49,112033,112034],{"class":51,"line":8123},[49,112035,2492],{"emptyLinePlaceholder":151},[49,112037,112038],{"class":51,"line":8135},[49,112039,2492],{"emptyLinePlaceholder":151},[49,112041,112042,112044,112047,112050,112052],{"class":51,"line":8147},[49,112043,32036],{"class":59},[49,112045,112046],{"class":2055}," reward",[49,112048,112049],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,112051,266],{"class":66},[49,112053,3831],{"class":55},[49,112055,112056,112058,112060,112062,112064],{"class":51,"line":9806},[49,112057,112001],{"class":55},[49,112059,60],{"class":59},[49,112061,112006],{"class":55},[49,112063,111599],{"class":328},[49,112065,81],{"class":55},[49,112067,112068,112070,112072,112074,112076],{"class":51,"line":9831},[49,112069,112015],{"class":55},[49,112071,60],{"class":59},[49,112073,112006],{"class":55},[49,112075,112022],{"class":328},[49,112077,81],{"class":55},[49,112079,112080,112083,112085,112087,112089],{"class":51,"line":9854},[49,112081,112082],{"class":55},"    dist ",[49,112084,60],{"class":59},[49,112086,111664],{"class":55},[49,112088,751],{"class":59},[49,112090,111669],{"class":55},[49,112092,112093,112096,112098,112101,112103],{"class":51,"line":9878},[49,112094,112095],{"class":55},"    control_cost ",[49,112097,60],{"class":59},[49,112099,112100],{"class":66}," 0.01",[49,112102,6608],{"class":59},[49,112104,112105],{"class":55}," np.sum(np.square(data.ctrl))\n",[49,112107,112108,112110,112112,112114,112116,112118,112120],{"class":51,"line":9883},[49,112109,4182],{"class":59},[49,112111,109860],{"class":66},[49,112113,228],{"class":55},[49,112115,751],{"class":59},[49,112117,111659],{"class":55},[49,112119,751],{"class":59},[49,112121,112122],{"class":55}," control_cost)\n",[49,112124,112125],{"class":51,"line":9888},[49,112126,2492],{"emptyLinePlaceholder":151},[49,112128,112129],{"class":51,"line":9893},[49,112130,2492],{"emptyLinePlaceholder":151},[49,112132,112133,112135,112137,112139,112141],{"class":51,"line":9902},[49,112134,32036],{"class":59},[49,112136,2065],{"class":2055},[49,112138,101461],{"class":55},[49,112140,95749],{"class":66},[49,112142,3831],{"class":55},[49,112144,112145,112147,112149,112151,112153],{"class":51,"line":9907},[49,112146,101470],{"class":55},[49,112148,60],{"class":59},[49,112150,101475],{"class":55},[49,112152,101377],{"class":66},[49,112154,81],{"class":55},[49,112156,112157,112159,112161],{"class":51,"line":9913},[49,112158,101484],{"class":55},[49,112160,60],{"class":59},[49,112162,101489],{"class":55},[49,112164,112165,112167,112169],{"class":51,"line":9934},[49,112166,110216],{"class":55},[49,112168,60],{"class":59},[49,112170,104824],{"class":66},[49,112172,112173],{"class":51,"line":9940},[49,112174,2492],{"emptyLinePlaceholder":151},[49,112176,112177,112179,112181,112183,112185,112187,112189],{"class":51,"line":9954},[49,112178,3293],{"class":59},[49,112180,31705],{"class":55},[49,112182,26134],{"class":59},[49,112184,32532],{"class":66},[49,112186,228],{"class":55},[49,112188,65163],{"class":66},[49,112190,30875],{"class":55},[49,112192,112193],{"class":51,"line":9960},[49,112194,112195],{"class":55},"        mujoco.mj_forward(model, data)\n",[49,112197,112198,112201,112203,112205,112207],{"class":51,"line":9987},[49,112199,112200],{"class":55},"        tip ",[49,112202,60],{"class":59},[49,112204,112006],{"class":55},[49,112206,111599],{"class":328},[49,112208,81],{"class":55},[49,112210,112211,112214,112216,112218,112220],{"class":51,"line":9996},[49,112212,112213],{"class":55},"        target ",[49,112215,60],{"class":59},[49,112217,112006],{"class":55},[49,112219,112022],{"class":328},[49,112221,81],{"class":55},[49,112223,112224,112227,112229,112232,112234],{"class":51,"line":10002},[49,112225,112226],{"class":55},"        error ",[49,112228,60],{"class":59},[49,112230,112231],{"class":55}," target ",[49,112233,751],{"class":59},[49,112235,112236],{"class":55}," tip\n",[49,112238,112239],{"class":51,"line":10010},[49,112240,2492],{"emptyLinePlaceholder":151},[49,112242,112243,112245,112247,112249,112251,112254,112256,112258,112261,112263,112266,112268,112270,112272,112274],{"class":51,"line":10015},[49,112244,106680],{"class":55},[49,112246,415],{"class":66},[49,112248,4535],{"class":55},[49,112250,60],{"class":59},[49,112252,112253],{"class":55}," np.clip(",[49,112255,105323],{"class":66},[49,112257,6608],{"class":59},[49,112259,112260],{"class":55}," error[",[49,112262,301],{"class":66},[49,112264,112265],{"class":55},"], ",[49,112267,751],{"class":59},[49,112269,102466],{"class":66},[49,112271,12525],{"class":55},[49,112273,102466],{"class":66},[49,112275,81],{"class":55},[49,112277,112278,112280,112282,112284,112286,112288,112290,112292,112294,112296,112298,112300,112302,112304,112306],{"class":51,"line":16694},[49,112279,106680],{"class":55},[49,112281,441],{"class":66},[49,112283,4535],{"class":55},[49,112285,60],{"class":59},[49,112287,112253],{"class":55},[49,112289,105323],{"class":66},[49,112291,6608],{"class":59},[49,112293,112260],{"class":55},[49,112295,415],{"class":66},[49,112297,112265],{"class":55},[49,112299,751],{"class":59},[49,112301,102466],{"class":66},[49,112303,12525],{"class":55},[49,112305,102466],{"class":66},[49,112307,81],{"class":55},[49,112309,112310],{"class":51,"line":16700},[49,112311,2492],{"emptyLinePlaceholder":151},[49,112313,112314],{"class":51,"line":16723},[49,112315,101579],{"class":55},[49,112317,112318,112320,112322],{"class":51,"line":16729},[49,112319,110360],{"class":55},[49,112321,9567],{"class":59},[49,112323,112324],{"class":55}," reward(model, data)\n",[49,112326,112327],{"class":51,"line":16752},[49,112328,2492],{"emptyLinePlaceholder":151},[49,112330,112331,112333,112335,112337,112339,112341,112343],{"class":51,"line":16766},[49,112332,2589],{"class":59},[49,112334,31705],{"class":55},[49,112336,550],{"class":59},[49,112338,5844],{"class":66},[49,112340,101622],{"class":59},[49,112342,4185],{"class":66},[49,112344,3831],{"class":55},[49,112346,112347,112350,112352],{"class":51,"line":16786},[49,112348,112349],{"class":55},"            obs ",[49,112351,60],{"class":59},[49,112353,112354],{"class":55}," get_obs(model, data)\n",[49,112356,112357,112359,112361,112363],{"class":51,"line":16792},[49,112358,34739],{"class":66},[49,112360,228],{"class":55},[49,112362,110394],{"class":328},[49,112364,112365],{"class":55},", step)\n",[49,112367,112368,112370,112372,112375,112378,112380],{"class":51,"line":16803},[49,112369,34739],{"class":66},[49,112371,228],{"class":55},[49,112373,112374],{"class":328},"\"  tip:\"",[49,112376,112377],{"class":55},", np.round(tip, ",[49,112379,73],{"class":66},[49,112381,30586],{"class":55},[49,112383,112384,112386,112388,112391,112394,112396],{"class":51,"line":16826},[49,112385,34739],{"class":66},[49,112387,228],{"class":55},[49,112389,112390],{"class":328},"\"  target:\"",[49,112392,112393],{"class":55},", np.round(target, ",[49,112395,73],{"class":66},[49,112397,30586],{"class":55},[49,112399,112400,112402,112404,112407,112410,112412],{"class":51,"line":16848},[49,112401,34739],{"class":66},[49,112403,228],{"class":55},[49,112405,112406],{"class":328},"\"  ctrl:\"",[49,112408,112409],{"class":55},", np.round(data.ctrl.copy(), ",[49,112411,73],{"class":66},[49,112413,30586],{"class":55},[49,112415,112416,112418,112420,112423,112426,112428],{"class":51,"line":16853},[49,112417,34739],{"class":66},[49,112419,228],{"class":55},[49,112421,112422],{"class":328},"\"  obs_dim:\"",[49,112424,112425],{"class":55},", obs.shape[",[49,112427,415],{"class":66},[49,112429,106],{"class":55},[49,112431,112432],{"class":51,"line":16859},[49,112433,2492],{"emptyLinePlaceholder":151},[49,112435,112436,112438,112440,112442,112444,112446,112448,112450],{"class":51,"line":16873},[49,112437,31388],{"class":66},[49,112439,228],{"class":55},[49,112441,110439],{"class":328},[49,112443,12525],{"class":55},[49,112445,32107],{"class":66},[49,112447,110446],{"class":55},[49,112449,73],{"class":66},[49,112451,30586],{"class":55},[49,112453,112454,112456,112458,112461,112464,112466,112468,112470],{"class":51,"line":16886},[49,112455,31388],{"class":66},[49,112457,228],{"class":55},[49,112459,112460],{"class":328},"\"final tip:\"",[49,112462,112463],{"class":55},", np.round(site_position(model, data, ",[49,112465,111599],{"class":328},[49,112467,110408],{"class":55},[49,112469,73],{"class":66},[49,112471,30586],{"class":55},[49,112473,112474,112476,112478,112481,112483,112485,112487,112489],{"class":51,"line":16891},[49,112475,31388],{"class":66},[49,112477,228],{"class":55},[49,112479,112480],{"class":328},"\"target:\"",[49,112482,112463],{"class":55},[49,112484,112022],{"class":328},[49,112486,110408],{"class":55},[49,112488,73],{"class":66},[49,112490,30586],{"class":55},[49,112492,112493],{"class":51,"line":16905},[49,112494,2492],{"emptyLinePlaceholder":151},[49,112496,112497],{"class":51,"line":16910},[49,112498,2492],{"emptyLinePlaceholder":151},[49,112500,112501,112503,112505,112507,112509],{"class":51,"line":16916},[49,112502,1623],{"class":59},[49,112504,31309],{"class":66},[49,112506,101622],{"class":59},[49,112508,101625],{"class":328},[49,112510,3831],{"class":55},[49,112512,112513],{"class":51,"line":16921},[49,112514,101632],{"class":55},[14,112516,103633],{},[39,112518,112520],{"className":23912,"code":112519,"language":23914,"meta":44,"style":44},"touch ch7_reacher.py\n",[46,112521,112522],{"__ignoreMap":44},[49,112523,112524,112526],{"class":51,"line":52},[49,112525,101346],{"class":2055},[49,112527,112528],{"class":328}," ch7_reacher.py\n",[14,112530,110507],{},[39,112532,112534],{"className":23912,"code":112533,"language":23914,"meta":44,"style":44},"python ch7_reacher.py\n",[46,112535,112536],{"__ignoreMap":44},[49,112537,112538,112540],{"class":51,"line":52},[49,112539,43],{"class":2055},[49,112541,112528],{"class":328},[195,112543,101635],{"id":101635},[14,112545,112546],{},"读取 site 坐标：",[39,112548,112550],{"className":41,"code":112549,"language":43,"meta":44,"style":44},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[46,112551,112552],{"__ignoreMap":44},[49,112553,112554,112556,112558,112560,112562],{"class":51,"line":52},[49,112555,32036],{"class":59},[49,112557,111919],{"class":2055},[49,112559,111922],{"class":55},[49,112561,1391],{"class":66},[49,112563,111927],{"class":55},[14,112565,112566],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112568,110523],{},[39,112570,112572],{"className":41,"code":112571,"language":43,"meta":44,"style":44},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[46,112573,112574],{"__ignoreMap":44},[49,112575,112576,112578],{"class":51,"line":52},[49,112577,17136],{"class":59},[49,112579,112031],{"class":55},[14,112581,112582],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112584,109848],{},[39,112586,112588],{"className":41,"code":112587,"language":43,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[46,112589,112590,112602,112615],{"__ignoreMap":44},[49,112591,112592,112594,112596,112598,112600],{"class":51,"line":52},[49,112593,111659],{"class":55},[49,112595,60],{"class":59},[49,112597,111664],{"class":55},[49,112599,751],{"class":59},[49,112601,111669],{"class":55},[49,112603,112604,112607,112609,112611,112613],{"class":51,"line":84},[49,112605,112606],{"class":55},"control_cost ",[49,112608,60],{"class":59},[49,112610,112100],{"class":66},[49,112612,6608],{"class":59},[49,112614,112105],{"class":55},[49,112616,112617,112619,112621,112623,112625,112627,112629],{"class":51,"line":109},[49,112618,17136],{"class":59},[49,112620,109860],{"class":66},[49,112622,228],{"class":55},[49,112624,751],{"class":59},[49,112626,111659],{"class":55},[49,112628,751],{"class":59},[49,112630,112122],{"class":55},[14,112632,112633],{},"奖励由两部分组成：",[178,112635,112636,112641],{},[181,112637,112638,112640],{},[46,112639,111686],{},"：末端离目标越远，奖励越低。",[181,112642,112643,112646],{},[46,112644,112645],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112648,112649],{},"简单控制器：",[39,112651,112653],{"className":41,"code":112652,"language":43,"meta":44,"style":44},"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",[46,112654,112655,112668,112700],{"__ignoreMap":44},[49,112656,112657,112660,112662,112664,112666],{"class":51,"line":52},[49,112658,112659],{"class":55},"error ",[49,112661,60],{"class":59},[49,112663,112231],{"class":55},[49,112665,751],{"class":59},[49,112667,112236],{"class":55},[49,112669,112670,112672,112674,112676,112678,112680,112682,112684,112686,112688,112690,112692,112694,112696,112698],{"class":51,"line":84},[49,112671,105934],{"class":55},[49,112673,415],{"class":66},[49,112675,4535],{"class":55},[49,112677,60],{"class":59},[49,112679,112253],{"class":55},[49,112681,105323],{"class":66},[49,112683,6608],{"class":59},[49,112685,112260],{"class":55},[49,112687,301],{"class":66},[49,112689,112265],{"class":55},[49,112691,751],{"class":59},[49,112693,102466],{"class":66},[49,112695,12525],{"class":55},[49,112697,102466],{"class":66},[49,112699,81],{"class":55},[49,112701,112702,112704,112706,112708,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730],{"class":51,"line":109},[49,112703,105934],{"class":55},[49,112705,441],{"class":66},[49,112707,4535],{"class":55},[49,112709,60],{"class":59},[49,112711,112253],{"class":55},[49,112713,105323],{"class":66},[49,112715,6608],{"class":59},[49,112717,112260],{"class":55},[49,112719,415],{"class":66},[49,112721,112265],{"class":55},[49,112723,751],{"class":59},[49,112725,102466],{"class":66},[49,112727,12525],{"class":55},[49,112729,102466],{"class":66},[49,112731,81],{"class":55},[14,112733,112734],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[195,112736,101771],{"id":101771},[39,112738,112739],{"className":41,"code":112549,"language":43,"meta":44,"style":44},[46,112740,112741],{"__ignoreMap":44},[49,112742,112743,112745,112747,112749,112751],{"class":51,"line":52},[49,112744,32036],{"class":59},[49,112746,111919],{"class":2055},[49,112748,111922],{"class":55},[49,112750,1391],{"class":66},[49,112752,111927],{"class":55},[14,112754,112755,112756,112758,112759,82628,112761,28476],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[46,112757,79899],{}," 是 site 的名字，比如 ",[46,112760,111599],{},[46,112762,112022],{},[39,112764,112766],{"className":41,"code":112765,"language":43,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[46,112767,112768],{"__ignoreMap":44},[49,112769,112770,112772,112774],{"class":51,"line":52},[49,112771,103697],{"class":55},[49,112773,60],{"class":59},[49,112775,111936],{"class":55},[14,112777,112778],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[39,112780,112782],{"className":41,"code":112781,"language":43,"meta":44,"style":44},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[46,112783,112784,112796],{"__ignoreMap":44},[49,112785,112786,112788,112790,112792,112794],{"class":51,"line":52},[49,112787,1623],{"class":59},[49,112789,103512],{"class":55},[49,112791,1129],{"class":59},[49,112793,4185],{"class":66},[49,112795,3831],{"class":55},[49,112797,112798,112800,112802,112804,112806,112808,112810,112812,112814,112816],{"class":51,"line":84},[49,112799,103958],{"class":59},[49,112801,103498],{"class":66},[49,112803,228],{"class":55},[49,112805,277],{"class":59},[49,112807,111961],{"class":328},[49,112809,1115],{"class":66},[49,112811,79899],{"class":55},[49,112813,1165],{"class":66},[49,112815,474],{"class":328},[49,112817,81],{"class":55},[14,112819,112820,112821,112824,112825,112827],{},"如果 site 没找到，就主动报错。",[46,112822,112823],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[46,112826,79899],{}," 的值放进字符串里。",[39,112829,112831],{"className":41,"code":112830,"language":43,"meta":44,"style":44},"return data.site_xpos[site_id].copy()\n",[46,112832,112833],{"__ignoreMap":44},[49,112834,112835,112837],{"class":51,"line":52},[49,112836,17136],{"class":59},[49,112838,111978],{"class":55},[14,112840,112841,112842,112844,112845,112848],{},"返回这个 site 的世界坐标。",[46,112843,103743],{}," 里的每一行都是一个 site 的 ",[46,112846,112847],{},"(x, y, z)"," 坐标。",[39,112850,112852],{"className":41,"code":112851,"language":43,"meta":44,"style":44},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[46,112853,112854],{"__ignoreMap":44},[49,112855,112856,112858,112860],{"class":51,"line":52},[49,112857,32036],{"class":59},[49,112859,111993],{"class":2055},[49,112861,111996],{"class":55},[14,112863,112864],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[39,112866,112868],{"className":41,"code":112867,"language":43,"meta":44,"style":44},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[46,112869,112870,112882],{"__ignoreMap":44},[49,112871,112872,112874,112876,112878,112880],{"class":51,"line":52},[49,112873,111631],{"class":55},[49,112875,60],{"class":59},[49,112877,112006],{"class":55},[49,112879,111599],{"class":328},[49,112881,81],{"class":55},[49,112883,112884,112886,112888,112890,112892],{"class":51,"line":84},[49,112885,111641],{"class":55},[49,112887,60],{"class":59},[49,112889,112006],{"class":55},[49,112891,112022],{"class":328},[49,112893,81],{"class":55},[14,112895,112896],{},"分别读取末端点和目标点的世界坐标。",[39,112898,112899],{"className":41,"code":112571,"language":43,"meta":44,"style":44},[46,112900,112901],{"__ignoreMap":44},[49,112902,112903,112905],{"class":51,"line":52},[49,112904,17136],{"class":59},[49,112906,112031],{"class":55},[14,112908,112909],{},"把四部分拼成一个观测数组：",[39,112911,112914],{"className":112912,"code":112913,"language":5278,"meta":44},[5276],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[46,112915,112913],{"__ignoreMap":44},[39,112917,112919],{"className":41,"code":112918,"language":43,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\n",[46,112920,112921],{"__ignoreMap":44},[49,112922,112923,112925,112927,112929,112931],{"class":51,"line":52},[49,112924,111659],{"class":55},[49,112926,60],{"class":59},[49,112928,111664],{"class":55},[49,112930,751],{"class":59},[49,112932,111669],{"class":55},[14,112934,112935,112936,112939,112940,112943],{},"计算 tip 到 target 的距离。",[46,112937,112938],{},"tip - target"," 得到一个三维向量，",[46,112941,112942],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112945,14723],{},[39,112947,112950],{"className":112948,"code":112949,"language":5278,"meta":44},[5276],"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",[46,112951,112949],{"__ignoreMap":44},[39,112953,112955],{"className":41,"code":112954,"language":43,"meta":44,"style":44},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[46,112956,112957],{"__ignoreMap":44},[49,112958,112959,112961,112963,112965,112967],{"class":51,"line":52},[49,112960,112606],{"class":55},[49,112962,60],{"class":59},[49,112964,112100],{"class":66},[49,112966,6608],{"class":59},[49,112968,112105],{"class":55},[14,112970,112971,112972,112975,112976,112979],{},"计算动作惩罚。",[46,112973,112974],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[46,112977,112978],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[39,112981,112983],{"className":41,"code":112982,"language":43,"meta":44,"style":44},"return float(-dist - control_cost)\n",[46,112984,112985],{"__ignoreMap":44},[49,112986,112987,112989,112991,112993,112995,112997,112999],{"class":51,"line":52},[49,112988,17136],{"class":59},[49,112990,109860],{"class":66},[49,112992,228],{"class":55},[49,112994,751],{"class":59},[49,112996,111659],{"class":55},[49,112998,751],{"class":59},[49,113000,112122],{"class":55},[14,113002,113003],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[39,113005,113006],{"className":41,"code":110866,"language":43,"meta":44,"style":44},[46,113007,113008],{"__ignoreMap":44},[49,113009,113010,113012,113014],{"class":51,"line":52},[49,113011,110873],{"class":55},[49,113013,60],{"class":59},[49,113015,104824],{"class":66},[14,113017,113018],{},"累计奖励变量，记录整个运行过程的总分。",[39,113020,113022],{"className":41,"code":113021,"language":43,"meta":44,"style":44},"for step in range(500):\n",[46,113023,113024],{"__ignoreMap":44},[49,113025,113026,113028,113030,113032,113034,113036,113038],{"class":51,"line":52},[49,113027,3117],{"class":59},[49,113029,31705],{"class":55},[49,113031,26134],{"class":59},[49,113033,32532],{"class":66},[49,113035,228],{"class":55},[49,113037,65163],{"class":66},[49,113039,30875],{"class":55},[14,113041,113042],{},"运行 500 个控制步。",[39,113044,113045],{"className":41,"code":104606,"language":43,"meta":44,"style":44},[46,113046,113047],{"__ignoreMap":44},[49,113048,113049],{"class":51,"line":52},[49,113050,104606],{"class":55},[14,113052,113053,113054,101081,113056,113058],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[46,113055,103294],{},[46,113057,103297],{}," 是当前状态下的坐标。",[39,113060,113062],{"className":41,"code":113061,"language":43,"meta":44,"style":44},"error = target - tip\n",[46,113063,113064],{"__ignoreMap":44},[49,113065,113066,113068,113070,113072,113074],{"class":51,"line":52},[49,113067,112659],{"class":55},[49,113069,60],{"class":59},[49,113071,112231],{"class":55},[49,113073,751],{"class":59},[49,113075,112236],{"class":55},[14,113077,113078],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[39,113080,113082],{"className":41,"code":113081,"language":43,"meta":44,"style":44},"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",[46,113083,113084,113116],{"__ignoreMap":44},[49,113085,113086,113088,113090,113092,113094,113096,113098,113100,113102,113104,113106,113108,113110,113112,113114],{"class":51,"line":52},[49,113087,105934],{"class":55},[49,113089,415],{"class":66},[49,113091,4535],{"class":55},[49,113093,60],{"class":59},[49,113095,112253],{"class":55},[49,113097,105323],{"class":66},[49,113099,6608],{"class":59},[49,113101,112260],{"class":55},[49,113103,301],{"class":66},[49,113105,112265],{"class":55},[49,113107,751],{"class":59},[49,113109,102466],{"class":66},[49,113111,12525],{"class":55},[49,113113,102466],{"class":66},[49,113115,81],{"class":55},[49,113117,113118,113120,113122,113124,113126,113128,113130,113132,113134,113136,113138,113140,113142,113144,113146],{"class":51,"line":84},[49,113119,105934],{"class":55},[49,113121,441],{"class":66},[49,113123,4535],{"class":55},[49,113125,60],{"class":59},[49,113127,112253],{"class":55},[49,113129,105323],{"class":66},[49,113131,6608],{"class":59},[49,113133,112260],{"class":55},[49,113135,415],{"class":66},[49,113137,112265],{"class":55},[49,113139,751],{"class":59},[49,113141,102466],{"class":66},[49,113143,12525],{"class":55},[49,113145,102466],{"class":66},[49,113147,81],{"class":55},[14,113149,113150,113151,113154],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[46,113152,113153],{},"error -> ctrl -> step"," 的流程。",[39,113156,113157],{"className":41,"code":104568,"language":43,"meta":44,"style":44},[46,113158,113159],{"__ignoreMap":44},[49,113160,113161],{"class":51,"line":52},[49,113162,104568],{"class":55},[14,113164,113165],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[39,113167,113169],{"className":41,"code":113168,"language":43,"meta":44,"style":44},"obs = get_obs(model, data)\n",[46,113170,113171],{"__ignoreMap":44},[49,113172,113173,113175,113177],{"class":51,"line":52},[49,113174,110917],{"class":55},[49,113176,60],{"class":59},[49,113178,112354],{"class":55},[14,113180,113181,113182,113185],{},"读取最新观测。后面打印 ",[46,113183,113184],{},"obs.shape[0]","，用来确认观测维度是 10。",[166,113187,102379],{"id":102378},[14,113189,113190],{},"观测维度为:",[39,113192,113195],{"className":113193,"code":113194,"language":5278,"meta":44},[5276],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[46,113196,113194],{"__ignoreMap":44},[14,113198,113199],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113201,113202],{},"程序每 100 步打印：",[39,113204,113207],{"className":113205,"code":113206,"language":5278,"meta":44},[5276],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[46,113208,113206],{"__ignoreMap":44},[14,113210,113211,113212,113214],{},"如果控制有效，你应该看到最终 ",[46,113213,103294],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[166,113216,102411],{"id":102410},[178,113218,113219,113222,113225,113231,113237,113244,113254],{},[181,113220,113221],{},"修改目标点位置。",[181,113223,113224],{},"重新运行，观察最终 tip 是否变化。",[181,113226,113227,113228,113230],{},"把 gravity 改成 ",[46,113229,102652],{},"，观察控制是否变差。",[181,113232,111244,113233,111248,113235,28476],{},[46,113234,102221],{},[46,113236,301],{},[181,113238,102474,113239,102477,113241,113243],{},[46,113240,110659],{},[46,113242,107370],{},"，观察机械臂是否更难移动。",[181,113245,102474,113246,82619,113248,102477,113250,113253],{},[46,113247,103297],{},[46,113249,104209],{},[46,113251,113252],{},"0.2 0 0.6","，观察 reward 和 final tip。",[181,113255,113256],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[166,113258,102516],{"id":102515},[195,113260,113262],{"id":113261},"site-not-found",[46,113263,113264],{},"site not found",[14,113266,113267,113268,101081,113271,28476],{},"检查 XML 中是否有 ",[46,113269,113270],{},"site name=\"tip\"",[46,113272,113273],{},"site name=\"target\"",[195,113275,113276],{"id":113276},"机械臂完全不动",[14,113278,102586],{},[178,113280,113281,113286,113289,113294],{},[181,113282,113283,113285],{},[46,113284,102221],{}," 是否为 2",[181,113287,113288],{},"actuator 是否引用正确 joint",[181,113290,113291,113293],{},[46,113292,101139],{}," 是否被赋值",[181,113295,113296,113297],{},"是否执行了 ",[46,113298,100748],{},[195,113300,113301],{"id":113301},"控制效果不好",[14,113303,113304],{},"正常。本章重点不是控制器最优，而是任务结构:",[39,113306,113309],{"className":113307,"code":113308,"language":5278,"meta":44},[5276],"obs → action → mj_step → reward → next_obs\n",[46,113310,113308],{"__ignoreMap":44},[195,113312,113314],{"id":113313},"tip-坐标不变化","tip 坐标不变化",[14,113316,102638],{},[178,113318,113319,113324,113332,113341],{},[181,113320,113321,113322,28476],{},"是否每步调用了 ",[46,113323,100748],{},[181,113325,113326,113327,101081,113329,28476],{},"是否写入了 ",[46,113328,106189],{},[46,113330,113331],{},"data.ctrl[1]",[181,113333,113334,113335,436,113338,28476],{},"actuator 是否正确引用 ",[46,113336,113337],{},"joint1",[46,113339,113340],{},"joint2",[181,113342,113343],{},"控制输入是否太小。",[195,113345,113346],{"id":113346},"目标点不会动",[14,113348,113349],{},"本章的 target 是固定 site：",[39,113351,113353],{"className":53156,"code":113352,"language":53158,"meta":44,"style":44},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[46,113354,113355],{"__ignoreMap":44},[49,113356,113357,113359,113361,113363,113365,113367,113369,113371,113374],{"class":51,"line":52},[49,113358,1129],{"class":55},[49,113360,103273],{"class":51389},[49,113362,15010],{"class":2055},[49,113364,60],{"class":55},[49,113366,112022],{"class":328},[49,113368,101169],{"class":2055},[49,113370,60],{"class":55},[49,113372,113373],{"class":328},"\"0.5 0 0.4\"",[49,113375,113376],{"class":55}," ...\u002F>\n",[14,113378,113379,113380,113382],{},"它直接挂在 ",[46,113381,101904],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[195,113384,113385],{"id":113385},"机械臂不像真实机械臂",[14,113387,113388],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[166,113390,102670],{"id":102669},[14,113392,113393],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113395,113396],{},"核心公式：",[39,113398,113401],{"className":113399,"code":113400,"language":5278,"meta":44},[5276],"distance = ||tip - target||\nreward = -distance - action_cost\n",[46,113402,113400],{"__ignoreMap":44},[14,113404,113405],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[143,113407,113408],{},"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":44,"searchDepth":84,"depth":84,"links":113410},[113411,113412,113413,113418,113422,113423,113424,113432],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":113414},[113415,113416,113417],{"id":111614,"depth":109,"text":111615},{"id":111690,"depth":109,"text":111690},{"id":111720,"depth":109,"text":111721},{"id":101315,"depth":84,"text":101316,"children":113419},[113420,113421],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":113425},[113426,113427,113428,113429,113430,113431],{"id":113261,"depth":109,"text":113264},{"id":113276,"depth":109,"text":113276},{"id":113301,"depth":109,"text":113301},{"id":113313,"depth":109,"text":113314},{"id":113346,"depth":109,"text":113346},{"id":113385,"depth":109,"text":113385},{"id":102669,"depth":84,"text":102670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111418,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113439,"title":113440,"body":113441,"description":44,"extension":149,"meta":116903,"navigation":151,"path":116904,"seo":116905,"stem":116906,"__hash__":116907},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113442,"toc":116874},[113443,113446,113448,113451,113454,113479,113482,113488,113491,113497,113499,113501,113525,113527,113545,113547,113590,113592,113619,113621,113624,113676,113679,113685,113694,113697,113735,113738,113777,113780,113788,113795,113798,113804,113806,113860,113867,113912,113915,113919,113935,113945,113947,115208,115210,115222,115224,115235,115237,115240,115261,115264,115267,115300,115306,115309,115342,115345,115348,115389,115394,115408,115411,115424,115429,115452,115454,115469,115479,115494,115501,115521,115536,115554,115557,115574,115582,115598,115604,115636,115649,115681,115691,115726,115740,115786,115800,115842,115853,115866,115872,115905,115908,115935,115945,115985,115995,116012,116019,116037,116040,116081,116094,116109,116112,116135,116138,116150,116153,116172,116177,116198,116201,116216,116219,116253,116265,116280,116283,116308,116311,116330,116333,116365,116368,116392,116398,116428,116435,116448,116451,116453,116455,116461,116464,116467,116479,116482,116484,116538,116540,116544,116550,116559,116562,116569,116571,116594,116597,116601,116603,116621,116627,116629,116662,116665,116671,116675,116678,116698,116703,116707,116714,116734,116739,116743,116746,116766,116769,116855,116859,116862,116868,116871],[10,113444,113440],{"id":113445},"_8gymnasium-风格强化学习接口基础",[166,113447,100710],{"id":100709},[14,113449,113450],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113452,113453],{},"你将实现:",[39,113455,113457],{"className":41,"code":113456,"language":43,"meta":44,"style":44},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[46,113458,113459,113469],{"__ignoreMap":44},[49,113460,113461,113464,113466],{"class":51,"line":52},[49,113462,113463],{"class":55},"obs, info ",[49,113465,60],{"class":59},[49,113467,113468],{"class":55}," env.reset()\n",[49,113470,113471,113474,113476],{"class":51,"line":84},[49,113472,113473],{"class":55},"obs, reward, terminated, truncated, info ",[49,113475,60],{"class":59},[49,113477,113478],{"class":55}," env.step(action)\n",[14,113480,113481],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113483,113484,113485,113487],{},"前面章节的代码都是“脚本式”的：在 ",[46,113486,102358],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113489,113490],{},"可以先记住 Gymnasium 环境的核心交互：",[39,113492,113495],{"className":113493,"code":113494,"language":5278,"meta":44},[5276],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[46,113496,113494],{"__ignoreMap":44},[166,113498,100833],{"id":100832},[14,113500,100836],{},[39,113502,113503],{"className":23912,"code":104451,"language":23914,"meta":44,"style":44},[46,113504,113505],{"__ignoreMap":44},[49,113506,113507,113509,113511,113513,113515,113517,113519,113521,113523],{"class":51,"line":52},[49,113508,24667],{"class":2055},[49,113510,26406],{"class":328},[49,113512,23924],{"class":328},[49,113514,26491],{"class":66},[49,113516,104466],{"class":328},[49,113518,100861],{"class":328},[49,113520,102564],{"class":328},[49,113522,100877],{"class":328},[49,113524,104475],{"class":328},[14,113526,102882],{},[39,113528,113530],{"className":23912,"code":113529,"language":23914,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[46,113531,113532],{"__ignoreMap":44},[49,113533,113534,113536,113538,113540,113542],{"class":51,"line":52},[49,113535,23921],{"class":2055},[49,113537,23924],{"class":328},[49,113539,100993],{"class":328},[49,113541,107774],{"class":328},[49,113543,113544],{"class":328}," gymnasium\n",[14,113546,102899],{},[39,113548,113550],{"className":23912,"code":113549,"language":23914,"meta":44,"style":44},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[46,113551,113552,113569,113578],{"__ignoreMap":44},[49,113553,113554,113556,113558,113560,113563,113565,113567],{"class":51,"line":52},[49,113555,30421],{"class":2055},[49,113557,29267],{"class":328},[49,113559,25206],{"class":66},[49,113561,113562],{"class":328}," mujoco-gym-api",[49,113564,101038],{"class":328},[49,113566,101041],{"class":66},[49,113568,101044],{"class":66},[49,113570,113571,113573,113575],{"class":51,"line":84},[49,113572,30421],{"class":2055},[49,113574,101051],{"class":328},[49,113576,113577],{"class":328}," mujoco-gym-api\n",[49,113579,113580,113582,113584,113586,113588],{"class":51,"line":109},[49,113581,23921],{"class":2055},[49,113583,23924],{"class":328},[49,113585,100993],{"class":328},[49,113587,107774],{"class":328},[49,113589,113544],{"class":328},[14,113591,101067],{},[178,113593,113594,113604,113607,113613],{},[181,113595,113596,113597,113600,113601,28476],{},"本章使用 ",[46,113598,113599],{},"gymnasium","，不是旧版 ",[46,113602,113603],{},"gym",[181,113605,113606],{},"Gymnasium API 与旧 Gym API 有差异。",[181,113608,113609,113610,28476],{},"旧 Gym 常见返回值是 4 个: ",[46,113611,113612],{},"obs, reward, done, info",[181,113614,113615,113616,28476],{},"Gymnasium 返回值是 5 个: ",[46,113617,113618],{},"obs, reward, terminated, truncated, info",[166,113620,101108],{"id":101107},[14,113622,113623],{},"强化学习环境接口包含:",[361,113625,113626,113635],{},[364,113627,113628],{},[367,113629,113630,113633],{},[370,113631,113632],{"align":23826},"方法",[370,113634,102759],{"align":23826},[408,113636,113637,113647,113657,113667],{},[367,113638,113639,113644],{},[413,113640,113641],{"align":23826},[46,113642,113643],{},"reset()",[413,113645,113646],{"align":23826},"重置环境",[367,113648,113649,113654],{},[413,113650,113651],{"align":23826},[46,113652,113653],{},"step(action)",[413,113655,113656],{"align":23826},"执行动作",[367,113658,113659,113664],{},[413,113660,113661],{"align":23826},[46,113662,113663],{},"observation_space",[413,113665,113666],{"align":23826},"观测空间",[367,113668,113669,113674],{},[413,113670,113671],{"align":23826},[46,113672,113673],{},"action_space",[413,113675,23744],{"align":23826},[14,113677,113678],{},"一个最小环境需要完成:",[39,113680,113683],{"className":113681,"code":113682,"language":5278,"meta":44},[5276],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[46,113684,113682],{"__ignoreMap":44},[195,113686,113688,101081,113691,104701],{"id":113687},"terminated-和-truncated-的区别",[46,113689,113690],{},"terminated",[46,113692,113693],{},"truncated",[14,113695,113696],{},"Gymnasium 把“结束”拆成两个概念：",[361,113698,113699,113709],{},[364,113700,113701],{},[367,113702,113703,113705,113707],{},[370,113704,104637],{"align":23826},[370,113706,100763],{"align":23826},[370,113708,21277],{"align":23826},[408,113710,113711,113723],{},[367,113712,113713,113717,113720],{},[413,113714,113715],{"align":23826},[46,113716,113690],{},[413,113718,113719],{"align":23826},"任务自然结束",[413,113721,113722],{"align":23826},"机械臂到达目标、机器人摔倒",[367,113724,113725,113729,113732],{},[413,113726,113727],{"align":23826},[46,113728,113693],{},[413,113730,113731],{"align":23826},"因外部限制截断",[413,113733,113734],{"align":23826},"达到最大步数、时间限制",[14,113736,113737],{},"本章中：",[39,113739,113741],{"className":41,"code":113740,"language":43,"meta":44,"style":44},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[46,113742,113743,113758],{"__ignoreMap":44},[49,113744,113745,113748,113750,113753,113755],{"class":51,"line":52},[49,113746,113747],{"class":55},"terminated ",[49,113749,60],{"class":59},[49,113751,113752],{"class":55}," dist ",[49,113754,1129],{"class":59},[49,113756,113757],{"class":66}," 0.05\n",[49,113759,113760,113763,113765,113767,113770,113772,113774],{"class":51,"line":84},[49,113761,113762],{"class":55},"truncated ",[49,113764,60],{"class":59},[49,113766,38962],{"class":66},[49,113768,113769],{"class":55},".steps ",[49,113771,1802],{"class":59},[49,113773,38962],{"class":66},[49,113775,113776],{"class":55},".max_steps\n",[14,113778,113779],{},"也就是：",[178,113781,113782,113785],{},[181,113783,113784],{},"末端距离目标小于 0.05，任务成功结束。",[181,113786,113787],{},"步数超过上限，episode 被截断。",[195,113789,113791,101081,113793],{"id":113790},"observation_space-和-action_space",[46,113792,113663],{},[46,113794,113673],{},[14,113796,113797],{},"这两个对象告诉算法：",[39,113799,113802],{"className":113800,"code":113801,"language":5278,"meta":44},[5276],"观测长什么样\n动作允许多大\n",[46,113803,113801],{"__ignoreMap":44},[14,113805,14723],{},[39,113807,113809],{"className":41,"code":113808,"language":43,"meta":44,"style":44},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[46,113810,113811],{"__ignoreMap":44},[49,113812,113813,113815,113818,113820,113823,113826,113829,113831,113833,113836,113838,113840,113842,113844,113846,113848,113850,113853,113855,113857],{"class":51,"line":52},[49,113814,30912],{"class":66},[49,113816,113817],{"class":55},".action_space ",[49,113819,60],{"class":59},[49,113821,113822],{"class":55}," spaces.Box(",[49,113824,113825],{"class":126},"low",[49,113827,113828],{"class":59},"=-",[49,113830,102466],{"class":66},[49,113832,12525],{"class":55},[49,113834,113835],{"class":126},"high",[49,113837,60],{"class":59},[49,113839,102466],{"class":66},[49,113841,12525],{"class":55},[49,113843,96026],{"class":126},[49,113845,60],{"class":59},[49,113847,228],{"class":55},[49,113849,301],{"class":66},[49,113851,113852],{"class":55},",), ",[49,113854,93563],{"class":126},[49,113856,60],{"class":59},[49,113858,113859],{"class":55},"np.float32)\n",[14,113861,113862,113863,113866],{},"表示动作是 2 维数组，每个值都在 ",[46,113864,113865],{},"[-1, 1]"," 范围内。",[39,113868,113870],{"className":41,"code":113869,"language":43,"meta":44,"style":44},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[46,113871,113872],{"__ignoreMap":44},[49,113873,113874,113876,113879,113881,113883,113885,113887,113890,113892,113894,113896,113898,113900,113902,113904,113906,113908,113910],{"class":51,"line":52},[49,113875,30912],{"class":66},[49,113877,113878],{"class":55},".observation_space ",[49,113880,60],{"class":59},[49,113882,113822],{"class":55},[49,113884,113825],{"class":126},[49,113886,113828],{"class":59},[49,113888,113889],{"class":55},"np.inf, ",[49,113891,113835],{"class":126},[49,113893,60],{"class":59},[49,113895,113889],{"class":55},[49,113897,96026],{"class":126},[49,113899,60],{"class":59},[49,113901,228],{"class":55},[49,113903,95],{"class":66},[49,113905,113852],{"class":55},[49,113907,93563],{"class":126},[49,113909,60],{"class":59},[49,113911,113859],{"class":55},[14,113913,113914],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[195,113916,113918],{"id":113917},"frame_skip-是什么","frame_skip 是什么",[39,113920,113922],{"className":41,"code":113921,"language":43,"meta":44,"style":44},"self.frame_skip = 5\n",[46,113923,113924],{"__ignoreMap":44},[49,113925,113926,113928,113931,113933],{"class":51,"line":52},[49,113927,30912],{"class":66},[49,113929,113930],{"class":55},".frame_skip ",[49,113932,60],{"class":59},[49,113934,54516],{"class":66},[14,113936,113937,113938,113941,113942,113944],{},"表示外部调用一次 ",[46,113939,113940],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[46,113943,101278],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[166,113946,101316],{"id":101315},[39,113948,113950],{"className":41,"code":113949,"language":43,"meta":44,"style":44},"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",[46,113951,113952,113964,113970,113980,113991,113995,113999,114007,114012,114016,114020,114024,114028,114032,114036,114040,114045,114049,114053,114057,114062,114066,114070,114074,114078,114082,114086,114090,114094,114098,114102,114106,114110,114114,114132,114147,114151,114164,114174,114189,114206,114210,114231,114250,114275,114289,114293,114303,114315,114325,114329,114371,114409,114413,114423,114439,114454,114473,114480,114484,114497,114512,114527,114540,114559,114575,114579,114620,114635,114650,114654,114693,114704,114717,114721,114731,114740,114744,114754,114769,114787,114791,114802,114819,114832,114836,114846,114850,114861,114872,114876,114890,114904,114920,114924,114937,114954,114969,114976,114980,114984,114996,115006,115024,115036,115048,115052,115060,115076,115085,115094,115102,115144,115157,115162,115166,115184,115188,115192,115204],{"__ignoreMap":44},[49,113953,113954,113956,113959,113961],{"class":51,"line":52},[49,113955,30481],{"class":59},[49,113957,113958],{"class":55}," gymnasium ",[49,113960,31472],{"class":59},[49,113962,113963],{"class":55}," gym\n",[49,113965,113966,113968],{"class":51,"line":84},[49,113967,30481],{"class":59},[49,113969,101364],{"class":55},[49,113971,113972,113974,113976,113978],{"class":51,"line":109},[49,113973,30481],{"class":59},[49,113975,31469],{"class":55},[49,113977,31472],{"class":59},[49,113979,31475],{"class":55},[49,113981,113982,113984,113986,113988],{"class":51,"line":120},[49,113983,30826],{"class":59},[49,113985,113958],{"class":55},[49,113987,30481],{"class":59},[49,113989,113990],{"class":55}," spaces\n",[49,113992,113993],{"class":51,"line":135},[49,113994,2492],{"emptyLinePlaceholder":151},[49,113996,113997],{"class":51,"line":1306},[49,113998,2492],{"emptyLinePlaceholder":151},[49,114000,114001,114003,114005],{"class":51,"line":1312},[49,114002,101377],{"class":66},[49,114004,13654],{"class":59},[49,114006,101382],{"class":328},[49,114008,114009],{"class":51,"line":1403},[49,114010,114011],{"class":328},"\u003Cmujoco model=\"gym_reacher\">\n",[49,114013,114014],{"class":51,"line":1409},[49,114015,111801],{"class":328},[49,114017,114018],{"class":51,"line":1421},[49,114019,2492],{"emptyLinePlaceholder":151},[49,114021,114022],{"class":51,"line":1704},[49,114023,101401],{"class":328},[49,114025,114026],{"class":51,"line":1709},[49,114027,111819],{"class":328},[49,114029,114030],{"class":51,"line":1715},[49,114031,2492],{"emptyLinePlaceholder":151},[49,114033,114034],{"class":51,"line":1720},[49,114035,111828],{"class":328},[49,114037,114038],{"class":51,"line":1734},[49,114039,111833],{"class":328},[49,114041,114042],{"class":51,"line":1739},[49,114043,114044],{"class":328},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,114046,114047],{"class":51,"line":1745},[49,114048,2492],{"emptyLinePlaceholder":151},[49,114050,114051],{"class":51,"line":1766},[49,114052,111847],{"class":328},[49,114054,114055],{"class":51,"line":1771},[49,114056,111852],{"class":328},[49,114058,114059],{"class":51,"line":1785},[49,114060,114061],{"class":328},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,114063,114064],{"class":51,"line":1790},[49,114065,111862],{"class":328},[49,114067,114068],{"class":51,"line":1819},[49,114069,106501],{"class":328},[49,114071,114072],{"class":51,"line":1824},[49,114073,101430],{"class":328},[49,114075,114076],{"class":51,"line":1841},[49,114077,101435],{"class":328},[49,114079,114080],{"class":51,"line":1846},[49,114081,2492],{"emptyLinePlaceholder":151},[49,114083,114084],{"class":51,"line":1851},[49,114085,106518],{"class":328},[49,114087,114088],{"class":51,"line":1856},[49,114089,111887],{"class":328},[49,114091,114092],{"class":51,"line":1870},[49,114093,111892],{"class":328},[49,114095,114096],{"class":51,"line":1875},[49,114097,106528],{"class":328},[49,114099,114100],{"class":51,"line":2669},[49,114101,101440],{"class":328},[49,114103,114104],{"class":51,"line":2683},[49,114105,95761],{"class":328},[49,114107,114108],{"class":51,"line":2691},[49,114109,2492],{"emptyLinePlaceholder":151},[49,114111,114112],{"class":51,"line":2696},[49,114113,2492],{"emptyLinePlaceholder":151},[49,114115,114116,114118,114121,114123,114125,114127,114130],{"class":51,"line":2702},[49,114117,14784],{"class":59},[49,114119,114120],{"class":2055}," ReacherEnv",[49,114122,228],{"class":55},[49,114124,113603],{"class":2055},[49,114126,777],{"class":55},[49,114128,114129],{"class":2055},"Env",[49,114131,30875],{"class":55},[49,114133,114134,114137,114139,114141,114144],{"class":51,"line":2708},[49,114135,114136],{"class":55},"    metadata ",[49,114138,60],{"class":59},[49,114140,4540],{"class":55},[49,114142,114143],{"class":328},"\"render_modes\"",[49,114145,114146],{"class":55},": []}\n",[49,114148,114149],{"class":51,"line":2713},[49,114150,2492],{"emptyLinePlaceholder":151},[49,114152,114153,114155,114157,114160,114162],{"class":51,"line":8038},[49,114154,30890],{"class":59},[49,114156,30893],{"class":66},[49,114158,114159],{"class":55},"(self) -> ",[49,114161,95749],{"class":66},[49,114163,3831],{"class":55},[49,114165,114166,114168,114170,114172],{"class":51,"line":8062},[49,114167,30906],{"class":66},[49,114169,17351],{"class":55},[49,114171,30918],{"class":66},[49,114173,2068],{"class":55},[49,114175,114176,114178,114181,114183,114185,114187],{"class":51,"line":8067},[49,114177,30934],{"class":66},[49,114179,114180],{"class":55},".model ",[49,114182,60],{"class":59},[49,114184,101475],{"class":55},[49,114186,101377],{"class":66},[49,114188,81],{"class":55},[49,114190,114191,114193,114196,114198,114201,114203],{"class":51,"line":8073},[49,114192,30934],{"class":66},[49,114194,114195],{"class":55},".data ",[49,114197,60],{"class":59},[49,114199,114200],{"class":55}," mujoco.MjData(",[49,114202,30912],{"class":66},[49,114204,114205],{"class":55},".model)\n",[49,114207,114208],{"class":51,"line":8100},[49,114209,2492],{"emptyLinePlaceholder":151},[49,114211,114212,114214,114217,114219,114222,114224,114227,114229],{"class":51,"line":8105},[49,114213,30934],{"class":66},[49,114215,114216],{"class":55},".tip_site_id ",[49,114218,60],{"class":59},[49,114220,114221],{"class":55}," mujoco.mj_name2id(",[49,114223,30912],{"class":66},[49,114225,114226],{"class":55},".model, mujoco.mjtObj.mjOBJ_SITE, ",[49,114228,111599],{"class":328},[49,114230,81],{"class":55},[49,114232,114233,114235,114238,114240,114242,114244,114246,114248],{"class":51,"line":8111},[49,114234,30934],{"class":66},[49,114236,114237],{"class":55},".target_site_id ",[49,114239,60],{"class":59},[49,114241,114221],{"class":55},[49,114243,30912],{"class":66},[49,114245,114226],{"class":55},[49,114247,112022],{"class":328},[49,114249,81],{"class":55},[49,114251,114252,114254,114256,114258,114260,114262,114265,114267,114269,114271,114273],{"class":51,"line":8123},[49,114253,2589],{"class":59},[49,114255,38962],{"class":66},[49,114257,114216],{"class":55},[49,114259,1129],{"class":59},[49,114261,4185],{"class":66},[49,114263,114264],{"class":59}," or",[49,114266,38962],{"class":66},[49,114268,114237],{"class":55},[49,114270,1129],{"class":59},[49,114272,4185],{"class":66},[49,114274,3831],{"class":55},[49,114276,114277,114280,114282,114284,114287],{"class":51,"line":8135},[49,114278,114279],{"class":59},"            raise",[49,114281,103498],{"class":66},[49,114283,228],{"class":55},[49,114285,114286],{"class":328},"\"required sites not found\"",[49,114288,81],{"class":55},[49,114290,114291],{"class":51,"line":8147},[49,114292,2492],{"emptyLinePlaceholder":151},[49,114294,114295,114297,114299,114301],{"class":51,"line":9806},[49,114296,30934],{"class":66},[49,114298,113930],{"class":55},[49,114300,60],{"class":59},[49,114302,54516],{"class":66},[49,114304,114305,114307,114310,114312],{"class":51,"line":9831},[49,114306,30934],{"class":66},[49,114308,114309],{"class":55},".max_steps ",[49,114311,60],{"class":59},[49,114313,114314],{"class":66}," 200\n",[49,114316,114317,114319,114321,114323],{"class":51,"line":9854},[49,114318,30934],{"class":66},[49,114320,113769],{"class":55},[49,114322,60],{"class":59},[49,114324,47422],{"class":66},[49,114326,114327],{"class":51,"line":9878},[49,114328,2492],{"emptyLinePlaceholder":151},[49,114330,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357,114359,114361,114363,114365,114367,114369],{"class":51,"line":9883},[49,114332,30934],{"class":66},[49,114334,113817],{"class":55},[49,114336,60],{"class":59},[49,114338,113822],{"class":55},[49,114340,113825],{"class":126},[49,114342,113828],{"class":59},[49,114344,102466],{"class":66},[49,114346,12525],{"class":55},[49,114348,113835],{"class":126},[49,114350,60],{"class":59},[49,114352,102466],{"class":66},[49,114354,12525],{"class":55},[49,114356,96026],{"class":126},[49,114358,60],{"class":59},[49,114360,228],{"class":55},[49,114362,301],{"class":66},[49,114364,113852],{"class":55},[49,114366,93563],{"class":126},[49,114368,60],{"class":59},[49,114370,113859],{"class":55},[49,114372,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391,114393,114395,114397,114399,114401,114403,114405,114407],{"class":51,"line":9888},[49,114374,30934],{"class":66},[49,114376,113878],{"class":55},[49,114378,60],{"class":59},[49,114380,113822],{"class":55},[49,114382,113825],{"class":126},[49,114384,113828],{"class":59},[49,114386,113889],{"class":55},[49,114388,113835],{"class":126},[49,114390,60],{"class":59},[49,114392,113889],{"class":55},[49,114394,96026],{"class":126},[49,114396,60],{"class":59},[49,114398,228],{"class":55},[49,114400,95],{"class":66},[49,114402,113852],{"class":55},[49,114404,93563],{"class":126},[49,114406,60],{"class":59},[49,114408,113859],{"class":55},[49,114410,114411],{"class":51,"line":9893},[49,114412,2492],{"emptyLinePlaceholder":151},[49,114414,114415,114417,114420],{"class":51,"line":9902},[49,114416,30890],{"class":59},[49,114418,114419],{"class":2055}," _get_obs",[49,114421,114422],{"class":55},"(self) -> np.ndarray:\n",[49,114424,114425,114427,114429,114431,114434,114436],{"class":51,"line":9907},[49,114426,112200],{"class":55},[49,114428,60],{"class":59},[49,114430,38962],{"class":66},[49,114432,114433],{"class":55},".data.site_xpos[",[49,114435,30912],{"class":66},[49,114437,114438],{"class":55},".tip_site_id].copy()\n",[49,114440,114441,114443,114445,114447,114449,114451],{"class":51,"line":9913},[49,114442,112213],{"class":55},[49,114444,60],{"class":59},[49,114446,38962],{"class":66},[49,114448,114433],{"class":55},[49,114450,30912],{"class":66},[49,114452,114453],{"class":55},".target_site_id].copy()\n",[49,114455,114456,114458,114460,114463,114465,114468,114470],{"class":51,"line":9934},[49,114457,110245],{"class":55},[49,114459,60],{"class":59},[49,114461,114462],{"class":55}," np.concatenate([",[49,114464,30912],{"class":66},[49,114466,114467],{"class":55},".data.qpos.copy(), ",[49,114469,30912],{"class":66},[49,114471,114472],{"class":55},".data.qvel.copy(), tip, target])\n",[49,114474,114475,114477],{"class":51,"line":9940},[49,114476,14842],{"class":59},[49,114478,114479],{"class":55}," obs.astype(np.float32)\n",[49,114481,114482],{"class":51,"line":9954},[49,114483,2492],{"emptyLinePlaceholder":151},[49,114485,114486,114488,114491,114493,114495],{"class":51,"line":9960},[49,114487,30890],{"class":59},[49,114489,114490],{"class":2055}," _get_reward",[49,114492,114159],{"class":55},[49,114494,266],{"class":66},[49,114496,3831],{"class":55},[49,114498,114499,114501,114503,114505,114507,114509],{"class":51,"line":9987},[49,114500,112200],{"class":55},[49,114502,60],{"class":59},[49,114504,38962],{"class":66},[49,114506,114433],{"class":55},[49,114508,30912],{"class":66},[49,114510,114511],{"class":55},".tip_site_id]\n",[49,114513,114514,114516,114518,114520,114522,114524],{"class":51,"line":9996},[49,114515,112213],{"class":55},[49,114517,60],{"class":59},[49,114519,38962],{"class":66},[49,114521,114433],{"class":55},[49,114523,30912],{"class":66},[49,114525,114526],{"class":55},".target_site_id]\n",[49,114528,114529,114532,114534,114536,114538],{"class":51,"line":10002},[49,114530,114531],{"class":55},"        dist ",[49,114533,60],{"class":59},[49,114535,111664],{"class":55},[49,114537,751],{"class":59},[49,114539,111669],{"class":55},[49,114541,114542,114545,114547,114549,114551,114554,114556],{"class":51,"line":10010},[49,114543,114544],{"class":55},"        control_cost ",[49,114546,60],{"class":59},[49,114548,112100],{"class":66},[49,114550,6608],{"class":59},[49,114552,114553],{"class":55}," np.sum(np.square(",[49,114555,30912],{"class":66},[49,114557,114558],{"class":55},".data.ctrl))\n",[49,114560,114561,114563,114565,114567,114569,114571,114573],{"class":51,"line":10015},[49,114562,14842],{"class":59},[49,114564,109860],{"class":66},[49,114566,228],{"class":55},[49,114568,751],{"class":59},[49,114570,111659],{"class":55},[49,114572,751],{"class":59},[49,114574,112122],{"class":55},[49,114576,114577],{"class":51,"line":16694},[49,114578,2492],{"emptyLinePlaceholder":151},[49,114580,114581,114583,114586,114589,114591,114594,114596,114598,114600,114602,114604,114607,114610,114612,114614,114616,114618],{"class":51,"line":16700},[49,114582,30890],{"class":59},[49,114584,114585],{"class":2055}," reset",[49,114587,114588],{"class":55},"(self, ",[49,114590,674],{"class":59},[49,114592,114593],{"class":55},", seed: ",[49,114595,231],{"class":66},[49,114597,25200],{"class":59},[49,114599,39022],{"class":66},[49,114601,13654],{"class":59},[49,114603,39022],{"class":66},[49,114605,114606],{"class":55},", options: ",[49,114608,114609],{"class":66},"dict",[49,114611,25200],{"class":59},[49,114613,39022],{"class":66},[49,114615,13654],{"class":59},[49,114617,39022],{"class":66},[49,114619,30875],{"class":55},[49,114621,114622,114624,114627,114630,114632],{"class":51,"line":16723},[49,114623,30906],{"class":66},[49,114625,114626],{"class":55},"().reset(",[49,114628,114629],{"class":126},"seed",[49,114631,60],{"class":59},[49,114633,114634],{"class":55},"seed)\n",[49,114636,114637,114640,114642,114645,114647],{"class":51,"line":16729},[49,114638,114639],{"class":55},"        mujoco.mj_resetData(",[49,114641,30912],{"class":66},[49,114643,114644],{"class":55},".model, ",[49,114646,30912],{"class":66},[49,114648,114649],{"class":55},".data)\n",[49,114651,114652],{"class":51,"line":16752},[49,114653,2492],{"emptyLinePlaceholder":151},[49,114655,114656,114658,114661,114663,114665,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686,114688,114690],{"class":51,"line":16766},[49,114657,30934],{"class":66},[49,114659,114660],{"class":55},".data.qpos[:] ",[49,114662,60],{"class":59},[49,114664,38962],{"class":66},[49,114666,114667],{"class":55},".np_random.uniform(",[49,114669,113825],{"class":126},[49,114671,113828],{"class":59},[49,114673,86299],{"class":66},[49,114675,12525],{"class":55},[49,114677,113835],{"class":126},[49,114679,60],{"class":59},[49,114681,86299],{"class":66},[49,114683,12525],{"class":55},[49,114685,31585],{"class":126},[49,114687,60],{"class":59},[49,114689,30912],{"class":66},[49,114691,114692],{"class":55},".model.nq)\n",[49,114694,114695,114697,114700,114702],{"class":51,"line":16786},[49,114696,30934],{"class":66},[49,114698,114699],{"class":55},".data.qvel[:] ",[49,114701,60],{"class":59},[49,114703,104824],{"class":66},[49,114705,114706,114709,114711,114713,114715],{"class":51,"line":16792},[49,114707,114708],{"class":55},"        mujoco.mj_forward(",[49,114710,30912],{"class":66},[49,114712,114644],{"class":55},[49,114714,30912],{"class":66},[49,114716,114649],{"class":55},[49,114718,114719],{"class":51,"line":16803},[49,114720,2492],{"emptyLinePlaceholder":151},[49,114722,114723,114725,114727,114729],{"class":51,"line":16826},[49,114724,30934],{"class":66},[49,114726,113769],{"class":55},[49,114728,60],{"class":59},[49,114730,47422],{"class":66},[49,114732,114733,114735,114737],{"class":51,"line":16848},[49,114734,14842],{"class":59},[49,114736,38962],{"class":66},[49,114738,114739],{"class":55},"._get_obs(), {}\n",[49,114741,114742],{"class":51,"line":16853},[49,114743,2492],{"emptyLinePlaceholder":151},[49,114745,114746,114748,114751],{"class":51,"line":16859},[49,114747,30890],{"class":59},[49,114749,114750],{"class":2055}," step",[49,114752,114753],{"class":55},"(self, action):\n",[49,114755,114756,114758,114760,114763,114765,114767],{"class":51,"line":16873},[49,114757,110285],{"class":55},[49,114759,60],{"class":59},[49,114761,114762],{"class":55}," np.asarray(action, ",[49,114764,93563],{"class":126},[49,114766,60],{"class":59},[49,114768,113859],{"class":55},[49,114770,114771,114773,114775,114777,114779,114782,114784],{"class":51,"line":16886},[49,114772,110285],{"class":55},[49,114774,60],{"class":59},[49,114776,107510],{"class":55},[49,114778,30912],{"class":66},[49,114780,114781],{"class":55},".action_space.low, ",[49,114783,30912],{"class":66},[49,114785,114786],{"class":55},".action_space.high)\n",[49,114788,114789],{"class":51,"line":16891},[49,114790,2492],{"emptyLinePlaceholder":151},[49,114792,114793,114795,114798,114800],{"class":51,"line":16905},[49,114794,30934],{"class":66},[49,114796,114797],{"class":55},".data.ctrl[:] ",[49,114799,60],{"class":59},[49,114801,107533],{"class":55},[49,114803,114804,114806,114808,114810,114812,114814,114816],{"class":51,"line":16910},[49,114805,3495],{"class":59},[49,114807,101564],{"class":55},[49,114809,26134],{"class":59},[49,114811,32532],{"class":66},[49,114813,228],{"class":55},[49,114815,30912],{"class":66},[49,114817,114818],{"class":55},".frame_skip):\n",[49,114820,114821,114824,114826,114828,114830],{"class":51,"line":16916},[49,114822,114823],{"class":55},"            mujoco.mj_step(",[49,114825,30912],{"class":66},[49,114827,114644],{"class":55},[49,114829,30912],{"class":66},[49,114831,114649],{"class":55},[49,114833,114834],{"class":51,"line":16921},[49,114835,2492],{"emptyLinePlaceholder":151},[49,114837,114838,114840,114842,114844],{"class":51,"line":16935},[49,114839,30934],{"class":66},[49,114841,113769],{"class":55},[49,114843,9567],{"class":59},[49,114845,55788],{"class":66},[49,114847,114848],{"class":51,"line":16940},[49,114849,2492],{"emptyLinePlaceholder":151},[49,114851,114852,114854,114856,114858],{"class":51,"line":16945},[49,114853,110245],{"class":55},[49,114855,60],{"class":59},[49,114857,38962],{"class":66},[49,114859,114860],{"class":55},"._get_obs()\n",[49,114862,114863,114865,114867,114869],{"class":51,"line":16959},[49,114864,110350],{"class":55},[49,114866,60],{"class":59},[49,114868,38962],{"class":66},[49,114870,114871],{"class":55},"._get_reward()\n",[49,114873,114874],{"class":51,"line":16971},[49,114875,2492],{"emptyLinePlaceholder":151},[49,114877,114878,114880,114882,114884,114886,114888],{"class":51,"line":16976},[49,114879,112200],{"class":55},[49,114881,60],{"class":59},[49,114883,38962],{"class":66},[49,114885,114433],{"class":55},[49,114887,30912],{"class":66},[49,114889,114511],{"class":55},[49,114891,114892,114894,114896,114898,114900,114902],{"class":51,"line":16989},[49,114893,112213],{"class":55},[49,114895,60],{"class":59},[49,114897,38962],{"class":66},[49,114899,114433],{"class":55},[49,114901,30912],{"class":66},[49,114903,114526],{"class":55},[49,114905,114906,114908,114910,114912,114915,114917],{"class":51,"line":16994},[49,114907,114531],{"class":55},[49,114909,60],{"class":59},[49,114911,109860],{"class":66},[49,114913,114914],{"class":55},"(np.linalg.norm(tip ",[49,114916,751],{"class":59},[49,114918,114919],{"class":55}," target))\n",[49,114921,114922],{"class":51,"line":16999},[49,114923,2492],{"emptyLinePlaceholder":151},[49,114925,114926,114929,114931,114933,114935],{"class":51,"line":17004},[49,114927,114928],{"class":55},"        terminated ",[49,114930,60],{"class":59},[49,114932,113752],{"class":55},[49,114934,1129],{"class":59},[49,114936,113757],{"class":66},[49,114938,114939,114942,114944,114946,114948,114950,114952],{"class":51,"line":17017},[49,114940,114941],{"class":55},"        truncated ",[49,114943,60],{"class":59},[49,114945,38962],{"class":66},[49,114947,113769],{"class":55},[49,114949,1802],{"class":59},[49,114951,38962],{"class":66},[49,114953,113776],{"class":55},[49,114955,114956,114959,114961,114963,114966],{"class":51,"line":17022},[49,114957,114958],{"class":55},"        info ",[49,114960,60],{"class":59},[49,114962,4540],{"class":55},[49,114964,114965],{"class":328},"\"distance\"",[49,114967,114968],{"class":55},": dist}\n",[49,114970,114971,114973],{"class":51,"line":32722},[49,114972,14842],{"class":59},[49,114974,114975],{"class":55}," obs, reward, terminated, truncated, info\n",[49,114977,114978],{"class":51,"line":32728},[49,114979,2492],{"emptyLinePlaceholder":151},[49,114981,114982],{"class":51,"line":32734},[49,114983,2492],{"emptyLinePlaceholder":151},[49,114985,114986,114988,114990,114992,114994],{"class":51,"line":32740},[49,114987,32036],{"class":59},[49,114989,2065],{"class":2055},[49,114991,101461],{"class":55},[49,114993,95749],{"class":66},[49,114995,3831],{"class":55},[49,114997,114998,115001,115003],{"class":51,"line":32746},[49,114999,115000],{"class":55},"    env ",[49,115002,60],{"class":59},[49,115004,115005],{"class":55}," ReacherEnv()\n",[49,115007,115008,115011,115013,115016,115018,115020,115022],{"class":51,"line":32757},[49,115009,115010],{"class":55},"    obs, info ",[49,115012,60],{"class":59},[49,115014,115015],{"class":55}," env.reset(",[49,115017,114629],{"class":126},[49,115019,60],{"class":59},[49,115021,415],{"class":66},[49,115023,81],{"class":55},[49,115025,115026,115028,115030,115033],{"class":51,"line":32763},[49,115027,31388],{"class":66},[49,115029,228],{"class":55},[49,115031,115032],{"class":328},"\"initial obs shape:\"",[49,115034,115035],{"class":55},", obs.shape)\n",[49,115037,115038,115040,115042,115045],{"class":51,"line":32783},[49,115039,31388],{"class":66},[49,115041,228],{"class":55},[49,115043,115044],{"class":328},"\"initial info:\"",[49,115046,115047],{"class":55},", info)\n",[49,115049,115050],{"class":51,"line":32789},[49,115051,2492],{"emptyLinePlaceholder":151},[49,115053,115054,115056,115058],{"class":51,"line":32800},[49,115055,110216],{"class":55},[49,115057,60],{"class":59},[49,115059,104824],{"class":66},[49,115061,115062,115064,115066,115068,115070,115072,115074],{"class":51,"line":32806},[49,115063,3293],{"class":59},[49,115065,31705],{"class":55},[49,115067,26134],{"class":59},[49,115069,32532],{"class":66},[49,115071,228],{"class":55},[49,115073,919],{"class":66},[49,115075,30875],{"class":55},[49,115077,115078,115080,115082],{"class":51,"line":32812},[49,115079,110285],{"class":55},[49,115081,60],{"class":59},[49,115083,115084],{"class":55}," env.action_space.sample()\n",[49,115086,115087,115090,115092],{"class":51,"line":32818},[49,115088,115089],{"class":55},"        obs, reward, terminated, truncated, info ",[49,115091,60],{"class":59},[49,115093,113478],{"class":55},[49,115095,115096,115098,115100],{"class":51,"line":32824},[49,115097,110360],{"class":55},[49,115099,9567],{"class":59},[49,115101,110365],{"class":55},[49,115103,115104,115106,115108,115110,115112,115115,115117,115119,115122,115124,115126,115129,115131,115133,115136,115138,115140,115142],{"class":51,"line":32830},[49,115105,32540],{"class":66},[49,115107,228],{"class":55},[49,115109,110394],{"class":328},[49,115111,110397],{"class":55},[49,115113,115114],{"class":328},"\"reward:\"",[49,115116,12525],{"class":55},[49,115118,32107],{"class":66},[49,115120,115121],{"class":55},"(reward, ",[49,115123,73],{"class":66},[49,115125,110408],{"class":55},[49,115127,115128],{"class":328},"\"distance:\"",[49,115130,12525],{"class":55},[49,115132,32107],{"class":66},[49,115134,115135],{"class":55},"(info[",[49,115137,114965],{"class":328},[49,115139,112265],{"class":55},[49,115141,73],{"class":66},[49,115143,30586],{"class":55},[49,115145,115146,115148,115151,115154],{"class":51,"line":32836},[49,115147,2589],{"class":59},[49,115149,115150],{"class":55}," terminated ",[49,115152,115153],{"class":59},"or",[49,115155,115156],{"class":55}," truncated:\n",[49,115158,115159],{"class":51,"line":32842},[49,115160,115161],{"class":59},"            break\n",[49,115163,115164],{"class":51,"line":32862},[49,115165,2492],{"emptyLinePlaceholder":151},[49,115167,115168,115170,115172,115174,115176,115178,115180,115182],{"class":51,"line":32868},[49,115169,31388],{"class":66},[49,115171,228],{"class":55},[49,115173,110439],{"class":328},[49,115175,12525],{"class":55},[49,115177,32107],{"class":66},[49,115179,110446],{"class":55},[49,115181,73],{"class":66},[49,115183,30586],{"class":55},[49,115185,115186],{"class":51,"line":32884},[49,115187,2492],{"emptyLinePlaceholder":151},[49,115189,115190],{"class":51,"line":32890},[49,115191,2492],{"emptyLinePlaceholder":151},[49,115193,115194,115196,115198,115200,115202],{"class":51,"line":32904},[49,115195,1623],{"class":59},[49,115197,31309],{"class":66},[49,115199,101622],{"class":59},[49,115201,101625],{"class":328},[49,115203,3831],{"class":55},[49,115205,115206],{"class":51,"line":32910},[49,115207,101632],{"class":55},[14,115209,103633],{},[39,115211,115213],{"className":23912,"code":115212,"language":23914,"meta":44,"style":44},"touch ch8_gym_env.py\n",[46,115214,115215],{"__ignoreMap":44},[49,115216,115217,115219],{"class":51,"line":52},[49,115218,101346],{"class":2055},[49,115220,115221],{"class":328}," ch8_gym_env.py\n",[14,115223,110507],{},[39,115225,115227],{"className":23912,"code":115226,"language":23914,"meta":44,"style":44},"python ch8_gym_env.py\n",[46,115228,115229],{"__ignoreMap":44},[49,115230,115231,115233],{"class":51,"line":52},[49,115232,43],{"class":2055},[49,115234,115221],{"class":328},[195,115236,101635],{"id":101635},[14,115238,115239],{},"继承 Gymnasium 环境：",[39,115241,115243],{"className":41,"code":115242,"language":43,"meta":44,"style":44},"class ReacherEnv(gym.Env):\n",[46,115244,115245],{"__ignoreMap":44},[49,115246,115247,115249,115251,115253,115255,115257,115259],{"class":51,"line":52},[49,115248,14784],{"class":59},[49,115250,114120],{"class":2055},[49,115252,228],{"class":55},[49,115254,113603],{"class":2055},[49,115256,777],{"class":55},[49,115258,114129],{"class":2055},[49,115260,30875],{"class":55},[14,115262,115263],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115265,115266],{},"初始化模型：",[39,115268,115270],{"className":41,"code":115269,"language":43,"meta":44,"style":44},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[46,115271,115272,115286],{"__ignoreMap":44},[49,115273,115274,115276,115278,115280,115282,115284],{"class":51,"line":52},[49,115275,30912],{"class":66},[49,115277,114180],{"class":55},[49,115279,60],{"class":59},[49,115281,101475],{"class":55},[49,115283,101377],{"class":66},[49,115285,81],{"class":55},[49,115287,115288,115290,115292,115294,115296,115298],{"class":51,"line":84},[49,115289,30912],{"class":66},[49,115291,114195],{"class":55},[49,115293,60],{"class":59},[49,115295,114200],{"class":55},[49,115297,30912],{"class":66},[49,115299,114205],{"class":55},[14,115301,115302,115303,115305],{},"这和前面章节一样，只是现在放到了类的 ",[46,115304,30918],{}," 里。",[14,115307,115308],{},"缓存 site ID：",[39,115310,115312],{"className":41,"code":115311,"language":43,"meta":44,"style":44},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[46,115313,115314,115328],{"__ignoreMap":44},[49,115315,115316,115318,115320,115322,115324,115326],{"class":51,"line":52},[49,115317,30912],{"class":66},[49,115319,114216],{"class":55},[49,115321,60],{"class":59},[49,115323,114221],{"class":55},[49,115325,89643],{"class":66},[49,115327,81],{"class":55},[49,115329,115330,115332,115334,115336,115338,115340],{"class":51,"line":84},[49,115331,30912],{"class":66},[49,115333,114237],{"class":55},[49,115335,60],{"class":59},[49,115337,114221],{"class":55},[49,115339,89643],{"class":66},[49,115341,81],{"class":55},[14,115343,115344],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115346,115347],{},"reset：",[39,115349,115351],{"className":41,"code":115350,"language":43,"meta":44,"style":44},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[46,115352,115353],{"__ignoreMap":44},[49,115354,115355,115357,115359,115361,115363,115365,115367,115369,115371,115373,115375,115377,115379,115381,115383,115385,115387],{"class":51,"line":52},[49,115356,32036],{"class":59},[49,115358,114585],{"class":2055},[49,115360,114588],{"class":55},[49,115362,674],{"class":59},[49,115364,114593],{"class":55},[49,115366,231],{"class":66},[49,115368,25200],{"class":59},[49,115370,39022],{"class":66},[49,115372,13654],{"class":59},[49,115374,39022],{"class":66},[49,115376,114606],{"class":55},[49,115378,114609],{"class":66},[49,115380,25200],{"class":59},[49,115382,39022],{"class":66},[49,115384,13654],{"class":59},[49,115386,39022],{"class":66},[49,115388,30875],{"class":55},[14,115390,115391,115393],{},[46,115392,70145],{}," 做四件事：",[178,115395,115396,115399,115402,115405],{},[181,115397,115398],{},"设置随机种子。",[181,115400,115401],{},"重置 MuJoCo data。",[181,115403,115404],{},"随机初始化关节角。",[181,115406,115407],{},"返回初始观测和 info。",[14,115409,115410],{},"step：",[39,115412,115414],{"className":41,"code":115413,"language":43,"meta":44,"style":44},"def step(self, action):\n",[46,115415,115416],{"__ignoreMap":44},[49,115417,115418,115420,115422],{"class":51,"line":52},[49,115419,32036],{"class":59},[49,115421,114750],{"class":2055},[49,115423,114753],{"class":55},[14,115425,115426,115428],{},[46,115427,107197],{}," 做六件事：",[178,115430,115431,115434,115440,115443,115446,115449],{},[181,115432,115433],{},"检查并裁剪 action。",[181,115435,115436,115437,28476],{},"写入 ",[46,115438,115439],{},"self.data.ctrl",[181,115441,115442],{},"连续推进若干个 MuJoCo 物理步。",[181,115444,115445],{},"计算新观测。",[181,115447,115448],{},"计算奖励和结束条件。",[181,115450,115451],{},"返回 Gymnasium 标准五元组。",[195,115453,101771],{"id":101771},[39,115455,115457],{"className":41,"code":115456,"language":43,"meta":44,"style":44},"import gymnasium as gym\n",[46,115458,115459],{"__ignoreMap":44},[49,115460,115461,115463,115465,115467],{"class":51,"line":52},[49,115462,30481],{"class":59},[49,115464,113958],{"class":55},[49,115466,31472],{"class":59},[49,115468,113963],{"class":55},[14,115470,115471,115472,115474,115475,115478],{},"导入 Gymnasium，并起别名 ",[46,115473,113603],{},"。后面写 ",[46,115476,115477],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[39,115480,115482],{"className":41,"code":115481,"language":43,"meta":44,"style":44},"from gymnasium import spaces\n",[46,115483,115484],{"__ignoreMap":44},[49,115485,115486,115488,115490,115492],{"class":51,"line":52},[49,115487,30826],{"class":59},[49,115489,113958],{"class":55},[49,115491,30481],{"class":59},[49,115493,113990],{"class":55},[14,115495,115496,115497,115500],{},"导入空间定义工具。",[46,115498,115499],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[39,115502,115503],{"className":41,"code":115242,"language":43,"meta":44,"style":44},[46,115504,115505],{"__ignoreMap":44},[49,115506,115507,115509,115511,115513,115515,115517,115519],{"class":51,"line":52},[49,115508,14784],{"class":59},[49,115510,114120],{"class":2055},[49,115512,228],{"class":55},[49,115514,113603],{"class":2055},[49,115516,777],{"class":55},[49,115518,114129],{"class":2055},[49,115520,30875],{"class":55},[14,115522,115523,115524,115527,115528,115530,115531,101081,115533,115535],{},"定义一个类，名字叫 ",[46,115525,115526],{},"ReacherEnv","。括号里的 ",[46,115529,115477],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[46,115532,70145],{},[46,115534,107197],{}," 这两个核心方法。",[39,115537,115539],{"className":41,"code":115538,"language":43,"meta":44,"style":44},"metadata = {\"render_modes\": []}\n",[46,115540,115541],{"__ignoreMap":44},[49,115542,115543,115546,115548,115550,115552],{"class":51,"line":52},[49,115544,115545],{"class":55},"metadata ",[49,115547,60],{"class":59},[49,115549,4540],{"class":55},[49,115551,114143],{"class":328},[49,115553,114146],{"class":55},[14,115555,115556],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[39,115558,115560],{"className":41,"code":115559,"language":43,"meta":44,"style":44},"def __init__(self) -> None:\n",[46,115561,115562],{"__ignoreMap":44},[49,115563,115564,115566,115568,115570,115572],{"class":51,"line":52},[49,115565,32036],{"class":59},[49,115567,30893],{"class":66},[49,115569,114159],{"class":55},[49,115571,95749],{"class":66},[49,115573,3831],{"class":55},[14,115575,115576,115578,115579,28476],{},[46,115577,30918],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[46,115580,115581],{},"env = ReacherEnv()",[39,115583,115585],{"className":41,"code":115584,"language":43,"meta":44,"style":44},"super().__init__()\n",[46,115586,115587],{"__ignoreMap":44},[49,115588,115589,115592,115594,115596],{"class":51,"line":52},[49,115590,115591],{"class":66},"super",[49,115593,17351],{"class":55},[49,115595,30918],{"class":66},[49,115597,2068],{"class":55},[14,115599,115600,115601,115603],{},"调用父类 ",[46,115602,115477],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[39,115605,115606],{"className":41,"code":115269,"language":43,"meta":44,"style":44},[46,115607,115608,115622],{"__ignoreMap":44},[49,115609,115610,115612,115614,115616,115618,115620],{"class":51,"line":52},[49,115611,30912],{"class":66},[49,115613,114180],{"class":55},[49,115615,60],{"class":59},[49,115617,101475],{"class":55},[49,115619,101377],{"class":66},[49,115621,81],{"class":55},[49,115623,115624,115626,115628,115630,115632,115634],{"class":51,"line":84},[49,115625,30912],{"class":66},[49,115627,114195],{"class":55},[49,115629,60],{"class":59},[49,115631,114200],{"class":55},[49,115633,30912],{"class":66},[49,115635,114205],{"class":55},[14,115637,115638,115639,115641,115642,101081,115645,115648],{},"把 MuJoCo 模型和状态保存到 ",[46,115640,30912],{}," 上。",[46,115643,115644],{},"self.model",[46,115646,115647],{},"self.data"," 表示这个环境对象自己的模型和状态。",[39,115650,115651],{"className":41,"code":115311,"language":43,"meta":44,"style":44},[46,115652,115653,115667],{"__ignoreMap":44},[49,115654,115655,115657,115659,115661,115663,115665],{"class":51,"line":52},[49,115656,30912],{"class":66},[49,115658,114216],{"class":55},[49,115660,60],{"class":59},[49,115662,114221],{"class":55},[49,115664,89643],{"class":66},[49,115666,81],{"class":55},[49,115668,115669,115671,115673,115675,115677,115679],{"class":51,"line":84},[49,115670,30912],{"class":66},[49,115672,114237],{"class":55},[49,115674,60],{"class":59},[49,115676,114221],{"class":55},[49,115678,89643],{"class":66},[49,115680,81],{"class":55},[14,115682,115683,115684,101081,115687,115690],{},"提前查好 tip 和 target 的 site ID。这样 ",[46,115685,115686],{},"_get_obs",[46,115688,115689],{},"_get_reward"," 里就不用每次按名字查找。",[39,115692,115694],{"className":41,"code":115693,"language":43,"meta":44,"style":44},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[46,115695,115696,115706,115716],{"__ignoreMap":44},[49,115697,115698,115700,115702,115704],{"class":51,"line":52},[49,115699,30912],{"class":66},[49,115701,113930],{"class":55},[49,115703,60],{"class":59},[49,115705,54516],{"class":66},[49,115707,115708,115710,115712,115714],{"class":51,"line":84},[49,115709,30912],{"class":66},[49,115711,114309],{"class":55},[49,115713,60],{"class":59},[49,115715,114314],{"class":66},[49,115717,115718,115720,115722,115724],{"class":51,"line":109},[49,115719,30912],{"class":66},[49,115721,113769],{"class":55},[49,115723,60],{"class":59},[49,115725,47422],{"class":66},[14,115727,115728,115731,115732,115735,115736,115739],{},[46,115729,115730],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[46,115733,115734],{},"max_steps"," 是一个 episode 最多运行多少步。",[46,115737,115738],{},"steps"," 记录当前 episode 已经走了多少步。",[39,115741,115742],{"className":41,"code":113808,"language":43,"meta":44,"style":44},[46,115743,115744],{"__ignoreMap":44},[49,115745,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782,115784],{"class":51,"line":52},[49,115747,30912],{"class":66},[49,115749,113817],{"class":55},[49,115751,60],{"class":59},[49,115753,113822],{"class":55},[49,115755,113825],{"class":126},[49,115757,113828],{"class":59},[49,115759,102466],{"class":66},[49,115761,12525],{"class":55},[49,115763,113835],{"class":126},[49,115765,60],{"class":59},[49,115767,102466],{"class":66},[49,115769,12525],{"class":55},[49,115771,96026],{"class":126},[49,115773,60],{"class":59},[49,115775,228],{"class":55},[49,115777,301],{"class":66},[49,115779,113852],{"class":55},[49,115781,93563],{"class":126},[49,115783,60],{"class":59},[49,115785,113859],{"class":55},[14,115787,115788,115789,115792,115793,101081,115796,115799],{},"定义动作空间。",[46,115790,115791],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[46,115794,115795],{},"low=-1.0",[46,115797,115798],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[39,115801,115802],{"className":41,"code":113869,"language":43,"meta":44,"style":44},[46,115803,115804],{"__ignoreMap":44},[49,115805,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824,115826,115828,115830,115832,115834,115836,115838,115840],{"class":51,"line":52},[49,115807,30912],{"class":66},[49,115809,113878],{"class":55},[49,115811,60],{"class":59},[49,115813,113822],{"class":55},[49,115815,113825],{"class":126},[49,115817,113828],{"class":59},[49,115819,113889],{"class":55},[49,115821,113835],{"class":126},[49,115823,60],{"class":59},[49,115825,113889],{"class":55},[49,115827,96026],{"class":126},[49,115829,60],{"class":59},[49,115831,228],{"class":55},[49,115833,95],{"class":66},[49,115835,113852],{"class":55},[49,115837,93563],{"class":126},[49,115839,60],{"class":59},[49,115841,113859],{"class":55},[14,115843,115844,115845,115848,115849,115852],{},"定义观测空间。",[46,115846,115847],{},"shape=(10,)"," 表示观测是 10 个数。",[46,115850,115851],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[39,115854,115856],{"className":41,"code":115855,"language":43,"meta":44,"style":44},"def _get_obs(self) -> np.ndarray:\n",[46,115857,115858],{"__ignoreMap":44},[49,115859,115860,115862,115864],{"class":51,"line":52},[49,115861,32036],{"class":59},[49,115863,114419],{"class":2055},[49,115865,114422],{"class":55},[14,115867,115868,115869,115871],{},"定义内部函数，用来生成观测。函数名前面的 ",[46,115870,1211],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[39,115873,115875],{"className":41,"code":115874,"language":43,"meta":44,"style":44},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[46,115876,115877,115891],{"__ignoreMap":44},[49,115878,115879,115881,115883,115885,115887,115889],{"class":51,"line":52},[49,115880,111631],{"class":55},[49,115882,60],{"class":59},[49,115884,38962],{"class":66},[49,115886,114433],{"class":55},[49,115888,30912],{"class":66},[49,115890,114438],{"class":55},[49,115892,115893,115895,115897,115899,115901,115903],{"class":51,"line":84},[49,115894,111641],{"class":55},[49,115896,60],{"class":59},[49,115898,38962],{"class":66},[49,115900,114433],{"class":55},[49,115902,30912],{"class":66},[49,115904,114453],{"class":55},[14,115906,115907],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[39,115909,115911],{"className":41,"code":115910,"language":43,"meta":44,"style":44},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[46,115912,115913,115929],{"__ignoreMap":44},[49,115914,115915,115917,115919,115921,115923,115925,115927],{"class":51,"line":52},[49,115916,110917],{"class":55},[49,115918,60],{"class":59},[49,115920,114462],{"class":55},[49,115922,30912],{"class":66},[49,115924,114467],{"class":55},[49,115926,30912],{"class":66},[49,115928,114472],{"class":55},[49,115930,115931,115933],{"class":51,"line":84},[49,115932,17136],{"class":59},[49,115934,114479],{"class":55},[14,115936,115937,115938,115941,115942,115944],{},"拼接观测，并转换成 ",[46,115939,115940],{},"float32","。很多强化学习库默认使用 ",[46,115943,115940],{},"，所以这里主动转换。",[39,115946,115947],{"className":41,"code":115350,"language":43,"meta":44,"style":44},[46,115948,115949],{"__ignoreMap":44},[49,115950,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983],{"class":51,"line":52},[49,115952,32036],{"class":59},[49,115954,114585],{"class":2055},[49,115956,114588],{"class":55},[49,115958,674],{"class":59},[49,115960,114593],{"class":55},[49,115962,231],{"class":66},[49,115964,25200],{"class":59},[49,115966,39022],{"class":66},[49,115968,13654],{"class":59},[49,115970,39022],{"class":66},[49,115972,114606],{"class":55},[49,115974,114609],{"class":66},[49,115976,25200],{"class":59},[49,115978,39022],{"class":66},[49,115980,13654],{"class":59},[49,115982,39022],{"class":66},[49,115984,30875],{"class":55},[14,115986,115987,115988,115990,115991,115994],{},"定义 reset。",[46,115989,114629],{}," 用来控制随机数，保证实验可以复现。",[46,115992,115993],{},"options"," 用来接收额外配置，本章暂时不用。",[39,115996,115998],{"className":41,"code":115997,"language":43,"meta":44,"style":44},"super().reset(seed=seed)\n",[46,115999,116000],{"__ignoreMap":44},[49,116001,116002,116004,116006,116008,116010],{"class":51,"line":52},[49,116003,115591],{"class":66},[49,116005,114626],{"class":55},[49,116007,114629],{"class":126},[49,116009,60],{"class":59},[49,116011,114634],{"class":55},[14,116013,116014,116015,116018],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[46,116016,116017],{},"self.np_random"," 生成可复现的随机数。",[39,116020,116022],{"className":41,"code":116021,"language":43,"meta":44,"style":44},"mujoco.mj_resetData(self.model, self.data)\n",[46,116023,116024],{"__ignoreMap":44},[49,116025,116026,116029,116031,116033,116035],{"class":51,"line":52},[49,116027,116028],{"class":55},"mujoco.mj_resetData(",[49,116030,30912],{"class":66},[49,116032,114644],{"class":55},[49,116034,30912],{"class":66},[49,116036,114649],{"class":55},[14,116038,116039],{},"把 MuJoCo 状态重置到默认状态。",[39,116041,116043],{"className":41,"code":116042,"language":43,"meta":44,"style":44},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[46,116044,116045],{"__ignoreMap":44},[49,116046,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075,116077,116079],{"class":51,"line":52},[49,116048,30912],{"class":66},[49,116050,114660],{"class":55},[49,116052,60],{"class":59},[49,116054,38962],{"class":66},[49,116056,114667],{"class":55},[49,116058,113825],{"class":126},[49,116060,113828],{"class":59},[49,116062,86299],{"class":66},[49,116064,12525],{"class":55},[49,116066,113835],{"class":126},[49,116068,60],{"class":59},[49,116070,86299],{"class":66},[49,116072,12525],{"class":55},[49,116074,31585],{"class":126},[49,116076,60],{"class":59},[49,116078,30912],{"class":66},[49,116080,114692],{"class":55},[14,116082,115404,116083,116086,116087,116090,116091,116093],{},[46,116084,116085],{},"[:]"," 表示修改整个数组。",[46,116088,116089],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[46,116092,102213],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[39,116095,116097],{"className":41,"code":116096,"language":43,"meta":44,"style":44},"self.data.qvel[:] = 0.0\n",[46,116098,116099],{"__ignoreMap":44},[49,116100,116101,116103,116105,116107],{"class":51,"line":52},[49,116102,30912],{"class":66},[49,116104,114699],{"class":55},[49,116106,60],{"class":59},[49,116108,104824],{"class":66},[14,116110,116111],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[39,116113,116115],{"className":41,"code":116114,"language":43,"meta":44,"style":44},"self.steps = 0\nreturn self._get_obs(), {}\n",[46,116116,116117,116127],{"__ignoreMap":44},[49,116118,116119,116121,116123,116125],{"class":51,"line":52},[49,116120,30912],{"class":66},[49,116122,113769],{"class":55},[49,116124,60],{"class":59},[49,116126,47422],{"class":66},[49,116128,116129,116131,116133],{"class":51,"line":84},[49,116130,17136],{"class":59},[49,116132,38962],{"class":66},[49,116134,114739],{"class":55},[14,116136,116137],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[39,116139,116140],{"className":41,"code":115413,"language":43,"meta":44,"style":44},[46,116141,116142],{"__ignoreMap":44},[49,116143,116144,116146,116148],{"class":51,"line":52},[49,116145,32036],{"class":59},[49,116147,114750],{"class":2055},[49,116149,114753],{"class":55},[14,116151,116152],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[39,116154,116156],{"className":41,"code":116155,"language":43,"meta":44,"style":44},"action = np.asarray(action, dtype=np.float32)\n",[46,116157,116158],{"__ignoreMap":44},[49,116159,116160,116162,116164,116166,116168,116170],{"class":51,"line":52},[49,116161,107505],{"class":55},[49,116163,60],{"class":59},[49,116165,114762],{"class":55},[49,116167,93563],{"class":126},[49,116169,60],{"class":59},[49,116171,113859],{"class":55},[14,116173,116174,116175,28476],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[46,116176,115940],{},[39,116178,116180],{"className":41,"code":116179,"language":43,"meta":44,"style":44},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[46,116181,116182],{"__ignoreMap":44},[49,116183,116184,116186,116188,116190,116192,116194,116196],{"class":51,"line":52},[49,116185,107505],{"class":55},[49,116187,60],{"class":59},[49,116189,107510],{"class":55},[49,116191,30912],{"class":66},[49,116193,114781],{"class":55},[49,116195,30912],{"class":66},[49,116197,114786],{"class":55},[14,116199,116200],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[39,116202,116204],{"className":41,"code":116203,"language":43,"meta":44,"style":44},"self.data.ctrl[:] = action\n",[46,116205,116206],{"__ignoreMap":44},[49,116207,116208,116210,116212,116214],{"class":51,"line":52},[49,116209,30912],{"class":66},[49,116211,114797],{"class":55},[49,116213,60],{"class":59},[49,116215,107533],{"class":55},[14,116217,116218],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[39,116220,116222],{"className":41,"code":116221,"language":43,"meta":44,"style":44},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[46,116223,116224,116240],{"__ignoreMap":44},[49,116225,116226,116228,116230,116232,116234,116236,116238],{"class":51,"line":52},[49,116227,3117],{"class":59},[49,116229,101564],{"class":55},[49,116231,26134],{"class":59},[49,116233,32532],{"class":66},[49,116235,228],{"class":55},[49,116237,30912],{"class":66},[49,116239,114818],{"class":55},[49,116241,116242,116245,116247,116249,116251],{"class":51,"line":84},[49,116243,116244],{"class":55},"    mujoco.mj_step(",[49,116246,30912],{"class":66},[49,116248,114644],{"class":55},[49,116250,30912],{"class":66},[49,116252,114649],{"class":55},[14,116254,116255,116256,116259,116260,116262,116263,28476],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[46,116257,116258],{},"frame_skip=5","，所以外部调用一次 ",[46,116261,113940],{},"，内部实际执行 5 次 ",[46,116264,101278],{},[39,116266,116268],{"className":41,"code":116267,"language":43,"meta":44,"style":44},"self.steps += 1\n",[46,116269,116270],{"__ignoreMap":44},[49,116271,116272,116274,116276,116278],{"class":51,"line":52},[49,116273,30912],{"class":66},[49,116275,113769],{"class":55},[49,116277,9567],{"class":59},[49,116279,55788],{"class":66},[14,116281,116282],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[39,116284,116286],{"className":41,"code":116285,"language":43,"meta":44,"style":44},"obs = self._get_obs()\nreward = self._get_reward()\n",[46,116287,116288,116298],{"__ignoreMap":44},[49,116289,116290,116292,116294,116296],{"class":51,"line":52},[49,116291,110917],{"class":55},[49,116293,60],{"class":59},[49,116295,38962],{"class":66},[49,116297,114860],{"class":55},[49,116299,116300,116302,116304,116306],{"class":51,"line":84},[49,116301,111068],{"class":55},[49,116303,60],{"class":59},[49,116305,38962],{"class":66},[49,116307,114871],{"class":55},[14,116309,116310],{},"计算新的观测和奖励。",[39,116312,116314],{"className":41,"code":116313,"language":43,"meta":44,"style":44},"dist = float(np.linalg.norm(tip - target))\n",[46,116315,116316],{"__ignoreMap":44},[49,116317,116318,116320,116322,116324,116326,116328],{"class":51,"line":52},[49,116319,111659],{"class":55},[49,116321,60],{"class":59},[49,116323,109860],{"class":66},[49,116325,114914],{"class":55},[49,116327,751],{"class":59},[49,116329,114919],{"class":55},[14,116331,116332],{},"计算末端到目标的距离，并转换成 Python float。",[39,116334,116335],{"className":41,"code":113740,"language":43,"meta":44,"style":44},[46,116336,116337,116349],{"__ignoreMap":44},[49,116338,116339,116341,116343,116345,116347],{"class":51,"line":52},[49,116340,113747],{"class":55},[49,116342,60],{"class":59},[49,116344,113752],{"class":55},[49,116346,1129],{"class":59},[49,116348,113757],{"class":66},[49,116350,116351,116353,116355,116357,116359,116361,116363],{"class":51,"line":84},[49,116352,113762],{"class":55},[49,116354,60],{"class":59},[49,116356,38962],{"class":66},[49,116358,113769],{"class":55},[49,116360,1802],{"class":59},[49,116362,38962],{"class":66},[49,116364,113776],{"class":55},[14,116366,116367],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[39,116369,116371],{"className":41,"code":116370,"language":43,"meta":44,"style":44},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[46,116372,116373,116386],{"__ignoreMap":44},[49,116374,116375,116378,116380,116382,116384],{"class":51,"line":52},[49,116376,116377],{"class":55},"info ",[49,116379,60],{"class":59},[49,116381,4540],{"class":55},[49,116383,114965],{"class":328},[49,116385,114968],{"class":55},[49,116387,116388,116390],{"class":51,"line":84},[49,116389,17136],{"class":59},[49,116391,114975],{"class":55},[14,116393,116394,116397],{},[46,116395,116396],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[39,116399,116401],{"className":41,"code":116400,"language":43,"meta":44,"style":44},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[46,116402,116403,116412],{"__ignoreMap":44},[49,116404,116405,116408,116410],{"class":51,"line":52},[49,116406,116407],{"class":55},"env ",[49,116409,60],{"class":59},[49,116411,115005],{"class":55},[49,116413,116414,116416,116418,116420,116422,116424,116426],{"class":51,"line":84},[49,116415,113463],{"class":55},[49,116417,60],{"class":59},[49,116419,115015],{"class":55},[49,116421,114629],{"class":126},[49,116423,60],{"class":59},[49,116425,415],{"class":66},[49,116427,81],{"class":55},[14,116429,116430,116431,116434],{},"创建环境并重置。",[46,116432,116433],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[39,116436,116438],{"className":41,"code":116437,"language":43,"meta":44,"style":44},"action = env.action_space.sample()\n",[46,116439,116440],{"__ignoreMap":44},[49,116441,116442,116444,116446],{"class":51,"line":52},[49,116443,107505],{"class":55},[49,116445,60],{"class":59},[49,116447,115084],{"class":55},[14,116449,116450],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[166,116452,102379],{"id":102378},[14,116454,105547],{},[39,116456,116459],{"className":116457,"code":116458,"language":5278,"meta":44},[5276],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[46,116460,116458],{"__ignoreMap":44},[14,116462,116463],{},"这个环境已经具备强化学习环境的基本结构。",[14,116465,116466],{},"主函数里使用随机动作：",[39,116468,116469],{"className":41,"code":116437,"language":43,"meta":44,"style":44},[46,116470,116471],{"__ignoreMap":44},[49,116472,116473,116475,116477],{"class":51,"line":52},[49,116474,107505],{"class":55},[49,116476,60],{"class":59},[49,116478,115084],{"class":55},[14,116480,116481],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[166,116483,102411],{"id":102410},[178,116485,116486,116489,116495,116504,116513,116522,116528],{},[181,116487,116488],{},"运行程序。",[181,116490,116491,116492,28476],{},"确认 ",[46,116493,116494],{},"obs.shape == (10,)",[181,116496,111244,116497,116500,116501,28476],{},[46,116498,116499],{},"env.action_space","，应类似 ",[46,116502,116503],{},"Box(-1.0, 1.0, (2,), float32)",[181,116505,105648,116506,116509,116510,28476],{},[46,116507,116508],{},"self.max_steps = 10","，确认环境会更快 ",[46,116511,116512],{},"truncated=True",[181,116514,102474,116515,102477,116518,116521],{},[46,116516,116517],{},"terminated = dist \u003C 0.05",[46,116519,116520],{},"dist \u003C 0.2","，观察是否更容易结束。",[181,116523,102474,116524,116527],{},[46,116525,116526],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[181,116529,116530,116531,116533,116534,116537],{},"在 ",[46,116532,116396],{}," 里加入 ",[46,116535,116536],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[166,116539,102516],{"id":102515},[195,116541,116543],{"id":116542},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116545,116546,116547,116549],{},"Gymnasium 的 ",[46,116548,107197],{}," 返回 5 个值:",[39,116551,116553],{"className":41,"code":116552,"language":43,"meta":44,"style":44},"obs, reward, terminated, truncated, info\n",[46,116554,116555],{"__ignoreMap":44},[49,116556,116557],{"class":51,"line":52},[49,116558,116552],{"class":55},[14,116560,116561],{},"不是旧 Gym 的 4 个值。",[195,116563,116565,116568],{"id":116564},"datactrl-action-维度错误",[46,116566,116567],{},"data.ctrl[:] = action"," 维度错误",[14,116570,102586],{},[39,116572,116574],{"className":41,"code":116573,"language":43,"meta":44,"style":44},"print(self.model.nu)\nprint(action.shape)\n",[46,116575,116576,116587],{"__ignoreMap":44},[49,116577,116578,116580,116582,116584],{"class":51,"line":52},[49,116579,30504],{"class":66},[49,116581,228],{"class":55},[49,116583,30912],{"class":66},[49,116585,116586],{"class":55},".model.nu)\n",[49,116588,116589,116591],{"class":51,"line":84},[49,116590,30504],{"class":66},[49,116592,116593],{"class":55},"(action.shape)\n",[14,116595,116596],{},"两者必须匹配。",[195,116598,116600],{"id":116599},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116602,102525],{},[39,116604,116606],{"className":41,"code":116605,"language":43,"meta":44,"style":44},"mujoco.mj_forward(self.model, self.data)\n",[46,116607,116608],{"__ignoreMap":44},[49,116609,116610,116613,116615,116617,116619],{"class":51,"line":52},[49,116611,116612],{"class":55},"mujoco.mj_forward(",[49,116614,30912],{"class":66},[49,116616,114644],{"class":55},[49,116618,30912],{"class":66},[49,116620,114649],{"class":55},[195,116622,116624,116626],{"id":116623},"observation_space-维度和-obs-不一致",[46,116625,113663],{}," 维度和 obs 不一致",[14,116628,102638],{},[39,116630,116632],{"className":41,"code":116631,"language":43,"meta":44,"style":44},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[46,116633,116634,116644,116651],{"__ignoreMap":44},[49,116635,116636,116638,116640,116642],{"class":51,"line":52},[49,116637,110917],{"class":55},[49,116639,60],{"class":59},[49,116641,38962],{"class":66},[49,116643,114860],{"class":55},[49,116645,116646,116648],{"class":51,"line":84},[49,116647,30504],{"class":66},[49,116649,116650],{"class":55},"(obs.shape)\n",[49,116652,116653,116655,116657,116659],{"class":51,"line":109},[49,116654,30504],{"class":66},[49,116656,228],{"class":55},[49,116658,30912],{"class":66},[49,116660,116661],{"class":55},".observation_space.shape)\n",[14,116663,116664],{},"两者必须一致。本章观测是：",[39,116666,116669],{"className":116667,"code":116668,"language":5278,"meta":44},[5276],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[46,116670,116668],{"__ignoreMap":44},[195,116672,116674],{"id":116673},"action-超过范围","action 超过范围",[14,116676,116677],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[39,116679,116680],{"className":41,"code":116179,"language":43,"meta":44,"style":44},[46,116681,116682],{"__ignoreMap":44},[49,116683,116684,116686,116688,116690,116692,116694,116696],{"class":51,"line":52},[49,116685,107505],{"class":55},[49,116687,60],{"class":59},[49,116689,107510],{"class":55},[49,116691,30912],{"class":66},[49,116693,114781],{"class":55},[49,116695,30912],{"class":66},[49,116697,114786],{"class":55},[14,116699,116700,116701,28476],{},"这能避免无效动作直接写入 ",[46,116702,101139],{},[195,116704,116706],{"id":116705},"忘记返回-info","忘记返回 info",[14,116708,116546,116709,101081,116711,116713],{},[46,116710,70145],{},[46,116712,107197],{}," 都会返回 info：",[39,116715,116716],{"className":41,"code":113456,"language":43,"meta":44,"style":44},[46,116717,116718,116726],{"__ignoreMap":44},[49,116719,116720,116722,116724],{"class":51,"line":52},[49,116721,113463],{"class":55},[49,116723,60],{"class":59},[49,116725,113468],{"class":55},[49,116727,116728,116730,116732],{"class":51,"line":84},[49,116729,113473],{"class":55},[49,116731,60],{"class":59},[49,116733,113478],{"class":55},[14,116735,116736,116737,28476],{},"即使暂时没有额外信息，也返回 ",[46,116738,32548],{},[166,116740,116742],{"id":116741},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116744,116745],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[178,116747,116748,116751,116754,116757,116760,116763],{},[181,116749,116750],{},"更稳定的 reward。",[181,116752,116753],{},"合理的 episode 长度。",[181,116755,116756],{},"可重复的随机目标采样。",[181,116758,116759],{},"render 接口。",[181,116761,116762],{},"环境注册代码。",[181,116764,116765],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116767,116768],{},"如果只是自己写训练循环，最小形式是：",[39,116770,116772],{"className":41,"code":116771,"language":43,"meta":44,"style":44},"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",[46,116773,116774,116782,116798,116802,116818,116827,116836,116846],{"__ignoreMap":44},[49,116775,116776,116778,116780],{"class":51,"line":52},[49,116777,116407],{"class":55},[49,116779,60],{"class":59},[49,116781,115005],{"class":55},[49,116783,116784,116786,116788,116790,116792,116794,116796],{"class":51,"line":84},[49,116785,113463],{"class":55},[49,116787,60],{"class":59},[49,116789,115015],{"class":55},[49,116791,114629],{"class":126},[49,116793,60],{"class":59},[49,116795,415],{"class":66},[49,116797,81],{"class":55},[49,116799,116800],{"class":51,"line":109},[49,116801,2492],{"emptyLinePlaceholder":151},[49,116803,116804,116806,116808,116810,116812,116814,116816],{"class":51,"line":120},[49,116805,3117],{"class":59},[49,116807,101564],{"class":55},[49,116809,26134],{"class":59},[49,116811,32532],{"class":66},[49,116813,228],{"class":55},[49,116815,6500],{"class":66},[49,116817,30875],{"class":55},[49,116819,116820,116823,116825],{"class":51,"line":135},[49,116821,116822],{"class":55},"    action ",[49,116824,60],{"class":59},[49,116826,115084],{"class":55},[49,116828,116829,116832,116834],{"class":51,"line":1306},[49,116830,116831],{"class":55},"    obs, reward, terminated, truncated, info ",[49,116833,60],{"class":59},[49,116835,113478],{"class":55},[49,116837,116838,116840,116842,116844],{"class":51,"line":1312},[49,116839,3193],{"class":59},[49,116841,115150],{"class":55},[49,116843,115153],{"class":59},[49,116845,115156],{"class":55},[49,116847,116848,116851,116853],{"class":51,"line":1403},[49,116849,116850],{"class":55},"        obs, info ",[49,116852,60],{"class":59},[49,116854,113468],{"class":55},[166,116856,116858],{"id":116857},"_9本章小结","9.本章小结",[14,116860,116861],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[39,116863,116866],{"className":116864,"code":116865,"language":5278,"meta":44},[5276],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[46,116867,116865],{"__ignoreMap":44},[14,116869,116870],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[143,116872,116873],{},"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":44,"searchDepth":84,"depth":84,"links":116875},[116876,116877,116878,116885,116889,116890,116891,116901,116902],{"id":100709,"depth":84,"text":100710},{"id":100832,"depth":84,"text":100833},{"id":101107,"depth":84,"text":101108,"children":116879},[116880,116882,116884],{"id":113687,"depth":109,"text":116881},"terminated 和 truncated 的区别",{"id":113790,"depth":109,"text":116883},"observation_space 和 action_space",{"id":113917,"depth":109,"text":113918},{"id":101315,"depth":84,"text":101316,"children":116886},[116887,116888],{"id":101635,"depth":109,"text":101635},{"id":101771,"depth":109,"text":101771},{"id":102378,"depth":84,"text":102379},{"id":102410,"depth":84,"text":102411},{"id":102515,"depth":84,"text":102516,"children":116892},[116893,116894,116896,116897,116899,116900],{"id":116542,"depth":109,"text":116543},{"id":116564,"depth":109,"text":116895},"data.ctrl[:] = action 维度错误",{"id":116599,"depth":109,"text":116600},{"id":116623,"depth":109,"text":116898},"observation_space 维度和 obs 不一致",{"id":116673,"depth":109,"text":116674},{"id":116705,"depth":109,"text":116706},{"id":116741,"depth":84,"text":116742},{"id":116857,"depth":84,"text":116858},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113440,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116909,"title":116910,"body":116911,"description":117334,"extension":149,"meta":117335,"navigation":151,"path":117336,"seo":117337,"stem":117338,"__hash__":117339},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116912,"toc":117324},[116913,116917,116920,116923,116943,116949,116955,116965,116968,116971,116991,116994,116998,117001,117007,117010,117024,117027,117030,117104,117107,117113,117116,117139,117142,117192,117195,117201,117204,117207,117210,117229,117232,117238,117241,117244,117247,117267,117270,117273,117276,117321],[10,116914,116916],{"id":116915},"mujoco-学习","MuJoCo 学习",[14,116918,116919],{},"初版",[14,116921,116922],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[178,116924,116925,116928,116931,116940],{},[181,116926,116927],{},"MuJoCo 模型文件在描述什么。",[181,116929,116930],{},"Python 代码怎样读取和推进仿真。",[181,116932,116933,436,116935,436,116937,116939],{},[46,116934,104093],{},[46,116936,104423],{},[46,116938,104426],{}," 这些数组为什么重要。",[181,116941,116942],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116944,116945,116946,116948],{},"默认环境为 Fedora 44、Python >= 3.10、",[46,116947,101090],{}," 官方 Python bindings。",[14,116950,116951,116952,116954],{},"注意：本文禁止使用 ",[46,116953,101075],{},"。所有示例均使用：",[39,116956,116957],{"className":41,"code":101641,"language":43,"meta":44,"style":44},[46,116958,116959],{"__ignoreMap":44},[49,116960,116961,116963],{"class":51,"line":52},[49,116962,30481],{"class":59},[49,116964,101364],{"class":55},[166,116966,116967],{"id":116967},"适合谁阅读",[14,116969,116970],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[178,116972,116973,116976,116979,116982],{},[181,116974,116975],{},"没学过 MuJoCo，只会一点 Python。",[181,116977,116978],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[181,116980,116981],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[181,116983,116984,116985,116987,116988,116990],{},"以前接触过 ",[46,116986,101075],{},"，现在想迁移到官方 ",[46,116989,101084],{}," Python bindings。",[14,116992,116993],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[166,116995,116997],{"id":116996},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116999,117000],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[39,117002,117005],{"className":117003,"code":117004,"language":5278,"meta":44},[5276],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[46,117006,117004],{"__ignoreMap":44},[14,117008,117009],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[178,117011,117012,117015,117018,117021],{},[181,117013,117014],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[181,117016,117017],{},"快速测试控制算法，不必一开始就上真实机器人。",[181,117019,117020],{},"生成强化学习环境。",[181,117022,117023],{},"采集状态、动作、图像、奖励等训练数据。",[166,117025,117026],{"id":117026},"学习前的心智模型",[14,117028,117029],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[361,117031,117032,117044],{},[364,117033,117034],{},[367,117035,117036,117039,117042],{},[370,117037,117038],{"align":23826},"部分",[370,117040,117041],{"align":23826},"负责什么",[370,117043,21277],{"align":23826},[408,117045,117046,117057,117069,117081,117093],{},[367,117047,117048,117051,117054],{},[413,117049,117050],{"align":23826},"MJCF XML",[413,117052,117053],{"align":23826},"定义世界和机器人结构",[413,117055,117056],{"align":23826},"地面、盒子、关节、电机、摄像头",[367,117058,117059,117063,117066],{},[413,117060,117061],{"align":23826},[46,117062,100772],{},[413,117064,117065],{"align":23826},"编译后的静态模型",[413,117067,117068],{"align":23826},"有几个关节、有几个电机、时间步长是多少",[367,117070,117071,117075,117078],{},[413,117072,117073],{"align":23826},[46,117074,100782],{},[413,117076,117077],{"align":23826},"运行中的动态状态",[413,117079,117080],{"align":23826},"当前时间、位置、速度、电机输入",[367,117082,117083,117087,117090],{},[413,117084,117085],{"align":23826},[46,117086,101278],{},[413,117088,117089],{"align":23826},"推进一步物理仿真",[413,117091,117092],{"align":23826},"根据重力、力、碰撞更新状态",[367,117094,117095,117098,117101],{},[413,117096,117097],{"align":23826},"Viewer \u002F Renderer",[413,117099,117100],{"align":23826},"把仿真显示出来",[413,117102,117103],{"align":23826},"打开窗口或保存图片",[14,117105,117106],{},"一句话总结：",[39,117108,117111],{"className":117109,"code":117110,"language":5278,"meta":44},[5276],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[46,117112,117110],{"__ignoreMap":44},[14,117114,117115],{},"参考来源：",[1226,117117,117118,117125,117132],{},[181,117119,117120,117121],{},"MuJoCo Python 官方文档：",[56,117122,117123],{"href":117123,"rel":117124},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23955],[181,117126,117127,117128],{},"MuJoCo XML Reference：",[56,117129,117130],{"href":117130,"rel":117131},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23955],[181,117133,117134,117135],{},"MuJoCo Overview：",[56,117136,117137],{"href":117137,"rel":117138},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23955],[166,117140,117141],{"id":117141},"章节目录",[178,117143,117144,117150,117156,117162,117168,117174,117180,117186],{},[181,117145,117146],{},[56,117147,117149],{"href":117148},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[181,117151,117152],{},[56,117153,117155],{"href":117154},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[181,117157,117158],{},[56,117159,117161],{"href":117160},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[181,117163,117164],{},[56,117165,117167],{"href":117166},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[181,117169,117170],{},[56,117171,117173],{"href":117172},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[181,117175,117176],{},[56,117177,117179],{"href":117178},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[181,117181,117182],{},[56,117183,117185],{"href":117184},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[181,117187,117188],{},[56,117189,117191],{"href":117190},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[166,117193,117194],{"id":117194},"推荐学习路线",[39,117196,117199],{"className":117197,"code":117198,"language":5278,"meta":44},[5276],"环境安装\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",[46,117200,117198],{"__ignoreMap":44},[14,117202,117203],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[166,117205,117206],{"id":117206},"建议的目录结构",[14,117208,117209],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[39,117211,117213],{"className":23912,"code":117212,"language":23914,"meta":44,"style":44},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[46,117214,117215,117223],{"__ignoreMap":44},[49,117216,117217,117219,117221],{"class":51,"line":52},[49,117218,101329],{"class":2055},[49,117220,29307],{"class":66},[49,117222,101334],{"class":328},[49,117224,117225,117227],{"class":51,"line":84},[49,117226,101339],{"class":66},[49,117228,101334],{"class":328},[14,117230,117231],{},"每一章的代码都单独保存：",[39,117233,117236],{"className":117234,"code":117235,"language":5278,"meta":44},[5276],"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",[46,117237,117235],{"__ignoreMap":44},[14,117239,117240],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[166,117242,117243],{"id":117243},"学习方法",[14,117245,117246],{},"每章建议按这个顺序操作：",[178,117248,117249,117252,117255,117258,117261,117264],{},[181,117250,117251],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[181,117253,117254],{},"复制最小可运行代码，保存成指定文件。",[181,117256,117257],{},"运行代码，确认没有报错。",[181,117259,117260],{},"对照“运行结果说明”理解输出。",[181,117262,117263],{},"做“验证步骤”，主动改一两个参数。",[181,117265,117266],{},"遇到报错先看“常见错误与解决方案”。",[14,117268,117269],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[166,117271,117272],{"id":117272},"全局排错顺序",[14,117274,117275],{},"遇到问题时，按下面顺序查：",[178,117277,117278,117284,117290,117295,117298,117301,117308,117318],{},[181,117279,117280,117281],{},"Python 环境是否激活：",[46,117282,117283],{},"which python",[181,117285,117286,117287],{},"MuJoCo 是否能导入：",[46,117288,117289],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[181,117291,117292,117293],{},"是否误装了 ",[46,117294,101075],{},[181,117296,117297],{},"XML 标签是否闭合、属性是否拼写正确",[181,117299,117300],{},"actuator 引用的 joint 名字是否存在",[181,117302,117303,117305,117306],{},[46,117304,101139],{}," 的长度是否等于 ",[46,117307,102221],{},[181,117309,105648,117310,82628,117312,117314,117315],{},[46,117311,104093],{},[46,117313,104423],{}," 后是否调用了 ",[46,117316,117317],{},"mujoco.mj_forward",[181,117319,117320],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[143,117322,117323],{},"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":44,"searchDepth":84,"depth":84,"links":117325},[117326,117327,117328,117329,117330,117331,117332,117333],{"id":116967,"depth":84,"text":116967},{"id":116996,"depth":84,"text":116997},{"id":117026,"depth":84,"text":117026},{"id":117141,"depth":84,"text":117141},{"id":117194,"depth":84,"text":117194},{"id":117206,"depth":84,"text":117206},{"id":117243,"depth":84,"text":117243},{"id":117272,"depth":84,"text":117272},"仿真搭建。",{"category":23468},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116910,"description":117334},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117341,"title":117342,"body":117343,"description":148,"extension":149,"meta":117798,"navigation":151,"path":117799,"seo":117800,"stem":117801,"__hash__":117802},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117344,"toc":117796},[117345,117348,117351,117357,117793],[10,117346,117342],{"id":117347},"_1-最常用的基本操作更新",[14,117349,117350],{},"装linux系统教程：",[14,117352,117353],{},[56,117354,117355],{"href":117355,"rel":117356},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23955],[39,117358,117362],{"className":117359,"code":117360,"language":117361,"meta":44,"style":44},"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",[46,117363,117364,117369,117374,117383,117388,117397,117402,117422,117427,117438,117443,117452,117457,117485,117490,117509,117514,117533,117537,117542,117558,117562,117567,117597,117601,117606,117622,117626,117631,117646,117650,117655,117671,117675,117680,117692,117704,117708,117713,117730,117734,117739,117757,117761,117766,117775,117779,117784],{"__ignoreMap":44},[49,117365,117366],{"class":51,"line":52},[49,117367,117368],{"class":283},"#更新相关的知识\n",[49,117370,117371],{"class":51,"line":84},[49,117372,117373],{"class":283},"# 更新软件包列表（从服务器获取最新软件信息）\n",[49,117375,117376,117378,117381],{"class":51,"line":109},[49,117377,24667],{"class":2055},[49,117379,117380],{"class":328}," apt",[49,117382,26333],{"class":328},[49,117384,117385],{"class":51,"line":120},[49,117386,117387],{"class":283},"# 升级所有可更新的软件包（不删除旧包）\n",[49,117389,117390,117392,117394],{"class":51,"line":135},[49,117391,24667],{"class":2055},[49,117393,117380],{"class":328},[49,117395,117396],{"class":328}," upgrade\n",[49,117398,117399],{"class":51,"line":1306},[49,117400,117401],{"class":283},"#更新和升级软件包\n",[49,117403,117404,117406,117408,117411,117413,117415,117417,117420],{"class":51,"line":1312},[49,117405,24667],{"class":2055},[49,117407,117380],{"class":328},[49,117409,117410],{"class":328}," update",[49,117412,26281],{"class":55},[49,117414,24667],{"class":2055},[49,117416,117380],{"class":328},[49,117418,117419],{"class":328}," upgrade",[49,117421,101044],{"class":66},[49,117423,117424],{"class":51,"line":1403},[49,117425,117426],{"class":283},"#列出可更新的软件包及版本信息\n",[49,117428,117429,117432,117435],{"class":51,"line":1409},[49,117430,117431],{"class":2055},"apt",[49,117433,117434],{"class":328}," list",[49,117436,117437],{"class":66}," --upgradable\n",[49,117439,117440],{"class":51,"line":1421},[49,117441,117442],{"class":283},"#彻底升级（处理依赖关系，可能删除旧包）\n",[49,117444,117445,117447,117449],{"class":51,"line":1704},[49,117446,24667],{"class":2055},[49,117448,117380],{"class":328},[49,117450,117451],{"class":328}," full-upgrade\n",[49,117453,117454],{"class":51,"line":1709},[49,117455,117456],{"class":283},"#设置指定版本\n",[49,117458,117459,117461,117463,117465,117467,117470,117472,117474,117476,117478,117481,117483],{"class":51,"line":1715},[49,117460,24667],{"class":2055},[49,117462,117380],{"class":328},[49,117464,23924],{"class":328},[49,117466,28993],{"class":59},[49,117468,117469],{"class":328},"package_nam",[49,117471,298],{"class":55},[49,117473,1179],{"class":59},[49,117475,60],{"class":328},[49,117477,1129],{"class":59},[49,117479,117480],{"class":328},"version_numbe",[49,117482,889],{"class":55},[49,117484,51396],{"class":59},[49,117486,117487],{"class":51,"line":1720},[49,117488,117489],{"class":283},"#只安装软件包不升级\n",[49,117491,117492,117494,117496,117498,117500,117502,117504,117506],{"class":51,"line":1734},[49,117493,24667],{"class":2055},[49,117495,117380],{"class":328},[49,117497,23924],{"class":328},[49,117499,28993],{"class":59},[49,117501,117469],{"class":328},[49,117503,298],{"class":55},[49,117505,1179],{"class":59},[49,117507,117508],{"class":66}," --no-upgrade\n",[49,117510,117511],{"class":51,"line":1739},[49,117512,117513],{"class":283},"#只升级，不存在就不安装\n",[49,117515,117516,117518,117520,117522,117524,117526,117528,117530],{"class":51,"line":1745},[49,117517,24667],{"class":2055},[49,117519,117380],{"class":328},[49,117521,23924],{"class":328},[49,117523,28993],{"class":59},[49,117525,117469],{"class":328},[49,117527,298],{"class":55},[49,117529,1179],{"class":59},[49,117531,117532],{"class":66}," --only-upgrade\n",[49,117534,117535],{"class":51,"line":1766},[49,117536,2492],{"emptyLinePlaceholder":151},[49,117538,117539],{"class":51,"line":1771},[49,117540,117541],{"class":283},"#安装指定的软件命令\n",[49,117543,117544,117546,117548,117550,117552,117554,117556],{"class":51,"line":1785},[49,117545,24667],{"class":2055},[49,117547,117380],{"class":328},[49,117549,23924],{"class":328},[49,117551,28993],{"class":59},[49,117553,117469],{"class":328},[49,117555,298],{"class":55},[49,117557,51396],{"class":59},[49,117559,117560],{"class":51,"line":1790},[49,117561,2492],{"emptyLinePlaceholder":151},[49,117563,117564],{"class":51,"line":1819},[49,117565,117566],{"class":283},"#安装多个软件包\n",[49,117568,117569,117571,117573,117575,117577,117580,117583,117585,117587,117590,117592,117594],{"class":51,"line":1824},[49,117570,24667],{"class":2055},[49,117572,117380],{"class":328},[49,117574,23924],{"class":328},[49,117576,28993],{"class":59},[49,117578,117579],{"class":328},"package_",[49,117581,117582],{"class":59},"1>",[49,117584,28993],{"class":59},[49,117586,117579],{"class":328},[49,117588,117589],{"class":59},"2>",[49,117591,28993],{"class":59},[49,117593,117579],{"class":328},[49,117595,117596],{"class":59},"3>\n",[49,117598,117599],{"class":51,"line":1841},[49,117600,2492],{"emptyLinePlaceholder":151},[49,117602,117603],{"class":51,"line":1846},[49,117604,117605],{"class":283},"#更新指定的软件命令\n",[49,117607,117608,117610,117612,117614,117616,117618,117620],{"class":51,"line":1851},[49,117609,24667],{"class":2055},[49,117611,117380],{"class":328},[49,117613,117410],{"class":328},[49,117615,28993],{"class":59},[49,117617,117469],{"class":328},[49,117619,298],{"class":55},[49,117621,51396],{"class":59},[49,117623,117624],{"class":51,"line":1856},[49,117625,2492],{"emptyLinePlaceholder":151},[49,117627,117628],{"class":51,"line":1870},[49,117629,117630],{"class":283},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[49,117632,117633,117635,117638,117640,117642,117644],{"class":51,"line":1875},[49,117634,117431],{"class":2055},[49,117636,117637],{"class":328}," show",[49,117639,28993],{"class":59},[49,117641,117469],{"class":328},[49,117643,298],{"class":55},[49,117645,51396],{"class":59},[49,117647,117648],{"class":51,"line":2669},[49,117649,2492],{"emptyLinePlaceholder":151},[49,117651,117652],{"class":51,"line":2683},[49,117653,117654],{"class":283},"#删除软件包命令\n",[49,117656,117657,117659,117661,117663,117665,117667,117669],{"class":51,"line":2691},[49,117658,24667],{"class":2055},[49,117660,117380],{"class":328},[49,117662,26170],{"class":328},[49,117664,28993],{"class":59},[49,117666,117469],{"class":328},[49,117668,298],{"class":55},[49,117670,51396],{"class":59},[49,117672,117673],{"class":51,"line":2696},[49,117674,2492],{"emptyLinePlaceholder":151},[49,117676,117677],{"class":51,"line":2702},[49,117678,117679],{"class":283},"# 清理旧版本和缓存（释放磁盘空间）\n",[49,117681,117682,117684,117686,117689],{"class":51,"line":2708},[49,117683,24667],{"class":2055},[49,117685,117380],{"class":328},[49,117687,117688],{"class":328}," autoremove",[49,117690,117691],{"class":283},"  # 删除不再需要的依赖和库文件\n",[49,117693,117694,117696,117698,117701],{"class":51,"line":2713},[49,117695,24667],{"class":2055},[49,117697,117380],{"class":328},[49,117699,117700],{"class":328}," clean",[49,117702,117703],{"class":283},"       # 清理下载的缓存包\n",[49,117705,117706],{"class":51,"line":8038},[49,117707,2492],{"emptyLinePlaceholder":151},[49,117709,117710],{"class":51,"line":8062},[49,117711,117712],{"class":283},"#移除软件包及配置文件\n",[49,117714,117715,117717,117719,117722,117724,117726,117728],{"class":51,"line":8067},[49,117716,24667],{"class":2055},[49,117718,117380],{"class":328},[49,117720,117721],{"class":328}," purge",[49,117723,28993],{"class":59},[49,117725,117469],{"class":328},[49,117727,298],{"class":55},[49,117729,51396],{"class":59},[49,117731,117732],{"class":51,"line":8073},[49,117733,2492],{"emptyLinePlaceholder":151},[49,117735,117736],{"class":51,"line":8100},[49,117737,117738],{"class":283},"#查找软件包命令\n",[49,117740,117741,117743,117745,117748,117750,117753,117755],{"class":51,"line":8105},[49,117742,24667],{"class":2055},[49,117744,117380],{"class":328},[49,117746,117747],{"class":328}," search",[49,117749,28993],{"class":59},[49,117751,117752],{"class":328},"keywor",[49,117754,536],{"class":55},[49,117756,51396],{"class":59},[49,117758,117759],{"class":51,"line":8111},[49,117760,2492],{"emptyLinePlaceholder":151},[49,117762,117763],{"class":51,"line":8123},[49,117764,117765],{"class":283},"#列出所有已安装的包\n",[49,117767,117768,117770,117772],{"class":51,"line":8135},[49,117769,117431],{"class":2055},[49,117771,117434],{"class":328},[49,117773,117774],{"class":66}," --installed\n",[49,117776,117777],{"class":51,"line":8147},[49,117778,2492],{"emptyLinePlaceholder":151},[49,117780,117781],{"class":51,"line":9806},[49,117782,117783],{"class":283},"#列出所有已安装的包的版本信息\n",[49,117785,117786,117788,117790],{"class":51,"line":9831},[49,117787,117431],{"class":2055},[49,117789,117434],{"class":328},[49,117791,117792],{"class":66}," --all-versions\n",[143,117794,117795],{},"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":44,"searchDepth":84,"depth":84,"links":117797},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117342,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117804,"title":117805,"body":117806,"description":148,"extension":149,"meta":118547,"navigation":151,"path":118548,"seo":118549,"stem":118550,"__hash__":118551},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117807,"toc":118534},[117808,117811,117815,117818,117824,117828,117832,117838,117843,117848,117853,117858,117863,117866,117869,117872,117875,117879,117882,117887,117890,117895,117898,117903,117910,117913,117916,117919,117922,117925,117936,117940,117944,117949,117954,117958,117963,117967,117972,117976,117980,117985,117988,118033,118038,118042,118046,118051,118057,118062,118072,118077,118087,118092,118097,118124,118128,118131,118136,118139,118164,118168,118173,118176,118181,118186,118206,118211,118214,118229,118233,118286,118289,118294,118298,118301,118316,118319,118322,118327,118331,118335,118338,118342,118346,118349,118354,118359,118363,118370,118378,118381,118388,118393,118398,118401,118406,118413,118418,118425,118429,118431,118436,118440,118443,118446,118451,118454,118459,118462,118467,118472,118477,118481,118486,118490,118531],[10,117809,117805],{"id":117810},"_2-linux装机教程",[166,117812,117814],{"id":117813},"_21-实体机","2.1 实体机",[14,117816,117817],{},"使用清华源：（Ubuntu24.04）",[14,117819,117820],{},[56,117821,117822],{"href":117822,"rel":117823},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23955],[166,117825,117827],{"id":117826},"_22-普通虚拟机","2.2 普通虚拟机",[195,117829,117831],{"id":117830},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117833,117834],{},[56,117835,117836],{"href":117836,"rel":117837},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23955],[14,117839,117840],{},[1554,117841],{"alt":44,"src":117842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117844,117845],{},[1554,117846],{"alt":44,"src":117847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117849,117850],{},[1554,117851],{"alt":44,"src":117852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117854,117855],{},[1554,117856],{"alt":44,"src":117857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117859,117860],{},[1554,117861],{"alt":44,"src":117862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117864,117865],{},"内存4G（4096MB）；",[14,117867,117868],{},"CPU给4个核；",[14,117870,117871],{},"硬盘动态分配60G；",[14,117873,117874],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[195,117876,117878],{"id":117877},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117880,117881],{},"按照1.1的步骤下载Ubuntu",[14,117883,117884],{},[1554,117885],{"alt":44,"src":117886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117888,117889],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117891,117892],{},[1554,117893],{"alt":44,"src":117894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117896,117897],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117899,117900],{},[1554,117901],{"alt":44,"src":117902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117904,117905,117906,117909],{},"选择“正常安装”(找不到都用Alt+F7)， ",[373,117907,117908],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117911,117912],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117914,117915],{},"将改动写入磁盘吗 继续",[14,117917,117918],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117920,117921],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117923,117924],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117926,117927,117928,117931,117932,117935],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[373,117929,117930],{},"除了"," 选不发送系统信息与不升级之外， ",[373,117933,117934],{},"其它"," 都跳过或前进）",[195,117937,117939],{"id":117938},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22088,117941,117943],{"id":117942},"_2231-全屏","2.2.3.1 全屏",[14,117945,117946],{},[1554,117947],{"alt":44,"src":117948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117950,117951],{},[1554,117952],{"alt":44,"src":117953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22088,117955,117957],{"id":117956},"_2232-文件交换","2.2.3.2 文件交换",[14,117959,117960],{},[1554,117961],{"alt":44,"src":117962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22088,117964,117966],{"id":117965},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117968,117969],{},[1554,117970],{"alt":44,"src":117971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[166,117973,117975],{"id":117974},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[195,117977,117979],{"id":117978},"_231-简介与优缺点","2.3.1 简介与优缺点",[178,117981,117982],{},[181,117983,117984],{},"什么情况下推荐？",[14,117986,117987],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[178,117989,117990],{"start":84},[181,117991,117992,117993],{},"优缺点：",[178,117994,117995,118025],{},[181,117996,117997,117998],{},"优点：",[178,117999,118000,118003,118010,118013,118016,118019,118022],{},[181,118001,118002],{},"WSL2是最好的Linux发行版;(bushi)",[181,118004,118005,118006,118009],{},"性能损耗极低。且比在Windows上跑深度性能 ",[373,118007,118008],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[181,118011,118012],{},"非常方便调用USB设备，可以USB直通;",[181,118014,118015],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[181,118017,118018],{},"非常方便Win与WSL2互相传文件等协同操作;",[181,118020,118021],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[181,118023,118024],{},"非常方便使用Windows的VScode远程开发;",[181,118026,118027,118028],{},"缺点：",[178,118029,118030],{},[181,118031,118032],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118034,118035],{},[1554,118036],{"alt":44,"src":118037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[195,118039,118041],{"id":118040},"_232-安装教程","2.3.2 安装教程",[22088,118043,118045],{"id":118044},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[178,118047,118048],{},[181,118049,118050],{},"方法一(图形界面)",[14,118052,118053,118054,24709],{},"用Win+R输入",[46,118055,118056],{},"appwiz.cpl",[14,118058,118059],{},[1554,118060],{"alt":44,"src":118061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118063,118064,118065,118068,118069,26564],{},"点击OK进入 ",[373,118066,118067],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[373,118070,118071],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118073,118074],{},[1554,118075],{"alt":44,"src":118076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118078,118079,118080,101081,118083,118086],{},"选择 ",[373,118081,118082],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[373,118084,118085],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118088,118089],{},[1554,118090],{"alt":44,"src":118091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[178,118093,118094],{"start":84},[181,118095,118096],{},"方法二(命令行)",[39,118098,118102],{"className":118099,"code":118100,"language":118101,"meta":44,"style":44},"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",[46,118103,118104,118109,118114,118119],{"__ignoreMap":44},[49,118105,118106],{"class":51,"line":52},[49,118107,118108],{},"# 开启 Linux 子系统\n",[49,118110,118111],{"class":51,"line":84},[49,118112,118113],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[49,118115,118116],{"class":51,"line":109},[49,118117,118118],{},"# 开启虚拟机平台\n",[49,118120,118121],{"class":51,"line":120},[49,118122,118123],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22088,118125,118127],{"id":118126},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118129,118130],{},"用管理员权限打开powershell",[14,118132,118133],{},[1554,118134],{"alt":44,"src":118135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118137,118138],{},"升级WSL并设置默认版本为WSL2",[39,118140,118142],{"className":118099,"code":118141,"language":118101,"meta":44,"style":44},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[46,118143,118144,118149,118154,118159],{"__ignoreMap":44},[49,118145,118146],{"class":51,"line":52},[49,118147,118148],{},"# 更新 wsl\n",[49,118150,118151],{"class":51,"line":84},[49,118152,118153],{},"wsl --update\n",[49,118155,118156],{"class":51,"line":109},[49,118157,118158],{},"# 将 wsl 版本设置为 wsl2\n",[49,118160,118161],{"class":51,"line":120},[49,118162,118163],{},"wsl --set-default-version 2\n",[22088,118165,118167],{"id":118166},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[178,118169,118170],{},[181,118171,118172],{},"方式一(商店下载)",[14,118174,118175],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118177,118178],{},[1554,118179],{"alt":44,"src":118180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[178,118182,118183],{"start":84},[181,118184,118185],{},"方式二(命令行安装)",[39,118187,118189],{"className":118099,"code":118188,"language":118101,"meta":44,"style":44},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[46,118190,118191,118196,118201],{"__ignoreMap":44},[49,118192,118193],{"class":51,"line":52},[49,118194,118195],{},"# 列出可安装的 Linux 版本\n",[49,118197,118198],{"class":51,"line":84},[49,118199,118200],{},"#（需要科学手段）\n",[49,118202,118203],{"class":51,"line":109},[49,118204,118205],{},"wsl --list --online\n",[14,118207,118208],{},[1554,118209],{"alt":44,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118212,118213],{},"选择对应发行版并安装",[39,118215,118217],{"className":118099,"code":118216,"language":118101,"meta":44,"style":44},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[46,118218,118219,118224],{"__ignoreMap":44},[49,118220,118221],{"class":51,"line":52},[49,118222,118223],{},"# Ubuntu安装完毕后需要重启系统\n",[49,118225,118226],{"class":51,"line":84},[49,118227,118228],{},"wsl --install -d Ubuntu-24.04\n",[22088,118230,118232],{"id":118231},"_2324-查看系统状态","2.3.2.4 查看系统状态",[39,118234,118236],{"className":118099,"code":118235,"language":118101,"meta":44,"style":44},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[46,118237,118238,118243,118248,118253,118258,118262,118266,118271,118276,118281],{"__ignoreMap":44},[49,118239,118240],{"class":51,"line":52},[49,118241,118242],{},"# 查看 wsl\n",[49,118244,118245],{"class":51,"line":84},[49,118246,118247],{},"wsl -l\n",[49,118249,118250],{"class":51,"line":109},[49,118251,118252],{},"# 查看 wsl 运行版本或模式\n",[49,118254,118255],{"class":51,"line":120},[49,118256,118257],{},"wsl -l -v\n",[49,118259,118260],{"class":51,"line":135},[49,118261,2492],{"emptyLinePlaceholder":151},[49,118263,118264],{"class":51,"line":1306},[49,118265,2492],{"emptyLinePlaceholder":151},[49,118267,118268],{"class":51,"line":1312},[49,118269,118270],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[49,118272,118273],{"class":51,"line":1403},[49,118274,118275],{},"wsl --set-version \u003Cdistro> 2\n",[49,118277,118278],{"class":51,"line":1409},[49,118279,118280],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[49,118282,118283],{"class":51,"line":1421},[49,118284,118285],{},"wsl --unregister \u003Cdistro>\n",[14,118287,118288],{},"输出Version为2即正常",[14,118290,118291],{},[1554,118292],{"alt":44,"src":118293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22088,118295,118297],{"id":118296},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118299,118300],{},"直接在Powershell里输入wsl命令进入子系统",[39,118302,118304],{"className":118099,"code":118303,"language":118101,"meta":44,"style":44},"# 进入子系统\nwsl\n",[46,118305,118306,118311],{"__ignoreMap":44},[49,118307,118308],{"class":51,"line":52},[49,118309,118310],{},"# 进入子系统\n",[49,118312,118313],{"class":51,"line":84},[49,118314,118315],{},"wsl\n",[14,118317,118318],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118320,118321],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118323,118324],{},[1554,118325],{"alt":44,"src":118326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[195,118328,118330],{"id":118329},"_233-配置各种环境","2.3.3 配置各种环境",[22088,118332,118334],{"id":118333},"_2331-换源","2.3.3.1 换源",[14,118336,118337],{},"(同实体机LINUX，往下找教程)",[22088,118339,118341],{"id":118340},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23000,118343,118345],{"id":118344},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118347,118348],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118350,118351],{},[1554,118352],{"alt":44,"src":118353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118355,118356],{},[1554,118357],{"alt":44,"src":118358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23000,118360,118362],{"id":118361},"_23322-cuda","2.3.3.2.2 CUDA",[14,118364,118365,118366],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[56,118367,118368],{"href":118368,"rel":118369},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23955],[14,118371,118372,118375],{},[1554,118373],{"alt":44,"src":118374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1554,118376],{"alt":44,"src":118377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118379,118380],{},"在下方的网站，选择合适的版本。",[14,118382,118383,118384],{},"WSL2 专属 CUDA 指南：",[56,118385,118386],{"href":118386,"rel":118387},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23955],[14,118389,118390],{},[373,118391,118392],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118394,118395],{},[1554,118396],{"alt":44,"src":118397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118399,118400],{},"挨行敲一遍",[14,118402,118403],{},[1554,118404],{"alt":44,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118407,118408,118409,118412],{},"敲完后，输入",[46,118410,118411],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118414,118415],{},[1554,118416],{"alt":44,"src":118417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118419,118420,118421,118424],{},"（请详看下方教程的",[373,118422,118423],{},"安装CUDA的配置环境来看","如何配置环境）",[23000,118426,118428],{"id":118427},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118430,118337],{},[14,118432,118433],{},[1554,118434],{"alt":44,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22088,118437,118439],{"id":118438},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118441,118442],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118444,118445],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118447,118448],{},[1554,118449],{"alt":44,"src":118450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118452,118453],{},"连接WSL2",[14,118455,118456],{},[1554,118457],{"alt":44,"src":118458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118460,118461],{},"远程开发成功。",[14,118463,118464],{},[1554,118465],{"alt":44,"src":118466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118468,118469],{},[1554,118470],{"alt":44,"src":118471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118473,118474],{},[1554,118475],{"alt":44,"src":118476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22088,118478,118480],{"id":118479},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118482,118483],{},[1554,118484],{"alt":44,"src":118485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22088,118487,118489],{"id":118488},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[39,118491,118493],{"className":117359,"code":118492,"language":117361,"meta":44,"style":44},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[46,118494,118495,118503,118511,118522,118526],{"__ignoreMap":44},[49,118496,118497,118499,118501],{"class":51,"line":52},[49,118498,24667],{"class":2055},[49,118500,117380],{"class":328},[49,118502,26333],{"class":328},[49,118504,118505,118507,118509],{"class":51,"line":84},[49,118506,24667],{"class":2055},[49,118508,117380],{"class":328},[49,118510,117396],{"class":328},[49,118512,118513,118515,118517,118519],{"class":51,"line":109},[49,118514,24667],{"class":2055},[49,118516,117380],{"class":328},[49,118518,23924],{"class":328},[49,118520,118521],{"class":328}," mesa-utils\n",[49,118523,118524],{"class":51,"line":120},[49,118525,2492],{"emptyLinePlaceholder":151},[49,118527,118528],{"class":51,"line":135},[49,118529,118530],{"class":283},"#然后重启wsl2即可\n",[143,118532,118533],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":44,"searchDepth":84,"depth":84,"links":118535},[118536,118537,118542],{"id":117813,"depth":84,"text":117814},{"id":117826,"depth":84,"text":117827,"children":118538},[118539,118540,118541],{"id":117830,"depth":109,"text":117831},{"id":117877,"depth":109,"text":117878},{"id":117938,"depth":109,"text":117939},{"id":117974,"depth":84,"text":117975,"children":118543},[118544,118545,118546],{"id":117978,"depth":109,"text":117979},{"id":118040,"depth":109,"text":118041},{"id":118329,"depth":109,"text":118330},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117805,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118553,"title":118554,"body":118555,"description":148,"extension":149,"meta":121491,"navigation":151,"path":121492,"seo":121493,"stem":121494,"__hash__":121495},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118556,"toc":121463},[118557,118560,118564,118570,118574,118580,118584,118772,118775,118780,118784,118788,118791,118794,118800,118805,118808,118811,118816,118849,118854,118858,118935,118938,118943,118947,118950,118989,118992,119001,119019,119024,119031,119148,119153,119156,119183,119188,119192,119201,119251,119258,119262,119265,119279,119286,119320,119325,119329,119352,119355,119360,119364,119367,119370,119373,119415,119419,119422,119425,119466,119470,119474,119477,119482,119487,119490,119513,119516,119524,119529,119532,119537,119542,119545,119550,119554,119559,119582,119587,119649,119657,119662,119667,119670,119675,119678,119683,119688,119706,119711,119717,119722,119736,119740,119743,119746,119749,119792,119795,119800,119901,119904,119909,119913,119917,119954,119958,119962,119966,120012,120016,120061,120065,120072,120080,120135,120138,120215,120218,120241,120245,120248,120253,120258,120266,120269,120274,120279,120284,120287,120292,120301,120304,120309,120312,120383,120388,120391,120396,120399,120404,120407,120412,120415,120420,120425,120428,120503,120506,120519,120524,120527,120541,120544,120573,120578,120607,120610,120615,120619,120624,120633,120636,120641,120644,120649,120652,120655,120660,120663,120668,120673,120676,120681,120684,120809,120814,120844,120847,120852,120857,120874,120877,120920,120923,120950,120955,120968,121111,121115,121120,121134,121137,121188,121191,121221,121224,121240,121245,121259,121262,121329,121334,121343,121348,121351,121363,121368,121375,121399,121402,121407,121410,121429,121434,121441,121453,121460],[10,118558,118554],{"id":118559},"_3-安装必备配置",[166,118561,118563],{"id":118562},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[39,118565,118568],{"className":118566,"code":118567,"language":5278},[5276],"  打开下方网站（注意，该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",[46,118569,118567],{"__ignoreMap":44},[195,118571,118573],{"id":118572},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[39,118575,118578],{"className":118576,"code":118577,"language":5278},[5276],"  输入以下命令\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",[46,118579,118577],{"__ignoreMap":44},[195,118581,118583],{"id":118582},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[39,118585,118589],{"className":118586,"code":118587,"language":118588,"meta":44,"style":44},"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",[46,118590,118591,118599,118610,118622,118636,118640,118650,118655,118659,118663,118668,118672,118684,118688,118693,118697,118708,118712,118728,118732,118743,118747,118752,118756,118764],{"__ignoreMap":44},[49,118592,118593,118595,118597],{"class":51,"line":52},[49,118594,24667],{"class":2055},[49,118596,117380],{"class":328},[49,118598,26333],{"class":328},[49,118600,118601,118603,118605,118607],{"class":51,"line":84},[49,118602,24667],{"class":2055},[49,118604,117380],{"class":328},[49,118606,23924],{"class":328},[49,118608,118609],{"class":328}," vim\n",[49,118611,118612,118614,118617,118619],{"class":51,"line":109},[49,118613,24667],{"class":2055},[49,118615,118616],{"class":328}," rm",[49,118618,25416],{"class":66},[49,118620,118621],{"class":328}," \u002Fetc\u002Fapt\u002Fsources.list\n",[49,118623,118624,118626,118628,118630,118633],{"class":51,"line":120},[49,118625,24667],{"class":2055},[49,118627,118616],{"class":328},[49,118629,25416],{"class":66},[49,118631,118632],{"class":328}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[49,118634,118635],{"class":66},"**\n",[49,118637,118638],{"class":51,"line":135},[49,118639,2492],{"emptyLinePlaceholder":151},[49,118641,118642,118644,118647],{"class":51,"line":1306},[49,118643,24667],{"class":2055},[49,118645,118646],{"class":328}," vim",[49,118648,118649],{"class":328}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[49,118651,118652],{"class":51,"line":1312},[49,118653,118654],{"class":328},"```\n",[49,118656,118657],{"class":51,"line":1403},[49,118658,2492],{"emptyLinePlaceholder":151},[49,118660,118661],{"class":51,"line":1409},[49,118662,2492],{"emptyLinePlaceholder":151},[49,118664,118665],{"class":51,"line":1421},[49,118666,118667],{"class":2055},"选择好Ubuntu版本后，复制下方的内容。\n",[49,118669,118670],{"class":51,"line":1704},[49,118671,2492],{"emptyLinePlaceholder":151},[49,118673,118674,118676,118679,118682],{"class":51,"line":1709},[49,118675,450],{"class":59},[49,118677,118678],{"class":328},"[](",[49,118680,118681],{"class":2055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[49,118683,81],{"class":328},[49,118685,118686],{"class":51,"line":1715},[49,118687,2492],{"emptyLinePlaceholder":151},[49,118689,118690],{"class":51,"line":1720},[49,118691,118692],{"class":2055},"粘贴进去\n",[49,118694,118695],{"class":51,"line":1734},[49,118696,2492],{"emptyLinePlaceholder":151},[49,118698,118699,118701,118703,118706],{"class":51,"line":1739},[49,118700,450],{"class":59},[49,118702,118678],{"class":328},[49,118704,118705],{"class":2055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[49,118707,81],{"class":328},[49,118709,118710],{"class":51,"line":1745},[49,118711,2492],{"emptyLinePlaceholder":151},[49,118713,118714,118717,118720,118723,118725],{"class":51,"line":1766},[49,118715,118716],{"class":2055},"按一下ESC，然后英文冒号，输入",[49,118718,118719],{"class":328}," `",[49,118721,118722],{"class":2055},":wq!",[49,118724,1191],{"class":328},[49,118726,118727],{"class":2055},"然后回车\n",[49,118729,118730],{"class":51,"line":1771},[49,118731,2492],{"emptyLinePlaceholder":151},[49,118733,118734,118736,118738,118741],{"class":51,"line":1785},[49,118735,450],{"class":59},[49,118737,118678],{"class":328},[49,118739,118740],{"class":2055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[49,118742,81],{"class":328},[49,118744,118745],{"class":51,"line":1790},[49,118746,2492],{"emptyLinePlaceholder":151},[49,118748,118749],{"class":51,"line":1819},[49,118750,118751],{"class":2055},"输入以下命令\n",[49,118753,118754],{"class":51,"line":1824},[49,118755,2492],{"emptyLinePlaceholder":151},[49,118757,118758,118761],{"class":51,"line":1841},[49,118759,118760],{"class":328},"```",[49,118762,118763],{"class":2055},"Bash\n",[49,118765,118766,118768,118770],{"class":51,"line":1846},[49,118767,24667],{"class":2055},[49,118769,117380],{"class":328},[49,118771,26333],{"class":328},[14,118773,118774],{},"这里被替换成对应学校则成功",[14,118776,118777],{},[1554,118778],{"alt":44,"src":118779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[166,118781,118783],{"id":118782},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[195,118785,118787],{"id":118786},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118789,118790],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118792,118793],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118795,118796],{},[56,118797,118798],{"href":118798,"rel":118799},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23955],[14,118801,118802],{},[1554,118803],{"alt":44,"src":118804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118806,118807],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118809,118810],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118812,118813],{},[1554,118814],{"alt":44,"src":118815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[39,118817,118819],{"className":117359,"code":118818,"language":117361,"meta":44,"style":44},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[46,118820,118821,118826,118833,118838],{"__ignoreMap":44},[49,118822,118823],{"class":51,"line":52},[49,118824,118825],{"class":283},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[49,118827,118828,118830],{"class":51,"line":84},[49,118829,101339],{"class":66},[49,118831,118832],{"class":328}," ~\u002FDownloads\n",[49,118834,118835],{"class":51,"line":109},[49,118836,118837],{"class":283},"#下方chrome安装包名不一定是这个，根据名字来看\n",[49,118839,118840,118842,118844,118846],{"class":51,"line":120},[49,118841,24667],{"class":2055},[49,118843,117380],{"class":328},[49,118845,23924],{"class":328},[49,118847,118848],{"class":328}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118850,118851],{},[1554,118852],{"alt":44,"src":118853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[195,118855,118857],{"id":118856},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[39,118859,118861],{"className":117359,"code":118860,"language":117361,"meta":44,"style":44},"# 老版\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",[46,118862,118863,118868,118876,118887,118892,118896,118901,118911,118919,118930],{"__ignoreMap":44},[49,118864,118865],{"class":51,"line":52},[49,118866,118867],{"class":283},"# 老版\n",[49,118869,118870,118872,118874],{"class":51,"line":84},[49,118871,24667],{"class":2055},[49,118873,117380],{"class":328},[49,118875,26333],{"class":328},[49,118877,118878,118880,118882,118884],{"class":51,"line":109},[49,118879,24667],{"class":2055},[49,118881,117380],{"class":328},[49,118883,23924],{"class":328},[49,118885,118886],{"class":328}," neofetch\n",[49,118888,118889],{"class":51,"line":120},[49,118890,118891],{"class":2055},"neofetch\n",[49,118893,118894],{"class":51,"line":135},[49,118895,2492],{"emptyLinePlaceholder":151},[49,118897,118898],{"class":51,"line":1306},[49,118899,118900],{"class":283},"# 新版\n",[49,118902,118903,118905,118908],{"class":51,"line":1312},[49,118904,24667],{"class":2055},[49,118906,118907],{"class":328}," add-apt-repository",[49,118909,118910],{"class":328}," ppa:zhangsongcui3371\u002Ffastfetch\n",[49,118912,118913,118915,118917],{"class":51,"line":1403},[49,118914,24667],{"class":2055},[49,118916,117380],{"class":328},[49,118918,26333],{"class":328},[49,118920,118921,118923,118925,118927],{"class":51,"line":1409},[49,118922,24667],{"class":2055},[49,118924,117380],{"class":328},[49,118926,23924],{"class":328},[49,118928,118929],{"class":328}," fastfetch\n",[49,118931,118932],{"class":51,"line":1421},[49,118933,118934],{"class":2055},"fastfetch\n",[14,118936,118937],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118939,118940],{},[1554,118941],{"alt":44,"src":118942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[195,118944,118946],{"id":118945},"_323-移除snap应用","3.2.3 移除snap应用",[14,118948,118949],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[39,118951,118953],{"className":117359,"code":118952,"language":117361,"meta":44,"style":44},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[46,118954,118955,118967,118978],{"__ignoreMap":44},[49,118956,118957,118959,118961,118964],{"class":51,"line":52},[49,118958,24667],{"class":2055},[49,118960,26604],{"class":328},[49,118962,118963],{"class":328}," disable",[49,118965,118966],{"class":328}," snapd.service\n",[49,118968,118969,118971,118973,118975],{"class":51,"line":84},[49,118970,24667],{"class":2055},[49,118972,26604],{"class":328},[49,118974,118963],{"class":328},[49,118976,118977],{"class":328}," snapd.socket\n",[49,118979,118980,118982,118984,118986],{"class":51,"line":109},[49,118981,24667],{"class":2055},[49,118983,26604],{"class":328},[49,118985,118963],{"class":328},[49,118987,118988],{"class":328}," snapd.seeded.service\n",[14,118990,118991],{},"然后查看snap应用列表",[14,118993,118994,118995,119000],{},"根据你安装的选择不同（最小安装或普通安装），有",[56,118996,118999],{"href":118997,"rel":118998},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23955],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[39,119002,119004],{"className":117359,"code":119003,"language":117361,"meta":44,"style":44},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[46,119005,119006,119011],{"__ignoreMap":44},[49,119007,119008],{"class":51,"line":52},[49,119009,119010],{"class":283},"# 查询当前系统上snap安装了哪些app\n",[49,119012,119013,119016],{"class":51,"line":84},[49,119014,119015],{"class":2055},"snap",[49,119017,119018],{"class":328}," list\n",[14,119020,119021],{},[1554,119022],{"alt":44,"src":119023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119025,119026,119027,119030],{},"卸载掉图中所有应用，按照 ",[373,119028,119029],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[39,119032,119034],{"className":117359,"code":119033,"language":117361,"meta":44,"style":44},"#移除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",[46,119035,119036,119041,119053,119058,119069,119074,119085,119090,119101,119106,119110,119115,119126,119137],{"__ignoreMap":44},[49,119037,119038],{"class":51,"line":52},[49,119039,119040],{"class":283},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[49,119042,119043,119045,119048,119050],{"class":51,"line":84},[49,119044,24667],{"class":2055},[49,119046,119047],{"class":328}," snap",[49,119049,26170],{"class":328},[49,119051,119052],{"class":328}," snap-store\n",[49,119054,119055],{"class":51,"line":109},[49,119056,119057],{"class":283},"#移除firefox浏览器\n",[49,119059,119060,119062,119064,119066],{"class":51,"line":120},[49,119061,24667],{"class":2055},[49,119063,119047],{"class":328},[49,119065,26170],{"class":328},[49,119067,119068],{"class":328}," firefox\n",[49,119070,119071],{"class":51,"line":135},[49,119072,119073],{"class":283},"#移除gnome-42-2204\n",[49,119075,119076,119078,119080,119082],{"class":51,"line":1306},[49,119077,24667],{"class":2055},[49,119079,119047],{"class":328},[49,119081,26170],{"class":328},[49,119083,119084],{"class":328}," gnome-42-2204\n",[49,119086,119087],{"class":51,"line":1312},[49,119088,119089],{"class":283},"#移除gtk-common-themes\n",[49,119091,119092,119094,119096,119098],{"class":51,"line":1403},[49,119093,24667],{"class":2055},[49,119095,119047],{"class":328},[49,119097,26170],{"class":328},[49,119099,119100],{"class":328}," gtk-common-themes\n",[49,119102,119103],{"class":51,"line":1409},[49,119104,119105],{"class":283},"#移除其它...\n",[49,119107,119108],{"class":51,"line":1421},[49,119109,2766],{"class":55},[49,119111,119112],{"class":51,"line":1704},[49,119113,119114],{"class":283},"#移除core22,bare以及snapd\n",[49,119116,119117,119119,119121,119123],{"class":51,"line":1709},[49,119118,24667],{"class":2055},[49,119120,119047],{"class":328},[49,119122,26170],{"class":328},[49,119124,119125],{"class":328}," core22\n",[49,119127,119128,119130,119132,119134],{"class":51,"line":1715},[49,119129,24667],{"class":2055},[49,119131,119047],{"class":328},[49,119133,26170],{"class":328},[49,119135,119136],{"class":328}," bare\n",[49,119138,119139,119141,119143,119145],{"class":51,"line":1720},[49,119140,24667],{"class":2055},[49,119142,119047],{"class":328},[49,119144,26170],{"class":328},[49,119146,119147],{"class":328}," snapd\n",[14,119149,119150],{},[1554,119151],{"alt":44,"src":119152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119154,119155],{},"输入以下命令查看是否还有snap包",[39,119157,119159],{"className":117359,"code":119158,"language":117361,"meta":44,"style":44},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[46,119160,119161,119167,119171,119175,119179],{"__ignoreMap":44},[49,119162,119163,119165],{"class":51,"line":52},[49,119164,119015],{"class":2055},[49,119166,119018],{"class":328},[49,119168,119169],{"class":51,"line":84},[49,119170,118867],{"class":283},[49,119172,119173],{"class":51,"line":109},[49,119174,118891],{"class":2055},[49,119176,119177],{"class":51,"line":120},[49,119178,118900],{"class":283},[49,119180,119181],{"class":51,"line":135},[49,119182,118934],{"class":2055},[14,119184,119185],{},[1554,119186],{"alt":44,"src":119187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[195,119189,119191],{"id":119190},"_324-移除snap","3.2.4 移除snap",[14,119193,119194,119195,119200],{},"在删除掉",[56,119196,119199],{"href":119197,"rel":119198},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23955],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[39,119202,119204],{"className":117359,"code":119203,"language":117361,"meta":44,"style":44}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[46,119205,119206,119211,119224,119229,119240],{"__ignoreMap":44},[49,119207,119208],{"class":51,"line":52},[49,119209,119210],{"class":283}," #使用apt移除掉snap\n",[49,119212,119213,119215,119217,119219,119222],{"class":51,"line":84},[49,119214,24667],{"class":2055},[49,119216,117380],{"class":328},[49,119218,117688],{"class":328},[49,119220,119221],{"class":66}," --purge",[49,119223,119147],{"class":328},[49,119225,119226],{"class":51,"line":109},[49,119227,119228],{"class":283},"#移除snapd的一些目录\n",[49,119230,119231,119233,119235,119237],{"class":51,"line":120},[49,119232,24667],{"class":2055},[49,119234,118616],{"class":328},[49,119236,25416],{"class":66},[49,119238,119239],{"class":328}," \u002Fvar\u002Fcache\u002Fsnapd\n",[49,119241,119242,119244,119246,119248],{"class":51,"line":135},[49,119243,24667],{"class":2055},[49,119245,118616],{"class":328},[49,119247,25416],{"class":66},[49,119249,119250],{"class":328}," ~\u002Fsnap\n",[14,119252,119253,119254,119257],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[46,119255,119256],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[195,119259,119261],{"id":119260},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119263,119264],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[39,119266,119268],{"className":117359,"code":119267,"language":117361,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[46,119269,119270],{"__ignoreMap":44},[49,119271,119272,119274,119276],{"class":51,"line":52},[49,119273,24667],{"class":2055},[49,119275,118646],{"class":328},[49,119277,119278],{"class":328}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119280,119281,119282,119285],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[46,119283,119284],{},":wq"," 回车",[39,119287,119289],{"className":117359,"code":119288,"language":117361,"meta":44,"style":44},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[46,119290,119291,119298,119312],{"__ignoreMap":44},[49,119292,119293,119296],{"class":51,"line":52},[49,119294,119295],{"class":2055},"Package:",[49,119297,119147],{"class":328},[49,119299,119300,119303,119306,119309],{"class":51,"line":84},[49,119301,119302],{"class":2055},"Pin:",[49,119304,119305],{"class":328}," release",[49,119307,119308],{"class":328}," a=",[49,119310,119311],{"class":66},"*\n",[49,119313,119314,119317],{"class":51,"line":109},[49,119315,119316],{"class":2055},"Pin-Priority:",[49,119318,119319],{"class":66}," -10\n",[14,119321,119322],{},[1554,119323],{"alt":44,"src":119324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[195,119326,119328],{"id":119327},"_326-测试是否成功","3.2.6 测试是否成功",[39,119330,119332],{"className":117359,"code":119331,"language":117361,"meta":44,"style":44},"sudo apt update\nsudo apt install firefox\n",[46,119333,119334,119342],{"__ignoreMap":44},[49,119335,119336,119338,119340],{"class":51,"line":52},[49,119337,24667],{"class":2055},[49,119339,117380],{"class":328},[49,119341,26333],{"class":328},[49,119343,119344,119346,119348,119350],{"class":51,"line":84},[49,119345,24667],{"class":2055},[49,119347,117380],{"class":328},[49,119349,23924],{"class":328},[49,119351,119068],{"class":328},[14,119353,119354],{},"这里提示snapd无法被安装，就证明成功了",[14,119356,119357],{},[1554,119358],{"alt":44,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[195,119361,119363],{"id":119362},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119365,119366],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119368,119369],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119371,119372],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[39,119374,119376],{"className":117359,"code":119375,"language":117361,"meta":44,"style":44},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[46,119377,119378,119383,119392,119397,119405],{"__ignoreMap":44},[49,119379,119380],{"class":51,"line":52},[49,119381,119382],{"class":283},"# 添加Mozilla提供的源\n",[49,119384,119385,119387,119389],{"class":51,"line":84},[49,119386,24667],{"class":2055},[49,119388,118907],{"class":328},[49,119390,119391],{"class":328}," ppa:mozillateam\u002Fppa\n",[49,119393,119394],{"class":51,"line":109},[49,119395,119396],{"class":283},"# 安装Firefox\n",[49,119398,119399,119401,119403],{"class":51,"line":120},[49,119400,24667],{"class":2055},[49,119402,117380],{"class":328},[49,119404,26333],{"class":328},[49,119406,119407,119409,119411,119413],{"class":51,"line":135},[49,119408,24667],{"class":2055},[49,119410,117380],{"class":328},[49,119412,23924],{"class":328},[49,119414,119068],{"class":328},[195,119416,119418],{"id":119417},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119420,119421],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119423,119424],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[39,119426,119428],{"className":117359,"code":119427,"language":117361,"meta":44,"style":44},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[46,119429,119430,119435,119445,119453,119457],{"__ignoreMap":44},[49,119431,119432],{"class":51,"line":52},[49,119433,119434],{"class":283},"#删掉禁止安装snap的配置文件\n",[49,119436,119437,119439,119441,119443],{"class":51,"line":84},[49,119438,24667],{"class":2055},[49,119440,118616],{"class":328},[49,119442,25416],{"class":66},[49,119444,119278],{"class":328},[49,119446,119447,119449,119451],{"class":51,"line":109},[49,119448,24667],{"class":2055},[49,119450,117380],{"class":328},[49,119452,26333],{"class":328},[49,119454,119455],{"class":51,"line":120},[49,119456,2492],{"emptyLinePlaceholder":151},[49,119458,119459,119461,119463],{"class":51,"line":135},[49,119460,24667],{"class":2055},[49,119462,117380],{"class":328},[49,119464,119465],{"class":328}," dist-update\n",[166,119467,119469],{"id":119468},"_33-中文输入法","3.3 中文输入法",[195,119471,119473],{"id":119472},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119475,119476],{},"官网下载搜狗输入法",[14,119478,119479],{},[1554,119480],{"alt":44,"src":119481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119483,119484],{},[1554,119485],{"alt":44,"src":119486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119488,119489],{},"打开终端输入如下",[39,119491,119493],{"className":117359,"code":119492,"language":117361,"meta":44,"style":44},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[46,119494,119495,119502],{"__ignoreMap":44},[49,119496,119497,119499],{"class":51,"line":52},[49,119498,101339],{"class":66},[49,119500,119501],{"class":328}," ~\u002FDownloads\u002F\n",[49,119503,119504,119506,119508,119510],{"class":51,"line":84},[49,119505,24667],{"class":2055},[49,119507,117380],{"class":328},[49,119509,23924],{"class":328},[49,119511,119512],{"class":328}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119514,119515],{},"打开Fcitx",[14,119517,119518,119521],{},[1554,119519],{"alt":44,"src":119520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1554,119522],{"alt":44,"src":119523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119525,119526],{},[1554,119527],{"alt":44,"src":119528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119530,119531],{},"添加搜狗输入法",[14,119533,119534],{},[1554,119535],{"alt":44,"src":119536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119538,119539],{},[1554,119540],{"alt":44,"src":119541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119543,119544],{},"将搜狗输入法设置为唯一输入法",[14,119546,119547],{},[1554,119548],{"alt":44,"src":119549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[195,119551,119553],{"id":119552},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[178,119555,119556],{},[181,119557,119558],{},"卸载旧输入法",[39,119560,119562],{"className":118586,"code":119561,"language":118588,"meta":44,"style":44},"sudo apt purge fcitx* ibus*\n",[46,119563,119564],{"__ignoreMap":44},[49,119565,119566,119568,119570,119572,119575,119577,119580],{"class":51,"line":52},[49,119567,24667],{"class":2055},[49,119569,117380],{"class":328},[49,119571,117721],{"class":328},[49,119573,119574],{"class":328}," fcitx",[49,119576,674],{"class":66},[49,119578,119579],{"class":328}," ibus",[49,119581,119311],{"class":66},[178,119583,119584],{"start":84},[181,119585,119586],{},"安装Fcitx5",[39,119588,119590],{"className":117359,"code":119589,"language":117361,"meta":44,"style":44},"# 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",[46,119591,119592,119597,119611,119615,119620,119629,119637],{"__ignoreMap":44},[49,119593,119594],{"class":51,"line":52},[49,119595,119596],{"class":283},"# Ubuntu22.04及以上、Debian12及以上\n",[49,119598,119599,119601,119603,119605,119608],{"class":51,"line":84},[49,119600,24667],{"class":2055},[49,119602,117380],{"class":328},[49,119604,23924],{"class":328},[49,119606,119607],{"class":328}," fcitx5",[49,119609,119610],{"class":328}," fcitx5-chinese-addons\n",[49,119612,119613],{"class":51,"line":109},[49,119614,2492],{"emptyLinePlaceholder":151},[49,119616,119617],{"class":51,"line":120},[49,119618,119619],{"class":283},"# Ubuntu20.04\n",[49,119621,119622,119624,119626],{"class":51,"line":135},[49,119623,24667],{"class":2055},[49,119625,118907],{"class":328},[49,119627,119628],{"class":328}," ppa:zhsj\u002Ffcitx5\n",[49,119630,119631,119633,119635],{"class":51,"line":1306},[49,119632,24667],{"class":2055},[49,119634,117380],{"class":328},[49,119636,26333],{"class":328},[49,119638,119639,119641,119643,119645,119647],{"class":51,"line":1312},[49,119640,24667],{"class":2055},[49,119642,117380],{"class":328},[49,119644,23924],{"class":328},[49,119646,119607],{"class":328},[49,119648,119610],{"class":328},[178,119650,119651,119654],{"start":109},[181,119652,119653],{},"Reboot System",[181,119655,119656],{},"启动Fcitx5",[14,119658,119659],{},[1554,119660],{"alt":44,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[178,119663,119664],{"start":135},[181,119665,119666],{},"修改一些设置",[14,119668,119669],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119671,119672],{},[1554,119673],{"alt":44,"src":119674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119676,119677],{},"添加快捷键以便于更好切换中英文",[14,119679,119680],{},[1554,119681],{"alt":44,"src":119682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[178,119684,119685],{"start":1306},[181,119686,119687],{},"重启",[39,119689,119691],{"className":118586,"code":119690,"language":118588,"meta":44,"style":44},"sudo shutdown -r now\n",[46,119692,119693],{"__ignoreMap":44},[49,119694,119695,119697,119700,119703],{"class":51,"line":52},[49,119696,24667],{"class":2055},[49,119698,119699],{"class":328}," shutdown",[49,119701,119702],{"class":66}," -r",[49,119704,119705],{"class":328}," now\n",[178,119707,119708],{"start":1312},[181,119709,119710],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119712,119713],{},[56,119714,119715],{"href":119715,"rel":119716},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23955],[178,119718,119719],{"start":1403},[181,119720,119721],{},"再重启",[39,119723,119724],{"className":118586,"code":119690,"language":118588,"meta":44,"style":44},[46,119725,119726],{"__ignoreMap":44},[49,119727,119728,119730,119732,119734],{"class":51,"line":52},[49,119729,24667],{"class":2055},[49,119731,119699],{"class":328},[49,119733,119702],{"class":66},[49,119735,119705],{"class":328},[166,119737,119739],{"id":119738},"_34-pip3源替换","3.4 pip3源替换",[14,119741,119742],{},"非Debian系发行版需要做。",[14,119744,119745],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119747,119748],{},"使用dnf的系统也可能不用做。",[39,119750,119752],{"className":117359,"code":119751,"language":117361,"meta":44,"style":44},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,119753,119754,119759,119766,119771,119776],{"__ignoreMap":44},[49,119755,119756],{"class":51,"line":52},[49,119757,119758],{"class":283},"# 检查是否已安装 pip\n",[49,119760,119761,119764],{"class":51,"line":84},[49,119762,119763],{"class":2055},"pip3",[49,119765,26384],{"class":66},[49,119767,119768],{"class":51,"line":109},[49,119769,119770],{"class":283},"# 如果未安装，先安装 pip3（见下方）\n",[49,119772,119773],{"class":51,"line":120},[49,119774,119775],{"class":283},"# 配置 pip 使用清华源\n",[49,119777,119778,119780,119783,119786,119789],{"class":51,"line":135},[49,119779,119763],{"class":2055},[49,119781,119782],{"class":328}," config",[49,119784,119785],{"class":328}," set",[49,119787,119788],{"class":328}," global.index-url",[49,119790,119791],{"class":328}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119793,119794],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119796,119797],{},[1554,119798],{"alt":44,"src":119799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[39,119801,119803],{"className":117359,"code":119802,"language":117361,"meta":44,"style":44},"#安装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",[46,119804,119805,119810,119818,119829,119833,119838,119857,119861,119866,119878,119882,119887],{"__ignoreMap":44},[49,119806,119807],{"class":51,"line":52},[49,119808,119809],{"class":283},"#安装pip3\n",[49,119811,119812,119814,119816],{"class":51,"line":84},[49,119813,24667],{"class":2055},[49,119815,117380],{"class":328},[49,119817,26333],{"class":328},[49,119819,119820,119822,119824,119826],{"class":51,"line":109},[49,119821,24667],{"class":2055},[49,119823,26167],{"class":328},[49,119825,23924],{"class":328},[49,119827,119828],{"class":328}," python3-pip\n",[49,119830,119831],{"class":51,"line":120},[49,119832,2492],{"emptyLinePlaceholder":151},[49,119834,119835],{"class":51,"line":135},[49,119836,119837],{"class":283},"#更新pip3\n",[49,119839,119840,119842,119844,119846,119848,119850,119853,119855],{"class":51,"line":1306},[49,119841,100942],{"class":2055},[49,119843,100945],{"class":66},[49,119845,100968],{"class":328},[49,119847,23924],{"class":328},[49,119849,26521],{"class":66},[49,119851,119852],{"class":328}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[49,119854,100973],{"class":66},[49,119856,100976],{"class":328},[49,119858,119859],{"class":51,"line":1312},[49,119860,2492],{"emptyLinePlaceholder":151},[49,119862,119863],{"class":51,"line":1403},[49,119864,119865],{"class":283},"#设置pip源为清华源\n",[49,119867,119868,119870,119872,119874,119876],{"class":51,"line":1409},[49,119869,119763],{"class":2055},[49,119871,119782],{"class":328},[49,119873,119785],{"class":328},[49,119875,119788],{"class":328},[49,119877,119791],{"class":328},[49,119879,119880],{"class":51,"line":1421},[49,119881,2492],{"emptyLinePlaceholder":151},[49,119883,119884],{"class":51,"line":1704},[49,119885,119886],{"class":283},"#测试\n",[49,119888,119889,119891,119893,119895,119897,119899],{"class":51,"line":1709},[49,119890,100942],{"class":2055},[49,119892,100945],{"class":66},[49,119894,100968],{"class":328},[49,119896,23924],{"class":328},[49,119898,100973],{"class":66},[49,119900,100976],{"class":328},[14,119902,119903],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119905,119906],{},[1554,119907],{"alt":44,"src":119908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[166,119910,119912],{"id":119911},"_35-显卡驱动安装","3.5 显卡驱动安装",[195,119914,119916],{"id":119915},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[39,119918,119920],{"className":118586,"code":119919,"language":118588,"meta":44,"style":44},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[46,119921,119922,119927,119942,119947],{"__ignoreMap":44},[49,119923,119924],{"class":51,"line":52},[49,119925,119926],{"class":283},"# 如果是使用apt安装的驱动\n",[49,119928,119929,119931,119933,119935,119937,119940],{"class":51,"line":84},[49,119930,24667],{"class":2055},[49,119932,26167],{"class":328},[49,119934,26170],{"class":328},[49,119936,119221],{"class":66},[49,119938,119939],{"class":328}," nvidia",[49,119941,119311],{"class":66},[49,119943,119944],{"class":51,"line":109},[49,119945,119946],{"class":283},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[49,119948,119949,119951],{"class":51,"line":120},[49,119950,24667],{"class":2055},[49,119952,119953],{"class":328}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[195,119955,119957],{"id":119956},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22088,119959,119961],{"id":119960},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23000,119963,119965],{"id":119964},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[39,119967,119969],{"className":118586,"code":119968,"language":118588,"meta":44,"style":44},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,119970,119971,119976,119987,119992,120002,120007],{"__ignoreMap":44},[49,119972,119973],{"class":51,"line":52},[49,119974,119975],{"class":283},"# 安装英伟达驱动\n",[49,119977,119978,119980,119982,119984],{"class":51,"line":84},[49,119979,24667],{"class":2055},[49,119981,117380],{"class":328},[49,119983,23924],{"class":328},[49,119985,119986],{"class":328}," nvidia-driver-版本号\n",[49,119988,119989],{"class":51,"line":109},[49,119990,119991],{"class":283},"# 重启 \n",[49,119993,119994,119996,119998,120000],{"class":51,"line":120},[49,119995,24667],{"class":2055},[49,119997,119699],{"class":328},[49,119999,119702],{"class":66},[49,120001,119705],{"class":328},[49,120003,120004],{"class":51,"line":135},[49,120005,120006],{"class":283},"# 检查驱动是否安装成功\n",[49,120008,120009],{"class":51,"line":1306},[49,120010,120011],{"class":2055},"nvidia-smi\n",[23000,120013,120015],{"id":120014},"_35212-debian","3.5.2.1.2 Debian",[39,120017,120019],{"className":118586,"code":120018,"language":118588,"meta":44,"style":44},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,120020,120021,120025,120039,120043,120053,120057],{"__ignoreMap":44},[49,120022,120023],{"class":51,"line":52},[49,120024,119975],{"class":283},[49,120026,120027,120029,120031,120033,120036],{"class":51,"line":84},[49,120028,24667],{"class":2055},[49,120030,117380],{"class":328},[49,120032,23924],{"class":328},[49,120034,120035],{"class":328}," nvidia-driver",[49,120037,120038],{"class":328}," nvidia-settings\n",[49,120040,120041],{"class":51,"line":109},[49,120042,119991],{"class":283},[49,120044,120045,120047,120049,120051],{"class":51,"line":120},[49,120046,24667],{"class":2055},[49,120048,119699],{"class":328},[49,120050,119702],{"class":66},[49,120052,119705],{"class":328},[49,120054,120055],{"class":51,"line":135},[49,120056,120006],{"class":283},[49,120058,120059],{"class":51,"line":1306},[49,120060,120011],{"class":2055},[22088,120062,120064],{"id":120063},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120066,120067,120068,120071],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[373,120069,120070],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120073,120074,120075],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23643,120076,120077],{},[373,120078,120079],{},"（也可以不禁用桌面环境，直接进行下一步。）",[39,120081,120083],{"className":118586,"code":120082,"language":118588,"meta":44,"style":44},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[46,120084,120085,120090,120100,120105,120118,120123],{"__ignoreMap":44},[49,120086,120087],{"class":51,"line":52},[49,120088,120089],{"class":283},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[49,120091,120092,120094,120097],{"class":51,"line":84},[49,120093,24667],{"class":2055},[49,120095,120096],{"class":328}," telinit",[49,120098,120099],{"class":66}," 3\n",[49,120101,120102],{"class":51,"line":109},[49,120103,120104],{"class":283},"# ubuntu 使用下方命令\n",[49,120106,120107,120109,120112,120115],{"class":51,"line":120},[49,120108,24667],{"class":2055},[49,120110,120111],{"class":328}," service",[49,120113,120114],{"class":328}," lightdm",[49,120116,120117],{"class":328}," stop\n",[49,120119,120120],{"class":51,"line":135},[49,120121,120122],{"class":283},"# Fedora 使用下方命令\n",[49,120124,120125,120127,120129,120132],{"class":51,"line":1306},[49,120126,24667],{"class":2055},[49,120128,26604],{"class":328},[49,120130,120131],{"class":328}," isolate",[49,120133,120134],{"class":328}," multi-user.target\n",[14,120136,120137],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[39,120139,120141],{"className":118586,"code":120140,"language":118588,"meta":44,"style":44},"# 编译环境+准备工作\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",[46,120142,120143,120148,120159,120164,120171,120176,120188,120193,120200,120205],{"__ignoreMap":44},[49,120144,120145],{"class":51,"line":52},[49,120146,120147],{"class":283},"# 编译环境+准备工作\n",[49,120149,120150,120152,120154,120156],{"class":51,"line":84},[49,120151,24667],{"class":2055},[49,120153,117380],{"class":328},[49,120155,23924],{"class":328},[49,120157,120158],{"class":328}," build-essential\n",[49,120160,120161],{"class":51,"line":109},[49,120162,120163],{"class":283},"# 进入到.run目录中\n",[49,120165,120166,120168],{"class":51,"line":120},[49,120167,101339],{"class":66},[49,120169,120170],{"class":328}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[49,120172,120173],{"class":51,"line":135},[49,120174,120175],{"class":283},"# 给驱动文件增加可执行权限：\n",[49,120177,120178,120180,120182,120185],{"class":51,"line":1306},[49,120179,24667],{"class":2055},[49,120181,24670],{"class":328},[49,120183,120184],{"class":328}," a+x",[49,120186,120187],{"class":328}," NVIDIA-Linux-x86_64-550.107.02.run\n",[49,120189,120190],{"class":51,"line":1312},[49,120191,120192],{"class":283},"# 然后执行安装：\n",[49,120194,120195,120197],{"class":51,"line":1403},[49,120196,24667],{"class":2055},[49,120198,120199],{"class":328}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[49,120201,120202],{"class":51,"line":1409},[49,120203,120204],{"class":283},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[49,120206,120207,120209,120212],{"class":51,"line":1421},[49,120208,24667],{"class":2055},[49,120210,120211],{"class":328}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[49,120213,120214],{"class":66},"  --no-opengl-files\n",[14,120216,120217],{},"安装完毕重启即可",[39,120219,120221],{"className":118586,"code":120220,"language":118588,"meta":44,"style":44},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,120222,120223,120227,120233,120237],{"__ignoreMap":44},[49,120224,120225],{"class":51,"line":52},[49,120226,119991],{"class":283},[49,120228,120229,120231],{"class":51,"line":84},[49,120230,24667],{"class":2055},[49,120232,26738],{"class":328},[49,120234,120235],{"class":51,"line":109},[49,120236,120006],{"class":283},[49,120238,120239],{"class":51,"line":120},[49,120240,120011],{"class":2055},[195,120242,120244],{"id":120243},"_353-安装cuda","3.5.3 安装CUDA",[14,120246,120247],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120249,120250],{},[1554,120251],{"alt":44,"src":120252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[178,120254,120255],{},[181,120256,120257],{},"先查看显卡驱动所支持的最高CUDA版本",[39,120259,120260],{"className":118586,"code":120011,"language":118588,"meta":44,"style":44},[46,120261,120262],{"__ignoreMap":44},[49,120263,120264],{"class":51,"line":52},[49,120265,120011],{"class":2055},[14,120267,120268],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120270,120271],{},[1554,120272],{"alt":44,"src":120273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[178,120275,120276],{"start":84},[181,120277,120278],{},"下载CUDA并安装CUDA",[14,120280,118365,120281],{},[56,120282,118368],{"href":118368,"rel":120283},[23955],[14,120285,120286],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120288,120289],{},[1554,120290],{"alt":44,"src":120291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120293,120294,120295,120300],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[56,120296,120299],{"href":120297,"rel":120298},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23955],"Vinci机器人队单片机教程","）",[14,120302,120303],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120305,120306],{},[1554,120307],{"alt":44,"src":120308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120310,120311],{},"将最下方框框里的命令敲入终端",[39,120313,120315],{"className":118586,"code":120314,"language":118588,"meta":44,"style":44},"# 在当前文件夹下创建一个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",[46,120316,120317,120322,120331,120336,120343,120348,120356,120361,120372,120377],{"__ignoreMap":44},[49,120318,120319],{"class":51,"line":52},[49,120320,120321],{"class":283},"# 在当前文件夹下创建一个ttt的子文件夹\n",[49,120323,120324,120326,120328],{"class":51,"line":84},[49,120325,101329],{"class":2055},[49,120327,29307],{"class":66},[49,120329,120330],{"class":328}," .\u002Fttt\n",[49,120332,120333],{"class":51,"line":109},[49,120334,120335],{"class":283},"# 进入ttt文件夹\n",[49,120337,120338,120340],{"class":51,"line":120},[49,120339,101339],{"class":66},[49,120341,120342],{"class":328}," ttt\n",[49,120344,120345],{"class":51,"line":135},[49,120346,120347],{"class":283},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[49,120349,120350,120353],{"class":51,"line":1306},[49,120351,120352],{"class":2055},"wget",[49,120354,120355],{"class":328}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,120357,120358],{"class":51,"line":1312},[49,120359,120360],{"class":283},"# 给予权限\n",[49,120362,120363,120365,120367,120369],{"class":51,"line":1403},[49,120364,24667],{"class":2055},[49,120366,24670],{"class":328},[49,120368,120184],{"class":328},[49,120370,120371],{"class":328}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,120373,120374],{"class":51,"line":1409},[49,120375,120376],{"class":283},"# 运行脚本\n",[49,120378,120379,120381],{"class":51,"line":1421},[49,120380,24667],{"class":2055},[49,120382,120371],{"class":328},[14,120384,120385],{},[1554,120386],{"alt":44,"src":120387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120389,120390],{},"正在安装中：",[14,120392,120393],{},[1554,120394],{"alt":44,"src":120395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120397,120398],{},"输入accept接受即可",[14,120400,120401],{},[1554,120402],{"alt":44,"src":120403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120405,120406],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120408,120409],{},[1554,120410],{"alt":44,"src":120411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120413,120414],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120416,120417],{},[1554,120418],{"alt":44,"src":120419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[178,120421,120422],{"start":109},[181,120423,120424],{},"配置环境",[14,120426,120427],{},"根据上方确认一下路径，比如我上面红色框起来的为",[39,120429,120431],{"className":118586,"code":120430,"language":118588,"meta":44,"style":44},"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",[46,120432,120433,120449,120464],{"__ignoreMap":44},[49,120434,120435,120438,120441,120444,120447],{"class":51,"line":52},[49,120436,120437],{"class":2055},"Please",[49,120439,120440],{"class":328}," make",[49,120442,120443],{"class":328}," sure",[49,120445,120446],{"class":328}," that",[49,120448,2766],{"class":55},[49,120450,120451,120453,120456,120459,120462],{"class":51,"line":84},[49,120452,52360],{"class":2055},[49,120454,120455],{"class":328},"   PATH",[49,120457,120458],{"class":328}," includes",[49,120460,120461],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[49,120463,2766],{"class":55},[49,120465,120466,120468,120471,120473,120476,120479,120481,120484,120487,120490,120493,120495,120498,120500],{"class":51,"line":109},[49,120467,52360],{"class":2055},[49,120469,120470],{"class":328},"   LD_LIBRARY_PATH",[49,120472,120458],{"class":328},[49,120474,120475],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[49,120477,120478],{"class":328}," or,",[49,120480,5300],{"class":328},[49,120482,120483],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[49,120485,120486],{"class":328}," to",[49,120488,120489],{"class":328}," \u002Fetc\u002Fld.so.conf",[49,120491,120492],{"class":328}," and",[49,120494,27321],{"class":328},[49,120496,120497],{"class":328}," ldconfig",[49,120499,64693],{"class":328},[49,120501,120502],{"class":328}," root\n",[14,120504,120505],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[39,120507,120509],{"className":118586,"code":120508,"language":118588,"meta":44,"style":44},"which nvcc\n",[46,120510,120511],{"__ignoreMap":44},[49,120512,120513,120516],{"class":51,"line":52},[49,120514,120515],{"class":66},"which",[49,120517,120518],{"class":328}," nvcc\n",[14,120520,120521],{},[1554,120522],{"alt":44,"src":120523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120525,120526],{},"所以我进行以下操作：",[39,120528,120530],{"className":118586,"code":120529,"language":118588,"meta":44,"style":44},"sudo vim ~\u002F.bashrc\n",[46,120531,120532],{"__ignoreMap":44},[49,120533,120534,120536,120538],{"class":51,"line":52},[49,120535,24667],{"class":2055},[49,120537,118646],{"class":328},[49,120539,120540],{"class":328}," ~\u002F.bashrc\n",[14,120542,120543],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[39,120545,120547],{"className":118586,"code":120546,"language":118588,"meta":44,"style":44},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[46,120548,120549,120561],{"__ignoreMap":44},[49,120550,120551,120553,120556,120558],{"class":51,"line":52},[49,120552,25133],{"class":59},[49,120554,120555],{"class":55}," PATH",[49,120557,60],{"class":59},[49,120559,120560],{"class":55},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[49,120562,120563,120565,120568,120570],{"class":51,"line":84},[49,120564,25133],{"class":59},[49,120566,120567],{"class":55}," LD_LIBRARY_PATH",[49,120569,60],{"class":59},[49,120571,120572],{"class":55},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120574,120575],{},[1554,120576],{"alt":44,"src":120577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[39,120579,120581],{"className":118586,"code":120580,"language":118588,"meta":44,"style":44},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[46,120582,120583,120588,120594,120599],{"__ignoreMap":44},[49,120584,120585],{"class":51,"line":52},[49,120586,120587],{"class":283},"# 刷新当前终端的环境变量\n",[49,120589,120590,120592],{"class":51,"line":84},[49,120591,100956],{"class":66},[49,120593,120540],{"class":328},[49,120595,120596],{"class":51,"line":109},[49,120597,120598],{"class":283},"# 验证CUDA是否安装成功\n",[49,120600,120601,120604],{"class":51,"line":120},[49,120602,120603],{"class":2055},"nvcc",[49,120605,120606],{"class":66}," -V\n",[14,120608,120609],{},"出现下图这种则安装成功。",[14,120611,120612],{},[1554,120613],{"alt":44,"src":120614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[195,120616,120618],{"id":120617},"_354-安装cudnn","3.5.4 安装cuDNN",[178,120620,120621],{},[181,120622,120623],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120625,120626,120627,120632],{},"前往 NVIDIA cuDNN 下载页面：",[56,120628,120631],{"href":120629,"rel":120630},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23955],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120634,120635],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120637,120638],{},[1554,120639],{"alt":44,"src":120640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120642,120643],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120645,120646],{},[1554,120647],{"alt":44,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120650,120651],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120653,120654],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120656,120657],{},[373,120658,120659],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120661,120662],{},"下载好的：",[14,120664,120665],{},[1554,120666],{"alt":44,"src":120667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[178,120669,120670],{"start":84},[181,120671,120672],{},"安装cuDNN",[14,120674,120675],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120677,120678],{},[1554,120679],{"alt":44,"src":120680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120682,120683],{},"解压文件，并复制到对应位置完成安装",[39,120685,120687],{"className":118586,"code":120686,"language":118588,"meta":44,"style":44},"# 解压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",[46,120688,120689,120694,120705,120710,120717,120722,120738,120752,120757,120768,120777,120781,120797],{"__ignoreMap":44},[49,120690,120691],{"class":51,"line":52},[49,120692,120693],{"class":283},"# 解压cuDNN文件\n",[49,120695,120696,120699,120702],{"class":51,"line":84},[49,120697,120698],{"class":2055},"tar",[49,120700,120701],{"class":66}," -xvf",[49,120703,120704],{"class":328}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[49,120706,120707],{"class":51,"line":109},[49,120708,120709],{"class":283},"# cd进文件夹\n",[49,120711,120712,120714],{"class":51,"line":120},[49,120713,101339],{"class":66},[49,120715,120716],{"class":328}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[49,120718,120719],{"class":51,"line":135},[49,120720,120721],{"class":283},"# 复制cuDNN文件到CUDA目录\n",[49,120723,120724,120726,120728,120731,120733,120736],{"class":51,"line":1306},[49,120725,24667],{"class":2055},[49,120727,27952],{"class":328},[49,120729,120730],{"class":328}," include\u002Fcudnn",[49,120732,674],{"class":66},[49,120734,120735],{"class":328},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[49,120737,2766],{"class":55},[49,120739,120740,120742,120744,120747,120749],{"class":51,"line":1312},[49,120741,24667],{"class":2055},[49,120743,27952],{"class":328},[49,120745,120746],{"class":328}," lib\u002Flibcudnn",[49,120748,674],{"class":66},[49,120750,120751],{"class":328},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[49,120753,120754],{"class":51,"line":1403},[49,120755,120756],{"class":283},"# 对比一下有没有缺文件\n",[49,120758,120759,120761,120764,120766],{"class":51,"line":1409},[49,120760,26852],{"class":2055},[49,120762,120763],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[49,120765,674],{"class":66},[49,120767,2766],{"class":55},[49,120769,120770,120772,120775],{"class":51,"line":1421},[49,120771,26852],{"class":2055},[49,120773,120774],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[49,120776,119311],{"class":66},[49,120778,120779],{"class":51,"line":1704},[49,120780,120360],{"class":283},[49,120782,120783,120785,120787,120790,120792,120794],{"class":51,"line":1709},[49,120784,24667],{"class":2055},[49,120786,24670],{"class":328},[49,120788,120789],{"class":328}," a+r",[49,120791,120763],{"class":328},[49,120793,674],{"class":66},[49,120795,120796],{"class":55},"   \n",[49,120798,120799,120801,120803,120805,120807],{"class":51,"line":1715},[49,120800,24667],{"class":2055},[49,120802,24670],{"class":328},[49,120804,120789],{"class":328},[49,120806,120774],{"class":328},[49,120808,119311],{"class":66},[178,120810,120811],{"start":109},[181,120812,120813],{},"检查是否安装成功",[39,120815,120817],{"className":118586,"code":120816,"language":118588,"meta":44,"style":44},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[46,120818,120819,120824],{"__ignoreMap":44},[49,120820,120821],{"class":51,"line":52},[49,120822,120823],{"class":283},"# 检查cuDNN版本命令\n",[49,120825,120826,120829,120832,120834,120836,120839,120842],{"class":51,"line":84},[49,120827,120828],{"class":2055},"cat",[49,120830,120831],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[49,120833,25200],{"class":59},[49,120835,30327],{"class":2055},[49,120837,120838],{"class":328}," CUDNN_MAJOR",[49,120840,120841],{"class":66}," -A",[49,120843,47812],{"class":66},[14,120845,120846],{},"出现下图这样的就是安装成功了",[14,120848,120849],{},[1554,120850],{"alt":44,"src":120851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[178,120853,120854],{"start":120},[181,120855,120856],{},"软链接(一般不需要)",[39,120858,120860],{"className":118586,"code":120859,"language":118588,"meta":44,"style":44},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[46,120861,120862,120867],{"__ignoreMap":44},[49,120863,120864],{"class":51,"line":52},[49,120865,120866],{"class":283},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[49,120868,120869,120871],{"class":51,"line":84},[49,120870,24667],{"class":2055},[49,120872,120873],{"class":328}," ldconfig\n",[14,120875,120876],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[39,120878,120883],{"className":120879,"code":120880,"language":120881,"meta":120882,"style":44},"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",[46,120884,120885,120890,120895,120900,120905,120910,120915],{"__ignoreMap":44},[49,120886,120887],{"class":51,"line":52},[49,120888,120889],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[49,120891,120892],{"class":51,"line":84},[49,120893,120894],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[49,120896,120897],{"class":51,"line":109},[49,120898,120899],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[49,120901,120902],{"class":51,"line":120},[49,120903,120904],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[49,120906,120907],{"class":51,"line":135},[49,120908,120909],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[49,120911,120912],{"class":51,"line":1306},[49,120913,120914],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[49,120916,120917],{"class":51,"line":1312},[49,120918,120919],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120921,120922],{},"运行下方的命令",[39,120924,120926],{"className":118586,"code":120925,"language":118588,"meta":44,"style":44},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[46,120927,120928,120933,120940,120945],{"__ignoreMap":44},[49,120929,120930],{"class":51,"line":52},[49,120931,120932],{"class":283},"# cd进入CUDA路径\n",[49,120934,120935,120937],{"class":51,"line":84},[49,120936,101339],{"class":66},[49,120938,120939],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[49,120941,120942],{"class":51,"line":109},[49,120943,120944],{"class":283}," # 查看本路径下的需要软链接的文件名\n",[49,120946,120947],{"class":51,"line":120},[49,120948,120949],{"class":2055}," ls\n",[14,120951,120952],{},[1554,120953],{"alt":44,"src":120954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120956,120957,120958,18500,120961,18500,120964,120967],{},"如上图，我需要将",[46,120959,120960],{},"libcudnn_xxx_xxxxx.so.8.9.7",[46,120962,120963],{},"libcudnn_xxx_xxxxx.so.8",[46,120965,120966],{},"libcudnn_xxx_xxxxx.so","软链接",[39,120969,120971],{"className":118586,"code":120970,"language":118588,"meta":44,"style":44},"# 创建符号链接。对于每个 .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",[46,120972,120973,120978,120994,121008,121022,121036,121050,121064,121078,121083,121089,121094],{"__ignoreMap":44},[49,120974,120975],{"class":51,"line":52},[49,120976,120977],{"class":283},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[49,120979,120980,120982,120985,120988,120991],{"class":51,"line":84},[49,120981,24667],{"class":2055},[49,120983,120984],{"class":328}," ln",[49,120986,120987],{"class":66}," -sf",[49,120989,120990],{"class":328}," libcudnn_cnn_train.so.8.9.7",[49,120992,120993],{"class":328}," libcudnn_cnn_train.so.8\n",[49,120995,120996,120998,121000,121002,121005],{"class":51,"line":109},[49,120997,24667],{"class":2055},[49,120999,120984],{"class":328},[49,121001,120987],{"class":66},[49,121003,121004],{"class":328}," libcudnn_adv_infer.so.8.9.7",[49,121006,121007],{"class":328}," libcudnn_adv_infer.so.8\n",[49,121009,121010,121012,121014,121016,121019],{"class":51,"line":120},[49,121011,24667],{"class":2055},[49,121013,120984],{"class":328},[49,121015,120987],{"class":66},[49,121017,121018],{"class":328}," libcudnn_adv_train.so.8.9.7",[49,121020,121021],{"class":328}," libcudnn_adv_train.so.8\n",[49,121023,121024,121026,121028,121030,121033],{"class":51,"line":135},[49,121025,24667],{"class":2055},[49,121027,120984],{"class":328},[49,121029,120987],{"class":66},[49,121031,121032],{"class":328}," libcudnn_cnn_infer.so.8.9.7",[49,121034,121035],{"class":328}," libcudnn_cnn_infer.so.8\n",[49,121037,121038,121040,121042,121044,121047],{"class":51,"line":1306},[49,121039,24667],{"class":2055},[49,121041,120984],{"class":328},[49,121043,120987],{"class":66},[49,121045,121046],{"class":328}," libcudnn.so.8.9.7",[49,121048,121049],{"class":328}," libcudnn.so.8\n",[49,121051,121052,121054,121056,121058,121061],{"class":51,"line":1312},[49,121053,24667],{"class":2055},[49,121055,120984],{"class":328},[49,121057,120987],{"class":66},[49,121059,121060],{"class":328}," libcudnn_ops_infer.so.8.9.7",[49,121062,121063],{"class":328}," libcudnn_ops_infer.so.8\n",[49,121065,121066,121068,121070,121072,121075],{"class":51,"line":1403},[49,121067,24667],{"class":2055},[49,121069,120984],{"class":328},[49,121071,120987],{"class":66},[49,121073,121074],{"class":328}," libcudnn_ops_train.so.8.9.7",[49,121076,121077],{"class":328}," libcudnn_ops_train.so.8\n",[49,121079,121080],{"class":51,"line":1409},[49,121081,121082],{"class":283},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[49,121084,121085,121087],{"class":51,"line":1421},[49,121086,24667],{"class":2055},[49,121088,120873],{"class":328},[49,121090,121091],{"class":51,"line":1704},[49,121092,121093],{"class":283},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[49,121095,121096,121098,121101,121104,121106,121109],{"class":51,"line":1709},[49,121097,26852],{"class":2055},[49,121099,121100],{"class":66}," -l",[49,121102,121103],{"class":328}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[49,121105,674],{"class":66},[49,121107,121108],{"class":328},".so",[49,121110,119311],{"class":66},[195,121112,121114],{"id":121113},"_355-常见问题","3.5.5 常见问题",[178,121116,121117],{},[181,121118,121119],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[39,121121,121123],{"className":118586,"code":121122,"language":118588,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[46,121124,121125],{"__ignoreMap":44},[49,121126,121127,121129,121131],{"class":51,"line":52},[49,121128,24667],{"class":2055},[49,121130,118646],{"class":328},[49,121132,121133],{"class":328}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121135,121136],{},"blacklist-nouveau.conf文件内容如下：",[39,121138,121140],{"className":118586,"code":121139,"language":118588,"meta":44,"style":44},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[46,121141,121142,121150,121157,121169,121179],{"__ignoreMap":44},[49,121143,121144,121147],{"class":51,"line":52},[49,121145,121146],{"class":2055},"blacklist",[49,121148,121149],{"class":328}," nouveau\n",[49,121151,121152,121154],{"class":51,"line":84},[49,121153,121146],{"class":2055},[49,121155,121156],{"class":328}," lbm-nouveau\n",[49,121158,121159,121161,121164,121167],{"class":51,"line":109},[49,121160,115993],{"class":2055},[49,121162,121163],{"class":328}," nouveau",[49,121165,121166],{"class":328}," modeset=",[49,121168,3177],{"class":66},[49,121170,121171,121174,121176],{"class":51,"line":120},[49,121172,121173],{"class":66},"alias",[49,121175,121163],{"class":328},[49,121177,121178],{"class":328}," off\n",[49,121180,121181,121183,121186],{"class":51,"line":135},[49,121182,121173],{"class":66},[49,121184,121185],{"class":328}," lbm-nouveau",[49,121187,121178],{"class":328},[14,121189,121190],{},"接着运行下方命令",[39,121192,121194],{"className":118586,"code":121193,"language":118588,"meta":44,"style":44},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[46,121195,121196,121206,121211],{"__ignoreMap":44},[49,121197,121198,121200,121203],{"class":51,"line":52},[49,121199,24667],{"class":2055},[49,121201,121202],{"class":328}," update-initramfs",[49,121204,121205],{"class":66}," -u\n",[49,121207,121208],{"class":51,"line":84},[49,121209,121210],{"class":2055},"或者\n",[49,121212,121213,121215,121218],{"class":51,"line":109},[49,121214,24667],{"class":2055},[49,121216,121217],{"class":328}," dracut",[49,121219,121220],{"class":66}," --force\n",[14,121222,121223],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[39,121225,121227],{"className":118586,"code":121226,"language":118588,"meta":44,"style":44},"lsmod | grep nouveau\n",[46,121228,121229],{"__ignoreMap":44},[49,121230,121231,121234,121236,121238],{"class":51,"line":52},[49,121232,121233],{"class":2055},"lsmod",[49,121235,25200],{"class":59},[49,121237,30327],{"class":2055},[49,121239,121149],{"class":328},[178,121241,121242],{"start":84},[181,121243,121244],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[39,121246,121248],{"className":118586,"code":121247,"language":118588,"meta":44,"style":44},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[46,121249,121250],{"__ignoreMap":44},[49,121251,121252,121254,121256],{"class":51,"line":52},[49,121253,24667],{"class":2055},[49,121255,118646],{"class":328},[49,121257,121258],{"class":328}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121260,121261],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[39,121263,121265],{"className":118586,"code":121264,"language":118588,"meta":44,"style":44},"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",[46,121266,121267,121275,121283,121291,121298,121306,121316,121324],{"__ignoreMap":44},[49,121268,121269,121272],{"class":51,"line":52},[49,121270,121271],{"class":2055},"Section",[49,121273,121274],{"class":328}," \"OutputClass\"\n",[49,121276,121277,121280],{"class":51,"line":84},[49,121278,121279],{"class":2055},"   Identifier",[49,121281,121282],{"class":328}," \"nvidia\"\n",[49,121284,121285,121288],{"class":51,"line":109},[49,121286,121287],{"class":2055},"   MatchDriver",[49,121289,121290],{"class":328}," \"nvidia-drm\"\n",[49,121292,121293,121296],{"class":51,"line":120},[49,121294,121295],{"class":2055},"   Driver",[49,121297,121282],{"class":328},[49,121299,121300,121303],{"class":51,"line":135},[49,121301,121302],{"class":2055},"   Option",[49,121304,121305],{"class":328}," \"AllowEmptyInitialConfiguration\"\n",[49,121307,121308,121310,121313],{"class":51,"line":1306},[49,121309,121302],{"class":2055},[49,121311,121312],{"class":328}," \"PrimaryGPU\"",[49,121314,121315],{"class":328}," \"yes\"\n",[49,121317,121318,121321],{"class":51,"line":1312},[49,121319,121320],{"class":2055},"   ModulePath",[49,121322,121323],{"class":328}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[49,121325,121326],{"class":51,"line":1403},[49,121327,121328],{"class":2055},"EndSection\n",[178,121330,121331],{"start":109},[181,121332,121333],{},"安装N卡驱动提示错误",[39,121335,121337],{"className":120879,"code":121336,"language":120881,"meta":120882,"style":44},"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",[46,121338,121339],{"__ignoreMap":44},[49,121340,121341],{"class":51,"line":52},[49,121342,121336],{},[178,121344,121345],{},[181,121346,121347],{},"检查当前运行的内核版本：",[14,121349,121350],{},"运行以下命令以查看你当前正在使用的内核版本：",[39,121352,121354],{"className":117359,"code":121353,"language":117361,"meta":44,"style":44},"uname -r\n",[46,121355,121356],{"__ignoreMap":44},[49,121357,121358,121360],{"class":51,"line":52},[49,121359,70293],{"class":2055},[49,121361,121362],{"class":66}," -r\n",[178,121364,121365],{"start":84},[181,121366,121367],{},"安装内核开发文件：",[14,121369,121370,121371,121374],{},"确保你已经安装了与当前内核版本相匹配的 ",[46,121372,121373],{},"kernel-devel"," 包。运行以下命令来安装：",[39,121376,121378],{"className":117359,"code":121377,"language":117361,"meta":44,"style":44},"sudo dnf install kernel-devel-$(uname -r)\n",[46,121379,121380],{"__ignoreMap":44},[49,121381,121382,121384,121386,121388,121391,121393,121395,121397],{"class":51,"line":52},[49,121383,24667],{"class":2055},[49,121385,26406],{"class":328},[49,121387,23924],{"class":328},[49,121389,121390],{"class":328}," kernel-devel-",[49,121392,25190],{"class":55},[49,121394,70293],{"class":2055},[49,121396,119702],{"class":66},[49,121398,81],{"class":55},[14,121400,121401],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[178,121403,121404],{"start":109},[181,121405,121406],{},"安装内核源代码（如果需要）：",[14,121408,121409],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[39,121411,121413],{"className":117359,"code":121412,"language":117361,"meta":44,"style":44},"sudo dnf install kernel-headers kernel-source\n",[46,121414,121415],{"__ignoreMap":44},[49,121416,121417,121419,121421,121423,121426],{"class":51,"line":52},[49,121418,24667],{"class":2055},[49,121420,26406],{"class":328},[49,121422,23924],{"class":328},[49,121424,121425],{"class":328}," kernel-headers",[49,121427,121428],{"class":328}," kernel-source\n",[178,121430,121431],{"start":120},[181,121432,121433],{},"检查安装：",[14,121435,121436,121437,121440],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[46,121438,121439],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[39,121442,121444],{"className":117359,"code":121443,"language":117361,"meta":44,"style":44},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[46,121445,121446],{"__ignoreMap":44},[49,121447,121448,121450],{"class":51,"line":52},[49,121449,26852],{"class":2055},[49,121451,121452],{"class":328}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121454,121455,121456,121459],{},"如果仍然遇到问题，可以通过 ",[46,121457,121458],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[143,121461,121462],{},"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":44,"searchDepth":84,"depth":84,"links":121464},[121465,121469,121479,121483,121484],{"id":118562,"depth":84,"text":118563,"children":121466},[121467,121468],{"id":118572,"depth":109,"text":118573},{"id":118582,"depth":109,"text":118583},{"id":118782,"depth":84,"text":118783,"children":121470},[121471,121472,121473,121474,121475,121476,121477,121478],{"id":118786,"depth":109,"text":118787},{"id":118856,"depth":109,"text":118857},{"id":118945,"depth":109,"text":118946},{"id":119190,"depth":109,"text":119191},{"id":119260,"depth":109,"text":119261},{"id":119327,"depth":109,"text":119328},{"id":119362,"depth":109,"text":119363},{"id":119417,"depth":109,"text":119418},{"id":119468,"depth":84,"text":119469,"children":121480},[121481,121482],{"id":119472,"depth":109,"text":119473},{"id":119552,"depth":109,"text":119553},{"id":119738,"depth":84,"text":119739},{"id":119911,"depth":84,"text":119912,"children":121485},[121486,121487,121488,121489,121490],{"id":119915,"depth":109,"text":119916},{"id":119956,"depth":109,"text":119957},{"id":120243,"depth":109,"text":120244},{"id":120617,"depth":109,"text":120618},{"id":121113,"depth":109,"text":121114},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118554,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121497,"title":121498,"body":121499,"description":148,"extension":149,"meta":121839,"navigation":151,"path":121840,"seo":121841,"stem":121842,"__hash__":121843},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121500,"toc":121837},[121501,121504,121509,121512,121758,121763,121766,121802,121805,121834],[10,121502,121498],{"id":121503},"_4-命令教程长期积累",[178,121505,121506],{},[181,121507,121508],{},"大多数命令",[14,121510,121511],{},"常用 Linux 命令速查：",[39,121513,121515],{"className":117359,"code":121514,"language":117361,"meta":44,"style":44},"# 文件与目录\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",[46,121516,121517,121522,121529,121536,121544,121551,121558,121566,121574,121581,121588,121596,121600,121605,121612,121620,121627,121631,121636,121643,121651,121659,121667,121675,121679,121684,121692,121699,121706,121714,121722,121726,121731,121740,121749],{"__ignoreMap":44},[49,121518,121519],{"class":51,"line":52},[49,121520,121521],{"class":283},"# 文件与目录\n",[49,121523,121524,121526],{"class":51,"line":84},[49,121525,26852],{"class":2055},[49,121527,121528],{"class":283},"        # 列出目录内容\n",[49,121530,121531,121533],{"class":51,"line":109},[49,121532,101339],{"class":66},[49,121534,121535],{"class":283},"        # 切换目录\n",[49,121537,121538,121541],{"class":51,"line":120},[49,121539,121540],{"class":66},"pwd",[49,121542,121543],{"class":283},"       # 显示当前路径\n",[49,121545,121546,121548],{"class":51,"line":135},[49,121547,101329],{"class":2055},[49,121549,121550],{"class":283},"     # 创建目录\n",[49,121552,121553,121555],{"class":51,"line":1306},[49,121554,25413],{"class":2055},[49,121556,121557],{"class":283},"        # 删除文件或目录\n",[49,121559,121560,121563],{"class":51,"line":1312},[49,121561,121562],{"class":2055},"cp",[49,121564,121565],{"class":283},"        # 复制文件或目录\n",[49,121567,121568,121571],{"class":51,"line":1403},[49,121569,121570],{"class":2055},"mv",[49,121572,121573],{"class":283},"        # 移动\u002F重命名文件或目录\n",[49,121575,121576,121578],{"class":51,"line":1409},[49,121577,101346],{"class":2055},[49,121579,121580],{"class":283},"     # 创建空文件\n",[49,121582,121583,121585],{"class":51,"line":1421},[49,121584,120828],{"class":2055},[49,121586,121587],{"class":283},"       # 查看文件内容\n",[49,121589,121590,121593],{"class":51,"line":1704},[49,121591,121592],{"class":2055},"head\u002Ftail",[49,121594,121595],{"class":283}," # 查看文件头部\u002F尾部\n",[49,121597,121598],{"class":51,"line":1709},[49,121599,2492],{"emptyLinePlaceholder":151},[49,121601,121602],{"class":51,"line":1715},[49,121603,121604],{"class":283},"# 权限管理\n",[49,121606,121607,121609],{"class":51,"line":1720},[49,121608,24702],{"class":2055},[49,121610,121611],{"class":283},"     # 修改文件权限\n",[49,121613,121614,121617],{"class":51,"line":1734},[49,121615,121616],{"class":2055},"chown",[49,121618,121619],{"class":283},"     # 修改文件所有者\n",[49,121621,121622,121624],{"class":51,"line":1739},[49,121623,24667],{"class":2055},[49,121625,121626],{"class":283},"      # 以管理员身份执行\n",[49,121628,121629],{"class":51,"line":1745},[49,121630,2492],{"emptyLinePlaceholder":151},[49,121632,121633],{"class":51,"line":1766},[49,121634,121635],{"class":283},"# 系统信息\n",[49,121637,121638,121640],{"class":51,"line":1771},[49,121639,70293],{"class":2055},[49,121641,121642],{"class":283},"     # 系统信息\n",[49,121644,121645,121648],{"class":51,"line":1785},[49,121646,121647],{"class":2055},"df",[49,121649,121650],{"class":283},"        # 磁盘使用情况\n",[49,121652,121653,121656],{"class":51,"line":1790},[49,121654,121655],{"class":2055},"free",[49,121657,121658],{"class":283},"      # 内存使用情况\n",[49,121660,121661,121664],{"class":51,"line":1819},[49,121662,121663],{"class":2055},"top\u002Fhtop",[49,121665,121666],{"class":283},"  # 进程监控\n",[49,121668,121669,121672],{"class":51,"line":1824},[49,121670,121671],{"class":2055},"ps",[49,121673,121674],{"class":283},"        # 查看进程\n",[49,121676,121677],{"class":51,"line":1841},[49,121678,2492],{"emptyLinePlaceholder":151},[49,121680,121681],{"class":51,"line":1846},[49,121682,121683],{"class":283},"# 网络\n",[49,121685,121686,121689],{"class":51,"line":1851},[49,121687,121688],{"class":2055},"ping",[49,121690,121691],{"class":283},"      # 测试网络连通性\n",[49,121693,121694,121696],{"class":51,"line":1856},[49,121695,26940],{"class":2055},[49,121697,121698],{"class":283},"      # 发送 HTTP 请求\n",[49,121700,121701,121703],{"class":51,"line":1870},[49,121702,120352],{"class":2055},[49,121704,121705],{"class":283},"      # 下载文件\n",[49,121707,121708,121711],{"class":51,"line":1875},[49,121709,121710],{"class":2055},"ssh",[49,121712,121713],{"class":283},"       # 远程登录\n",[49,121715,121716,121719],{"class":51,"line":2669},[49,121717,121718],{"class":2055},"scp",[49,121720,121721],{"class":283},"       # 远程文件传输\n",[49,121723,121724],{"class":51,"line":2683},[49,121725,2492],{"emptyLinePlaceholder":151},[49,121727,121728],{"class":51,"line":2691},[49,121729,121730],{"class":283},"# 包管理（Debian\u002FUbuntu）\n",[49,121732,121733,121735,121737],{"class":51,"line":2696},[49,121734,117431],{"class":2055},[49,121736,117410],{"class":328},[49,121738,121739],{"class":283},"   # 更新软件源\n",[49,121741,121742,121744,121746],{"class":51,"line":2702},[49,121743,117431],{"class":2055},[49,121745,23924],{"class":328},[49,121747,121748],{"class":283},"  # 安装软件包\n",[49,121750,121751,121753,121755],{"class":51,"line":2708},[49,121752,117431],{"class":2055},[49,121754,26170],{"class":328},[49,121756,121757],{"class":283},"   # 卸载软件包\n",[178,121759,121760],{"start":84},[181,121761,121762],{},"KDE Dolphin 以root打开",[14,121764,121765],{},"kde5",[39,121767,121769],{"className":117359,"code":121768,"language":117361,"meta":44,"style":44},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[46,121770,121771],{"__ignoreMap":44},[49,121772,121773,121776,121779,121782,121784,121786,121789,121792,121794,121797,121799],{"class":51,"line":52},[49,121774,121775],{"class":2055},"pkexec",[49,121777,121778],{"class":328}," env",[49,121780,121781],{"class":328}," DISPLAY=",[49,121783,28234],{"class":55},[49,121785,28292],{"class":328},[49,121787,121788],{"class":55},"$XAUTHORITY ",[49,121790,121791],{"class":328},"KDE_SESSION_VERSION=",[49,121793,541],{"class":66},[49,121795,121796],{"class":328}," KDE_FULL_SESSION=",[49,121798,1454],{"class":66},[49,121800,121801],{"class":328}," dolphin\n",[14,121803,121804],{},"kde6",[39,121806,121808],{"className":117359,"code":121807,"language":117361,"meta":44,"style":44},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[46,121809,121810],{"__ignoreMap":44},[49,121811,121812,121814,121816,121818,121820,121822,121824,121826,121828,121830,121832],{"class":51,"line":52},[49,121813,121775],{"class":2055},[49,121815,121778],{"class":328},[49,121817,121781],{"class":328},[49,121819,28234],{"class":55},[49,121821,28292],{"class":328},[49,121823,121788],{"class":55},[49,121825,121791],{"class":328},[49,121827,566],{"class":66},[49,121829,121796],{"class":328},[49,121831,1454],{"class":66},[49,121833,121801],{"class":328},[143,121835,121836],{},"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":44,"searchDepth":84,"depth":84,"links":121838},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121498,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121845,"title":121846,"body":121847,"description":148,"extension":149,"meta":121861,"navigation":151,"path":121862,"seo":121863,"stem":121864,"__hash__":121865},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121848,"toc":121859},[121849,121852],[10,121850,121846],{"id":121851},"_5-各种环境配置",[14,121853,121854],{},[56,121855,121858],{"href":121856,"rel":121857},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23955],"电控组环境搭建大全",{"title":44,"searchDepth":84,"depth":84,"links":121860},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121846,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121867,"title":121868,"body":121869,"description":148,"extension":149,"meta":122217,"navigation":151,"path":122218,"seo":122219,"stem":122220,"__hash__":122221},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121870,"toc":122209},[121871,121874,121878,121882,121886,121891,121898,121902,122195,122199,122206],[10,121872,121868],{"id":121873},"_6-拓展功能",[166,121875,121877],{"id":121876},"_61-wine","6.1 Wine",[166,121879,121881],{"id":121880},"_62-android","6.2 Android",[195,121883,121885],{"id":121884},"_621-i卡a卡","6.2.1 I卡、A卡",[178,121887,121888],{},[181,121889,121890],{},"Wayland-Waydroid(体验超级好)",[14,121892,121893,121894],{},"Waydroid 官网与安装指南：",[56,121895,121896],{"href":121896,"rel":121897},"https:\u002F\u002Fwaydro.id\u002F",[23955],[195,121899,121901],{"id":121900},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[178,121903,121904],{},[181,121905,121906,121907,121909,121910,121914,121916,121919,121924,122121],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53805,121908],{},"BlissOS 官网下载：",[56,121911,121912],{"href":121912,"rel":121913},"https:\u002F\u002Fblissos.org\u002F",[23955],[53805,121915],{},[1554,121917],{"alt":44,"src":121918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[178,121920,121921],{"start":109},[181,121922,121923],{},"比较推荐的配置",[39,121925,121927],{"className":117359,"code":121926,"language":117361,"meta":44,"style":44},"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",[46,121928,121929,121936,121946,121956,121966,121978,121988,121995,122005,122014,122023,122033,122043,122052,122062,122072,122084,122094,122103,122113],{"__ignoreMap":44},[49,121930,121931,121934],{"class":51,"line":52},[49,121932,121933],{"class":2055},"qemu-system-x86_64",[49,121935,24769],{"class":66},[49,121937,121938,121941,121944],{"class":51,"line":84},[49,121939,121940],{"class":66},"        -M",[49,121942,121943],{"class":328}," q35,vmport=off",[49,121945,24769],{"class":66},[49,121947,121948,121951,121954],{"class":51,"line":109},[49,121949,121950],{"class":66},"        -accel",[49,121952,121953],{"class":328}," kvm",[49,121955,24769],{"class":66},[49,121957,121958,121961,121964],{"class":51,"line":120},[49,121959,121960],{"class":66},"        -cpu",[49,121962,121963],{"class":328}," qemu64,+sse3,+sse4.2",[49,121965,24769],{"class":66},[49,121967,121968,121971,121974,121976],{"class":51,"line":135},[49,121969,121970],{"class":66},"        -smp",[49,121972,121973],{"class":328}," 8,cores=",[49,121975,515],{"class":66},[49,121977,24769],{"class":66},[49,121979,121980,121983,121986],{"class":51,"line":1306},[49,121981,121982],{"class":66},"        -m",[49,121984,121985],{"class":328}," 6G",[49,121987,24769],{"class":66},[49,121989,121990,121993],{"class":51,"line":1312},[49,121991,121992],{"class":66},"        -usb",[49,121994,24769],{"class":66},[49,121996,121997,122000,122003],{"class":51,"line":1403},[49,121998,121999],{"class":66},"        -device",[49,122001,122002],{"class":328}," virtio-tablet",[49,122004,24769],{"class":66},[49,122006,122007,122009,122012],{"class":51,"line":1409},[49,122008,121999],{"class":66},[49,122010,122011],{"class":328}," virtio-keyboard",[49,122013,24769],{"class":66},[49,122015,122016,122018,122021],{"class":51,"line":1421},[49,122017,121999],{"class":66},[49,122019,122020],{"class":328}," usb-tablet",[49,122022,24769],{"class":66},[49,122024,122025,122028,122031],{"class":51,"line":1704},[49,122026,122027],{"class":66},"        -bios",[49,122029,122030],{"class":328}," OVMF-pure-efi64.fd",[49,122032,24769],{"class":66},[49,122034,122035,122038,122041],{"class":51,"line":1709},[49,122036,122037],{"class":66},"        -net",[49,122039,122040],{"class":328}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[49,122042,24769],{"class":66},[49,122044,122045,122047,122050],{"class":51,"line":1715},[49,122046,122037],{"class":66},[49,122048,122049],{"class":328}," nic,model=virtio",[49,122051,24769],{"class":66},[49,122053,122054,122057,122060],{"class":51,"line":1720},[49,122055,122056],{"class":66},"        -audio",[49,122058,122059],{"class":328}," sdl,model=hda",[49,122061,24769],{"class":66},[49,122063,122064,122067,122070],{"class":51,"line":1734},[49,122065,122066],{"class":66},"        -display",[49,122068,122069],{"class":328}," sdl,gl=on,show-cursor=on",[49,122071,24769],{"class":66},[49,122073,122074,122076,122079,122082],{"class":51,"line":1739},[49,122075,121999],{"class":66},[49,122077,122078],{"class":328}," virtio-vga-gl,xres=1920,yres=",[49,122080,122081],{"class":66},"1080",[49,122083,24769],{"class":66},[49,122085,122086,122089,122092],{"class":51,"line":1745},[49,122087,122088],{"class":66},"        -drive",[49,122090,122091],{"class":328}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[49,122093,24769],{"class":66},[49,122095,122096,122098,122101],{"class":51,"line":1766},[49,122097,122088],{"class":66},[49,122099,122100],{"class":328}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[49,122102,24769],{"class":66},[49,122104,122105,122108,122111],{"class":51,"line":1771},[49,122106,122107],{"class":66},"        -monitor",[49,122109,122110],{"class":328}," stdio",[49,122112,24769],{"class":66},[49,122114,122115,122118],{"class":51,"line":1785},[49,122116,122117],{"class":66},"        -serial",[49,122119,122120],{"class":328}," none\n",[178,122122,122123],{"start":135},[181,122124,122125,122126],{},"常用操作：",[178,122127,122128,122131,122187],{},[181,122129,122130],{},"全屏：Ctrl+Alt+F",[181,122132,122133,122134,122139],{},"adb调试",[178,122135,122136],{},[181,122137,122138],{},"使Linux与Android用ADB连接。",[39,122140,122142],{"className":117359,"code":122141,"language":117361,"meta":44,"style":44},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[46,122143,122144,122149,122160,122165,122177,122182],{"__ignoreMap":44},[49,122145,122146],{"class":51,"line":52},[49,122147,122148],{"class":283},"# 连接安卓\n",[49,122150,122151,122154,122157],{"class":51,"line":84},[49,122152,122153],{"class":2055},"adb",[49,122155,122156],{"class":328}," connect",[49,122158,122159],{"class":66}," 127.0.0.1\n",[49,122161,122162],{"class":51,"line":109},[49,122163,122164],{"class":283},"# 打开shell\n",[49,122166,122167,122169,122171,122174],{"class":51,"line":120},[49,122168,122153],{"class":2055},[49,122170,26974],{"class":66},[49,122172,122173],{"class":328}," 127.0.0.1:5555",[49,122175,122176],{"class":328}," shell\n",[49,122178,122179],{"class":51,"line":135},[49,122180,122181],{"class":283},"# 使用root权限\n",[49,122183,122184],{"class":51,"line":1306},[49,122185,122186],{"class":2055},"su\n",[181,122188,122189,122190],{},"中文输入法",[178,122191,122192],{},[181,122193,122194],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[166,122196,122198],{"id":122197},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122200,122201,122202],{},"rEFInd 官网与文档：",[56,122203,122204],{"href":122204,"rel":122205},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23955],[143,122207,122208],{},"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":44,"searchDepth":84,"depth":84,"links":122210},[122211,122212,122216],{"id":121876,"depth":84,"text":121877},{"id":121880,"depth":84,"text":121881,"children":122213},[122214,122215],{"id":121884,"depth":109,"text":121885},{"id":121900,"depth":109,"text":121901},{"id":122197,"depth":84,"text":122198},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121868,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122223,"title":122224,"body":122225,"description":148,"extension":149,"meta":125524,"navigation":151,"path":125525,"seo":125526,"stem":125527,"__hash__":125528},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122226,"toc":125498},[122227,122230,122234,122237,122244,122494,122497,122569,122572,122576,122580,122585,122588,122591,122594,122599,122602,122605,122608,122613,122616,122621,122624,122627,122632,122635,122640,122643,122647,122651,122654,122659,122662,122676,122679,122682,122691,122694,122703,122706,122709,122718,122721,122730,122733,122736,122745,122748,122751,122766,122769,122772,122781,122786,122789,122792,122801,122804,122813,122816,122825,122828,122837,122842,122845,122853,122858,122861,122870,122873,122881,122886,122889,122898,122901,122904,122908,122911,122916,122919,122924,122938,122943,122948,122959,122964,122970,122975,122990,122995,122998,123003,123008,123013,123021,123026,123033,123038,123049,123054,123057,123061,123064,123067,123072,123075,123094,123099,123102,123111,123116,123119,123141,123144,123174,123177,123182,123185,123199,123204,123223,123226,123229,123234,123246,123251,123256,123259,123264,123267,123282,123285,123290,123295,123299,123304,123344,123347,123351,123357,123363,123368,123371,123378,123383,123390,123393,123396,123403,123417,123420,123480,123483,123497,123509,123512,123515,123518,123582,123585,123588,123591,123611,123614,123619,123626,123630,123633,123637,123642,123647,123651,123654,123657,123699,123704,123707,123729,123744,123746,123751,123763,123823,123825,123827,123881,123883,123885,123891,123896,123899,123904,123908,123911,123973,123978,123981,123983,123987,123999,124081,124083,124085,124139,124145,124147,124151,124156,124158,124163,124167,124187,124222,124226,124229,124232,124235,124242,124245,124257,124260,124275,124278,124297,124345,124348,124365,124368,124382,124387,124390,124399,124414,124426,124464,124469,124478,124483,124488,124514,124523,124527,124531,124536,124539,124543,124547,124552,124555,124560,124563,124568,124571,124576,124579,124583,124588,124591,124596,124599,124603,124608,124611,124616,124619,124624,124627,124631,124636,124639,124644,124647,124652,124655,124659,124664,124667,124672,124675,124680,124683,124688,124691,124696,124699,124704,124707,124711,124716,124719,124724,124731,124735,124740,124743,124748,124751,124755,124760,124763,124766,124769,124772,124775,124779,124782,124792,124797,124802,124824,124829,124834,124841,124845,124850,124853,124856,124861,124864,124867,124870,124873,124876,124879,124882,124885,124888,124891,124894,124897,124902,124907,124912,124917,124922,124927,124932,124935,124939,124942,124946,124951,124956,124961,124966,124970,124976,124984,124989,124992,124997,125012,125015,125020,125054,125069,125072,125127,125153,125165,125168,125177,125180,125195,125200,125203,125209,125214,125217,125222,125225,125230,125235,125242,125245,125260,125263,125298,125303,125311,125349,125352,125355,125360,125363,125368,125379,125413,125418,125421,125430,125435,125441,125444,125449,125458,125463,125466,125469,125474,125482,125485,125490,125495],[10,122228,122224],{"id":122229},"_7-其他操作",[166,122231,122233],{"id":122232},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122235,122236],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122238,122239,122240,122243],{},"进入工控机的硬盘目录，进入",[46,122241,122242],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[39,122245,122249],{"className":122246,"code":122247,"language":122248,"meta":44,"style":44},"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",[46,122250,122251,122259,122270,122277,122284,122296,122303,122315,122326,122337,122344,122351,122358,122370,122382,122389,122401,122413,122420,122432,122444,122456,122467,122474,122485],{"__ignoreMap":44},[49,122252,122253,122256],{"class":51,"line":52},[49,122254,122255],{"class":51389},"network",[49,122257,122258],{"class":55},": \n",[49,122260,122261,122264,122266,122268],{"class":51,"line":84},[49,122262,122263],{"class":51389},"  version",[49,122265,51526],{"class":55},[49,122267,301],{"class":66},[49,122269,2766],{"class":55},[49,122271,122272,122275],{"class":51,"line":109},[49,122273,122274],{"class":51389},"  wifis",[49,122276,122258],{"class":55},[49,122278,122279,122282],{"class":51,"line":120},[49,122280,122281],{"class":51389},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[49,122283,122258],{"class":55},[49,122285,122286,122289,122291,122294],{"class":51,"line":135},[49,122287,122288],{"class":51389},"      renderer",[49,122290,51526],{"class":55},[49,122292,122293],{"class":328},"NetworkManager",[49,122295,2766],{"class":55},[49,122297,122298,122301],{"class":51,"line":1306},[49,122299,122300],{"class":51389},"      match",[49,122302,122258],{"class":55},[49,122304,122305,122308,122310,122313],{"class":51,"line":1312},[49,122306,122307],{"class":51389},"        name",[49,122309,51526],{"class":55},[49,122311,122312],{"class":328},"\"wlan0\"",[49,122314,2766],{"class":55},[49,122316,122317,122320,122322,122324],{"class":51,"line":1403},[49,122318,122319],{"class":51389},"      dhcp4",[49,122321,51526],{"class":55},[49,122323,1454],{"class":66},[49,122325,2766],{"class":55},[49,122327,122328,122331,122333,122335],{"class":51,"line":1409},[49,122329,122330],{"class":51389},"      dhcp6",[49,122332,51526],{"class":55},[49,122334,1454],{"class":66},[49,122336,2766],{"class":55},[49,122338,122339,122342],{"class":51,"line":1421},[49,122340,122341],{"class":51389},"      access-points",[49,122343,122258],{"class":55},[49,122345,122346,122349],{"class":51,"line":1704},[49,122347,122348],{"class":328},"        \"EMIS_Vinci_Robocon_5G\"",[49,122350,122258],{"class":55},[49,122352,122353,122356],{"class":51,"line":1709},[49,122354,122355],{"class":51389},"          auth",[49,122357,122258],{"class":55},[49,122359,122360,122363,122365,122368],{"class":51,"line":1715},[49,122361,122362],{"class":51389},"            key-management",[49,122364,51526],{"class":55},[49,122366,122367],{"class":328},"\"psk\"",[49,122369,2766],{"class":55},[49,122371,122372,122375,122377,122380],{"class":51,"line":1720},[49,122373,122374],{"class":51389},"            password",[49,122376,51526],{"class":55},[49,122378,122379],{"class":328},"\"vinci666\"",[49,122381,2766],{"class":55},[49,122383,122384,122387],{"class":51,"line":1734},[49,122385,122386],{"class":51389},"          networkmanager",[49,122388,122258],{"class":55},[49,122390,122391,122394,122396,122399],{"class":51,"line":1739},[49,122392,122393],{"class":51389},"            uuid",[49,122395,51526],{"class":55},[49,122397,122398],{"class":328},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[49,122400,2766],{"class":55},[49,122402,122403,122406,122408,122411],{"class":51,"line":1745},[49,122404,122405],{"class":51389},"            name",[49,122407,51526],{"class":55},[49,122409,122410],{"class":328},"\"EMIS_Vinci_Robocon_5G\"",[49,122412,2766],{"class":55},[49,122414,122415,122418],{"class":51,"line":1766},[49,122416,122417],{"class":51389},"            passthrough",[49,122419,122258],{"class":55},[49,122421,122422,122425,122427,122430],{"class":51,"line":1771},[49,122423,122424],{"class":51389},"              wifi-security.auth-alg",[49,122426,51526],{"class":55},[49,122428,122429],{"class":328},"\"open\"",[49,122431,2766],{"class":55},[49,122433,122434,122437,122439,122442],{"class":51,"line":1785},[49,122435,122436],{"class":51389},"              ipv6.addr-gen-mode",[49,122438,51526],{"class":55},[49,122440,122441],{"class":328},"\"default\"",[49,122443,2766],{"class":55},[49,122445,122446,122449,122451,122454],{"class":51,"line":1790},[49,122447,122448],{"class":51389},"              ipv6.ip6-privacy",[49,122450,51526],{"class":55},[49,122452,122453],{"class":328},"\"-1\"",[49,122455,2766],{"class":55},[49,122457,122458,122461,122463,122465],{"class":51,"line":1819},[49,122459,122460],{"class":51389},"              proxy._",[49,122462,51526],{"class":55},[49,122464,7742],{"class":328},[49,122466,2766],{"class":55},[49,122468,122469,122472],{"class":51,"line":1824},[49,122470,122471],{"class":51389},"      networkmanager",[49,122473,122258],{"class":55},[49,122475,122476,122479,122481,122483],{"class":51,"line":1841},[49,122477,122478],{"class":51389},"        uuid",[49,122480,51526],{"class":55},[49,122482,122398],{"class":328},[49,122484,2766],{"class":55},[49,122486,122487,122489,122491],{"class":51,"line":1846},[49,122488,122307],{"class":51389},[49,122490,51526],{"class":55},[49,122492,122493],{"class":328},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122495,122496],{},"将其改为新wifi的名和密码：",[39,122498,122500],{"className":122246,"code":122499,"language":122248,"meta":44,"style":44},"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",[46,122501,122502,122508,122517,122523,122530,122539,122547,122553,122559],{"__ignoreMap":44},[49,122503,122504,122506],{"class":51,"line":52},[49,122505,122255],{"class":51389},[49,122507,3831],{"class":55},[49,122509,122510,122512,122514],{"class":51,"line":84},[49,122511,122263],{"class":51389},[49,122513,51526],{"class":55},[49,122515,122516],{"class":66},"2\n",[49,122518,122519,122521],{"class":51,"line":109},[49,122520,122274],{"class":51389},[49,122522,3831],{"class":55},[49,122524,122525,122528],{"class":51,"line":120},[49,122526,122527],{"class":51389},"    wlan0",[49,122529,3831],{"class":55},[49,122531,122532,122534,122536],{"class":51,"line":135},[49,122533,122319],{"class":51389},[49,122535,51526],{"class":55},[49,122537,122538],{"class":66},"true\n",[49,122540,122541,122543,122545],{"class":51,"line":1306},[49,122542,122330],{"class":51389},[49,122544,51526],{"class":55},[49,122546,122538],{"class":66},[49,122548,122549,122551],{"class":51,"line":1312},[49,122550,122341],{"class":51389},[49,122552,3831],{"class":55},[49,122554,122555,122557],{"class":51,"line":1403},[49,122556,122348],{"class":328},[49,122558,3831],{"class":55},[49,122560,122561,122564,122566],{"class":51,"line":1409},[49,122562,122563],{"class":51389},"          password",[49,122565,51526],{"class":55},[49,122567,122568],{"class":328},"\"vinci666\"\n",[14,122570,122571],{},"工控机开机即可连上网。",[166,122573,122575],{"id":122574},"_72-ssh远程开发","7.2 SSH远程开发",[195,122577,122579],{"id":122578},"_721-环境准备","7.2.1 环境准备",[14,122581,122582],{},[373,122583,122584],{},"1.硬件准备",[14,122586,122587],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122589,122590],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122592,122593],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122595,122596],{},[373,122597,122598],{},"2.设置固定IP",[14,122600,122601],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122603,122604],{},"1.进入设置界面",[14,122606,122607],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122609,122610],{},[1554,122611],{"alt":44,"src":122612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122614,122615],{},"2.配置所连接的网络",[14,122617,122618],{},[1554,122619],{"alt":44,"src":122620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122622,122623],{},"3.设置固定IP",[14,122625,122626],{},"查看当前IP地址。",[14,122628,122629],{},[1554,122630],{"alt":44,"src":122631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122633,122634],{},"设置固定IP。",[14,122636,122637],{},[1554,122638],{"alt":44,"src":122639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122641,122642],{},"至此，IP配置完毕。",[195,122644,122646],{"id":122645},"_722-环境搭建","7.2.2 环境搭建",[14,122648,122649],{},[373,122650,25844],{},[14,122652,122653],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122655,122656],{},[373,122657,122658],{},"实现",[14,122660,122661],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[178,122663,122664,122667,122670,122673],{},[181,122665,122666],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[181,122668,122669],{},"远程主机启动SSH服务；",[181,122671,122672],{},"本地主机登陆远程主机；",[181,122674,122675],{},"实现数据传输。",[14,122677,122678],{},"1.安装SSH客户端与服务端",[14,122680,122681],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[39,122683,122685],{"className":120879,"code":122684,"language":120881,"meta":120882,"style":44}," sudo apt install openssh-server\n",[46,122686,122687],{"__ignoreMap":44},[49,122688,122689],{"class":51,"line":52},[49,122690,122684],{},[14,122692,122693],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[39,122695,122697],{"className":120879,"code":122696,"language":120881,"meta":120882,"style":44},"sudo apt install openssh-client\n",[46,122698,122699],{"__ignoreMap":44},[49,122700,122701],{"class":51,"line":52},[49,122702,122696],{},[14,122704,122705],{},"2.远程主机启动SSH服务",[14,122707,122708],{},"远程主机启动 ssh 服务命令如下：",[39,122710,122712],{"className":120879,"code":122711,"language":120881,"meta":120882,"style":44},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[46,122713,122714],{"__ignoreMap":44},[49,122715,122716],{"class":51,"line":52},[49,122717,122711],{},[14,122719,122720],{},"启动后可使用如下命令查看服务是否正常运行：",[39,122722,122724],{"className":120879,"code":122723,"language":120881,"meta":120882,"style":44},"ps -e | grep ssh\n",[46,122725,122726],{"__ignoreMap":44},[49,122727,122728],{"class":51,"line":52},[49,122729,122723],{},[14,122731,122732],{},"如果启动成功，会包含 sshd 程序。",[14,122734,122735],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[39,122737,122739],{"className":120879,"code":122738,"language":120881,"meta":120882,"style":44},"sudo systemctl enable ssh\n",[46,122740,122741],{"__ignoreMap":44},[49,122742,122743],{"class":51,"line":52},[49,122744,122738],{},[14,122746,122747],{},"3.本地远程登录",[14,122749,122750],{},"登录远程主机可以调用如下命令:",[39,122752,122754],{"className":117359,"code":122753,"language":117361,"meta":44,"style":44},"ssh -X 用户名@ip地址\n",[46,122755,122756],{"__ignoreMap":44},[49,122757,122758,122760,122763],{"class":51,"line":52},[49,122759,121710],{"class":2055},[49,122761,122762],{"class":66}," -X",[49,122764,122765],{"class":328}," 用户名@ip地址\n",[14,122767,122768],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122770,122771],{},"如果退出，可以调用exit命令：",[39,122773,122775],{"className":120879,"code":122774,"language":120881,"meta":120882,"style":44},"exit\n",[46,122776,122777],{"__ignoreMap":44},[49,122778,122779],{"class":51,"line":52},[49,122780,122774],{},[14,122782,122783],{},[373,122784,122785],{},"4.实现数据传输",[14,122787,122788],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122790,122791],{},"上传文件指令格式如下：",[39,122793,122795],{"className":120879,"code":122794,"language":120881,"meta":120882,"style":44},"scp 本地文件路径 账号@ip:路径\n",[46,122796,122797],{"__ignoreMap":44},[49,122798,122799],{"class":51,"line":52},[49,122800,122794],{},[14,122802,122803],{},"上传文件夹指令格式如下：",[39,122805,122807],{"className":120879,"code":122806,"language":120881,"meta":120882,"style":44},"scp -r 本地文件夹路径 账号@ip:路径\n",[46,122808,122809],{"__ignoreMap":44},[49,122810,122811],{"class":51,"line":52},[49,122812,122806],{},[14,122814,122815],{},"下载文件指令格式如下：",[39,122817,122819],{"className":120879,"code":122818,"language":120881,"meta":120882,"style":44},"scp 账号@ip:路径 本地文件夹路径\n",[46,122820,122821],{"__ignoreMap":44},[49,122822,122823],{"class":51,"line":52},[49,122824,122818],{},[14,122826,122827],{},"下载文件夹指令格式如下：",[39,122829,122831],{"className":120879,"code":122830,"language":120881,"meta":120882,"style":44},"scp -r 账号@ip:路径 本地文件夹路径\n",[46,122832,122833],{"__ignoreMap":44},[49,122834,122835],{"class":51,"line":52},[49,122836,122830],{},[14,122838,122839],{},[373,122840,122841],{},"优化",[14,122843,122844],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[178,122846,122847,122850],{},[181,122848,122849],{},"本地生成密钥对；",[181,122851,122852],{},"将公钥上传至远程主机。",[14,122854,122855],{},[373,122856,122857],{},"1.生成密钥对",[14,122859,122860],{},"本地客户端生成公私钥：（一路回车默认即可）",[39,122862,122864],{"className":120879,"code":122863,"language":120881,"meta":120882,"style":44},"ssh-keygen\n",[46,122865,122866],{"__ignoreMap":44},[49,122867,122868],{"class":51,"line":52},[49,122869,122863],{},[14,122871,122872],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[178,122874,122875,122878],{},[181,122876,122877],{},"id_rsa （私钥）；",[181,122879,122880],{},"id_rsa.pub (公钥)。",[14,122882,122883],{},[373,122884,122885],{},"2.公钥上传",[14,122887,122888],{},"上传指令如下：",[39,122890,122892],{"className":120879,"code":122891,"language":120881,"meta":120882,"style":44},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[46,122893,122894],{"__ignoreMap":44},[49,122895,122896],{"class":51,"line":52},[49,122897,122891],{},[14,122899,122900],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122902,122903],{},"以后再远程登录就无需录入密码了。",[195,122905,122907],{"id":122906},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122909,122910],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122912,122913],{},[373,122914,122915],{},"1.准备工作",[14,122917,122918],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122920,122921],{},[373,122922,122923],{},"2.为VScode安装远程开发插件",[14,122925,122926,122927,122930,122931,122934,122935,28476],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[46,122928,122929],{},"扩展：商店","的搜索栏输入",[46,122932,122933],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[46,122936,122937],{},"安装",[14,122939,122940],{},[1554,122941],{"alt":44,"src":122942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122944,122945],{},[373,122946,122947],{},"3.配置远程连接",[14,122949,122950,122951,122954,122955,122958],{},"步骤1：使用快捷键",[46,122952,122953],{},"ctrl + shift + p","打开命令输入窗口，并输入",[46,122956,122957],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122960,122961],{},[1554,122962],{"alt":44,"src":122963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122965,122966,122967,28476],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[46,122968,122969],{},"Add New SSH Host",[14,122971,122972],{},[1554,122973],{"alt":44,"src":122974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122976,122977,122978,122981,122982,122985,122986,122989],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[46,122979,122980],{},"ssh +X ubuntu@192.168.43.164","，其中，",[46,122983,122984],{},"ubuntu","需要替换为你的登录用户名，",[46,122987,122988],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122991,122992],{},[1554,122993],{"alt":44,"src":122994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122996,122997],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122999,123000],{},[1554,123001],{"alt":44,"src":123002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123004,123005],{},[1554,123006],{"alt":44,"src":123007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123009,123010],{},[373,123011,123012],{},"4.使用",[14,123014,123015,123016,122954,123018,123020],{},"步骤1：继续使用快捷键",[46,123017,122953],{},[46,123019,122957],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123022,123023],{},[1554,123024],{"alt":44,"src":123025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123027,123028,123029,123032],{},"或者，也可以点击侧边栏的",[46,123030,123031],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123034,123035],{},[1554,123036],{"alt":44,"src":123037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123039,123040,123041,123044,123045,123048],{},"步骤2：选择菜单栏的",[46,123042,123043],{},"文件","下的",[46,123046,123047],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123050,123051],{},[1554,123052],{"alt":44,"src":123053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123055,123056],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[166,123058,123060],{"id":123059},"_73-远程桌面","7.3 远程桌面",[14,123062,123063],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123065,123066],{},"我们选择使用VNC来看。",[178,123068,123069],{},[181,123070,123071],{},"安装VNC服务器：",[14,123073,123074],{},"这里以TigerVNC为例进行安装：",[39,123076,123078],{"className":117359,"code":123077,"language":117361,"meta":44,"style":44},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[46,123079,123080],{"__ignoreMap":44},[49,123081,123082,123084,123086,123088,123091],{"class":51,"line":52},[49,123083,24667],{"class":2055},[49,123085,117380],{"class":328},[49,123087,23924],{"class":328},[49,123089,123090],{"class":328}," tigervnc-standalone-server",[49,123092,123093],{"class":328}," tigervnc-common\n",[178,123095,123096],{"start":84},[181,123097,123098],{},"设置VNC密码：",[14,123100,123101],{},"为VNC用户设置密码，运行以下命令：",[39,123103,123105],{"className":117359,"code":123104,"language":117361,"meta":44,"style":44},"vncpasswd\n",[46,123106,123107],{"__ignoreMap":44},[49,123108,123109],{"class":51,"line":52},[49,123110,123104],{"class":2055},[178,123112,123113],{"start":109},[181,123114,123115],{},"配置VNC启动脚本:",[14,123117,123118],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[39,123120,123122],{"className":117359,"code":123121,"language":117361,"meta":44,"style":44},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[46,123123,123124,123133],{"__ignoreMap":44},[49,123125,123126,123128,123130],{"class":51,"line":52},[49,123127,101329],{"class":2055},[49,123129,29307],{"class":66},[49,123131,123132],{"class":328}," ~\u002F.vnc\n",[49,123134,123135,123138],{"class":51,"line":84},[49,123136,123137],{"class":2055},"nano",[49,123139,123140],{"class":328}," ~\u002F.vnc\u002Fxstartup\n",[14,123142,123143],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[39,123145,123147],{"className":117359,"code":123146,"language":117361,"meta":44,"style":44},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[46,123148,123149,123154,123162,123169],{"__ignoreMap":44},[49,123150,123151],{"class":51,"line":52},[49,123152,123153],{"class":283},"#!\u002Fbin\u002Fsh\n",[49,123155,123156,123159],{"class":51,"line":84},[49,123157,123158],{"class":66},"unset",[49,123160,123161],{"class":328}," SESSION_MANAGER\n",[49,123163,123164,123166],{"class":51,"line":109},[49,123165,123158],{"class":66},[49,123167,123168],{"class":328}," DBUS_SESSION_BUS_ADDRESS\n",[49,123170,123171],{"class":51,"line":120},[49,123172,123173],{"class":2055},"gnome-session\n",[14,123175,123176],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[178,123178,123179],{"start":120},[181,123180,123181],{},"给予执行权限：",[14,123183,123184],{},"为xstartup文件设置执行权限：",[39,123186,123188],{"className":117359,"code":123187,"language":117361,"meta":44,"style":44},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[46,123189,123190],{"__ignoreMap":44},[49,123191,123192,123194,123197],{"class":51,"line":52},[49,123193,24702],{"class":2055},[49,123195,123196],{"class":328}," +x",[49,123198,123140],{"class":328},[178,123200,123201],{"start":135},[181,123202,123203],{},"启动VNC服务器：",[39,123205,123207],{"className":117359,"code":123206,"language":117361,"meta":44,"style":44},"vncserver -geometry 1920x1080 -localhost=0\n",[46,123208,123209],{"__ignoreMap":44},[49,123210,123211,123214,123217,123220],{"class":51,"line":52},[49,123212,123213],{"class":2055},"vncserver",[49,123215,123216],{"class":66}," -geometry",[49,123218,123219],{"class":328}," 1920x1080",[49,123221,123222],{"class":66}," -localhost=0\n",[14,123224,123225],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123227,123228],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[178,123230,123231],{"start":1306},[181,123232,123233],{},"查看已开启的VNC服务器：",[39,123235,123237],{"className":117359,"code":123236,"language":117361,"meta":44,"style":44},"vncserver -list\n",[46,123238,123239],{"__ignoreMap":44},[49,123240,123241,123243],{"class":51,"line":52},[49,123242,123213],{"class":2055},[49,123244,123245],{"class":66}," -list\n",[14,123247,123248],{},[1554,123249],{"alt":44,"src":123250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[178,123252,123253],{"start":1312},[181,123254,123255],{},"连接到VNC服务器：",[14,123257,123258],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[178,123260,123261],{"start":1403},[181,123262,123263],{},"停止VNC服务器：",[14,123265,123266],{},"如果需要停止VNC服务器，可以使用以下命令：",[39,123268,123270],{"className":117359,"code":123269,"language":117361,"meta":44,"style":44},"vncserver -kill :1\n",[46,123271,123272],{"__ignoreMap":44},[49,123273,123274,123276,123279],{"class":51,"line":52},[49,123275,123213],{"class":2055},[49,123277,123278],{"class":66}," -kill",[49,123280,123281],{"class":328}," :1\n",[14,123283,123284],{},"将:1替换为你实际使用的显示编号。",[14,123286,123287],{},[1554,123288],{"alt":44,"src":123289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123291,123292],{},[1554,123293],{"alt":44,"src":123294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[166,123296,123298],{"id":123297},"_74-usb端口设置","7.4 USB端口设置",[14,123300,123301],{},[373,123302,123303],{},"首先先配置好权限",[39,123305,123307],{"className":117359,"code":123306,"language":117361,"meta":44,"style":44},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[46,123308,123309,123314,123327,123334,123339],{"__ignoreMap":44},[49,123310,123311],{"class":51,"line":52},[49,123312,123313],{"class":283},"# 将用户权限提高\n",[49,123315,123316,123318,123320,123322,123325],{"class":51,"line":84},[49,123317,24667],{"class":2055},[49,123319,26665],{"class":328},[49,123321,26668],{"class":66},[49,123323,123324],{"class":328}," dialout",[49,123326,26673],{"class":55},[49,123328,123329,123331],{"class":51,"line":109},[49,123330,26692],{"class":2055},[49,123332,123333],{"class":328}," dialout\n",[49,123335,123336],{"class":51,"line":120},[49,123337,123338],{"class":283},"# 查看下面命令是否输出dialout（若输出才正常）\n",[49,123340,123341],{"class":51,"line":135},[49,123342,123343],{"class":2055},"groups\n",[14,123345,123346],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[195,123348,123350],{"id":123349},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123352,123353,123356],{},[373,123354,123355],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123358,123359,123362],{},[373,123360,123361],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123364,123365],{},[373,123366,123367],{},"流程如下：",[14,123369,123370],{},"（1）.查找设备idVendor和idProduct",[14,123372,123373,123374,123377],{},"接入两个USB设备，在终端调用指令",[46,123375,123376],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123379,123380],{},[1554,123381],{"alt":44,"src":123382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123384,123385,123386,123389],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[46,123387,123388],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123391,123392],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123394,123395],{},"（2）.编写映射规则",[14,123397,123398,123399,123402],{},"在",[46,123400,123401],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[39,123404,123406],{"className":117359,"code":123405,"language":117361,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[46,123407,123408],{"__ignoreMap":44},[49,123409,123410,123412,123414],{"class":51,"line":52},[49,123411,24667],{"class":2055},[49,123413,118646],{"class":328},[49,123415,123416],{"class":328}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123418,123419],{},"输入如下内容：",[39,123421,123423],{"className":117359,"code":123422,"language":117361,"meta":44,"style":44},"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",[46,123424,123425,123455],{"__ignoreMap":44},[49,123426,123427,123430,123432,123435,123438,123441,123444,123446,123449,123452],{"class":51,"line":52},[49,123428,123429],{"class":55},"KERNEL",[49,123431,60],{"class":59},[49,123433,123434],{"class":328},"=\"ttyUSB*\",",[49,123436,123437],{"class":2055}," ATTRS",[49,123439,123440],{"class":328},"{idVendor}==",[49,123442,123443],{"class":2055},"\"10c4\"",[49,123445,76],{"class":2055},[49,123447,123448],{"class":328}," ATTRS{idProduct}==\"ea60\",",[49,123450,123451],{"class":328}," MODE:=\"0777\",",[49,123453,123454],{"class":328}," SYMLINK+=\"mylidar\"\n",[49,123456,123457,123459,123461,123463,123465,123467,123470,123472,123475,123477],{"class":51,"line":84},[49,123458,123429],{"class":55},[49,123460,60],{"class":59},[49,123462,123434],{"class":328},[49,123464,123437],{"class":2055},[49,123466,123440],{"class":328},[49,123468,123469],{"class":2055},"\"1a86\"",[49,123471,76],{"class":2055},[49,123473,123474],{"class":328}," ATTRS{idProduct}==\"7523\",",[49,123476,123451],{"class":328},[49,123478,123479],{"class":328}," SYMLINK+=\"mycar\"\n",[14,123481,123482],{},"代码解释：",[1226,123484,123485,123488,123491,123494],{},[181,123486,123487],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[181,123489,123490],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[181,123492,123493],{},"SYMLINK是符号连接，即绑定的别名；",[181,123495,123496],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123498,123499,123500,123503,123506],{},"***小提示：***",[23643,123501,123502],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[46,123504,123505],{},"\u002Fetc\u002Fudev\u002Frule.d",[23643,123507,123508],{},"目录即可。",[14,123510,123511],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123513,123514],{},"（3）.使规则生效",[14,123516,123517],{},"在终端下输入如下指令：",[39,123519,123521],{"className":117359,"code":123520,"language":117361,"meta":44,"style":44},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[46,123522,123523,123528,123540,123551,123555,123560,123573],{"__ignoreMap":44},[49,123524,123525],{"class":51,"line":52},[49,123526,123527],{"class":283},"# Ubuntu用下方命令\n",[49,123529,123530,123532,123534,123537],{"class":51,"line":84},[49,123531,24667],{"class":2055},[49,123533,120111],{"class":328},[49,123535,123536],{"class":328}," udev",[49,123538,123539],{"class":328}," reload\n",[49,123541,123542,123544,123546,123548],{"class":51,"line":109},[49,123543,24667],{"class":2055},[49,123545,120111],{"class":328},[49,123547,123536],{"class":328},[49,123549,123550],{"class":328}," restart\n",[49,123552,123553],{"class":51,"line":120},[49,123554,2492],{"emptyLinePlaceholder":151},[49,123556,123557],{"class":51,"line":135},[49,123558,123559],{"class":283},"#Fedora用下方命令\n",[49,123561,123562,123564,123567,123570],{"class":51,"line":1306},[49,123563,24667],{"class":2055},[49,123565,123566],{"class":328}," udevadm",[49,123568,123569],{"class":328}," control",[49,123571,123572],{"class":66}," --reload\n",[49,123574,123575,123577,123579],{"class":51,"line":1312},[49,123576,24667],{"class":2055},[49,123578,123566],{"class":328},[49,123580,123581],{"class":328}," trigger\n",[14,123583,123584],{},"再重新插拔设备即可。",[14,123586,123587],{},"（4）.测试",[14,123589,123590],{},"终端下输入如下指令",[39,123592,123594],{"className":117359,"code":123593,"language":117361,"meta":44,"style":44},"ll \u002Fdev | grep ttyUSB\n",[46,123595,123596],{"__ignoreMap":44},[49,123597,123598,123601,123604,123606,123608],{"class":51,"line":52},[49,123599,123600],{"class":2055},"ll",[49,123602,123603],{"class":328}," \u002Fdev",[49,123605,25200],{"class":59},[49,123607,30327],{"class":2055},[49,123609,123610],{"class":328}," ttyUSB\n",[14,123612,123613],{},"运行结果如下：",[14,123615,123616],{},[1554,123617],{"alt":44,"src":123618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123620,123621,123622,123625],{},"也可以多次插拔USB设备，会发现设备端口",[46,123623,123624],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123627,123628],{},[373,123629,118027],{},[14,123631,123632],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[195,123634,123636],{"id":123635},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123638,123639,123641],{},[373,123640,123355],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123643,123644,123646],{},[373,123645,123361],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123648,123649],{},[373,123650,123367],{},[14,123652,123653],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123655,123656],{},"调用如下指令查看第一台雷达的USB信息：",[39,123658,123660],{"className":117359,"code":123659,"language":117361,"meta":44,"style":44},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[46,123661,123662,123682],{"__ignoreMap":44},[49,123663,123664,123667,123669,123672,123675,123677,123679],{"class":51,"line":52},[49,123665,123666],{"class":2055},"udevadm",[49,123668,69910],{"class":328},[49,123670,123671],{"class":66}," --attribute-walk",[49,123673,123674],{"class":66}," --name=\u002Fdev\u002FttyUSB0",[49,123676,25200],{"class":59},[49,123678,30327],{"class":2055},[49,123680,123681],{"class":328}," KERNELS\n",[49,123683,123684,123686,123688,123690,123693,123695,123697],{"class":51,"line":84},[49,123685,123666],{"class":2055},[49,123687,69910],{"class":328},[49,123689,123671],{"class":66},[49,123691,123692],{"class":66}," --name=\u002Fdev\u002FttyACM0",[49,123694,25200],{"class":59},[49,123696,30327],{"class":2055},[49,123698,123681],{"class":328},[14,123700,123701],{},[1554,123702],{"alt":44,"src":123703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123705,123706],{},"调用如下指令查看第二台雷达的USB信息：",[39,123708,123710],{"className":117359,"code":123709,"language":117361,"meta":44,"style":44},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[46,123711,123712],{"__ignoreMap":44},[49,123713,123714,123716,123718,123720,123723,123725,123727],{"class":51,"line":52},[49,123715,123666],{"class":2055},[49,123717,69910],{"class":328},[49,123719,123671],{"class":66},[49,123721,123722],{"class":66}," --name=\u002Fdev\u002FttyUSB1",[49,123724,25200],{"class":59},[49,123726,30327],{"class":2055},[49,123728,123681],{"class":328},[14,123730,123731,123732,123735,123736,123739,123740,123743],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[46,123733,123734],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[46,123737,123738],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[373,123741,123742],{},"唯一性标识","”。",[14,123745,123395],{},[14,123747,123398,123748,123750],{},[46,123749,123401],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[39,123752,123753],{"className":117359,"code":123405,"language":117361,"meta":44,"style":44},[46,123754,123755],{"__ignoreMap":44},[49,123756,123757,123759,123761],{"class":51,"line":52},[49,123758,24667],{"class":2055},[49,123760,118646],{"class":328},[49,123762,123416],{"class":328},[39,123764,123766],{"className":117359,"code":123765,"language":117361,"meta":44,"style":44},"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",[46,123767,123768,123797],{"__ignoreMap":44},[49,123769,123770,123772,123774,123776,123779,123781,123784,123787,123789,123792,123794],{"class":51,"line":52},[49,123771,123429],{"class":55},[49,123773,60],{"class":59},[49,123775,123434],{"class":328},[49,123777,123778],{"class":55}," KERNELS",[49,123780,60],{"class":59},[49,123782,123783],{"class":328},"=\"1-1.3:1.0\",",[49,123785,123786],{"class":2055}," MODE:",[49,123788,60],{"class":328},[49,123790,123791],{"class":2055},"\"0777\"",[49,123793,76],{"class":2055},[49,123795,123796],{"class":328}," SYMLINK+=\"rplidar_front\"\n",[49,123798,123799,123801,123803,123805,123807,123809,123812,123814,123816,123818,123820],{"class":51,"line":84},[49,123800,123429],{"class":55},[49,123802,60],{"class":59},[49,123804,123434],{"class":328},[49,123806,123778],{"class":55},[49,123808,60],{"class":59},[49,123810,123811],{"class":328},"=\"1-1.4:1.0\",",[49,123813,123786],{"class":2055},[49,123815,60],{"class":328},[49,123817,123791],{"class":2055},[49,123819,76],{"class":2055},[49,123821,123822],{"class":328}," SYMLINK+=\"rplidar_back\"\n",[14,123824,123514],{},[14,123826,123517],{},[39,123828,123829],{"className":117359,"code":123520,"language":117361,"meta":44,"style":44},[46,123830,123831,123835,123845,123855,123859,123863,123873],{"__ignoreMap":44},[49,123832,123833],{"class":51,"line":52},[49,123834,123527],{"class":283},[49,123836,123837,123839,123841,123843],{"class":51,"line":84},[49,123838,24667],{"class":2055},[49,123840,120111],{"class":328},[49,123842,123536],{"class":328},[49,123844,123539],{"class":328},[49,123846,123847,123849,123851,123853],{"class":51,"line":109},[49,123848,24667],{"class":2055},[49,123850,120111],{"class":328},[49,123852,123536],{"class":328},[49,123854,123550],{"class":328},[49,123856,123857],{"class":51,"line":120},[49,123858,2492],{"emptyLinePlaceholder":151},[49,123860,123861],{"class":51,"line":135},[49,123862,123559],{"class":283},[49,123864,123865,123867,123869,123871],{"class":51,"line":1306},[49,123866,24667],{"class":2055},[49,123868,123566],{"class":328},[49,123870,123569],{"class":328},[49,123872,123572],{"class":66},[49,123874,123875,123877,123879],{"class":51,"line":1312},[49,123876,24667],{"class":2055},[49,123878,123566],{"class":328},[49,123880,123581],{"class":328},[14,123882,123584],{},[14,123884,123587],{},[14,123886,123590,123887,123890],{},[46,123888,123889],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123892,123893],{},[1554,123894],{"alt":44,"src":123895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123897,123898],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123900,123901,123903],{},[373,123902,118027],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[195,123905,123907],{"id":123906},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123909,123910],{},"（1）.查看所连接的主机USB接口的信息",[39,123912,123914],{"className":117359,"code":123913,"language":117361,"meta":44,"style":44},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[46,123915,123916,123946],{"__ignoreMap":44},[49,123917,123918,123920,123922,123925,123927,123929,123931,123933,123936,123939,123941,123944],{"class":51,"line":52},[49,123919,123666],{"class":2055},[49,123921,69910],{"class":328},[49,123923,123924],{"class":66}," -a",[49,123926,29307],{"class":66},[49,123928,28513],{"class":55},[49,123930,123666],{"class":2055},[49,123932,69910],{"class":328},[49,123934,123935],{"class":66}," -q",[49,123937,123938],{"class":328}," path",[49,123940,25206],{"class":66},[49,123942,123943],{"class":328}," \u002Fdev\u002FttyACM0",[49,123945,81],{"class":55},[49,123947,123948,123950,123952,123954,123956,123958,123960,123962,123964,123966,123968,123971],{"class":51,"line":84},[49,123949,123666],{"class":2055},[49,123951,69910],{"class":328},[49,123953,123924],{"class":66},[49,123955,29307],{"class":66},[49,123957,28513],{"class":55},[49,123959,123666],{"class":2055},[49,123961,69910],{"class":328},[49,123963,123935],{"class":66},[49,123965,123938],{"class":328},[49,123967,25206],{"class":66},[49,123969,123970],{"class":328}," \u002Fdev\u002FttyUSB0",[49,123972,81],{"class":55},[14,123974,123975],{},[1554,123976],{"alt":44,"src":123977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123979,123980],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123982,123395],{},[14,123984,123398,123985,123750],{},[46,123986,123401],{},[39,123988,123989],{"className":117359,"code":123405,"language":117361,"meta":44,"style":44},[46,123990,123991],{"__ignoreMap":44},[49,123992,123993,123995,123997],{"class":51,"line":52},[49,123994,24667],{"class":2055},[49,123996,118646],{"class":328},[49,123998,123416],{"class":328},[39,124000,124002],{"className":117359,"code":124001,"language":117361,"meta":44,"style":44},"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",[46,124003,124004,124032,124058],{"__ignoreMap":44},[49,124005,124006,124008,124010,124013,124015,124017,124019,124021,124024,124027,124029],{"class":51,"line":52},[49,124007,123429],{"class":55},[49,124009,60],{"class":59},[49,124011,124012],{"class":328},"=\"ttyACM*\",",[49,124014,123437],{"class":2055},[49,124016,123440],{"class":328},[49,124018,123469],{"class":2055},[49,124020,76],{"class":2055},[49,124022,124023],{"class":328}," ATTRS{idProduct}==\"55d4\",",[49,124025,124026],{"class":328}," ATTRS{serial}==\"0001\",",[49,124028,123451],{"class":328},[49,124030,124031],{"class":328}," SYMLINK+=\"ttyACM_MCU\"\n",[49,124033,124034,124036,124038,124040,124042,124044,124046,124048,124050,124053,124055],{"class":51,"line":84},[49,124035,123429],{"class":55},[49,124037,60],{"class":59},[49,124039,124012],{"class":328},[49,124041,123437],{"class":2055},[49,124043,123440],{"class":328},[49,124045,123469],{"class":2055},[49,124047,76],{"class":2055},[49,124049,124023],{"class":328},[49,124051,124052],{"class":328}," ATTRS{serial}==\"0002\",",[49,124054,123451],{"class":328},[49,124056,124057],{"class":328}," SYMLINK+=\"ttyACM_Lidar\"\n",[49,124059,124060,124062,124064,124066,124068,124070,124072,124074,124076,124078],{"class":51,"line":109},[49,124061,123429],{"class":55},[49,124063,60],{"class":59},[49,124065,123434],{"class":328},[49,124067,123437],{"class":2055},[49,124069,123440],{"class":328},[49,124071,123469],{"class":2055},[49,124073,76],{"class":2055},[49,124075,123474],{"class":328},[49,124077,123451],{"class":328},[49,124079,124080],{"class":328}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124082,123514],{},[14,124084,123517],{},[39,124086,124087],{"className":117359,"code":123520,"language":117361,"meta":44,"style":44},[46,124088,124089,124093,124103,124113,124117,124121,124131],{"__ignoreMap":44},[49,124090,124091],{"class":51,"line":52},[49,124092,123527],{"class":283},[49,124094,124095,124097,124099,124101],{"class":51,"line":84},[49,124096,24667],{"class":2055},[49,124098,120111],{"class":328},[49,124100,123536],{"class":328},[49,124102,123539],{"class":328},[49,124104,124105,124107,124109,124111],{"class":51,"line":109},[49,124106,24667],{"class":2055},[49,124108,120111],{"class":328},[49,124110,123536],{"class":328},[49,124112,123550],{"class":328},[49,124114,124115],{"class":51,"line":120},[49,124116,2492],{"emptyLinePlaceholder":151},[49,124118,124119],{"class":51,"line":135},[49,124120,123559],{"class":283},[49,124122,124123,124125,124127,124129],{"class":51,"line":1306},[49,124124,24667],{"class":2055},[49,124126,123566],{"class":328},[49,124128,123569],{"class":328},[49,124130,123572],{"class":66},[49,124132,124133,124135,124137],{"class":51,"line":1312},[49,124134,24667],{"class":2055},[49,124136,123566],{"class":328},[49,124138,123581],{"class":328},[14,124140,124141,124142],{},"再重新插拔设备即可，或者 ",[373,124143,124144],{},"直接重启系统。",[14,124146,123587],{},[14,124148,123590,124149,123890],{},[46,124150,123889],{},[14,124152,124153],{},[1554,124154],{"alt":44,"src":124155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124157,123898],{},[14,124159,124160,124162],{},[373,124161,118027],{}," 一些设备可能没有串口号等。",[195,124164,124166],{"id":124165},"_744-其他注意事项","7.4.4 其他注意事项",[14,124168,124169,124170,124172,124173,124176,124177,18500,124180,124183,124184,124186],{},"并非所有的USB设备端口号都是",[46,124171,123624],{},"的格式，比如Arduino的端口号可能是",[46,124174,124175],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[46,124178,124179],{},"videon",[46,124181,124182],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[46,124185,124179],{},"端口，绑定时需要关联的也是该接口。",[14,124188,124189,124190,124193,124194,124197,124198,124200,124201,124204,124205,124208,124209,124212,124213,124212,124216,124212,124219,28476],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[46,124191,124192],{},"KERNEL==\"ttyUSB*\"","修改为",[46,124195,124196],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[46,124199,124192],{},"修改为类似于",[46,124202,124203],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[46,124206,124207],{},"video[0,2,4,6]","表示可以绑定的端口为",[46,124210,124211],{},"video0","或",[46,124214,124215],{},"video2",[46,124217,124218],{},"video4",[46,124220,124221],{},"video6",[166,124223,124225],{"id":124224},"_75-挂载内网网页","7.5 挂载内网网页",[14,124227,124228],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124230,124231],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124233,124234],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124236,124237,124238],{},"Termux 下载地址（F-Droid）：",[56,124239,124240],{"href":124240,"rel":124241},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23955],[14,124243,124244],{},"首先打开app后，先更新软件缓存：",[39,124246,124248],{"className":117359,"code":124247,"language":117361,"meta":44,"style":44},"pkg update\n",[46,124249,124250],{"__ignoreMap":44},[49,124251,124252,124255],{"class":51,"line":52},[49,124253,124254],{"class":2055},"pkg",[49,124256,26333],{"class":328},[14,124258,124259],{},"然后换源",[39,124261,124263],{"className":117359,"code":124262,"language":117361,"meta":44,"style":44},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[46,124264,124265],{"__ignoreMap":44},[49,124266,124267,124269,124272],{"class":51,"line":52},[49,124268,123137],{"class":2055},[49,124270,124271],{"class":55}," $PREFIX",[49,124273,124274],{"class":328},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124276,124277],{},"将该文件内容替换为下面：",[39,124279,124281],{"className":117359,"code":124280,"language":117361,"meta":44,"style":44},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[46,124282,124283],{"__ignoreMap":44},[49,124284,124285,124288,124291,124294],{"class":51,"line":52},[49,124286,124287],{"class":2055},"deb",[49,124289,124290],{"class":328}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[49,124292,124293],{"class":328}," stable",[49,124295,124296],{"class":328}," main\n",[1226,124298,124299,124326],{},[181,124300,124301,124302,124304,124305],{},"如果你使用的是",[46,124303,123137],{},"编辑器：",[1226,124306,124307,124314,124320],{},[181,124308,124309,124310,124313],{},"按 ",[46,124311,124312],{},"Ctrl+O"," 保存文件。",[181,124315,124309,124316,124319],{},[46,124317,124318],{},"Enter"," 确认文件名。",[181,124321,124309,124322,124325],{},[46,124323,124324],{},"Ctrl+X"," 退出编辑器。",[181,124327,124301,124328,124304,124331],{},[46,124329,124330],{},"vim",[1226,124332,124333,124339],{},[181,124334,124309,124335,124338],{},[46,124336,124337],{},"Esc"," 退出编辑模式。",[181,124340,124341,124342,124344],{},"输入 ",[46,124343,119284],{}," 保存并退出。",[14,124346,124347],{},"接下来重新更新软件源：",[39,124349,124351],{"className":117359,"code":124350,"language":117361,"meta":44,"style":44},"pkg update && pkg upgrade\n",[46,124352,124353],{"__ignoreMap":44},[49,124354,124355,124357,124359,124361,124363],{"class":51,"line":52},[49,124356,124254],{"class":2055},[49,124358,117410],{"class":328},[49,124360,26281],{"class":55},[49,124362,124254],{"class":2055},[49,124364,117396],{"class":328},[14,124366,124367],{},"安装python：",[39,124369,124371],{"className":117359,"code":124370,"language":117361,"meta":44,"style":44},"pkg install python\n",[46,124372,124373],{"__ignoreMap":44},[49,124374,124375,124377,124379],{"class":51,"line":52},[49,124376,124254],{"class":2055},[49,124378,23924],{"class":328},[49,124380,124381],{"class":328}," python\n",[14,124383,124384,26564],{},[373,124385,124386],{},"通过Termux访问设备存储",[14,124388,124389],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[39,124391,124393],{"className":117359,"code":124392,"language":117361,"meta":44,"style":44},"termux-setup-storage\n",[46,124394,124395],{"__ignoreMap":44},[49,124396,124397],{"class":51,"line":52},[49,124398,124392],{"class":2055},[178,124400,124401],{},[181,124402,124403,26564,124406],{},[373,124404,124405],{},"进入HTML文件所在的目录",[178,124407,124408],{},[181,124409,124410,124411,124413],{},"使用",[46,124412,101339],{},"命令进入HTML文件所在的目录：",[39,124415,124417],{"className":117359,"code":124416,"language":117361,"meta":44,"style":44},"cd ~\u002Fyour_html_folder\n",[46,124418,124419],{"__ignoreMap":44},[49,124420,124421,124423],{"class":51,"line":52},[49,124422,101339],{"class":66},[49,124424,124425],{"class":328}," ~\u002Fyour_html_folder\n",[178,124427,124428],{"start":84},[181,124429,124430,26564,124433,124438,124455],{},[373,124431,124432],{},"启动Python HTTP服务器",[178,124434,124435],{},[181,124436,124437],{},"运行以下命令启动一个简单的HTTP服务器：",[39,124439,124441],{"className":117359,"code":124440,"language":117361,"meta":44,"style":44},"python -m http.server 8000\n",[46,124442,124443],{"__ignoreMap":44},[49,124444,124445,124447,124449,124452],{"class":51,"line":52},[49,124446,43],{"class":2055},[49,124448,100945],{"class":66},[49,124450,124451],{"class":328}," http.server",[49,124453,124454],{"class":66}," 8000\n",[178,124456,124457],{"start":109},[181,124458,124459,124460,124463],{},"这会在端口",[46,124461,124462],{},"8000","上启动一个Web服务器。",[1226,124465,124466],{},[181,124467,124468],{},"启动服务器后，Termux会显示日志信息，例如：",[39,124470,124472],{"className":120879,"code":124471,"language":120881,"meta":120882,"style":44},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[46,124473,124474],{"__ignoreMap":44},[49,124475,124476],{"class":51,"line":52},[49,124477,124471],{},[1226,124479,124480],{},[181,124481,124482],{},"这表示服务器已成功启动。",[14,124484,124485],{},[373,124486,124487],{},"在浏览器中访问HTML文件",[178,124489,124490],{},[181,124491,124492,26564,124495,124500],{},[373,124493,124494],{},"在同一设备上访问",[178,124496,124497],{},[181,124498,124499],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[39,124501,124504],{"className":124502,"code":124503,"language":71753,"meta":44,"style":44},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[46,124505,124506],{"__ignoreMap":44},[49,124507,124508,124511],{"class":51,"line":52},[49,124509,124510],{"class":55},"http:",[49,124512,124513],{"class":283},"\u002F\u002Flocalhost:8000\n",[1226,124515,124516],{},[181,124517,124518,124519,124522],{},"如果HTML文件中有",[46,124520,124521],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[166,124524,124526],{"id":124525},"_76-linux重点知识","7.6 Linux重点知识",[195,124528,124530],{"id":124529},"_761-关于点的说明","7.6.1 关于点的说明",[14,124532,124533],{},[1554,124534],{"alt":44,"src":124535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124537,124538],{},"一点本目录，两点上目录",[195,124540,124542],{"id":124541},"_762-目录","7.6.2 目录",[22088,124544,124546],{"id":124545},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124548,124549],{},[373,124550,124551],{},"\u002Fboot:",[14,124553,124554],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124556,124557],{},[373,124558,124559],{},"\u002Fetc:",[14,124561,124562],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124564,124565],{},[373,124566,124567],{},"\u002Flib：",[14,124569,124570],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124572,124573],{},[373,124574,124575],{},"\u002Fsys:",[14,124577,124578],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22088,124580,124582],{"id":124581},"_7622-指令集合","7.6.2.2 指令集合",[14,124584,124585],{},[373,124586,124587],{},"\u002Fbin:",[14,124589,124590],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124592,124593],{},[373,124594,124595],{},"\u002Fsbin:",[14,124597,124598],{},"只有系统管理员才能使用的程序和指令",[22088,124600,124602],{"id":124601},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124604,124605],{},[373,124606,124607],{},"\u002Fdev:",[14,124609,124610],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124612,124613],{},[373,124614,124615],{},"\u002Fmedia:",[14,124617,124618],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124620,124621],{},[373,124622,124623],{},"\u002Fmnt:",[14,124625,124626],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22088,124628,124630],{"id":124629},"_7624-临时文件","7.6.2.4 临时文件",[14,124632,124633],{},[373,124634,124635],{},"\u002Frun:",[14,124637,124638],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124640,124641],{},[373,124642,124643],{},"\u002Flost+found:",[14,124645,124646],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124648,124649],{},[373,124650,124651],{},"\u002Ftmp:",[14,124653,124654],{},"这个目录是用来存放一些临时文件的",[22088,124656,124658],{"id":124657},"_7625-账户","7.6.2.5 账户",[14,124660,124661],{},[373,124662,124663],{},"\u002Froot：",[14,124665,124666],{},"系统管理员的用户主目录",[14,124668,124669,26564],{},[373,124670,124671],{},"\u002Fhome",[14,124673,124674],{},"用户的主目录，以用户的账号命名的",[14,124676,124677,26564],{},[373,124678,124679],{},"\u002Fusr",[14,124681,124682],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124684,124685],{},[373,124686,124687],{},"\u002Fusr\u002Fbin：",[14,124689,124690],{},"系统用户使用的应用程序与指令",[14,124692,124693],{},[373,124694,124695],{},"\u002Fusr\u002Fsbin：",[14,124697,124698],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124700,124701],{},[373,124702,124703],{},"\u002Fusr\u002Fsrc：",[14,124705,124706],{},"内核源代码默认的放置目录",[22088,124708,124710],{"id":124709},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124712,124713],{},[373,124714,124715],{},"\u002Fvar：",[14,124717,124718],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124720,124721],{},[373,124722,124723],{},"\u002Fproc:",[14,124725,124726,124727,124730],{},"管理 ",[373,124728,124729],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22088,124732,124734],{"id":124733},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124736,124737],{},[373,124738,124739],{},"\u002Fopt:",[14,124741,124742],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124744,124745],{},[373,124746,124747],{},"\u002Fsrv:",[14,124749,124750],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[195,124752,124754],{"id":124753},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124756,124757],{},[1554,124758],{"alt":44,"src":124759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124761,124762],{},"windows-->linux:",[14,124764,124765],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124767,124768],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124770,124771],{},"linux传输文件到windows",[14,124773,124774],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[195,124776,124778],{"id":124777},"_764-易忘知识","7.6.4 易忘知识",[14,124780,124781],{},"操作系统内核查看",[39,124783,124784],{"className":117359,"code":121353,"language":117361,"meta":44,"style":44},[46,124785,124786],{"__ignoreMap":44},[49,124787,124788,124790],{"class":51,"line":52},[49,124789,70293],{"class":2055},[49,124791,121362],{"class":66},[14,124793,124794],{},[1554,124795],{"alt":44,"src":124796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124798,124799],{},[1554,124800],{"alt":44,"src":124801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[39,124803,124805],{"className":117359,"code":124804,"language":117361,"meta":44,"style":44},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[46,124806,124807,124819],{"__ignoreMap":44},[49,124808,124809,124811,124814,124817],{"class":51,"line":52},[49,124810,121570],{"class":2055},[49,124812,124813],{"class":328}," mvtest",[49,124815,124816],{"class":328}," mvtest2",[49,124818,2766],{"class":55},[49,124820,124821],{"class":51,"line":84},[49,124822,124823],{"class":2055},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124825,124826],{},[1554,124827],{"alt":44,"src":124828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124830,124831],{},[1554,124832],{"alt":44,"src":124833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124835,124836,124837,124840],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[46,124838,124839],{},"du -a"," 可以快速查看磁盘使用细节。",[195,124842,124844],{"id":124843},"_765-vim","7.6.5 Vim",[14,124846,124847],{},[1554,124848],{"alt":44,"src":124849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124851,124852],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124854,124855],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124857,124858],{},[373,124859,124860],{},"1.命令模式：",[14,124862,124863],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124865,124866],{},"x 删除当前光标所在处的字符",[14,124868,124869],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124871,124872],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124874,124875],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124877,124878],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124880,124881],{},"dd 剪切当前行",[14,124883,124884],{},"yy 复制当前行",[14,124886,124887],{},"p 粘贴剪贴板内容到光标下方",[14,124889,124890],{},"P 粘贴剪贴板内容到光标上方",[14,124892,124893],{},"u 撤销上一次操作",[14,124895,124896],{},"ctrl+r 重做上一次操作",[14,124898,124899,124901],{},[1014,124900],{}," 保存文件",[14,124903,124904,124906],{},[864,124905],{}," 退出Vim编辑器",[14,124908,124909,124911],{},[864,124910],{},"! 强制退出Vim编辑器，不保存修改",[14,124913,124914],{},[373,124915,124916],{},"2.输入模式：",[14,124918,124919],{},[1554,124920],{"alt":44,"src":124921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124923,124924],{},[373,124925,124926],{},"3.底线命令模式：",[14,124928,124929],{},[1554,124930],{"alt":44,"src":124931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124933,124934],{},"按下esc可以退出底线命令模式",[195,124936,124938],{"id":124937},"_766-apt","7.6.6 apt",[14,124940,124941],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[195,124943,124945],{"id":124944},"_767-home与root的区别","7.6.7 home与root的区别",[14,124947,124948],{},[1554,124949],{"alt":44,"src":124950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124952,124953],{},[1554,124954],{"alt":44,"src":124955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124957,124958],{},[1554,124959],{"alt":44,"src":124960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124962,124963],{},[1554,124964],{"alt":44,"src":124965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[195,124967,124969],{"id":124968},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124971,124972],{},[56,124973,124974],{"href":124974,"rel":124975},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23955],[178,124977,124978,124981],{},[181,124979,124980],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[181,124982,124983],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124985,124986],{},[1554,124987],{"alt":44,"src":124988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124990,124991],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124993,124994],{},[1554,124995],{"alt":44,"src":124996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[39,124998,125000],{"className":120879,"code":124999,"language":120881,"meta":120882,"style":44},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[46,125001,125002,125007],{"__ignoreMap":44},[49,125003,125004],{"class":51,"line":52},[49,125005,125006],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[49,125008,125009],{"class":51,"line":84},[49,125010,125011],{},".\u002Fpycharm.sh\n",[14,125013,125014],{},"3️⃣创建.desktop文件",[14,125016,125017],{},[373,125018,125019],{},"原理：",[1226,125021,125022,125032],{},[181,125023,125024,125025,125031],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[373,125026,125027,125030],{},[46,125028,125029],{},".desktop"," 文件"," 来识别应用。",[181,125033,125034,125036,125037],{},[46,125035,125029],{}," 文件相当于一个“应用注册表”，告诉系统：",[1226,125038,125039,125042,125045,125048,125051],{},[181,125040,125041],{},"应用名字（Name）",[181,125043,125044],{},"图标（Icon）",[181,125046,125047],{},"执行命令（Exec）",[181,125049,125050],{},"分类（Categories）",[181,125052,125053],{},"是否需要终端（Terminal）",[39,125055,125057],{"className":120879,"code":125056,"language":120881,"meta":120882,"style":44},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[46,125058,125059,125064],{"__ignoreMap":44},[49,125060,125061],{"class":51,"line":52},[49,125062,125063],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[49,125065,125066],{"class":51,"line":84},[49,125067,125068],{},"nano pycharm.desktop\n",[14,125070,125071],{},"nano是一个命令行下的编辑器，也可以使用vim",[39,125073,125075],{"className":120879,"code":125074,"language":120881,"meta":120882,"style":44},"[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",[46,125076,125077,125082,125087,125092,125097,125102,125107,125112,125117,125122],{"__ignoreMap":44},[49,125078,125079],{"class":51,"line":52},[49,125080,125081],{},"[Desktop Entry]\n",[49,125083,125084],{"class":51,"line":84},[49,125085,125086],{},"Version=1.0\n",[49,125088,125089],{"class":51,"line":109},[49,125090,125091],{},"Type=Application\n",[49,125093,125094],{"class":51,"line":120},[49,125095,125096],{},"Name=PyCharm\n",[49,125098,125099],{"class":51,"line":135},[49,125100,125101],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[49,125103,125104],{"class":51,"line":1306},[49,125105,125106],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[49,125108,125109],{"class":51,"line":1312},[49,125110,125111],{},"Comment=JetBrains PyCharm IDE\n",[49,125113,125114],{"class":51,"line":1403},[49,125115,125116],{},"Categories=Development;IDE;\n",[49,125118,125119],{"class":51,"line":1409},[49,125120,125121],{},"Terminal=false\n",[49,125123,125124],{"class":51,"line":1421},[49,125125,125126],{},"StartupWMClass=jetbrains-pycharm\n",[1226,125128,125129,125135,125141,125147],{},[181,125130,125131,125134],{},[46,125132,125133],{},"Exec"," → 点击图标时执行的命令",[181,125136,125137,125140],{},[46,125138,125139],{},"Icon"," → 显示在菜单和桌面上的图标",[181,125142,125143,125146],{},[46,125144,125145],{},"Terminal=false"," → 不打开终端",[181,125148,125149,125152],{},[46,125150,125151],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125154,125155,125156],"blockquote",{},[14,125157,125158,125159,125161,125162],{},"可以理解成 ",[46,125160,125029],{}," 文件是 Linux 的 ",[373,125163,125164],{},"快捷方式配置文件",[14,125166,125167],{},"4️⃣设置可执行权限",[39,125169,125171],{"className":120879,"code":125170,"language":120881,"meta":120882,"style":44},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[46,125172,125173],{"__ignoreMap":44},[49,125174,125175],{"class":51,"line":52},[49,125176,125170],{},[14,125178,125179],{},"5️⃣桌面图标启动的话如下：",[39,125181,125183],{"className":120879,"code":125182,"language":120881,"meta":120882,"style":44},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,125184,125185,125190],{"__ignoreMap":44},[49,125186,125187],{"class":51,"line":52},[49,125188,125189],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[49,125191,125192],{"class":51,"line":84},[49,125193,125194],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[178,125196,125197],{"start":109},[181,125198,125199],{},"下载Appimage文件实现软件的安装",[14,125201,125202],{},"1️⃣先下载appimage",[14,125204,125205],{},[56,125206,125207],{"href":125207,"rel":125208},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23955],[14,125210,125211],{},[1554,125212],{"alt":44,"src":125213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125215,125216],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125218,125219],{},[1554,125220],{"alt":44,"src":125221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125223,125224],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125226,125227],{},[1554,125228],{"alt":44,"src":125229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125231,125232],{},[1554,125233],{"alt":44,"src":125234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125236,125237,125238,125241],{},"3️⃣给他们放在",[46,125239,125240],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125243,125244],{},"4️⃣给软件执行权限",[39,125246,125248],{"className":120879,"code":125247,"language":120881,"meta":120882,"style":44},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[46,125249,125250,125255],{"__ignoreMap":44},[49,125251,125252],{"class":51,"line":52},[49,125253,125254],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[49,125256,125257],{"class":51,"line":84},[49,125258,125259],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125261,125262],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[39,125264,125266],{"className":117359,"code":125265,"language":117361,"meta":44,"style":44},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[46,125267,125268,125275,125282,125288],{"__ignoreMap":44},[49,125269,125270,125272],{"class":51,"line":52},[49,125271,101339],{"class":66},[49,125273,125274],{"class":328}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[49,125276,125277,125279],{"class":51,"line":84},[49,125278,101346],{"class":2055},[49,125280,125281],{"class":328}," .\u002Fqqmusic.desktop\n",[49,125283,125284,125286],{"class":51,"line":109},[49,125285,124330],{"class":2055},[49,125287,125281],{"class":328},[49,125289,125290,125292,125294,125296],{"class":51,"line":120},[49,125291,24667],{"class":2055},[49,125293,24670],{"class":328},[49,125295,123196],{"class":328},[49,125297,125281],{"class":328},[14,125299,125300,125302],{},[46,125301,101346],{},"：一个 Linux 命令，主要功能是：",[1226,125304,125305,125308],{},[181,125306,125307],{},"如果文件不存在，就创建一个新的空文件",[181,125309,125310],{},"如果文件已存在，就更新该文件的最后修改时间",[39,125312,125314],{"className":120879,"code":125313,"language":120881,"meta":120882,"style":44},"[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",[46,125315,125316,125320,125325,125330,125335,125339,125344],{"__ignoreMap":44},[49,125317,125318],{"class":51,"line":52},[49,125319,125081],{},[49,125321,125322],{"class":51,"line":84},[49,125323,125324],{},"Name=QQ音乐\n",[49,125326,125327],{"class":51,"line":109},[49,125328,125329],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[49,125331,125332],{"class":51,"line":120},[49,125333,125334],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[49,125336,125337],{"class":51,"line":135},[49,125338,125091],{},[49,125340,125341],{"class":51,"line":1306},[49,125342,125343],{},"Categories=Audio;Music;Player;\n",[49,125345,125346],{"class":51,"line":1312},[49,125347,125348],{},"Comment=QQ Music Client for Linux\n",[14,125350,125351],{},"将文件复制进去",[14,125353,125354],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125356,125357],{},[1554,125358],{"alt":44,"src":125359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125361,125362],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125364,125365],{},[1554,125366],{"alt":44,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125369,125370,125371,125374,125375,125378],{},"如果你用的不是KDE，那么也可以直接修改",[46,125372,125373],{},"qqmuic.desktop","：在exec的末尾加上",[46,125376,125377],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[39,125380,125382],{"className":120879,"code":125381,"language":120881,"meta":120882,"style":44},"[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",[46,125383,125384,125388,125392,125397,125401,125405,125409],{"__ignoreMap":44},[49,125385,125386],{"class":51,"line":52},[49,125387,125081],{},[49,125389,125390],{"class":51,"line":84},[49,125391,125324],{},[49,125393,125394],{"class":51,"line":109},[49,125395,125396],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[49,125398,125399],{"class":51,"line":120},[49,125400,125334],{},[49,125402,125403],{"class":51,"line":135},[49,125404,125091],{},[49,125406,125407],{"class":51,"line":1306},[49,125408,125343],{},[49,125410,125411],{"class":51,"line":1312},[49,125412,125348],{},[14,125414,125415],{},[1554,125416],{"alt":44,"src":125417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125419,125420],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[39,125422,125424],{"className":120879,"code":125423,"language":120881,"meta":120882,"style":44},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[46,125425,125426],{"__ignoreMap":44},[49,125427,125428],{"class":51,"line":52},[49,125429,125423],{},[178,125431,125432],{"start":120},[181,125433,125434],{},"去Flathub上安装软件",[14,125436,125437],{},[56,125438,125439],{"href":125439,"rel":125440},"https:\u002F\u002Fflathub.org\u002F",[23955],[14,125442,125443],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125445,125446],{},[1554,125447],{"alt":44,"src":125448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[39,125450,125452],{"className":120879,"code":125451,"language":120881,"meta":120882,"style":44},"flatpak install flathub com.obsproject.Studio\n",[46,125453,125454],{"__ignoreMap":44},[49,125455,125456],{"class":51,"line":52},[49,125457,125451],{},[14,125459,125460],{},[1554,125461],{"alt":44,"src":125462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125464,125465],{},"2️⃣运行软件",[14,125467,125468],{},"a.官方方式：",[14,125470,125471],{},[1554,125472],{"alt":44,"src":125473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[39,125475,125476],{"className":120879,"code":125451,"language":120881,"meta":120882,"style":44},[46,125477,125478],{"__ignoreMap":44},[49,125479,125480],{"class":51,"line":52},[49,125481,125451],{},[14,125483,125484],{},"b.当普通软件运行：",[14,125486,125487],{},[1554,125488],{"alt":44,"src":125489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125491,125492],{},[1554,125493],{"alt":44,"src":125494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[143,125496,125497],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":44,"searchDepth":84,"depth":84,"links":125499},[125500,125501,125506,125507,125513,125514],{"id":122232,"depth":84,"text":122233},{"id":122574,"depth":84,"text":122575,"children":125502},[125503,125504,125505],{"id":122578,"depth":109,"text":122579},{"id":122645,"depth":109,"text":122646},{"id":122906,"depth":109,"text":122907},{"id":123059,"depth":84,"text":123060},{"id":123297,"depth":84,"text":123298,"children":125508},[125509,125510,125511,125512],{"id":123349,"depth":109,"text":123350},{"id":123635,"depth":109,"text":123636},{"id":123906,"depth":109,"text":123907},{"id":124165,"depth":109,"text":124166},{"id":124224,"depth":84,"text":124225},{"id":124525,"depth":84,"text":124526,"children":125515},[125516,125517,125518,125519,125520,125521,125522,125523],{"id":124529,"depth":109,"text":124530},{"id":124541,"depth":109,"text":124542},{"id":124753,"depth":109,"text":124754},{"id":124777,"depth":109,"text":124778},{"id":124843,"depth":109,"text":124844},{"id":124937,"depth":109,"text":124938},{"id":124944,"depth":109,"text":124945},{"id":124968,"depth":109,"text":124969},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122224,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125530,"title":125531,"body":125532,"description":148,"extension":149,"meta":125536,"navigation":151,"path":125537,"seo":125538,"stem":125539,"__hash__":125540},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125533,"toc":125534},[],{"title":44,"searchDepth":84,"depth":84,"links":125535},[],{"category":30354},"\u002Fwiki\u002F2025-01-27-linux",{"title":125531,"description":148},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125542,"title":125543,"body":125544,"description":125548,"extension":149,"meta":125939,"navigation":151,"path":125940,"seo":125941,"stem":125942,"__hash__":125943},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125545,"toc":125937},[125546,125549,125553,125570,125573,125626,125630,125632,125672,125681,125685,125688,125929,125934],[14,125547,125548],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125550,125552],{"id":125551},"_1ubuntu环境配置","1.Ubuntu环境配置",[178,125554,125555,125558,125561,125564,125567],{},[181,125556,125557],{},"ubuntu环境换源",[181,125559,125560],{},"安装cuda",[181,125562,125563],{},"安装miniconda",[181,125565,125566],{},"安装pytorch",[181,125568,125569],{},"安装genesis",[14,125571,125572],{},"参考链接：",[39,125574,125576],{"className":23912,"code":125575,"language":23914,"meta":44,"style":44},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[46,125577,125578],{"__ignoreMap":44},[49,125579,125580,125583,125586,125589,125591,125594,125597,125599,125602,125605,125607,125610,125613,125615,125618,125621,125623],{"class":51,"line":52},[49,125581,125582],{"class":2055},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[49,125584,125585],{"class":328},"=blogdetail",[49,125587,125588],{"class":55},"&sharetype",[49,125590,60],{"class":59},[49,125592,125593],{"class":328},"blogdetail",[49,125595,125596],{"class":55},"&sharerId",[49,125598,60],{"class":59},[49,125600,125601],{"class":328},"144728092",[49,125603,125604],{"class":55},"&sharerefer",[49,125606,60],{"class":59},[49,125608,125609],{"class":328},"PC",[49,125611,125612],{"class":55},"&sharesource",[49,125614,60],{"class":59},[49,125616,125617],{"class":328},"qq_69379513",[49,125619,125620],{"class":55},"&sharefrom",[49,125622,60],{"class":59},[49,125624,125625],{"class":328},"from_link\n",[10,125627,125629],{"id":125628},"_2genesis-报错issue","2.Genesis 报错issue",[14,125631,125572],{},[39,125633,125634],{"className":23912,"code":125575,"language":23914,"meta":44,"style":44},[46,125635,125636],{"__ignoreMap":44},[49,125637,125638,125640,125642,125644,125646,125648,125650,125652,125654,125656,125658,125660,125662,125664,125666,125668,125670],{"class":51,"line":52},[49,125639,125582],{"class":2055},[49,125641,125585],{"class":328},[49,125643,125588],{"class":55},[49,125645,60],{"class":59},[49,125647,125593],{"class":328},[49,125649,125596],{"class":55},[49,125651,60],{"class":59},[49,125653,125601],{"class":328},[49,125655,125604],{"class":55},[49,125657,60],{"class":59},[49,125659,125609],{"class":328},[49,125661,125612],{"class":55},[49,125663,60],{"class":59},[49,125665,125617],{"class":328},[49,125667,125620],{"class":55},[49,125669,60],{"class":59},[49,125671,125625],{"class":328},[39,125673,125675],{"className":23912,"code":125674,"language":23914,"meta":44,"style":44},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[46,125676,125677],{"__ignoreMap":44},[49,125678,125679],{"class":51,"line":52},[49,125680,125674],{"class":2055},[10,125682,125684],{"id":125683},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125686,125687],{},"hello_robot.py",[39,125689,125691],{"className":41,"code":125690,"language":43,"meta":44,"style":44},"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",[46,125692,125693,125699,125714,125718,125730,125742,125746,125759,125763,125782,125792,125802,125816,125820,125824,125829,125833,125843,125850,125864,125871,125881,125886,125890,125908,125913,125917,125924],{"__ignoreMap":44},[49,125694,125695,125697],{"class":51,"line":52},[49,125696,30481],{"class":59},[49,125698,45394],{"class":55},[49,125700,125701,125704,125707,125709,125711],{"class":51,"line":84},[49,125702,125703],{"class":55},"os.environ[",[49,125705,125706],{"class":328},"'PYOPENGL_PLATFORM'",[49,125708,4535],{"class":55},[49,125710,60],{"class":59},[49,125712,125713],{"class":328}," 'glx'\n",[49,125715,125716],{"class":51,"line":109},[49,125717,2492],{"emptyLinePlaceholder":151},[49,125719,125720,125722,125725,125727],{"class":51,"line":120},[49,125721,30481],{"class":59},[49,125723,125724],{"class":55}," genesis ",[49,125726,31472],{"class":59},[49,125728,125729],{"class":55}," gs\n",[49,125731,125732,125734,125737,125739],{"class":51,"line":135},[49,125733,30826],{"class":59},[49,125735,125736],{"class":55}," pynput ",[49,125738,30481],{"class":59},[49,125740,125741],{"class":55}," keyboard\n",[49,125743,125744],{"class":51,"line":1306},[49,125745,2492],{"emptyLinePlaceholder":151},[49,125747,125748,125751,125754,125756],{"class":51,"line":1312},[49,125749,125750],{"class":55},"gs.init(",[49,125752,125753],{"class":126},"backend",[49,125755,60],{"class":59},[49,125757,125758],{"class":55},"gs.gpu)\n",[49,125760,125761],{"class":51,"line":1403},[49,125762,2492],{"emptyLinePlaceholder":151},[49,125764,125765,125768,125770,125773,125776,125778,125780],{"class":51,"line":1409},[49,125766,125767],{"class":55},"scene ",[49,125769,60],{"class":59},[49,125771,125772],{"class":55}," gs.Scene(",[49,125774,125775],{"class":126},"show_viewer",[49,125777,60],{"class":59},[49,125779,31565],{"class":66},[49,125781,81],{"class":55},[49,125783,125784,125787,125789],{"class":51,"line":1421},[49,125785,125786],{"class":55},"plane ",[49,125788,60],{"class":59},[49,125790,125791],{"class":55}," scene.add_entity(gs.morphs.Plane())\n",[49,125793,125794,125797,125799],{"class":51,"line":1704},[49,125795,125796],{"class":55},"franka ",[49,125798,60],{"class":59},[49,125800,125801],{"class":55}," scene.add_entity(\n",[49,125803,125804,125807,125809,125811,125814],{"class":51,"line":1709},[49,125805,125806],{"class":55},"    gs.morphs.MJCF(",[49,125808,45443],{"class":126},[49,125810,60],{"class":59},[49,125812,125813],{"class":328},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[49,125815,38136],{"class":55},[49,125817,125818],{"class":51,"line":1715},[49,125819,81],{"class":55},[49,125821,125822],{"class":51,"line":1720},[49,125823,2492],{"emptyLinePlaceholder":151},[49,125825,125826],{"class":51,"line":1734},[49,125827,125828],{"class":55},"scene.build()\n",[49,125830,125831],{"class":51,"line":1739},[49,125832,2492],{"emptyLinePlaceholder":151},[49,125834,125835,125837,125840],{"class":51,"line":1745},[49,125836,32036],{"class":59},[49,125838,125839],{"class":2055}," on_press",[49,125841,125842],{"class":55},"(key):\n",[49,125844,125845,125848],{"class":51,"line":1766},[49,125846,125847],{"class":59},"    try",[49,125849,3831],{"class":55},[49,125851,125852,125854,125857,125859,125862],{"class":51,"line":1771},[49,125853,2589],{"class":59},[49,125855,125856],{"class":55}," key.char ",[49,125858,3041],{"class":59},[49,125860,125861],{"class":328}," 'q'",[49,125863,3831],{"class":55},[49,125865,125866,125868],{"class":51,"line":1785},[49,125867,15822],{"class":59},[49,125869,125870],{"class":66}," False\n",[49,125872,125873,125876,125879],{"class":51,"line":1790},[49,125874,125875],{"class":59},"    except",[49,125877,125878],{"class":66}," AttributeError",[49,125880,3831],{"class":55},[49,125882,125883],{"class":51,"line":1819},[49,125884,125885],{"class":59},"        pass\n",[49,125887,125888],{"class":51,"line":1824},[49,125889,2492],{"emptyLinePlaceholder":151},[49,125891,125892,125895,125897,125900,125903,125905],{"class":51,"line":1841},[49,125893,125894],{"class":55},"listener ",[49,125896,60],{"class":59},[49,125898,125899],{"class":55}," keyboard.Listener(",[49,125901,125902],{"class":126},"on_press",[49,125904,60],{"class":59},[49,125906,125907],{"class":55},"on_press)\n",[49,125909,125910],{"class":51,"line":1846},[49,125911,125912],{"class":55},"listener.start()\n",[49,125914,125915],{"class":51,"line":1851},[49,125916,2492],{"emptyLinePlaceholder":151},[49,125918,125919,125921],{"class":51,"line":1856},[49,125920,108726],{"class":59},[49,125922,125923],{"class":55}," listener.running:\n",[49,125925,125926],{"class":51,"line":1870},[49,125927,125928],{"class":55},"    scene.step()\n",[14,125930,125931],{},[1554,125932],{"alt":44,"src":125933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[143,125935,125936],{},"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":44,"searchDepth":84,"depth":84,"links":125938},[],{"category":23468},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125543,"description":125548},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125945,"title":125946,"body":125947,"description":148,"extension":149,"meta":125962,"navigation":151,"path":125963,"seo":125964,"stem":125965,"__hash__":125966},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125948,"toc":125959},[125949,125952,125956],[10,125950,125946],{"id":125951},"_1-基础知识",[166,125953,125955],{"id":125954},"_11-js的组成","1.1 js的组成",[14,125957,125958],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":44,"searchDepth":84,"depth":84,"links":125960},[125961],{"id":125954,"depth":84,"text":125955},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125946,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125968,"title":125969,"body":125970,"description":148,"extension":149,"meta":126109,"navigation":151,"path":126110,"seo":126111,"stem":126112,"__hash__":126113},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125971,"toc":126097},[125972,125975,125979,125982,125986,125996,126000,126003,126006,126009,126013,126020,126026,126030,126036,126047,126051,126054,126058,126061,126065,126068,126072,126075,126079,126082,126085,126088,126091,126094],[10,125973,125969],{"id":125974},"_2-vscode必备内容",[166,125976,125978],{"id":125977},"_21-标签分类","2.1 标签分类",[14,125980,125981],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[166,125983,125985],{"id":125984},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125987,125988,125989,125991,125992,125995],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[46,125990,450],{}," 然后按 ",[46,125993,125994],{},"Tab","，快速自动生成基本结构。",[166,125997,125999],{"id":125998},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126001,126002],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126004,126005],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126007,126008],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[166,126010,126012],{"id":126011},"_24-视图缩放","2.4 视图缩放",[14,126014,126015,126016,126019],{},"缩放视图 ",[46,126017,126018],{},"ctrl+"," 可实现代码增大。",[14,126021,126022,126025],{},[46,126023,126024],{},"ctrl-"," 可实现代码减小。",[166,126027,126029],{"id":126028},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126031,126032,126033,28476],{},"VSCode 新建文件快捷键为 ",[46,126034,126035],{},"ctrl+N",[14,126037,126038,126039,126042,126043,126046],{},"保存快捷键为 ",[46,126040,126041],{},"ctrl+S","，将文本保存为 ",[46,126044,126045],{},".html"," 文件。",[166,126048,126050],{"id":126049},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126052,126053],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[166,126055,126057],{"id":126056},"_27-vscode-icons","2.7 vscode-icons",[14,126059,126060],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[166,126062,126064],{"id":126063},"_28-easy-less","2.8 Easy LESS",[14,126066,126067],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[166,126069,126071],{"id":126070},"_29-会了吧插件","2.9 会了吧插件",[14,126073,126074],{},"会了吧插件可以展示代码中英语单词的意思。",[166,126076,126078],{"id":126077},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126080,126081],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126083,126084],{},"②选定多个相同的单词:ctrl+D",[14,126086,126087],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126089,126090],{},"④全局替换某些单词:ctrl+h",[14,126092,126093],{},"⑤快速定位到某一行:ctrl+g",[14,126095,126096],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":44,"searchDepth":84,"depth":84,"links":126098},[126099,126100,126101,126102,126103,126104,126105,126106,126107,126108],{"id":125977,"depth":84,"text":125978},{"id":125984,"depth":84,"text":125985},{"id":125998,"depth":84,"text":125999},{"id":126011,"depth":84,"text":126012},{"id":126028,"depth":84,"text":126029},{"id":126049,"depth":84,"text":126050},{"id":126056,"depth":84,"text":126057},{"id":126063,"depth":84,"text":126064},{"id":126070,"depth":84,"text":126071},{"id":126077,"depth":84,"text":126078},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125969,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126115,"title":126116,"body":126117,"description":148,"extension":149,"meta":126276,"navigation":151,"path":126277,"seo":126278,"stem":126279,"__hash__":126280},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126118,"toc":126268},[126119,126122,126126,126136,126142,126148,126152,126161,126165,126170,126173,126176,126180,126183,126193,126202,126211,126220,126230,126237,126242,126247,126260],[10,126120,126116],{"id":126121},"_3-html文本与容器标签",[166,126123,126125],{"id":126124},"_31-标题标签","3.1 标题标签",[14,126127,126128,126131,126132,126135],{},[46,126129,126130],{},"\u003Ch1>","我是一级标签",[46,126133,126134],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126137,126138,126131,126140],{},[46,126139,126130],{},[46,126141,126134],{},[14,126143,123398,126144,126147],{},[46,126145,126146],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[166,126149,126151],{"id":126150},"_32-段落标签","3.2 段落标签",[14,126153,126154,126157,126158],{},[46,126155,126156],{},"\u003Cp>","....",[46,126159,126160],{},"\u003C\u002Fp>",[166,126162,126164],{"id":126163},"_33-换行标签","3.3 换行标签",[14,126166,126167],{},[46,126168,126169],{},"\u003Cbr \u002F>",[14,126171,126172],{},"具有强制换行的作用",[14,126174,126175],{},"单标签",[166,126177,126179],{"id":126178},"_34-文本格式化标签","3.4 文本格式化标签",[14,126181,126182],{},"提供粗体、斜体和下划线等效果",[14,126184,126185,126186,82628,126189,126192],{},"加粗：",[46,126187,126188],{},"\u003Cstrong>...\u003C\u002Fstrong>",[46,126190,126191],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126194,126195,126196,82628,126199,126192],{},"斜体：",[46,126197,126198],{},"\u003Cem>...\u003C\u002Fem>",[46,126200,126201],{},"\u003Ci>...\u003C\u002Fi>",[14,126203,126204,126205,82628,126208,126192],{},"删除线：",[46,126206,126207],{},"\u003Cdel>...\u003C\u002Fdel>",[46,126209,126210],{},"\u003Cs>...\u003C\u002Fs>",[14,126212,126213,126214,82628,126217,126192],{},"下划线：",[46,126215,126216],{},"\u003Cins>...\u003C\u002Fins>",[46,126218,126219],{},"\u003Cu>...\u003C\u002Fu>",[166,126221,126223,126224,18500,126227,102756],{"id":126222},"_35-div和span标签","3.5 ",[46,126225,126226],{},"\u003Cdiv>",[46,126228,126229],{},"\u003Cspan>",[14,126231,126232,101081,126234,126236],{},[46,126233,126226],{},[46,126235,126229],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126238,126239],{},[46,126240,126241],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126243,126244],{},[46,126245,126246],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126248,126249,126250,126252,126253,126255,126256,126259],{},"两者特点：①",[46,126251,126226],{}," 标签用来布局，但一行通常只放一个 ",[46,126254,126226],{},"。可以理解为一个大盒子，独占一行，在 ",[46,126257,126258],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126261,77338,126262,126264,126265,126267],{},[46,126263,126229],{}," 标签也可用于布局，一行可以放多个 ",[46,126266,126229],{},"，可理解为小盒子。",{"title":44,"searchDepth":84,"depth":84,"links":126269},[126270,126271,126272,126273,126274],{"id":126124,"depth":84,"text":126125},{"id":126150,"depth":84,"text":126151},{"id":126163,"depth":84,"text":126164},{"id":126178,"depth":84,"text":126179},{"id":126222,"depth":84,"text":126275},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126116,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126282,"title":126283,"body":126284,"description":148,"extension":149,"meta":126481,"navigation":151,"path":126482,"seo":126483,"stem":126484,"__hash__":126485},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126285,"toc":126473},[126286,126289,126293,126296,126302,126309,126315,126321,126324,126327,126330,126333,126336,126339,126342,126346,126349,126352,126355,126361,126367,126373,126380,126384,126390,126396,126399,126402,126408,126414,126420,126423,126426,126430,126433,126443,126449,126453,126462,126466,126469],[10,126287,126283],{"id":126288},"_4-html图像与链接",[166,126290,126292],{"id":126291},"_41-图像标签","4.1 图像标签",[14,126294,126295],{},"（1）标签",[14,126297,126298,126301],{},[46,126299,126300],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126303,126304,126305,126308],{},"src是",[46,126306,126307],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126310,126311,126312],{},"alt:文本，替换文本。图像不能显示的文字 ",[46,126313,126314],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126316,126317,126318],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[46,126319,126320],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126322,126323],{},"width:像素，设置图像的宽度",[14,126325,126326],{},"height:像素，设置图像的高度",[14,126328,126329],{},"border：像素，设置图像的边框粗细",[14,126331,126332],{},"（2）图像标签属性的注意点：",[14,126334,126335],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126337,126338],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126340,126341],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[166,126343,126345],{"id":126344},"_42-路径注意要点","4.2 路径注意要点：",[14,126347,126348],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126350,126351],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126353,126354],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126356,126357,126358],{},"①同一级路径：图像文件位于HTML文件同一级，如",[46,126359,126360],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126362,126363,126364],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[46,126365,126366],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126368,126369,126370],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[46,126371,126372],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126374,126375,126376,474],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[56,126377,126378],{"href":126378,"rel":126379},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23955],[166,126381,126383],{"id":126382},"_43-超链接标签","4.3 超链接标签",[14,126385,126386,126389],{},[46,126387,126388],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126391,126392,126393],{},"①语法格式：",[46,126394,126395],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126397,126398],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126400,126401],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126403,126404,126405],{},"③链接分类：外部链接：",[46,126406,126407],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126409,126410,126411],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[46,126412,126413],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126415,126416,126417],{},"空链接：如果当时没有确定链接目标时，",[46,126418,126419],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126421,126422],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126424,126425],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[166,126427,126429],{"id":126428},"_44-锚点链接","4.4 锚点链接",[14,126431,126432],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126434,126435,126436,126439,126440],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[46,126437,126438],{},"\u003Ca href=\"#two\">","第二级",[46,126441,126442],{},"\u003C\u002Fa>",[14,126444,126445,126446],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[46,126447,126448],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[166,126450,126452],{"id":126451},"_45-注释标签","4.5 注释标签",[14,126454,126455,126458,126459],{},[46,126456,126457],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[46,126460,126461],{},"ctrl+\u002F",[166,126463,126465],{"id":126464},"_46-特殊字符","4.6 特殊字符",[14,126467,126468],{},"可以实现添加多个空格",[1554,126470],{"style":126471,"src":126472},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":44,"searchDepth":84,"depth":84,"links":126474},[126475,126476,126477,126478,126479,126480],{"id":126291,"depth":84,"text":126292},{"id":126344,"depth":84,"text":126345},{"id":126382,"depth":84,"text":126383},{"id":126428,"depth":84,"text":126429},{"id":126451,"depth":84,"text":126452},{"id":126464,"depth":84,"text":126465},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126283,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126487,"title":126488,"body":126489,"description":148,"extension":149,"meta":126782,"navigation":151,"path":126783,"seo":126784,"stem":126785,"__hash__":126786},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126490,"toc":126773},[126491,126494,126498,126501,126504,126507,126510,126513,126516,126519,126522,126525,126545,126551,126555,126558,126561,126564,126567,126570,126573,126577,126580,126583,126586,126589,126602,126607,126610,126613,126628,126631,126634,126637,126640,126643,126647,126650,126657,126660,126663,126666,126669,126672,126678,126681,126684,126690,126693,126696,126699,126705,126708,126711,126725,126732,126735,126738,126745,126754,126757,126760,126763,126767,126770],[10,126492,126488],{"id":126493},"_5-html表格列表与表单",[166,126495,126497],{"id":126496},"_51-表格标签","5.1 表格标签",[14,126499,126500],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126502,126503],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126505,126506],{},"②表格基本语法：",[1554,126508],{"style":126471,"src":126509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126511,126512],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1554,126514],{"style":126471,"src":126515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126517,126518],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1554,126520],{"style":126471,"src":126521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126523,126524],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126526,126527,126530,126531,126533,126534,126537,126538,126540,126541,126544],{},[46,126528,126529],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[46,126532,126529],{},"内部必须拥有",[46,126535,126536],{},"\u003Ctr>","标签，一般位于第一行，",[46,126539,126529],{},"比",[46,126542,126543],{},"\u003Cth>","范围广",[14,126546,126547,126550],{},[46,126548,126549],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[166,126552,126554],{"id":126553},"_52-合并单元格","5.2 合并单元格",[14,126556,126557],{},"（1）合并单元格方式：",[14,126559,126560],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126562,126563],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126565,126566],{},"（2）目标单元格：",[14,126568,126569],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126571,126572],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[166,126574,126576],{"id":126575},"_53-列表标签","5.3 列表标签",[14,126578,126579],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126581,126582],{},"①无序列表：",[1554,126584],{"style":126471,"src":126585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126587,126588],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126590,126591,126594,126595,126598,126599,126601],{},[46,126592,126593],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[46,126596,126597],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[46,126600,126593],{},"中输入其他标签或文字是不对的",[14,126603,126604,126606],{},[46,126605,126597],{},"之间相当于一个容器，可以容纳所有元素",[14,126608,126609],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126611,126612],{},"在css中去除前边的小圆点采用如下代码:",[39,126614,126618],{"className":126615,"code":126616,"language":126617,"meta":44,"style":44},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[46,126619,126620],{"__ignoreMap":44},[49,126621,126622,126625],{"class":51,"line":52},[49,126623,126624],{"class":51389},"list-style",[49,126626,126627],{"class":55},": none;\n",[14,126629,126630],{},"②有序列表：",[1554,126632],{"style":126471,"src":126633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126635,126636],{},"③自定义列表：",[1554,126638],{"style":126471,"src":126639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1554,126641],{"style":126471,"src":126642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[166,126644,126646],{"id":126645},"_54-表单标签","5.4 表单标签",[14,126648,126649],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126651,126652,126653,126656],{},"（1）表单域：包含单元素的区域，",[46,126654,126655],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1554,126658],{"style":126471,"src":126659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126661,126662],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126664,126665],{},"表单元素提交必须有name属性",[14,126667,126668],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126670,126671],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126673,77315,126674,126677],{},[46,126675,126676],{},"\u003Cinput>","输入表单元素",[1554,126679],{"style":126471,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1554,126682],{"style":126471,"src":126683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126685,126686,126687],{},"单选按钮：",[46,126688,126689],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1554,126691],{"style":126471,"src":126692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126694,126695],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1554,126697],{"style":126471,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126700,126701,126704],{},[373,126702,126703],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126706,126707],{},"②select下拉表单元素：可以节约页面控件",[1554,126709],{"style":126471,"src":126710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126712,126713,13885,126715,126718,126719,126721,126722,126724],{},[373,126714,256],{},[46,126716,126717],{},"\u003Cselect>","中至少包含一对",[46,126720,102777],{},"；在",[46,126723,102777],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126726,126727,126728,126731],{},"③",[46,126729,126730],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1554,126733],{"style":126471,"src":126734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126736,126737],{},"3行20列",[166,126739,126741,126742,102756],{"id":126740},"_55-lable标签","5.5 ",[46,126743,126744],{},"\u003Clable>",[14,126746,126747,126748,126750,126751,126753],{},"它不是表单标签，但常常与表单标签搭配使用，",[46,126749,126744],{},"标签用于绑定一个表单标签，当点击",[46,126752,126744],{},"标签内的文本",[14,126755,126756],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1554,126758],{"style":126471,"src":126759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1554,126761],{"style":126471,"src":126762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[166,126764,126766],{"id":126765},"_56-实例","5.6 实例",[1554,126768],{"style":126471,"src":126769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[143,126771,126772],{},"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":44,"searchDepth":84,"depth":84,"links":126774},[126775,126776,126777,126778,126779,126781],{"id":126496,"depth":84,"text":126497},{"id":126553,"depth":84,"text":126554},{"id":126575,"depth":84,"text":126576},{"id":126645,"depth":84,"text":126646},{"id":126740,"depth":84,"text":126780},"5.5 \u003Clable>标签",{"id":126765,"depth":84,"text":126766},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126488,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126788,"title":126789,"body":126790,"description":148,"extension":149,"meta":127339,"navigation":151,"path":127340,"seo":127341,"stem":127342,"__hash__":127343},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126791,"toc":127314},[126792,126795,126799,126802,126805,126809,126812,126815,126818,126821,126824,126827,126830,126834,126837,126841,126844,126847,126850,126854,126857,126860,126863,126869,126872,126875,126878,126881,126884,126887,126890,126923,126927,126930,126933,126936,126940,126943,126946,126949,126952,126955,126959,126962,126965,126968,126972,126975,126979,126982,126986,126989,126994,126998,127001,127005,127008,127011,127014,127017,127044,127047,127051,127054,127057,127062,127065,127068,127072,127075,127080,127083,127086,127089,127093,127096,127099,127102,127106,127109,127112,127115,127119,127123,127126,127166,127169,127173,127180,127183,127187,127190,127236,127240,127243,127246,127249,127277,127281,127284,127311],[10,126793,126789],{"id":126794},"_6-css语法与文本样式",[166,126796,126798],{"id":126797},"_61-css语法规范","6.1 css语法规范",[14,126800,126801],{},"由两部分组成，选择器及一条或多条声明",[1554,126803],{"style":126471,"src":126804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126806,126807],{},[373,126808,256],{},[14,126810,126811],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126813,126814],{},"②属性与属性值以“键值对”的形式出现",[14,126816,126817],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126819,126820],{},"④属性和属性值之间用英文“;”分开",[1554,126822],{"style":126471,"src":126823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1554,126825],{"style":126471,"src":126826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1554,126828],{"style":126471,"src":126829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[166,126831,126833],{"id":126832},"_62-css选择器","6.2 css选择器",[14,126835,126836],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[195,126838,126840],{"id":126839},"_621-标签选择器","6.2.1 标签选择器",[14,126842,126843],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126845,126846],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1554,126848],{"style":126471,"src":126849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[195,126851,126853],{"id":126852},"_622-类选择器","6.2.2 类选择器",[14,126855,126856],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126858,126859],{},"②样例",[1554,126861],{"style":126471,"src":126862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126864,126865,126866,126868],{},"③ ",[373,126867,126703],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126870,126871],{},"可以理解为给这个标签起了个名字，来表示；",[14,126873,126874],{},"长名称或词组可以使用横线来为选择器命名；",[14,126876,126877],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126879,126880],{},"命名要有意义；",[1554,126882],{"style":126471,"src":126883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126885,126886],{},"类选择器也可以指定特殊的元素p.center{}",[14,126888,126889],{},"p.center和.center都对",[39,126891,126893],{"className":126615,"code":126892,"language":126617,"meta":44,"style":44},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[46,126894,126895,126900,126909,126919],{"__ignoreMap":44},[49,126896,126897],{"class":51,"line":52},[49,126898,126899],{"class":283},"\u002F* 类选择器指定特殊元素 *\u002F\n",[49,126901,126902,126904,126907],{"class":51,"line":84},[49,126903,14],{"class":51389},[49,126905,126906],{"class":2055},".center",[49,126908,15662],{"class":55},[49,126910,126911,126913,126915,126917],{"class":51,"line":109},[49,126912,70615],{"class":66},[49,126914,51526],{"class":55},[49,126916,51681],{"class":66},[49,126918,1382],{"class":55},[49,126920,126921],{"class":51,"line":120},[49,126922,1657],{"class":55},[195,126924,126926],{"id":126925},"_623-多类名使用","6.2.3 多类名使用",[14,126928,126929],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1554,126931],{"style":126471,"src":126932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126934,126935],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[195,126937,126939],{"id":126938},"_624-id选择器","6.2.4 id选择器",[14,126941,126942],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126944,126945],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1554,126947],{"style":126471,"src":126948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126950,126951],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126953,126954],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[195,126956,126958],{"id":126957},"_625-通配符选择器","6.2.5 通配符选择器",[14,126960,126961],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126963,126964],{},"* {",[14,126966,126967],{},"color=\"red\"}",[195,126969,126971],{"id":126970},"_626-总结","6.2.6 总结",[1554,126973],{"style":126471,"src":126974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[166,126976,126978],{"id":126977},"_63-css字体属性","6.3 css字体属性",[14,126980,126981],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[195,126983,126985],{"id":126984},"_631-字体系列","6.3.1 字体系列",[14,126987,126988],{},"font-family: '宋体';",[14,126990,126991,126993],{},[373,126992,256],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[195,126995,126997],{"id":126996},"_632-字体大小","6.3.2 字体大小",[14,126999,127000],{},"font-size: 20px",[14,127002,127003,26564],{},[373,127004,126703],{},[14,127006,127007],{},"①px（像素）大小是网页的最常用单位",[14,127009,127010],{},"②谷歌浏览器默认为16px",[14,127012,127013],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127015,127016],{},"④可以给body指定整个页面的大小：会自动引用",[39,127018,127020],{"className":126615,"code":127019,"language":126617,"meta":44,"style":44},"body {\n  font-size: 16px;\n}\n",[46,127021,127022,127028,127040],{"__ignoreMap":44},[49,127023,127024,127026],{"class":51,"line":52},[49,127025,51889],{"class":51389},[49,127027,15662],{"class":55},[49,127029,127030,127032,127034,127036,127038],{"class":51,"line":84},[49,127031,70715],{"class":66},[49,127033,51526],{"class":55},[49,127035,820],{"class":66},[49,127037,51581],{"class":59},[49,127039,1382],{"class":55},[49,127041,127042],{"class":51,"line":109},[49,127043,1657],{"class":55},[14,127045,127046],{},"⑤标题标签比较特殊，需要单独指定大小",[195,127048,127050],{"id":127049},"_633-字体粗细","6.3.3 字体粗细",[14,127052,127053],{},"font-weight: bold;",[14,127055,127056],{},"font-weight: 100；",[14,127058,127059,127061],{},[373,127060,256],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127063,127064],{},"font-weight= 400;",[14,127066,127067],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[195,127069,127071],{"id":127070},"_634-文字样式","6.3.4 文字样式",[14,127073,127074],{},"font-style: normal；",[14,127076,127077,26564],{},[373,127078,127079],{},"属性值",[14,127081,127082],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127084,127085],{},"②italic：浏览器会显示斜体的字体样式",[1554,127087],{"style":126471,"src":127088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[195,127090,127092],{"id":127091},"_635-字体符合属性","6.3.5 字体符合属性",[1554,127094],{"style":126471,"src":127095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1554,127097],{"style":126471,"src":127098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127100,127101],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127103,127104,26564],{},[373,127105,126703],{},[14,127107,127108],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127110,127111],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127113,127114],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[166,127116,127118],{"id":127117},"_64-css-test文本属性","6.4 css test文本属性",[195,127120,127122],{"id":127121},"_641-文本颜色","6.4.1 文本颜色",[14,127124,127125],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[39,127127,127129],{"className":126615,"code":127128,"language":126617,"meta":44,"style":44},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[46,127130,127131,127136,127142,127152,127157,127162],{"__ignoreMap":44},[49,127132,127133],{"class":51,"line":52},[49,127134,127135],{"class":283},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[49,127137,127138,127140],{"class":51,"line":84},[49,127139,14],{"class":51389},[49,127141,15662],{"class":55},[49,127143,127144,127146,127148,127150],{"class":51,"line":109},[49,127145,70994],{"class":66},[49,127147,51526],{"class":55},[49,127149,57510],{"class":66},[49,127151,1382],{"class":55},[49,127153,127154],{"class":51,"line":120},[49,127155,127156],{"class":283},"  \u002F* color: #ff0000; *\u002F\n",[49,127158,127159],{"class":51,"line":135},[49,127160,127161],{"class":283},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[49,127163,127164],{"class":51,"line":1306},[49,127165,1657],{"class":55},[1554,127167],{"style":126471,"src":127168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[195,127170,127172],{"id":127171},"_642-对齐文本","6.4.2 对齐文本",[14,127174,127175,127176,127179],{},"text-align属于用于设置元素内文本内容的 ",[373,127177,127178],{},"水平对齐"," 方式",[14,127181,127182],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[195,127184,127186],{"id":127185},"_643-装饰文本","6.4.3 装饰文本",[14,127188,127189],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[39,127191,127193],{"className":126615,"code":127192,"language":126617,"meta":44,"style":44},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[46,127194,127195,127201,127211,127215,127221,127232],{"__ignoreMap":44},[49,127196,127197,127199],{"class":51,"line":52},[49,127198,56],{"class":51389},[49,127200,15662],{"class":55},[49,127202,127203,127205,127207,127209],{"class":51,"line":84},[49,127204,70591],{"class":66},[49,127206,51526],{"class":55},[49,127208,54826],{"class":66},[49,127210,1382],{"class":55},[49,127212,127213],{"class":51,"line":109},[49,127214,1657],{"class":55},[49,127216,127217,127219],{"class":51,"line":120},[49,127218,14],{"class":51389},[49,127220,15662],{"class":55},[49,127222,127223,127225,127227,127230],{"class":51,"line":135},[49,127224,70591],{"class":66},[49,127226,51526],{"class":55},[49,127228,127229],{"class":66},"underline",[49,127231,1382],{"class":55},[49,127233,127234],{"class":51,"line":1306},[49,127235,1657],{"class":55},[195,127237,127239],{"id":127238},"_644-文本缩进","6.4.4 文本缩进",[14,127241,127242],{},"实现文本的第一行首行缩进自己指定的距离",[14,127244,127245],{},"20px往右边走；-20px往左边走",[14,127247,127248],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[39,127250,127252],{"className":126615,"code":127251,"language":126617,"meta":44,"style":44},"p {\n  text-indent: 2em;\n}\n",[46,127253,127254,127260,127273],{"__ignoreMap":44},[49,127255,127256,127258],{"class":51,"line":52},[49,127257,14],{"class":51389},[49,127259,15662],{"class":55},[49,127261,127262,127265,127267,127269,127271],{"class":51,"line":84},[49,127263,127264],{"class":66},"  text-indent",[49,127266,51526],{"class":55},[49,127268,301],{"class":66},[49,127270,23643],{"class":59},[49,127272,1382],{"class":55},[49,127274,127275],{"class":51,"line":109},[49,127276,1657],{"class":55},[195,127278,127280],{"id":127279},"_645-行间距","6.4.5 行间距",[14,127282,127283],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[39,127285,127287],{"className":126615,"code":127286,"language":126617,"meta":44,"style":44},"p {\n  line-height: 1.6;\n}\n",[46,127288,127289,127295,127307],{"__ignoreMap":44},[49,127290,127291,127293],{"class":51,"line":52},[49,127292,14],{"class":51389},[49,127294,15662],{"class":55},[49,127296,127297,127300,127302,127305],{"class":51,"line":84},[49,127298,127299],{"class":66},"  line-height",[49,127301,51526],{"class":55},[49,127303,127304],{"class":66},"1.6",[49,127306,1382],{"class":55},[49,127308,127309],{"class":51,"line":109},[49,127310,1657],{"class":55},[143,127312,127313],{},"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":44,"searchDepth":84,"depth":84,"links":127315},[127316,127317,127325,127332],{"id":126797,"depth":84,"text":126798},{"id":126832,"depth":84,"text":126833,"children":127318},[127319,127320,127321,127322,127323,127324],{"id":126839,"depth":109,"text":126840},{"id":126852,"depth":109,"text":126853},{"id":126925,"depth":109,"text":126926},{"id":126938,"depth":109,"text":126939},{"id":126957,"depth":109,"text":126958},{"id":126970,"depth":109,"text":126971},{"id":126977,"depth":84,"text":126978,"children":127326},[127327,127328,127329,127330,127331],{"id":126984,"depth":109,"text":126985},{"id":126996,"depth":109,"text":126997},{"id":127049,"depth":109,"text":127050},{"id":127070,"depth":109,"text":127071},{"id":127091,"depth":109,"text":127092},{"id":127117,"depth":84,"text":127118,"children":127333},[127334,127335,127336,127337,127338],{"id":127121,"depth":109,"text":127122},{"id":127171,"depth":109,"text":127172},{"id":127185,"depth":109,"text":127186},{"id":127238,"depth":109,"text":127239},{"id":127279,"depth":109,"text":127280},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126789,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127345,"title":127346,"body":127347,"description":148,"extension":149,"meta":127996,"navigation":151,"path":127997,"seo":127998,"stem":127999,"__hash__":128000},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127348,"toc":127977},[127349,127352,127356,127360,127420,127424,127434,127437,127440,127444,127469,127473,127476,127479,127482,127485,127488,127492,127495,127498,127540,127543,127569,127575,127578,127582,127586,127592,127595,127598,127601,127604,127607,127610,127655,127659,127662,127665,127669,127673,127702,127705,127710,127713,127716,127719,127722,127726,127730,127733,127735,127738,127742,127745,127749,127752,127755,127758,127762,127766,127772,127782,127785,127788,127791,127794,127797,127920,127928,127936,127974],[10,127350,127346],{"id":127351},"_7-css引入方式与选择器进阶",[166,127353,127355],{"id":127354},"_71-css引入方式","7.1 css引入方式",[195,127357,127359],{"id":127358},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[39,127361,127365],{"className":127362,"code":127363,"language":127364,"meta":44,"style":44},"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",[46,127366,127367,127375,127382,127394,127407,127412],{"__ignoreMap":44},[49,127368,127369,127371,127373],{"class":51,"line":52},[49,127370,1129],{"class":55},[49,127372,143],{"class":51389},[49,127374,51396],{"class":55},[49,127376,127377,127380],{"class":51,"line":84},[49,127378,127379],{"class":51389},"  h1",[49,127381,15662],{"class":55},[49,127383,127384,127387,127389,127392],{"class":51,"line":109},[49,127385,127386],{"class":66},"    color",[49,127388,51526],{"class":55},[49,127390,127391],{"class":66},"blue",[49,127393,1382],{"class":55},[49,127395,127396,127399,127401,127403,127405],{"class":51,"line":120},[49,127397,127398],{"class":66},"    font-size",[49,127400,51526],{"class":55},[49,127402,1019],{"class":66},[49,127404,51581],{"class":59},[49,127406,1382],{"class":55},[49,127408,127409],{"class":51,"line":135},[49,127410,127411],{"class":55},"  }\n",[49,127413,127414,127416,127418],{"class":51,"line":1306},[49,127415,51874],{"class":55},[49,127417,143],{"class":51389},[49,127419,51396],{"class":55},[14,127421,127422,26564],{},[373,127423,126703],{},[14,127425,77315,127426,127429,127430,127433],{},[46,127427,127428],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[46,127431,127432],{},"\u003Chead>","标签中",[14,127435,127436],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127438,127439],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[195,127441,127443],{"id":127442},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[39,127445,127447],{"className":127362,"code":127446,"language":127364,"meta":44,"style":44},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[46,127448,127449],{"__ignoreMap":44},[49,127450,127451,127453,127455,127457,127459,127462,127465,127467],{"class":51,"line":52},[49,127452,1129],{"class":55},[49,127454,14],{"class":51389},[49,127456,62715],{"class":2055},[49,127458,60],{"class":55},[49,127460,127461],{"class":328},"\"color: red; font-size: 16px;\"",[49,127463,127464],{"class":55},">这是一个段落\u003C\u002F",[49,127466,14],{"class":51389},[49,127468,51396],{"class":55},[14,127470,127471,26564],{},[373,127472,126703],{},[14,127474,127475],{},"①style其实就是标签的属性",[14,127477,127478],{},"②在双引号中间，写法要符合css规范",[14,127480,127481],{},"③可以控制当前的标签设置样式",[14,127483,127484],{},"④书写繁琐，简单时才用",[14,127486,127487],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[195,127489,127491],{"id":127490},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127493,127494],{},"使用最多，单独建一个css文件，然后html引用",[14,127496,127497],{},"①css文件部分： style.css",[39,127499,127501],{"className":126615,"code":127500,"language":126617,"meta":44,"style":44},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[46,127502,127503,127508,127514,127524,127536],{"__ignoreMap":44},[49,127504,127505],{"class":51,"line":52},[49,127506,127507],{"class":283},"\u002F* style.css *\u002F\n",[49,127509,127510,127512],{"class":51,"line":84},[49,127511,10],{"class":51389},[49,127513,15662],{"class":55},[49,127515,127516,127518,127520,127522],{"class":51,"line":109},[49,127517,70994],{"class":66},[49,127519,51526],{"class":55},[49,127521,127391],{"class":66},[49,127523,1382],{"class":55},[49,127525,127526,127528,127530,127532,127534],{"class":51,"line":120},[49,127527,70715],{"class":66},[49,127529,51526],{"class":55},[49,127531,1019],{"class":66},[49,127533,51581],{"class":59},[49,127535,1382],{"class":55},[49,127537,127538],{"class":51,"line":135},[49,127539,1657],{"class":55},[14,127541,127542],{},"②html部分",[39,127544,127546],{"className":127362,"code":127545,"language":127364,"meta":44,"style":44},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[46,127547,127548],{"__ignoreMap":44},[49,127549,127550,127552,127554,127556,127558,127560,127562,127564,127567],{"class":51,"line":52},[49,127551,1129],{"class":55},[49,127553,69094],{"class":51389},[49,127555,69097],{"class":2055},[49,127557,60],{"class":55},[49,127559,69102],{"class":328},[49,127561,61146],{"class":2055},[49,127563,60],{"class":55},[49,127565,127566],{"class":328},"\"style.css\"",[49,127568,51396],{"class":55},[14,127570,127571,127574],{},[46,127572,127573],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127576,127577],{},"ctrl+0回到页面原来大小",[166,127579,127581],{"id":127580},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[195,127583,127585],{"id":127584},"_721-快速生成html","7.2.1 快速生成html",[14,127587,127588,127589],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[46,127590,127591],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127593,127594],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127596,127597],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127599,127600],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127602,127603],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127605,127606],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127608,127609],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[39,127611,127613],{"className":127362,"code":127612,"language":127364,"meta":44,"style":44},"\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",[46,127614,127615,127620,127625,127630,127635,127640,127645,127650],{"__ignoreMap":44},[49,127616,127617],{"class":51,"line":52},[49,127618,127619],{"class":283},"\u003C!-- Emmet 语法示例 -->\n",[49,127621,127622],{"class":51,"line":84},[49,127623,127624],{"class":283},"\u003C!-- div*3        → 生成3个div -->\n",[49,127626,127627],{"class":51,"line":109},[49,127628,127629],{"class":283},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[49,127631,127632],{"class":51,"line":120},[49,127633,127634],{"class":283},"\u003C!-- div+p        → 兄弟div和p -->\n",[49,127636,127637],{"class":51,"line":135},[49,127638,127639],{"class":283},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[49,127641,127642],{"class":51,"line":1306},[49,127643,127644],{"class":283},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[49,127646,127647],{"class":51,"line":1312},[49,127648,127649],{"class":283},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[49,127651,127652],{"class":51,"line":1403},[49,127653,127654],{"class":283},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[195,127656,127658],{"id":127657},"_722-快速生成css","7.2.2 快速生成css",[14,127660,127661],{},"简写开头",[14,127663,127664],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[166,127666,127668],{"id":127667},"_73-css复合选择器","7.3 css复合选择器",[195,127670,127672],{"id":127671},"_731-后代选择器","7.3.1 后代选择器",[39,127674,127676],{"className":126615,"code":127675,"language":126617,"meta":44,"style":44},".parent .child {\n  color: blue;\n}\n",[46,127677,127678,127688,127698],{"__ignoreMap":44},[49,127679,127680,127683,127686],{"class":51,"line":52},[49,127681,127682],{"class":2055},".parent",[49,127684,127685],{"class":2055}," .child",[49,127687,15662],{"class":55},[49,127689,127690,127692,127694,127696],{"class":51,"line":84},[49,127691,70994],{"class":66},[49,127693,51526],{"class":55},[49,127695,127391],{"class":66},[49,127697,1382],{"class":55},[49,127699,127700],{"class":51,"line":109},[49,127701,1657],{"class":55},[14,127703,127704],{},"元素1 元素2 {样式声明}",[14,127706,127707],{},[373,127708,127709],{},"注意点:",[14,127711,127712],{},"①元素1和元素2中间用空格隔开",[14,127714,127715],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127717,127718],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127720,127721],{},"④元素1和元素2可以是任意基础选择器",[195,127723,127725],{"id":127724},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127727,127728],{},[373,127729,127709],{},[14,127731,127732],{},"①元素1和元素2中间用大于号隔开",[14,127734,127715],{},[14,127736,127737],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[195,127739,127741],{"id":127740},"_733-并集选择器","7.3.3 并集选择器",[14,127743,127744],{},"元素1，元素2 {样式声明}",[14,127746,127747],{},[373,127748,127709],{},[14,127750,127751],{},"①元素1和元素2中间用逗号隔开",[14,127753,127754],{},"②逗号可以理解为和的意思",[14,127756,127757],{},"③并集选择器通常用于集体声明",[195,127759,127761],{"id":127760},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127763,127764],{},[373,127765,127709],{},[14,127767,127768,127769,127771],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69094,127770],{},"－:visited－:hover－:active。",[14,127773,127774,127775,127778,127779,25831],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127776,127777],"hover",{}," 、 ",[127780,127781],"first-child",{},[14,127783,127784],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127786,127787],{},"link对没访问的进行设置",[14,127789,127790],{},"vistied对已访问的进行改变",[14,127792,127793],{},"hover鼠标经过就会变",[14,127795,127796],{},"active常按(点)就会变",[39,127798,127800],{"className":126615,"code":127799,"language":126617,"meta":44,"style":44},"\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",[46,127801,127802,127807,127816,127826,127836,127840,127849,127860,127864,127872,127882,127892,127896,127905,127916],{"__ignoreMap":44},[49,127803,127804],{"class":51,"line":52},[49,127805,127806],{"class":283},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[49,127808,127809,127811,127814],{"class":51,"line":84},[49,127810,56],{"class":51389},[49,127812,127813],{"class":2055},":link",[49,127815,15662],{"class":55},[49,127817,127818,127820,127822,127824],{"class":51,"line":109},[49,127819,70994],{"class":66},[49,127821,51526],{"class":55},[49,127823,62458],{"class":66},[49,127825,1382],{"class":55},[49,127827,127828,127830,127832,127834],{"class":51,"line":120},[49,127829,70591],{"class":66},[49,127831,51526],{"class":55},[49,127833,54826],{"class":66},[49,127835,1382],{"class":55},[49,127837,127838],{"class":51,"line":135},[49,127839,1657],{"class":55},[49,127841,127842,127844,127847],{"class":51,"line":1306},[49,127843,56],{"class":51389},[49,127845,127846],{"class":2055},":visited",[49,127848,15662],{"class":55},[49,127850,127851,127853,127855,127858],{"class":51,"line":1312},[49,127852,70994],{"class":66},[49,127854,51526],{"class":55},[49,127856,127857],{"class":66},"purple",[49,127859,1382],{"class":55},[49,127861,127862],{"class":51,"line":1403},[49,127863,1657],{"class":55},[49,127865,127866,127868,127870],{"class":51,"line":1409},[49,127867,56],{"class":51389},[49,127869,61029],{"class":2055},[49,127871,15662],{"class":55},[49,127873,127874,127876,127878,127880],{"class":51,"line":1421},[49,127875,70994],{"class":66},[49,127877,51526],{"class":55},[49,127879,54978],{"class":66},[49,127881,1382],{"class":55},[49,127883,127884,127886,127888,127890],{"class":51,"line":1704},[49,127885,70591],{"class":66},[49,127887,51526],{"class":55},[49,127889,127229],{"class":66},[49,127891,1382],{"class":55},[49,127893,127894],{"class":51,"line":1709},[49,127895,1657],{"class":55},[49,127897,127898,127900,127903],{"class":51,"line":1715},[49,127899,56],{"class":51389},[49,127901,127902],{"class":2055},":active",[49,127904,15662],{"class":55},[49,127906,127907,127909,127911,127914],{"class":51,"line":1720},[49,127908,70994],{"class":66},[49,127910,51526],{"class":55},[49,127912,127913],{"class":66},"green",[49,127915,1382],{"class":55},[49,127917,127918],{"class":51,"line":1734},[49,127919,1657],{"class":55},[195,127921,127923,127924,127927],{"id":127922},"_735-伪类选择器","7.3.5 ",[127925,127926],"focus",{},"伪类选择器",[14,127929,127930,127932,127933,127935],{},[127925,127931],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[46,127934,126676],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[39,127937,127939],{"className":126615,"code":127938,"language":126617,"meta":44,"style":44},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[46,127940,127941,127949,127960,127970],{"__ignoreMap":44},[49,127942,127943,127945,127947],{"class":51,"line":52},[49,127944,53910],{"class":51389},[49,127946,61989],{"class":2055},[49,127948,15662],{"class":55},[49,127950,127951,127954,127956,127958],{"class":51,"line":84},[49,127952,127953],{"class":66},"  border-color",[49,127955,51526],{"class":55},[49,127957,54978],{"class":66},[49,127959,1382],{"class":55},[49,127961,127962,127964,127966,127968],{"class":51,"line":109},[49,127963,70887],{"class":66},[49,127965,51526],{"class":55},[49,127967,54826],{"class":66},[49,127969,1382],{"class":55},[49,127971,127972],{"class":51,"line":120},[49,127973,1657],{"class":55},[143,127975,127976],{},"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":44,"searchDepth":84,"depth":84,"links":127978},[127979,127984,127988],{"id":127354,"depth":84,"text":127355,"children":127980},[127981,127982,127983],{"id":127358,"depth":109,"text":127359},{"id":127442,"depth":109,"text":127443},{"id":127490,"depth":109,"text":127491},{"id":127580,"depth":84,"text":127581,"children":127985},[127986,127987],{"id":127584,"depth":109,"text":127585},{"id":127657,"depth":109,"text":127658},{"id":127667,"depth":84,"text":127668,"children":127989},[127990,127991,127992,127993,127994],{"id":127671,"depth":109,"text":127672},{"id":127724,"depth":109,"text":127725},{"id":127740,"depth":109,"text":127741},{"id":127760,"depth":109,"text":127761},{"id":127922,"depth":109,"text":127995},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127346,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128002,"title":128003,"body":128004,"description":148,"extension":149,"meta":129927,"navigation":151,"path":129928,"seo":129929,"stem":129930,"__hash__":129931},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128005,"toc":129901},[128006,128009,128013,128022,128026,128052,128057,128060,128063,128066,128069,128073,128076,128086,128094,128098,128133,128138,128141,128144,128147,128150,128154,128157,128166,128170,128183,128188,128191,128194,128197,128201,128204,128208,128211,128266,128269,128300,128303,128357,128361,128364,128530,128653,128656,128659,128662,128665,128669,128672,128676,128679,128682,128686,128689,128720,128747,128775,128778,128782,128808,128851,128855,128949,128952,128979,128982,128985,128988,128991,128994,128997,129000,129003,129006,129010,129067,129094,129098,129146,129150,129191,129193,129196,129199,129202,129205,129209,129301,129304,129307,129310,129314,129437,129638,129642,129646,129649,129652,129655,129659,129662,129665,129690,129693,129696,129699,129702,129705,129709,129717,129779,129782,129840,129843,129846,129849,129852,129855,129858,129861,129898],[10,128007,128003],{"id":128008},"_8-css显示模式与背景特性",[166,128010,128012],{"id":128011},"_81-css元素显示模式","8.1 css元素显示模式",[14,128014,128015,128016,128018,128019,128021],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[46,128017,126226],{},"自己占一行，比如一行可以放多个",[46,128020,126229],{},"，HTML 元素一般分为块元素和行内元素两种类型",[195,128023,128025],{"id":128024},"_811-块元素","8.1.1 块元素",[14,128027,128028,128029,128031,128032,436,128035,436,128037,436,128039,436,128042,436,128045,128048,128049,128051],{},"常见的块元素有",[46,128030,126130],{},"~",[46,128033,128034],{},"\u003Ch6>",[46,128036,126156],{},[46,128038,126226],{},[46,128040,128041],{},"\u003Cul>",[46,128043,128044],{},"\u003Col>",[46,128046,128047],{},"\u003Cli>","等，其中 ",[46,128050,126226],{}," 标签是最典型的块元素",[14,128053,128054],{},[373,128055,128056],{},"块级元素的特点：",[14,128058,128059],{},"① 比较霸道，自己独占一行。",[14,128061,128062],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128064,128065],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128067,128068],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128070,128071],{},[373,128072,256],{},[14,128074,128075],{},"①文字类的元素内不能使用块级元素",[14,128077,77338,128078,128080,128081,128083,128084],{},[46,128079,126156],{}," 标签主要用于存放文字，因此 ",[46,128082,126156],{}," 里面不能放块级元素，特别是不能放",[46,128085,126226],{},[14,128087,128088,128089,128031,128091,128093],{},"⑥同理， ",[46,128090,126130],{},[46,128092,128034],{},"等都是文字类块级标签，里面也不能放其他块级元素",[195,128095,128097],{"id":128096},"_812-行内元素","8.1.2 行内元素",[14,128099,128100,128101,436,128103,436,128106,436,128109,436,128112,436,128115,436,128118,436,128121,436,128124,436,128127,128129,128130,128132],{},"常见的行内元素有 ",[46,128102,126388],{},[46,128104,128105],{},"\u003Cstrong>",[46,128107,128108],{},"\u003Cb>",[46,128110,128111],{},"\u003Cem>",[46,128113,128114],{},"\u003Ci>",[46,128116,128117],{},"\u003Cdel>",[46,128119,128120],{},"\u003Cs>",[46,128122,128123],{},"\u003Cins>",[46,128125,128126],{},"\u003Cu>",[46,128128,126229],{}," 等，其中 ",[46,128131,126229],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128134,128135],{},[373,128136,128137],{},"特点：",[14,128139,128140],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128142,128143],{},"② 高、宽直接设置是无效的。",[14,128145,128146],{},"③ 默认宽度就是它本身内容的宽度。",[14,128148,128149],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128151,128152],{},[373,128153,256],{},[14,128155,128156],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128158,128159,128160,128162,128163,128165],{},"②特殊情况链接 ",[46,128161,126388],{}," 里面可以放块级元素，但是给 ",[46,128164,126388],{}," 转换一下块级模式最安全",[195,128167,128169],{"id":128168},"_813-行内块元素","8.1.3 行内块元素",[14,128171,128172,128173,436,128176,436,128179,128182],{},"在行内元素中有几个特殊的标签 —— ",[46,128174,128175],{},"\u003Cimg \u002F>",[46,128177,128178],{},"\u003Cinput \u002F>",[46,128180,128181],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128184,128185],{},[373,128186,128187],{},"行内块元素的特点：",[14,128189,128190],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128192,128193],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128195,128196],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[195,128198,128200],{"id":128199},"_814-总结","8.1.4 总结",[1554,128202],{"style":126471,"src":128203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[195,128205,128207],{"id":128206},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128209,128210],{},"①转换为块元素：display:block;",[39,128212,128214],{"className":126615,"code":128213,"language":126617,"meta":44,"style":44},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[46,128215,128216,128221,128227,128238,128250,128262],{"__ignoreMap":44},[49,128217,128218],{"class":51,"line":52},[49,128219,128220],{"class":283},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[49,128222,128223,128225],{"class":51,"line":84},[49,128224,56],{"class":51389},[49,128226,15662],{"class":55},[49,128228,128229,128232,128234,128236],{"class":51,"line":109},[49,128230,128231],{"class":66},"  display",[49,128233,51526],{"class":55},[49,128235,60958],{"class":66},[49,128237,1382],{"class":55},[49,128239,128240,128242,128244,128246,128248],{"class":51,"line":120},[49,128241,70657],{"class":66},[49,128243,51526],{"class":55},[49,128245,533],{"class":66},[49,128247,51581],{"class":59},[49,128249,1382],{"class":55},[49,128251,128252,128254,128256,128258,128260],{"class":51,"line":135},[49,128253,70877],{"class":66},[49,128255,51526],{"class":55},[49,128257,622],{"class":66},[49,128259,51581],{"class":59},[49,128261,1382],{"class":55},[49,128263,128264],{"class":51,"line":1306},[49,128265,1657],{"class":55},[14,128267,128268],{},"②转换为行内元素：display:inline;",[39,128270,128272],{"className":126615,"code":128271,"language":126617,"meta":44,"style":44},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[46,128273,128274,128279,128285,128296],{"__ignoreMap":44},[49,128275,128276],{"class":51,"line":52},[49,128277,128278],{"class":283},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[49,128280,128281,128283],{"class":51,"line":84},[49,128282,51700],{"class":51389},[49,128284,15662],{"class":55},[49,128286,128287,128289,128291,128294],{"class":51,"line":109},[49,128288,128231],{"class":66},[49,128290,51526],{"class":55},[49,128292,128293],{"class":66},"inline",[49,128295,1382],{"class":55},[49,128297,128298],{"class":51,"line":120},[49,128299,1657],{"class":55},[14,128301,128302],{},"③转换为行内块：display:inline-block;",[39,128304,128306],{"className":126615,"code":128305,"language":126617,"meta":44,"style":44},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[46,128307,128308,128313,128319,128329,128341,128353],{"__ignoreMap":44},[49,128309,128310],{"class":51,"line":52},[49,128311,128312],{"class":283},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[49,128314,128315,128317],{"class":51,"line":84},[49,128316,49],{"class":51389},[49,128318,15662],{"class":55},[49,128320,128321,128323,128325,128327],{"class":51,"line":109},[49,128322,128231],{"class":66},[49,128324,51526],{"class":55},[49,128326,72472],{"class":66},[49,128328,1382],{"class":55},[49,128330,128331,128333,128335,128337,128339],{"class":51,"line":120},[49,128332,70657],{"class":66},[49,128334,51526],{"class":55},[49,128336,831],{"class":66},[49,128338,51581],{"class":59},[49,128340,1382],{"class":55},[49,128342,128343,128345,128347,128349,128351],{"class":51,"line":135},[49,128344,70877],{"class":66},[49,128346,51526],{"class":55},[49,128348,1170],{"class":66},[49,128350,51581],{"class":59},[49,128352,1382],{"class":55},[49,128354,128355],{"class":51,"line":1306},[49,128356,1657],{"class":55},[195,128358,128360],{"id":128359},"_816-小米侧边栏","8.1.6 小米侧边栏",[1554,128362],{"style":126471,"src":128363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[39,128365,128367],{"className":127362,"code":128366,"language":127364,"meta":44,"style":44},"\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",[46,128368,128369,128374,128389,128408,128427,128446,128465,128484,128503,128522],{"__ignoreMap":44},[49,128370,128371],{"class":51,"line":52},[49,128372,128373],{"class":283},"\u003C!-- 小米侧边栏案例 -->\n",[49,128375,128376,128378,128380,128382,128384,128387],{"class":51,"line":84},[49,128377,1129],{"class":55},[49,128379,51700],{"class":51389},[49,128381,53575],{"class":2055},[49,128383,60],{"class":55},[49,128385,128386],{"class":328},"\"sidebar\"",[49,128388,51396],{"class":55},[49,128390,128391,128393,128395,128397,128399,128401,128404,128406],{"class":51,"line":109},[49,128392,52233],{"class":55},[49,128394,56],{"class":51389},[49,128396,61146],{"class":2055},[49,128398,60],{"class":55},[49,128400,61151],{"class":328},[49,128402,128403],{"class":55},">手机 电话卡\u003C\u002F",[49,128405,56],{"class":51389},[49,128407,51396],{"class":55},[49,128409,128410,128412,128414,128416,128418,128420,128423,128425],{"class":51,"line":120},[49,128411,52233],{"class":55},[49,128413,56],{"class":51389},[49,128415,61146],{"class":2055},[49,128417,60],{"class":55},[49,128419,61151],{"class":328},[49,128421,128422],{"class":55},">电视 盒子\u003C\u002F",[49,128424,56],{"class":51389},[49,128426,51396],{"class":55},[49,128428,128429,128431,128433,128435,128437,128439,128442,128444],{"class":51,"line":135},[49,128430,52233],{"class":55},[49,128432,56],{"class":51389},[49,128434,61146],{"class":2055},[49,128436,60],{"class":55},[49,128438,61151],{"class":328},[49,128440,128441],{"class":55},">笔记本 平板\u003C\u002F",[49,128443,56],{"class":51389},[49,128445,51396],{"class":55},[49,128447,128448,128450,128452,128454,128456,128458,128461,128463],{"class":51,"line":1306},[49,128449,52233],{"class":55},[49,128451,56],{"class":51389},[49,128453,61146],{"class":2055},[49,128455,60],{"class":55},[49,128457,61151],{"class":328},[49,128459,128460],{"class":55},">出行 穿戴\u003C\u002F",[49,128462,56],{"class":51389},[49,128464,51396],{"class":55},[49,128466,128467,128469,128471,128473,128475,128477,128480,128482],{"class":51,"line":1312},[49,128468,52233],{"class":55},[49,128470,56],{"class":51389},[49,128472,61146],{"class":2055},[49,128474,60],{"class":55},[49,128476,61151],{"class":328},[49,128478,128479],{"class":55},">智能 路由器\u003C\u002F",[49,128481,56],{"class":51389},[49,128483,51396],{"class":55},[49,128485,128486,128488,128490,128492,128494,128496,128499,128501],{"class":51,"line":1403},[49,128487,52233],{"class":55},[49,128489,56],{"class":51389},[49,128491,61146],{"class":2055},[49,128493,60],{"class":55},[49,128495,61151],{"class":328},[49,128497,128498],{"class":55},">健康 儿童\u003C\u002F",[49,128500,56],{"class":51389},[49,128502,51396],{"class":55},[49,128504,128505,128507,128509,128511,128513,128515,128518,128520],{"class":51,"line":1409},[49,128506,52233],{"class":55},[49,128508,56],{"class":51389},[49,128510,61146],{"class":2055},[49,128512,60],{"class":55},[49,128514,61151],{"class":328},[49,128516,128517],{"class":55},">耳机 音响\u003C\u002F",[49,128519,56],{"class":51389},[49,128521,51396],{"class":55},[49,128523,128524,128526,128528],{"class":51,"line":1421},[49,128525,51874],{"class":55},[49,128527,51700],{"class":51389},[49,128529,51396],{"class":55},[39,128531,128533],{"className":126615,"code":128532,"language":126617,"meta":44,"style":44},".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",[46,128534,128535,128544,128554,128567,128579,128591,128603,128613,128624,128628,128638,128649],{"__ignoreMap":44},[49,128536,128537,128540,128542],{"class":51,"line":52},[49,128538,128539],{"class":2055},".sidebar",[49,128541,1490],{"class":51389},[49,128543,15662],{"class":55},[49,128545,128546,128548,128550,128552],{"class":51,"line":84},[49,128547,128231],{"class":66},[49,128549,51526],{"class":55},[49,128551,60958],{"class":66},[49,128553,1382],{"class":55},[49,128555,128556,128558,128560,128563,128565],{"class":51,"line":109},[49,128557,70657],{"class":66},[49,128559,51526],{"class":55},[49,128561,128562],{"class":66},"234",[49,128564,51581],{"class":59},[49,128566,1382],{"class":55},[49,128568,128569,128571,128573,128575,128577],{"class":51,"line":120},[49,128570,70877],{"class":66},[49,128572,51526],{"class":55},[49,128574,671],{"class":66},[49,128576,51581],{"class":59},[49,128578,1382],{"class":55},[49,128580,128581,128583,128585,128587,128589],{"class":51,"line":135},[49,128582,127299],{"class":66},[49,128584,51526],{"class":55},[49,128586,671],{"class":66},[49,128588,51581],{"class":59},[49,128590,1382],{"class":55},[49,128592,128593,128595,128597,128599,128601],{"class":51,"line":1306},[49,128594,70912],{"class":66},[49,128596,51526],{"class":55},[49,128598,1170],{"class":66},[49,128600,51581],{"class":59},[49,128602,1382],{"class":55},[49,128604,128605,128607,128609,128611],{"class":51,"line":1312},[49,128606,70994],{"class":66},[49,128608,51526],{"class":55},[49,128610,60931],{"class":66},[49,128612,1382],{"class":55},[49,128614,128615,128617,128619,128622],{"class":51,"line":1403},[49,128616,70967],{"class":66},[49,128618,51526],{"class":55},[49,128620,128621],{"class":66},"#55585a",[49,128623,1382],{"class":55},[49,128625,128626],{"class":51,"line":1409},[49,128627,1657],{"class":55},[49,128629,128630,128632,128634,128636],{"class":51,"line":1421},[49,128631,128539],{"class":2055},[49,128633,1490],{"class":51389},[49,128635,61029],{"class":2055},[49,128637,15662],{"class":55},[49,128639,128640,128642,128644,128647],{"class":51,"line":1704},[49,128641,70967],{"class":66},[49,128643,51526],{"class":55},[49,128645,128646],{"class":66},"#ff6700",[49,128648,1382],{"class":55},[49,128650,128651],{"class":51,"line":1709},[49,128652,1657],{"class":55},[1554,128654],{"style":126471,"src":128655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128657,128658],{},"行高=盒子高度：实现文字的垂直居中",[14,128660,128661],{},"原理讲解：",[1554,128663],{"style":126471,"src":128664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[166,128666,128668],{"id":128667},"_82-css背景","8.2 css背景",[14,128670,128671],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[195,128673,128675],{"id":128674},"_821-背景颜色","8.2.1 背景颜色",[14,128677,128678],{},"background-color:颜色值;",[14,128680,128681],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[195,128683,128685],{"id":128684},"_822-背景图片","8.2.2 背景图片",[14,128687,128688],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[39,128690,128692],{"className":126615,"code":128691,"language":126617,"meta":44,"style":44},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[46,128693,128694,128700,128716],{"__ignoreMap":44},[49,128695,128696,128698],{"class":51,"line":52},[49,128697,51700],{"class":51389},[49,128699,15662],{"class":55},[49,128701,128702,128705,128707,128709,128711,128714],{"class":51,"line":84},[49,128703,128704],{"class":66},"  background-image",[49,128706,51526],{"class":55},[49,128708,61815],{"class":66},[49,128710,228],{"class":55},[49,128712,128713],{"class":126},"images\u002Fbg.png",[49,128715,2811],{"class":55},[49,128717,128718],{"class":51,"line":109},[49,128719,1657],{"class":55},[361,128721,128722,128731],{},[364,128723,128724],{},[367,128725,128726,128729],{},[370,128727,128728],{"align":23826},"参数值",[370,128730,102759],{"align":23826},[408,128732,128733,128740],{},[367,128734,128735,128737],{},[413,128736,54826],{"align":23826},[413,128738,128739],{"align":23826},"无背景图（默认的）",[367,128741,128742,128744],{},[413,128743,61815],{"align":23826},[413,128745,128746],{"align":23826},"使用绝对或相对地址指定背景图像",[39,128748,128749],{"className":126615,"code":128691,"language":126617,"meta":44,"style":44},[46,128750,128751,128757,128771],{"__ignoreMap":44},[49,128752,128753,128755],{"class":51,"line":52},[49,128754,51700],{"class":51389},[49,128756,15662],{"class":55},[49,128758,128759,128761,128763,128765,128767,128769],{"class":51,"line":84},[49,128760,128704],{"class":66},[49,128762,51526],{"class":55},[49,128764,61815],{"class":66},[49,128766,228],{"class":55},[49,128768,128713],{"class":126},[49,128770,2811],{"class":55},[49,128772,128773],{"class":51,"line":109},[49,128774,1657],{"class":55},[14,128776,128777],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[195,128779,128781],{"id":128780},"_823-背景平铺","8.2.3 背景平铺",[39,128783,128785],{"className":126615,"code":128784,"language":126617,"meta":44,"style":44},"div {\n  background-repeat: no-repeat;\n}\n",[46,128786,128787,128793,128804],{"__ignoreMap":44},[49,128788,128789,128791],{"class":51,"line":52},[49,128790,51700],{"class":51389},[49,128792,15662],{"class":55},[49,128794,128795,128798,128800,128802],{"class":51,"line":84},[49,128796,128797],{"class":66},"  background-repeat",[49,128799,51526],{"class":55},[49,128801,61825],{"class":66},[49,128803,1382],{"class":55},[49,128805,128806],{"class":51,"line":109},[49,128807,1657],{"class":55},[361,128809,128810,128818],{},[364,128811,128812],{},[367,128813,128814,128816],{},[370,128815,128728],{"align":23826},[370,128817,102759],{"align":23826},[408,128819,128820,128828,128835,128843],{},[367,128821,128822,128825],{},[413,128823,128824],{"align":23826},"repeat",[413,128826,128827],{"align":23826},"背景图像在纵向和横向上平铺（默认的）",[367,128829,128830,128832],{},[413,128831,61825],{"align":23826},[413,128833,128834],{"align":23826},"背景图像不平铺",[367,128836,128837,128840],{},[413,128838,128839],{"align":23826},"repeat-x",[413,128841,128842],{"align":23826},"背景图像在横向上平铺",[367,128844,128845,128848],{},[413,128846,128847],{"align":23826},"repeat-y",[413,128849,128850],{"align":23826},"背景图像在纵向平铺",[195,128852,128854],{"id":128853},"_824-背景图片位置","8.2.4 背景图片位置",[39,128856,128858],{"className":126615,"code":128857,"language":126617,"meta":44,"style":44},"\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",[46,128859,128860,128865,128871,128885,128889,128894,128900,128916,128920,128925,128931,128945],{"__ignoreMap":44},[49,128861,128862],{"class":51,"line":52},[49,128863,128864],{"class":283},"\u002F* 方位名词 *\u002F\n",[49,128866,128867,128869],{"class":51,"line":84},[49,128868,51700],{"class":51389},[49,128870,15662],{"class":55},[49,128872,128873,128876,128878,128880,128883],{"class":51,"line":109},[49,128874,128875],{"class":66},"  background-position",[49,128877,51526],{"class":55},[49,128879,51681],{"class":66},[49,128881,128882],{"class":66}," top",[49,128884,1382],{"class":55},[49,128886,128887],{"class":51,"line":120},[49,128888,1657],{"class":55},[49,128890,128891],{"class":51,"line":135},[49,128892,128893],{"class":283},"\u002F* 精确单位 *\u002F\n",[49,128895,128896,128898],{"class":51,"line":1306},[49,128897,51700],{"class":51389},[49,128899,15662],{"class":55},[49,128901,128902,128904,128906,128908,128910,128912,128914],{"class":51,"line":1312},[49,128903,128875],{"class":66},[49,128905,51526],{"class":55},[49,128907,919],{"class":66},[49,128909,51581],{"class":59},[49,128911,57593],{"class":66},[49,128913,51581],{"class":59},[49,128915,1382],{"class":55},[49,128917,128918],{"class":51,"line":1403},[49,128919,1657],{"class":55},[49,128921,128922],{"class":51,"line":1409},[49,128923,128924],{"class":283},"\u002F* 混合单位 *\u002F\n",[49,128926,128927,128929],{"class":51,"line":1421},[49,128928,51700],{"class":51389},[49,128930,15662],{"class":55},[49,128932,128933,128935,128937,128939,128941,128943],{"class":51,"line":1704},[49,128934,128875],{"class":66},[49,128936,51526],{"class":55},[49,128938,919],{"class":66},[49,128940,51581],{"class":59},[49,128942,17234],{"class":66},[49,128944,1382],{"class":55},[49,128946,128947],{"class":51,"line":1709},[49,128948,1657],{"class":55},[14,128950,128951],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[361,128953,128954,128962],{},[364,128955,128956],{},[367,128957,128958,128960],{},[370,128959,128728],{"align":23826},[370,128961,25960],{"align":23826},[408,128963,128964,128971],{},[367,128965,128966,128968],{},[413,128967,52057],{"align":23826},[413,128969,128970],{"align":23826},"百分数|由浮点数和单位标识符组成的长度值",[367,128972,128973,128976],{},[413,128974,128975],{"align":23826},"position",[413,128977,128978],{"align":23826},"top|center|bottom|left|center|right 方位名词",[14,128980,128981],{},"其他说明：",[14,128983,128984],{},"①参数是方位名词",[14,128986,128987],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128989,128990],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128992,128993],{},"②参数是精确单位",[14,128995,128996],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128998,128999],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129001,129002],{},"③参数是混合单位",[14,129004,129005],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[195,129007,129009],{"id":129008},"_825-背景图片固定","8.2.5 背景图片固定",[39,129011,129013],{"className":126615,"code":129012,"language":126617,"meta":44,"style":44},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[46,129014,129015,129020,129026,129038,129042,129047,129053,129063],{"__ignoreMap":44},[49,129016,129017],{"class":51,"line":52},[49,129018,129019],{"class":283},"\u002F* 背景滚动（默认） *\u002F\n",[49,129021,129022,129024],{"class":51,"line":84},[49,129023,51700],{"class":51389},[49,129025,15662],{"class":55},[49,129027,129028,129031,129033,129036],{"class":51,"line":109},[49,129029,129030],{"class":66},"  background-attachment",[49,129032,51526],{"class":55},[49,129034,129035],{"class":66},"scroll",[49,129037,1382],{"class":55},[49,129039,129040],{"class":51,"line":120},[49,129041,1657],{"class":55},[49,129043,129044],{"class":51,"line":135},[49,129045,129046],{"class":283},"\u002F* 背景固定 *\u002F\n",[49,129048,129049,129051],{"class":51,"line":1306},[49,129050,51700],{"class":51389},[49,129052,15662],{"class":55},[49,129054,129055,129057,129059,129061],{"class":51,"line":1312},[49,129056,129030],{"class":66},[49,129058,51526],{"class":55},[49,129060,86322],{"class":66},[49,129062,1382],{"class":55},[49,129064,129065],{"class":51,"line":1403},[49,129066,1657],{"class":55},[361,129068,129069,129078],{},[364,129070,129071],{},[367,129072,129073,129076],{},[370,129074,129075],{"align":23826},"参数",[370,129077,102759],{"align":23826},[408,129079,129080,129087],{},[367,129081,129082,129084],{},[413,129083,129035],{"align":23826},[413,129085,129086],{"align":23826},"背景图像是随对象内容滚动",[367,129088,129089,129091],{},[413,129090,86322],{"align":23826},[413,129092,129093],{"align":23826},"背景图像固定",[195,129095,129097],{"id":129096},"_826-背景样式合写","8.2.6 背景样式合写",[39,129099,129101],{"className":126615,"code":129100,"language":126617,"meta":44,"style":44},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[46,129102,129103,129108,129114,129142],{"__ignoreMap":44},[49,129104,129105],{"class":51,"line":52},[49,129106,129107],{"class":283},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[49,129109,129110,129112],{"class":51,"line":84},[49,129111,51700],{"class":51389},[49,129113,15662],{"class":55},[49,129115,129116,129118,129120,129122,129125,129127,129129,129131,129133,129136,129138,129140],{"class":51,"line":109},[49,129117,70700],{"class":66},[49,129119,51526],{"class":55},[49,129121,60931],{"class":66},[49,129123,129124],{"class":66}," url",[49,129126,228],{"class":55},[49,129128,128713],{"class":126},[49,129130,13804],{"class":55},[49,129132,61825],{"class":66},[49,129134,129135],{"class":66}," fixed",[49,129137,17234],{"class":66},[49,129139,128882],{"class":66},[49,129141,1382],{"class":55},[49,129143,129144],{"class":51,"line":120},[49,129145,1657],{"class":55},[195,129147,129149],{"id":129148},"_827-背景色半透明","8.2.7 背景色半透明",[39,129151,129153],{"className":126615,"code":129152,"language":126617,"meta":44,"style":44},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[46,129154,129155,129161,129187],{"__ignoreMap":44},[49,129156,129157,129159],{"class":51,"line":52},[49,129158,51700],{"class":51389},[49,129160,15662],{"class":55},[49,129162,129163,129165,129167,129169,129171,129173,129175,129177,129179,129181,129183,129185],{"class":51,"line":84},[49,129164,70700],{"class":66},[49,129166,51526],{"class":55},[49,129168,55199],{"class":66},[49,129170,228],{"class":55},[49,129172,415],{"class":66},[49,129174,12525],{"class":55},[49,129176,415],{"class":66},[49,129178,12525],{"class":55},[49,129180,415],{"class":66},[49,129182,12525],{"class":55},[49,129184,100584],{"class":66},[49,129186,2811],{"class":55},[49,129188,129189],{"class":51,"line":109},[49,129190,1657],{"class":55},[14,129192,99459],{},[14,129194,129195],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129197,129198],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129200,129201],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129203,129204],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[195,129206,129208],{"id":129207},"_828-总结","8.2.8 总结",[361,129210,129211,129222],{},[364,129212,129213],{},[367,129214,129215,129218,129220],{},[370,129216,129217],{"align":23826},"属性",[370,129219,102759],{"align":23826},[370,129221,376],{"align":23826},[408,129223,129224,129235,129246,129257,129268,129279,129290],{},[367,129225,129226,129229,129232],{},[413,129227,129228],{"align":23826},"background-color",[413,129230,129231],{"align":23826},"背景颜色",[413,129233,129234],{"align":23826},"预定义的颜色值\u002F十六进制\u002FRGB代码",[367,129236,129237,129240,129243],{},[413,129238,129239],{"align":23826},"background-image",[413,129241,129242],{"align":23826},"背景图片",[413,129244,129245],{"align":23826},"url(图片路径)",[367,129247,129248,129251,129254],{},[413,129249,129250],{"align":23826},"background-repeat",[413,129252,129253],{"align":23826},"是否平铺",[413,129255,129256],{"align":23826},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[367,129258,129259,129262,129265],{},[413,129260,129261],{"align":23826},"background-position",[413,129263,129264],{"align":23826},"背景位置",[413,129266,129267],{"align":23826},"length\u002Fposition 分别是x和y坐标",[367,129269,129270,129273,129276],{},[413,129271,129272],{"align":23826},"background-attachment",[413,129274,129275],{"align":23826},"背景附着",[413,129277,129278],{"align":23826},"scroll(背景滚动) \u002Ffixed (背景固定)",[367,129280,129281,129284,129287],{},[413,129282,129283],{"align":23826},"背景简写",[413,129285,129286],{"align":23826},"书写更简单",[413,129288,129289],{"align":23826},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[367,129291,129292,129295,129298],{},[413,129293,129294],{"align":23826},"背景半透明",[413,129296,129297],{"align":23826},"背景颜色半透明",[413,129299,129300],{"align":23826},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129302,129303],{},"颜色渐变：",[1554,129305],{"style":126471,"src":129306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1554,129308],{"style":126471,"src":129309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[195,129311,129313],{"id":129312},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[39,129315,129317],{"className":127362,"code":129316,"language":127364,"meta":44,"style":44},"\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",[46,129318,129319,129334,129353,129372,129391,129410,129429],{"__ignoreMap":44},[49,129320,129321,129323,129325,129327,129329,129332],{"class":51,"line":52},[49,129322,1129],{"class":55},[49,129324,51700],{"class":51389},[49,129326,53575],{"class":2055},[49,129328,60],{"class":55},[49,129330,129331],{"class":328},"\"nav\"",[49,129333,51396],{"class":55},[49,129335,129336,129338,129340,129342,129344,129346,129349,129351],{"class":51,"line":84},[49,129337,52233],{"class":55},[49,129339,56],{"class":51389},[49,129341,61146],{"class":2055},[49,129343,60],{"class":55},[49,129345,61151],{"class":328},[49,129347,129348],{"class":55},">五彩导航1\u003C\u002F",[49,129350,56],{"class":51389},[49,129352,51396],{"class":55},[49,129354,129355,129357,129359,129361,129363,129365,129368,129370],{"class":51,"line":109},[49,129356,52233],{"class":55},[49,129358,56],{"class":51389},[49,129360,61146],{"class":2055},[49,129362,60],{"class":55},[49,129364,61151],{"class":328},[49,129366,129367],{"class":55},">五彩导航2\u003C\u002F",[49,129369,56],{"class":51389},[49,129371,51396],{"class":55},[49,129373,129374,129376,129378,129380,129382,129384,129387,129389],{"class":51,"line":120},[49,129375,52233],{"class":55},[49,129377,56],{"class":51389},[49,129379,61146],{"class":2055},[49,129381,60],{"class":55},[49,129383,61151],{"class":328},[49,129385,129386],{"class":55},">五彩导航3\u003C\u002F",[49,129388,56],{"class":51389},[49,129390,51396],{"class":55},[49,129392,129393,129395,129397,129399,129401,129403,129406,129408],{"class":51,"line":135},[49,129394,52233],{"class":55},[49,129396,56],{"class":51389},[49,129398,61146],{"class":2055},[49,129400,60],{"class":55},[49,129402,61151],{"class":328},[49,129404,129405],{"class":55},">五彩导航4\u003C\u002F",[49,129407,56],{"class":51389},[49,129409,51396],{"class":55},[49,129411,129412,129414,129416,129418,129420,129422,129425,129427],{"class":51,"line":1306},[49,129413,52233],{"class":55},[49,129415,56],{"class":51389},[49,129417,61146],{"class":2055},[49,129419,60],{"class":55},[49,129421,61151],{"class":328},[49,129423,129424],{"class":55},">五彩导航5\u003C\u002F",[49,129426,56],{"class":51389},[49,129428,51396],{"class":55},[49,129430,129431,129433,129435],{"class":51,"line":1312},[49,129432,51874],{"class":55},[49,129434,51700],{"class":51389},[49,129436,51396],{"class":55},[39,129438,129440],{"className":126615,"code":129439,"language":126617,"meta":44,"style":44},".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",[46,129441,129442,129451,129461,129473,129485,129495,129507,129517,129521,129546,129569,129592,129615],{"__ignoreMap":44},[49,129443,129444,129447,129449],{"class":51,"line":52},[49,129445,129446],{"class":2055},".nav",[49,129448,1490],{"class":51389},[49,129450,15662],{"class":55},[49,129452,129453,129455,129457,129459],{"class":51,"line":84},[49,129454,128231],{"class":66},[49,129456,51526],{"class":55},[49,129458,72472],{"class":66},[49,129460,1382],{"class":55},[49,129462,129463,129465,129467,129469,129471],{"class":51,"line":109},[49,129464,70657],{"class":66},[49,129466,51526],{"class":55},[49,129468,1036],{"class":66},[49,129470,51581],{"class":59},[49,129472,1382],{"class":55},[49,129474,129475,129477,129479,129481,129483],{"class":51,"line":120},[49,129476,70877],{"class":66},[49,129478,51526],{"class":55},[49,129480,1075],{"class":66},[49,129482,51581],{"class":59},[49,129484,1382],{"class":55},[49,129486,129487,129489,129491,129493],{"class":51,"line":135},[49,129488,70615],{"class":66},[49,129490,51526],{"class":55},[49,129492,51681],{"class":66},[49,129494,1382],{"class":55},[49,129496,129497,129499,129501,129503,129505],{"class":51,"line":1306},[49,129498,127299],{"class":66},[49,129500,51526],{"class":55},[49,129502,1075],{"class":66},[49,129504,51581],{"class":59},[49,129506,1382],{"class":55},[49,129508,129509,129511,129513,129515],{"class":51,"line":1312},[49,129510,70994],{"class":66},[49,129512,51526],{"class":55},[49,129514,60931],{"class":66},[49,129516,1382],{"class":55},[49,129518,129519],{"class":51,"line":1403},[49,129520,1657],{"class":55},[49,129522,129523,129525,129527,129530,129532,129534,129537,129539,129541,129543],{"class":51,"line":1409},[49,129524,129446],{"class":2055},[49,129526,1490],{"class":51389},[49,129528,129529],{"class":2055},":nth-child",[49,129531,228],{"class":55},[49,129533,441],{"class":66},[49,129535,129536],{"class":55},") { ",[49,129538,129228],{"class":66},[49,129540,51526],{"class":55},[49,129542,128646],{"class":66},[49,129544,129545],{"class":55},"; }\n",[49,129547,129548,129550,129552,129554,129556,129558,129560,129562,129564,129567],{"class":51,"line":1421},[49,129549,129446],{"class":2055},[49,129551,1490],{"class":51389},[49,129553,129529],{"class":2055},[49,129555,228],{"class":55},[49,129557,301],{"class":66},[49,129559,129536],{"class":55},[49,129561,129228],{"class":66},[49,129563,51526],{"class":55},[49,129565,129566],{"class":66},"#ff0000",[49,129568,129545],{"class":55},[49,129570,129571,129573,129575,129577,129579,129581,129583,129585,129587,129590],{"class":51,"line":1704},[49,129572,129446],{"class":2055},[49,129574,1490],{"class":51389},[49,129576,129529],{"class":2055},[49,129578,228],{"class":55},[49,129580,73],{"class":66},[49,129582,129536],{"class":55},[49,129584,129228],{"class":66},[49,129586,51526],{"class":55},[49,129588,129589],{"class":66},"#00a4ff",[49,129591,129545],{"class":55},[49,129593,129594,129596,129598,129600,129602,129604,129606,129608,129610,129613],{"class":51,"line":1709},[49,129595,129446],{"class":2055},[49,129597,1490],{"class":51389},[49,129599,129529],{"class":2055},[49,129601,228],{"class":55},[49,129603,515],{"class":66},[49,129605,129536],{"class":55},[49,129607,129228],{"class":66},[49,129609,51526],{"class":55},[49,129611,129612],{"class":66},"#ff00ff",[49,129614,129545],{"class":55},[49,129616,129617,129619,129621,129623,129625,129627,129629,129631,129633,129636],{"class":51,"line":1715},[49,129618,129446],{"class":2055},[49,129620,1490],{"class":51389},[49,129622,129529],{"class":2055},[49,129624,228],{"class":55},[49,129626,541],{"class":66},[49,129628,129536],{"class":55},[49,129630,129228],{"class":66},[49,129632,51526],{"class":55},[49,129634,129635],{"class":66},"#00ff00",[49,129637,129545],{"class":55},[166,129639,129641],{"id":129640},"_83-css三大特性","8.3 css三大特性",[195,129643,129645],{"id":129644},"_831-层叠性","8.3.1 层叠性",[14,129647,129648],{},"为了解决样式冲突问题",[14,129650,129651],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129653,129654],{},"   ②样式不冲突，不会层叠",[195,129656,129658],{"id":129657},"_832-继承性","8.3.2 继承性",[14,129660,129661],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129663,129664],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[39,129666,129668],{"className":126615,"code":129667,"language":126617,"meta":44,"style":44},"p {\n  color: #333;\n}\n",[46,129669,129670,129676,129686],{"__ignoreMap":44},[49,129671,129672,129674],{"class":51,"line":52},[49,129673,14],{"class":51389},[49,129675,15662],{"class":55},[49,129677,129678,129680,129682,129684],{"class":51,"line":84},[49,129679,70994],{"class":66},[49,129681,51526],{"class":55},[49,129683,62458],{"class":66},[49,129685,1382],{"class":55},[49,129687,129688],{"class":51,"line":109},[49,129689,1657],{"class":55},[1554,129691],{"style":126471,"src":129692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129694,129695],{},"解释：①行高可以跟单位也可以不跟单位",[14,129697,129698],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129700,129701],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129703,129704],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[195,129706,129708],{"id":129707},"_833-优先级","8.3.3 优先级",[178,129710,129711,129714],{},[181,129712,129713],{},"选择器相同，则执行层叠性",[181,129715,129716],{},"选择器不同，则根据选择器权重执行",[361,129718,129719,129729],{},[364,129720,129721],{},[367,129722,129723,129726],{},[370,129724,129725],{"align":23826},"选择器",[370,129727,129728],{"align":23826},"选择器权重",[408,129730,129731,129739,129747,129755,129763,129771],{},[367,129732,129733,129736],{},[413,129734,129735],{"align":23826},"继承 或者*",[413,129737,129738],{"align":23826},"0，0，0，0",[367,129740,129741,129744],{},[413,129742,129743],{"align":23826},"标签选择器",[413,129745,129746],{"align":23826},"0，0，0，1",[367,129748,129749,129752],{},[413,129750,129751],{"align":23826},"类选择器，伪类选择器",[413,129753,129754],{"align":23826},"0，0，1，0",[367,129756,129757,129760],{},[413,129758,129759],{"align":23826},"ID选择器",[413,129761,129762],{"align":23826},"0，1，0，0",[367,129764,129765,129768],{},[413,129766,129767],{"align":23826},"行内样式",[413,129769,129770],{"align":23826},"1，0，0，0",[367,129772,129773,129776],{},[413,129774,129775],{"align":23826},"！important",[413,129777,129778],{"align":23826},"无穷大",[14,129780,129781],{},"! important用法：",[39,129783,129785],{"className":126615,"code":129784,"language":126617,"meta":44,"style":44},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[46,129786,129787,129792,129798,129811,129815,129820,129826,129836],{"__ignoreMap":44},[49,129788,129789],{"class":51,"line":52},[49,129790,129791],{"class":283},"\u002F* !important 拥有最高优先级 *\u002F\n",[49,129793,129794,129796],{"class":51,"line":84},[49,129795,51700],{"class":51389},[49,129797,15662],{"class":55},[49,129799,129800,129802,129804,129806,129809],{"class":51,"line":109},[49,129801,70994],{"class":66},[49,129803,51526],{"class":55},[49,129805,51734],{"class":66},[49,129807,129808],{"class":59}," !important",[49,129810,1382],{"class":55},[49,129812,129813],{"class":51,"line":120},[49,129814,1657],{"class":55},[49,129816,129817],{"class":51,"line":135},[49,129818,129819],{"class":283},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[49,129821,129822,129824],{"class":51,"line":1306},[49,129823,51700],{"class":51389},[49,129825,15662],{"class":55},[49,129827,129828,129830,129832,129834],{"class":51,"line":1312},[49,129829,70994],{"class":66},[49,129831,51526],{"class":55},[49,129833,57510],{"class":66},[49,129835,1382],{"class":55},[49,129837,129838],{"class":51,"line":1403},[49,129839,1657],{"class":55},[14,129841,129842],{},"优先级注意点：",[14,129844,129845],{},"①权重是有4组数字组成,但是不会有进位",[14,129847,129848],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129850,129851],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129853,129854],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129856,129857],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129859,129860],{},"⑥复合选择器",[361,129862,129863,129873],{},[364,129864,129865],{},[367,129866,129867,129870],{},[370,129868,129869],{"align":23826},"div ul li",[370,129871,129872],{"align":23826},"0,0,0,3",[408,129874,129875,129883,129891],{},[367,129876,129877,129880],{},[413,129878,129879],{"align":23826},".nav ul li",[413,129881,129882],{"align":23826},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[367,129884,129885,129888],{},[413,129886,129887],{"align":23826},"a:hover",[413,129889,129890],{"align":23826},"0,0,1,1",[367,129892,129893,129896],{},[413,129894,129895],{"align":23826},".nav a",[413,129897,129890],{"align":23826},[143,129899,129900],{},"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":44,"searchDepth":84,"depth":84,"links":129902},[129903,129911,129922],{"id":128011,"depth":84,"text":128012,"children":129904},[129905,129906,129907,129908,129909,129910],{"id":128024,"depth":109,"text":128025},{"id":128096,"depth":109,"text":128097},{"id":128168,"depth":109,"text":128169},{"id":128199,"depth":109,"text":128200},{"id":128206,"depth":109,"text":128207},{"id":128359,"depth":109,"text":128360},{"id":128667,"depth":84,"text":128668,"children":129912},[129913,129914,129915,129916,129917,129918,129919,129920,129921],{"id":128674,"depth":109,"text":128675},{"id":128684,"depth":109,"text":128685},{"id":128780,"depth":109,"text":128781},{"id":128853,"depth":109,"text":128854},{"id":129008,"depth":109,"text":129009},{"id":129096,"depth":109,"text":129097},{"id":129148,"depth":109,"text":129149},{"id":129207,"depth":109,"text":129208},{"id":129312,"depth":109,"text":129313},{"id":129640,"depth":84,"text":129641,"children":129923},[129924,129925,129926],{"id":129644,"depth":109,"text":129645},{"id":129657,"depth":109,"text":129658},{"id":129707,"depth":109,"text":129708},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128003,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129933,"title":129934,"body":129935,"description":148,"extension":149,"meta":131525,"navigation":151,"path":131526,"seo":131527,"stem":131528,"__hash__":131529},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129936,"toc":131504},[129937,129940,129944,129947,129950,129953,129956,129959,129962,129965,129969,129977,130014,130050,130053,130067,130072,130106,130109,130202,130207,130210,130240,130243,130248,130256,130260,130267,130313,130357,130362,130365,130368,130371,130374,130377,130380,130382,130385,130389,130394,130438,130443,130446,130449,130486,130491,130494,130497,130500,130503,130535,130538,130541,130544,130576,130579,130582,130585,130589,130592,130624,130627,130631,130651,130654,130662,130665,130669,130674,130677,130709,130714,130717,130755,130759,130764,130767,130770,130801,130804,130821,130826,130878,130938,130943,130997,131035,131039,131043,131046,131050,131058,131061,131063,131074,131079,131127,131161,131164,131167,131170,131173,131217,131220,131223,131226,131229,131232,131235,131279,131282,131285,131288,131291,131294,131297,131303,131306,131350,131353,131356,131359,131362,131365,131409,131412,131414,131417,131421,131425,131463,131467,131470,131473,131477,131485,131489,131492,131495,131498,131501],[10,129938,129934],{"id":129939},"_9-css盒模型浮动与切图",[166,129941,129943],{"id":129942},"_91-盒子模型","9.1 盒子模型",[14,129945,129946],{},"利用盒子来设计网页",[14,129948,129949],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129951,129952],{},"网页布局设置：",[14,129954,129955],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129957,129958],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129960,129961],{},"③往盒子里装内容",[1554,129963],{"style":126471,"src":129964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[195,129966,129968],{"id":129967},"_911-边框border","9.1.1 边框（border）",[178,129970,129971,129974],{},[181,129972,129973],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[181,129975,129976],{},"语法",[39,129978,129980],{"className":126615,"code":129979,"language":126617,"meta":44,"style":44},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[46,129981,129982,129987,129993,130010],{"__ignoreMap":44},[49,129983,129984],{"class":51,"line":52},[49,129985,129986],{"class":283},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[49,129988,129989,129991],{"class":51,"line":84},[49,129990,51700],{"class":51389},[49,129992,15662],{"class":55},[49,129994,129995,129997,129999,130001,130003,130005,130008],{"class":51,"line":109},[49,129996,70985],{"class":66},[49,129998,51526],{"class":55},[49,130000,441],{"class":66},[49,130002,51581],{"class":59},[49,130004,51610],{"class":66},[49,130006,130007],{"class":66}," #ccc",[49,130009,1382],{"class":55},[49,130011,130012],{"class":51,"line":120},[49,130013,1657],{"class":55},[361,130015,130016,130024],{},[364,130017,130018],{},[367,130019,130020,130022],{},[370,130021,129217],{"align":23826},[370,130023,102759],{"align":23826},[408,130025,130026,130034,130042],{},[367,130027,130028,130031],{},[413,130029,130030],{"align":23826},"border-width",[413,130032,130033],{"align":23826},"定义边框粗细，单位是px",[367,130035,130036,130039],{},[413,130037,130038],{"align":23826},"border-style",[413,130040,130041],{"align":23826},"边框的样式",[367,130043,130044,130047],{},[413,130045,130046],{"align":23826},"border-color",[413,130048,130049],{"align":23826},"边框的颜色",[14,130051,130052],{},"边框样式 border-style 可以设置如下值：",[1226,130054,130055,130058,130061,130064],{},[181,130056,130057],{},"none：没有边框即忽略所有边框的宽度（默认值）",[181,130059,130060],{},"solid：边框为单实线(最为常用的)",[181,130062,130063],{},"dashed：边框为虚线",[181,130065,130066],{},"dotted：边框为点线",[178,130068,130069],{"start":109},[181,130070,130071],{},"边框的合写分写",[39,130073,130074],{"className":126615,"code":129979,"language":126617,"meta":44,"style":44},[46,130075,130076,130080,130086,130102],{"__ignoreMap":44},[49,130077,130078],{"class":51,"line":52},[49,130079,129986],{"class":283},[49,130081,130082,130084],{"class":51,"line":84},[49,130083,51700],{"class":51389},[49,130085,15662],{"class":55},[49,130087,130088,130090,130092,130094,130096,130098,130100],{"class":51,"line":109},[49,130089,70985],{"class":66},[49,130091,51526],{"class":55},[49,130093,441],{"class":66},[49,130095,51581],{"class":59},[49,130097,51610],{"class":66},[49,130099,130007],{"class":66},[49,130101,1382],{"class":55},[49,130103,130104],{"class":51,"line":120},[49,130105,1657],{"class":55},[14,130107,130108],{},"边框分开写法：",[39,130110,130112],{"className":126615,"code":130111,"language":126617,"meta":44,"style":44},"\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",[46,130113,130114,130119,130125,130143,130161,130180,130198],{"__ignoreMap":44},[49,130115,130116],{"class":51,"line":52},[49,130117,130118],{"class":283},"\u002F* 边框分开写法 *\u002F\n",[49,130120,130121,130123],{"class":51,"line":84},[49,130122,51700],{"class":51389},[49,130124,15662],{"class":55},[49,130126,130127,130130,130132,130134,130136,130138,130141],{"class":51,"line":109},[49,130128,130129],{"class":66},"  border-top",[49,130131,51526],{"class":55},[49,130133,441],{"class":66},[49,130135,51581],{"class":59},[49,130137,51610],{"class":66},[49,130139,130140],{"class":66}," #000",[49,130142,1382],{"class":55},[49,130144,130145,130148,130150,130152,130154,130156,130159],{"class":51,"line":120},[49,130146,130147],{"class":66},"  border-right",[49,130149,51526],{"class":55},[49,130151,301],{"class":66},[49,130153,51581],{"class":59},[49,130155,62330],{"class":66},[49,130157,130158],{"class":66}," #333",[49,130160,1382],{"class":55},[49,130162,130163,130166,130168,130170,130172,130175,130178],{"class":51,"line":135},[49,130164,130165],{"class":66},"  border-bottom",[49,130167,51526],{"class":55},[49,130169,73],{"class":66},[49,130171,51581],{"class":59},[49,130173,130174],{"class":66}," dotted",[49,130176,130177],{"class":66}," #666",[49,130179,1382],{"class":55},[49,130181,130182,130185,130187,130189,130191,130193,130196],{"class":51,"line":1306},[49,130183,130184],{"class":66},"  border-left",[49,130186,51526],{"class":55},[49,130188,441],{"class":66},[49,130190,51581],{"class":59},[49,130192,51610],{"class":66},[49,130194,130195],{"class":66}," #999",[49,130197,1382],{"class":55},[49,130199,130200],{"class":51,"line":1312},[49,130201,1657],{"class":55},[178,130203,130204],{"start":120},[181,130205,130206],{},"表格的细线边框",[14,130208,130209],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[39,130211,130213],{"className":126615,"code":130212,"language":126617,"meta":44,"style":44},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[46,130214,130215,130220,130226,130236],{"__ignoreMap":44},[49,130216,130217],{"class":51,"line":52},[49,130218,130219],{"class":283},"\u002F* 表格细线边框合并 *\u002F\n",[49,130221,130222,130224],{"class":51,"line":84},[49,130223,361],{"class":51389},[49,130225,15662],{"class":55},[49,130227,130228,130230,130232,130234],{"class":51,"line":109},[49,130229,70667],{"class":66},[49,130231,51526],{"class":55},[49,130233,65124],{"class":66},[49,130235,1382],{"class":55},[49,130237,130238],{"class":51,"line":120},[49,130239,1657],{"class":55},[14,130241,130242],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[178,130244,130245],{"start":135},[181,130246,130247],{},"解决边框额外增加盒子的实际大小的方法：",[1226,130249,130250,130253],{},[181,130251,130252],{},"测量盒子大小的时候,不量边框",[181,130254,130255],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[195,130257,130259],{"id":130258},"_912-内边距","9.1.2 内边距",[178,130261,130262,130265],{},[181,130263,130264],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[181,130266,129976],{},[361,130268,130269,130279],{},[364,130270,130271],{},[367,130272,130273,130276],{},[370,130274,130275],{"align":23826},"值的个数",[370,130277,130278],{"align":23826},"表达意思",[408,130280,130281,130289,130297,130305],{},[367,130282,130283,130286],{},[413,130284,130285],{"align":23826},"padding: 5px;",[413,130287,130288],{"align":23826},"1个值，代表上下左右都有5个元素",[367,130290,130291,130294],{},[413,130292,130293],{"align":23826},"padding: 5px 10px;",[413,130295,130296],{"align":23826},"2个值，代表上下内边距为5像素，左右内边距为10像素",[367,130298,130299,130302],{},[413,130300,130301],{"align":23826},"padding: 5px 10px 20px;",[413,130303,130304],{"align":23826},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[367,130306,130307,130310],{},[413,130308,130309],{"align":23826},"padding: 5px 10px 20px 30px;",[413,130311,130312],{"align":23826},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[361,130314,130315,130323],{},[364,130316,130317],{},[367,130318,130319,130321],{},[370,130320,129217],{"align":23826},[370,130322,102759],{"align":23826},[408,130324,130325,130333,130341,130349],{},[367,130326,130327,130330],{},[413,130328,130329],{"align":23826},"padding-left",[413,130331,130332],{"align":23826},"左内边距",[367,130334,130335,130338],{},[413,130336,130337],{"align":23826},"padding-right",[413,130339,130340],{"align":23826},"右内边距",[367,130342,130343,130346],{},[413,130344,130345],{"align":23826},"padding-top",[413,130347,130348],{"align":23826},"上内边距",[367,130350,130351,130354],{},[413,130352,130353],{"align":23826},"padding-bottom",[413,130355,130356],{"align":23826},"下内边距",[178,130358,130359],{"start":109},[181,130360,130361],{},"内边距会影响盒子的实际大小",[14,130363,130364],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130366,130367],{},"①内容和边框有了距离，添加了内边距",[14,130369,130370],{},"②padding影响了盒子实际大小",[14,130372,130373],{},"内边距对盒子大小的影响：",[14,130375,130376],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130378,130379],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130381,95283],{},[14,130383,130384],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[195,130386,130388],{"id":130387},"_913-外边距","9.1.3 外边距",[178,130390,130391],{},[181,130392,130393],{},"控制盒子与盒子之间的距离",[361,130395,130396,130404],{},[364,130397,130398],{},[367,130399,130400,130402],{},[370,130401,129217],{"align":23826},[370,130403,102759],{"align":23826},[408,130405,130406,130414,130422,130430],{},[367,130407,130408,130411],{},[413,130409,130410],{"align":23826},"margin-left",[413,130412,130413],{"align":23826},"左外边距",[367,130415,130416,130419],{},[413,130417,130418],{"align":23826},"margin-right",[413,130420,130421],{"align":23826},"右外边距",[367,130423,130424,130427],{},[413,130425,130426],{"align":23826},"margin-top",[413,130428,130429],{"align":23826},"上外边距",[367,130431,130432,130435],{},[413,130433,130434],{"align":23826},"margin-bottom",[413,130436,130437],{"align":23826},"下外边距",[178,130439,130440],{"start":84},[181,130441,130442],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130444,130445],{},"①盒子必须指定了宽度（width）",[14,130447,130448],{},"②盒子左右的外边距都设置为 auto",[39,130450,130452],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,130453,130454,130459,130466,130482],{"__ignoreMap":44},[49,130455,130456],{"class":51,"line":52},[49,130457,130458],{"class":283},"\u002F* margin 复合写法（同上） *\u002F\n",[49,130460,130461,130464],{"class":51,"line":84},[49,130462,130463],{"class":2055},".box",[49,130465,15662],{"class":55},[49,130467,130468,130470,130472,130474,130476,130479],{"class":51,"line":109},[49,130469,70559],{"class":66},[49,130471,51526],{"class":55},[49,130473,415],{"class":66},[49,130475,51645],{"class":66},[49,130477,130478],{"class":55},";  ",[49,130480,130481],{"class":283},"\u002F* 块级盒子水平居中 *\u002F\n",[49,130483,130484],{"class":51,"line":120},[49,130485,1657],{"class":55},[178,130487,130488],{"start":109},[181,130489,130490],{},"外边距塌陷问题",[14,130492,130493],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1554,130495],{"style":126471,"src":130496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130498,130499],{},"解决方案：",[14,130501,130502],{},"①可以为父亲元素定义上边距",[39,130504,130505],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,130506,130507,130511,130517,130531],{"__ignoreMap":44},[49,130508,130509],{"class":51,"line":52},[49,130510,130458],{"class":283},[49,130512,130513,130515],{"class":51,"line":84},[49,130514,130463],{"class":2055},[49,130516,15662],{"class":55},[49,130518,130519,130521,130523,130525,130527,130529],{"class":51,"line":109},[49,130520,70559],{"class":66},[49,130522,51526],{"class":55},[49,130524,415],{"class":66},[49,130526,51645],{"class":66},[49,130528,130478],{"class":55},[49,130530,130481],{"class":283},[49,130532,130533],{"class":51,"line":120},[49,130534,1657],{"class":55},[14,130536,130537],{},"②可以为父亲元素定义上内边距",[14,130539,130540],{},"③可以为父亲元素添加overflow:hidden",[1554,130542],{"style":126471,"src":130543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[39,130545,130546],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,130547,130548,130552,130558,130572],{"__ignoreMap":44},[49,130549,130550],{"class":51,"line":52},[49,130551,130458],{"class":283},[49,130553,130554,130556],{"class":51,"line":84},[49,130555,130463],{"class":2055},[49,130557,15662],{"class":55},[49,130559,130560,130562,130564,130566,130568,130570],{"class":51,"line":109},[49,130561,70559],{"class":66},[49,130563,51526],{"class":55},[49,130565,415],{"class":66},[49,130567,51645],{"class":66},[49,130569,130478],{"class":55},[49,130571,130481],{"class":283},[49,130573,130574],{"class":51,"line":120},[49,130575,1657],{"class":55},[1554,130577],{"style":126471,"src":130578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130580,130581],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130583,130584],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[195,130586,130588],{"id":130587},"_914-清除内外边距","9.1.4 清除内外边距",[14,130590,130591],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[39,130593,130594],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,130595,130596,130600,130606,130620],{"__ignoreMap":44},[49,130597,130598],{"class":51,"line":52},[49,130599,130458],{"class":283},[49,130601,130602,130604],{"class":51,"line":84},[49,130603,130463],{"class":2055},[49,130605,15662],{"class":55},[49,130607,130608,130610,130612,130614,130616,130618],{"class":51,"line":109},[49,130609,70559],{"class":66},[49,130611,51526],{"class":55},[49,130613,415],{"class":66},[49,130615,51645],{"class":66},[49,130617,130478],{"class":55},[49,130619,130481],{"class":283},[49,130621,130622],{"class":51,"line":120},[49,130623,1657],{"class":55},[14,130625,130626],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[195,130628,130630],{"id":130629},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1226,130632,130633,130636,130639,130642,130645,130648],{},[181,130634,130635],{},"文件→打开 ：可以打开我们要测量的图片",[181,130637,130638],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[181,130640,130641],{},"右击标尺，把里面的单位改为像素",[181,130643,130644],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[181,130646,130647],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[181,130649,130650],{},"用选区拖动 可以测量大小",[1554,130652],{"style":126471,"src":130653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1226,130655,130656,130659],{},[181,130657,130658],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[181,130660,130661],{},"吸管取色工具",[1554,130663],{"style":126471,"src":130664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[195,130666,130668],{"id":130667},"_916-案例","9.1.6 案例",[178,130670,130671],{},[181,130672,130673],{},"小米商品",[1554,130675],{"style":126471,"src":130676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[39,130678,130679],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,130680,130681,130685,130691,130705],{"__ignoreMap":44},[49,130682,130683],{"class":51,"line":52},[49,130684,130458],{"class":283},[49,130686,130687,130689],{"class":51,"line":84},[49,130688,130463],{"class":2055},[49,130690,15662],{"class":55},[49,130692,130693,130695,130697,130699,130701,130703],{"class":51,"line":109},[49,130694,70559],{"class":66},[49,130696,51526],{"class":55},[49,130698,415],{"class":66},[49,130700,51645],{"class":66},[49,130702,130478],{"class":55},[49,130704,130481],{"class":283},[49,130706,130707],{"class":51,"line":120},[49,130708,1657],{"class":55},[178,130710,130711],{"start":84},[181,130712,130713],{},"快报模块",[1554,130715],{"style":126471,"src":130716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[39,130718,130720],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[46,130721,130722,130727,130742,130747],{"__ignoreMap":44},[49,130723,130724],{"class":51,"line":52},[49,130725,130726],{"class":283},"\u003C!-- HTML 代码示例 -->\n",[49,130728,130729,130731,130733,130735,130737,130740],{"class":51,"line":84},[49,130730,1129],{"class":55},[49,130732,51700],{"class":51389},[49,130734,53575],{"class":2055},[49,130736,60],{"class":55},[49,130738,130739],{"class":328},"\"example\"",[49,130741,51396],{"class":55},[49,130743,130744],{"class":51,"line":109},[49,130745,130746],{"class":55},"  示例内容\n",[49,130748,130749,130751,130753],{"class":51,"line":120},[49,130750,51874],{"class":55},[49,130752,51700],{"class":51389},[49,130754,51396],{"class":55},[195,130756,130758],{"id":130757},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[178,130760,130761],{},[181,130762,130763],{},"圆角边框",[14,130765,130766],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1554,130768],{"style":126471,"src":130769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[39,130771,130773],{"className":126615,"code":130772,"language":126617,"meta":44,"style":44},"div {\n  border: 1px solid #ccc;\n}\n",[46,130774,130775,130781,130797],{"__ignoreMap":44},[49,130776,130777,130779],{"class":51,"line":52},[49,130778,51700],{"class":51389},[49,130780,15662],{"class":55},[49,130782,130783,130785,130787,130789,130791,130793,130795],{"class":51,"line":84},[49,130784,70985],{"class":66},[49,130786,51526],{"class":55},[49,130788,441],{"class":66},[49,130790,51581],{"class":59},[49,130792,51610],{"class":66},[49,130794,130007],{"class":66},[49,130796,1382],{"class":55},[49,130798,130799],{"class":51,"line":109},[49,130800,1657],{"class":55},[14,130802,130803],{},"解释:",[1226,130805,130806,130809,130812,130815,130818],{},[181,130807,130808],{},"参数值可以为数值或百分比的形式",[181,130810,130811],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[181,130813,130814],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[181,130816,130817],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[181,130819,130820],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[178,130822,130823],{"start":84},[181,130824,130825],{},"盒子阴影",[39,130827,130829],{"className":126615,"code":130828,"language":126617,"meta":44,"style":44},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[46,130830,130831,130837,130874],{"__ignoreMap":44},[49,130832,130833,130835],{"class":51,"line":52},[49,130834,51700],{"class":51389},[49,130836,15662],{"class":55},[49,130838,130839,130842,130844,130846,130848,130850,130852,130854,130856,130858,130860,130862,130864,130866,130868,130870,130872],{"class":51,"line":84},[49,130840,130841],{"class":66},"  box-shadow",[49,130843,51526],{"class":55},[49,130845,415],{"class":66},[49,130847,14845],{"class":66},[49,130849,51581],{"class":59},[49,130851,2130],{"class":66},[49,130853,51581],{"class":59},[49,130855,78856],{"class":66},[49,130857,228],{"class":55},[49,130859,415],{"class":66},[49,130861,12525],{"class":55},[49,130863,415],{"class":66},[49,130865,12525],{"class":55},[49,130867,415],{"class":66},[49,130869,12525],{"class":55},[49,130871,86299],{"class":66},[49,130873,2811],{"class":55},[49,130875,130876],{"class":51,"line":109},[49,130877,1657],{"class":55},[361,130879,130880,130888],{},[364,130881,130882],{},[367,130883,130884,130886],{},[370,130885,376],{"align":23826},[370,130887,27580],{"align":23826},[408,130889,130890,130898,130906,130914,130922,130930],{},[367,130891,130892,130895],{},[413,130893,130894],{"align":23826},"h-shadow",[413,130896,130897],{"align":23826},"必需,水平阴影的位置,允许负值",[367,130899,130900,130903],{},[413,130901,130902],{"align":23826},"v-shadow",[413,130904,130905],{"align":23826},"必需,垂直阴影的位置,允许负值",[367,130907,130908,130911],{},[413,130909,130910],{"align":23826},"blur",[413,130912,130913],{"align":23826},"可选,模糊距离,就是影子的虚实",[367,130915,130916,130919],{},[413,130917,130918],{"align":23826},"spread",[413,130920,130921],{"align":23826},"可选,阴影尺寸",[367,130923,130924,130927],{},[413,130925,130926],{"align":23826},"color",[413,130928,130929],{"align":23826},"可选,阴影的颜色",[367,130931,130932,130935],{},[413,130933,130934],{"align":23826},"inset",[413,130936,130937],{"align":23826},"可选,将外部阴影(outset)改为内部阴影",[178,130939,130940],{"start":109},[181,130941,130942],{},"文字阴影",[39,130944,130946],{"className":126615,"code":130945,"language":126617,"meta":44,"style":44},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[46,130947,130948,130954,130993],{"__ignoreMap":44},[49,130949,130950,130952],{"class":51,"line":52},[49,130951,14],{"class":51389},[49,130953,15662],{"class":55},[49,130955,130956,130959,130961,130963,130965,130967,130969,130971,130973,130975,130977,130979,130981,130983,130985,130987,130989,130991],{"class":51,"line":84},[49,130957,130958],{"class":66},"  text-shadow",[49,130960,51526],{"class":55},[49,130962,441],{"class":66},[49,130964,51581],{"class":59},[49,130966,25209],{"class":66},[49,130968,51581],{"class":59},[49,130970,14845],{"class":66},[49,130972,51581],{"class":59},[49,130974,78856],{"class":66},[49,130976,228],{"class":55},[49,130978,415],{"class":66},[49,130980,12525],{"class":55},[49,130982,415],{"class":66},[49,130984,12525],{"class":55},[49,130986,415],{"class":66},[49,130988,12525],{"class":55},[49,130990,100584],{"class":66},[49,130992,2811],{"class":55},[49,130994,130995],{"class":51,"line":109},[49,130996,1657],{"class":55},[361,130998,130999,131007],{},[364,131000,131001],{},[367,131002,131003,131005],{},[370,131004,376],{"align":23826},[370,131006,27580],{"align":23826},[408,131008,131009,131015,131022,131029],{},[367,131010,131011,131013],{},[413,131012,130894],{"align":23826},[413,131014,130897],{"align":23826},[367,131016,131017,131019],{},[413,131018,130902],{"align":23826},[413,131020,131021],{"align":23826},"必需,垂直阴影位置,允许负值",[367,131023,131024,131026],{},[413,131025,130910],{"align":23826},[413,131027,131028],{"align":23826},"可选,模糊的距离",[367,131030,131031,131033],{},[413,131032,130926],{"align":23826},[413,131034,130929],{"align":23826},[166,131036,131038],{"id":131037},"_92-浮动","9.2 浮动",[195,131040,131042],{"id":131041},"_921-浮动介绍","9.2.1 浮动介绍",[14,131044,131045],{},"在16.2中详细介绍",[195,131047,131049],{"id":131048},"_922-清除浮动","9.2.2 清除浮动",[178,131051,131052,131055],{},[181,131053,131054],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[181,131056,131057],{},"清除浮动的本质",[14,131059,131060],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131062,9115],{},[1226,131064,131065,131068,131071],{},[181,131066,131067],{},"如果父盒子本身有高度，则不需要清除浮动",[181,131069,131070],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[181,131072,131073],{},"父级有了高度，就不会影响下面的标准流了",[178,131075,131076],{"start":109},[181,131077,131078],{},"清除浮动样式",[39,131080,131082],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[46,131083,131084,131091,131102,131106,131113,131123],{"__ignoreMap":44},[49,131085,131086,131089],{"class":51,"line":52},[49,131087,131088],{"class":2055},".left",[49,131090,15662],{"class":55},[49,131092,131093,131096,131098,131100],{"class":51,"line":84},[49,131094,131095],{"class":66},"  float",[49,131097,51526],{"class":55},[49,131099,23826],{"class":66},[49,131101,1382],{"class":55},[49,131103,131104],{"class":51,"line":109},[49,131105,1657],{"class":55},[49,131107,131108,131111],{"class":51,"line":120},[49,131109,131110],{"class":2055},".right",[49,131112,15662],{"class":55},[49,131114,131115,131117,131119,131121],{"class":51,"line":135},[49,131116,131095],{"class":66},[49,131118,51526],{"class":55},[49,131120,72611],{"class":66},[49,131122,1382],{"class":55},[49,131124,131125],{"class":51,"line":1306},[49,131126,1657],{"class":55},[361,131128,131129,131137],{},[364,131130,131131],{},[367,131132,131133,131135],{},[370,131134,127079],{"align":23826},[370,131136,27580],{"align":23826},[408,131138,131139,131146,131153],{},[367,131140,131141,131143],{},[413,131142,23826],{"align":23826},[413,131144,131145],{"align":23826},"不允许左侧有浮动元素（清除左侧浮动的影响）",[367,131147,131148,131150],{},[413,131149,72611],{"align":23826},[413,131151,131152],{"align":23826},"不允许右侧有浮动元素（清除右侧浮动的影响）",[367,131154,131155,131158],{},[413,131156,131157],{"align":23826},"both",[413,131159,131160],{"align":23826},"同时清除左右侧浮动的影响",[14,131162,131163],{},"法一",[14,131165,131166],{},"额外标签法也称为隔墙法",[14,131168,131169],{},"使用方式：",[14,131171,131172],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[39,131174,131175],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,131176,131177,131183,131193,131197,131203,131213],{"__ignoreMap":44},[49,131178,131179,131181],{"class":51,"line":52},[49,131180,131088],{"class":2055},[49,131182,15662],{"class":55},[49,131184,131185,131187,131189,131191],{"class":51,"line":84},[49,131186,131095],{"class":66},[49,131188,51526],{"class":55},[49,131190,23826],{"class":66},[49,131192,1382],{"class":55},[49,131194,131195],{"class":51,"line":109},[49,131196,1657],{"class":55},[49,131198,131199,131201],{"class":51,"line":120},[49,131200,131110],{"class":2055},[49,131202,15662],{"class":55},[49,131204,131205,131207,131209,131211],{"class":51,"line":135},[49,131206,131095],{"class":66},[49,131208,51526],{"class":55},[49,131210,72611],{"class":66},[49,131212,1382],{"class":55},[49,131214,131215],{"class":51,"line":1306},[49,131216,1657],{"class":55},[14,131218,131219],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131221,131222],{},"优点： 通俗易懂，书写方便",[14,131224,131225],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131227,131228],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131230,131231],{},"法二",[14,131233,131234],{},"父级添加overflow属性",[39,131236,131237],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,131238,131239,131245,131255,131259,131265,131275],{"__ignoreMap":44},[49,131240,131241,131243],{"class":51,"line":52},[49,131242,131088],{"class":2055},[49,131244,15662],{"class":55},[49,131246,131247,131249,131251,131253],{"class":51,"line":84},[49,131248,131095],{"class":66},[49,131250,51526],{"class":55},[49,131252,23826],{"class":66},[49,131254,1382],{"class":55},[49,131256,131257],{"class":51,"line":109},[49,131258,1657],{"class":55},[49,131260,131261,131263],{"class":51,"line":120},[49,131262,131110],{"class":2055},[49,131264,15662],{"class":55},[49,131266,131267,131269,131271,131273],{"class":51,"line":135},[49,131268,131095],{"class":66},[49,131270,51526],{"class":55},[49,131272,72611],{"class":66},[49,131274,1382],{"class":55},[49,131276,131277],{"class":51,"line":1306},[49,131278,1657],{"class":55},[14,131280,131281],{},"overflow: hidden;",[14,131283,131284],{},"优点：代码简洁",[14,131286,131287],{},"缺点：无法显示溢出的部分",[14,131289,131290],{},"注意：是给父元素添加代码",[14,131292,131293],{},"法三",[14,131295,131296],{},"父级添加after伪元素",[14,131298,131299,131302],{},[131300,131301],"after",{}," 方式是额外标签法的升级版",[14,131304,131305],{},"使用的时候复制就可以",[39,131307,131308],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,131309,131310,131316,131326,131330,131336,131346],{"__ignoreMap":44},[49,131311,131312,131314],{"class":51,"line":52},[49,131313,131088],{"class":2055},[49,131315,15662],{"class":55},[49,131317,131318,131320,131322,131324],{"class":51,"line":84},[49,131319,131095],{"class":66},[49,131321,51526],{"class":55},[49,131323,23826],{"class":66},[49,131325,1382],{"class":55},[49,131327,131328],{"class":51,"line":109},[49,131329,1657],{"class":55},[49,131331,131332,131334],{"class":51,"line":120},[49,131333,131110],{"class":2055},[49,131335,15662],{"class":55},[49,131337,131338,131340,131342,131344],{"class":51,"line":135},[49,131339,131095],{"class":66},[49,131341,51526],{"class":55},[49,131343,72611],{"class":66},[49,131345,1382],{"class":55},[49,131347,131348],{"class":51,"line":1306},[49,131349,1657],{"class":55},[14,131351,131352],{},"优点：没有增加标签，结构更简单",[14,131354,131355],{},"缺点：照顾低版本浏览器",[14,131357,131358],{},"代表网站： 百度、淘宝网、网易等",[14,131360,131361],{},"法四",[14,131363,131364],{},"父级添加双伪元素",[39,131366,131367],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,131368,131369,131375,131385,131389,131395,131405],{"__ignoreMap":44},[49,131370,131371,131373],{"class":51,"line":52},[49,131372,131088],{"class":2055},[49,131374,15662],{"class":55},[49,131376,131377,131379,131381,131383],{"class":51,"line":84},[49,131378,131095],{"class":66},[49,131380,51526],{"class":55},[49,131382,23826],{"class":66},[49,131384,1382],{"class":55},[49,131386,131387],{"class":51,"line":109},[49,131388,1657],{"class":55},[49,131390,131391,131393],{"class":51,"line":120},[49,131392,131110],{"class":2055},[49,131394,15662],{"class":55},[49,131396,131397,131399,131401,131403],{"class":51,"line":135},[49,131398,131095],{"class":66},[49,131400,51526],{"class":55},[49,131402,72611],{"class":66},[49,131404,1382],{"class":55},[49,131406,131407],{"class":51,"line":1306},[49,131408,1657],{"class":55},[14,131410,131411],{},"优点：代码更简洁",[14,131413,131355],{},[14,131415,131416],{},"代表网站：小米、腾讯等",[166,131418,131420],{"id":131419},"_93-ps切图","9.3 PS切图",[195,131422,131424],{"id":131423},"_931-常见图片格式","9.3.1 常见图片格式",[361,131426,131427,131437],{},[364,131428,131429],{},[367,131430,131431,131434],{},[370,131432,131433],{"align":23826},"jpg图像格式",[370,131435,131436],{"align":23826},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[408,131438,131439,131447,131455],{},[367,131440,131441,131444],{},[413,131442,131443],{"align":23826},"gif图像格式",[413,131445,131446],{"align":23826},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[367,131448,131449,131452],{},[413,131450,131451],{"align":23826},"png图像格式",[413,131453,131454],{"align":23826},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[367,131456,131457,131460],{},[413,131458,131459],{"align":23826},"PSD图像格式",[413,131461,131462],{"align":23826},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[195,131464,131466],{"id":131465},"_932-图层切图","9.3.2 图层切图",[14,131468,131469],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131471,131472],{},"按住shift选中两个图层->图层菜单->合并图层",[195,131474,131476],{"id":131475},"_933-切片切图","9.3.3 切片切图",[1226,131478,131479,131482],{},[181,131480,131481],{},"利用切片工具手动划出",[181,131483,131484],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[195,131486,131488],{"id":131487},"_934-切图步骤","9.3.4 切图步骤",[14,131490,131491],{},"用切片工具选中：",[1554,131493],{"style":126471,"src":131494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131496,131497],{},"文件 -> 导出",[1554,131499],{"style":126471,"src":131500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[143,131502,131503],{},"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":44,"searchDepth":84,"depth":84,"links":131505},[131506,131515,131519],{"id":129942,"depth":84,"text":129943,"children":131507},[131508,131509,131510,131511,131512,131513,131514],{"id":129967,"depth":109,"text":129968},{"id":130258,"depth":109,"text":130259},{"id":130387,"depth":109,"text":130388},{"id":130587,"depth":109,"text":130588},{"id":130629,"depth":109,"text":130630},{"id":130667,"depth":109,"text":130668},{"id":130757,"depth":109,"text":130758},{"id":131037,"depth":84,"text":131038,"children":131516},[131517,131518],{"id":131041,"depth":109,"text":131042},{"id":131048,"depth":109,"text":131049},{"id":131419,"depth":84,"text":131420,"children":131520},[131521,131522,131523,131524],{"id":131423,"depth":109,"text":131424},{"id":131465,"depth":109,"text":131466},{"id":131475,"depth":109,"text":131476},{"id":131487,"depth":109,"text":131488},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129934,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131531,"title":131532,"body":131533,"description":148,"extension":149,"meta":132174,"navigation":151,"path":132175,"seo":132176,"stem":132177,"__hash__":132178},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131534,"toc":132162},[131535,131538,131542,131568,131602,131606,131610,131613,131655,131662,131672,131680,131682,131685,131688,131691,131698,131712,131716,131719,131748,131752,131755,131769,131773,131776,131804,131808,131811,131837,131841,131846,131879,131884,131912,131916,131933,131979,131984,132028,132045,132152,132160],[10,131536,131532],{"id":131537},"_10-css规范与学成在线案例",[166,131539,131541],{"id":131540},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[178,131543,131544,131550,131556,131562],{},[181,131545,131546,131549],{},[373,131547,131548],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[181,131551,131552,131555],{},[373,131553,131554],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[181,131557,131558,131561],{},[373,131559,131560],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[181,131563,131564,131567],{},[373,131565,131566],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[39,131569,131570],{"className":126615,"code":129979,"language":126617,"meta":44,"style":44},[46,131571,131572,131576,131582,131598],{"__ignoreMap":44},[49,131573,131574],{"class":51,"line":52},[49,131575,129986],{"class":283},[49,131577,131578,131580],{"class":51,"line":84},[49,131579,51700],{"class":51389},[49,131581,15662],{"class":55},[49,131583,131584,131586,131588,131590,131592,131594,131596],{"class":51,"line":109},[49,131585,70985],{"class":66},[49,131587,51526],{"class":55},[49,131589,441],{"class":66},[49,131591,51581],{"class":59},[49,131593,51610],{"class":66},[49,131595,130007],{"class":66},[49,131597,1382],{"class":55},[49,131599,131600],{"class":51,"line":120},[49,131601,1657],{"class":55},[166,131603,131605],{"id":131604},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[195,131607,131609],{"id":131608},"_1021-header头部制作","10.2.1 header头部制作",[1554,131611],{"style":126471,"src":131612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1226,131614,131615,131622,131629,131635,131642,131649],{},[181,131616,131617,131618,131621],{},"1号是版心盒子 ",[373,131619,131620],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[181,131623,131624,131625,131628],{},"版心盒子 里面包含 2号盒子 ",[373,131626,131627],{},"logo"," 图标",[181,131630,131631,131632,131634],{},"版心盒子 里面包含 3号盒子 ",[373,131633,53802],{}," 导航栏",[181,131636,131637,131638,131641],{},"版心盒子 里面包含 4号盒子 ",[373,131639,131640],{},"search"," 搜索框",[181,131643,131644,131645,131648],{},"版心盒子 里面包含 5号盒子 ",[373,131646,131647],{},"user"," 个人信息",[181,131650,131651,131652],{},"注意，要求里面的 ",[373,131653,131654],{},"4个子盒子 必须都浮动",[178,131656,131657],{},[181,131658,131659],{},[373,131660,131661],{},"导航栏注意点:",[14,131663,131664,131665,131668,131669],{},"实际开发中， ",[373,131666,131667],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[373,131670,131671],{},"用 li 包含链接(li+a)的做法",[1226,131673,131674,131677],{},[181,131675,131676],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[181,131678,131679],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131681,9115],{},[14,131683,131684],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131686,131687],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131689,131690],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[178,131692,131693],{"start":84},[181,131694,131695],{},[373,131696,131697],{},"4号盒子search的细节：",[1226,131699,131700,131703,131706],{},[181,131701,131702],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[181,131704,131705],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[181,131707,131708,131711],{},[46,131709,131710],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[195,131713,131715],{"id":131714},"_1022-banner制作","10.2.2 banner制作",[1554,131717],{"style":126471,"src":131718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1226,131720,131721,131728,131734,131741],{},[181,131722,131723,131724,131727],{},"1号盒子是通栏的大盒子 ",[373,131725,131726],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[181,131729,131730,131731,131733],{},"2号盒子是版心 ",[373,131732,1014],{}," ， 要水平居中对齐",[181,131735,131736,131737,131740],{},"3号盒子版心内，左对齐 ",[373,131738,131739],{},"subnav"," 侧导航栏",[181,131742,131743,131744,131747],{},"4号盒子版心内，右对齐 ",[373,131745,131746],{},"course"," 课程",[195,131749,131751],{"id":131750},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1554,131753],{"style":126471,"src":131754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1226,131756,131757,131760,131763,131766],{},[181,131758,131759],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[181,131761,131762],{},"1号盒子是标题 H3 左侧浮动",[181,131764,131765],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[181,131767,131768],{},"3号盒子 右浮动 mod 修改",[195,131770,131772],{"id":131771},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1554,131774],{"style":126471,"src":131775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1226,131777,131778,131784,131791,131798,131801],{},[181,131779,131780,131781,131783],{},"1号盒子为最大的盒子 ",[373,131782,53803],{}," 版心水平居中对齐",[181,131785,131786,131787,131790],{},"2号盒子为上面部分 ",[373,131788,131789],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[181,131792,131793,131794,131797],{},"3号盒子为底下部分 ",[373,131795,131796],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[181,131799,131800],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[181,131802,131803],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[195,131805,131807],{"id":131806},"_1025-底部模块制作","10.2.5 底部模块制作",[1554,131809],{"style":126471,"src":131810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1226,131812,131813,131820,131823,131830],{},[181,131814,131815,131816,131819],{},"1号盒子通栏大盒子 底部 ",[373,131817,131818],{},"footer"," 给高度 底色是白色",[181,131821,131822],{},"2号盒子版心水平居中",[181,131824,131825,131826,131829],{},"3号盒子版权 ",[373,131827,131828],{},"copyright"," 左对齐",[181,131831,131832,131833,131836],{},"4号盒子 链接组 ",[373,131834,131835],{},"links"," 右对齐",[195,131838,131840],{"id":131839},"_1026-代码模块","10.2.6 代码模块",[178,131842,131843],{},[181,131844,131845],{},"html部分",[39,131847,131849],{"className":127362,"code":131848,"language":127364,"meta":44,"style":44},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[46,131850,131851],{"__ignoreMap":44},[49,131852,131853,131855,131857,131859,131861,131864,131867,131869,131872,131875,131877],{"class":51,"line":52},[49,131854,1129],{"class":55},[49,131856,56],{"class":51389},[49,131858,61146],{"class":2055},[49,131860,60],{"class":55},[49,131862,131863],{"class":328},"\"https:\u002F\u002Fexample.com\"",[49,131865,131866],{"class":2055}," target",[49,131868,60],{"class":55},[49,131870,131871],{"class":328},"\"_blank\"",[49,131873,131874],{"class":55},">链接文字\u003C\u002F",[49,131876,56],{"class":51389},[49,131878,51396],{"class":55},[178,131880,131881],{"start":84},[181,131882,131883],{},"css部分",[39,131885,131886],{"className":127362,"code":131848,"language":127364,"meta":44,"style":44},[46,131887,131888],{"__ignoreMap":44},[49,131889,131890,131892,131894,131896,131898,131900,131902,131904,131906,131908,131910],{"class":51,"line":52},[49,131891,1129],{"class":55},[49,131893,56],{"class":51389},[49,131895,61146],{"class":2055},[49,131897,60],{"class":55},[49,131899,131863],{"class":328},[49,131901,131866],{"class":2055},[49,131903,60],{"class":55},[49,131905,131871],{"class":328},[49,131907,131874],{"class":55},[49,131909,56],{"class":51389},[49,131911,51396],{"class":55},[195,131913,131915],{"id":131914},"_1027-收获","10.2.7 收获",[178,131917,131918,131921,131924,131927,131930],{},[181,131919,131920],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[181,131922,131923],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[181,131925,131926],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[181,131928,131929],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[181,131931,131932],{},"遗忘代码",[39,131934,131936],{"className":126615,"code":131935,"language":126617,"meta":44,"style":44},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[46,131937,131938,131960,131965,131975],{"__ignoreMap":44},[49,131939,131940,131942,131944,131946,131948,131950,131952,131954,131956,131958],{"class":51,"line":52},[49,131941,51700],{"class":51389},[49,131943,12525],{"class":55},[49,131945,14],{"class":51389},[49,131947,12525],{"class":55},[49,131949,10],{"class":51389},[49,131951,12525],{"class":55},[49,131953,1226],{"class":51389},[49,131955,12525],{"class":55},[49,131957,181],{"class":51389},[49,131959,15662],{"class":55},[49,131961,131962],{"class":51,"line":84},[49,131963,131964],{"class":283},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[49,131966,131967,131969,131971,131973],{"class":51,"line":109},[49,131968,128231],{"class":66},[49,131970,51526],{"class":55},[49,131972,60958],{"class":66},[49,131974,1382],{"class":55},[49,131976,131977],{"class":51,"line":120},[49,131978,1657],{"class":55},[178,131980,131981],{"start":1306},[181,131982,131983],{},"html引css的程序",[39,131985,131986],{"className":126615,"code":131935,"language":126617,"meta":44,"style":44},[46,131987,131988,132010,132014,132024],{"__ignoreMap":44},[49,131989,131990,131992,131994,131996,131998,132000,132002,132004,132006,132008],{"class":51,"line":52},[49,131991,51700],{"class":51389},[49,131993,12525],{"class":55},[49,131995,14],{"class":51389},[49,131997,12525],{"class":55},[49,131999,10],{"class":51389},[49,132001,12525],{"class":55},[49,132003,1226],{"class":51389},[49,132005,12525],{"class":55},[49,132007,181],{"class":51389},[49,132009,15662],{"class":55},[49,132011,132012],{"class":51,"line":84},[49,132013,131964],{"class":283},[49,132015,132016,132018,132020,132022],{"class":51,"line":109},[49,132017,128231],{"class":66},[49,132019,51526],{"class":55},[49,132021,60958],{"class":66},[49,132023,1382],{"class":55},[49,132025,132026],{"class":51,"line":120},[49,132027,1657],{"class":55},[178,132029,132030,132033,132036,132039,132042],{"start":1312},[181,132031,132032],{},"浮动的盒子不会有外边距合并问题",[181,132034,132035],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[181,132037,132038],{},"ctrl+g快速定位行；shift+alt多个光标",[181,132040,132041],{},"学习上方各个模块的选择器起名方法，以后就这样用",[181,132043,132044],{},"在写选择器时尽量写全一些，例如",[39,132046,132048],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},"\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",[46,132049,132050,132055,132071,132076,132091,132096,132111,132116,132131,132136],{"__ignoreMap":44},[49,132051,132052],{"class":51,"line":52},[49,132053,132054],{"class":283},"\u002F* 静态定位（默认） *\u002F\n",[49,132056,132057,132060,132062,132064,132066,132069],{"class":51,"line":84},[49,132058,132059],{"class":2055},".static",[49,132061,79896],{"class":55},[49,132063,128975],{"class":66},[49,132065,51526],{"class":55},[49,132067,132068],{"class":66},"static",[49,132070,129545],{"class":55},[49,132072,132073],{"class":51,"line":109},[49,132074,132075],{"class":283},"\u002F* 相对定位 *\u002F\n",[49,132077,132078,132081,132083,132085,132087,132089],{"class":51,"line":120},[49,132079,132080],{"class":2055},".relative",[49,132082,79896],{"class":55},[49,132084,128975],{"class":66},[49,132086,51526],{"class":55},[49,132088,54853],{"class":66},[49,132090,129545],{"class":55},[49,132092,132093],{"class":51,"line":135},[49,132094,132095],{"class":283},"\u002F* 绝对定位 *\u002F\n",[49,132097,132098,132101,132103,132105,132107,132109],{"class":51,"line":1306},[49,132099,132100],{"class":2055},".absolute",[49,132102,79896],{"class":55},[49,132104,128975],{"class":66},[49,132106,51526],{"class":55},[49,132108,54920],{"class":66},[49,132110,129545],{"class":55},[49,132112,132113],{"class":51,"line":1312},[49,132114,132115],{"class":283},"\u002F* 固定定位 *\u002F\n",[49,132117,132118,132121,132123,132125,132127,132129],{"class":51,"line":1403},[49,132119,132120],{"class":2055},".fixed",[49,132122,79896],{"class":55},[49,132124,128975],{"class":66},[49,132126,51526],{"class":55},[49,132128,86322],{"class":66},[49,132130,129545],{"class":55},[49,132132,132133],{"class":51,"line":1409},[49,132134,132135],{"class":283},"\u002F* 粘性定位 *\u002F\n",[49,132137,132138,132141,132143,132145,132147,132150],{"class":51,"line":1421},[49,132139,132140],{"class":2055},".sticky",[49,132142,79896],{"class":55},[49,132144,128975],{"class":66},[49,132146,51526],{"class":55},[49,132148,132149],{"class":66},"sticky",[49,132151,129545],{"class":55},[178,132153,132154,132157],{"start":1709},[181,132155,132156],{},"一定要用好注释",[181,132158,132159],{},"浮动的盒子不会有外边距合并的问题",[143,132161,131503],{},{"title":44,"searchDepth":84,"depth":84,"links":132163},[132164,132165],{"id":131540,"depth":84,"text":131541},{"id":131604,"depth":84,"text":131605,"children":132166},[132167,132168,132169,132170,132171,132172,132173],{"id":131608,"depth":109,"text":131609},{"id":131714,"depth":109,"text":131715},{"id":131750,"depth":109,"text":131751},{"id":131771,"depth":109,"text":131772},{"id":131806,"depth":109,"text":131807},{"id":131839,"depth":109,"text":131840},{"id":131914,"depth":109,"text":131915},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131532,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132180,"title":132181,"body":132182,"description":148,"extension":149,"meta":133668,"navigation":151,"path":133669,"seo":133670,"stem":133671,"__hash__":133672},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132183,"toc":133660},[132184,132187,132191,132195,132206,132210,132227,132271,132304,132307,132324,132327,132330,132374,132378,132382,132385,132388,132392,132395,132406,132469,132510,132513,132528,132582,132590,132593,132604,132658,132684,132687,132700,132754,132786,132840,132863,132917,132920,132923,132930,132984,133005,133059,133062,133065,133150,133158,133215,133238,133242,133245,133263,133267,133286,133340,133378,133382,133385,133388,133410,133414,133422,133425,133430,133441,133444,133448,133462,133506,133509,133513,133516,133521,133547,133552,133629,133632,133636,133639,133642,133645,133648,133651,133654,133657],[10,132185,132181],{"id":132186},"_11-传统布局与定位体系",[166,132188,132190],{"id":132189},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[195,132192,132194],{"id":132193},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1226,132196,132197,132200,132203],{},[181,132198,132199],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[181,132201,132202],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[181,132204,132205],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[195,132207,132209],{"id":132208},"_1112-浮动","11.1.2 浮动",[1226,132211,132212,132215,132218,132221,132224],{},[181,132213,132214],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[181,132216,132217],{},"浮动可以改变元素标签默认的排列方式",[181,132219,132220],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[181,132222,132223],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[181,132225,132226],{},"在使用行内块转换时盒子之间是有空隙的",[39,132228,132229],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,132230,132231,132237,132247,132251,132257,132267],{"__ignoreMap":44},[49,132232,132233,132235],{"class":51,"line":52},[49,132234,131088],{"class":2055},[49,132236,15662],{"class":55},[49,132238,132239,132241,132243,132245],{"class":51,"line":84},[49,132240,131095],{"class":66},[49,132242,51526],{"class":55},[49,132244,23826],{"class":66},[49,132246,1382],{"class":55},[49,132248,132249],{"class":51,"line":109},[49,132250,1657],{"class":55},[49,132252,132253,132255],{"class":51,"line":120},[49,132254,131110],{"class":2055},[49,132256,15662],{"class":55},[49,132258,132259,132261,132263,132265],{"class":51,"line":135},[49,132260,131095],{"class":66},[49,132262,51526],{"class":55},[49,132264,72611],{"class":66},[49,132266,1382],{"class":55},[49,132268,132269],{"class":51,"line":1306},[49,132270,1657],{"class":55},[361,132272,132273,132281],{},[364,132274,132275],{},[367,132276,132277,132279],{},[370,132278,127079],{"align":23826},[370,132280,27580],{"align":23826},[408,132282,132283,132290,132297],{},[367,132284,132285,132287],{},[413,132286,54826],{"align":23826},[413,132288,132289],{"align":23826},"元素不浮动（默认值）",[367,132291,132292,132294],{},[413,132293,23826],{"align":23826},[413,132295,132296],{"align":23826},"元素向左浮动",[367,132298,132299,132301],{},[413,132300,72611],{"align":23826},[413,132302,132303],{"align":23826},"元素向右浮动",[14,132305,132306],{},"浮动重点：",[1226,132308,132309,132312,132315,132318,132321],{},[181,132310,132311],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[181,132313,132314],{},"浮动的元素会一行内显示并且元素顶部对齐",[181,132316,132317],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[181,132319,132320],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[181,132322,132323],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132325,132326],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132328,132329],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[39,132331,132332],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,132333,132334,132340,132350,132354,132360,132370],{"__ignoreMap":44},[49,132335,132336,132338],{"class":51,"line":52},[49,132337,131088],{"class":2055},[49,132339,15662],{"class":55},[49,132341,132342,132344,132346,132348],{"class":51,"line":84},[49,132343,131095],{"class":66},[49,132345,51526],{"class":55},[49,132347,23826],{"class":66},[49,132349,1382],{"class":55},[49,132351,132352],{"class":51,"line":109},[49,132353,1657],{"class":55},[49,132355,132356,132358],{"class":51,"line":120},[49,132357,131110],{"class":2055},[49,132359,15662],{"class":55},[49,132361,132362,132364,132366,132368],{"class":51,"line":135},[49,132363,131095],{"class":66},[49,132365,51526],{"class":55},[49,132367,72611],{"class":66},[49,132369,1382],{"class":55},[49,132371,132372],{"class":51,"line":1306},[49,132373,1657],{"class":55},[195,132375,132377],{"id":132376},"_1113-定位","11.1.3 定位",[22088,132379,132381],{"id":132380},"_11131-使用场景","11.1.3.1 使用场景",[14,132383,132384],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132386,132387],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22088,132389,132391],{"id":132390},"_11132-定位组成","11.1.3.2 定位组成",[14,132393,132394],{},"定位 = 定位模式 + 边偏移",[178,132396,132397],{},[181,132398,132399,132402,132403],{},[373,132400,132401],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[373,132404,132405],{},"定位模式",[39,132407,132409],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[46,132410,132411,132417,132431,132448,132465],{"__ignoreMap":44},[49,132412,132413,132415],{"class":51,"line":52},[49,132414,130463],{"class":2055},[49,132416,15662],{"class":55},[49,132418,132419,132422,132424,132426,132428],{"class":51,"line":84},[49,132420,132421],{"class":66},"  position",[49,132423,51526],{"class":55},[49,132425,54853],{"class":66},[49,132427,130478],{"class":55},[49,132429,132430],{"class":283},"\u002F* 定位模式 *\u002F\n",[49,132432,132433,132436,132438,132440,132442,132445],{"class":51,"line":109},[49,132434,132435],{"class":66},"  top",[49,132437,51526],{"class":55},[49,132439,95],{"class":66},[49,132441,51581],{"class":59},[49,132443,132444],{"class":55},";           ",[49,132446,132447],{"class":283},"\u002F* 边偏移：上 *\u002F\n",[49,132449,132450,132453,132455,132457,132459,132462],{"class":51,"line":120},[49,132451,132452],{"class":66},"  left",[49,132454,51526],{"class":55},[49,132456,919],{"class":66},[49,132458,51581],{"class":59},[49,132460,132461],{"class":55},";          ",[49,132463,132464],{"class":283},"\u002F* 边偏移：左 *\u002F\n",[49,132466,132467],{"class":51,"line":135},[49,132468,1657],{"class":55},[361,132470,132471,132480],{},[364,132472,132473],{},[367,132474,132475,132477],{},[370,132476,376],{"align":23826},[370,132478,132479],{"align":23826},"语义",[408,132481,132482,132489,132496,132503],{},[367,132483,132484,132486],{},[413,132485,132068],{"align":23826},[413,132487,132488],{"align":23826},"静态定位",[367,132490,132491,132493],{},[413,132492,54853],{"align":23826},[413,132494,132495],{"align":23826},"相对定位",[367,132497,132498,132500],{},[413,132499,54920],{"align":23826},[413,132501,132502],{"align":23826},"绝对定位",[367,132504,132505,132507],{},[413,132506,86322],{"align":23826},[413,132508,132509],{"align":23826},"固定定位",[14,132511,132512],{},"（1）静态定位：",[1226,132514,132515,132526],{},[181,132516,132517,132518,132521,132522,132525],{},"静态定位是元素的 ",[373,132519,132520],{},"默认定位方式"," ， ",[373,132523,132524],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[181,132527,5272],{},[39,132529,132530],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132531,132532,132538,132550,132564,132578],{"__ignoreMap":44},[49,132533,132534,132536],{"class":51,"line":52},[49,132535,130463],{"class":2055},[49,132537,15662],{"class":55},[49,132539,132540,132542,132544,132546,132548],{"class":51,"line":84},[49,132541,132421],{"class":66},[49,132543,51526],{"class":55},[49,132545,54853],{"class":66},[49,132547,130478],{"class":55},[49,132549,132430],{"class":283},[49,132551,132552,132554,132556,132558,132560,132562],{"class":51,"line":109},[49,132553,132435],{"class":66},[49,132555,51526],{"class":55},[49,132557,95],{"class":66},[49,132559,51581],{"class":59},[49,132561,132444],{"class":55},[49,132563,132447],{"class":283},[49,132565,132566,132568,132570,132572,132574,132576],{"class":51,"line":120},[49,132567,132452],{"class":66},[49,132569,51526],{"class":55},[49,132571,919],{"class":66},[49,132573,51581],{"class":59},[49,132575,132461],{"class":55},[49,132577,132464],{"class":283},[49,132579,132580],{"class":51,"line":135},[49,132581,1657],{"class":55},[1226,132583,132584,132587],{},[181,132585,132586],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[181,132588,132589],{},"静态定位在布局时我们几乎不用的",[14,132591,132592],{},"（2）相对定位",[1226,132594,132595,132602],{},[181,132596,132597,132598,132601],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[373,132599,132600],{},"原来的位置"," 来说的（自恋型）",[181,132603,5272],{},[39,132605,132606],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132607,132608,132614,132626,132640,132654],{"__ignoreMap":44},[49,132609,132610,132612],{"class":51,"line":52},[49,132611,130463],{"class":2055},[49,132613,15662],{"class":55},[49,132615,132616,132618,132620,132622,132624],{"class":51,"line":84},[49,132617,132421],{"class":66},[49,132619,51526],{"class":55},[49,132621,54853],{"class":66},[49,132623,130478],{"class":55},[49,132625,132430],{"class":283},[49,132627,132628,132630,132632,132634,132636,132638],{"class":51,"line":109},[49,132629,132435],{"class":66},[49,132631,51526],{"class":55},[49,132633,95],{"class":66},[49,132635,51581],{"class":59},[49,132637,132444],{"class":55},[49,132639,132447],{"class":283},[49,132641,132642,132644,132646,132648,132650,132652],{"class":51,"line":120},[49,132643,132452],{"class":66},[49,132645,51526],{"class":55},[49,132647,919],{"class":66},[49,132649,51581],{"class":59},[49,132651,132461],{"class":55},[49,132653,132464],{"class":283},[49,132655,132656],{"class":51,"line":135},[49,132657,1657],{"class":55},[1226,132659,132660],{},[181,132661,132662,132663,132665,132666,132668,132669,132672,132673,132676,132677,132679,132680,132683],{},"相对定位的特点：",[53805,132664],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53805,132667],{},"  ② ",[373,132670,132671],{},"原来"," 在标准流的 ",[373,132674,132675],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53805,132678],{},"  ③因此， ",[373,132681,132682],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132685,132686],{},"（3）绝对定位",[1226,132688,132689,132698],{},[181,132690,132691,132693,132694,132697],{},[373,132692,132502],{}," 是元素在移动位置的时候，是相对于它 ",[373,132695,132696],{},"祖先元素"," 来说的（拼爹型）",[181,132699,5272],{},[39,132701,132702],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132703,132704,132710,132722,132736,132750],{"__ignoreMap":44},[49,132705,132706,132708],{"class":51,"line":52},[49,132707,130463],{"class":2055},[49,132709,15662],{"class":55},[49,132711,132712,132714,132716,132718,132720],{"class":51,"line":84},[49,132713,132421],{"class":66},[49,132715,51526],{"class":55},[49,132717,54853],{"class":66},[49,132719,130478],{"class":55},[49,132721,132430],{"class":283},[49,132723,132724,132726,132728,132730,132732,132734],{"class":51,"line":109},[49,132725,132435],{"class":66},[49,132727,51526],{"class":55},[49,132729,95],{"class":66},[49,132731,51581],{"class":59},[49,132733,132444],{"class":55},[49,132735,132447],{"class":283},[49,132737,132738,132740,132742,132744,132746,132748],{"class":51,"line":120},[49,132739,132452],{"class":66},[49,132741,51526],{"class":55},[49,132743,919],{"class":66},[49,132745,51581],{"class":59},[49,132747,132461],{"class":55},[49,132749,132464],{"class":283},[49,132751,132752],{"class":51,"line":135},[49,132753,1657],{"class":55},[1226,132755,132756,132771,132780,132783],{},[181,132757,132758,132759,132761,132762,132764,132765,132767,132768,132770],{},"绝对定位的特点：",[53805,132760],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53805,132763],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53805,132766],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53805,132769],{},"  (4)固定定位",[181,132772,132773,132775,132776,132779],{},[373,132774,132509],{}," 是元素 ",[373,132777,132778],{},"固定于浏览器可视区的位置"," 。（认死理型）",[181,132781,132782],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[181,132784,132785],{},"语法:",[39,132787,132788],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132789,132790,132796,132808,132822,132836],{"__ignoreMap":44},[49,132791,132792,132794],{"class":51,"line":52},[49,132793,130463],{"class":2055},[49,132795,15662],{"class":55},[49,132797,132798,132800,132802,132804,132806],{"class":51,"line":84},[49,132799,132421],{"class":66},[49,132801,51526],{"class":55},[49,132803,54853],{"class":66},[49,132805,130478],{"class":55},[49,132807,132430],{"class":283},[49,132809,132810,132812,132814,132816,132818,132820],{"class":51,"line":109},[49,132811,132435],{"class":66},[49,132813,51526],{"class":55},[49,132815,95],{"class":66},[49,132817,51581],{"class":59},[49,132819,132444],{"class":55},[49,132821,132447],{"class":283},[49,132823,132824,132826,132828,132830,132832,132834],{"class":51,"line":120},[49,132825,132452],{"class":66},[49,132827,51526],{"class":55},[49,132829,919],{"class":66},[49,132831,51581],{"class":59},[49,132833,132461],{"class":55},[49,132835,132464],{"class":283},[49,132837,132838],{"class":51,"line":135},[49,132839,1657],{"class":55},[1226,132841,132842,132851],{},[181,132843,132844,132845,132847,132848,132850],{},"特点:",[53805,132846],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53805,132849],{},"  ②固定定位不再占有原先的位置,完全脱标",[181,132852,132853,132854,132856,132857,132859,132860,132862],{},"固定在版心位置的方法:",[53805,132855],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53805,132858],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53805,132861],{},"  实例：",[39,132864,132865],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132866,132867,132873,132885,132899,132913],{"__ignoreMap":44},[49,132868,132869,132871],{"class":51,"line":52},[49,132870,130463],{"class":2055},[49,132872,15662],{"class":55},[49,132874,132875,132877,132879,132881,132883],{"class":51,"line":84},[49,132876,132421],{"class":66},[49,132878,51526],{"class":55},[49,132880,54853],{"class":66},[49,132882,130478],{"class":55},[49,132884,132430],{"class":283},[49,132886,132887,132889,132891,132893,132895,132897],{"class":51,"line":109},[49,132888,132435],{"class":66},[49,132890,51526],{"class":55},[49,132892,95],{"class":66},[49,132894,51581],{"class":59},[49,132896,132444],{"class":55},[49,132898,132447],{"class":283},[49,132900,132901,132903,132905,132907,132909,132911],{"class":51,"line":120},[49,132902,132452],{"class":66},[49,132904,51526],{"class":55},[49,132906,919],{"class":66},[49,132908,51581],{"class":59},[49,132910,132461],{"class":55},[49,132912,132464],{"class":283},[49,132914,132915],{"class":51,"line":135},[49,132916,1657],{"class":55},[1554,132918],{"style":126471,"src":132919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132921,132922],{},"(5)粘性定位",[1226,132924,132925,132928],{},[181,132926,132927],{},"粘性定位可以被认为是相对定位和固定定位的混合",[181,132929,5272],{},[39,132931,132932],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,132933,132934,132940,132952,132966,132980],{"__ignoreMap":44},[49,132935,132936,132938],{"class":51,"line":52},[49,132937,130463],{"class":2055},[49,132939,15662],{"class":55},[49,132941,132942,132944,132946,132948,132950],{"class":51,"line":84},[49,132943,132421],{"class":66},[49,132945,51526],{"class":55},[49,132947,54853],{"class":66},[49,132949,130478],{"class":55},[49,132951,132430],{"class":283},[49,132953,132954,132956,132958,132960,132962,132964],{"class":51,"line":109},[49,132955,132435],{"class":66},[49,132957,51526],{"class":55},[49,132959,95],{"class":66},[49,132961,51581],{"class":59},[49,132963,132444],{"class":55},[49,132965,132447],{"class":283},[49,132967,132968,132970,132972,132974,132976,132978],{"class":51,"line":120},[49,132969,132452],{"class":66},[49,132971,51526],{"class":55},[49,132973,919],{"class":66},[49,132975,51581],{"class":59},[49,132977,132461],{"class":55},[49,132979,132464],{"class":283},[49,132981,132982],{"class":51,"line":135},[49,132983,1657],{"class":55},[1226,132985,132986],{},[181,132987,132988,132989,132991,132992,132994,132995,132997,132998,133001,133002,133004],{},"粘性定位的特点：",[53805,132990],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53805,132993],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53805,132996],{},"  ③必须添加 top 、left、right、bottom ",[373,132999,133000],{},"其中一个"," 才有效",[53805,133003],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[39,133006,133007],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,133008,133009,133015,133027,133041,133055],{"__ignoreMap":44},[49,133010,133011,133013],{"class":51,"line":52},[49,133012,130463],{"class":2055},[49,133014,15662],{"class":55},[49,133016,133017,133019,133021,133023,133025],{"class":51,"line":84},[49,133018,132421],{"class":66},[49,133020,51526],{"class":55},[49,133022,54853],{"class":66},[49,133024,130478],{"class":55},[49,133026,132430],{"class":283},[49,133028,133029,133031,133033,133035,133037,133039],{"class":51,"line":109},[49,133030,132435],{"class":66},[49,133032,51526],{"class":55},[49,133034,95],{"class":66},[49,133036,51581],{"class":59},[49,133038,132444],{"class":55},[49,133040,132447],{"class":283},[49,133042,133043,133045,133047,133049,133051,133053],{"class":51,"line":120},[49,133044,132452],{"class":66},[49,133046,51526],{"class":55},[49,133048,919],{"class":66},[49,133050,51581],{"class":59},[49,133052,132461],{"class":55},[49,133054,132464],{"class":283},[49,133056,133057],{"class":51,"line":135},[49,133058,1657],{"class":55},[1554,133060],{"style":126471,"src":133061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133063,133064],{},"(6)总结",[361,133066,133067,133082],{},[364,133068,133069],{},[367,133070,133071,133073,133076,133079],{},[370,133072,132405],{"align":23826},[370,133074,133075],{"align":23826},"是否脱标",[370,133077,133078],{"align":23826},"移动位置",[370,133080,133081],{"align":23826},"是否常用",[408,133083,133084,133097,133111,133125,133138],{},[367,133085,133086,133089,133091,133094],{},[413,133087,133088],{"align":23826},"Static 静态定位",[413,133090,104741],{"align":23826},[413,133092,133093],{"align":23826},"不能使用边偏移",[413,133095,133096],{"align":23826},"很少",[367,133098,133099,133102,133105,133108],{},[413,133100,133101],{"align":23826},"Relative 相对定位",[413,133103,133104],{"align":23826},"否(占有位置)",[413,133106,133107],{"align":23826},"相对于自身位置移动",[413,133109,133110],{"align":23826},"基本单独使用",[367,133112,133113,133116,133119,133122],{},[413,133114,133115],{"align":23826},"Absolute 绝对定位",[413,133117,133118],{"align":23826},"是(不占有位置)",[413,133120,133121],{"align":23826},"带有定位的父级",[413,133123,133124],{"align":23826},"要和定位父级元素搭配使用",[367,133126,133127,133130,133132,133135],{},[413,133128,133129],{"align":23826},"Fixed 固定定位",[413,133131,133118],{"align":23826},[413,133133,133134],{"align":23826},"浏览器可视区",[413,133136,133137],{"align":23826},"单独使用,不需要父级",[367,133139,133140,133143,133145,133147],{},[413,133141,133142],{"align":23826},"Sticky 粘性定位",[413,133144,133104],{"align":23826},[413,133146,133134],{"align":23826},[413,133148,133149],{"align":23826},"当前阶段少",[178,133151,133152],{"start":84},[181,133153,133154,133157],{},[373,133155,133156],{},"边偏移"," 则决定了该元素的最终位置",[361,133159,133160,133171],{},[364,133161,133162],{},[367,133163,133164,133167,133169],{},[370,133165,133166],{"align":23826},"边偏移属性",[370,133168,27583],{"align":23826},[370,133170,27580],{"align":23826},[408,133172,133173,133184,133195,133205],{},[367,133174,133175,133178,133181],{},[413,133176,133177],{"align":23826},"top",[413,133179,133180],{"align":23826},"top: 80px;",[413,133182,133183],{"align":23826},"顶端偏移量，定义元素相对于父元素上边线的距离",[367,133185,133186,133189,133192],{},[413,133187,133188],{"align":23826},"bottom",[413,133190,133191],{"align":23826},"bottom: 80px ;",[413,133193,133194],{"align":23826},"底部偏移量，定义元素相对于其父元素下边线的距离",[367,133196,133197,133199,133202],{},[413,133198,23826],{"align":23826},[413,133200,133201],{"align":23826},"left: 80px ;",[413,133203,133204],{"align":23826},"左侧偏移量，定义元素相对于其父元素左边线的距离",[367,133206,133207,133209,133212],{},[413,133208,72611],{"align":23826},[413,133210,133211],{"align":23826},"right: 80px ;",[413,133213,133214],{"align":23826},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1226,133216,133217],{},[181,133218,9115,133219,133221,133222,133224,133225,133227,133228,133231,133232,133234,133235,133237],{},[53805,133220],{},"  ① ",[373,133223,133156],{}," 需要和 ",[373,133226,132405],{}," 联合使用， ",[373,133229,133230],{},"单独使用无效"," ；",[53805,133233],{},"  ②top和bottom不要同时使用",[53805,133236],{},"  ③left和right不要同时使用",[22088,133239,133241],{"id":133240},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133243,133244],{},"子级是绝对定位的话，父级要用相对定位",[1226,133246,133247,133250,133253,133256],{},[181,133248,133249],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[181,133251,133252],{},"父盒子需要加定位限制子盒子在父盒子内显示",[181,133254,133255],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[181,133257,133258,133259,133262],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[373,133260,133261],{},"子绝父绝"," 也会遇到",[22088,133264,133266],{"id":133265},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1226,133268,133269,133284],{},[181,133270,133271,133272,133275,133276,133279,133280,133283],{},"在使用 ",[373,133273,133274],{},"定位"," 布局时，可能会 ",[373,133277,133278],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[373,133281,133282],{},"z-index"," 来控制盒子的前后次序 (z轴)",[181,133285,5272],{},[39,133287,133288],{"className":126615,"code":132408,"language":126617,"meta":44,"style":44},[46,133289,133290,133296,133308,133322,133336],{"__ignoreMap":44},[49,133291,133292,133294],{"class":51,"line":52},[49,133293,130463],{"class":2055},[49,133295,15662],{"class":55},[49,133297,133298,133300,133302,133304,133306],{"class":51,"line":84},[49,133299,132421],{"class":66},[49,133301,51526],{"class":55},[49,133303,54853],{"class":66},[49,133305,130478],{"class":55},[49,133307,132430],{"class":283},[49,133309,133310,133312,133314,133316,133318,133320],{"class":51,"line":109},[49,133311,132435],{"class":66},[49,133313,51526],{"class":55},[49,133315,95],{"class":66},[49,133317,51581],{"class":59},[49,133319,132444],{"class":55},[49,133321,132447],{"class":283},[49,133323,133324,133326,133328,133330,133332,133334],{"class":51,"line":120},[49,133325,132452],{"class":66},[49,133327,51526],{"class":55},[49,133329,919],{"class":66},[49,133331,51581],{"class":59},[49,133333,132461],{"class":55},[49,133335,132464],{"class":283},[49,133337,133338],{"class":51,"line":135},[49,133339,1657],{"class":55},[1226,133341,133342],{},[181,133343,133344,133345,133221,133347,133349,133350,127778,133353,82628,133356,133358,133359,133361,133362,133365,133366,133231,133369,133371,133372,133375,133377],{},"z-index的特性",[53805,133346],{},[373,133348,127079],{}," ： ",[373,133351,133352],{},"正整数",[373,133354,133355],{},"负整数",[373,133357,415],{}," ，默认值是 0，数值越大，盒子越靠上；",[53805,133360],{},"  ②如果 ",[373,133363,133364],{},"属性值相同"," ，则按照书写顺序， ",[373,133367,133368],{},"后来居上",[53805,133370],{},"  ③数字后面 ",[373,133373,133374],{},"不能加单位",[53805,133376],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22088,133379,133381],{"id":133380},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133383,133384],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133386,133387],{},"方法:",[1226,133389,133390,133400],{},[181,133391,133392,133393,133396,133397],{},"left: 50%; 让 ",[373,133394,133395],{},"盒子的左侧"," 移动到 ",[373,133398,133399],{},"父级元素的水平中心位置",[181,133401,133402,133403,133406,133407],{},"margin-left: -100px; 让盒子 ",[373,133404,133405],{},"向左"," 移动 ",[373,133408,133409],{},"自身宽度的一半",[22088,133411,133413],{"id":133412},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[178,133415,133416,133419],{},[181,133417,133418],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[181,133420,133421],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133423,133424],{},"也就是说绝对定位和固定定位和浮动类似",[178,133426,133427],{"start":109},[181,133428,133429],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1226,133431,133432,133435,133438],{},[181,133433,133434],{},"可以用inline-block 转换为行内块",[181,133436,133437],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[181,133439,133440],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133442,133443],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22088,133445,133447],{"id":133446},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[178,133449,133450,133453,133456,133459],{},[181,133451,133452],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[181,133454,133455],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[181,133457,133458],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[181,133460,133461],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[39,133463,133464],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,133465,133466,133472,133482,133486,133492,133502],{"__ignoreMap":44},[49,133467,133468,133470],{"class":51,"line":52},[49,133469,131088],{"class":2055},[49,133471,15662],{"class":55},[49,133473,133474,133476,133478,133480],{"class":51,"line":84},[49,133475,131095],{"class":66},[49,133477,51526],{"class":55},[49,133479,23826],{"class":66},[49,133481,1382],{"class":55},[49,133483,133484],{"class":51,"line":109},[49,133485,1657],{"class":55},[49,133487,133488,133490],{"class":51,"line":120},[49,133489,131110],{"class":2055},[49,133491,15662],{"class":55},[49,133493,133494,133496,133498,133500],{"class":51,"line":135},[49,133495,131095],{"class":66},[49,133497,51526],{"class":55},[49,133499,72611],{"class":66},[49,133501,1382],{"class":55},[49,133503,133504],{"class":51,"line":1306},[49,133505,1657],{"class":55},[1554,133507],{"style":126471,"src":133508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22088,133510,133512],{"id":133511},"_11138-轮播图","11.1.3.8 轮播图",[1554,133514],{"style":126471,"src":133515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[178,133517,133518],{},[181,133519,133520],{},"制作顺序:",[1226,133522,133523,133526,133529,133538],{},[181,133524,133525],{},"大盒子我们类名为： tb-promo 淘宝广告",[181,133527,133528],{},"里面先放一张图片",[181,133530,133531,133532,133534,133535,133537],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53805,133533],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53805,133536],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[181,133539,133540,133541,133543,133544,133546],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53805,133542],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53805,133545],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[178,133548,133549],{"start":84},[181,133550,133551],{},"代码模块",[39,133553,133555],{"className":126615,"code":133554,"language":126617,"meta":44,"style":44},"\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",[46,133556,133557,133562,133569,133579,133589,133599,133603,133608,133615,133625],{"__ignoreMap":44},[49,133558,133559],{"class":51,"line":52},[49,133560,133561],{"class":283},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[49,133563,133564,133567],{"class":51,"line":84},[49,133565,133566],{"class":2055},".son",[49,133568,15662],{"class":55},[49,133570,133571,133573,133575,133577],{"class":51,"line":109},[49,133572,132421],{"class":66},[49,133574,51526],{"class":55},[49,133576,54920],{"class":66},[49,133578,1382],{"class":55},[49,133580,133581,133583,133585,133587],{"class":51,"line":120},[49,133582,132435],{"class":66},[49,133584,51526],{"class":55},[49,133586,415],{"class":66},[49,133588,1382],{"class":55},[49,133590,133591,133593,133595,133597],{"class":51,"line":135},[49,133592,132452],{"class":66},[49,133594,51526],{"class":55},[49,133596,415],{"class":66},[49,133598,1382],{"class":55},[49,133600,133601],{"class":51,"line":1306},[49,133602,1657],{"class":55},[49,133604,133605],{"class":51,"line":1312},[49,133606,133607],{"class":283},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[49,133609,133610,133613],{"class":51,"line":1403},[49,133611,133612],{"class":2055},".father",[49,133614,15662],{"class":55},[49,133616,133617,133619,133621,133623],{"class":51,"line":1409},[49,133618,132421],{"class":66},[49,133620,51526],{"class":55},[49,133622,54853],{"class":66},[49,133624,1382],{"class":55},[49,133626,133627],{"class":51,"line":1421},[49,133628,1657],{"class":55},[14,133630,133631],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[195,133633,133635],{"id":133634},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1554,133637],{"style":126471,"src":133638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133640,133641],{},"✨ 黄金口诀：",[14,133643,133644],{},"\"TOP正下负上，LEFT正右负左\"",[14,133646,133647],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133649,133650],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133652,133653],{},"✨ 简单记：",[14,133655,133656],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[143,133658,133659],{},"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":44,"searchDepth":84,"depth":84,"links":133661},[133662],{"id":132189,"depth":84,"text":132190,"children":133663},[133664,133665,133666,133667],{"id":132193,"depth":109,"text":132194},{"id":132208,"depth":109,"text":132209},{"id":132376,"depth":109,"text":132377},{"id":133634,"depth":109,"text":133635},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132181,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133674,"title":133675,"body":133676,"description":148,"extension":149,"meta":135099,"navigation":151,"path":135100,"seo":135101,"stem":135102,"__hash__":135103},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133677,"toc":135078},[133678,133681,133685,133693,133697,133702,133710,133722,133726,133731,133739,133750,133754,133759,133800,133808,133812,133815,133818,133821,133915,133918,134012,134015,134109,134112,134115,134150,134153,134156,134186,134189,134192,134195,134198,134201,134204,134207,134277,134280,134284,134288,134329,134333,134339,134342,134345,134349,134352,134355,134358,134439,134442,134445,134449,134453,134456,134459,134462,134465,134468,134474,134483,134487,134506,134510,134520,134523,134526,134529,134532,134535,134538,134541,134544,134553,134557,134566,134569,134574,134627,134632,134798,134801,134804,134809,134812,134815,134818,134821,134826,134974,134977,134980,134985,134988,134993,135027,135030,135033,135037,135040,135047,135050,135053,135056,135059,135062,135065,135068,135072,135075],[10,133679,133675],{"id":133680},"_12-显示隐藏与图形资源",[166,133682,133684],{"id":133683},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1226,133686,133687,133690],{},[181,133688,133689],{},"目的:让一个元素在页面中消失或者显示出来",[181,133691,133692],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[195,133694,133696],{"id":133695},"_1211-display-显示","12.1.1 display 显示",[178,133698,133699],{},[181,133700,133701],{},"display 设置或检索对象是否及如何显示",[1226,133703,133704,133707],{},[181,133705,133706],{},"display: none;隐藏对象",[181,133708,133709],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[178,133711,133712,133719],{"start":84},[181,133713,133714,133715,133718],{},"特点： display 隐藏元素后， ",[373,133716,133717],{},"不再占"," 有原来的位置",[181,133720,133721],{},"在js中使用非常的广泛",[195,133723,133725],{"id":133724},"_1212-visibility可见性","12.1.2 visibility可见性",[178,133727,133728],{},[181,133729,133730],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1226,133732,133733,133736],{},[181,133734,133735],{},"visibility： visible；元素可见",[181,133737,133738],{},"visibility：hidden；元素隐藏",[178,133740,133741,133744,133747],{"start":84},[181,133742,133743],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[181,133745,133746],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[181,133748,133749],{},"隐藏后继续占有原有位置",[195,133751,133753],{"id":133752},"_1213-overflow溢出","12.1.3 overflow溢出",[1226,133755,133756],{},[181,133757,133758],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[361,133760,133761,133769],{},[364,133762,133763],{},[367,133764,133765,133767],{},[370,133766,127079],{"align":23826},[370,133768,27580],{"align":23826},[408,133770,133771,133779,133786,133793],{},[367,133772,133773,133776],{},[413,133774,133775],{"align":23826},"visible",[413,133777,133778],{"align":23826},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[367,133780,133781,133783],{},[413,133782,61803],{"align":23826},[413,133784,133785],{"align":23826},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[367,133787,133788,133790],{},[413,133789,129035],{"align":23826},[413,133791,133792],{"align":23826},"不管超出内容否，总是显示滚动条",[367,133794,133795,133797],{},[413,133796,72752],{"align":23826},[413,133798,133799],{"align":23826},"超出自动显示滚动条，不超出不显示滚动条",[1226,133801,133802,133805],{},[181,133803,133804],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[181,133806,133807],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[195,133809,133811],{"id":133810},"_1214-案例收获","12.1.4 案例收获",[1554,133813],{"style":126471,"src":133814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133816,133817],{},"问题：没做出来动态效果，使用hover没实现",[14,133819,133820],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[39,133822,133823],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,133824,133825,133829,133843,133847,133861,133865,133879,133883,133897,133901],{"__ignoreMap":44},[49,133826,133827],{"class":51,"line":52},[49,133828,132054],{"class":283},[49,133830,133831,133833,133835,133837,133839,133841],{"class":51,"line":84},[49,133832,132059],{"class":2055},[49,133834,79896],{"class":55},[49,133836,128975],{"class":66},[49,133838,51526],{"class":55},[49,133840,132068],{"class":66},[49,133842,129545],{"class":55},[49,133844,133845],{"class":51,"line":109},[49,133846,132075],{"class":283},[49,133848,133849,133851,133853,133855,133857,133859],{"class":51,"line":120},[49,133850,132080],{"class":2055},[49,133852,79896],{"class":55},[49,133854,128975],{"class":66},[49,133856,51526],{"class":55},[49,133858,54853],{"class":66},[49,133860,129545],{"class":55},[49,133862,133863],{"class":51,"line":135},[49,133864,132095],{"class":283},[49,133866,133867,133869,133871,133873,133875,133877],{"class":51,"line":1306},[49,133868,132100],{"class":2055},[49,133870,79896],{"class":55},[49,133872,128975],{"class":66},[49,133874,51526],{"class":55},[49,133876,54920],{"class":66},[49,133878,129545],{"class":55},[49,133880,133881],{"class":51,"line":1312},[49,133882,132115],{"class":283},[49,133884,133885,133887,133889,133891,133893,133895],{"class":51,"line":1403},[49,133886,132120],{"class":2055},[49,133888,79896],{"class":55},[49,133890,128975],{"class":66},[49,133892,51526],{"class":55},[49,133894,86322],{"class":66},[49,133896,129545],{"class":55},[49,133898,133899],{"class":51,"line":1409},[49,133900,132135],{"class":283},[49,133902,133903,133905,133907,133909,133911,133913],{"class":51,"line":1421},[49,133904,132140],{"class":2055},[49,133906,79896],{"class":55},[49,133908,128975],{"class":66},[49,133910,51526],{"class":55},[49,133912,132149],{"class":66},[49,133914,129545],{"class":55},[14,133916,133917],{},"完整代码：",[39,133919,133920],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,133921,133922,133926,133940,133944,133958,133962,133976,133980,133994,133998],{"__ignoreMap":44},[49,133923,133924],{"class":51,"line":52},[49,133925,132054],{"class":283},[49,133927,133928,133930,133932,133934,133936,133938],{"class":51,"line":84},[49,133929,132059],{"class":2055},[49,133931,79896],{"class":55},[49,133933,128975],{"class":66},[49,133935,51526],{"class":55},[49,133937,132068],{"class":66},[49,133939,129545],{"class":55},[49,133941,133942],{"class":51,"line":109},[49,133943,132075],{"class":283},[49,133945,133946,133948,133950,133952,133954,133956],{"class":51,"line":120},[49,133947,132080],{"class":2055},[49,133949,79896],{"class":55},[49,133951,128975],{"class":66},[49,133953,51526],{"class":55},[49,133955,54853],{"class":66},[49,133957,129545],{"class":55},[49,133959,133960],{"class":51,"line":135},[49,133961,132095],{"class":283},[49,133963,133964,133966,133968,133970,133972,133974],{"class":51,"line":1306},[49,133965,132100],{"class":2055},[49,133967,79896],{"class":55},[49,133969,128975],{"class":66},[49,133971,51526],{"class":55},[49,133973,54920],{"class":66},[49,133975,129545],{"class":55},[49,133977,133978],{"class":51,"line":1312},[49,133979,132115],{"class":283},[49,133981,133982,133984,133986,133988,133990,133992],{"class":51,"line":1403},[49,133983,132120],{"class":2055},[49,133985,79896],{"class":55},[49,133987,128975],{"class":66},[49,133989,51526],{"class":55},[49,133991,86322],{"class":66},[49,133993,129545],{"class":55},[49,133995,133996],{"class":51,"line":1409},[49,133997,132135],{"class":283},[49,133999,134000,134002,134004,134006,134008,134010],{"class":51,"line":1421},[49,134001,132140],{"class":2055},[49,134003,79896],{"class":55},[49,134005,128975],{"class":66},[49,134007,51526],{"class":55},[49,134009,132149],{"class":66},[49,134011,129545],{"class":55},[14,134013,134014],{},"分布思路重点详解：",[39,134016,134017],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,134018,134019,134023,134037,134041,134055,134059,134073,134077,134091,134095],{"__ignoreMap":44},[49,134020,134021],{"class":51,"line":52},[49,134022,132054],{"class":283},[49,134024,134025,134027,134029,134031,134033,134035],{"class":51,"line":84},[49,134026,132059],{"class":2055},[49,134028,79896],{"class":55},[49,134030,128975],{"class":66},[49,134032,51526],{"class":55},[49,134034,132068],{"class":66},[49,134036,129545],{"class":55},[49,134038,134039],{"class":51,"line":109},[49,134040,132075],{"class":283},[49,134042,134043,134045,134047,134049,134051,134053],{"class":51,"line":120},[49,134044,132080],{"class":2055},[49,134046,79896],{"class":55},[49,134048,128975],{"class":66},[49,134050,51526],{"class":55},[49,134052,54853],{"class":66},[49,134054,129545],{"class":55},[49,134056,134057],{"class":51,"line":135},[49,134058,132095],{"class":283},[49,134060,134061,134063,134065,134067,134069,134071],{"class":51,"line":1306},[49,134062,132100],{"class":2055},[49,134064,79896],{"class":55},[49,134066,128975],{"class":66},[49,134068,51526],{"class":55},[49,134070,54920],{"class":66},[49,134072,129545],{"class":55},[49,134074,134075],{"class":51,"line":1312},[49,134076,132115],{"class":283},[49,134078,134079,134081,134083,134085,134087,134089],{"class":51,"line":1403},[49,134080,132120],{"class":2055},[49,134082,79896],{"class":55},[49,134084,128975],{"class":66},[49,134086,51526],{"class":55},[49,134088,86322],{"class":66},[49,134090,129545],{"class":55},[49,134092,134093],{"class":51,"line":1409},[49,134094,132135],{"class":283},[49,134096,134097,134099,134101,134103,134105,134107],{"class":51,"line":1421},[49,134098,132140],{"class":2055},[49,134100,79896],{"class":55},[49,134102,128975],{"class":66},[49,134104,51526],{"class":55},[49,134106,132149],{"class":66},[49,134108,129545],{"class":55},[1554,134110],{"style":126471,"src":134111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134113,134114],{},"图片太大，盒子太小，此时需要修改图片的大小",[39,134116,134118],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[46,134119,134120],{"__ignoreMap":44},[49,134121,134122,134124,134126,134128,134130,134133,134135,134137,134140,134143,134145,134148],{"class":51,"line":52},[49,134123,1129],{"class":55},[49,134125,1554],{"class":51389},[49,134127,55328],{"class":2055},[49,134129,60],{"class":55},[49,134131,134132],{"class":328},"\"images\u002Fpic.jpg\"",[49,134134,55336],{"class":2055},[49,134136,60],{"class":55},[49,134138,134139],{"class":328},"\"描述文字\"",[49,134141,134142],{"class":2055}," title",[49,134144,60],{"class":55},[49,134146,134147],{"class":328},"\"悬停提示\"",[49,134149,51396],{"class":55},[1554,134151],{"style":126471,"src":134152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134154,134155],{},"制造遮罩层",[39,134157,134158],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,134159,134160],{"__ignoreMap":44},[49,134161,134162,134164,134166,134168,134170,134172,134174,134176,134178,134180,134182,134184],{"class":51,"line":52},[49,134163,1129],{"class":55},[49,134165,1554],{"class":51389},[49,134167,55328],{"class":2055},[49,134169,60],{"class":55},[49,134171,134132],{"class":328},[49,134173,55336],{"class":2055},[49,134175,60],{"class":55},[49,134177,134139],{"class":328},[49,134179,134142],{"class":2055},[49,134181,60],{"class":55},[49,134183,134147],{"class":328},[49,134185,51396],{"class":55},[14,134187,134188],{},"此时是这样的为标准流",[1554,134190],{"style":126471,"src":134191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134193,134194],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134196,134197],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134199,134200],{},"让他在中间，用center(background-position)",[14,134202,134203],{},"将需要变的尽可能放到一个盒子中",[14,134205,134206],{},"放大盒子上内部盒子发生变化",[39,134208,134210],{"className":126615,"code":134209,"language":126617,"meta":44,"style":44},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[46,134211,134212,134218,134228,134232,134239,134249,134261,134273],{"__ignoreMap":44},[49,134213,134214,134216],{"class":51,"line":52},[49,134215,127682],{"class":2055},[49,134217,15662],{"class":55},[49,134219,134220,134222,134224,134226],{"class":51,"line":84},[49,134221,132421],{"class":66},[49,134223,51526],{"class":55},[49,134225,54853],{"class":66},[49,134227,1382],{"class":55},[49,134229,134230],{"class":51,"line":109},[49,134231,1657],{"class":55},[49,134233,134234,134237],{"class":51,"line":120},[49,134235,134236],{"class":2055},".child",[49,134238,15662],{"class":55},[49,134240,134241,134243,134245,134247],{"class":51,"line":135},[49,134242,132421],{"class":66},[49,134244,51526],{"class":55},[49,134246,54920],{"class":66},[49,134248,1382],{"class":55},[49,134250,134251,134253,134255,134257,134259],{"class":51,"line":1306},[49,134252,132435],{"class":66},[49,134254,51526],{"class":55},[49,134256,875],{"class":66},[49,134258,550],{"class":59},[49,134260,1382],{"class":55},[49,134262,134263,134265,134267,134269,134271],{"class":51,"line":1312},[49,134264,132452],{"class":66},[49,134266,51526],{"class":55},[49,134268,875],{"class":66},[49,134270,550],{"class":59},[49,134272,1382],{"class":55},[49,134274,134275],{"class":51,"line":1403},[49,134276,1657],{"class":55},[14,134278,134279],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[166,134281,134283],{"id":134282},"_122-精灵图","12.2 精灵图",[195,134285,134287],{"id":134286},"_1221-理解","12.2.1 理解",[178,134289,134290,134308],{},[181,134291,134292,134293,132521,134296,134299,134300,134303,134304,134307],{},"目的： ",[373,134294,134295],{},"为了有效地减少服务器接收和发送请求的次数",[373,134297,134298],{},"提高"," 页面的 ",[373,134301,134302],{},"加载速度"," ，出现了 ",[373,134305,134306],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[181,134309,134310,134311,134313,134314,134316,134317,134319,134320,134322,134323,134325,134326,134328],{},"使用精灵图核心：",[53805,134312],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53805,134315],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53805,134318],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53805,134321],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53805,134324],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53805,134327],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[195,134330,134332],{"id":134331},"_1222-扒图","12.2.2 扒图",[39,134334,134337],{"className":134335,"code":134336,"language":5278},[5276],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[46,134338,134336],{"__ignoreMap":44},[1554,134340],{"style":126471,"src":134341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1554,134343],{"style":126471,"src":134344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[195,134346,134348],{"id":134347},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1554,134350],{"style":126471,"src":134351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134353,134354],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1554,134356],{"style":126471,"src":134357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[39,134359,134361],{"className":126615,"code":134360,"language":126617,"meta":44,"style":44},"\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",[46,134362,134363,134368,134375,134387,134399,134418,134435],{"__ignoreMap":44},[49,134364,134365],{"class":51,"line":52},[49,134366,134367],{"class":283},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[49,134369,134370,134373],{"class":51,"line":84},[49,134371,134372],{"class":2055},".icon",[49,134374,15662],{"class":55},[49,134376,134377,134379,134381,134383,134385],{"class":51,"line":109},[49,134378,70657],{"class":66},[49,134380,51526],{"class":55},[49,134382,919],{"class":66},[49,134384,51581],{"class":59},[49,134386,1382],{"class":55},[49,134388,134389,134391,134393,134395,134397],{"class":51,"line":120},[49,134390,70877],{"class":66},[49,134392,51526],{"class":55},[49,134394,919],{"class":66},[49,134396,51581],{"class":59},[49,134398,1382],{"class":55},[49,134400,134401,134403,134405,134407,134409,134412,134414,134416],{"class":51,"line":135},[49,134402,70700],{"class":66},[49,134404,51526],{"class":55},[49,134406,61815],{"class":66},[49,134408,228],{"class":55},[49,134410,134411],{"class":126},"sprites.png",[49,134413,13804],{"class":55},[49,134415,61825],{"class":66},[49,134417,1382],{"class":55},[49,134419,134420,134422,134424,134426,134428,134431,134433],{"class":51,"line":1306},[49,134421,128875],{"class":66},[49,134423,51526],{"class":55},[49,134425,51852],{"class":66},[49,134427,51581],{"class":59},[49,134429,134430],{"class":66}," -20",[49,134432,51581],{"class":59},[49,134434,1382],{"class":55},[49,134436,134437],{"class":51,"line":1312},[49,134438,1657],{"class":55},[1554,134440],{"style":126471,"src":134441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134443,134444],{},"在前端中坐标轴的正方向是右和下",[166,134446,134448],{"id":134447},"_123-字体图标","12.3 字体图标",[195,134450,134452],{"id":134451},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134454,134455],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134457,134458],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134460,134461],{},"1.图片文件还是比较大的。",[14,134463,134464],{},"2.图片本身放大和缩小会失真。",[14,134466,134467],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134469,134470,134471,25831],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[373,134472,134473],{},"字体图标 iconfont",[14,134475,134476,134479,134480,28476],{},[373,134477,134478],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[373,134481,134482],{},"展示的是图标，本质属于字体",[195,134484,134486],{"id":134485},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1226,134488,134489,134494,134497,134500,134503],{},[181,134490,134491,134493],{},[373,134492,25967],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[181,134495,134496],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[181,134498,134499],{},"兼容性：几乎支持所有的浏览器，请放心使用",[181,134501,134502],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[181,134504,134505],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[195,134507,134509],{"id":134508},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1226,134511,134512],{},[181,134513,134514,134515],{},"icomoon字体库：",[56,134516,134519],{"href":134517,"rel":134518},"http:\u002F\u002Ficomoon.io\u002F",[23955],"http:\u002F\u002Ficomoon.io",[14,134521,134522],{},"进去之后点icomoon app",[1554,134524],{"style":126471,"src":134525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134527,134528],{},"可以对其编辑：",[1554,134530],{"style":126471,"src":134531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134533,134534],{},"生成字体：",[1554,134536],{"style":126471,"src":134537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134539,134540],{},"下载：",[1554,134542],{"style":126471,"src":134543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1226,134545,134546],{},[181,134547,134548,134549],{},"阿里iconfont字体库： ",[56,134550,134551],{"href":134551,"rel":134552},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23955],[195,134554,134556],{"id":134555},"_1234-字体图标的引入","12.3.4 字体图标的引入",[178,134558,134559],{},[181,134560,134561,134562,134565],{},"把下载包里面的 ",[373,134563,134564],{},"fonts"," 文件夹放入页面根目录下",[1554,134567],{"style":126471,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[178,134570,134571],{"start":84},[181,134572,134573],{},"字体文件格式",[361,134575,134576,134585],{},[364,134577,134578],{},[367,134579,134580,134583],{},[370,134581,134582],{"align":23826},"格式",[370,134584,23830],{"align":23826},[408,134586,134587,134597,134607,134617],{},[367,134588,134589,134594],{},[413,134590,134591],{"align":23826},[373,134592,134593],{},".ttf",[413,134595,134596],{"align":23826},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[367,134598,134599,134604],{},[413,134600,134601],{"align":23826},[373,134602,134603],{},".woff",[413,134605,134606],{"align":23826},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[367,134608,134609,134614],{},[413,134610,134611],{"align":23826},[373,134612,134613],{},".eot",[413,134615,134616],{"align":23826},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[367,134618,134619,134624],{},[413,134620,134621],{"align":23826},[373,134622,134623],{},"svg",[413,134625,134626],{"align":23826},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[178,134628,134629],{"start":109},[181,134630,134631],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[39,134633,134635],{"className":126615,"code":134634,"language":126617,"meta":44,"style":44},"\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",[46,134636,134637,134642,134649,134661,134677,134702,134723,134743,134763,134767,134773,134783,134794],{"__ignoreMap":44},[49,134638,134639],{"class":51,"line":52},[49,134640,134641],{"class":283},"\u002F* 引入字体图标 *\u002F\n",[49,134643,134644,134647],{"class":51,"line":84},[49,134645,134646],{"class":59},"@font-face",[49,134648,15662],{"class":55},[49,134650,134651,134654,134656,134659],{"class":51,"line":109},[49,134652,134653],{"class":66},"  font-family",[49,134655,51526],{"class":55},[49,134657,134658],{"class":328},"'icomoon'",[49,134660,1382],{"class":55},[49,134662,134663,134666,134668,134670,134672,134675],{"class":51,"line":120},[49,134664,134665],{"class":66},"  src",[49,134667,51526],{"class":55},[49,134669,61815],{"class":66},[49,134671,228],{"class":55},[49,134673,134674],{"class":328},"'fonts\u002Ficomoon.eot'",[49,134676,2811],{"class":55},[49,134678,134679,134681,134683,134685,134687,134690,134692,134695,134697,134700],{"class":51,"line":135},[49,134680,134665],{"class":66},[49,134682,51526],{"class":55},[49,134684,61815],{"class":66},[49,134686,228],{"class":55},[49,134688,134689],{"class":328},"'fonts\u002Ficomoon.eot?#iefix'",[49,134691,13804],{"class":55},[49,134693,134694],{"class":66},"format",[49,134696,228],{"class":55},[49,134698,134699],{"class":328},"'embedded-opentype'",[49,134701,38136],{"class":55},[49,134703,134704,134707,134709,134712,134714,134716,134718,134721],{"class":51,"line":1306},[49,134705,134706],{"class":66},"       url",[49,134708,228],{"class":55},[49,134710,134711],{"class":328},"'fonts\u002Ficomoon.woff'",[49,134713,13804],{"class":55},[49,134715,134694],{"class":66},[49,134717,228],{"class":55},[49,134719,134720],{"class":328},"'woff'",[49,134722,38136],{"class":55},[49,134724,134725,134727,134729,134732,134734,134736,134738,134741],{"class":51,"line":1312},[49,134726,134706],{"class":66},[49,134728,228],{"class":55},[49,134730,134731],{"class":328},"'fonts\u002Ficomoon.ttf'",[49,134733,13804],{"class":55},[49,134735,134694],{"class":66},[49,134737,228],{"class":55},[49,134739,134740],{"class":328},"'truetype'",[49,134742,38136],{"class":55},[49,134744,134745,134747,134749,134752,134754,134756,134758,134761],{"class":51,"line":1403},[49,134746,134706],{"class":66},[49,134748,228],{"class":55},[49,134750,134751],{"class":328},"'fonts\u002Ficomoon.svg#icomoon'",[49,134753,13804],{"class":55},[49,134755,134694],{"class":66},[49,134757,228],{"class":55},[49,134759,134760],{"class":328},"'svg'",[49,134762,2811],{"class":55},[49,134764,134765],{"class":51,"line":1409},[49,134766,1657],{"class":55},[49,134768,134769,134771],{"class":51,"line":1421},[49,134770,134372],{"class":2055},[49,134772,15662],{"class":55},[49,134774,134775,134777,134779,134781],{"class":51,"line":1704},[49,134776,134653],{"class":66},[49,134778,51526],{"class":55},[49,134780,134658],{"class":328},[49,134782,1382],{"class":55},[49,134784,134785,134788,134790,134792],{"class":51,"line":1709},[49,134786,134787],{"class":66},"  font-style",[49,134789,51526],{"class":55},[49,134791,63930],{"class":66},[49,134793,1382],{"class":55},[49,134795,134796],{"class":51,"line":1715},[49,134797,1657],{"class":55},[14,134799,134800],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1554,134802],{"style":126471,"src":134803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[178,134805,134806],{"start":120},[181,134807,134808],{},"添加字体",[1554,134810],{"style":126471,"src":134811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134813,134814],{},"复制：",[1554,134816],{"style":126471,"src":134817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134819,134820],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[178,134822,134823],{"start":135},[181,134824,134825],{},"代码展示：",[39,134827,134828],{"className":126615,"code":134634,"language":126617,"meta":44,"style":44},[46,134829,134830,134834,134840,134850,134864,134886,134904,134922,134940,134944,134950,134960,134970],{"__ignoreMap":44},[49,134831,134832],{"class":51,"line":52},[49,134833,134641],{"class":283},[49,134835,134836,134838],{"class":51,"line":84},[49,134837,134646],{"class":59},[49,134839,15662],{"class":55},[49,134841,134842,134844,134846,134848],{"class":51,"line":109},[49,134843,134653],{"class":66},[49,134845,51526],{"class":55},[49,134847,134658],{"class":328},[49,134849,1382],{"class":55},[49,134851,134852,134854,134856,134858,134860,134862],{"class":51,"line":120},[49,134853,134665],{"class":66},[49,134855,51526],{"class":55},[49,134857,61815],{"class":66},[49,134859,228],{"class":55},[49,134861,134674],{"class":328},[49,134863,2811],{"class":55},[49,134865,134866,134868,134870,134872,134874,134876,134878,134880,134882,134884],{"class":51,"line":135},[49,134867,134665],{"class":66},[49,134869,51526],{"class":55},[49,134871,61815],{"class":66},[49,134873,228],{"class":55},[49,134875,134689],{"class":328},[49,134877,13804],{"class":55},[49,134879,134694],{"class":66},[49,134881,228],{"class":55},[49,134883,134699],{"class":328},[49,134885,38136],{"class":55},[49,134887,134888,134890,134892,134894,134896,134898,134900,134902],{"class":51,"line":1306},[49,134889,134706],{"class":66},[49,134891,228],{"class":55},[49,134893,134711],{"class":328},[49,134895,13804],{"class":55},[49,134897,134694],{"class":66},[49,134899,228],{"class":55},[49,134901,134720],{"class":328},[49,134903,38136],{"class":55},[49,134905,134906,134908,134910,134912,134914,134916,134918,134920],{"class":51,"line":1312},[49,134907,134706],{"class":66},[49,134909,228],{"class":55},[49,134911,134731],{"class":328},[49,134913,13804],{"class":55},[49,134915,134694],{"class":66},[49,134917,228],{"class":55},[49,134919,134740],{"class":328},[49,134921,38136],{"class":55},[49,134923,134924,134926,134928,134930,134932,134934,134936,134938],{"class":51,"line":1403},[49,134925,134706],{"class":66},[49,134927,228],{"class":55},[49,134929,134751],{"class":328},[49,134931,13804],{"class":55},[49,134933,134694],{"class":66},[49,134935,228],{"class":55},[49,134937,134760],{"class":328},[49,134939,2811],{"class":55},[49,134941,134942],{"class":51,"line":1409},[49,134943,1657],{"class":55},[49,134945,134946,134948],{"class":51,"line":1421},[49,134947,134372],{"class":2055},[49,134949,15662],{"class":55},[49,134951,134952,134954,134956,134958],{"class":51,"line":1704},[49,134953,134653],{"class":66},[49,134955,51526],{"class":55},[49,134957,134658],{"class":328},[49,134959,1382],{"class":55},[49,134961,134962,134964,134966,134968],{"class":51,"line":1709},[49,134963,134787],{"class":66},[49,134965,51526],{"class":55},[49,134967,63930],{"class":66},[49,134969,1382],{"class":55},[49,134971,134972],{"class":51,"line":1715},[49,134973,1657],{"class":55},[1554,134975],{"style":126471,"src":134976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134978,134979],{},"更加细节展示：",[178,134981,134982],{},[181,134983,134984],{},"html 标签内添加小图标",[1554,134986],{"style":126471,"src":134987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[178,134989,134990],{"start":84},[181,134991,134992],{},"给标签定义字体",[39,134994,134995],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,134996,134997,135001,135015,135019],{"__ignoreMap":44},[49,134998,134999],{"class":51,"line":52},[49,135000,130726],{"class":283},[49,135002,135003,135005,135007,135009,135011,135013],{"class":51,"line":84},[49,135004,1129],{"class":55},[49,135006,51700],{"class":51389},[49,135008,53575],{"class":2055},[49,135010,60],{"class":55},[49,135012,130739],{"class":328},[49,135014,51396],{"class":55},[49,135016,135017],{"class":51,"line":109},[49,135018,130746],{"class":55},[49,135020,135021,135023,135025],{"class":51,"line":120},[49,135022,51874],{"class":55},[49,135024,51700],{"class":51389},[49,135026,51396],{"class":55},[14,135028,135029],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1554,135031],{"style":126471,"src":135032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[195,135034,135036],{"id":135035},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135038,135039],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135041,135042,135043,135046],{},"把压缩包里面的 ",[373,135044,135045],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135048,135049],{},"打开网站，点下方：",[1554,135051],{"style":126471,"src":135052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1554,135054],{"style":126471,"src":135055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1554,135057],{"style":126471,"src":135058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135060,135061],{},"点yes重新加载",[14,135063,135064],{},"然后重复之前的操作就可以实现了",[14,135066,135067],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[195,135069,135071],{"id":135070},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1554,135073],{"style":126471,"src":135074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[143,135076,135077],{},"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":44,"searchDepth":84,"depth":84,"links":135079},[135080,135086,135091],{"id":133683,"depth":84,"text":133684,"children":135081},[135082,135083,135084,135085],{"id":133695,"depth":109,"text":133696},{"id":133724,"depth":109,"text":133725},{"id":133752,"depth":109,"text":133753},{"id":133810,"depth":109,"text":133811},{"id":134282,"depth":84,"text":134283,"children":135087},[135088,135089,135090],{"id":134286,"depth":109,"text":134287},{"id":134331,"depth":109,"text":134332},{"id":134347,"depth":109,"text":134348},{"id":134447,"depth":84,"text":134448,"children":135092},[135093,135094,135095,135096,135097,135098],{"id":134451,"depth":109,"text":134452},{"id":134485,"depth":109,"text":134486},{"id":134508,"depth":109,"text":134509},{"id":134555,"depth":109,"text":134556},{"id":135035,"depth":109,"text":135036},{"id":135070,"depth":109,"text":135071},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133675,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135105,"title":135106,"body":135107,"description":148,"extension":149,"meta":136334,"navigation":151,"path":136335,"seo":136336,"stem":136337,"__hash__":136338},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135108,"toc":136315},[135109,135112,135116,135119,135133,135201,135231,135234,135238,135242,135344,135391,135395,135398,135401,135435,135438,135441,135444,135447,135450,135453,135456,135458,135461,135464,135467,135470,135473,135476,135479,135507,135510,135514,135517,135524,135527,135530,135556,135559,135563,135566,135569,135576,135580,135583,135585,135617,135620,135623,135635,135641,135644,135647,135650,135652,135656,135659,135662,135665,135710,135714,135716,135719,135726,135768,135771,135775,135780,135794,135798,135801,135804,135807,135810,135813,135847,135850,135853,135907,135910,135913,135916,135919,135971,135974,135977,136026,136030,136032,136035,136038,136041,136044,136047,136105,136108,136114,136117,136120,136152,136155,136159,136163,136166,136198,136202,136205,136249,136253,136256,136259,136262,136265,136268,136271,136274,136276,136279,136281,136284,136287,136290,136293,136298,136301,136303,136306,136309,136312],[10,135110,135106],{"id":135111},"_13-界面样式与布局技巧",[166,135113,135115],{"id":135114},"_131-css三角","13.1 css三角",[14,135117,135118],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1226,135120,135121,135124,135127,135130],{},[181,135122,135123],{},"用css 边框可以模拟三角效果",[181,135125,135126],{},"宽度高度为0",[181,135128,135129],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[181,135131,135132],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[39,135134,135136],{"className":126615,"code":135135,"language":126617,"meta":44,"style":44},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[46,135137,135138,135143,135150,135160,135170,135186,135197],{"__ignoreMap":44},[49,135139,135140],{"class":51,"line":52},[49,135141,135142],{"class":283},"\u002F* CSS 实现三角形 *\u002F\n",[49,135144,135145,135148],{"class":51,"line":84},[49,135146,135147],{"class":2055},".triangle",[49,135149,15662],{"class":55},[49,135151,135152,135154,135156,135158],{"class":51,"line":109},[49,135153,70657],{"class":66},[49,135155,51526],{"class":55},[49,135157,415],{"class":66},[49,135159,1382],{"class":55},[49,135161,135162,135164,135166,135168],{"class":51,"line":120},[49,135163,70877],{"class":66},[49,135165,51526],{"class":55},[49,135167,415],{"class":66},[49,135169,1382],{"class":55},[49,135171,135172,135174,135176,135178,135180,135182,135184],{"class":51,"line":135},[49,135173,70985],{"class":66},[49,135175,51526],{"class":55},[49,135177,95],{"class":66},[49,135179,51581],{"class":59},[49,135181,51610],{"class":66},[49,135183,64080],{"class":66},[49,135185,1382],{"class":55},[49,135187,135188,135191,135193,135195],{"class":51,"line":1306},[49,135189,135190],{"class":66},"  border-bottom-color",[49,135192,51526],{"class":55},[49,135194,62458],{"class":66},[49,135196,1382],{"class":55},[49,135198,135199],{"class":51,"line":1312},[49,135200,1657],{"class":55},[39,135202,135203],{"className":126615,"code":130772,"language":126617,"meta":44,"style":44},[46,135204,135205,135211,135227],{"__ignoreMap":44},[49,135206,135207,135209],{"class":51,"line":52},[49,135208,51700],{"class":51389},[49,135210,15662],{"class":55},[49,135212,135213,135215,135217,135219,135221,135223,135225],{"class":51,"line":84},[49,135214,70985],{"class":66},[49,135216,51526],{"class":55},[49,135218,441],{"class":66},[49,135220,51581],{"class":59},[49,135222,51610],{"class":66},[49,135224,130007],{"class":66},[49,135226,1382],{"class":55},[49,135228,135229],{"class":51,"line":109},[49,135230,1657],{"class":55},[1554,135232],{"style":126471,"src":135233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[166,135235,135237],{"id":135236},"_132-css用户界面样式","13.2 css用户界面样式",[195,135239,135241],{"id":135240},"_1321-鼠标样式","13.2.1 鼠标样式",[39,135243,135245],{"className":126615,"code":135244,"language":126617,"meta":44,"style":44},"\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",[46,135246,135247,135252,135271,135289,135308,135325],{"__ignoreMap":44},[49,135248,135249],{"class":51,"line":52},[49,135250,135251],{"class":283},"\u002F* 鼠标样式 *\u002F\n",[49,135253,135254,135256,135258,135261,135263,135265,135268],{"class":51,"line":84},[49,135255,51700],{"class":51389},[49,135257,79896],{"class":55},[49,135259,135260],{"class":66},"cursor",[49,135262,51526],{"class":55},[49,135264,62119],{"class":66},[49,135266,135267],{"class":55},"; }   ",[49,135269,135270],{"class":283},"\u002F* 手型 *\u002F\n",[49,135272,135273,135275,135277,135279,135281,135284,135286],{"class":51,"line":109},[49,135274,51700],{"class":51389},[49,135276,79896],{"class":55},[49,135278,135260],{"class":66},[49,135280,51526],{"class":55},[49,135282,135283],{"class":66},"default",[49,135285,135267],{"class":55},[49,135287,135288],{"class":283},"\u002F* 默认 *\u002F\n",[49,135290,135291,135293,135295,135297,135299,135302,135305],{"class":51,"line":120},[49,135292,51700],{"class":51389},[49,135294,79896],{"class":55},[49,135296,135260],{"class":66},[49,135298,51526],{"class":55},[49,135300,135301],{"class":66},"move",[49,135303,135304],{"class":55},"; }      ",[49,135306,135307],{"class":283},"\u002F* 移动 *\u002F\n",[49,135309,135310,135312,135314,135316,135318,135320,135322],{"class":51,"line":135},[49,135311,51700],{"class":51389},[49,135313,79896],{"class":55},[49,135315,135260],{"class":66},[49,135317,51526],{"class":55},[49,135319,5278],{"class":66},[49,135321,135304],{"class":55},[49,135323,135324],{"class":283},"\u002F* 文本 *\u002F\n",[49,135326,135327,135329,135331,135333,135335,135338,135341],{"class":51,"line":1306},[49,135328,51700],{"class":51389},[49,135330,79896],{"class":55},[49,135332,135260],{"class":66},[49,135334,51526],{"class":55},[49,135336,135337],{"class":66},"not-allowed",[49,135339,135340],{"class":55},"; } ",[49,135342,135343],{"class":283},"\u002F* 禁止 *\u002F\n",[361,135345,135346,135354],{},[364,135347,135348],{},[367,135349,135350,135352],{},[370,135351,127079],{"align":23826},[370,135353,27580],{"align":23826},[408,135355,135356,135363,135370,135377,135384],{},[367,135357,135358,135360],{},[413,135359,135283],{"align":23826},[413,135361,135362],{"align":23826},"小白 默认",[367,135364,135365,135367],{},[413,135366,62119],{"align":23826},[413,135368,135369],{"align":23826},"小手",[367,135371,135372,135374],{},[413,135373,135301],{"align":23826},[413,135375,135376],{"align":23826},"移动",[367,135378,135379,135381],{},[413,135380,5278],{"align":23826},[413,135382,135383],{"align":23826},"文本",[367,135385,135386,135388],{},[413,135387,135337],{"align":23826},[413,135389,135390],{"align":23826},"禁止",[195,135392,135394],{"id":135393},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135396,135397],{},"去除表单轮廓线",[14,135399,135400],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[39,135402,135403],{"className":126615,"code":129979,"language":126617,"meta":44,"style":44},[46,135404,135405,135409,135415,135431],{"__ignoreMap":44},[49,135406,135407],{"class":51,"line":52},[49,135408,129986],{"class":283},[49,135410,135411,135413],{"class":51,"line":84},[49,135412,51700],{"class":51389},[49,135414,15662],{"class":55},[49,135416,135417,135419,135421,135423,135425,135427,135429],{"class":51,"line":109},[49,135418,70985],{"class":66},[49,135420,51526],{"class":55},[49,135422,441],{"class":66},[49,135424,51581],{"class":59},[49,135426,51610],{"class":66},[49,135428,130007],{"class":66},[49,135430,1382],{"class":55},[49,135432,135433],{"class":51,"line":120},[49,135434,1657],{"class":55},[14,135436,135437],{},"文本域：",[1554,135439],{"style":126471,"src":135440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135442,135443],{},"此时会有一个空白区域",[1554,135445],{"style":126471,"src":135446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135448,135449],{},"写在同一行就不会出现这个问题",[1554,135451],{"style":126471,"src":135452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135454,135455],{},"文本域是行内块元素，一定记住！！！",[14,135457,98296],{},[1554,135459],{"style":126471,"src":135460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135462,135463],{},"文本域尽量放在一行",[14,135465,135466],{},"知识回顾：cols是列，rols是行",[1554,135468],{"style":126471,"src":135469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135471,135472],{},"它可以进行拖动，显然这是我们不愿意看到的",[1554,135474],{"style":126471,"src":135475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135477,135478],{},"使用resize进行解决",[39,135480,135482],{"className":126615,"code":135481,"language":126617,"meta":44,"style":44},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[46,135483,135484,135490,135503],{"__ignoreMap":44},[49,135485,135486,135488],{"class":51,"line":52},[49,135487,53910],{"class":51389},[49,135489,15662],{"class":55},[49,135491,135492,135494,135496,135498,135500],{"class":51,"line":84},[49,135493,70887],{"class":66},[49,135495,51526],{"class":55},[49,135497,54826],{"class":66},[49,135499,130478],{"class":55},[49,135501,135502],{"class":283},"\u002F* 取消表单轮廓线 *\u002F\n",[49,135504,135505],{"class":51,"line":109},[49,135506,1657],{"class":55},[14,135508,135509],{},"此时就无法通过右下方实现拖动了",[195,135511,135513],{"id":135512},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135515,135516],{},"实现一个盒子中的文字和图片对齐",[14,135518,135519,135520,135523],{},"用于设置一个元素的 ",[373,135521,135522],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135525,135526],{},"图片和文字默认是基线对齐",[1554,135528],{"style":126471,"src":135529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[39,135531,135532],{"className":126615,"code":135481,"language":126617,"meta":44,"style":44},[46,135533,135534,135540,135552],{"__ignoreMap":44},[49,135535,135536,135538],{"class":51,"line":52},[49,135537,53910],{"class":51389},[49,135539,15662],{"class":55},[49,135541,135542,135544,135546,135548,135550],{"class":51,"line":84},[49,135543,70887],{"class":66},[49,135545,51526],{"class":55},[49,135547,54826],{"class":66},[49,135549,130478],{"class":55},[49,135551,135502],{"class":283},[49,135553,135554],{"class":51,"line":109},[49,135555,1657],{"class":55},[1554,135557],{"style":126471,"src":135558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22088,135560,135562],{"id":135561},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135564,135565],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1554,135567],{"style":126471,"src":135568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135570,135571,135572,135575],{},"此时可以给图片、表单这些行内块元素的 ",[373,135573,135574],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22088,135577,135579],{"id":135578},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135581,135582],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135584,14723],{},[39,135586,135588],{"className":126615,"code":135587,"language":126617,"meta":44,"style":44},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[46,135589,135590,135595,135601,135613],{"__ignoreMap":44},[49,135591,135592],{"class":51,"line":52},[49,135593,135594],{"class":283},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[49,135596,135597,135599],{"class":51,"line":84},[49,135598,1554],{"class":51389},[49,135600,15662],{"class":55},[49,135602,135603,135606,135608,135611],{"class":51,"line":109},[49,135604,135605],{"class":66},"  vertical-align",[49,135607,51526],{"class":55},[49,135609,135610],{"class":66},"middle",[49,135612,1382],{"class":55},[49,135614,135615],{"class":51,"line":120},[49,135616,1657],{"class":55},[1554,135618],{"style":126471,"src":135619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135621,135622],{},"主要解决方法有两种：",[178,135624,135625],{},[181,135626,135627,135630,135631,135634],{},[373,135628,135629],{},"给图片"," 添加 ",[373,135632,135633],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135636,135637,135638],{},"2.把图片转换为块级元素 ",[373,135639,135640],{},"display: block",[14,135642,135643],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135645,135646],{},"img {",[14,135648,135649],{},"vertical-align:middle;",[14,135651,1165],{},[195,135653,135655],{"id":135654},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135657,135658],{},"效果：",[1554,135660],{"style":126471,"src":135661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135663,135664],{},"单行文本溢出显示省略号--必须满足三个条件：",[39,135666,135668],{"className":126615,"code":135667,"language":126617,"meta":44,"style":44},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[46,135669,135670,135675,135681,135691,135696,135706],{"__ignoreMap":44},[49,135671,135672],{"class":51,"line":52},[49,135673,135674],{"class":283},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[49,135676,135677,135679],{"class":51,"line":84},[49,135678,1554],{"class":51389},[49,135680,15662],{"class":55},[49,135682,135683,135685,135687,135689],{"class":51,"line":109},[49,135684,135605],{"class":66},[49,135686,51526],{"class":55},[49,135688,135610],{"class":66},[49,135690,1382],{"class":55},[49,135692,135693],{"class":51,"line":120},[49,135694,135695],{"class":283},"  \u002F* 或 *\u002F\n",[49,135697,135698,135700,135702,135704],{"class":51,"line":135},[49,135699,128231],{"class":66},[49,135701,51526],{"class":55},[49,135703,60958],{"class":66},[49,135705,1382],{"class":55},[49,135707,135708],{"class":51,"line":1306},[49,135709,1657],{"class":55},[195,135711,135713],{"id":135712},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135715,135658],{},[1554,135717],{"style":126471,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135720,135721,135722,135725],{},"多行文本溢出显示省略号， ",[373,135723,135724],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[39,135727,135728],{"className":126615,"code":135667,"language":126617,"meta":44,"style":44},[46,135729,135730,135734,135740,135750,135754,135764],{"__ignoreMap":44},[49,135731,135732],{"class":51,"line":52},[49,135733,135674],{"class":283},[49,135735,135736,135738],{"class":51,"line":84},[49,135737,1554],{"class":51389},[49,135739,15662],{"class":55},[49,135741,135742,135744,135746,135748],{"class":51,"line":109},[49,135743,135605],{"class":66},[49,135745,51526],{"class":55},[49,135747,135610],{"class":66},[49,135749,1382],{"class":55},[49,135751,135752],{"class":51,"line":120},[49,135753,135695],{"class":283},[49,135755,135756,135758,135760,135762],{"class":51,"line":135},[49,135757,128231],{"class":66},[49,135759,51526],{"class":55},[49,135761,60958],{"class":66},[49,135763,1382],{"class":55},[49,135765,135766],{"class":51,"line":1306},[49,135767,1657],{"class":55},[14,135769,135770],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[166,135772,135774],{"id":135773},"_133-常见布局技巧","13.3 常见布局技巧",[14,135776,135777],{},[373,135778,135779],{},"巧妙利用一个技术更快更好的布局：",[178,135781,135782,135785,135788,135791],{},[181,135783,135784],{},"margin负值的运用",[181,135786,135787],{},"文字围绕浮动元素",[181,135789,135790],{},"行内块的巧妙运用",[181,135792,135793],{},"CSS三角强化",[195,135795,135797],{"id":135796},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135799,135800],{},"应用场景：",[1554,135802],{"style":126471,"src":135803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1554,135805],{"style":126471,"src":135806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135808,135809],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135811,135812],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[39,135814,135815],{"className":126615,"code":129979,"language":126617,"meta":44,"style":44},[46,135816,135817,135821,135827,135843],{"__ignoreMap":44},[49,135818,135819],{"class":51,"line":52},[49,135820,129986],{"class":283},[49,135822,135823,135825],{"class":51,"line":84},[49,135824,51700],{"class":51389},[49,135826,15662],{"class":55},[49,135828,135829,135831,135833,135835,135837,135839,135841],{"class":51,"line":109},[49,135830,70985],{"class":66},[49,135832,51526],{"class":55},[49,135834,441],{"class":66},[49,135836,51581],{"class":59},[49,135838,51610],{"class":66},[49,135840,130007],{"class":66},[49,135842,1382],{"class":55},[49,135844,135845],{"class":51,"line":120},[49,135846,1657],{"class":55},[1554,135848],{"style":126471,"src":135849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135851,135852],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[39,135854,135856],{"className":126615,"code":135855,"language":126617,"meta":44,"style":44},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,135857,135858,135863,135869,135879,135891,135903],{"__ignoreMap":44},[49,135859,135860],{"class":51,"line":52},[49,135861,135862],{"class":283},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[49,135864,135865,135867],{"class":51,"line":84},[49,135866,130463],{"class":2055},[49,135868,15662],{"class":55},[49,135870,135871,135873,135875,135877],{"class":51,"line":109},[49,135872,132421],{"class":66},[49,135874,51526],{"class":55},[49,135876,54853],{"class":66},[49,135878,1382],{"class":55},[49,135880,135881,135883,135885,135887,135889],{"class":51,"line":120},[49,135882,132435],{"class":66},[49,135884,51526],{"class":55},[49,135886,95],{"class":66},[49,135888,51581],{"class":59},[49,135890,1382],{"class":55},[49,135892,135893,135895,135897,135899,135901],{"class":51,"line":135},[49,135894,132452],{"class":66},[49,135896,51526],{"class":55},[49,135898,919],{"class":66},[49,135900,51581],{"class":59},[49,135902,1382],{"class":55},[49,135904,135905],{"class":51,"line":1306},[49,135906,1657],{"class":55},[14,135908,135909],{},"加上上述代码会发现：",[1554,135911],{"style":126471,"src":135912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135914,135915],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135917,135918],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[39,135920,135921],{"className":126615,"code":135855,"language":126617,"meta":44,"style":44},[46,135922,135923,135927,135933,135943,135955,135967],{"__ignoreMap":44},[49,135924,135925],{"class":51,"line":52},[49,135926,135862],{"class":283},[49,135928,135929,135931],{"class":51,"line":84},[49,135930,130463],{"class":2055},[49,135932,15662],{"class":55},[49,135934,135935,135937,135939,135941],{"class":51,"line":109},[49,135936,132421],{"class":66},[49,135938,51526],{"class":55},[49,135940,54853],{"class":66},[49,135942,1382],{"class":55},[49,135944,135945,135947,135949,135951,135953],{"class":51,"line":120},[49,135946,132435],{"class":66},[49,135948,51526],{"class":55},[49,135950,95],{"class":66},[49,135952,51581],{"class":59},[49,135954,1382],{"class":55},[49,135956,135957,135959,135961,135963,135965],{"class":51,"line":135},[49,135958,132452],{"class":66},[49,135960,51526],{"class":55},[49,135962,919],{"class":66},[49,135964,51581],{"class":59},[49,135966,1382],{"class":55},[49,135968,135969],{"class":51,"line":1306},[49,135970,1657],{"class":55},[14,135972,135973],{},"解决方式2：",[14,135975,135976],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[39,135978,135980],{"className":126615,"code":135979,"language":126617,"meta":44,"style":44},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,135981,135982,135988,135998,136010,136022],{"__ignoreMap":44},[49,135983,135984,135986],{"class":51,"line":52},[49,135985,51700],{"class":51389},[49,135987,15662],{"class":55},[49,135989,135990,135992,135994,135996],{"class":51,"line":84},[49,135991,132421],{"class":66},[49,135993,51526],{"class":55},[49,135995,54853],{"class":66},[49,135997,1382],{"class":55},[49,135999,136000,136002,136004,136006,136008],{"class":51,"line":109},[49,136001,132435],{"class":66},[49,136003,51526],{"class":55},[49,136005,95],{"class":66},[49,136007,51581],{"class":59},[49,136009,1382],{"class":55},[49,136011,136012,136014,136016,136018,136020],{"class":51,"line":120},[49,136013,132452],{"class":66},[49,136015,51526],{"class":55},[49,136017,919],{"class":66},[49,136019,51581],{"class":59},[49,136021,1382],{"class":55},[49,136023,136024],{"class":51,"line":135},[49,136025,1657],{"class":55},[195,136027,136029],{"id":136028},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136031,135800],{},[1554,136033],{"style":126471,"src":136034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136036,136037],{},"实现结构图：",[1554,136039],{"style":126471,"src":136040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136042,136043],{},"巧妙运用浮动元素不会压住文字的特性",[14,136045,136046],{},"代码显示：",[39,136048,136050],{"className":126615,"code":136049,"language":126617,"meta":44,"style":44},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,136051,136052,136058,136068,136072,136077,136081,136087,136101],{"__ignoreMap":44},[49,136053,136054,136056],{"class":51,"line":52},[49,136055,130463],{"class":2055},[49,136057,15662],{"class":55},[49,136059,136060,136062,136064,136066],{"class":51,"line":84},[49,136061,131095],{"class":66},[49,136063,51526],{"class":55},[49,136065,23826],{"class":66},[49,136067,1382],{"class":55},[49,136069,136070],{"class":51,"line":109},[49,136071,1657],{"class":55},[49,136073,136074],{"class":51,"line":120},[49,136075,136076],{"class":55},"```Css\n",[49,136078,136079],{"class":51,"line":135},[49,136080,130458],{"class":283},[49,136082,136083,136085],{"class":51,"line":1306},[49,136084,130463],{"class":2055},[49,136086,15662],{"class":55},[49,136088,136089,136091,136093,136095,136097,136099],{"class":51,"line":1312},[49,136090,70559],{"class":66},[49,136092,51526],{"class":55},[49,136094,415],{"class":66},[49,136096,51645],{"class":66},[49,136098,130478],{"class":55},[49,136100,130481],{"class":283},[49,136102,136103],{"class":51,"line":1403},[49,136104,1657],{"class":55},[14,136106,136107],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[39,136109,136112],{"className":136110,"code":136111,"language":5278},[5276],"\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",[46,136113,136111],{"__ignoreMap":44},[1554,136115],{"style":126471,"src":136116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136118,136119],{},"最终展示结果：",[39,136121,136122],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,136123,136124,136128,136134,136148],{"__ignoreMap":44},[49,136125,136126],{"class":51,"line":52},[49,136127,130458],{"class":283},[49,136129,136130,136132],{"class":51,"line":84},[49,136131,130463],{"class":2055},[49,136133,15662],{"class":55},[49,136135,136136,136138,136140,136142,136144,136146],{"class":51,"line":109},[49,136137,70559],{"class":66},[49,136139,51526],{"class":55},[49,136141,415],{"class":66},[49,136143,51645],{"class":66},[49,136145,130478],{"class":55},[49,136147,130481],{"class":283},[49,136149,136150],{"class":51,"line":120},[49,136151,1657],{"class":55},[1554,136153],{"style":126471,"src":136154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[166,136156,136158],{"id":136157},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[195,136160,136162],{"id":136161},"_1341-原理","13.4.1 原理",[1554,136164],{"style":126471,"src":136165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[39,136167,136168],{"className":126615,"code":130451,"language":126617,"meta":44,"style":44},[46,136169,136170,136174,136180,136194],{"__ignoreMap":44},[49,136171,136172],{"class":51,"line":52},[49,136173,130458],{"class":283},[49,136175,136176,136178],{"class":51,"line":84},[49,136177,130463],{"class":2055},[49,136179,15662],{"class":55},[49,136181,136182,136184,136186,136188,136190,136192],{"class":51,"line":109},[49,136183,70559],{"class":66},[49,136185,51526],{"class":55},[49,136187,415],{"class":66},[49,136189,51645],{"class":66},[49,136191,130478],{"class":55},[49,136193,130481],{"class":283},[49,136195,136196],{"class":51,"line":120},[49,136197,1657],{"class":55},[195,136199,136201],{"id":136200},"_1342-实例","13.4.2 实例",[1554,136203],{"style":126471,"src":136204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[39,136206,136207],{"className":126615,"code":131081,"language":126617,"meta":44,"style":44},[46,136208,136209,136215,136225,136229,136235,136245],{"__ignoreMap":44},[49,136210,136211,136213],{"class":51,"line":52},[49,136212,131088],{"class":2055},[49,136214,15662],{"class":55},[49,136216,136217,136219,136221,136223],{"class":51,"line":84},[49,136218,131095],{"class":66},[49,136220,51526],{"class":55},[49,136222,23826],{"class":66},[49,136224,1382],{"class":55},[49,136226,136227],{"class":51,"line":109},[49,136228,1657],{"class":55},[49,136230,136231,136233],{"class":51,"line":120},[49,136232,131110],{"class":2055},[49,136234,15662],{"class":55},[49,136236,136237,136239,136241,136243],{"class":51,"line":135},[49,136238,131095],{"class":66},[49,136240,51526],{"class":55},[49,136242,72611],{"class":66},[49,136244,1382],{"class":55},[49,136246,136247],{"class":51,"line":1306},[49,136248,1657],{"class":55},[166,136250,136252],{"id":136251},"_135-css的初始化","13.5 css的初始化",[14,136254,136255],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136257,136258],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136260,136261],{},"每个网页都必须首先进行 CSS初始化。",[14,136263,136264],{},"这里我们以 京东CSS初始化代码为例。",[14,136266,136267],{},"在网页右键查看网页源代码",[14,136269,136270],{},"找到css的link引入语句",[14,136272,136273],{},"然后ctrl+f 输入body",[14,136275,77315],{},[1554,136277],{"style":126471,"src":136278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136280,77338],{},[1554,136282],{"style":126471,"src":136283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136285,136286],{},"③打开了网页上传压缩的代码",[1554,136288],{"style":126471,"src":136289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136291,136292],{},"④从body前可以查看这个网页的初始化代码",[14,136294,136295],{},[373,136296,136297],{},"Unicode编码字体：",[14,136299,136300],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136302,83296],{},[14,136304,136305],{},"黑体 \\9ED1\\4F53",[14,136307,136308],{},"宋体 \\5B8B\\4F53",[14,136310,136311],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[143,136313,136314],{},"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":44,"searchDepth":84,"depth":84,"links":136316},[136317,136318,136325,136329,136333],{"id":135114,"depth":84,"text":135115},{"id":135236,"depth":84,"text":135237,"children":136319},[136320,136321,136322,136323,136324],{"id":135240,"depth":109,"text":135241},{"id":135393,"depth":109,"text":135394},{"id":135512,"depth":109,"text":135513},{"id":135654,"depth":109,"text":135655},{"id":135712,"depth":109,"text":135713},{"id":135773,"depth":84,"text":135774,"children":136326},[136327,136328],{"id":135796,"depth":109,"text":135797},{"id":136028,"depth":109,"text":136029},{"id":136157,"depth":84,"text":136158,"children":136330},[136331,136332],{"id":136161,"depth":109,"text":136162},{"id":136200,"depth":109,"text":136201},{"id":136251,"depth":84,"text":136252},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135106,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136340,"title":136341,"body":136342,"description":148,"extension":149,"meta":138028,"navigation":151,"path":138029,"seo":138030,"stem":138031,"__hash__":138032},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136343,"toc":138017},[136344,136347,136351,136355,136358,136365,136368,136371,136409,136412,136414,136428,136432,136441,136445,136450,136453,136456,136459,136494,136499,136502,136532,136535,136540,136543,136546,136576,136579,136633,136636,136640,136645,136657,136660,136664,136694,136697,136702,136705,136735,136738,136742,136759,136763,136767,136770,136803,136806,136810,136813,136816,136819,136822,136825,136936,136939,136942,136945,137047,137050,137054,137058,137062,137065,137105,137108,137110,137126,137130,137133,137138,137219,137222,137225,137351,137356,137359,137367,137370,137375,137460,137463,137467,137470,137473,137477,137497,137502,137586,137589,137594,137597,137600,137678,137681,137684,137687,137690,137693,137698,137701,137704,137776,137779,137784,137787,137884,137887,137893,137896,137899,137902,137905,137908,137911,137914,137917,137921,137926,137929,137962,137967,137970,138011,138014],[10,136345,136341],{"id":136346},"_14-html5与css3新特性",[166,136348,136350],{"id":136349},"_141-html5的新特性","14.1 HTML5的新特性",[195,136352,136354],{"id":136353},"_1411-基本标签","14.1.1 基本标签",[14,136356,136357],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136359,136360,136361,136364],{},"这些新特性都有兼容性问题，基本是 ",[373,136362,136363],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136366,136367],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136369,136370],{},"现在使用的是新特性：",[1226,136372,136373,136379,136385,136391,136397,136403],{},[181,136374,136375,136378],{},[46,136376,136377],{},"\u003Cheader>"," 头部标签",[181,136380,136381,136384],{},[46,136382,136383],{},"\u003Cnav>"," 导航标签",[181,136386,136387,136390],{},[46,136388,136389],{},"\u003Carticle>"," 内容标签",[181,136392,136393,136396],{},[46,136394,136395],{},"\u003Csection>"," 定义文档某个区域",[181,136398,136399,136402],{},[46,136400,136401],{},"\u003Caside>"," 侧边栏标签",[181,136404,136405,136408],{},[46,136406,136407],{},"\u003Cfooter>"," 尾部标签",[1554,136410],{"style":126471,"src":136411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136413,256],{},[1226,136415,136416,136419,136422,136425],{},[181,136417,136418],{},"这种语义化标准主要是针对搜索引擎的",[181,136420,136421],{},"这些标签页面中可以经常使用",[181,136423,136424],{},"在IE9中，需要把这些元素转换为块级元素",[181,136426,136427],{},"移动端更喜欢使用这些标签",[195,136429,136431],{"id":136430},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136433,136434,136435,136437,136438,136440],{},"音频 ",[373,136436,28265],{}," 和视频 ",[373,136439,28274],{}," 两个标签",[22088,136442,136444],{"id":136443},"_14121-视频标签-video","14.1.2.1 视频标签- video",[178,136446,136447],{},[181,136448,136449],{},"支持格式：",[1554,136451],{"style":126471,"src":136452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136454,136455],{},"尽量使用MP4，兼容性好",[14,136457,136458],{},"用MP4就可以",[39,136460,136462],{"className":127362,"code":136461,"language":127364,"meta":44,"style":44},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[46,136463,136464],{"__ignoreMap":44},[49,136465,136466,136468,136470,136472,136474,136477,136479,136482,136485,136488,136490,136492],{"class":51,"line":52},[49,136467,1129],{"class":55},[49,136469,28274],{"class":51389},[49,136471,55328],{"class":2055},[49,136473,60],{"class":55},[49,136475,136476],{"class":328},"\"movie.mp4\"",[49,136478,92512],{"class":2055},[49,136480,136481],{"class":2055}," autoplay",[49,136483,136484],{"class":2055}," muted",[49,136486,136487],{"class":2055}," loop",[49,136489,55403],{"class":55},[49,136491,28274],{"class":51389},[49,136493,51396],{"class":55},[178,136495,136496],{"start":84},[181,136497,136498],{},"兼容写法",[14,136500,136501],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[39,136503,136504],{"className":127362,"code":136461,"language":127364,"meta":44,"style":44},[46,136505,136506],{"__ignoreMap":44},[49,136507,136508,136510,136512,136514,136516,136518,136520,136522,136524,136526,136528,136530],{"class":51,"line":52},[49,136509,1129],{"class":55},[49,136511,28274],{"class":51389},[49,136513,55328],{"class":2055},[49,136515,60],{"class":55},[49,136517,136476],{"class":328},[49,136519,92512],{"class":2055},[49,136521,136481],{"class":2055},[49,136523,136484],{"class":2055},[49,136525,136487],{"class":2055},[49,136527,55403],{"class":55},[49,136529,28274],{"class":51389},[49,136531,51396],{"class":55},[14,136533,136534],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[178,136536,136537],{"start":109},[181,136538,136539],{},"video常用属性",[1554,136541],{"style":126471,"src":136542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136544,136545],{},"poster属性后面是跟的等待加载图片的地址",[39,136547,136548],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,136549,136550],{"__ignoreMap":44},[49,136551,136552,136554,136556,136558,136560,136562,136564,136566,136568,136570,136572,136574],{"class":51,"line":52},[49,136553,1129],{"class":55},[49,136555,1554],{"class":51389},[49,136557,55328],{"class":2055},[49,136559,60],{"class":55},[49,136561,134132],{"class":328},[49,136563,55336],{"class":2055},[49,136565,60],{"class":55},[49,136567,134139],{"class":328},[49,136569,134142],{"class":2055},[49,136571,60],{"class":55},[49,136573,134147],{"class":328},[49,136575,51396],{"class":55},[14,136577,136578],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[39,136580,136582],{"className":126615,"code":136581,"language":126617,"meta":44,"style":44},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[46,136583,136584,136589,136595,136619,136624,136629],{"__ignoreMap":44},[49,136585,136586],{"class":51,"line":52},[49,136587,136588],{"class":283},"\u002F* 2D 位移 *\u002F\n",[49,136590,136591,136593],{"class":51,"line":84},[49,136592,51700],{"class":51389},[49,136594,15662],{"class":55},[49,136596,136597,136600,136602,136605,136607,136609,136611,136613,136615,136617],{"class":51,"line":109},[49,136598,136599],{"class":66},"  transform",[49,136601,51526],{"class":55},[49,136603,136604],{"class":66},"translate",[49,136606,228],{"class":55},[49,136608,533],{"class":66},[49,136610,51581],{"class":59},[49,136612,12525],{"class":55},[49,136614,875],{"class":66},[49,136616,51581],{"class":59},[49,136618,2811],{"class":55},[49,136620,136621],{"class":51,"line":120},[49,136622,136623],{"class":283},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[49,136625,136626],{"class":51,"line":135},[49,136627,136628],{"class":283},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[49,136630,136631],{"class":51,"line":1306},[49,136632,1657],{"class":55},[14,136634,136635],{},"muted:自动静音属性",[22088,136637,136639],{"id":136638},"_14122-音频标签audio","14.1.2.2 音频标签audio",[178,136641,136642],{},[181,136643,136644],{},"基本使用",[14,136646,136647,136648,136653,136654],{},"当前 ",[373,136649,136650],{},[46,136651,136652],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[373,136655,136656],{},"mp3格式",[1554,136658],{"style":126471,"src":136659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[178,136661,136662],{"start":84},[181,136663,136498],{},[39,136665,136666],{"className":127362,"code":136461,"language":127364,"meta":44,"style":44},[46,136667,136668],{"__ignoreMap":44},[49,136669,136670,136672,136674,136676,136678,136680,136682,136684,136686,136688,136690,136692],{"class":51,"line":52},[49,136671,1129],{"class":55},[49,136673,28274],{"class":51389},[49,136675,55328],{"class":2055},[49,136677,60],{"class":55},[49,136679,136476],{"class":328},[49,136681,92512],{"class":2055},[49,136683,136481],{"class":2055},[49,136685,136484],{"class":2055},[49,136687,136487],{"class":2055},[49,136689,55403],{"class":55},[49,136691,28274],{"class":51389},[49,136693,51396],{"class":55},[14,136695,136696],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[178,136698,136699],{"start":109},[181,136700,136701],{},"常用属性",[1554,136703],{"style":126471,"src":136704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[39,136706,136707],{"className":127362,"code":136461,"language":127364,"meta":44,"style":44},[46,136708,136709],{"__ignoreMap":44},[49,136710,136711,136713,136715,136717,136719,136721,136723,136725,136727,136729,136731,136733],{"class":51,"line":52},[49,136712,1129],{"class":55},[49,136714,28274],{"class":51389},[49,136716,55328],{"class":2055},[49,136718,60],{"class":55},[49,136720,136476],{"class":328},[49,136722,92512],{"class":2055},[49,136724,136481],{"class":2055},[49,136726,136484],{"class":2055},[49,136728,136487],{"class":2055},[49,136730,55403],{"class":55},[49,136732,28274],{"class":51389},[49,136734,51396],{"class":55},[14,136736,136737],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22088,136739,136741],{"id":136740},"_14123-总结","14.1.2.3 总结",[1226,136743,136744,136747,136750,136753,136756],{},[181,136745,136746],{},"音频标签和视频标签使用方式基本一致",[181,136748,136749],{},"浏览器支持情况不同",[181,136751,136752],{},"谷歌浏览器把音频和视频自动播放禁止了",[181,136754,136755],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[181,136757,136758],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[195,136760,136762],{"id":136761},"_1413-表单元素","14.1.3 表单元素",[22088,136764,136766],{"id":136765},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1554,136768],{"style":126471,"src":136769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[39,136771,136773],{"className":127362,"code":136772,"language":127364,"meta":44,"style":44},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[46,136774,136775],{"__ignoreMap":44},[49,136776,136777,136779,136781,136783,136785,136787,136789,136791,136794,136796,136798,136801],{"class":51,"line":52},[49,136778,1129],{"class":55},[49,136780,53910],{"class":51389},[49,136782,53913],{"class":2055},[49,136784,60],{"class":55},[49,136786,62788],{"class":328},[49,136788,15010],{"class":2055},[49,136790,60],{"class":55},[49,136792,136793],{"class":328},"\"username\"",[49,136795,61109],{"class":2055},[49,136797,60],{"class":55},[49,136799,136800],{"class":328},"\"请输入用户名\"",[49,136802,51396],{"class":55},[1554,136804],{"style":126471,"src":136805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22088,136807,136809],{"id":136808},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1554,136811],{"style":126471,"src":136812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136814,136815],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136817,136818],{},"快捷操作：",[1554,136820],{"style":126471,"src":136821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136823,136824],{},"例子1：",[39,136826,136828],{"className":127362,"code":136827,"language":127364,"meta":44,"style":44},"\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",[46,136829,136830,136853,136880,136909,136928],{"__ignoreMap":44},[49,136831,136832,136834,136836,136838,136840,136843,136846,136848,136851],{"class":51,"line":52},[49,136833,1129],{"class":55},[49,136835,66714],{"class":51389},[49,136837,66717],{"class":2055},[49,136839,60],{"class":55},[49,136841,136842],{"class":328},"\"\u002Fsubmit\"",[49,136844,136845],{"class":2055}," method",[49,136847,60],{"class":55},[49,136849,136850],{"class":328},"\"post\"",[49,136852,51396],{"class":55},[49,136854,136855,136857,136859,136861,136863,136865,136867,136869,136871,136873,136875,136878],{"class":51,"line":84},[49,136856,52233],{"class":55},[49,136858,53910],{"class":51389},[49,136860,53913],{"class":2055},[49,136862,60],{"class":55},[49,136864,62788],{"class":328},[49,136866,15010],{"class":2055},[49,136868,60],{"class":55},[49,136870,136793],{"class":328},[49,136872,61109],{"class":2055},[49,136874,60],{"class":55},[49,136876,136877],{"class":328},"\"用户名\"",[49,136879,51396],{"class":55},[49,136881,136882,136884,136886,136888,136890,136893,136895,136897,136900,136902,136904,136907],{"class":51,"line":109},[49,136883,52233],{"class":55},[49,136885,53910],{"class":51389},[49,136887,53913],{"class":2055},[49,136889,60],{"class":55},[49,136891,136892],{"class":328},"\"password\"",[49,136894,15010],{"class":2055},[49,136896,60],{"class":55},[49,136898,136899],{"class":328},"\"pwd\"",[49,136901,61109],{"class":2055},[49,136903,60],{"class":55},[49,136905,136906],{"class":328},"\"密码\"",[49,136908,51396],{"class":55},[49,136910,136911,136913,136915,136917,136919,136921,136924,136926],{"class":51,"line":120},[49,136912,52233],{"class":55},[49,136914,53976],{"class":51389},[49,136916,53913],{"class":2055},[49,136918,60],{"class":55},[49,136920,66737],{"class":328},[49,136922,136923],{"class":55},">提交\u003C\u002F",[49,136925,53976],{"class":51389},[49,136927,51396],{"class":55},[49,136929,136930,136932,136934],{"class":51,"line":135},[49,136931,51874],{"class":55},[49,136933,66714],{"class":51389},[49,136935,51396],{"class":55},[1554,136937],{"style":126471,"src":136938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136940,136941],{},"value是表单域的内容",[14,136943,136944],{},"例子2：",[39,136946,136947],{"className":127362,"code":136827,"language":127364,"meta":44,"style":44},[46,136948,136949,136969,136995,137021,137039],{"__ignoreMap":44},[49,136950,136951,136953,136955,136957,136959,136961,136963,136965,136967],{"class":51,"line":52},[49,136952,1129],{"class":55},[49,136954,66714],{"class":51389},[49,136956,66717],{"class":2055},[49,136958,60],{"class":55},[49,136960,136842],{"class":328},[49,136962,136845],{"class":2055},[49,136964,60],{"class":55},[49,136966,136850],{"class":328},[49,136968,51396],{"class":55},[49,136970,136971,136973,136975,136977,136979,136981,136983,136985,136987,136989,136991,136993],{"class":51,"line":84},[49,136972,52233],{"class":55},[49,136974,53910],{"class":51389},[49,136976,53913],{"class":2055},[49,136978,60],{"class":55},[49,136980,62788],{"class":328},[49,136982,15010],{"class":2055},[49,136984,60],{"class":55},[49,136986,136793],{"class":328},[49,136988,61109],{"class":2055},[49,136990,60],{"class":55},[49,136992,136877],{"class":328},[49,136994,51396],{"class":55},[49,136996,136997,136999,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019],{"class":51,"line":109},[49,136998,52233],{"class":55},[49,137000,53910],{"class":51389},[49,137002,53913],{"class":2055},[49,137004,60],{"class":55},[49,137006,136892],{"class":328},[49,137008,15010],{"class":2055},[49,137010,60],{"class":55},[49,137012,136899],{"class":328},[49,137014,61109],{"class":2055},[49,137016,60],{"class":55},[49,137018,136906],{"class":328},[49,137020,51396],{"class":55},[49,137022,137023,137025,137027,137029,137031,137033,137035,137037],{"class":51,"line":120},[49,137024,52233],{"class":55},[49,137026,53976],{"class":51389},[49,137028,53913],{"class":2055},[49,137030,60],{"class":55},[49,137032,66737],{"class":328},[49,137034,136923],{"class":55},[49,137036,53976],{"class":51389},[49,137038,51396],{"class":55},[49,137040,137041,137043,137045],{"class":51,"line":135},[49,137042,51874],{"class":55},[49,137044,66714],{"class":51389},[49,137046,51396],{"class":55},[1554,137048],{"style":126471,"src":137049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[166,137051,137053],{"id":137052},"_142-css新特性","14.2 CSS新特性",[195,137055,137057],{"id":137056},"_1421-新增选择器","14.2.1 新增选择器",[22088,137059,137061],{"id":137060},"_14211-属性选择器","14.2.1.1 属性选择器",[1554,137063],{"style":126471,"src":137064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[39,137066,137068],{"className":126615,"code":137067,"language":126617,"meta":44,"style":44},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[46,137069,137070,137085,137101],{"__ignoreMap":44},[49,137071,137072,137074,137076,137078,137080,137082],{"class":51,"line":52},[49,137073,53910],{"class":51389},[49,137075,1109],{"class":55},[49,137077,103170],{"class":2055},[49,137079,60],{"class":59},[49,137081,62788],{"class":328},[49,137083,137084],{"class":55},"] {\n",[49,137086,137087,137089,137091,137093,137095,137097,137099],{"class":51,"line":84},[49,137088,70985],{"class":66},[49,137090,51526],{"class":55},[49,137092,441],{"class":66},[49,137094,51581],{"class":59},[49,137096,51610],{"class":66},[49,137098,130195],{"class":66},[49,137100,1382],{"class":55},[49,137102,137103],{"class":51,"line":109},[49,137104,1657],{"class":55},[1554,137106],{"style":126471,"src":137107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137109,256],{},[1226,137111,137112,137115,137118,137121],{},[181,137113,137114],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[181,137116,137117],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[181,137119,137120],{},"属性选择器也可以选择出来自定义的属性",[181,137122,137123,137125],{},[373,137124,9115],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22088,137127,137129],{"id":137128},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1554,137131],{"style":126471,"src":137132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[178,137134,137135],{},[181,137136,137137],{},"fist-child",[39,137139,137141],{"className":126615,"code":137140,"language":126617,"meta":44,"style":44},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[46,137142,137143,137148,137163,137183,137201],{"__ignoreMap":44},[49,137144,137145],{"class":51,"line":52},[49,137146,137147],{"class":283},"\u002F* 属性选择器 *\u002F\n",[49,137149,137150,137152,137154,137156,137158,137160],{"class":51,"line":84},[49,137151,53910],{"class":51389},[49,137153,1109],{"class":55},[49,137155,103170],{"class":2055},[49,137157,60],{"class":59},[49,137159,62788],{"class":328},[49,137161,137162],{"class":55},"] { }\n",[49,137164,137165,137167,137169,137171,137174,137177,137180],{"class":51,"line":109},[49,137166,53910],{"class":51389},[49,137168,1109],{"class":55},[49,137170,14784],{"class":2055},[49,137172,137173],{"class":59},"^=",[49,137175,137176],{"class":328},"\"icon\"",[49,137178,137179],{"class":55},"] { }  ",[49,137181,137182],{"class":283},"\u002F* 以 icon 开头 *\u002F\n",[49,137184,137185,137187,137189,137191,137194,137196,137198],{"class":51,"line":120},[49,137186,53910],{"class":51389},[49,137188,1109],{"class":55},[49,137190,14784],{"class":2055},[49,137192,137193],{"class":59},"$=",[49,137195,137176],{"class":328},[49,137197,137179],{"class":55},[49,137199,137200],{"class":283},"\u002F* 以 icon 结尾 *\u002F\n",[49,137202,137203,137205,137207,137209,137212,137214,137216],{"class":51,"line":135},[49,137204,53910],{"class":51389},[49,137206,1109],{"class":55},[49,137208,14784],{"class":2055},[49,137210,137211],{"class":59},"*=",[49,137213,137176],{"class":328},[49,137215,137179],{"class":55},[49,137217,137218],{"class":283},"\u002F* 包含 icon *\u002F\n",[14,137220,137221],{},"ul的第一个儿子文本为红色",[14,137223,137224],{},"一定要在冒号前加空格，不然就是选中所有的了",[39,137226,137228],{"className":126615,"code":137227,"language":126617,"meta":44,"style":44},".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",[46,137229,137230,137236,137246,137250,137254,137259,137272,137285,137301,137318,137335],{"__ignoreMap":44},[49,137231,137232,137234],{"class":51,"line":52},[49,137233,126906],{"class":2055},[49,137235,15662],{"class":55},[49,137237,137238,137240,137242,137244],{"class":51,"line":84},[49,137239,70994],{"class":66},[49,137241,51526],{"class":55},[49,137243,57510],{"class":66},[49,137245,1382],{"class":55},[49,137247,137248],{"class":51,"line":109},[49,137249,1657],{"class":55},[49,137251,137252],{"class":51,"line":120},[49,137253,136076],{"class":55},[49,137255,137256],{"class":51,"line":135},[49,137257,137258],{"class":283},"\u002F* 结构伪类选择器 *\u002F\n",[49,137260,137261,137263,137266,137269],{"class":51,"line":1306},[49,137262,181],{"class":51389},[49,137264,137265],{"class":2055},":first-child",[49,137267,137268],{"class":55}," { }           ",[49,137270,137271],{"class":283},"\u002F* 第一个 *\u002F\n",[49,137273,137274,137276,137279,137282],{"class":51,"line":1312},[49,137275,181],{"class":51389},[49,137277,137278],{"class":2055},":last-child",[49,137280,137281],{"class":55}," { }            ",[49,137283,137284],{"class":283},"\u002F* 最后一个 *\u002F\n",[49,137286,137287,137289,137291,137293,137295,137298],{"class":51,"line":1403},[49,137288,181],{"class":51389},[49,137290,129529],{"class":2055},[49,137292,228],{"class":55},[49,137294,301],{"class":66},[49,137296,137297],{"class":55},") { }          ",[49,137299,137300],{"class":283},"\u002F* 第2个 *\u002F\n",[49,137302,137303,137305,137307,137309,137312,137315],{"class":51,"line":1409},[49,137304,181],{"class":51389},[49,137306,129529],{"class":2055},[49,137308,228],{"class":55},[49,137310,137311],{"class":66},"2n",[49,137313,137314],{"class":55},") { }         ",[49,137316,137317],{"class":283},"\u002F* 偶数 *\u002F\n",[49,137319,137320,137322,137324,137326,137329,137332],{"class":51,"line":1421},[49,137321,181],{"class":51389},[49,137323,129529],{"class":2055},[49,137325,228],{"class":55},[49,137327,137328],{"class":66},"2n+1",[49,137330,137331],{"class":55},") { }       ",[49,137333,137334],{"class":283},"\u002F* 奇数 *\u002F\n",[49,137336,137337,137339,137341,137343,137346,137348],{"class":51,"line":1704},[49,137338,181],{"class":51389},[49,137340,129529],{"class":2055},[49,137342,228],{"class":55},[49,137344,137345],{"class":66},"-n+3",[49,137347,137331],{"class":55},[49,137349,137350],{"class":283},"\u002F* 前3个 *\u002F\n",[51700,137352,137355],{"className":137353},[137354],"example","\n  示例内容\n",[14,137357,137358],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1226,137360,137361],{},[181,137362,137363,137366],{},[46,137364,137365],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137368,137369],{},"也就是说它选择的是熊大",[178,137371,137372],{"start":1306},[181,137373,137374],{},"权重",[39,137376,137378],{"className":126615,"code":137377,"language":126617,"meta":44,"style":44},"\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",[46,137379,137380,137384,137394,137404,137418,137432,137446],{"__ignoreMap":44},[49,137381,137382],{"class":51,"line":52},[49,137383,137258],{"class":283},[49,137385,137386,137388,137390,137392],{"class":51,"line":84},[49,137387,181],{"class":51389},[49,137389,137265],{"class":2055},[49,137391,137268],{"class":55},[49,137393,137271],{"class":283},[49,137395,137396,137398,137400,137402],{"class":51,"line":109},[49,137397,181],{"class":51389},[49,137399,137278],{"class":2055},[49,137401,137281],{"class":55},[49,137403,137284],{"class":283},[49,137405,137406,137408,137410,137412,137414,137416],{"class":51,"line":120},[49,137407,181],{"class":51389},[49,137409,129529],{"class":2055},[49,137411,228],{"class":55},[49,137413,301],{"class":66},[49,137415,137297],{"class":55},[49,137417,137300],{"class":283},[49,137419,137420,137422,137424,137426,137428,137430],{"class":51,"line":135},[49,137421,181],{"class":51389},[49,137423,129529],{"class":2055},[49,137425,228],{"class":55},[49,137427,137311],{"class":66},[49,137429,137314],{"class":55},[49,137431,137317],{"class":283},[49,137433,137434,137436,137438,137440,137442,137444],{"class":51,"line":1306},[49,137435,181],{"class":51389},[49,137437,129529],{"class":2055},[49,137439,228],{"class":55},[49,137441,137328],{"class":66},[49,137443,137331],{"class":55},[49,137445,137334],{"class":283},[49,137447,137448,137450,137452,137454,137456,137458],{"class":51,"line":1312},[49,137449,181],{"class":51389},[49,137451,129529],{"class":2055},[49,137453,228],{"class":55},[49,137455,137345],{"class":66},[49,137457,137331],{"class":55},[49,137459,137350],{"class":283},[14,137461,137462],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22088,137464,137466],{"id":137465},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137468,137469],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1554,137471],{"style":126471,"src":137472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[178,137474,137475],{},[181,137476,256],{},[1226,137478,137479,137482,137485,137488,137491,137494],{},[181,137480,137481],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[181,137483,137484],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[181,137486,137487],{},"语法： element::before {}",[181,137489,137490],{},"before 和 after 必须有 content 属性",[181,137492,137493],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[181,137495,137496],{},"伪元素选择器和标签选择器一样，权重为 1",[178,137498,137499],{"start":84},[181,137500,137501],{},"实例",[39,137503,137504],{"className":126615,"code":137377,"language":126617,"meta":44,"style":44},[46,137505,137506,137510,137520,137530,137544,137558,137572],{"__ignoreMap":44},[49,137507,137508],{"class":51,"line":52},[49,137509,137258],{"class":283},[49,137511,137512,137514,137516,137518],{"class":51,"line":84},[49,137513,181],{"class":51389},[49,137515,137265],{"class":2055},[49,137517,137268],{"class":55},[49,137519,137271],{"class":283},[49,137521,137522,137524,137526,137528],{"class":51,"line":109},[49,137523,181],{"class":51389},[49,137525,137278],{"class":2055},[49,137527,137281],{"class":55},[49,137529,137284],{"class":283},[49,137531,137532,137534,137536,137538,137540,137542],{"class":51,"line":120},[49,137533,181],{"class":51389},[49,137535,129529],{"class":2055},[49,137537,228],{"class":55},[49,137539,301],{"class":66},[49,137541,137297],{"class":55},[49,137543,137300],{"class":283},[49,137545,137546,137548,137550,137552,137554,137556],{"class":51,"line":135},[49,137547,181],{"class":51389},[49,137549,129529],{"class":2055},[49,137551,228],{"class":55},[49,137553,137311],{"class":66},[49,137555,137314],{"class":55},[49,137557,137317],{"class":283},[49,137559,137560,137562,137564,137566,137568,137570],{"class":51,"line":1306},[49,137561,181],{"class":51389},[49,137563,129529],{"class":2055},[49,137565,228],{"class":55},[49,137567,137328],{"class":66},[49,137569,137331],{"class":55},[49,137571,137334],{"class":283},[49,137573,137574,137576,137578,137580,137582,137584],{"class":51,"line":1312},[49,137575,181],{"class":51389},[49,137577,129529],{"class":2055},[49,137579,228],{"class":55},[49,137581,137345],{"class":66},[49,137583,137331],{"class":55},[49,137585,137350],{"class":283},[1554,137587],{"style":126471,"src":137588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[178,137590,137591],{"start":109},[181,137592,137593],{},"使用场景1",[1554,137595],{"style":126471,"src":137596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137598,137599],{},"不需要再加盒子来整红色那部分了",[39,137601,137603],{"className":126615,"code":137602,"language":126617,"meta":44,"style":44},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[46,137604,137605,137610,137619,137630,137640,137644,137653,137664,137674],{"__ignoreMap":44},[49,137606,137607],{"class":51,"line":52},[49,137608,137609],{"class":283},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[49,137611,137612,137614,137617],{"class":51,"line":84},[49,137613,51700],{"class":51389},[49,137615,137616],{"class":2055},"::before",[49,137618,15662],{"class":55},[49,137620,137621,137624,137626,137628],{"class":51,"line":109},[49,137622,137623],{"class":66},"  content",[49,137625,51526],{"class":55},[49,137627,7742],{"class":328},[49,137629,1382],{"class":55},[49,137631,137632,137634,137636,137638],{"class":51,"line":120},[49,137633,128231],{"class":66},[49,137635,51526],{"class":55},[49,137637,60958],{"class":66},[49,137639,1382],{"class":55},[49,137641,137642],{"class":51,"line":135},[49,137643,1657],{"class":55},[49,137645,137646,137648,137651],{"class":51,"line":1306},[49,137647,51700],{"class":51389},[49,137649,137650],{"class":2055},"::after",[49,137652,15662],{"class":55},[49,137654,137655,137657,137659,137662],{"class":51,"line":1312},[49,137656,137623],{"class":66},[49,137658,51526],{"class":55},[49,137660,137661],{"class":328},"\"→\"",[49,137663,1382],{"class":55},[49,137665,137666,137668,137670,137672],{"class":51,"line":1403},[49,137667,70994],{"class":66},[49,137669,51526],{"class":55},[49,137671,62159],{"class":66},[49,137673,1382],{"class":55},[49,137675,137676],{"class":51,"line":1409},[49,137677,1657],{"class":55},[1554,137679],{"style":126471,"src":137680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137682,137683],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1554,137685],{"style":126471,"src":137686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137688,137689],{},"但是在引用时需要先转义一下",[14,137691,137692],{},"content='\\e930'",[178,137694,137695],{"start":120},[181,137696,137697],{},"使用场景2",[14,137699,137700],{},"仿土豆效果",[14,137702,137703],{},"通过使用伪元素选择器可以减少body中盒子的数量",[39,137705,137706],{"className":126615,"code":137602,"language":126617,"meta":44,"style":44},[46,137707,137708,137712,137720,137730,137740,137744,137752,137762,137772],{"__ignoreMap":44},[49,137709,137710],{"class":51,"line":52},[49,137711,137609],{"class":283},[49,137713,137714,137716,137718],{"class":51,"line":84},[49,137715,51700],{"class":51389},[49,137717,137616],{"class":2055},[49,137719,15662],{"class":55},[49,137721,137722,137724,137726,137728],{"class":51,"line":109},[49,137723,137623],{"class":66},[49,137725,51526],{"class":55},[49,137727,7742],{"class":328},[49,137729,1382],{"class":55},[49,137731,137732,137734,137736,137738],{"class":51,"line":120},[49,137733,128231],{"class":66},[49,137735,51526],{"class":55},[49,137737,60958],{"class":66},[49,137739,1382],{"class":55},[49,137741,137742],{"class":51,"line":135},[49,137743,1657],{"class":55},[49,137745,137746,137748,137750],{"class":51,"line":1306},[49,137747,51700],{"class":51389},[49,137749,137650],{"class":2055},[49,137751,15662],{"class":55},[49,137753,137754,137756,137758,137760],{"class":51,"line":1312},[49,137755,137623],{"class":66},[49,137757,51526],{"class":55},[49,137759,137661],{"class":328},[49,137761,1382],{"class":55},[49,137763,137764,137766,137768,137770],{"class":51,"line":1403},[49,137765,70994],{"class":66},[49,137767,51526],{"class":55},[49,137769,62159],{"class":66},[49,137771,1382],{"class":55},[49,137773,137774],{"class":51,"line":1409},[49,137775,1657],{"class":55},[1554,137777],{"style":126471,"src":137778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[178,137780,137781],{"start":135},[181,137782,137783],{},"使用场景3",[14,137785,137786],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[39,137788,137790],{"className":126615,"code":137789,"language":126617,"meta":44,"style":44},".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",[46,137791,137792,137798,137808,137812,137816,137820,137828,137838,137848,137852,137860,137870,137880],{"__ignoreMap":44},[49,137793,137794,137796],{"class":51,"line":52},[49,137795,130463],{"class":2055},[49,137797,15662],{"class":55},[49,137799,137800,137802,137804,137806],{"class":51,"line":84},[49,137801,131095],{"class":66},[49,137803,51526],{"class":55},[49,137805,23826],{"class":66},[49,137807,1382],{"class":55},[49,137809,137810],{"class":51,"line":109},[49,137811,1657],{"class":55},[49,137813,137814],{"class":51,"line":120},[49,137815,136076],{"class":55},[49,137817,137818],{"class":51,"line":135},[49,137819,137609],{"class":283},[49,137821,137822,137824,137826],{"class":51,"line":1306},[49,137823,51700],{"class":51389},[49,137825,137616],{"class":2055},[49,137827,15662],{"class":55},[49,137829,137830,137832,137834,137836],{"class":51,"line":1312},[49,137831,137623],{"class":66},[49,137833,51526],{"class":55},[49,137835,7742],{"class":328},[49,137837,1382],{"class":55},[49,137839,137840,137842,137844,137846],{"class":51,"line":1403},[49,137841,128231],{"class":66},[49,137843,51526],{"class":55},[49,137845,60958],{"class":66},[49,137847,1382],{"class":55},[49,137849,137850],{"class":51,"line":1409},[49,137851,1657],{"class":55},[49,137853,137854,137856,137858],{"class":51,"line":1421},[49,137855,51700],{"class":51389},[49,137857,137650],{"class":2055},[49,137859,15662],{"class":55},[49,137861,137862,137864,137866,137868],{"class":51,"line":1704},[49,137863,137623],{"class":66},[49,137865,51526],{"class":55},[49,137867,137661],{"class":328},[49,137869,1382],{"class":55},[49,137871,137872,137874,137876,137878],{"class":51,"line":1709},[49,137873,70994],{"class":66},[49,137875,51526],{"class":55},[49,137877,62159],{"class":66},[49,137879,1382],{"class":55},[49,137881,137882],{"class":51,"line":1715},[49,137883,1657],{"class":55},[14,137885,137886],{},"div {\nmargin: 0 auto;\n}",[39,137888,137891],{"className":137889,"code":137890,"language":5278},[5276],"\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",[46,137892,137890],{"__ignoreMap":44},[14,137894,137895],{},"如果想让多个元素都发生变化",[14,137897,137898],{},"不能如下操作：",[14,137900,137901],{},"transition: width 2s ease 0.5s;",[14,137903,137904],{},"transition: height 2s ease 0.5s;不对！！！",[14,137906,137907],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137909,137910],{},"使用如下：加逗号隔开",[14,137912,137913],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137915,137916],{},"transition all 2s ease;",[195,137918,137920],{"id":137919},"_1426-过渡练习","14.2.6 过渡练习",[178,137922,137923],{},[181,137924,137925],{},"进度条",[1554,137927],{"style":126471,"src":137928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[39,137930,137932],{"className":126615,"code":137931,"language":126617,"meta":44,"style":44},"div {\n  transition: all 0.3s ease;\n}\n",[46,137933,137934,137940,137958],{"__ignoreMap":44},[49,137935,137936,137938],{"class":51,"line":52},[49,137937,51700],{"class":51389},[49,137939,15662],{"class":55},[49,137941,137942,137945,137947,137949,137952,137954,137956],{"class":51,"line":84},[49,137943,137944],{"class":66},"  transition",[49,137946,51526],{"class":55},[49,137948,28212],{"class":66},[49,137950,137951],{"class":66}," 0.3",[49,137953,914],{"class":59},[49,137955,78769],{"class":66},[49,137957,1382],{"class":55},[49,137959,137960],{"class":51,"line":109},[49,137961,1657],{"class":55},[178,137963,137964],{"start":84},[181,137965,137966],{},"小米logo",[14,137968,137969],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[39,137971,137973],{"className":126615,"code":137972,"language":126617,"meta":44,"style":44},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[46,137974,137975,137980,137986,138002,138007],{"__ignoreMap":44},[49,137976,137977],{"class":51,"line":52},[49,137978,137979],{"class":283},"\u002F* CSS3 过渡 *\u002F\n",[49,137981,137982,137984],{"class":51,"line":84},[49,137983,51700],{"class":51389},[49,137985,15662],{"class":55},[49,137987,137988,137990,137992,137994,137996,137998,138000],{"class":51,"line":109},[49,137989,137944],{"class":66},[49,137991,51526],{"class":55},[49,137993,28212],{"class":66},[49,137995,137951],{"class":66},[49,137997,914],{"class":59},[49,137999,78769],{"class":66},[49,138001,1382],{"class":55},[49,138003,138004],{"class":51,"line":120},[49,138005,138006],{"class":283},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[49,138008,138009],{"class":51,"line":135},[49,138010,1657],{"class":55},[14,138012,138013],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[143,138015,138016],{},"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":44,"searchDepth":84,"depth":84,"links":138018},[138019,138024],{"id":136349,"depth":84,"text":136350,"children":138020},[138021,138022,138023],{"id":136353,"depth":109,"text":136354},{"id":136430,"depth":109,"text":136431},{"id":136761,"depth":109,"text":136762},{"id":137052,"depth":84,"text":137053,"children":138025},[138026,138027],{"id":137056,"depth":109,"text":137057},{"id":137919,"depth":109,"text":137920},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136341,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138034,"title":138035,"body":138036,"description":148,"extension":149,"meta":139780,"navigation":151,"path":139781,"seo":139782,"stem":139783,"__hash__":139784},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138037,"toc":139761},[138038,138041,138045,138048,138054,138060,138064,138066,138069,138072,138075,138078,138081,138084,138087,138091,138095,138098,138101,138104,138108,138111,138114,138119,138122,138125,138128,138132,138135,138144,138147,138150,138154,138157,138160,138165,138172,138186,138194,138201,138206,138209,138212,138215,138222,138226,138232,138238,138241,138244,138249,138255,138257,138265,138270,138273,138279,138281,138286,138291,138294,138296,138301,138304,138309,138314,138348,138352,138356,138359,138363,138366,138452,138455,138492,138495,138531,138535,138540,138553,138607,138609,138637,138639,138667,138673,138687,138689,138733,138735,138779,138782,138789,138800,138802,138829,138831,138857,138864,138880,138882,138976,138978,139072,139079,139082,139087,139093,139167,139170,139172,139208,139210,139246,139249,139256,139275,139278,139281,139283,139308,139310,139334,139337,139340,139370,139374,139377,139440,139442,139508,139510,139574,139577,139609,139611,139637,139639,139665,139668,139699,139701,139727,139729,139755,139758],[10,138039,138035],{"id":138040},"_15-品优购项目上篇-搭建与公共模块",[166,138042,138044],{"id":138043},"_151-项目规划","15.1 项目规划",[1554,138046],{"style":126471,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138049,138050,138053],{},[373,138051,138052],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138055,138056,138059],{},[373,138057,138058],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[166,138061,138063],{"id":138062},"_152-项目介绍","15.2 项目介绍",[14,138065,138052],{},[1554,138067],{"style":126471,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138070,138071],{},"主页：",[1554,138073],{"style":126471,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138076,138077],{},"列表页：",[1554,138079],{"style":126471,"src":138080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138082,138083],{},"注册页：",[1554,138085],{"style":126471,"src":138086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[166,138088,138090],{"id":138089},"_153-项目搭建工作","15.3 项目搭建工作",[195,138092,138094],{"id":138093},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1554,138096],{"style":126471,"src":138097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138099,138100],{},"经常更换的图片要放到upload文件夹中",[14,138102,138103],{},"不经常换的放到images文件夹中",[195,138105,138107],{"id":138106},"_1532-创建文件如下","15.3.2 创建文件如下",[1554,138109],{"style":126471,"src":138110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1554,138112],{"style":126471,"src":138113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138115,138116],{},[373,138117,138118],{},"初始化样式：",[14,138120,138121],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138123,138124],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138126,138127],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[195,138129,138131],{"id":138130},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138133,138134],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138136,138137,138138,138143],{},"这里最典型的应用就是 ",[373,138139,138140],{},[46,138141,138142],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1554,138145],{"style":126471,"src":138146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138148,138149],{},"通过link方法来引入",[195,138151,138153],{"id":138152},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1554,138155],{"style":126471,"src":138156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138158,138159],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[178,138161,138162],{},[181,138163,138164],{},"制作favicon图标",[14,138166,138167,138168,138171],{},"①把品优购图标切成 ",[46,138169,138170],{},"png"," 图片",[14,138173,138174,138175,138177,138178,138181,138182],{},"②把 ",[46,138176,138170],{}," 图片转换为 ",[46,138179,138180],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[56,138183,138184],{"href":138184,"rel":138185},"http:\u002F\u002Fwww.bitbug.net\u002F",[23955],[178,138187,138188,138191],{"start":84},[181,138189,138190],{},"favicon图标放到网站根目录下",[181,138192,138193],{},"HTML页面引入favicon",[14,138195,138196,138197,138200],{},"在html 页面里面的 ",[46,138198,138199],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138202,138203],{},[46,138204,138205],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138207,138208],{},"复制这行代码或者在生成这个的网站进行复制",[1554,138210],{"style":126471,"src":138211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138213,138214],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138216,138217,138218],{},"例如:",[56,138219,138220],{"href":138220,"rel":138221},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23955],[195,138223,138225],{"id":138224},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138227,138228,138231],{},[373,138229,138230],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138233,138234,138237],{},[373,138235,138236],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138239,138240],{},"页面必须有三个标签用来符合 SEO 优化",[1554,138242],{"style":126471,"src":138243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[178,138245,138246],{},[181,138247,138248],{},"title网站标题",[14,138250,138251,138254],{},[373,138252,138253],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138256,68879],{},[1226,138258,138259,138262],{},[181,138260,138261],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[181,138263,138264],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[178,138266,138267],{"start":84},[181,138268,138269],{},"description网站描述",[14,138271,138272],{},"简要说明我们网站主要是做什么的",[14,138274,138275,138278],{},[373,138276,138277],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138280,68879],{},[14,138282,138283],{},[46,138284,138285],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[178,138287,138288],{"start":109},[181,138289,138290],{},"keywords关键词",[14,138292,138293],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138295,68879],{},[14,138297,138298],{},[46,138299,138300],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138302,138303],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138305,138306],{},[373,138307,138308],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[178,138310,138311],{"start":120},[181,138312,138313],{},"代码总结",[39,138315,138316],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,138317,138318,138322,138336,138340],{"__ignoreMap":44},[49,138319,138320],{"class":51,"line":52},[49,138321,130726],{"class":283},[49,138323,138324,138326,138328,138330,138332,138334],{"class":51,"line":84},[49,138325,1129],{"class":55},[49,138327,51700],{"class":51389},[49,138329,53575],{"class":2055},[49,138331,60],{"class":55},[49,138333,130739],{"class":328},[49,138335,51396],{"class":55},[49,138337,138338],{"class":51,"line":109},[49,138339,130746],{"class":55},[49,138341,138342,138344,138346],{"class":51,"line":120},[49,138343,51874],{"class":55},[49,138345,51700],{"class":51389},[49,138347,51396],{"class":55},[166,138349,138351],{"id":138350},"_154-项目公共部分制作","15.4 项目公共部分制作",[195,138353,138355],{"id":138354},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1554,138357],{"style":126471,"src":138358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[195,138360,138362],{"id":138361},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138364,138365],{},"布局思路：",[1226,138367,138368,138371,138374,138396,138429],{},[181,138369,138370],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[181,138372,138373],{},"里面包含版心的盒子",[181,138375,138376,138377],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1226,138378,138379,138387,138393],{},[181,138380,138381,138382,21590,138384,138386],{},"1 号盒子 里面包含一个",[46,138383,1226],{},[46,138385,1226],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[181,138388,138389,138390,138392],{},"里面的内容是水平排列，所以需要给",[46,138391,181],{},"设置浮动",[181,138394,138395],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[181,138397,138398,138399],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1226,138400,138401,138415,138420],{},[181,138402,138403,138404,21590,138406,138408,138409,138411,138412,138414],{},"2 号盒子 里面包含一个",[46,138405,1226],{},[46,138407,1226],{},"包裹",[46,138410,181],{},"，中间的",[46,138413,1140],{},"可以用样式去设置，也可以用字符 |",[181,138416,138417,138418,138392],{},"里面内容水平排列，给",[46,138419,181],{},[181,138421,138422,138423,138425,138426,138428],{},"找到里面所有偶数的 ",[46,138424,181],{}," 设置样式（偶数的 ",[46,138427,181],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[181,138430,138431,138432],{},"需要用到字体图标",[1226,138433,138434,138440,138443,138446,138449],{},[181,138435,138436,138437],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[46,138438,138439],{},"arrow-icon",[181,138441,138442],{},"先要引入字体图片的资源",[181,138444,138445],{},"在样式里面利用 font-face 来进行声明",[181,138447,138448],{},"在伪元素的 content属性设置 图标的编码",[181,138450,138451],{},"给伪元素设置font-family属性",[14,138453,138454],{},"结构实例代码：",[39,138456,138458],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},"div::before {\n  content: \"\";\n  display: block;\n}\n",[46,138459,138460,138468,138478,138488],{"__ignoreMap":44},[49,138461,138462,138464,138466],{"class":51,"line":52},[49,138463,51700],{"class":51389},[49,138465,137616],{"class":2055},[49,138467,15662],{"class":55},[49,138469,138470,138472,138474,138476],{"class":51,"line":84},[49,138471,137623],{"class":66},[49,138473,51526],{"class":55},[49,138475,7742],{"class":328},[49,138477,1382],{"class":55},[49,138479,138480,138482,138484,138486],{"class":51,"line":109},[49,138481,128231],{"class":66},[49,138483,51526],{"class":55},[49,138485,60958],{"class":66},[49,138487,1382],{"class":55},[49,138489,138490],{"class":51,"line":120},[49,138491,1657],{"class":55},[14,138493,138494],{},"样式实例代码：",[39,138496,138497],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,138498,138499,138507,138517,138527],{"__ignoreMap":44},[49,138500,138501,138503,138505],{"class":51,"line":52},[49,138502,51700],{"class":51389},[49,138504,137616],{"class":2055},[49,138506,15662],{"class":55},[49,138508,138509,138511,138513,138515],{"class":51,"line":84},[49,138510,137623],{"class":66},[49,138512,51526],{"class":55},[49,138514,7742],{"class":328},[49,138516,1382],{"class":55},[49,138518,138519,138521,138523,138525],{"class":51,"line":109},[49,138520,128231],{"class":66},[49,138522,51526],{"class":55},[49,138524,60958],{"class":66},[49,138526,1382],{"class":55},[49,138528,138529],{"class":51,"line":120},[49,138530,1657],{"class":55},[195,138532,138534],{"id":138533},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1226,138536,138537],{},[181,138538,138539],{},"header 盒子必须要有高度",[14,138541,138542,138543,138545,138546],{},"1 号盒子是 ",[46,138544,131627],{}," 标志定位，在正常开发过程中， ",[373,138547,138548,138549,138552],{},"logo的布局其实是有讲究的，需要进行 ",[46,138550,138551],{},"logoSEO","的优化 （★★★）",[1226,138554,138555,138563,138571,138598],{},[181,138556,138557,138559,138560,138562],{},[46,138558,131627],{}," 里面首先放一个 ",[46,138561,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[181,138564,138565,138567,138568,138570],{},[46,138566,10],{}," 里面再放一个链接，可以返回首页的，把 ",[46,138569,131627],{}," 的背景图片给链接即可",[181,138572,138573,138574],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1226,138575,138576,138591],{},[181,138577,138578,138579,138582,138583,138586,138587,138590],{},"方法1：",[46,138580,138581],{},"text-indent"," 移到盒子外面（",[46,138584,138585],{},"text-indent: -9999px",") ，然后 ",[46,138588,138589],{},"overflow:hidden"," ，淘宝的做法",[181,138592,138593,138594,138597],{},"方法2：直接给 ",[46,138595,138596],{},"font-size: 0;"," 就看不到文字了，京东的做法",[181,138599,138600,138601,138603,138604,138606],{},"最后给链接一个 ",[46,138602,51496],{}," 属性，这样鼠标放到 ",[46,138605,131627],{}," 上就可以看到提示文字了",[14,138608,138454],{},[39,138610,138611],{"className":127362,"code":131848,"language":127364,"meta":44,"style":44},[46,138612,138613],{"__ignoreMap":44},[49,138614,138615,138617,138619,138621,138623,138625,138627,138629,138631,138633,138635],{"class":51,"line":52},[49,138616,1129],{"class":55},[49,138618,56],{"class":51389},[49,138620,61146],{"class":2055},[49,138622,60],{"class":55},[49,138624,131863],{"class":328},[49,138626,131866],{"class":2055},[49,138628,60],{"class":55},[49,138630,131871],{"class":328},[49,138632,131874],{"class":55},[49,138634,56],{"class":51389},[49,138636,51396],{"class":55},[14,138638,138494],{},[39,138640,138641],{"className":127362,"code":131848,"language":127364,"meta":44,"style":44},[46,138642,138643],{"__ignoreMap":44},[49,138644,138645,138647,138649,138651,138653,138655,138657,138659,138661,138663,138665],{"class":51,"line":52},[49,138646,1129],{"class":55},[49,138648,56],{"class":51389},[49,138650,61146],{"class":2055},[49,138652,60],{"class":55},[49,138654,131863],{"class":328},[49,138656,131866],{"class":2055},[49,138658,60],{"class":55},[49,138660,131871],{"class":328},[49,138662,131874],{"class":55},[49,138664,56],{"class":51389},[49,138666,51396],{"class":55},[14,138668,138669,138670,138672],{},"2 号盒子是 ",[46,138671,131640],{}," 搜索模块定位",[1226,138674,138675,138678,138681,138684],{},[181,138676,138677],{},"search盒子利用定位的方式放在对应的位置",[181,138679,138680],{},"search盒子设置绝对定位，header盒子设置相对定位",[181,138682,138683],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[181,138685,138686],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138688,138454],{},[39,138690,138691],{"className":126615,"code":131935,"language":126617,"meta":44,"style":44},[46,138692,138693,138715,138719,138729],{"__ignoreMap":44},[49,138694,138695,138697,138699,138701,138703,138705,138707,138709,138711,138713],{"class":51,"line":52},[49,138696,51700],{"class":51389},[49,138698,12525],{"class":55},[49,138700,14],{"class":51389},[49,138702,12525],{"class":55},[49,138704,10],{"class":51389},[49,138706,12525],{"class":55},[49,138708,1226],{"class":51389},[49,138710,12525],{"class":55},[49,138712,181],{"class":51389},[49,138714,15662],{"class":55},[49,138716,138717],{"class":51,"line":84},[49,138718,131964],{"class":283},[49,138720,138721,138723,138725,138727],{"class":51,"line":109},[49,138722,128231],{"class":66},[49,138724,51526],{"class":55},[49,138726,60958],{"class":66},[49,138728,1382],{"class":55},[49,138730,138731],{"class":51,"line":120},[49,138732,1657],{"class":55},[14,138734,138494],{},[39,138736,138737],{"className":126615,"code":131935,"language":126617,"meta":44,"style":44},[46,138738,138739,138761,138765,138775],{"__ignoreMap":44},[49,138740,138741,138743,138745,138747,138749,138751,138753,138755,138757,138759],{"class":51,"line":52},[49,138742,51700],{"class":51389},[49,138744,12525],{"class":55},[49,138746,14],{"class":51389},[49,138748,12525],{"class":55},[49,138750,10],{"class":51389},[49,138752,12525],{"class":55},[49,138754,1226],{"class":51389},[49,138756,12525],{"class":55},[49,138758,181],{"class":51389},[49,138760,15662],{"class":55},[49,138762,138763],{"class":51,"line":84},[49,138764,131964],{"class":283},[49,138766,138767,138769,138771,138773],{"class":51,"line":109},[49,138768,128231],{"class":66},[49,138770,51526],{"class":55},[49,138772,60958],{"class":66},[49,138774,1382],{"class":55},[49,138776,138777],{"class":51,"line":120},[49,138778,1657],{"class":55},[14,138780,138781],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138783,138784,138785,138788],{},"3 号盒子是 ",[46,138786,138787],{},"hotwords"," 热词模块定位",[1226,138790,138791,138794,138797],{},[181,138792,138793],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[181,138795,138796],{},"给里面所有的a标签设置 左右10px的外边距",[181,138798,138799],{},"给第一个a标签设置文字变红色（#c81623）",[14,138801,138454],{},[39,138803,138805],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},"div {\n  margin: 0 auto;\n}\n",[46,138806,138807,138813,138825],{"__ignoreMap":44},[49,138808,138809,138811],{"class":51,"line":52},[49,138810,51700],{"class":51389},[49,138812,15662],{"class":55},[49,138814,138815,138817,138819,138821,138823],{"class":51,"line":84},[49,138816,70559],{"class":66},[49,138818,51526],{"class":55},[49,138820,415],{"class":66},[49,138822,51645],{"class":66},[49,138824,1382],{"class":55},[49,138826,138827],{"class":51,"line":109},[49,138828,1657],{"class":55},[14,138830,138494],{},[39,138832,138833],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,138834,138835,138841,138853],{"__ignoreMap":44},[49,138836,138837,138839],{"class":51,"line":52},[49,138838,51700],{"class":51389},[49,138840,15662],{"class":55},[49,138842,138843,138845,138847,138849,138851],{"class":51,"line":84},[49,138844,70559],{"class":66},[49,138846,51526],{"class":55},[49,138848,415],{"class":66},[49,138850,51645],{"class":66},[49,138852,1382],{"class":55},[49,138854,138855],{"class":51,"line":109},[49,138856,1657],{"class":55},[14,138858,138859,138860,138863],{},"4 号盒子是 ",[46,138861,138862],{},"shopcar"," 购物车模块",[1226,138865,138866,138871,138874,138877],{},[181,138867,123398,138868,138870],{},[46,138869,138862],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[181,138872,138873],{},"count 统计部分用绝对定位做",[181,138875,138876],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[181,138878,138879],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138881,138454],{},[39,138883,138884],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,138885,138886,138890,138904,138908,138922,138926,138940,138944,138958,138962],{"__ignoreMap":44},[49,138887,138888],{"class":51,"line":52},[49,138889,132054],{"class":283},[49,138891,138892,138894,138896,138898,138900,138902],{"class":51,"line":84},[49,138893,132059],{"class":2055},[49,138895,79896],{"class":55},[49,138897,128975],{"class":66},[49,138899,51526],{"class":55},[49,138901,132068],{"class":66},[49,138903,129545],{"class":55},[49,138905,138906],{"class":51,"line":109},[49,138907,132075],{"class":283},[49,138909,138910,138912,138914,138916,138918,138920],{"class":51,"line":120},[49,138911,132080],{"class":2055},[49,138913,79896],{"class":55},[49,138915,128975],{"class":66},[49,138917,51526],{"class":55},[49,138919,54853],{"class":66},[49,138921,129545],{"class":55},[49,138923,138924],{"class":51,"line":135},[49,138925,132095],{"class":283},[49,138927,138928,138930,138932,138934,138936,138938],{"class":51,"line":1306},[49,138929,132100],{"class":2055},[49,138931,79896],{"class":55},[49,138933,128975],{"class":66},[49,138935,51526],{"class":55},[49,138937,54920],{"class":66},[49,138939,129545],{"class":55},[49,138941,138942],{"class":51,"line":1312},[49,138943,132115],{"class":283},[49,138945,138946,138948,138950,138952,138954,138956],{"class":51,"line":1403},[49,138947,132120],{"class":2055},[49,138949,79896],{"class":55},[49,138951,128975],{"class":66},[49,138953,51526],{"class":55},[49,138955,86322],{"class":66},[49,138957,129545],{"class":55},[49,138959,138960],{"class":51,"line":1409},[49,138961,132135],{"class":283},[49,138963,138964,138966,138968,138970,138972,138974],{"class":51,"line":1421},[49,138965,132140],{"class":2055},[49,138967,79896],{"class":55},[49,138969,128975],{"class":66},[49,138971,51526],{"class":55},[49,138973,132149],{"class":66},[49,138975,129545],{"class":55},[14,138977,138494],{},[39,138979,138980],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,138981,138982,138986,139000,139004,139018,139022,139036,139040,139054,139058],{"__ignoreMap":44},[49,138983,138984],{"class":51,"line":52},[49,138985,132054],{"class":283},[49,138987,138988,138990,138992,138994,138996,138998],{"class":51,"line":84},[49,138989,132059],{"class":2055},[49,138991,79896],{"class":55},[49,138993,128975],{"class":66},[49,138995,51526],{"class":55},[49,138997,132068],{"class":66},[49,138999,129545],{"class":55},[49,139001,139002],{"class":51,"line":109},[49,139003,132075],{"class":283},[49,139005,139006,139008,139010,139012,139014,139016],{"class":51,"line":120},[49,139007,132080],{"class":2055},[49,139009,79896],{"class":55},[49,139011,128975],{"class":66},[49,139013,51526],{"class":55},[49,139015,54853],{"class":66},[49,139017,129545],{"class":55},[49,139019,139020],{"class":51,"line":135},[49,139021,132095],{"class":283},[49,139023,139024,139026,139028,139030,139032,139034],{"class":51,"line":1306},[49,139025,132100],{"class":2055},[49,139027,79896],{"class":55},[49,139029,128975],{"class":66},[49,139031,51526],{"class":55},[49,139033,54920],{"class":66},[49,139035,129545],{"class":55},[49,139037,139038],{"class":51,"line":1312},[49,139039,132115],{"class":283},[49,139041,139042,139044,139046,139048,139050,139052],{"class":51,"line":1403},[49,139043,132120],{"class":2055},[49,139045,79896],{"class":55},[49,139047,128975],{"class":66},[49,139049,51526],{"class":55},[49,139051,86322],{"class":66},[49,139053,129545],{"class":55},[49,139055,139056],{"class":51,"line":1409},[49,139057,132135],{"class":283},[49,139059,139060,139062,139064,139066,139068,139070],{"class":51,"line":1421},[49,139061,132140],{"class":2055},[49,139063,79896],{"class":55},[49,139065,128975],{"class":66},[49,139067,51526],{"class":55},[49,139069,132149],{"class":66},[49,139071,129545],{"class":55},[195,139073,139075,139076,139078],{"id":139074},"_1544-nav导航模块制作","15.4.4 ",[46,139077,53802],{},"导航模块制作",[1554,139080],{"style":126471,"src":139081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139083,139084,139086],{},[46,139085,53802],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139088,139089,139090],{},"1 号盒子左侧浮动，",[46,139091,139092],{},"dropdown",[1226,139094,139095,139105,139113,139119,139127,139137,139145,139156],{},[181,139096,139097,139098,101081,139101,139104],{},"1号盒子有讲究，根据相关性 里面包含 ",[46,139099,139100],{},".dt",[46,139102,139103],{},".dd"," 两个盒子",[181,139106,139107,139109,139110,139112],{},[46,139108,139100],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[46,139111,139103],{}," 挤到下面去了",[181,139114,139115,139116,139118],{},"给 ",[46,139117,139103],{}," 盒子设置宽度 和 高度，以及背景颜色",[181,139120,139115,139121,139123,139124,120300],{},[46,139122,139103],{}," 盒子里面定义 无序列表 （",[46,139125,139126],{},"ul > li > a",[181,139128,139129,139130,139132,139133,139136],{},"每个 ",[46,139131,181],{}," 都有一个高度（",[46,139134,139135],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[181,139138,139115,139139,139141,139142,120300],{},[46,139140,181],{}," 里面的a设置文字大小（",[46,139143,139144],{},"14px",[181,139146,139115,139147,139149,139150,139152,139153,139155],{},[46,139148,181],{}," 设置 ",[46,139151,127776],{},"，当鼠标移入的时候，让",[46,139154,181],{},"的背景变成白色，让里面的文字变成红色",[181,139157,139158,139160,139161,139163,139164,139166],{},[46,139159,181],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[46,139162,181],{},"的右侧，那么给",[46,139165,181],{},"设置相对定位",[14,139168,139169],{},"一定要注意相关性",[14,139171,138454],{},[39,139173,139174],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,139175,139176,139184,139194,139204],{"__ignoreMap":44},[49,139177,139178,139180,139182],{"class":51,"line":52},[49,139179,51700],{"class":51389},[49,139181,137616],{"class":2055},[49,139183,15662],{"class":55},[49,139185,139186,139188,139190,139192],{"class":51,"line":84},[49,139187,137623],{"class":66},[49,139189,51526],{"class":55},[49,139191,7742],{"class":328},[49,139193,1382],{"class":55},[49,139195,139196,139198,139200,139202],{"class":51,"line":109},[49,139197,128231],{"class":66},[49,139199,51526],{"class":55},[49,139201,60958],{"class":66},[49,139203,1382],{"class":55},[49,139205,139206],{"class":51,"line":120},[49,139207,1657],{"class":55},[14,139209,138494],{},[39,139211,139212],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,139213,139214,139222,139232,139242],{"__ignoreMap":44},[49,139215,139216,139218,139220],{"class":51,"line":52},[49,139217,51700],{"class":51389},[49,139219,137616],{"class":2055},[49,139221,15662],{"class":55},[49,139223,139224,139226,139228,139230],{"class":51,"line":84},[49,139225,137623],{"class":66},[49,139227,51526],{"class":55},[49,139229,7742],{"class":328},[49,139231,1382],{"class":55},[49,139233,139234,139236,139238,139240],{"class":51,"line":109},[49,139235,128231],{"class":66},[49,139237,51526],{"class":55},[49,139239,60958],{"class":66},[49,139241,1382],{"class":55},[49,139243,139244],{"class":51,"line":120},[49,139245,1657],{"class":55},[14,139247,139248],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139250,139251,139252,139255],{},"2 号盒子左侧浮动，",[46,139253,139254],{},"navitems"," 导航栏组",[1226,139257,139258,139263,139272],{},[181,139259,139260,139261],{},"里面结构是 ",[46,139262,139126],{},[181,139264,139265,139266,139268,139269,139271],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[46,139267,56],{},"左右的",[46,139270,30972],{},"把两侧撑开",[181,139273,139274],{},"让文字垂直居中（行高等于高度）",[1554,139276],{"style":126471,"src":139277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139279,139280],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139282,138454],{},[39,139284,139286],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},".box {\n  float: left;\n}\n",[46,139287,139288,139294,139304],{"__ignoreMap":44},[49,139289,139290,139292],{"class":51,"line":52},[49,139291,130463],{"class":2055},[49,139293,15662],{"class":55},[49,139295,139296,139298,139300,139302],{"class":51,"line":84},[49,139297,131095],{"class":66},[49,139299,51526],{"class":55},[49,139301,23826],{"class":66},[49,139303,1382],{"class":55},[49,139305,139306],{"class":51,"line":109},[49,139307,1657],{"class":55},[14,139309,138494],{},[39,139311,139312],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,139313,139314,139320,139330],{"__ignoreMap":44},[49,139315,139316,139318],{"class":51,"line":52},[49,139317,130463],{"class":2055},[49,139319,15662],{"class":55},[49,139321,139322,139324,139326,139328],{"class":51,"line":84},[49,139323,131095],{"class":66},[49,139325,51526],{"class":55},[49,139327,23826],{"class":66},[49,139329,1382],{"class":55},[49,139331,139332],{"class":51,"line":109},[49,139333,1657],{"class":55},[14,139335,139336],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1554,139338],{"style":126471,"src":139339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[39,139341,139342],{"className":126615,"code":130772,"language":126617,"meta":44,"style":44},[46,139343,139344,139350,139366],{"__ignoreMap":44},[49,139345,139346,139348],{"class":51,"line":52},[49,139347,51700],{"class":51389},[49,139349,15662],{"class":55},[49,139351,139352,139354,139356,139358,139360,139362,139364],{"class":51,"line":84},[49,139353,70985],{"class":66},[49,139355,51526],{"class":55},[49,139357,441],{"class":66},[49,139359,51581],{"class":59},[49,139361,51610],{"class":66},[49,139363,130007],{"class":66},[49,139365,1382],{"class":55},[49,139367,139368],{"class":51,"line":109},[49,139369,1657],{"class":55},[195,139371,139373],{"id":139372},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1554,139375],{"style":126471,"src":139376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1226,139378,139379,139384,139389],{},[181,139380,139381,139383],{},[46,139382,131818],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[181,139385,139386,139388],{},[46,139387,131818],{}," 里面有一个大的版心",[181,139390,139391,139392,139395,139396],{},"版心里面包含 1 号盒子，",[46,139393,139394],{},"mod_service"," 是服务模块，mod 是模块的意思",[1226,139397,139398,139403,139416,139432,139437],{},[181,139399,139115,139400,139402],{},[46,139401,139394],{}," 设置高度（80px）和下边框",[181,139404,139405,139406,139409,139410,139412,139413,139415],{},"在里面定义 ",[46,139407,139408],{},"ul > li"," ,每个",[46,139411,181],{}," 宽度是300px 高度是 50px，给每个",[46,139414,181],{},"设置35px的左内边距",[181,139417,139418,139419,139421,139422,139424,139425,139427,139428,18500,139430,120300],{},"在每个",[46,139420,181],{},"里面，放一个 ",[46,139423,23000],{},"（里面放图标），一个",[46,139426,51700],{},"（里面放",[46,139429,51700],{},[46,139431,14],{},[181,139433,139115,139434,139436],{},[46,139435,23000],{},"设置浮动，让h5与这个div左右排列",[181,139438,139439],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139441,138454],{},[39,139443,139445],{"className":126615,"code":139444,"language":126617,"meta":44,"style":44},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[46,139446,139447,139453,139465,139477,139504],{"__ignoreMap":44},[49,139448,139449,139451],{"class":51,"line":52},[49,139450,134372],{"class":2055},[49,139452,15662],{"class":55},[49,139454,139455,139457,139459,139461,139463],{"class":51,"line":84},[49,139456,70657],{"class":66},[49,139458,51526],{"class":55},[49,139460,919],{"class":66},[49,139462,51581],{"class":59},[49,139464,1382],{"class":55},[49,139466,139467,139469,139471,139473,139475],{"class":51,"line":109},[49,139468,70877],{"class":66},[49,139470,51526],{"class":55},[49,139472,919],{"class":66},[49,139474,51581],{"class":59},[49,139476,1382],{"class":55},[49,139478,139479,139481,139483,139485,139487,139489,139491,139493,139496,139498,139500,139502],{"class":51,"line":120},[49,139480,70700],{"class":66},[49,139482,51526],{"class":55},[49,139484,61815],{"class":66},[49,139486,228],{"class":55},[49,139488,134411],{"class":126},[49,139490,13804],{"class":55},[49,139492,61825],{"class":66},[49,139494,139495],{"class":66}," -10",[49,139497,51581],{"class":59},[49,139499,134430],{"class":66},[49,139501,51581],{"class":59},[49,139503,1382],{"class":55},[49,139505,139506],{"class":51,"line":135},[49,139507,1657],{"class":55},[14,139509,138494],{},[39,139511,139512],{"className":126615,"code":139444,"language":126617,"meta":44,"style":44},[46,139513,139514,139520,139532,139544,139570],{"__ignoreMap":44},[49,139515,139516,139518],{"class":51,"line":52},[49,139517,134372],{"class":2055},[49,139519,15662],{"class":55},[49,139521,139522,139524,139526,139528,139530],{"class":51,"line":84},[49,139523,70657],{"class":66},[49,139525,51526],{"class":55},[49,139527,919],{"class":66},[49,139529,51581],{"class":59},[49,139531,1382],{"class":55},[49,139533,139534,139536,139538,139540,139542],{"class":51,"line":109},[49,139535,70877],{"class":66},[49,139537,51526],{"class":55},[49,139539,919],{"class":66},[49,139541,51581],{"class":59},[49,139543,1382],{"class":55},[49,139545,139546,139548,139550,139552,139554,139556,139558,139560,139562,139564,139566,139568],{"class":51,"line":120},[49,139547,70700],{"class":66},[49,139549,51526],{"class":55},[49,139551,61815],{"class":66},[49,139553,228],{"class":55},[49,139555,134411],{"class":126},[49,139557,13804],{"class":55},[49,139559,61825],{"class":66},[49,139561,139495],{"class":66},[49,139563,51581],{"class":59},[49,139565,134430],{"class":66},[49,139567,51581],{"class":59},[49,139569,1382],{"class":55},[49,139571,139572],{"class":51,"line":135},[49,139573,1657],{"class":55},[14,139575,139576],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1226,139578,139579,139582,139588,139594,139606],{},[181,139580,139581],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[181,139583,139584,139585,120300],{},"里面的布局利用 自定义列表来实现（",[46,139586,139587],{},"dl > dt + dd",[181,139589,139115,139590,139593],{},[46,139591,139592],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[181,139595,139115,139596,139599,139600,18500,139602,139605],{},[46,139597,139598],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[46,139601,139598],{},[46,139603,139604],{},"dd","之间有些距离",[181,139607,139608],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139610,138454],{},[39,139612,139613],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,139614,139615,139621,139633],{"__ignoreMap":44},[49,139616,139617,139619],{"class":51,"line":52},[49,139618,51700],{"class":51389},[49,139620,15662],{"class":55},[49,139622,139623,139625,139627,139629,139631],{"class":51,"line":84},[49,139624,70559],{"class":66},[49,139626,51526],{"class":55},[49,139628,415],{"class":66},[49,139630,51645],{"class":66},[49,139632,1382],{"class":55},[49,139634,139635],{"class":51,"line":109},[49,139636,1657],{"class":55},[14,139638,138494],{},[39,139640,139641],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,139642,139643,139649,139661],{"__ignoreMap":44},[49,139644,139645,139647],{"class":51,"line":52},[49,139646,51700],{"class":51389},[49,139648,15662],{"class":55},[49,139650,139651,139653,139655,139657,139659],{"class":51,"line":84},[49,139652,70559],{"class":66},[49,139654,51526],{"class":55},[49,139656,415],{"class":66},[49,139658,51645],{"class":66},[49,139660,1382],{"class":55},[49,139662,139663],{"class":51,"line":109},[49,139664,1657],{"class":55},[14,139666,139667],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1226,139669,139670,139679,139682,139693],{},[181,139671,139672,139673,139675,139676,139678],{},"分为上下两块，上面是 ",[46,139674,131835],{}," 友情链接，下面是 ",[46,139677,131828],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[181,139680,139681],{},"把内容分别复制到相应模块中",[181,139683,139115,139684,139686,139687,139689,139690,139692],{},[46,139685,131835],{}," 设置 15px 的下外边距，给",[46,139688,131835],{}," 里面 的 ",[46,139691,56],{}," 标签设置 左右 3px 的外边距",[181,139694,139695,139696,139698],{},"给",[46,139697,131828],{}," 设置 20px 的行高",[14,139700,138454],{},[39,139702,139703],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,139704,139705,139711,139723],{"__ignoreMap":44},[49,139706,139707,139709],{"class":51,"line":52},[49,139708,51700],{"class":51389},[49,139710,15662],{"class":55},[49,139712,139713,139715,139717,139719,139721],{"class":51,"line":84},[49,139714,70559],{"class":66},[49,139716,51526],{"class":55},[49,139718,415],{"class":66},[49,139720,51645],{"class":66},[49,139722,1382],{"class":55},[49,139724,139725],{"class":51,"line":109},[49,139726,1657],{"class":55},[14,139728,138494],{},[39,139730,139731],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,139732,139733,139739,139751],{"__ignoreMap":44},[49,139734,139735,139737],{"class":51,"line":52},[49,139736,51700],{"class":51389},[49,139738,15662],{"class":55},[49,139740,139741,139743,139745,139747,139749],{"class":51,"line":84},[49,139742,70559],{"class":66},[49,139744,51526],{"class":55},[49,139746,415],{"class":66},[49,139748,51645],{"class":66},[49,139750,1382],{"class":55},[49,139752,139753],{"class":51,"line":109},[49,139754,1657],{"class":55},[14,139756,139757],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[143,139759,139760],{},"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":44,"searchDepth":84,"depth":84,"links":139762},[139763,139764,139765,139772],{"id":138043,"depth":84,"text":138044},{"id":138062,"depth":84,"text":138063},{"id":138089,"depth":84,"text":138090,"children":139766},[139767,139768,139769,139770,139771],{"id":138093,"depth":109,"text":138094},{"id":138106,"depth":109,"text":138107},{"id":138130,"depth":109,"text":138131},{"id":138152,"depth":109,"text":138153},{"id":138224,"depth":109,"text":138225},{"id":138350,"depth":84,"text":138351,"children":139773},[139774,139775,139776,139777,139779],{"id":138354,"depth":109,"text":138355},{"id":138361,"depth":109,"text":138362},{"id":138533,"depth":109,"text":138534},{"id":139074,"depth":109,"text":139778},"15.4.4 nav导航模块制作",{"id":139372,"depth":109,"text":139373},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138035,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139786,"title":139787,"body":139788,"description":148,"extension":149,"meta":142190,"navigation":151,"path":142191,"seo":142192,"stem":142193,"__hash__":142194},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139789,"toc":142167},[139790,139793,139797,139801,139813,139816,139819,139822,139833,139835,139859,139861,139885,139890,139893,139895,139931,139933,139969,139972,139977,139980,139983,139986,140016,140023,140026,140036,140038,140072,140075,140109,140115,140132,140134,140170,140172,140208,140213,140238,140240,140266,140268,140292,140299,140302,140366,140368,140410,140412,140452,140459,140464,140466,140496,140498,140528,140532,140535,140542,140554,140556,140582,140584,140608,140611,140613,140637,140643,140653,140655,140685,140687,140717,140724,140765,140767,140803,140805,140841,140845,140848,140851,140854,140860,140865,140868,140891,140894,140918,140921,140945,140950,140953,140956,140959,140962,140965,141039,141041,141071,141073,141103,141106,141109,141141,141145,141149,141163,141172,141175,141180,141182,141276,141278,141372,141395,141397,141421,141423,141447,141454,141457,141467,141469,141493,141498,141506,141508,141538,141543,141583,141585,141611,141613,141639,141643,141646,141651,141654,141658,141666,141673,141681,141683,141713,141715,141745,141753,141756,141759,141761,141791,141793,141823,141826,141831,141833,141857,141859,141883,141886,141971,141973,141997,141999,142023,142027,142029,142053,142055,142089,142093,142107,142110,142115,142118,142123,142126,142156,142164],[10,139791,139787],{"id":139792},"_16-品优购项目下篇-主体与页面开发",[166,139794,139796],{"id":139795},"_161-项目主体模块制作","16.1 项目主体模块制作",[195,139798,139800],{"id":139799},"_1611-首页制作","16.1.1 首页制作",[14,139802,139803,139805,139806,139808,139809,139812],{},[373,139804,102121],{}," 主体模块是 ",[373,139807,74147],{}," 里面专有的，注意需要新的样式文件 ",[373,139810,139811],{},"index.css，"," 就不要写在common.css中了",[1554,139814],{"style":126471,"src":139815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1554,139817],{"style":126471,"src":139818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139820,139821],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1226,139823,139824,139827,139830],{},[181,139825,139826],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[181,139828,139829],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[181,139831,139832],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139834,138454],{},[39,139836,139837],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,139838,139839,139845,139855],{"__ignoreMap":44},[49,139840,139841,139843],{"class":51,"line":52},[49,139842,130463],{"class":2055},[49,139844,15662],{"class":55},[49,139846,139847,139849,139851,139853],{"class":51,"line":84},[49,139848,131095],{"class":66},[49,139850,51526],{"class":55},[49,139852,23826],{"class":66},[49,139854,1382],{"class":55},[49,139856,139857],{"class":51,"line":109},[49,139858,1657],{"class":55},[14,139860,138494],{},[39,139862,139863],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,139864,139865,139871,139881],{"__ignoreMap":44},[49,139866,139867,139869],{"class":51,"line":52},[49,139868,130463],{"class":2055},[49,139870,15662],{"class":55},[49,139872,139873,139875,139877,139879],{"class":51,"line":84},[49,139874,131095],{"class":66},[49,139876,51526],{"class":55},[49,139878,23826],{"class":66},[49,139880,1382],{"class":55},[49,139882,139883],{"class":51,"line":109},[49,139884,1657],{"class":55},[178,139886,139887],{},[181,139888,139889],{},"左侧focus模块制作",[1554,139891],{"style":126471,"src":139892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139894,138454],{},[39,139896,139897],{"className":126615,"code":127938,"language":126617,"meta":44,"style":44},[46,139898,139899,139907,139917,139927],{"__ignoreMap":44},[49,139900,139901,139903,139905],{"class":51,"line":52},[49,139902,53910],{"class":51389},[49,139904,61989],{"class":2055},[49,139906,15662],{"class":55},[49,139908,139909,139911,139913,139915],{"class":51,"line":84},[49,139910,127953],{"class":66},[49,139912,51526],{"class":55},[49,139914,54978],{"class":66},[49,139916,1382],{"class":55},[49,139918,139919,139921,139923,139925],{"class":51,"line":109},[49,139920,70887],{"class":66},[49,139922,51526],{"class":55},[49,139924,54826],{"class":66},[49,139926,1382],{"class":55},[49,139928,139929],{"class":51,"line":120},[49,139930,1657],{"class":55},[14,139932,138494],{},[39,139934,139935],{"className":126615,"code":127938,"language":126617,"meta":44,"style":44},[46,139936,139937,139945,139955,139965],{"__ignoreMap":44},[49,139938,139939,139941,139943],{"class":51,"line":52},[49,139940,53910],{"class":51389},[49,139942,61989],{"class":2055},[49,139944,15662],{"class":55},[49,139946,139947,139949,139951,139953],{"class":51,"line":84},[49,139948,127953],{"class":66},[49,139950,51526],{"class":55},[49,139952,54978],{"class":66},[49,139954,1382],{"class":55},[49,139956,139957,139959,139961,139963],{"class":51,"line":109},[49,139958,70887],{"class":66},[49,139960,51526],{"class":55},[49,139962,54826],{"class":66},[49,139964,1382],{"class":55},[49,139966,139967],{"class":51,"line":120},[49,139968,1657],{"class":55},[14,139970,139971],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[178,139973,139974],{"start":84},[181,139975,139976],{},"右侧newsflash模块制作",[1554,139978],{"style":126471,"src":139979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139981,139982],{},"右侧的模块 分为上中下三个盒子",[14,139984,139985],{},"结构代码：",[39,139987,139988],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,139989,139990],{"__ignoreMap":44},[49,139991,139992,139994,139996,139998,140000,140002,140004,140006,140008,140010,140012,140014],{"class":51,"line":52},[49,139993,1129],{"class":55},[49,139995,1554],{"class":51389},[49,139997,55328],{"class":2055},[49,139999,60],{"class":55},[49,140001,134132],{"class":328},[49,140003,55336],{"class":2055},[49,140005,60],{"class":55},[49,140007,134139],{"class":328},[49,140009,134142],{"class":2055},[49,140011,60],{"class":55},[49,140013,134147],{"class":328},[49,140015,51396],{"class":55},[14,140017,140018,140019,140022],{},"1 号盒子为 ",[46,140020,140021],{},"news"," 新闻模块 高度为 165px",[1554,140024],{"style":126471,"src":140025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140027,140028,140029,140032,140033],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[46,140030,140031],{},"news-hd","，下面是 ",[46,140034,140035],{},"news-bd",[14,140037,139985],{},[39,140039,140040],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,140041,140042,140046,140060,140064],{"__ignoreMap":44},[49,140043,140044],{"class":51,"line":52},[49,140045,130726],{"class":283},[49,140047,140048,140050,140052,140054,140056,140058],{"class":51,"line":84},[49,140049,1129],{"class":55},[49,140051,51700],{"class":51389},[49,140053,53575],{"class":2055},[49,140055,60],{"class":55},[49,140057,130739],{"class":328},[49,140059,51396],{"class":55},[49,140061,140062],{"class":51,"line":109},[49,140063,130746],{"class":55},[49,140065,140066,140068,140070],{"class":51,"line":120},[49,140067,51874],{"class":55},[49,140069,51700],{"class":51389},[49,140071,51396],{"class":55},[14,140073,140074],{},"样式代码：",[39,140076,140077],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,140078,140079,140083,140097,140101],{"__ignoreMap":44},[49,140080,140081],{"class":51,"line":52},[49,140082,130726],{"class":283},[49,140084,140085,140087,140089,140091,140093,140095],{"class":51,"line":84},[49,140086,1129],{"class":55},[49,140088,51700],{"class":51389},[49,140090,53575],{"class":2055},[49,140092,60],{"class":55},[49,140094,130739],{"class":328},[49,140096,51396],{"class":55},[49,140098,140099],{"class":51,"line":109},[49,140100,130746],{"class":55},[49,140102,140103,140105,140107],{"class":51,"line":120},[49,140104,51874],{"class":55},[49,140106,51700],{"class":51389},[49,140108,51396],{"class":55},[14,140110,140111,140112,140114],{},"上面是",[46,140113,140031],{},"，设置高度是 33px，设置下边框",[1226,140116,140117,140123],{},[181,140118,140119,140120,140122],{},"里面放一个",[46,140121,23000],{}," 标题",[181,140124,140125,140126,140128,140129,140131],{},"放一个a",[46,140127,102756],{},"，内容是 更多，然后让 ",[46,140130,56],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140133,139985],{},[39,140135,140136],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,140137,140138,140146,140156,140166],{"__ignoreMap":44},[49,140139,140140,140142,140144],{"class":51,"line":52},[49,140141,51700],{"class":51389},[49,140143,137616],{"class":2055},[49,140145,15662],{"class":55},[49,140147,140148,140150,140152,140154],{"class":51,"line":84},[49,140149,137623],{"class":66},[49,140151,51526],{"class":55},[49,140153,7742],{"class":328},[49,140155,1382],{"class":55},[49,140157,140158,140160,140162,140164],{"class":51,"line":109},[49,140159,128231],{"class":66},[49,140161,51526],{"class":55},[49,140163,60958],{"class":66},[49,140165,1382],{"class":55},[49,140167,140168],{"class":51,"line":120},[49,140169,1657],{"class":55},[14,140171,140074],{},[39,140173,140174],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,140175,140176,140184,140194,140204],{"__ignoreMap":44},[49,140177,140178,140180,140182],{"class":51,"line":52},[49,140179,51700],{"class":51389},[49,140181,137616],{"class":2055},[49,140183,15662],{"class":55},[49,140185,140186,140188,140190,140192],{"class":51,"line":84},[49,140187,137623],{"class":66},[49,140189,51526],{"class":55},[49,140191,7742],{"class":328},[49,140193,1382],{"class":55},[49,140195,140196,140198,140200,140202],{"class":51,"line":109},[49,140197,128231],{"class":66},[49,140199,51526],{"class":55},[49,140201,60958],{"class":66},[49,140203,1382],{"class":55},[49,140205,140206],{"class":51,"line":120},[49,140207,1657],{"class":55},[14,140209,140210,140211],{},"下面是",[46,140212,140035],{},[1226,140214,140215,140223],{},[181,140216,140217,140218,101081,140220,140222],{},"里面包含 ",[46,140219,1226],{},[46,140221,181],{}," 还有链接",[181,140224,139695,140225,140227,140228,140230,140231,140234,140235],{},[46,140226,181],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[46,140229,131281],{}," 2.设置 ",[46,140232,140233],{},"white-space: nowrap;"," 3. 设置 ",[46,140236,140237],{},"text-overflow: ellipsis;",[14,140239,139985],{},[39,140241,140243],{"className":126615,"code":140242,"language":126617,"meta":44,"style":44},"div {\n  overflow: hidden;\n}\n",[46,140244,140245,140251,140262],{"__ignoreMap":44},[49,140246,140247,140249],{"class":51,"line":52},[49,140248,51700],{"class":51389},[49,140250,15662],{"class":55},[49,140252,140253,140256,140258,140260],{"class":51,"line":84},[49,140254,140255],{"class":66},"  overflow",[49,140257,51526],{"class":55},[49,140259,61803],{"class":66},[49,140261,1382],{"class":55},[49,140263,140264],{"class":51,"line":109},[49,140265,1657],{"class":55},[14,140267,140074],{},[39,140269,140270],{"className":126615,"code":140242,"language":126617,"meta":44,"style":44},[46,140271,140272,140278,140288],{"__ignoreMap":44},[49,140273,140274,140276],{"class":51,"line":52},[49,140275,51700],{"class":51389},[49,140277,15662],{"class":55},[49,140279,140280,140282,140284,140286],{"class":51,"line":84},[49,140281,140255],{"class":66},[49,140283,51526],{"class":55},[49,140285,61803],{"class":66},[49,140287,1382],{"class":55},[49,140289,140290],{"class":51,"line":109},[49,140291,1657],{"class":55},[14,140293,140294,140295,140298],{},"2 号盒子为 ",[46,140296,140297],{},"lifeservice"," 生活服务模块 高度为 209px",[1554,140300],{"style":126471,"src":140301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1226,140303,140304,140307,140317,140341,140352],{},[181,140305,140306],{},"设置边框（左右下边框）",[181,140308,140309,140310,140313,140314,140316],{},"里面的内容 是 ",[46,140311,140312],{},"ul > 12*li","，给",[46,140315,181],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[181,140318,140319,140320],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1226,140321,140322,140327,140336],{},[181,140323,140324,140326],{},[46,140325,140297],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[181,140328,140329,140330,140332,140333,140335],{},"可以让 ",[46,140331,140297],{}," 里面的 ",[46,140334,1226],{}," 宽度为 252，就可以装的下 4 个 小 li",[181,140337,140338,140340],{},[46,140339,140297],{}," 盒子 overflow 隐藏多余的部分就可以了",[181,140342,116530,140343,140345,140346,140348,140349,140351],{},[46,140344,181],{}," 里面放一个 ",[46,140347,661],{},"（里面放图标），下面的文本用 ",[46,140350,14],{}," 标签包裹",[181,140353,139115,140354,140356,140357,140359,140360,139149,140362,140365],{},[46,140355,661],{}," 设置 24px宽和28px的高（注意 ",[46,140358,661],{}," 是行内元素， 转成行内块），给 ",[46,140361,181],{},[46,140363,140364],{},"text-align:center"," 让里面内容居中显示",[14,140367,139985],{},[39,140369,140371],{"className":126615,"code":140370,"language":126617,"meta":44,"style":44},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[46,140372,140373,140391,140396,140406],{"__ignoreMap":44},[49,140374,140375,140377,140379,140381,140383,140385,140387,140389],{"class":51,"line":52},[49,140376,49],{"class":51389},[49,140378,12525],{"class":55},[49,140380,56],{"class":51389},[49,140382,12525],{"class":55},[49,140384,23643],{"class":51389},[49,140386,12525],{"class":55},[49,140388,373],{"class":51389},[49,140390,15662],{"class":55},[49,140392,140393],{"class":51,"line":84},[49,140394,140395],{"class":283},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[49,140397,140398,140400,140402,140404],{"class":51,"line":109},[49,140399,128231],{"class":66},[49,140401,51526],{"class":55},[49,140403,128293],{"class":66},[49,140405,1382],{"class":55},[49,140407,140408],{"class":51,"line":120},[49,140409,1657],{"class":55},[14,140411,140074],{},[39,140413,140414],{"className":126615,"code":140370,"language":126617,"meta":44,"style":44},[46,140415,140416,140434,140438,140448],{"__ignoreMap":44},[49,140417,140418,140420,140422,140424,140426,140428,140430,140432],{"class":51,"line":52},[49,140419,49],{"class":51389},[49,140421,12525],{"class":55},[49,140423,56],{"class":51389},[49,140425,12525],{"class":55},[49,140427,23643],{"class":51389},[49,140429,12525],{"class":55},[49,140431,373],{"class":51389},[49,140433,15662],{"class":55},[49,140435,140436],{"class":51,"line":84},[49,140437,140395],{"class":283},[49,140439,140440,140442,140444,140446],{"class":51,"line":109},[49,140441,128231],{"class":66},[49,140443,51526],{"class":55},[49,140445,128293],{"class":66},[49,140447,1382],{"class":55},[49,140449,140450],{"class":51,"line":120},[49,140451,1657],{"class":55},[14,140453,140454,140455,140458],{},"3 号盒子为 ",[46,140456,140457],{},"bargain"," 特价商品",[1226,140460,140461],{},[181,140462,140463],{},"这个比较简单，直接插入一张图片即可",[14,140465,139985],{},[39,140467,140468],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,140469,140470],{"__ignoreMap":44},[49,140471,140472,140474,140476,140478,140480,140482,140484,140486,140488,140490,140492,140494],{"class":51,"line":52},[49,140473,1129],{"class":55},[49,140475,1554],{"class":51389},[49,140477,55328],{"class":2055},[49,140479,60],{"class":55},[49,140481,134132],{"class":328},[49,140483,55336],{"class":2055},[49,140485,60],{"class":55},[49,140487,134139],{"class":328},[49,140489,134142],{"class":2055},[49,140491,60],{"class":55},[49,140493,134147],{"class":328},[49,140495,51396],{"class":55},[14,140497,140074],{},[39,140499,140500],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,140501,140502],{"__ignoreMap":44},[49,140503,140504,140506,140508,140510,140512,140514,140516,140518,140520,140522,140524,140526],{"class":51,"line":52},[49,140505,1129],{"class":55},[49,140507,1554],{"class":51389},[49,140509,55328],{"class":2055},[49,140511,60],{"class":55},[49,140513,134132],{"class":328},[49,140515,55336],{"class":2055},[49,140517,60],{"class":55},[49,140519,134139],{"class":328},[49,140521,134142],{"class":2055},[49,140523,60],{"class":55},[49,140525,134147],{"class":328},[49,140527,51396],{"class":55},[195,140529,140531],{"id":140530},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1554,140533],{"style":126471,"src":140534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140536,140537,140538,140541],{},"大盒子 ",[46,140539,140540],{},"recom"," 推荐模块 recommend",[1226,140543,140544],{},[181,140545,140546,140547,140549,140550,140553],{},"给这个 ",[46,140548,140540],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[46,140551,140552],{},"#ebebeb","），设置距离上边 12px",[14,140555,139985],{},[39,140557,140559],{"className":126615,"code":140558,"language":126617,"meta":44,"style":44},"div {\n  background-color: #f0f0f0;\n}\n",[46,140560,140561,140567,140578],{"__ignoreMap":44},[49,140562,140563,140565],{"class":51,"line":52},[49,140564,51700],{"class":51389},[49,140566,15662],{"class":55},[49,140568,140569,140571,140573,140576],{"class":51,"line":84},[49,140570,70967],{"class":66},[49,140572,51526],{"class":55},[49,140574,140575],{"class":66},"#f0f0f0",[49,140577,1382],{"class":55},[49,140579,140580],{"class":51,"line":109},[49,140581,1657],{"class":55},[14,140583,140074],{},[39,140585,140586],{"className":126615,"code":140558,"language":126617,"meta":44,"style":44},[46,140587,140588,140594,140604],{"__ignoreMap":44},[49,140589,140590,140592],{"class":51,"line":52},[49,140591,51700],{"class":51389},[49,140593,15662],{"class":55},[49,140595,140596,140598,140600,140602],{"class":51,"line":84},[49,140597,70967],{"class":66},[49,140599,51526],{"class":55},[49,140601,140575],{"class":66},[49,140603,1382],{"class":55},[49,140605,140606],{"class":51,"line":109},[49,140607,1657],{"class":55},[14,140609,140610],{},"里面包含 2 个盒子， 浮动即可",[14,140612,139985],{},[39,140614,140615],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,140616,140617,140623,140633],{"__ignoreMap":44},[49,140618,140619,140621],{"class":51,"line":52},[49,140620,130463],{"class":2055},[49,140622,15662],{"class":55},[49,140624,140625,140627,140629,140631],{"class":51,"line":84},[49,140626,131095],{"class":66},[49,140628,51526],{"class":55},[49,140630,23826],{"class":66},[49,140632,1382],{"class":55},[49,140634,140635],{"class":51,"line":109},[49,140636,1657],{"class":55},[14,140638,140639,140640],{},"1 号盒子 ",[46,140641,140642],{},"recom_hd",[1226,140644,140645,140648],{},[181,140646,140647],{},"设置宽度205px，高度163px",[181,140649,140119,140650,140652],{},[46,140651,1554],{},"标签，插入图片即可",[14,140654,139985],{},[39,140656,140657],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,140658,140659],{"__ignoreMap":44},[49,140660,140661,140663,140665,140667,140669,140671,140673,140675,140677,140679,140681,140683],{"class":51,"line":52},[49,140662,1129],{"class":55},[49,140664,1554],{"class":51389},[49,140666,55328],{"class":2055},[49,140668,60],{"class":55},[49,140670,134132],{"class":328},[49,140672,55336],{"class":2055},[49,140674,60],{"class":55},[49,140676,134139],{"class":328},[49,140678,134142],{"class":2055},[49,140680,60],{"class":55},[49,140682,134147],{"class":328},[49,140684,51396],{"class":55},[14,140686,140074],{},[39,140688,140689],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,140690,140691],{"__ignoreMap":44},[49,140692,140693,140695,140697,140699,140701,140703,140705,140707,140709,140711,140713,140715],{"class":51,"line":52},[49,140694,1129],{"class":55},[49,140696,1554],{"class":51389},[49,140698,55328],{"class":2055},[49,140700,60],{"class":55},[49,140702,134132],{"class":328},[49,140704,55336],{"class":2055},[49,140706,60],{"class":55},[49,140708,134139],{"class":328},[49,140710,134142],{"class":2055},[49,140712,60],{"class":55},[49,140714,134147],{"class":328},[49,140716,51396],{"class":55},[14,140718,140719,140720,140723],{},"2 号盒子 ",[46,140721,140722],{},"recom_bd"," ，注意里面的小竖线",[1226,140725,140726,140737,140740,140745,140750],{},[181,140727,140728,140729,140731,140732,140734,140735],{},"右侧结构里面放 ",[46,140730,1226],{}," 包含 4个 ",[46,140733,181],{},"，每个li里面包含一个",[46,140736,1554],{},[181,140738,140739],{},"直接利用切片工具把里面的内容当成一张图片",[181,140741,139115,140742,140744],{},[46,140743,181],{}," 设置浮动",[181,140746,139115,140747,140749],{},[46,140748,1554],{}," 设置宽高，宽度 248px，高度 163px",[181,140751,140752,140753,140313,140756,140758,140759,140761,140762],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[46,140754,140755],{},"top 10px",[46,140757,181],{},"设置相对定位（注意，最后一个",[46,140760,181],{},"不用设置伪元素），可以利用 ",[46,140763,140764],{},"nth-child(-n+3){...}",[14,140766,139985],{},[39,140768,140769],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,140770,140771,140779,140789,140799],{"__ignoreMap":44},[49,140772,140773,140775,140777],{"class":51,"line":52},[49,140774,51700],{"class":51389},[49,140776,137616],{"class":2055},[49,140778,15662],{"class":55},[49,140780,140781,140783,140785,140787],{"class":51,"line":84},[49,140782,137623],{"class":66},[49,140784,51526],{"class":55},[49,140786,7742],{"class":328},[49,140788,1382],{"class":55},[49,140790,140791,140793,140795,140797],{"class":51,"line":109},[49,140792,128231],{"class":66},[49,140794,51526],{"class":55},[49,140796,60958],{"class":66},[49,140798,1382],{"class":55},[49,140800,140801],{"class":51,"line":120},[49,140802,1657],{"class":55},[14,140804,140074],{},[39,140806,140807],{"className":126615,"code":138457,"language":126617,"meta":44,"style":44},[46,140808,140809,140817,140827,140837],{"__ignoreMap":44},[49,140810,140811,140813,140815],{"class":51,"line":52},[49,140812,51700],{"class":51389},[49,140814,137616],{"class":2055},[49,140816,15662],{"class":55},[49,140818,140819,140821,140823,140825],{"class":51,"line":84},[49,140820,137623],{"class":66},[49,140822,51526],{"class":55},[49,140824,7742],{"class":328},[49,140826,1382],{"class":55},[49,140828,140829,140831,140833,140835],{"class":51,"line":109},[49,140830,128231],{"class":66},[49,140832,51526],{"class":55},[49,140834,60958],{"class":66},[49,140836,1382],{"class":55},[49,140838,140839],{"class":51,"line":120},[49,140840,1657],{"class":55},[195,140842,140844],{"id":140843},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1554,140846],{"style":126471,"src":140847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140849,140850],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140852,140853],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140855,140856,140859],{},[46,140857,140858],{},"box_hd"," 制作",[14,140861,140639,140862,140864],{},[46,140863,140858],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1554,140866],{"style":126471,"src":140867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1226,140869,140870,140875,140880,140883],{},[181,140871,140872,140874],{},[46,140873,140858],{}," 给 30px 的高度，2个像素的下边框",[181,140876,140877,140878],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[46,140879,139126],{},[181,140881,140882],{},"左侧盒左浮动，右侧盒子右浮动",[181,140884,140885,140887,140888,140890],{},[46,140886,56],{},"标签之间的距离用左右的",[46,140889,30972],{},"撑开即可",[14,140892,140893],{},"结构代码",[39,140895,140896],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,140897,140898,140904,140914],{"__ignoreMap":44},[49,140899,140900,140902],{"class":51,"line":52},[49,140901,130463],{"class":2055},[49,140903,15662],{"class":55},[49,140905,140906,140908,140910,140912],{"class":51,"line":84},[49,140907,131095],{"class":66},[49,140909,51526],{"class":55},[49,140911,23826],{"class":66},[49,140913,1382],{"class":55},[49,140915,140916],{"class":51,"line":109},[49,140917,1657],{"class":55},[14,140919,140920],{},"样式代码",[39,140922,140923],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,140924,140925,140931,140941],{"__ignoreMap":44},[49,140926,140927,140929],{"class":51,"line":52},[49,140928,130463],{"class":2055},[49,140930,15662],{"class":55},[49,140932,140933,140935,140937,140939],{"class":51,"line":84},[49,140934,131095],{"class":66},[49,140936,51526],{"class":55},[49,140938,23826],{"class":66},[49,140940,1382],{"class":55},[49,140942,140943],{"class":51,"line":109},[49,140944,1657],{"class":55},[14,140946,140947,140859],{},[46,140948,140949],{},"box_bd",[14,140951,140952],{},"2 号盒子 box_bd，不要给高度",[1554,140954],{"style":126471,"src":140955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140957,140958],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140960,140961],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140963,140964],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1226,140966,140967,140979,140995],{},[181,140968,140969,140971,140972,140975,140976,140978],{},[46,140970,140949],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[46,140973,140974],{},"tab_content","，在",[46,140977,140974],{}," 里面包裹tab选项卡对应的内容",[181,140980,140981,140982,140985,140986,140988,140989,140991,140992,140994],{},"内容被一个大盒子包裹（",[46,140983,140984],{},"tab_list_item","），里面是 ",[46,140987,1226],{}," 包裹 5个 ",[46,140990,181],{},"，每个",[46,140993,181],{},"设置对应的宽度，然后设置浮动",[181,140996,140997,140998,141000,141001,141003,141004],{},"而这5个",[46,140999,181],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[46,141002,181],{},"设置",[1226,141005,141006,141024,141027],{},[181,141007,141008,141009,141011,141012,141014,141015,141017,141018,141020,141021,141023],{},"第一个小 ",[46,141010,181],{}," 分为上下结构，上面是 ",[46,141013,1226],{}," 包裹 ",[46,141016,181],{}," ，",[46,141019,181],{},"里面包裹 ",[46,141022,56],{},"，下面插入一张图片",[181,141025,141026],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[181,141028,141029,141030,141032,141033,141035,141036,141038],{},"后面的小 ",[46,141031,181],{}," 里面先放一个",[46,141034,56],{},"标签，然后在",[46,141037,56],{},"标签里面插入图片即可",[14,141040,140893],{},[39,141042,141043],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,141044,141045],{"__ignoreMap":44},[49,141046,141047,141049,141051,141053,141055,141057,141059,141061,141063,141065,141067,141069],{"class":51,"line":52},[49,141048,1129],{"class":55},[49,141050,1554],{"class":51389},[49,141052,55328],{"class":2055},[49,141054,60],{"class":55},[49,141056,134132],{"class":328},[49,141058,55336],{"class":2055},[49,141060,60],{"class":55},[49,141062,134139],{"class":328},[49,141064,134142],{"class":2055},[49,141066,60],{"class":55},[49,141068,134147],{"class":328},[49,141070,51396],{"class":55},[14,141072,140920],{},[39,141074,141075],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,141076,141077],{"__ignoreMap":44},[49,141078,141079,141081,141083,141085,141087,141089,141091,141093,141095,141097,141099,141101],{"class":51,"line":52},[49,141080,1129],{"class":55},[49,141082,1554],{"class":51389},[49,141084,55328],{"class":2055},[49,141086,60],{"class":55},[49,141088,134132],{"class":328},[49,141090,55336],{"class":2055},[49,141092,60],{"class":55},[49,141094,134139],{"class":328},[49,141096,134142],{"class":2055},[49,141098,60],{"class":55},[49,141100,134147],{"class":328},[49,141102,51396],{"class":55},[14,141104,141105],{},"tab栏切换需求！！！！！！介绍：",[1554,141107],{"style":126471,"src":141108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1226,141110,141111,141119,141125,141128],{},[181,141112,141113,141116,141117],{},[46,141114,141115],{},"tab","栏的布局是 ",[46,141118,139126],{},[181,141120,141121,141122,141124],{},"有多少个",[46,141123,141115],{},"选项卡，那么对应就有多少个内容",[181,141126,141127],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[181,141129,141130,141131,141134,141135,141137,141138,141140],{},"等后面我们学习了",[46,141132,141133],{},"js","之后，我们就会配合",[46,141136,141133],{},"来实现，",[46,141139,141115],{},"栏的切换",[166,141142,141144],{"id":141143},"_162-列表制作","16.2 列表制作",[195,141146,141148],{"id":141147},"_1621-准备工作","16.2.1 准备工作",[1226,141150,141151,141154,141157,141160],{},[181,141152,141153],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[181,141155,141156],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[181,141158,141159],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[181,141161,141162],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[195,141164,141166,141167,101081,141169,141171],{"id":141165},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[46,141168,131620],{},[46,141170,53802],{}," 修改",[1554,141173],{"style":126471,"src":141174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1226,141176,141177],{},[181,141178,141179],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141181,139985],{},[39,141183,141184],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,141185,141186,141190,141204,141208,141222,141226,141240,141244,141258,141262],{"__ignoreMap":44},[49,141187,141188],{"class":51,"line":52},[49,141189,132054],{"class":283},[49,141191,141192,141194,141196,141198,141200,141202],{"class":51,"line":84},[49,141193,132059],{"class":2055},[49,141195,79896],{"class":55},[49,141197,128975],{"class":66},[49,141199,51526],{"class":55},[49,141201,132068],{"class":66},[49,141203,129545],{"class":55},[49,141205,141206],{"class":51,"line":109},[49,141207,132075],{"class":283},[49,141209,141210,141212,141214,141216,141218,141220],{"class":51,"line":120},[49,141211,132080],{"class":2055},[49,141213,79896],{"class":55},[49,141215,128975],{"class":66},[49,141217,51526],{"class":55},[49,141219,54853],{"class":66},[49,141221,129545],{"class":55},[49,141223,141224],{"class":51,"line":135},[49,141225,132095],{"class":283},[49,141227,141228,141230,141232,141234,141236,141238],{"class":51,"line":1306},[49,141229,132100],{"class":2055},[49,141231,79896],{"class":55},[49,141233,128975],{"class":66},[49,141235,51526],{"class":55},[49,141237,54920],{"class":66},[49,141239,129545],{"class":55},[49,141241,141242],{"class":51,"line":1312},[49,141243,132115],{"class":283},[49,141245,141246,141248,141250,141252,141254,141256],{"class":51,"line":1403},[49,141247,132120],{"class":2055},[49,141249,79896],{"class":55},[49,141251,128975],{"class":66},[49,141253,51526],{"class":55},[49,141255,86322],{"class":66},[49,141257,129545],{"class":55},[49,141259,141260],{"class":51,"line":1409},[49,141261,132135],{"class":283},[49,141263,141264,141266,141268,141270,141272,141274],{"class":51,"line":1421},[49,141265,132140],{"class":2055},[49,141267,79896],{"class":55},[49,141269,128975],{"class":66},[49,141271,51526],{"class":55},[49,141273,132149],{"class":66},[49,141275,129545],{"class":55},[14,141277,140074],{},[39,141279,141280],{"className":126615,"code":132047,"language":126617,"meta":44,"style":44},[46,141281,141282,141286,141300,141304,141318,141322,141336,141340,141354,141358],{"__ignoreMap":44},[49,141283,141284],{"class":51,"line":52},[49,141285,132054],{"class":283},[49,141287,141288,141290,141292,141294,141296,141298],{"class":51,"line":84},[49,141289,132059],{"class":2055},[49,141291,79896],{"class":55},[49,141293,128975],{"class":66},[49,141295,51526],{"class":55},[49,141297,132068],{"class":66},[49,141299,129545],{"class":55},[49,141301,141302],{"class":51,"line":109},[49,141303,132075],{"class":283},[49,141305,141306,141308,141310,141312,141314,141316],{"class":51,"line":120},[49,141307,132080],{"class":2055},[49,141309,79896],{"class":55},[49,141311,128975],{"class":66},[49,141313,51526],{"class":55},[49,141315,54853],{"class":66},[49,141317,129545],{"class":55},[49,141319,141320],{"class":51,"line":135},[49,141321,132095],{"class":283},[49,141323,141324,141326,141328,141330,141332,141334],{"class":51,"line":1306},[49,141325,132100],{"class":2055},[49,141327,79896],{"class":55},[49,141329,128975],{"class":66},[49,141331,51526],{"class":55},[49,141333,54920],{"class":66},[49,141335,129545],{"class":55},[49,141337,141338],{"class":51,"line":1312},[49,141339,132115],{"class":283},[49,141341,141342,141344,141346,141348,141350,141352],{"class":51,"line":1403},[49,141343,132120],{"class":2055},[49,141345,79896],{"class":55},[49,141347,128975],{"class":66},[49,141349,51526],{"class":55},[49,141351,86322],{"class":66},[49,141353,129545],{"class":55},[49,141355,141356],{"class":51,"line":1409},[49,141357,132135],{"class":283},[49,141359,141360,141362,141364,141366,141368,141370],{"class":51,"line":1421},[49,141361,132140],{"class":2055},[49,141363,79896],{"class":55},[49,141365,128975],{"class":66},[49,141367,51526],{"class":55},[49,141369,132149],{"class":66},[49,141371,129545],{"class":55},[1226,141373,141374,141385],{},[181,141375,141376,141377,141380,141381,101081,141383],{},"1 号盒子左侧浮动 ",[46,141378,141379],{},"sk_list"," 里面包含 ",[46,141382,1226],{},[46,141384,181],{},[181,141386,141387,141388,141380,141391,101081,141393],{},"2 号盒子左侧浮动 ",[46,141389,141390],{},"sk_con",[46,141392,1226],{},[46,141394,181],{},[14,141396,139985],{},[39,141398,141399],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,141400,141401,141407,141417],{"__ignoreMap":44},[49,141402,141403,141405],{"class":51,"line":52},[49,141404,130463],{"class":2055},[49,141406,15662],{"class":55},[49,141408,141409,141411,141413,141415],{"class":51,"line":84},[49,141410,131095],{"class":66},[49,141412,51526],{"class":55},[49,141414,23826],{"class":66},[49,141416,1382],{"class":55},[49,141418,141419],{"class":51,"line":109},[49,141420,1657],{"class":55},[14,141422,140074],{},[39,141424,141425],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,141426,141427,141433,141443],{"__ignoreMap":44},[49,141428,141429,141431],{"class":51,"line":52},[49,141430,130463],{"class":2055},[49,141432,15662],{"class":55},[49,141434,141435,141437,141439,141441],{"class":51,"line":84},[49,141436,131095],{"class":66},[49,141438,51526],{"class":55},[49,141440,23826],{"class":66},[49,141442,1382],{"class":55},[49,141444,141445],{"class":51,"line":109},[49,141446,1657],{"class":55},[195,141448,141450,141451],{"id":141449},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[46,141452,141453],{},"sk_container",[1554,141455],{"style":126471,"src":141456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1226,141458,141459,141464],{},[181,141460,140639,141461,141463],{},[46,141462,141453],{}," 给宽度 1200，不要给高度",[181,141465,141466],{},"一定不要忘记清除浮动",[14,141468,139985],{},[39,141470,141471],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,141472,141473,141479,141489],{"__ignoreMap":44},[49,141474,141475,141477],{"class":51,"line":52},[49,141476,130463],{"class":2055},[49,141478,15662],{"class":55},[49,141480,141481,141483,141485,141487],{"class":51,"line":84},[49,141482,131095],{"class":66},[49,141484,51526],{"class":55},[49,141486,23826],{"class":66},[49,141488,1382],{"class":55},[49,141490,141491],{"class":51,"line":109},[49,141492,1657],{"class":55},[178,141494,141495],{},[181,141496,141497],{},"sk_hd制作",[1226,141499,141500],{},[181,141501,140719,141502,141505],{},[46,141503,141504],{},"sk_hd"," ，插入图片即可",[14,141507,139985],{},[39,141509,141510],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,141511,141512],{"__ignoreMap":44},[49,141513,141514,141516,141518,141520,141522,141524,141526,141528,141530,141532,141534,141536],{"class":51,"line":52},[49,141515,1129],{"class":55},[49,141517,1554],{"class":51389},[49,141519,55328],{"class":2055},[49,141521,60],{"class":55},[49,141523,134132],{"class":328},[49,141525,55336],{"class":2055},[49,141527,60],{"class":55},[49,141529,134139],{"class":328},[49,141531,134142],{"class":2055},[49,141533,60],{"class":55},[49,141535,134147],{"class":328},[49,141537,51396],{"class":55},[178,141539,141540],{"start":84},[181,141541,141542],{},"sk_bd制作",[1226,141544,141545],{},[181,141546,141547,141548,141551,141552,101081,141554,141556],{},"3 号盒子 ",[46,141549,141550],{},"sk_bd"," ，里面包含很多的 ",[46,141553,1226],{},[46,141555,181],{},[1226,141557,141558,141567],{},[181,141559,141560,141561,141563,141564,141566],{},"当鼠标移入到 ",[46,141562,181],{}," 上面的时候显示红色的边框，在这里先给 ",[46,141565,181],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[181,141568,141569,141570,141572,141573,141575,141576,141579,141580,141582],{},"由于给每个 ",[46,141571,181],{}," 都设置了外边距，导致一行的最后一个 ",[46,141574,181],{}," 掉了下来，在这里我们利用 ",[46,141577,141578],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[46,141581,181],{},"，去掉外边距就好了",[14,141584,139985],{},[39,141586,141587],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,141588,141589,141595,141607],{"__ignoreMap":44},[49,141590,141591,141593],{"class":51,"line":52},[49,141592,51700],{"class":51389},[49,141594,15662],{"class":55},[49,141596,141597,141599,141601,141603,141605],{"class":51,"line":84},[49,141598,70559],{"class":66},[49,141600,51526],{"class":55},[49,141602,415],{"class":66},[49,141604,51645],{"class":66},[49,141606,1382],{"class":55},[49,141608,141609],{"class":51,"line":109},[49,141610,1657],{"class":55},[14,141612,140074],{},[39,141614,141615],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,141616,141617,141623,141635],{"__ignoreMap":44},[49,141618,141619,141621],{"class":51,"line":52},[49,141620,51700],{"class":51389},[49,141622,15662],{"class":55},[49,141624,141625,141627,141629,141631,141633],{"class":51,"line":84},[49,141626,70559],{"class":66},[49,141628,51526],{"class":55},[49,141630,415],{"class":66},[49,141632,51645],{"class":66},[49,141634,1382],{"class":55},[49,141636,141637],{"class":51,"line":109},[49,141638,1657],{"class":55},[166,141640,141642],{"id":141641},"_163-注册页面制作","16.3 注册页面制作",[1554,141644],{"style":126471,"src":141645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141647,141648,141650],{},[373,141649,9115],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1554,141652],{"style":126471,"src":141653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[195,141655,141657],{"id":141656},"_1631-准备工作","16.3.1 准备工作",[1226,141659,141660,141663],{},[181,141661,141662],{},"创建register.html，引入 base.css，引入favicon图标",[181,141664,141665],{},"创建register.css ，在html页面进行引入",[195,141667,141669,141670,141672],{"id":141668},"_1632-header-头部实现","16.3.2 ",[46,141671,131620],{}," 头部实现",[1226,141674,141675,141678],{},[181,141676,141677],{},"整个内容用 版心 进行包裹",[181,141679,141680],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141682,139985],{},[39,141684,141685],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,141686,141687],{"__ignoreMap":44},[49,141688,141689,141691,141693,141695,141697,141699,141701,141703,141705,141707,141709,141711],{"class":51,"line":52},[49,141690,1129],{"class":55},[49,141692,1554],{"class":51389},[49,141694,55328],{"class":2055},[49,141696,60],{"class":55},[49,141698,134132],{"class":328},[49,141700,55336],{"class":2055},[49,141702,60],{"class":55},[49,141704,134139],{"class":328},[49,141706,134142],{"class":2055},[49,141708,60],{"class":55},[49,141710,134147],{"class":328},[49,141712,51396],{"class":55},[14,141714,140074],{},[39,141716,141717],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,141718,141719],{"__ignoreMap":44},[49,141720,141721,141723,141725,141727,141729,141731,141733,141735,141737,141739,141741,141743],{"class":51,"line":52},[49,141722,1129],{"class":55},[49,141724,1554],{"class":51389},[49,141726,55328],{"class":2055},[49,141728,60],{"class":55},[49,141730,134132],{"class":328},[49,141732,55336],{"class":2055},[49,141734,60],{"class":55},[49,141736,134139],{"class":328},[49,141738,134142],{"class":2055},[49,141740,60],{"class":55},[49,141742,134147],{"class":328},[49,141744,51396],{"class":55},[195,141746,141748,141749,141752],{"id":141747},"_1633-registerarea-主体模块实现","16.3.3 ",[46,141750,141751],{},"registerarea"," 主体模块实现",[1554,141754],{"style":126471,"src":141755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141757,141758],{},"整个大盒子 高度为 522px，设置4个边框",[14,141760,139985],{},[39,141762,141763],{"className":126615,"code":130772,"language":126617,"meta":44,"style":44},[46,141764,141765,141771,141787],{"__ignoreMap":44},[49,141766,141767,141769],{"class":51,"line":52},[49,141768,51700],{"class":51389},[49,141770,15662],{"class":55},[49,141772,141773,141775,141777,141779,141781,141783,141785],{"class":51,"line":84},[49,141774,70985],{"class":66},[49,141776,51526],{"class":55},[49,141778,441],{"class":66},[49,141780,51581],{"class":59},[49,141782,51610],{"class":66},[49,141784,130007],{"class":66},[49,141786,1382],{"class":55},[49,141788,141789],{"class":51,"line":109},[49,141790,1657],{"class":55},[14,141792,140074],{},[39,141794,141795],{"className":126615,"code":130772,"language":126617,"meta":44,"style":44},[46,141796,141797,141803,141819],{"__ignoreMap":44},[49,141798,141799,141801],{"class":51,"line":52},[49,141800,51700],{"class":51389},[49,141802,15662],{"class":55},[49,141804,141805,141807,141809,141811,141813,141815,141817],{"class":51,"line":84},[49,141806,70985],{"class":66},[49,141808,51526],{"class":55},[49,141810,441],{"class":66},[49,141812,51581],{"class":59},[49,141814,51610],{"class":66},[49,141816,130007],{"class":66},[49,141818,1382],{"class":55},[49,141820,141821],{"class":51,"line":109},[49,141822,1657],{"class":55},[14,141824,141825],{},"1号盒子 是一个 h3 标签，放标题",[1226,141827,141828],{},[181,141829,141830],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141832,139985],{},[39,141834,141835],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,141836,141837,141843,141853],{"__ignoreMap":44},[49,141838,141839,141841],{"class":51,"line":52},[49,141840,130463],{"class":2055},[49,141842,15662],{"class":55},[49,141844,141845,141847,141849,141851],{"class":51,"line":84},[49,141846,131095],{"class":66},[49,141848,51526],{"class":55},[49,141850,23826],{"class":66},[49,141852,1382],{"class":55},[49,141854,141855],{"class":51,"line":109},[49,141856,1657],{"class":55},[14,141858,140074],{},[39,141860,141861],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,141862,141863,141869,141879],{"__ignoreMap":44},[49,141864,141865,141867],{"class":51,"line":52},[49,141866,130463],{"class":2055},[49,141868,15662],{"class":55},[49,141870,141871,141873,141875,141877],{"class":51,"line":84},[49,141872,131095],{"class":66},[49,141874,51526],{"class":55},[49,141876,23826],{"class":66},[49,141878,1382],{"class":55},[49,141880,141881],{"class":51,"line":109},[49,141882,1657],{"class":55},[14,141884,141885],{},"2号盒子 里面放注册的内容",[1226,141887,141888,141891,141900,141914,141927,141930,141933,141951,141965],{},[181,141889,141890],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[181,141892,141893,141894,141896,141897,141899],{},"里面的内容利用 ",[46,141895,1226],{}," 包含 ",[46,141898,181],{}," 来实现的（不需要用表格）",[181,141901,139129,141902,141904,141905,141907,141908,141910,141911,141913],{},[46,141903,181],{}," 里面，左侧放 ",[46,141906,33697],{}," 标签， 中间放",[46,141909,53910],{}," 标签， 右侧放 ",[46,141912,49],{}," 提示信息",[181,141915,141916,141917,141919,141920,141922,141923,141926],{},"左侧 ",[46,141918,33697],{},"里面的文字都是右对齐，我们可以给",[46,141921,33697],{},"设置一个宽度（88px），然后利用",[46,141924,141925],{},"text-align"," 来设置右对齐",[181,141928,141929],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[181,141931,141932],{},"右侧 span修饰一下文字颜色",[181,141934,141935,141936],{},"提示信息的样式优化",[1226,141937,141938,141941,141944],{},[181,141939,141940],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[181,141942,141943],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[181,141945,141946,141947,141950],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[46,141948,141949],{},"vertical-algin"," 来设置 图片与文字对齐方式",[181,141952,141953,141954],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1226,141955,141956,141962],{},[181,141957,141958,141959,141961],{},"设置 ",[46,141960,23643],{}," 的 左右 12px 的内边距，设置一下文字颜色",[181,141963,141964],{},"分别设置 背景颜色",[181,141966,141967,141968,141970],{},"同意协议 和 完成注册 都是用 ",[46,141969,181],{}," 进行包裹",[14,141972,139985],{},[39,141974,141975],{"className":126615,"code":140558,"language":126617,"meta":44,"style":44},[46,141976,141977,141983,141993],{"__ignoreMap":44},[49,141978,141979,141981],{"class":51,"line":52},[49,141980,51700],{"class":51389},[49,141982,15662],{"class":55},[49,141984,141985,141987,141989,141991],{"class":51,"line":84},[49,141986,70967],{"class":66},[49,141988,51526],{"class":55},[49,141990,140575],{"class":66},[49,141992,1382],{"class":55},[49,141994,141995],{"class":51,"line":109},[49,141996,1657],{"class":55},[14,141998,140074],{},[39,142000,142001],{"className":126615,"code":140558,"language":126617,"meta":44,"style":44},[46,142002,142003,142009,142019],{"__ignoreMap":44},[49,142004,142005,142007],{"class":51,"line":52},[49,142006,51700],{"class":51389},[49,142008,15662],{"class":55},[49,142010,142011,142013,142015,142017],{"class":51,"line":84},[49,142012,70967],{"class":66},[49,142014,51526],{"class":55},[49,142016,140575],{"class":66},[49,142018,1382],{"class":55},[49,142020,142021],{"class":51,"line":109},[49,142022,1657],{"class":55},[195,142024,142026],{"id":142025},"_1634-底部实现","16.3.4 底部实现",[14,142028,139985],{},[39,142030,142031],{"className":126615,"code":140558,"language":126617,"meta":44,"style":44},[46,142032,142033,142039,142049],{"__ignoreMap":44},[49,142034,142035,142037],{"class":51,"line":52},[49,142036,51700],{"class":51389},[49,142038,15662],{"class":55},[49,142040,142041,142043,142045,142047],{"class":51,"line":84},[49,142042,70967],{"class":66},[49,142044,51526],{"class":55},[49,142046,140575],{"class":66},[49,142048,1382],{"class":55},[49,142050,142051],{"class":51,"line":109},[49,142052,1657],{"class":55},[14,142054,140074],{},[39,142056,142057],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,142058,142059,142063,142077,142081],{"__ignoreMap":44},[49,142060,142061],{"class":51,"line":52},[49,142062,130726],{"class":283},[49,142064,142065,142067,142069,142071,142073,142075],{"class":51,"line":84},[49,142066,1129],{"class":55},[49,142068,51700],{"class":51389},[49,142070,53575],{"class":2055},[49,142072,60],{"class":55},[49,142074,130739],{"class":328},[49,142076,51396],{"class":55},[49,142078,142079],{"class":51,"line":109},[49,142080,130746],{"class":55},[49,142082,142083,142085,142087],{"class":51,"line":120},[49,142084,51874],{"class":55},[49,142086,51700],{"class":51389},[49,142088,51396],{"class":55},[166,142090,142092],{"id":142091},"_164-项目总结","16.4 项目总结",[178,142094,142095,142098,142101,142104],{},[181,142096,142097],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[181,142099,142100],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[181,142102,142103],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[181,142105,142106],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1554,142108],{"style":126471,"src":142109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[178,142111,142112],{"start":135},[181,142113,142114],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1554,142116],{"style":126471,"src":142117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[178,142119,142120],{"start":1306},[181,142121,142122],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1554,142124],{"style":126471,"src":142125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[39,142127,142128],{"className":127362,"code":136772,"language":127364,"meta":44,"style":44},[46,142129,142130],{"__ignoreMap":44},[49,142131,142132,142134,142136,142138,142140,142142,142144,142146,142148,142150,142152,142154],{"class":51,"line":52},[49,142133,1129],{"class":55},[49,142135,53910],{"class":51389},[49,142137,53913],{"class":2055},[49,142139,60],{"class":55},[49,142141,62788],{"class":328},[49,142143,15010],{"class":2055},[49,142145,60],{"class":55},[49,142147,136793],{"class":328},[49,142149,61109],{"class":2055},[49,142151,60],{"class":55},[49,142153,136800],{"class":328},[49,142155,51396],{"class":55},[178,142157,142158,142161],{"start":1312},[181,142159,142160],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[181,142162,142163],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[143,142165,142166],{},"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":44,"searchDepth":84,"depth":84,"links":142168},[142169,142174,142181,142189],{"id":139795,"depth":84,"text":139796,"children":142170},[142171,142172,142173],{"id":139799,"depth":109,"text":139800},{"id":140530,"depth":109,"text":140531},{"id":140843,"depth":109,"text":140844},{"id":141143,"depth":84,"text":141144,"children":142175},[142176,142177,142179],{"id":141147,"depth":109,"text":141148},{"id":141165,"depth":109,"text":142178},"16.2.2 列表页 header 和 nav 修改",{"id":141449,"depth":109,"text":142180},"16.2.3 列表页主体 sk_container",{"id":141641,"depth":84,"text":141642,"children":142182},[142183,142184,142186,142188],{"id":141656,"depth":109,"text":141657},{"id":141668,"depth":109,"text":142185},"16.3.2 header 头部实现",{"id":141747,"depth":109,"text":142187},"16.3.3 registerarea 主体模块实现",{"id":142025,"depth":109,"text":142026},{"id":142091,"depth":84,"text":142092},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139787,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142196,"title":142197,"body":142198,"description":148,"extension":149,"meta":142306,"navigation":151,"path":142307,"seo":142308,"stem":142309,"__hash__":142310},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142199,"toc":142301},[142200,142203,142207,142210,142213,142222,142231,142235,142240,142247,142265,142268,142271,142274,142277,142280,142283,142286,142289,142292,142295,142298],[10,142201,142197],{"id":142202},"_17-web服务器与网站发布",[166,142204,142206],{"id":142205},"_171-web服务器","17.1 Web服务器",[14,142208,142209],{},"把自己网站上传到服务器上，可以让其他人访问",[1554,142211],{"style":126471,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142214,142215,142218,142219],{},[373,142216,142217],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[373,142220,142221],{},"Web 服务器等",[14,142223,142224,142225,101081,142228,25831],{},"根据服务器在网络中所在的位置不同，又可分为 ",[373,142226,142227],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[373,142229,142230],{},"远程服务器",[195,142232,142234],{"id":142233},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142236,142237],{},[373,142238,142239],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142241,142242,142243],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[56,142244,142245],{"href":142245,"rel":142246},"http:\u002F\u002Ffree.3v.do\u002F",[23955],[1226,142248,142249,142252,142255,142262],{},[181,142250,142251],{},"去免费空间网站注册账号。",[181,142253,142254],{},"记录下主机名、用户名、密码、域名。",[181,142256,142257,142258,142261],{},"利用 ",[46,142259,142260],{},"utftp"," 软件 上传网站到远程服务器",[181,142263,142264],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142266,142267],{},"使用软件上传，对上传软件文件进行解压",[1554,142269],{"style":126471,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1554,142272],{"style":126471,"src":142273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142275,142276],{},"输入刚刚申请的服务器账号信息：",[1554,142278],{"style":126471,"src":142279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1554,142281],{"style":126471,"src":142282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1554,142284],{"style":126471,"src":142285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1554,142287],{"style":126471,"src":142288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142290,142291],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1554,142293],{"style":126471,"src":142294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142296,142297],{},"浏览器输入域名即可访问",[14,142299,142300],{},"首页一定必须是index",{"title":44,"searchDepth":84,"depth":84,"links":142302},[142303],{"id":142205,"depth":84,"text":142206,"children":142304},[142305],{"id":142233,"depth":109,"text":142234},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142197,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142312,"title":142313,"body":142314,"description":148,"extension":149,"meta":143241,"navigation":151,"path":143242,"seo":143243,"stem":143244,"__hash__":143245},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142315,"toc":143224},[142316,142319,142323,142326,142329,142340,142343,142347,142351,142356,142359,142362,142365,142368,142372,142398,142402,142406,142409,142412,142416,142449,142453,142456,142459,142523,142527,142531,142534,142537,142540,142544,142589,142593,142596,142626,142630,142634,142637,142640,142644,142647,142716,142719,142827,142829,142835,142839,142842,142845,142941,142944,142948,142972,142976,142979,142983,142986,142990,142993,142996,142999,143002,143006,143009,143012,143016,143020,143023,143026,143029,143032,143036,143039,143043,143046,143049,143094,143098,143102,143105,143108,143111,143143,143147,143150,143184,143188,143191,143221],[10,142317,142313],{"id":142318},"_18-2d动画与3d转换",[166,142320,142322],{"id":142321},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142324,142325],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142327,142328],{},"转换（transform）你可以简单理解为变形",[1226,142330,142331,142334,142337],{},[181,142332,142333],{},"移动：translate",[181,142335,142336],{},"旋转：rotate",[181,142338,142339],{},"缩放：scale",[1554,142341],{"style":126471,"src":142342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[195,142344,142346],{"id":142345},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22088,142348,142350],{"id":142349},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142352,142353,142354],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[373,142355,133274],{},[1554,142357],{"style":126471,"src":142358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142360,142361],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142363,142364],{},"对于行内元素无效",[14,142366,142367],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22088,142369,142371],{"id":142370},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[39,142373,142374],{"className":126615,"code":138804,"language":126617,"meta":44,"style":44},[46,142375,142376,142382,142394],{"__ignoreMap":44},[49,142377,142378,142380],{"class":51,"line":52},[49,142379,51700],{"class":51389},[49,142381,15662],{"class":55},[49,142383,142384,142386,142388,142390,142392],{"class":51,"line":84},[49,142385,70559],{"class":66},[49,142387,51526],{"class":55},[49,142389,415],{"class":66},[49,142391,51645],{"class":66},[49,142393,1382],{"class":55},[49,142395,142396],{"class":51,"line":109},[49,142397,1657],{"class":55},[195,142399,142401],{"id":142400},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22088,142403,142405],{"id":142404},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142407,142408],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1554,142410],{"style":126471,"src":142411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22088,142413,142415],{"id":142414},"_18122-旋转效果","18.1.2.2 旋转效果",[39,142417,142419],{"className":126615,"code":142418,"language":126617,"meta":44,"style":44},"div {\n  transform: rotate(45deg);\n}\n",[46,142420,142421,142427,142445],{"__ignoreMap":44},[49,142422,142423,142425],{"class":51,"line":52},[49,142424,51700],{"class":51389},[49,142426,15662],{"class":55},[49,142428,142429,142431,142433,142436,142438,142440,142443],{"class":51,"line":84},[49,142430,136599],{"class":66},[49,142432,51526],{"class":55},[49,142434,142435],{"class":66},"rotate",[49,142437,228],{"class":55},[49,142439,748],{"class":66},[49,142441,142442],{"class":59},"deg",[49,142444,2811],{"class":55},[49,142446,142447],{"class":51,"line":109},[49,142448,1657],{"class":55},[22088,142450,142452],{"id":142451},"_18123-三角做法","18.1.2.3 三角做法",[14,142454,142455],{},"该下标当经过最外层大盒子时会实现向上反转",[1554,142457],{"style":126471,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[39,142460,142461],{"className":126615,"code":135135,"language":126617,"meta":44,"style":44},[46,142462,142463,142467,142473,142483,142493,142509,142519],{"__ignoreMap":44},[49,142464,142465],{"class":51,"line":52},[49,142466,135142],{"class":283},[49,142468,142469,142471],{"class":51,"line":84},[49,142470,135147],{"class":2055},[49,142472,15662],{"class":55},[49,142474,142475,142477,142479,142481],{"class":51,"line":109},[49,142476,70657],{"class":66},[49,142478,51526],{"class":55},[49,142480,415],{"class":66},[49,142482,1382],{"class":55},[49,142484,142485,142487,142489,142491],{"class":51,"line":120},[49,142486,70877],{"class":66},[49,142488,51526],{"class":55},[49,142490,415],{"class":66},[49,142492,1382],{"class":55},[49,142494,142495,142497,142499,142501,142503,142505,142507],{"class":51,"line":135},[49,142496,70985],{"class":66},[49,142498,51526],{"class":55},[49,142500,95],{"class":66},[49,142502,51581],{"class":59},[49,142504,51610],{"class":66},[49,142506,64080],{"class":66},[49,142508,1382],{"class":55},[49,142510,142511,142513,142515,142517],{"class":51,"line":1306},[49,142512,135190],{"class":66},[49,142514,51526],{"class":55},[49,142516,62458],{"class":66},[49,142518,1382],{"class":55},[49,142520,142521],{"class":51,"line":1312},[49,142522,1657],{"class":55},[195,142524,142526],{"id":142525},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22088,142528,142530],{"id":142529},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142532,142533],{},"设置中心点",[1554,142535],{"style":126471,"src":142536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142538,142539],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22088,142541,142543],{"id":142542},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[39,142545,142547],{"className":126615,"code":142546,"language":126617,"meta":44,"style":44},"\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",[46,142548,142549,142554,142560,142575,142580,142585],{"__ignoreMap":44},[49,142550,142551],{"class":51,"line":52},[49,142552,142553],{"class":283},"\u002F* 转换中心点 *\u002F\n",[49,142555,142556,142558],{"class":51,"line":84},[49,142557,51700],{"class":51389},[49,142559,15662],{"class":55},[49,142561,142562,142565,142567,142569,142571,142573],{"class":51,"line":109},[49,142563,142564],{"class":66},"  transform-origin",[49,142566,51526],{"class":55},[49,142568,51681],{"class":66},[49,142570,17234],{"class":66},[49,142572,130478],{"class":55},[49,142574,135288],{"class":283},[49,142576,142577],{"class":51,"line":120},[49,142578,142579],{"class":283},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[49,142581,142582],{"class":51,"line":135},[49,142583,142584],{"class":283},"  \u002F* transform-origin: left top; *\u002F\n",[49,142586,142587],{"class":51,"line":1306},[49,142588,1657],{"class":55},[22088,142590,142592],{"id":142591},"_18133-旋转案例","18.1.3.3 旋转案例",[1554,142594],{"style":126471,"src":142595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[39,142597,142598],{"className":126615,"code":142418,"language":126617,"meta":44,"style":44},[46,142599,142600,142606,142622],{"__ignoreMap":44},[49,142601,142602,142604],{"class":51,"line":52},[49,142603,51700],{"class":51389},[49,142605,15662],{"class":55},[49,142607,142608,142610,142612,142614,142616,142618,142620],{"class":51,"line":84},[49,142609,136599],{"class":66},[49,142611,51526],{"class":55},[49,142613,142435],{"class":66},[49,142615,228],{"class":55},[49,142617,748],{"class":66},[49,142619,142442],{"class":59},[49,142621,2811],{"class":55},[49,142623,142624],{"class":51,"line":109},[49,142625,1657],{"class":55},[195,142627,142629],{"id":142628},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22088,142631,142633],{"id":142632},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142635,142636],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1554,142638],{"style":126471,"src":142639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22088,142641,142643],{"id":142642},"_18142-分页按钮","18.1.4.2 分页按钮",[1554,142645],{"style":126471,"src":142646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[39,142648,142650],{"className":126615,"code":142649,"language":126617,"meta":44,"style":44},"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",[46,142651,142652,142658,142674,142678,142682,142687,142693,142707,142712],{"__ignoreMap":44},[49,142653,142654,142656],{"class":51,"line":52},[49,142655,51700],{"class":51389},[49,142657,15662],{"class":55},[49,142659,142660,142662,142664,142667,142669,142672],{"class":51,"line":84},[49,142661,136599],{"class":66},[49,142663,51526],{"class":55},[49,142665,142666],{"class":66},"scale",[49,142668,228],{"class":55},[49,142670,142671],{"class":66},"1.2",[49,142673,2811],{"class":55},[49,142675,142676],{"class":51,"line":109},[49,142677,1657],{"class":55},[49,142679,142680],{"class":51,"line":120},[49,142681,136076],{"class":55},[49,142683,142684],{"class":51,"line":135},[49,142685,142686],{"class":283},"\u002F* 2D 缩放 *\u002F\n",[49,142688,142689,142691],{"class":51,"line":1306},[49,142690,51700],{"class":51389},[49,142692,15662],{"class":55},[49,142694,142695,142697,142699,142701,142703,142705],{"class":51,"line":1312},[49,142696,136599],{"class":66},[49,142698,51526],{"class":55},[49,142700,142666],{"class":66},[49,142702,228],{"class":55},[49,142704,142671],{"class":66},[49,142706,2811],{"class":55},[49,142708,142709],{"class":51,"line":1403},[49,142710,142711],{"class":283},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[49,142713,142714],{"class":51,"line":1409},[49,142715,1657],{"class":55},[14,142717,142718],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[39,142720,142722],{"className":126615,"code":142721,"language":126617,"meta":44,"style":44},"\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",[46,142723,142724,142729,142739,142760,142781,142785,142790,142796,142823],{"__ignoreMap":44},[49,142725,142726],{"class":51,"line":52},[49,142727,142728],{"class":283},"\u002F* 定义动画 *\u002F\n",[49,142730,142731,142734,142737],{"class":51,"line":84},[49,142732,142733],{"class":59},"@keyframes",[49,142735,142736],{"class":126}," move",[49,142738,15662],{"class":55},[49,142740,142741,142744,142746,142748,142750,142753,142755,142757],{"class":51,"line":109},[49,142742,142743],{"class":2055},"  0%",[49,142745,79896],{"class":55},[49,142747,48223],{"class":66},[49,142749,51526],{"class":55},[49,142751,142752],{"class":66},"translateX",[49,142754,228],{"class":55},[49,142756,415],{"class":66},[49,142758,142759],{"class":55},"); }\n",[49,142761,142762,142765,142767,142769,142771,142773,142775,142777,142779],{"class":51,"line":120},[49,142763,142764],{"class":2055},"  100%",[49,142766,79896],{"class":55},[49,142768,48223],{"class":66},[49,142770,51526],{"class":55},[49,142772,142752],{"class":66},[49,142774,228],{"class":55},[49,142776,533],{"class":66},[49,142778,51581],{"class":59},[49,142780,142759],{"class":55},[49,142782,142783],{"class":51,"line":135},[49,142784,1657],{"class":55},[49,142786,142787],{"class":51,"line":1306},[49,142788,142789],{"class":283},"\u002F* 调用动画 *\u002F\n",[49,142791,142792,142794],{"class":51,"line":1312},[49,142793,51700],{"class":51389},[49,142795,15662],{"class":55},[49,142797,142798,142801,142803,142805,142807,142809,142811,142813,142815,142818,142821],{"class":51,"line":1403},[49,142799,142800],{"class":66},"  animation",[49,142802,51526],{"class":55},[49,142804,135301],{"class":66},[49,142806,25209],{"class":66},[49,142808,914],{"class":59},[49,142810,78769],{"class":66},[49,142812,4185],{"class":66},[49,142814,914],{"class":59},[49,142816,142817],{"class":66}," infinite",[49,142819,142820],{"class":66}," alternate",[49,142822,1382],{"class":55},[49,142824,142825],{"class":51,"line":1409},[49,142826,1657],{"class":55},[14,142828,142718],{},[39,142830,142833],{"className":142831,"code":142832,"language":5278},[5276],"\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",[46,142834,142832],{"__ignoreMap":44},[22088,142836,142838],{"id":142837},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142840,142841],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1554,142843],{"style":126471,"src":142844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[39,142846,142847],{"className":126615,"code":142721,"language":126617,"meta":44,"style":44},[46,142848,142849,142853,142861,142879,142899,142903,142907,142913,142937],{"__ignoreMap":44},[49,142850,142851],{"class":51,"line":52},[49,142852,142728],{"class":283},[49,142854,142855,142857,142859],{"class":51,"line":84},[49,142856,142733],{"class":59},[49,142858,142736],{"class":126},[49,142860,15662],{"class":55},[49,142862,142863,142865,142867,142869,142871,142873,142875,142877],{"class":51,"line":109},[49,142864,142743],{"class":2055},[49,142866,79896],{"class":55},[49,142868,48223],{"class":66},[49,142870,51526],{"class":55},[49,142872,142752],{"class":66},[49,142874,228],{"class":55},[49,142876,415],{"class":66},[49,142878,142759],{"class":55},[49,142880,142881,142883,142885,142887,142889,142891,142893,142895,142897],{"class":51,"line":120},[49,142882,142764],{"class":2055},[49,142884,79896],{"class":55},[49,142886,48223],{"class":66},[49,142888,51526],{"class":55},[49,142890,142752],{"class":66},[49,142892,228],{"class":55},[49,142894,533],{"class":66},[49,142896,51581],{"class":59},[49,142898,142759],{"class":55},[49,142900,142901],{"class":51,"line":135},[49,142902,1657],{"class":55},[49,142904,142905],{"class":51,"line":1306},[49,142906,142789],{"class":283},[49,142908,142909,142911],{"class":51,"line":1312},[49,142910,51700],{"class":51389},[49,142912,15662],{"class":55},[49,142914,142915,142917,142919,142921,142923,142925,142927,142929,142931,142933,142935],{"class":51,"line":1403},[49,142916,142800],{"class":66},[49,142918,51526],{"class":55},[49,142920,135301],{"class":66},[49,142922,25209],{"class":66},[49,142924,914],{"class":59},[49,142926,78769],{"class":66},[49,142928,4185],{"class":66},[49,142930,914],{"class":59},[49,142932,142817],{"class":66},[49,142934,142820],{"class":66},[49,142936,1382],{"class":55},[49,142938,142939],{"class":51,"line":1409},[49,142940,1657],{"class":55},[14,142942,142943],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[195,142945,142947],{"id":142946},"_1823-知识点回顾","18.2.3 知识点回顾",[39,142949,142950],{"className":126615,"code":128784,"language":126617,"meta":44,"style":44},[46,142951,142952,142958,142968],{"__ignoreMap":44},[49,142953,142954,142956],{"class":51,"line":52},[49,142955,51700],{"class":51389},[49,142957,15662],{"class":55},[49,142959,142960,142962,142964,142966],{"class":51,"line":84},[49,142961,128797],{"class":66},[49,142963,51526],{"class":55},[49,142965,61825],{"class":66},[49,142967,1382],{"class":55},[49,142969,142970],{"class":51,"line":109},[49,142971,1657],{"class":55},[166,142973,142975],{"id":142974},"_183-3d-转换","18.3 3D 转换",[14,142977,142978],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[195,142980,142982],{"id":142981},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1554,142984],{"style":126471,"src":142985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[195,142987,142989],{"id":142988},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1554,142991],{"style":126471,"src":142992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142994,142995],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142997,142998],{},"translate3d的效果需要搭配透视perspective来使用",[1554,143000],{"style":126471,"src":143001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[195,143003,143005],{"id":143004},"_1833-透视-perspective","18.3.3 透视 perspective",[1554,143007],{"style":126471,"src":143008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143010,143011],{},"透视写在父盒子上，单位为像素",[195,143013,143015],{"id":143014},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22088,143017,143019],{"id":143018},"_18341-分开解释","18.3.4.1 分开解释",[1554,143021],{"style":126471,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1554,143024],{"style":126471,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1554,143027],{"style":126471,"src":143028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143030,143031],{},"总结来说就是左手原则",[22088,143033,143035],{"id":143034},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1554,143037],{"style":126471,"src":143038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[195,143040,143042],{"id":143041},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1554,143044],{"style":126471,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1554,143047],{"style":126471,"src":143048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[39,143050,143052],{"className":126615,"code":143051,"language":126617,"meta":44,"style":44},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[46,143053,143054,143060,143073,143090],{"__ignoreMap":44},[49,143055,143056,143058],{"class":51,"line":52},[49,143057,51700],{"class":51389},[49,143059,15662],{"class":55},[49,143061,143062,143065,143067,143069,143071],{"class":51,"line":84},[49,143063,143064],{"class":66},"  perspective",[49,143066,51526],{"class":55},[49,143068,65163],{"class":66},[49,143070,51581],{"class":59},[49,143072,1382],{"class":55},[49,143074,143075,143077,143079,143082,143084,143086,143088],{"class":51,"line":109},[49,143076,136599],{"class":66},[49,143078,51526],{"class":55},[49,143080,143081],{"class":66},"rotateX",[49,143083,228],{"class":55},[49,143085,748],{"class":66},[49,143087,142442],{"class":59},[49,143089,2811],{"class":55},[49,143091,143092],{"class":51,"line":120},[49,143093,1657],{"class":55},[195,143095,143097],{"id":143096},"_1836-案例","18.3.6 案例",[22088,143099,143101],{"id":143100},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1554,143103],{"style":126471,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1554,143106],{"style":126471,"src":143107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1554,143109],{"style":126471,"src":143110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[39,143112,143114],{"className":126615,"code":143113,"language":126617,"meta":44,"style":44},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[46,143115,143116,143121,143127,143139],{"__ignoreMap":44},[49,143117,143118],{"class":51,"line":52},[49,143119,143120],{"class":283},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[49,143122,143123,143125],{"class":51,"line":84},[49,143124,133612],{"class":2055},[49,143126,15662],{"class":55},[49,143128,143129,143131,143133,143135,143137],{"class":51,"line":109},[49,143130,143064],{"class":66},[49,143132,51526],{"class":55},[49,143134,65163],{"class":66},[49,143136,51581],{"class":59},[49,143138,1382],{"class":55},[49,143140,143141],{"class":51,"line":120},[49,143142,1657],{"class":55},[22088,143144,143146],{"id":143145},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1554,143148],{"style":126471,"src":143149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[39,143151,143152],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,143153,143154,143158,143172,143176],{"__ignoreMap":44},[49,143155,143156],{"class":51,"line":52},[49,143157,130726],{"class":283},[49,143159,143160,143162,143164,143166,143168,143170],{"class":51,"line":84},[49,143161,1129],{"class":55},[49,143163,51700],{"class":51389},[49,143165,53575],{"class":2055},[49,143167,60],{"class":55},[49,143169,130739],{"class":328},[49,143171,51396],{"class":55},[49,143173,143174],{"class":51,"line":109},[49,143175,130746],{"class":55},[49,143177,143178,143180,143182],{"class":51,"line":120},[49,143179,51874],{"class":55},[49,143181,51700],{"class":51389},[49,143183,51396],{"class":55},[22088,143185,143187],{"id":143186},"_18363-旋转木马","18.3.6.3 旋转木马",[1554,143189],{"style":126471,"src":143190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[39,143192,143193],{"className":126615,"code":142418,"language":126617,"meta":44,"style":44},[46,143194,143195,143201,143217],{"__ignoreMap":44},[49,143196,143197,143199],{"class":51,"line":52},[49,143198,51700],{"class":51389},[49,143200,15662],{"class":55},[49,143202,143203,143205,143207,143209,143211,143213,143215],{"class":51,"line":84},[49,143204,136599],{"class":66},[49,143206,51526],{"class":55},[49,143208,142435],{"class":66},[49,143210,228],{"class":55},[49,143212,748],{"class":66},[49,143214,142442],{"class":59},[49,143216,2811],{"class":55},[49,143218,143219],{"class":51,"line":109},[49,143220,1657],{"class":55},[143,143222,143223],{},"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":44,"searchDepth":84,"depth":84,"links":143225},[143226,143233],{"id":142321,"depth":84,"text":142322,"children":143227},[143228,143229,143230,143231,143232],{"id":142345,"depth":109,"text":142346},{"id":142400,"depth":109,"text":142401},{"id":142525,"depth":109,"text":142526},{"id":142628,"depth":109,"text":142629},{"id":142946,"depth":109,"text":142947},{"id":142974,"depth":84,"text":142975,"children":143234},[143235,143236,143237,143238,143239,143240],{"id":142981,"depth":109,"text":142982},{"id":142988,"depth":109,"text":142989},{"id":143004,"depth":109,"text":143005},{"id":143014,"depth":109,"text":143015},{"id":143041,"depth":109,"text":143042},{"id":143096,"depth":109,"text":143097},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142313,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143247,"title":143248,"body":143249,"description":148,"extension":149,"meta":143452,"navigation":151,"path":143453,"seo":143454,"stem":143455,"__hash__":143456},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143250,"toc":143441},[143251,143254,143258,143261,143264,143268,143271,143274,143277,143281,143284,143288,143291,143295,143298,143302,143316,143320,143345,143348,143351,143368,143372,143376,143379,143382,143386,143389,143392,143410,143414,143417,143431,143435,143438],[10,143252,143248],{"id":143253},"_19-移动端基础-前缀现状与视口",[166,143255,143257],{"id":143256},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1554,143259],{"style":126471,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143262,143263],{},"意思就是加个前缀，增加兼容性",[166,143265,143267],{"id":143266},"_192-移动端现状认识","19.2 移动端现状认识",[1554,143269],{"style":126471,"src":143270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143272,143273],{},"调试方法：",[1554,143275],{"style":126471,"src":143276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[166,143278,143280],{"id":143279},"_193-视口","19.3 视口",[14,143282,143283],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[195,143285,143287],{"id":143286},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1554,143289],{"style":126471,"src":143290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[195,143292,143294],{"id":143293},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1554,143296],{"style":126471,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[195,143299,143301],{"id":143300},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1226,143303,143304,143307,143310,143313],{},[181,143305,143306],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[181,143308,143309],{},"理想视口，对设备来讲，是最理想的视口尺寸",[181,143311,143312],{},"需要手动添写meta视口标签通知浏览器操作",[181,143314,143315],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[195,143317,143319],{"id":143318},"_1934-meta视口标签","19.3.4 meta视口标签",[39,143321,143323],{"className":127362,"code":143322,"language":127364,"meta":44,"style":44},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[46,143324,143325],{"__ignoreMap":44},[49,143326,143327,143329,143331,143333,143335,143337,143339,143341,143343],{"class":51,"line":52},[49,143328,1129],{"class":55},[49,143330,51433],{"class":51389},[49,143332,15010],{"class":2055},[49,143334,60],{"class":55},[49,143336,51480],{"class":328},[49,143338,51460],{"class":2055},[49,143340,60],{"class":55},[49,143342,51487],{"class":328},[49,143344,51396],{"class":55},[1554,143346],{"style":126471,"src":143347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143349,143350],{},"标准视口设置：",[178,143352,143353,143356,143359,143362,143365],{},[181,143354,143355],{},"视口宽度和设备保持一致",[181,143357,143358],{},"视口的默认缩放比例1.0",[181,143360,143361],{},"不允许用户自行缩放",[181,143363,143364],{},"最大允许的缩放比例1.0",[181,143366,143367],{},"最小允许的缩放比例1.0",[195,143369,143371],{"id":143370},"_1935-二倍图","19.3.5 二倍图",[22088,143373,143375],{"id":143374},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1554,143377],{"style":126471,"src":143378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1554,143380],{"style":126471,"src":143381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22088,143383,143385],{"id":143384},"_19352-多倍图","19.3.5.2 多倍图",[1554,143387],{"style":126471,"src":143388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143390,143391],{},"二倍图法，代码如下：",[39,143393,143395],{"className":126615,"code":143394,"language":126617,"meta":44,"style":44},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[46,143396,143397,143402],{"__ignoreMap":44},[49,143398,143399],{"class":51,"line":52},[49,143400,143401],{"class":283},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[49,143403,143404,143407],{"class":51,"line":84},[49,143405,143406],{"class":51389},"background-size",[49,143408,143409],{"class":55},": 50% 50%;\n",[22088,143411,143413],{"id":143412},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1554,143415],{"style":126471,"src":143416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[178,143418,143419,143422,143425,143428],{},[181,143420,143421],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[181,143423,143424],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[181,143426,143427],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[181,143429,143430],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22088,143432,143434],{"id":143433},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1554,143436],{"style":126471,"src":143437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[143,143439,143440],{},"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":44,"searchDepth":84,"depth":84,"links":143442},[143443,143444,143445],{"id":143256,"depth":84,"text":143257},{"id":143266,"depth":84,"text":143267},{"id":143279,"depth":84,"text":143280,"children":143446},[143447,143448,143449,143450,143451],{"id":143286,"depth":109,"text":143287},{"id":143293,"depth":109,"text":143294},{"id":143300,"depth":109,"text":143301},{"id":143318,"depth":109,"text":143319},{"id":143370,"depth":109,"text":143371},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143248,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143458,"title":143459,"body":143460,"description":148,"extension":149,"meta":144337,"navigation":151,"path":144338,"seo":144339,"stem":144340,"__hash__":144341},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143461,"toc":144321},[143462,143465,143469,143476,143479,143486,143489,143494,143497,143501,143505,143512,143515,143518,143522,143525,143528,143531,143534,143537,143541,143544,143548,143550,143553,143556,143559,143562,143564,143567,143569,143599,143601,143631,143635,143638,143642,143645,143662,143665,143668,143744,143746,143749,143752,143755,143758,143760,143763,143766,143770,143792,143795,143798,143802,143805,143811,143814,143818,143821,143824,143828,143831,143834,143837,143841,143844,143847,143850,143853,143857,143860,143864,143871,143874,143877,143880,143883,143893,143896,143899,143906,143909,143913,143916,143919,143923,143926,143929,143932,143977,143980,143983,143986,143988,144117,144119,144157,144160,144163,144165,144283,144285,144319],[10,143463,143459],{"id":143464},"_20-移动端布局实战上篇",[166,143466,143468],{"id":143467},"_201-移动端主流方案","20.1 移动端主流方案",[178,143470,143471],{},[181,143472,143473],{},[373,143474,143475],{},"单独移动端页面（主流）",[1554,143477],{"style":126471,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[178,143480,143481],{"start":84},[181,143482,143483],{},[373,143484,143485],{},"响应式兼容PC移动端",[1554,143487],{"style":126471,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[178,143490,143491],{"start":109},[181,143492,143493],{},"两种页面选型布局方式",[1554,143495],{"style":126471,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[166,143498,143500],{"id":143499},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[195,143502,143504],{"id":143503},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143506,143507,143508],{},"官网地址： ",[56,143509,143510],{"href":143510,"rel":143511},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23955],[1554,143513],{"style":126471,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1554,143516],{"style":126471,"src":143517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[195,143519,143521],{"id":143520},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1554,143523],{"style":126471,"src":143524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1554,143526],{"style":126471,"src":143527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143529,143530],{},"去除高亮：",[14,143532,143533],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143535,143536],{},"-webkit- tap-highlight-color: transparent;",[166,143538,143540],{"id":143539},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1554,143542],{"style":126471,"src":143543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[166,143545,143547],{"id":143546},"_204-流式布局案例","20.4 流式布局案例",[14,143549,256],{},[14,143551,143552],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143554,143555],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143557,143558],{},"图片格式：",[1554,143560],{"style":126471,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143563,135658],{},[1554,143565],{"style":126471,"src":143566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143568,139985],{},[39,143570,143571],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,143572,143573],{"__ignoreMap":44},[49,143574,143575,143577,143579,143581,143583,143585,143587,143589,143591,143593,143595,143597],{"class":51,"line":52},[49,143576,1129],{"class":55},[49,143578,1554],{"class":51389},[49,143580,55328],{"class":2055},[49,143582,60],{"class":55},[49,143584,134132],{"class":328},[49,143586,55336],{"class":2055},[49,143588,60],{"class":55},[49,143590,134139],{"class":328},[49,143592,134142],{"class":2055},[49,143594,60],{"class":55},[49,143596,134147],{"class":328},[49,143598,51396],{"class":55},[14,143600,140074],{},[39,143602,143603],{"className":127362,"code":134117,"language":127364,"meta":44,"style":44},[46,143604,143605],{"__ignoreMap":44},[49,143606,143607,143609,143611,143613,143615,143617,143619,143621,143623,143625,143627,143629],{"class":51,"line":52},[49,143608,1129],{"class":55},[49,143610,1554],{"class":51389},[49,143612,55328],{"class":2055},[49,143614,60],{"class":55},[49,143616,134132],{"class":328},[49,143618,55336],{"class":2055},[49,143620,60],{"class":55},[49,143622,134139],{"class":328},[49,143624,134142],{"class":2055},[49,143626,60],{"class":55},[49,143628,134147],{"class":328},[49,143630,51396],{"class":55},[166,143632,143634],{"id":143633},"_205-flex布局","20.5 flex布局",[1554,143636],{"style":126471,"src":143637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[195,143639,143641],{"id":143640},"_2051-布局原理","20.5.1 布局原理",[14,143643,143644],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1226,143646,143647,143650,143653,143656,143659],{},[181,143648,143649],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[181,143651,143652],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[181,143654,143655],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[181,143657,143658],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[181,143660,143661],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143663,143664],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143666,143667],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[39,143669,143671],{"className":126615,"code":143670,"language":126617,"meta":44,"style":44},"\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",[46,143672,143673,143678,143685,143695,143707,143718,143729,143740],{"__ignoreMap":44},[49,143674,143675],{"class":51,"line":52},[49,143676,143677],{"class":283},"\u002F* Flex 弹性布局 *\u002F\n",[49,143679,143680,143683],{"class":51,"line":84},[49,143681,143682],{"class":2055},".container",[49,143684,15662],{"class":55},[49,143686,143687,143689,143691,143693],{"class":51,"line":109},[49,143688,128231],{"class":66},[49,143690,51526],{"class":55},[49,143692,51566],{"class":66},[49,143694,1382],{"class":55},[49,143696,143697,143700,143702,143705],{"class":51,"line":120},[49,143698,143699],{"class":66},"  flex-direction",[49,143701,51526],{"class":55},[49,143703,143704],{"class":66},"row",[49,143706,1382],{"class":55},[49,143708,143709,143712,143714,143716],{"class":51,"line":135},[49,143710,143711],{"class":66},"  justify-content",[49,143713,51526],{"class":55},[49,143715,51757],{"class":66},[49,143717,1382],{"class":55},[49,143719,143720,143723,143725,143727],{"class":51,"line":1306},[49,143721,143722],{"class":66},"  align-items",[49,143724,51526],{"class":55},[49,143726,51681],{"class":66},[49,143728,1382],{"class":55},[49,143730,143731,143734,143736,143738],{"class":51,"line":1312},[49,143732,143733],{"class":66},"  flex-wrap",[49,143735,51526],{"class":55},[49,143737,78699],{"class":66},[49,143739,1382],{"class":55},[49,143741,143742],{"class":51,"line":1403},[49,143743,1657],{"class":55},[14,143745,70542],{},[14,143747,143748],{},".form-item .male-label {",[14,143750,143751],{},"   margin-right: 20px;",[14,143753,143754],{},"   display: inline-flex;",[14,143756,143757],{},"   align-items: center;",[14,143759,1165],{},[1554,143761],{"style":126471,"src":143762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1554,143764],{"style":126471,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[195,143767,143769],{"id":143768},"_2052-常见父项属性","20.5.2 常见父项属性",[178,143771,143772,143775,143778,143781,143784,143787,143790],{},[181,143773,143774],{},"flex-direction：设置主轴的方向",[181,143776,143777],{},"justify-content：设置主轴上的子元素排列方式",[181,143779,143780],{},"flex-wrap：设置子元素是否换行",[181,143782,143783],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[181,143785,143786],{},"align-items：设置侧轴上的子元素排列方式（单行）",[181,143788,143789],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[181,143791,143774],{},[1554,143793],{"style":126471,"src":143794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1554,143796],{"style":126471,"src":143797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[178,143799,143800],{"start":84},[181,143801,143777],{},[1554,143803],{"style":126471,"src":143804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143806,143807,143810],{},[46,143808,143809],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143812,143813],{},"跟着主轴走",[178,143815,143816],{"start":109},[181,143817,143780],{},[1554,143819],{"style":126471,"src":143820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143822,143823],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[178,143825,143826],{"start":120},[181,143827,143783],{},[1554,143829],{"style":126471,"src":143830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143832,143833],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143835,143836],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[178,143838,143839],{"start":135},[181,143840,143786],{},[1554,143842],{"style":126471,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143845,143846],{},"align-items与align-content之间的区别：",[14,143848,143849],{},"单找items，多找content",[1554,143851],{"style":126471,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[178,143854,143855],{"start":1306},[181,143856,143789],{},[1554,143858],{"style":126471,"src":143859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[195,143861,143863],{"id":143862},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[178,143865,143866],{},[181,143867,143868],{},[373,143869,143870],{},"flex 属性",[14,143872,143873],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1554,143875],{"style":126471,"src":143876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143878,143879],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143881,143882],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[178,143884,143885],{"start":84},[181,143886,143887,13885,143890],{},[373,143888,143889],{},"align-self",[373,143891,143892],{},"控制子项自己在侧轴上的排列方式",[1554,143894],{"style":126471,"src":143895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143897,143898],{},"单个子盒子在父盒子侧轴上的排列方式",[178,143900,143901],{"start":109},[181,143902,143903,143905],{},[373,143904,95360],{}," 属性定义项目的排列顺序",[1554,143907],{"style":126471,"src":143908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[195,143910,143912],{"id":143911},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1554,143914],{"style":126471,"src":143915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143917,143918],{},"必须要添加浏览器的私有前缀",[195,143920,143922],{"id":143921},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143924,143925],{},"学到最重要的知识：",[14,143927,143928],{},"flex处理这样的布局思路",[1554,143930],{"style":126471,"src":143931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[39,143933,143935],{"className":126615,"code":143934,"language":126617,"meta":44,"style":44},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[46,143936,143937,143943,143953,143963,143973],{"__ignoreMap":44},[49,143938,143939,143941],{"class":51,"line":52},[49,143940,143682],{"class":2055},[49,143942,15662],{"class":55},[49,143944,143945,143947,143949,143951],{"class":51,"line":84},[49,143946,128231],{"class":66},[49,143948,51526],{"class":55},[49,143950,51566],{"class":66},[49,143952,1382],{"class":55},[49,143954,143955,143957,143959,143961],{"class":51,"line":109},[49,143956,143711],{"class":66},[49,143958,51526],{"class":55},[49,143960,51681],{"class":66},[49,143962,1382],{"class":55},[49,143964,143965,143967,143969,143971],{"class":51,"line":120},[49,143966,143722],{"class":66},[49,143968,51526],{"class":55},[49,143970,51681],{"class":66},[49,143972,1382],{"class":55},[49,143974,143975],{"class":51,"line":135},[49,143976,1657],{"class":55},[14,143978,143979],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143981,143982],{},"使用属性选择器",[1554,143984],{"style":126471,"src":143985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143987,68978],{},[39,143989,143991],{"className":127362,"code":143990,"language":127364,"meta":44,"style":44},"\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",[46,143992,143993,143998,144012,144017,144037,144042,144061,144066,144085,144090,144109],{"__ignoreMap":44},[49,143994,143995],{"class":51,"line":52},[49,143996,143997],{"class":283},"\u003C!-- 携程网移动端案例结构 -->\n",[49,143999,144000,144002,144004,144006,144008,144010],{"class":51,"line":84},[49,144001,1129],{"class":55},[49,144003,51700],{"class":51389},[49,144005,53575],{"class":2055},[49,144007,60],{"class":55},[49,144009,92412],{"class":328},[49,144011,51396],{"class":55},[49,144013,144014],{"class":51,"line":109},[49,144015,144016],{"class":283},"  \u003C!-- 搜索栏 -->\n",[49,144018,144019,144021,144023,144025,144027,144030,144033,144035],{"class":51,"line":120},[49,144020,52233],{"class":55},[49,144022,51700],{"class":51389},[49,144024,53575],{"class":2055},[49,144026,60],{"class":55},[49,144028,144029],{"class":328},"\"search-index\"",[49,144031,144032],{"class":55},">...\u003C\u002F",[49,144034,51700],{"class":51389},[49,144036,51396],{"class":55},[49,144038,144039],{"class":51,"line":135},[49,144040,144041],{"class":283},"  \u003C!-- 焦点图 -->\n",[49,144043,144044,144046,144048,144050,144052,144055,144057,144059],{"class":51,"line":1306},[49,144045,52233],{"class":55},[49,144047,51700],{"class":51389},[49,144049,53575],{"class":2055},[49,144051,60],{"class":55},[49,144053,144054],{"class":328},"\"focus\"",[49,144056,144032],{"class":55},[49,144058,51700],{"class":51389},[49,144060,51396],{"class":55},[49,144062,144063],{"class":51,"line":1312},[49,144064,144065],{"class":283},"  \u003C!-- 主导航 -->\n",[49,144067,144068,144070,144072,144074,144076,144079,144081,144083],{"class":51,"line":1403},[49,144069,52233],{"class":55},[49,144071,51700],{"class":51389},[49,144073,53575],{"class":2055},[49,144075,60],{"class":55},[49,144077,144078],{"class":328},"\"local-nav\"",[49,144080,144032],{"class":55},[49,144082,51700],{"class":51389},[49,144084,51396],{"class":55},[49,144086,144087],{"class":51,"line":1409},[49,144088,144089],{"class":283},"  \u003C!-- 子导航 -->\n",[49,144091,144092,144094,144096,144098,144100,144103,144105,144107],{"class":51,"line":1421},[49,144093,52233],{"class":55},[49,144095,51700],{"class":51389},[49,144097,53575],{"class":2055},[49,144099,60],{"class":55},[49,144101,144102],{"class":328},"\"nav-common\"",[49,144104,144032],{"class":55},[49,144106,51700],{"class":51389},[49,144108,51396],{"class":55},[49,144110,144111,144113,144115],{"class":51,"line":1704},[49,144112,51874],{"class":55},[49,144114,51700],{"class":51389},[49,144116,51396],{"class":55},[14,144118,70542],{},[39,144120,144121],{"className":126615,"code":137067,"language":126617,"meta":44,"style":44},[46,144122,144123,144137,144153],{"__ignoreMap":44},[49,144124,144125,144127,144129,144131,144133,144135],{"class":51,"line":52},[49,144126,53910],{"class":51389},[49,144128,1109],{"class":55},[49,144130,103170],{"class":2055},[49,144132,60],{"class":59},[49,144134,62788],{"class":328},[49,144136,137084],{"class":55},[49,144138,144139,144141,144143,144145,144147,144149,144151],{"class":51,"line":84},[49,144140,70985],{"class":66},[49,144142,51526],{"class":55},[49,144144,441],{"class":66},[49,144146,51581],{"class":59},[49,144148,51610],{"class":66},[49,144150,130195],{"class":66},[49,144152,1382],{"class":55},[49,144154,144155],{"class":51,"line":109},[49,144156,1657],{"class":55},[14,144158,144159],{},"总代码和效果展示：",[1554,144161],{"style":126471,"src":144162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144164,68978],{},[39,144166,144167],{"className":127362,"code":143990,"language":127364,"meta":44,"style":44},[46,144168,144169,144173,144187,144191,144209,144213,144231,144235,144253,144257,144275],{"__ignoreMap":44},[49,144170,144171],{"class":51,"line":52},[49,144172,143997],{"class":283},[49,144174,144175,144177,144179,144181,144183,144185],{"class":51,"line":84},[49,144176,1129],{"class":55},[49,144178,51700],{"class":51389},[49,144180,53575],{"class":2055},[49,144182,60],{"class":55},[49,144184,92412],{"class":328},[49,144186,51396],{"class":55},[49,144188,144189],{"class":51,"line":109},[49,144190,144016],{"class":283},[49,144192,144193,144195,144197,144199,144201,144203,144205,144207],{"class":51,"line":120},[49,144194,52233],{"class":55},[49,144196,51700],{"class":51389},[49,144198,53575],{"class":2055},[49,144200,60],{"class":55},[49,144202,144029],{"class":328},[49,144204,144032],{"class":55},[49,144206,51700],{"class":51389},[49,144208,51396],{"class":55},[49,144210,144211],{"class":51,"line":135},[49,144212,144041],{"class":283},[49,144214,144215,144217,144219,144221,144223,144225,144227,144229],{"class":51,"line":1306},[49,144216,52233],{"class":55},[49,144218,51700],{"class":51389},[49,144220,53575],{"class":2055},[49,144222,60],{"class":55},[49,144224,144054],{"class":328},[49,144226,144032],{"class":55},[49,144228,51700],{"class":51389},[49,144230,51396],{"class":55},[49,144232,144233],{"class":51,"line":1312},[49,144234,144065],{"class":283},[49,144236,144237,144239,144241,144243,144245,144247,144249,144251],{"class":51,"line":1403},[49,144238,52233],{"class":55},[49,144240,51700],{"class":51389},[49,144242,53575],{"class":2055},[49,144244,60],{"class":55},[49,144246,144078],{"class":328},[49,144248,144032],{"class":55},[49,144250,51700],{"class":51389},[49,144252,51396],{"class":55},[49,144254,144255],{"class":51,"line":1409},[49,144256,144089],{"class":283},[49,144258,144259,144261,144263,144265,144267,144269,144271,144273],{"class":51,"line":1421},[49,144260,52233],{"class":55},[49,144262,51700],{"class":51389},[49,144264,53575],{"class":2055},[49,144266,60],{"class":55},[49,144268,144102],{"class":328},[49,144270,144032],{"class":55},[49,144272,51700],{"class":51389},[49,144274,51396],{"class":55},[49,144276,144277,144279,144281],{"class":51,"line":1704},[49,144278,51874],{"class":55},[49,144280,51700],{"class":51389},[49,144282,51396],{"class":55},[14,144284,70542],{},[39,144286,144287],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,144288,144289,144293,144307,144311],{"__ignoreMap":44},[49,144290,144291],{"class":51,"line":52},[49,144292,130726],{"class":283},[49,144294,144295,144297,144299,144301,144303,144305],{"class":51,"line":84},[49,144296,1129],{"class":55},[49,144298,51700],{"class":51389},[49,144300,53575],{"class":2055},[49,144302,60],{"class":55},[49,144304,130739],{"class":328},[49,144306,51396],{"class":55},[49,144308,144309],{"class":51,"line":109},[49,144310,130746],{"class":55},[49,144312,144313,144315,144317],{"class":51,"line":120},[49,144314,51874],{"class":55},[49,144316,51700],{"class":51389},[49,144318,51396],{"class":55},[143,144320,138016],{},{"title":44,"searchDepth":84,"depth":84,"links":144322},[144323,144324,144328,144329,144330],{"id":143467,"depth":84,"text":143468},{"id":143499,"depth":84,"text":143500,"children":144325},[144326,144327],{"id":143503,"depth":109,"text":143504},{"id":143520,"depth":109,"text":143521},{"id":143539,"depth":84,"text":143540},{"id":143546,"depth":84,"text":143547},{"id":143633,"depth":84,"text":143634,"children":144331},[144332,144333,144334,144335,144336],{"id":143640,"depth":109,"text":143641},{"id":143768,"depth":109,"text":143769},{"id":143862,"depth":109,"text":143863},{"id":143911,"depth":109,"text":143912},{"id":143921,"depth":109,"text":143922},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143459,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144343,"title":144344,"body":144345,"description":148,"extension":149,"meta":145572,"navigation":151,"path":145573,"seo":145574,"stem":145575,"__hash__":145576},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144346,"toc":145550},[144347,144350,144354,144358,144361,144364,144368,144373,144376,144379,144382,144385,144388,144445,144448,144453,144456,144459,144463,144474,144478,144481,144484,144491,144496,144500,144503,144509,144512,144516,144519,144526,144529,144532,144539,144542,144549,144552,144555,144562,144565,144568,144570,144587,144591,144594,144597,144600,144604,144607,144610,144613,144616,144619,144622,144624,144627,144630,144692,144695,144805,144812,144818,144821,144824,144828,144831,144835,144840,144843,144850,144853,144859,144864,144867,144870,144873,144876,144879,144882,144885,144888,144944,144946,144972,144976,144979,144982,144985,144993,144996,144999,145003,145059,145062,145066,145072,145083,145086,145091,145094,145097,145103,145106,145109,145112,145115,145118,145121,145124,145127,145152,145158,145161,145164,145167,145170,145173,145176,145181,145184,145187,145190,145198,145201,145208,145211,145214,145216,145240,145242,145245,145248,145251,145254,145257,145260,145263,145297,145300,145303,145337,145344,145347,145350,145353,145356,145359,145362,145369,145372,145375,145378,145381,145388,145391,145394,145401,145404,145407,145411,145414,145417,145420,145423,145426,145429,145432,145435,145437,145461,145463,145487,145491,145502,145505,145508,145511,145514,145517,145520,145523,145526,145529,145532,145535,145538,145541,145544,145547],[10,144348,144344],{"id":144349},"_21-移动端布局实战下篇",[166,144351,144353],{"id":144352},"_211-rem适配布局","21.1 rem适配布局",[195,144355,144357],{"id":144356},"_2111-rem单位","21.1.1 rem单位",[1554,144359],{"style":126471,"src":144360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144362,144363],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[195,144365,144367],{"id":144366},"_2112-媒体查询","21.1.2 媒体查询",[178,144369,144370],{},[181,144371,144372],{},"参数介绍",[1554,144374],{"style":126471,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1554,144377],{"style":126471,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1554,144380],{"style":126471,"src":144381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1554,144383],{"style":126471,"src":144384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1554,144386],{"style":126471,"src":144387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[39,144389,144391],{"className":126615,"code":144390,"language":126617,"meta":44,"style":44},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[46,144392,144393,144398,144417,144424,144437,144441],{"__ignoreMap":44},[49,144394,144395],{"class":51,"line":52},[49,144396,144397],{"class":283},"\u002F* 媒体查询 *\u002F\n",[49,144399,144400,144403,144405,144408,144410,144413,144415],{"class":51,"line":84},[49,144401,144402],{"class":59},"@media",[49,144404,1750],{"class":55},[49,144406,144407],{"class":66},"max-width",[49,144409,51526],{"class":55},[49,144411,144412],{"class":66},"768",[49,144414,51581],{"class":59},[49,144416,12532],{"class":55},[49,144418,144419,144422],{"class":51,"line":109},[49,144420,144421],{"class":2055},"  .container",[49,144423,15662],{"class":55},[49,144425,144426,144429,144431,144433,144435],{"class":51,"line":120},[49,144427,144428],{"class":66},"    width",[49,144430,51526],{"class":55},[49,144432,533],{"class":66},[49,144434,550],{"class":59},[49,144436,1382],{"class":55},[49,144438,144439],{"class":51,"line":135},[49,144440,127411],{"class":55},[49,144442,144443],{"class":51,"line":1306},[49,144444,1657],{"class":55},[14,144446,144447],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[178,144449,144450],{"start":84},[181,144451,144452],{},"引入资源",[1554,144454],{"style":126471,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144457,144458],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[195,144460,144462],{"id":144461},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1226,144464,144465,144468,144471],{},[181,144466,144467],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[181,144469,144470],{},"媒体查询可以根据不同设备宽度来修改样式",[181,144472,144473],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[166,144475,144477],{"id":144476},"_212-less基础","21.2 Less基础",[14,144479,144480],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144482,144483],{},"Less可以解决该问题，它是css的扩展语言",[14,144485,144486,144487],{},"Less中文网址： ",[56,144488,144489],{"href":144489,"rel":144490},"http:\u002F\u002Flesscss.cn\u002F",[23955],[14,144492,144493],{},[373,144494,144495],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[195,144497,144499],{"id":144498},"_2121-less安装","21.2.1 less安装",[14,144501,144502],{},"如果使用vscode，则无需进行下方安装步骤",[14,144504,144505],{},[56,144506,144507],{"href":144507,"rel":144508},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23955],[1554,144510],{"style":126471,"src":144511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[195,144513,144515],{"id":144514},"_2122-less使用","21.2.2 less使用",[14,144517,144518],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[178,144520,144521],{},[181,144522,144523],{},[373,144524,144525],{},"Less 变量",[1554,144527],{"style":126471,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1554,144530],{"style":126471,"src":144531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[178,144533,144534],{"start":84},[181,144535,144536],{},[373,144537,144538],{},"Less 编译",[1554,144540],{"style":126471,"src":144541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[178,144543,144544],{"start":109},[181,144545,144546],{},[373,144547,144548],{},"Less 嵌套",[1554,144550],{"style":126471,"src":144551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1554,144553],{"style":126471,"src":144554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[178,144556,144557],{"start":120},[181,144558,144559],{},[373,144560,144561],{},"Less 运算",[1554,144563],{"style":126471,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144566,144567],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144569,256],{},[1226,144571,144572,144575,144578,144581,144584],{},[181,144573,144574],{},"乘号（*）和除号（\u002F）的写法",[181,144576,144577],{},"运算符中间左右有个空格隔开 1px + 5",[181,144579,144580],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[181,144582,144583],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[181,144585,144586],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[166,144588,144590],{"id":144589},"_213-rem-适配方案","21.3 rem 适配方案",[14,144592,144593],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144595,144596],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1554,144598],{"style":126471,"src":144599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[195,144601,144603],{"id":144602},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144605,144606],{},"rem + 媒体查询 + less 技术",[1554,144608],{"style":126471,"src":144609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144611,144612],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144614,144615],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1554,144617],{"style":126471,"src":144618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144620,144621],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144623,14723],{},[1554,144625],{"style":126471,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144628,144629],{},"index.html:",[39,144631,144633],{"className":126615,"code":144632,"language":126617,"meta":44,"style":44},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[46,144634,144635,144640,144646,144662,144666,144672,144688],{"__ignoreMap":44},[49,144636,144637],{"class":51,"line":52},[49,144638,144639],{"class":283},"\u002F* rem 适配方案 *\u002F\n",[49,144641,144642,144644],{"class":51,"line":84},[49,144643,50724],{"class":51389},[49,144645,15662],{"class":55},[49,144647,144648,144650,144652,144655,144657,144659],{"class":51,"line":109},[49,144649,70715],{"class":66},[49,144651,51526],{"class":55},[49,144653,144654],{"class":66},"62.5",[49,144656,550],{"class":59},[49,144658,130478],{"class":55},[49,144660,144661],{"class":283},"\u002F* 1rem = 10px *\u002F\n",[49,144663,144664],{"class":51,"line":120},[49,144665,1657],{"class":55},[49,144667,144668,144670],{"class":51,"line":135},[49,144669,130463],{"class":2055},[49,144671,15662],{"class":55},[49,144673,144674,144676,144678,144680,144683,144685],{"class":51,"line":1306},[49,144675,70657],{"class":66},[49,144677,51526],{"class":55},[49,144679,95],{"class":66},[49,144681,144682],{"class":59},"rem",[49,144684,130478],{"class":55},[49,144686,144687],{"class":283},"\u002F* 100px *\u002F\n",[49,144689,144690],{"class":51,"line":1312},[49,144691,1657],{"class":55},[14,144693,144694],{},"common.less",[39,144696,144698],{"className":126615,"code":144697,"language":126617,"meta":44,"style":44},"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",[46,144699,144700,144706,144721,144725,144731,144745,144749,144753,144757,144763,144777,144781,144787,144801],{"__ignoreMap":44},[49,144701,144702,144704],{"class":51,"line":52},[49,144703,50724],{"class":51389},[49,144705,15662],{"class":55},[49,144707,144708,144710,144712,144714,144716,144718],{"class":51,"line":84},[49,144709,70715],{"class":66},[49,144711,51526],{"class":55},[49,144713,144654],{"class":66},[49,144715,550],{"class":59},[49,144717,26158],{"class":55},[49,144719,144720],{"class":283},"\u002F* 10px *\u002F\n",[49,144722,144723],{"class":51,"line":109},[49,144724,1657],{"class":55},[49,144726,144727,144729],{"class":51,"line":120},[49,144728,51700],{"class":51389},[49,144730,15662],{"class":55},[49,144732,144733,144735,144737,144739,144741,144743],{"class":51,"line":135},[49,144734,70657],{"class":66},[49,144736,51526],{"class":55},[49,144738,95],{"class":66},[49,144740,144682],{"class":59},[49,144742,26158],{"class":55},[49,144744,144687],{"class":283},[49,144746,144747],{"class":51,"line":1306},[49,144748,1657],{"class":55},[49,144750,144751],{"class":51,"line":1312},[49,144752,136076],{"class":55},[49,144754,144755],{"class":51,"line":1403},[49,144756,144639],{"class":283},[49,144758,144759,144761],{"class":51,"line":1409},[49,144760,50724],{"class":51389},[49,144762,15662],{"class":55},[49,144764,144765,144767,144769,144771,144773,144775],{"class":51,"line":1421},[49,144766,70715],{"class":66},[49,144768,51526],{"class":55},[49,144770,144654],{"class":66},[49,144772,550],{"class":59},[49,144774,130478],{"class":55},[49,144776,144661],{"class":283},[49,144778,144779],{"class":51,"line":1704},[49,144780,1657],{"class":55},[49,144782,144783,144785],{"class":51,"line":1709},[49,144784,130463],{"class":2055},[49,144786,15662],{"class":55},[49,144788,144789,144791,144793,144795,144797,144799],{"class":51,"line":1715},[49,144790,70657],{"class":66},[49,144792,51526],{"class":55},[49,144794,95],{"class":66},[49,144796,144682],{"class":59},[49,144798,130478],{"class":55},[49,144800,144687],{"class":283},[49,144802,144803],{"class":51,"line":1720},[49,144804,1657],{"class":55},[14,144806,144807,144808,144811],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23643,144809,144810],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[39,144813,144816],{"className":144814,"code":144815,"language":5278},[5276],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[46,144817,144815],{"__ignoreMap":44},[14,144819,144820],{},"less保存时会自动变成.css文件",[14,144822,144823],{},"好好搞懂上述代码写法",[195,144825,144827],{"id":144826},"_2132-样式导入样式","21.3.2 样式导入样式",[1554,144829],{"style":126471,"src":144830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[195,144832,144834],{"id":144833},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[178,144836,144837],{},[181,144838,144839],{},"准备工作",[1554,144841],{"style":126471,"src":144842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144844,144845,144846],{},"github地址：",[56,144847,144848],{"href":144848,"rel":144849},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23955],[14,144851,144852],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144854,144855,144856],{},"js文件引入到index.html中使用的是",[46,144857,144858],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[178,144860,144861],{"start":84},[181,144862,144863],{},"vscode插件",[1554,144865],{"style":126471,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144868,144869],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144871,144872],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1554,144874],{"style":126471,"src":144875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144877,144878],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1554,144880],{"style":126471,"src":144881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144883,144884],{},"修改成75就可以，alt+z为快捷键",[14,144886,144887],{},"index.css：",[39,144889,144890],{"className":126615,"code":144632,"language":126617,"meta":44,"style":44},[46,144891,144892,144896,144902,144916,144920,144926,144940],{"__ignoreMap":44},[49,144893,144894],{"class":51,"line":52},[49,144895,144639],{"class":283},[49,144897,144898,144900],{"class":51,"line":84},[49,144899,50724],{"class":51389},[49,144901,15662],{"class":55},[49,144903,144904,144906,144908,144910,144912,144914],{"class":51,"line":109},[49,144905,70715],{"class":66},[49,144907,51526],{"class":55},[49,144909,144654],{"class":66},[49,144911,550],{"class":59},[49,144913,130478],{"class":55},[49,144915,144661],{"class":283},[49,144917,144918],{"class":51,"line":120},[49,144919,1657],{"class":55},[49,144921,144922,144924],{"class":51,"line":135},[49,144923,130463],{"class":2055},[49,144925,15662],{"class":55},[49,144927,144928,144930,144932,144934,144936,144938],{"class":51,"line":1306},[49,144929,70657],{"class":66},[49,144931,51526],{"class":55},[49,144933,95],{"class":66},[49,144935,144682],{"class":59},[49,144937,130478],{"class":55},[49,144939,144687],{"class":283},[49,144941,144942],{"class":51,"line":1312},[49,144943,1657],{"class":55},[14,144945,144629],{},[39,144947,144948],{"className":126615,"code":127019,"language":126617,"meta":44,"style":44},[46,144949,144950,144956,144968],{"__ignoreMap":44},[49,144951,144952,144954],{"class":51,"line":52},[49,144953,51889],{"class":51389},[49,144955,15662],{"class":55},[49,144957,144958,144960,144962,144964,144966],{"class":51,"line":84},[49,144959,70715],{"class":66},[49,144961,51526],{"class":55},[49,144963,820],{"class":66},[49,144965,51581],{"class":59},[49,144967,1382],{"class":55},[49,144969,144970],{"class":51,"line":109},[49,144971,1657],{"class":55},[166,144973,144975],{"id":144974},"_214-响应式开发","21.4 响应式开发",[14,144977,144978],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1554,144980],{"style":126471,"src":144981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144983,144984],{},"做法：",[1226,144986,144987,144990],{},[181,144988,144989],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[181,144991,144992],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1554,144994],{"style":126471,"src":144995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144997,144998],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[195,145000,145002],{"id":145001},"_2141-简单代码示范","21.4.1 简单代码示范",[39,145004,145005],{"className":126615,"code":144632,"language":126617,"meta":44,"style":44},[46,145006,145007,145011,145017,145031,145035,145041,145055],{"__ignoreMap":44},[49,145008,145009],{"class":51,"line":52},[49,145010,144639],{"class":283},[49,145012,145013,145015],{"class":51,"line":84},[49,145014,50724],{"class":51389},[49,145016,15662],{"class":55},[49,145018,145019,145021,145023,145025,145027,145029],{"class":51,"line":109},[49,145020,70715],{"class":66},[49,145022,51526],{"class":55},[49,145024,144654],{"class":66},[49,145026,550],{"class":59},[49,145028,130478],{"class":55},[49,145030,144661],{"class":283},[49,145032,145033],{"class":51,"line":120},[49,145034,1657],{"class":55},[49,145036,145037,145039],{"class":51,"line":135},[49,145038,130463],{"class":2055},[49,145040,15662],{"class":55},[49,145042,145043,145045,145047,145049,145051,145053],{"class":51,"line":1306},[49,145044,70657],{"class":66},[49,145046,51526],{"class":55},[49,145048,95],{"class":66},[49,145050,144682],{"class":59},[49,145052,130478],{"class":55},[49,145054,144687],{"class":283},[49,145056,145057],{"class":51,"line":1312},[49,145058,1657],{"class":55},[14,145060,145061],{},"父盒子一般命名为container",[195,145063,145065],{"id":145064},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145067,145068,145069],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[373,145070,145071],{},"使得 Web 开发更加快捷",[1226,145073,145074],{},[181,145075,145076,145077],{},"官网：",[373,145078,145079],{},[56,145080,145081],{"href":145081,"rel":145082},"http:\u002F\u002Fgetbootstrap.com\u002F",[23955],[14,145084,145085],{},"可以直接去官网拿现成的东西",[178,145087,145088],{},[181,145089,145090],{},"Bootstrap的使用",[14,145092,145093],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145095,145096],{},"Bootstrap 使用四步曲：",[14,145098,145099,145102],{},[373,145100,145101],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1554,145104],{"style":126471,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145107,145108],{},"打开Bootstrap官网，然后下载",[1554,145110],{"style":126471,"src":145111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1554,145113],{"style":126471,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145116,145117],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145119,145120],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145122,145123],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1554,145125],{"style":126471,"src":145126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[39,145128,145130],{"className":126615,"code":145129,"language":126617,"meta":44,"style":44},".center {\n  color: red;\n}\n",[46,145131,145132,145138,145148],{"__ignoreMap":44},[49,145133,145134,145136],{"class":51,"line":52},[49,145135,126906],{"class":2055},[49,145137,15662],{"class":55},[49,145139,145140,145142,145144,145146],{"class":51,"line":84},[49,145141,70994],{"class":66},[49,145143,51526],{"class":55},[49,145145,57510],{"class":66},[49,145147,1382],{"class":55},[49,145149,145150],{"class":51,"line":109},[49,145151,1657],{"class":55},[14,145153,145154,145157],{},[46,145155,145156],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1554,145159],{"style":126471,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1554,145162],{"style":126471,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1554,145165],{"style":126471,"src":145166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145168,145169],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1554,145171],{"style":126471,"src":145172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145174,145175],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[178,145177,145178],{"start":84},[181,145179,145180],{},"布局容器",[1554,145182],{"style":126471,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145185,145186],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145188,145189],{},"container-fluid用于移动式布局比较方便",[178,145191,145192],{"start":109},[181,145193,145194,145195],{},"bootstrap ",[373,145196,145197],{},"栅格系统原理",[1554,145199],{"style":126471,"src":145200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[178,145202,145203],{"start":120},[181,145204,145205],{},[373,145206,145207],{},"栅格选项参数",[1554,145209],{"style":126471,"src":145210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145212,145213],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145215,14723],{},[39,145217,145218],{"className":126615,"code":145129,"language":126617,"meta":44,"style":44},[46,145219,145220,145226,145236],{"__ignoreMap":44},[49,145221,145222,145224],{"class":51,"line":52},[49,145223,126906],{"class":2055},[49,145225,15662],{"class":55},[49,145227,145228,145230,145232,145234],{"class":51,"line":84},[49,145229,70994],{"class":66},[49,145231,51526],{"class":55},[49,145233,57510],{"class":66},[49,145235,1382],{"class":55},[49,145237,145238],{"class":51,"line":109},[49,145239,1657],{"class":55},[14,145241,135658],{},[1554,145243],{"style":126471,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145246,145247],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145249,145250],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145252,145253],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145255,145256],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145258,145259],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145261,145262],{},"汇总展示说明：",[39,145264,145265],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,145266,145267,145271,145285,145289],{"__ignoreMap":44},[49,145268,145269],{"class":51,"line":52},[49,145270,130726],{"class":283},[49,145272,145273,145275,145277,145279,145281,145283],{"class":51,"line":84},[49,145274,1129],{"class":55},[49,145276,51700],{"class":51389},[49,145278,53575],{"class":2055},[49,145280,60],{"class":55},[49,145282,130739],{"class":328},[49,145284,51396],{"class":55},[49,145286,145287],{"class":51,"line":109},[49,145288,130746],{"class":55},[49,145290,145291,145293,145295],{"class":51,"line":120},[49,145292,51874],{"class":55},[49,145294,51700],{"class":51389},[49,145296,51396],{"class":55},[1554,145298],{"style":126471,"src":145299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145301,145302],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[39,145304,145305],{"className":127362,"code":130719,"language":127364,"meta":44,"style":44},[46,145306,145307,145311,145325,145329],{"__ignoreMap":44},[49,145308,145309],{"class":51,"line":52},[49,145310,130726],{"class":283},[49,145312,145313,145315,145317,145319,145321,145323],{"class":51,"line":84},[49,145314,1129],{"class":55},[49,145316,51700],{"class":51389},[49,145318,53575],{"class":2055},[49,145320,60],{"class":55},[49,145322,130739],{"class":328},[49,145324,51396],{"class":55},[49,145326,145327],{"class":51,"line":109},[49,145328,130746],{"class":55},[49,145330,145331,145333,145335],{"class":51,"line":120},[49,145332,51874],{"class":55},[49,145334,51700],{"class":51389},[49,145336,51396],{"class":55},[178,145338,145339],{"start":135},[181,145340,145341],{},[373,145342,145343],{},"列嵌套",[1554,145345],{"style":126471,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145348,145349],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145351,145352],{},"没加row内部这样：",[1554,145354],{"style":126471,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145357,145358],{},"加上row之后内部为：",[1554,145360],{"style":126471,"src":145361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[178,145363,145364],{"start":1306},[181,145365,145366],{},[373,145367,145368],{},"列偏移",[1554,145370],{"style":126471,"src":145371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145373,145374],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145376,145377],{},"要加偏移量，即偏移份数",[14,145379,145380],{},"偏移的份数=12-两个盒子的份数",[178,145382,145383],{"start":1312},[181,145384,145385],{},[373,145386,145387],{},"列排序",[1554,145389],{"style":126471,"src":145390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145392,145393],{},"pull拉左；push推右",[178,145395,145396],{"start":1403},[181,145397,145398],{},[373,145399,145400],{},"响应式工具",[1554,145402],{"style":126471,"src":145403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145405,145406],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[195,145408,145410],{"id":145409},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145412,145413],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145415,145416],{},"ul {",[14,145418,145419],{},"list-style: none;",[14,145421,145422],{},"margin:0;",[14,145424,145425],{},"padding:0; }",[1554,145427],{"style":126471,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1554,145430],{"style":126471,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145433,145434],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145436,68978],{},[39,145438,145439],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,145440,145441,145447,145457],{"__ignoreMap":44},[49,145442,145443,145445],{"class":51,"line":52},[49,145444,130463],{"class":2055},[49,145446,15662],{"class":55},[49,145448,145449,145451,145453,145455],{"class":51,"line":84},[49,145450,131095],{"class":66},[49,145452,51526],{"class":55},[49,145454,23826],{"class":66},[49,145456,1382],{"class":55},[49,145458,145459],{"class":51,"line":109},[49,145460,1657],{"class":55},[14,145462,70542],{},[39,145464,145465],{"className":126615,"code":139285,"language":126617,"meta":44,"style":44},[46,145466,145467,145473,145483],{"__ignoreMap":44},[49,145468,145469,145471],{"class":51,"line":52},[49,145470,130463],{"class":2055},[49,145472,15662],{"class":55},[49,145474,145475,145477,145479,145481],{"class":51,"line":84},[49,145476,131095],{"class":66},[49,145478,51526],{"class":55},[49,145480,23826],{"class":66},[49,145482,1382],{"class":55},[49,145484,145485],{"class":51,"line":109},[49,145486,1657],{"class":55},[166,145488,145490],{"id":145489},"_215-swiper-插件使用","21.5 swiper 插件使用",[1226,145492,145493,145496,145499],{},[181,145494,145495],{},"下载需要的css和js文件html页面中 引入相关文件",[181,145497,145498],{},"官网找到类似案例，复制html结构，css样式 js 语法",[181,145500,145501],{},"根据需求定制修改模块",[1554,145503],{"style":126471,"src":145504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145506,145507],{},"解压后将这两部分放到项目中",[1554,145509],{"style":126471,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145512,145513],{},"这个插件可以帮助我们实现轮播图效果",[14,145515,145516],{},"用法：",[1554,145518],{"style":126471,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145521,145522],{},"找到自己喜欢的",[1554,145524],{"style":126471,"src":145525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145527,145528],{},"右键，查看网页源代码",[1554,145530],{"style":126471,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145533,145534],{},"复制人家的结构内容",[14,145536,145537],{},"然后去看API文档：",[1554,145539],{"style":126471,"src":145540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145542,145543],{},"可以看看如何修改样式",[14,145545,145546],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[143,145548,145549],{},"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":44,"searchDepth":84,"depth":84,"links":145551},[145552,145557,145561,145566,145571],{"id":144352,"depth":84,"text":144353,"children":145553},[145554,145555,145556],{"id":144356,"depth":109,"text":144357},{"id":144366,"depth":109,"text":144367},{"id":144461,"depth":109,"text":144462},{"id":144476,"depth":84,"text":144477,"children":145558},[145559,145560],{"id":144498,"depth":109,"text":144499},{"id":144514,"depth":109,"text":144515},{"id":144589,"depth":84,"text":144590,"children":145562},[145563,145564,145565],{"id":144602,"depth":109,"text":144603},{"id":144826,"depth":109,"text":144827},{"id":144833,"depth":109,"text":144834},{"id":144974,"depth":84,"text":144975,"children":145567},[145568,145569,145570],{"id":145001,"depth":109,"text":145002},{"id":145064,"depth":109,"text":145065},{"id":145409,"depth":109,"text":145410},{"id":145489,"depth":84,"text":145490},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144344,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145578,"title":145579,"body":145580,"description":148,"extension":149,"meta":145800,"navigation":151,"path":145801,"seo":145802,"stem":145803,"__hash__":145804},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145581,"toc":145796},[145582,145585,145589,145592,145607,145612,145615,145620,145655,145660,145672,145677,145690,145695,145712,145717,145737,145742,145760,145763,145766,145769,145772,145776,145779,145782,145785,145788,145791,145794],[10,145583,145579],{"id":145584},"_22-代码提交与新型相对单位",[166,145586,145588],{"id":145587},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145590,145591],{},"法1：",[178,145593,145594,145601,145604],{},[181,145595,145596,145597],{},"登录网站注册：",[56,145598,145599],{"href":145599,"rel":145600},"https:\u002F\u002Fgitee.com\u002F",[23955],[181,145602,145603],{},"码云创建新的仓库",[181,145605,145606],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1226,145608,145609],{},[181,145610,145611],{},"在网站根目录右键-- Git Bash Here",[1554,145613],{"style":126471,"src":145614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1226,145616,145617],{},[181,145618,145619],{},"如果是第一次利用git提交，请配置好全局选项",[39,145621,145623],{"className":117359,"code":145622,"language":117361,"meta":44,"style":44},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[46,145624,145625,145641],{"__ignoreMap":44},[49,145626,145627,145630,145632,145635,145638],{"class":51,"line":52},[49,145628,145629],{"class":2055},"git",[49,145631,119782],{"class":328},[49,145633,145634],{"class":66}," --global",[49,145636,145637],{"class":328}," user.name",[49,145639,145640],{"class":328}," \"你的名字\"\n",[49,145642,145643,145645,145647,145649,145652],{"class":51,"line":84},[49,145644,145629],{"class":2055},[49,145646,119782],{"class":328},[49,145648,145634],{"class":66},[49,145650,145651],{"class":328}," user.email",[49,145653,145654],{"class":328}," \"你的邮箱\"\n",[1226,145656,145657],{},[181,145658,145659],{},"初始化仓库",[39,145661,145663],{"className":117359,"code":145662,"language":117361,"meta":44,"style":44},"git init\n",[46,145664,145665],{"__ignoreMap":44},[49,145666,145667,145669],{"class":51,"line":52},[49,145668,145629],{"class":2055},[49,145670,145671],{"class":328}," init\n",[1226,145673,145674],{},[181,145675,145676],{},"把本地文件放到暂存区",[39,145678,145680],{"className":117359,"code":145679,"language":117361,"meta":44,"style":44},"git add .\n",[46,145681,145682],{"__ignoreMap":44},[49,145683,145684,145686,145688],{"class":51,"line":52},[49,145685,145629],{"class":2055},[49,145687,5300],{"class":328},[49,145689,28832],{"class":328},[1226,145691,145692],{},[181,145693,145694],{},"把本地文件放到本地仓库里面",[39,145696,145698],{"className":117359,"code":145697,"language":117361,"meta":44,"style":44},"git commit -m \"first commit\"\n",[46,145699,145700],{"__ignoreMap":44},[49,145701,145702,145704,145707,145709],{"class":51,"line":52},[49,145703,145629],{"class":2055},[49,145705,145706],{"class":328}," commit",[49,145708,100945],{"class":66},[49,145710,145711],{"class":328}," \"first commit\"\n",[1226,145713,145714],{},[181,145715,145716],{},"链接远程仓库",[39,145718,145720],{"className":117359,"code":145719,"language":117361,"meta":44,"style":44},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[46,145721,145722],{"__ignoreMap":44},[49,145723,145724,145726,145729,145731,145734],{"class":51,"line":52},[49,145725,145629],{"class":2055},[49,145727,145728],{"class":328}," remote",[49,145730,5300],{"class":328},[49,145732,145733],{"class":328}," origin",[49,145735,145736],{"class":328}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1226,145738,145739],{},[181,145740,145741],{},"把本地仓库的文件推送到远程仓库 push",[39,145743,145745],{"className":117359,"code":145744,"language":117361,"meta":44,"style":44},"git push -u origin master\n",[46,145746,145747],{"__ignoreMap":44},[49,145748,145749,145751,145753,145755,145757],{"class":51,"line":52},[49,145750,145629],{"class":2055},[49,145752,29107],{"class":328},[49,145754,28381],{"class":66},[49,145756,145733],{"class":328},[49,145758,145759],{"class":328}," master\n",[1554,145761],{"style":126471,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145764,145765],{},"上方方法暂未实现，后边学完git后在整",[14,145767,145768],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1554,145770],{"style":126471,"src":145771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[166,145773,145775],{"id":145774},"_222-新型相对单位","22.2 新型相对单位",[1554,145777],{"style":126471,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1554,145780],{"style":126471,"src":145781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145783,145784],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145786,145787],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1554,145789],{"style":126471,"src":145790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145792,145793],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[143,145795,24048],{},{"title":44,"searchDepth":84,"depth":84,"links":145797},[145798,145799],{"id":145587,"depth":84,"text":145588},{"id":145774,"depth":84,"text":145775},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145579,"description":148},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145806,"title":145807,"body":145808,"description":145812,"extension":149,"meta":145813,"navigation":151,"path":145814,"seo":145815,"stem":145816,"__hash__":145817},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145809,"toc":145810},[],{"title":44,"searchDepth":84,"depth":84,"links":145811},[],"自己正经开始学编程的第一门语言！",{"category":92928},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145807,"description":145812},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145819,"title":145820,"body":145821,"description":148,"extension":149,"meta":146968,"navigation":151,"path":146969,"seo":146970,"stem":146971,"__hash__":146972},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145822,"toc":146944},[145823,145826,145830,145833,145836,145861,145864,145870,145874,145877,145904,145907,145947,145950,145962,145965,145971,145975,145979,146006,146023,146030,146034,146037,146063,146066,146070,146073,146113,146116,146133,146139,146143,146148,146192,146195,146213,146216,146284,146288,146295,146298,146313,146316,146325,146328,146339,146342,146351,146354,146371,146374,146389,146393,146397,146400,146402,146422,146426,146429,146432,146443,146446,146452,146456,146462,146489,146492,146504,146507,146518,146521,146527,146531,146537,146587,146590,146632,146635,146668,146671,146705,146709,146712,146732,146735,146771,146774,146787,146791,146795,146801,146804,146817,146821,146824,146830,146833,146837,146840,146843,146892,146896,146912,146918,146925,146931,146941],[10,145824,145820],{"id":145825},"_1-python环境与第一个程序",[166,145827,145829],{"id":145828},"_11-什么是python","1.1 什么是Python",[14,145831,145832],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145834,145835],{},"理解 Python 时抓住三个关键词：",[178,145837,145838,145841,145844],{},[181,145839,145840],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[181,145842,145843],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[181,145845,145846,145847,436,145850,436,145853,436,145856,436,145858,28476],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[46,145848,145849],{},"os",[46,145851,145852],{},"sys",[46,145854,145855],{},"json",[46,145857,57949],{},[46,145859,145860],{},"datetime",[14,145862,145863],{},"Python 程序的运行链路：",[39,145865,145868],{"className":145866,"code":145867,"language":5278,"meta":44},[5276],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[46,145869,145867],{"__ignoreMap":44},[166,145871,145873],{"id":145872},"_12-python解释器","1.2 Python解释器",[14,145875,145876],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[39,145878,145880],{"className":23912,"code":145879,"language":23914,"meta":44,"style":44},"python --version\npython3 --version\npython\npython3\n",[46,145881,145882,145888,145894,145899],{"__ignoreMap":44},[49,145883,145884,145886],{"class":51,"line":52},[49,145885,43],{"class":2055},[49,145887,26384],{"class":66},[49,145889,145890,145892],{"class":51,"line":84},[49,145891,100942],{"class":2055},[49,145893,26384],{"class":66},[49,145895,145896],{"class":51,"line":109},[49,145897,145898],{"class":2055},"python\n",[49,145900,145901],{"class":51,"line":120},[49,145902,145903],{"class":2055},"python3\n",[14,145905,145906],{},"进入交互模式后，可以直接输入表达式：",[39,145908,145910],{"className":41,"code":145909,"language":43,"meta":44,"style":44},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[46,145911,145912,145923,145928,145942],{"__ignoreMap":44},[49,145913,145914,145917,145919,145921],{"class":51,"line":52},[49,145915,145916],{"class":59},">>>",[49,145918,25209],{"class":66},[49,145920,45655],{"class":59},[49,145922,47812],{"class":66},[49,145924,145925],{"class":51,"line":84},[49,145926,145927],{"class":66},"3\n",[49,145929,145930,145932,145935,145937,145940],{"class":51,"line":109},[49,145931,145916],{"class":59},[49,145933,145934],{"class":66}," print",[49,145936,228],{"class":55},[49,145938,145939],{"class":328},"\"hello python\"",[49,145941,81],{"class":55},[49,145943,145944],{"class":51,"line":120},[49,145945,145946],{"class":55},"hello python\n",[14,145948,145949],{},"退出交互模式：",[39,145951,145953],{"className":41,"code":145952,"language":43,"meta":44,"style":44},"exit()\n",[46,145954,145955],{"__ignoreMap":44},[49,145956,145957,145960],{"class":51,"line":52},[49,145958,145959],{"class":66},"exit",[49,145961,2068],{"class":55},[14,145963,145964],{},"或使用快捷键：",[39,145966,145969],{"className":145967,"code":145968,"language":5278,"meta":44},[5276],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[46,145970,145968],{"__ignoreMap":44},[166,145972,145974],{"id":145973},"_13-安装python","1.3 安装Python",[195,145976,145978],{"id":145977},"_131-windows安装","1.3.1 Windows安装",[178,145980,145981,145988,145991,145997,146003],{},[181,145982,145983,145984],{},"打开 Python 官网：",[56,145985,145986],{"href":145986,"rel":145987},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23955],[181,145989,145990],{},"下载 Windows Installer。",[181,145992,145993,145994,28476],{},"安装时勾选 ",[46,145995,145996],{},"Add Python to PATH",[181,145998,145999,146000,28476],{},"点击 ",[46,146001,146002],{},"Install Now",[181,146004,146005],{},"安装完成后打开命令提示符验证：",[39,146007,146009],{"className":23912,"code":146008,"language":23914,"meta":44,"style":44},"python --version\npip --version\n",[46,146010,146011,146017],{"__ignoreMap":44},[49,146012,146013,146015],{"class":51,"line":52},[49,146014,43],{"class":2055},[49,146016,26384],{"class":66},[49,146018,146019,146021],{"class":51,"line":84},[49,146020,23921],{"class":2055},[49,146022,26384],{"class":66},[14,146024,146025,146026,146029],{},"如果提示 ",[46,146027,146028],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[195,146031,146033],{"id":146032},"_132-macos安装","1.3.2 macOS安装",[14,146035,146036],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[39,146038,146040],{"className":23912,"code":146039,"language":23914,"meta":44,"style":44},"brew install python\npython3 --version\npip3 --version\n",[46,146041,146042,146051,146057],{"__ignoreMap":44},[49,146043,146044,146047,146049],{"class":51,"line":52},[49,146045,146046],{"class":2055},"brew",[49,146048,23924],{"class":328},[49,146050,124381],{"class":328},[49,146052,146053,146055],{"class":51,"line":84},[49,146054,100942],{"class":2055},[49,146056,26384],{"class":66},[49,146058,146059,146061],{"class":51,"line":109},[49,146060,119763],{"class":2055},[49,146062,26384],{"class":66},[14,146064,146065],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[195,146067,146069],{"id":146068},"_133-linux安装","1.3.3 Linux安装",[14,146071,146072],{},"Ubuntu\u002FDebian：",[39,146074,146076],{"className":23912,"code":146075,"language":23914,"meta":44,"style":44},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[46,146077,146078,146086,146101,146107],{"__ignoreMap":44},[49,146079,146080,146082,146084],{"class":51,"line":52},[49,146081,24667],{"class":2055},[49,146083,117380],{"class":328},[49,146085,26333],{"class":328},[49,146087,146088,146090,146092,146094,146096,146098],{"class":51,"line":84},[49,146089,24667],{"class":2055},[49,146091,117380],{"class":328},[49,146093,23924],{"class":328},[49,146095,104466],{"class":328},[49,146097,100861],{"class":328},[49,146099,146100],{"class":328}," python3-venv\n",[49,146102,146103,146105],{"class":51,"line":109},[49,146104,100942],{"class":2055},[49,146106,26384],{"class":66},[49,146108,146109,146111],{"class":51,"line":120},[49,146110,119763],{"class":2055},[49,146112,26384],{"class":66},[14,146114,146115],{},"Fedora：",[39,146117,146119],{"className":23912,"code":146118,"language":23914,"meta":44,"style":44},"sudo dnf install python3 python3-pip\n",[46,146120,146121],{"__ignoreMap":44},[49,146122,146123,146125,146127,146129,146131],{"class":51,"line":52},[49,146124,24667],{"class":2055},[49,146126,26406],{"class":328},[49,146128,23924],{"class":328},[49,146130,104466],{"class":328},[49,146132,119828],{"class":328},[14,146134,146135,146136,146138],{},"Linux 上通常使用 ",[46,146137,100942],{}," 命令，避免和系统旧版本 Python 冲突。",[166,146140,146142],{"id":146141},"_14-pip包管理器","1.4 pip包管理器",[14,146144,146145,146147],{},[46,146146,23921],{}," 用来安装第三方库。",[39,146149,146151],{"className":23912,"code":146150,"language":23914,"meta":44,"style":44},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[46,146152,146153,146162,146171,146179,146185],{"__ignoreMap":44},[49,146154,146155,146157,146159],{"class":51,"line":52},[49,146156,23921],{"class":2055},[49,146158,23924],{"class":328},[49,146160,146161],{"class":328}," requests\n",[49,146163,146164,146166,146169],{"class":51,"line":84},[49,146165,23921],{"class":2055},[49,146167,146168],{"class":328}," uninstall",[49,146170,146161],{"class":328},[49,146172,146173,146175,146177],{"class":51,"line":109},[49,146174,23921],{"class":2055},[49,146176,117637],{"class":328},[49,146178,146161],{"class":328},[49,146180,146181,146183],{"class":51,"line":120},[49,146182,23921],{"class":2055},[49,146184,119018],{"class":328},[49,146186,146187,146189],{"class":51,"line":135},[49,146188,23921],{"class":2055},[49,146190,146191],{"class":328}," freeze\n",[14,146193,146194],{},"国内网络较慢时可以临时使用镜像：",[39,146196,146198],{"className":23912,"code":146197,"language":23914,"meta":44,"style":44},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,146199,146200],{"__ignoreMap":44},[49,146201,146202,146204,146206,146209,146211],{"class":51,"line":52},[49,146203,23921],{"class":2055},[49,146205,23924],{"class":328},[49,146207,146208],{"class":328}," requests",[49,146210,26521],{"class":66},[49,146212,119791],{"class":328},[14,146214,146215],{},"常见第三方库：",[361,146217,146218,146227],{},[364,146219,146220],{},[367,146221,146222,146225],{},[370,146223,146224],{},"库",[370,146226,102759],{},[408,146228,146229,146237,146244,146252,146260,146268,146276],{},[367,146230,146231,146234],{},[413,146232,146233],{},"requests",[413,146235,146236],{},"网络请求",[367,146238,146239,146241],{},[413,146240,100689],{},[413,146242,146243],{},"数值计算",[367,146245,146246,146249],{},[413,146247,146248],{},"pandas",[413,146250,146251],{},"表格数据处理",[367,146253,146254,146257],{},[413,146255,146256],{},"matplotlib",[413,146258,146259],{},"绘图",[367,146261,146262,146265],{},[413,146263,146264],{},"pyecharts",[413,146266,146267],{},"ECharts 图表",[367,146269,146270,146273],{},[413,146271,146272],{},"flask",[413,146274,146275],{},"Web 后端",[367,146277,146278,146281],{},[413,146279,146280],{},"pytest",[413,146282,146283],{},"自动化测试",[166,146285,146287],{"id":146286},"_15-虚拟环境","1.5 虚拟环境",[14,146289,146290,146291,146294],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[46,146292,146293],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146296,146297],{},"创建虚拟环境：",[39,146299,146301],{"className":23912,"code":146300,"language":23914,"meta":44,"style":44},"python -m venv .venv\n",[46,146302,146303],{"__ignoreMap":44},[49,146304,146305,146307,146309,146311],{"class":51,"line":52},[49,146306,43],{"class":2055},[49,146308,100945],{"class":66},[49,146310,100948],{"class":328},[49,146312,100951],{"class":328},[14,146314,146315],{},"Windows 激活：",[39,146317,146319],{"className":23912,"code":146318,"language":23914,"meta":44,"style":44},".venv\\Scripts\\activate\n",[46,146320,146321],{"__ignoreMap":44},[49,146322,146323],{"class":51,"line":52},[49,146324,146318],{"class":2055},[14,146326,146327],{},"macOS\u002FLinux 激活：",[39,146329,146331],{"className":23912,"code":146330,"language":23914,"meta":44,"style":44},"source .venv\u002Fbin\u002Factivate\n",[46,146332,146333],{"__ignoreMap":44},[49,146334,146335,146337],{"class":51,"line":52},[49,146336,100956],{"class":66},[49,146338,100959],{"class":328},[14,146340,146341],{},"退出虚拟环境：",[39,146343,146345],{"className":23912,"code":146344,"language":23914,"meta":44,"style":44},"deactivate\n",[46,146346,146347],{"__ignoreMap":44},[49,146348,146349],{"class":51,"line":52},[49,146350,146344],{"class":2055},[14,146352,146353],{},"保存依赖：",[39,146355,146357],{"className":23912,"code":146356,"language":23914,"meta":44,"style":44},"pip freeze > requirements.txt\n",[46,146358,146359],{"__ignoreMap":44},[49,146360,146361,146363,146366,146368],{"class":51,"line":52},[49,146362,23921],{"class":2055},[49,146364,146365],{"class":328}," freeze",[49,146367,26313],{"class":59},[49,146369,146370],{"class":328}," requirements.txt\n",[14,146372,146373],{},"安装依赖：",[39,146375,146377],{"className":23912,"code":146376,"language":23914,"meta":44,"style":44},"pip install -r requirements.txt\n",[46,146378,146379],{"__ignoreMap":44},[49,146380,146381,146383,146385,146387],{"class":51,"line":52},[49,146382,23921],{"class":2055},[49,146384,23924],{"class":328},[49,146386,119702],{"class":66},[49,146388,146370],{"class":328},[166,146390,146392],{"id":146391},"_16-开发工具","1.6 开发工具",[195,146394,146396],{"id":146395},"_161-pycharm","1.6.1 PyCharm",[14,146398,146399],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146401,122125],{},[178,146403,146404,146407,146410,146416,146419],{},[181,146405,146406],{},"New Project：创建项目。",[181,146408,146409],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[181,146411,146412,146413,126046],{},"New Python File：创建 ",[46,146414,146415],{},".py",[181,146417,146418],{},"Run：运行当前文件。",[181,146420,146421],{},"Debug：断点调试。",[195,146423,146425],{"id":146424},"_162-vs-code","1.6.2 VS Code",[14,146427,146428],{},"VS Code 轻量，适合后续多语言开发。",[14,146430,146431],{},"建议安装插件：",[178,146433,146434,146437,146440],{},[181,146435,146436],{},"Python。",[181,146438,146439],{},"Pylance。",[181,146441,146442],{},"Jupyter。",[14,146444,146445],{},"选择解释器：",[39,146447,146450],{"className":146448,"code":146449,"language":5278,"meta":44},[5276],"Ctrl + Shift + P -> Python: Select Interpreter\n",[46,146451,146449],{"__ignoreMap":44},[166,146453,146455],{"id":146454},"_17-第一个python程序","1.7 第一个Python程序",[14,146457,146458,146459,24709],{},"创建文件 ",[46,146460,146461],{},"hello.py",[39,146463,146465],{"className":41,"code":146464,"language":43,"meta":44,"style":44},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[46,146466,146467,146478],{"__ignoreMap":44},[49,146468,146469,146471,146473,146476],{"class":51,"line":52},[49,146470,30504],{"class":66},[49,146472,228],{"class":55},[49,146474,146475],{"class":328},"\"Hello World\"",[49,146477,81],{"class":55},[49,146479,146480,146482,146484,146487],{"class":51,"line":84},[49,146481,30504],{"class":66},[49,146483,228],{"class":55},[49,146485,146486],{"class":328},"\"你好，Python\"",[49,146488,81],{"class":55},[14,146490,146491],{},"在终端运行：",[39,146493,146495],{"className":23912,"code":146494,"language":23914,"meta":44,"style":44},"python hello.py\n",[46,146496,146497],{"__ignoreMap":44},[49,146498,146499,146501],{"class":51,"line":52},[49,146500,43],{"class":2055},[49,146502,146503],{"class":328}," hello.py\n",[14,146505,146506],{},"或：",[39,146508,146510],{"className":23912,"code":146509,"language":23914,"meta":44,"style":44},"python3 hello.py\n",[46,146511,146512],{"__ignoreMap":44},[49,146513,146514,146516],{"class":51,"line":52},[49,146515,100942],{"class":2055},[49,146517,146503],{"class":328},[14,146519,146520],{},"输出：",[39,146522,146525],{"className":146523,"code":146524,"language":5278,"meta":44},[5276],"Hello World\n你好，Python\n",[46,146526,146524],{"__ignoreMap":44},[166,146528,146530],{"id":146529},"_18-print函数","1.8 print函数",[14,146532,146533,146536],{},[46,146534,146535],{},"print()"," 用来输出内容。",[39,146538,146540],{"className":41,"code":146539,"language":43,"meta":44,"style":44},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[46,146541,146542,146552,146562,146572],{"__ignoreMap":44},[49,146543,146544,146546,146548,146550],{"class":51,"line":52},[49,146545,30504],{"class":66},[49,146547,228],{"class":55},[49,146549,5934],{"class":328},[49,146551,81],{"class":55},[49,146553,146554,146556,146558,146560],{"class":51,"line":84},[49,146555,30504],{"class":66},[49,146557,228],{"class":55},[49,146559,533],{"class":66},[49,146561,81],{"class":55},[49,146563,146564,146566,146568,146570],{"class":51,"line":109},[49,146565,30504],{"class":66},[49,146567,228],{"class":55},[49,146569,274],{"class":66},[49,146571,81],{"class":55},[49,146573,146574,146576,146578,146581,146583,146585],{"class":51,"line":120},[49,146575,30504],{"class":66},[49,146577,228],{"class":55},[49,146579,146580],{"class":328},"\"年龄:\"",[49,146582,12525],{"class":55},[49,146584,869],{"class":66},[49,146586,81],{"class":55},[14,146588,146589],{},"多个内容用逗号隔开，默认中间加空格：",[39,146591,146593],{"className":41,"code":146592,"language":43,"meta":44,"style":44},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[46,146594,146595,146605,146615],{"__ignoreMap":44},[49,146596,146597,146600,146602],{"class":51,"line":52},[49,146598,146599],{"class":55},"name ",[49,146601,60],{"class":59},[49,146603,146604],{"class":328}," \"张三\"\n",[49,146606,146607,146610,146612],{"class":51,"line":84},[49,146608,146609],{"class":55},"age ",[49,146611,60],{"class":59},[49,146613,146614],{"class":66}," 18\n",[49,146616,146617,146619,146621,146624,146627,146629],{"class":51,"line":109},[49,146618,30504],{"class":66},[49,146620,228],{"class":55},[49,146622,146623],{"class":328},"\"姓名:\"",[49,146625,146626],{"class":55},", name, ",[49,146628,146580],{"class":328},[49,146630,146631],{"class":55},", age)\n",[14,146633,146634],{},"修改分隔符：",[39,146636,146638],{"className":41,"code":146637,"language":43,"meta":44,"style":44},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[46,146639,146640],{"__ignoreMap":44},[49,146641,146642,146644,146646,146649,146651,146653,146655,146657,146659,146662,146664,146666],{"class":51,"line":52},[49,146643,30504],{"class":66},[49,146645,228],{"class":55},[49,146647,146648],{"class":328},"\"2024\"",[49,146650,12525],{"class":55},[49,146652,54405],{"class":328},[49,146654,12525],{"class":55},[49,146656,54405],{"class":328},[49,146658,12525],{"class":55},[49,146660,146661],{"class":126},"sep",[49,146663,60],{"class":59},[49,146665,32572],{"class":328},[49,146667,81],{"class":55},[14,146669,146670],{},"修改结尾符：",[39,146672,146674],{"className":41,"code":146673,"language":43,"meta":44,"style":44},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[46,146675,146676,146694],{"__ignoreMap":44},[49,146677,146678,146680,146682,146684,146686,146688,146690,146692],{"class":51,"line":52},[49,146679,30504],{"class":66},[49,146681,228],{"class":55},[49,146683,5934],{"class":328},[49,146685,12525],{"class":55},[49,146687,45890],{"class":126},[49,146689,60],{"class":59},[49,146691,4451],{"class":328},[49,146693,81],{"class":55},[49,146695,146696,146698,146700,146703],{"class":51,"line":84},[49,146697,30504],{"class":66},[49,146699,228],{"class":55},[49,146701,146702],{"class":328},"\"python\"",[49,146704,81],{"class":55},[166,146706,146708],{"id":146707},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146710,146711],{},"交互运行适合临时验证：",[39,146713,146715],{"className":41,"code":146714,"language":43,"meta":44,"style":44},">>> 10 * 3\n30\n",[46,146716,146717,146727],{"__ignoreMap":44},[49,146718,146719,146721,146723,146725],{"class":51,"line":52},[49,146720,145916],{"class":59},[49,146722,2130],{"class":66},[49,146724,6608],{"class":59},[49,146726,120099],{"class":66},[49,146728,146729],{"class":51,"line":84},[49,146730,146731],{"class":66},"30\n",[14,146733,146734],{},"脚本运行适合保存程序：",[39,146736,146738],{"className":41,"code":146737,"language":43,"meta":44,"style":44},"price = 8\ncount = 5\nprint(price * count)\n",[46,146739,146740,146750,146759],{"__ignoreMap":44},[49,146741,146742,146745,146747],{"class":51,"line":52},[49,146743,146744],{"class":55},"price ",[49,146746,60],{"class":59},[49,146748,146749],{"class":66}," 8\n",[49,146751,146752,146755,146757],{"class":51,"line":84},[49,146753,146754],{"class":55},"count ",[49,146756,60],{"class":59},[49,146758,54516],{"class":66},[49,146760,146761,146763,146766,146768],{"class":51,"line":109},[49,146762,30504],{"class":66},[49,146764,146765],{"class":55},"(price ",[49,146767,674],{"class":59},[49,146769,146770],{"class":55}," count)\n",[14,146772,146773],{},"实际学习中推荐：",[178,146775,146776,146779,146784],{},[181,146777,146778],{},"临时试一个语法，用交互模式。",[181,146780,146781,146782,126046],{},"写完整练习，用 ",[46,146783,146415],{},[181,146785,146786],{},"写项目，用独立目录和虚拟环境。",[166,146788,146790],{"id":146789},"_110-常见错误","1.10 常见错误",[195,146792,146794],{"id":146793},"_1101-命令找不到","1.10.1 命令找不到",[39,146796,146799],{"className":146797,"code":146798,"language":5278,"meta":44},[5276],"python: command not found\n",[46,146800,146798],{"__ignoreMap":44},[14,146802,146803],{},"原因：",[178,146805,146806,146809,146812],{},[181,146807,146808],{},"没安装 Python。",[181,146810,146811],{},"PATH 没配置。",[181,146813,146814,146815,28476],{},"Linux\u002FmacOS 应该使用 ",[46,146816,100942],{},[195,146818,146820],{"id":146819},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146822,146823],{},"不要把文件命名为：",[39,146825,146828],{"className":146826,"code":146827,"language":5278,"meta":44},[5276],"random.py\njson.py\ntime.py\nrequests.py\n",[46,146829,146827],{"__ignoreMap":44},[14,146831,146832],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[195,146834,146836],{"id":146835},"_1103-中文乱码","1.10.3 中文乱码",[14,146838,146839],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146841,146842],{},"如果读写文件出现乱码，要明确指定编码：",[39,146844,146846],{"className":41,"code":146845,"language":43,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[46,146847,146848,146882],{"__ignoreMap":44},[49,146849,146850,146852,146855,146857,146860,146862,146865,146867,146870,146872,146875,146877,146879],{"class":51,"line":52},[49,146851,107896],{"class":59},[49,146853,146854],{"class":66}," open",[49,146856,228],{"class":55},[49,146858,146859],{"class":328},"\"data.txt\"",[49,146861,12525],{"class":55},[49,146863,146864],{"class":328},"\"r\"",[49,146866,12525],{"class":55},[49,146868,146869],{"class":126},"encoding",[49,146871,60],{"class":59},[49,146873,146874],{"class":328},"\"utf-8\"",[49,146876,13804],{"class":55},[49,146878,31472],{"class":59},[49,146880,146881],{"class":55}," f:\n",[49,146883,146884,146887,146889],{"class":51,"line":84},[49,146885,146886],{"class":55},"    content ",[49,146888,60],{"class":59},[49,146890,146891],{"class":55}," f.read()\n",[166,146893,146895],{"id":146894},"_111-本章练习","1.11 本章练习",[178,146897,146898,146901,146907],{},[181,146899,146900],{},"安装 Python，并在终端输出版本号。",[181,146902,146903,146904,146906],{},"新建 ",[46,146905,146461],{},"，输出自己的姓名、年龄、学习目标。",[181,146908,104429,146909,146911],{},[46,146910,146535],{}," 输出下面格式：",[39,146913,146916],{"className":146914,"code":146915,"language":5278,"meta":44},[5276],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[46,146917,146915],{"__ignoreMap":44},[178,146919,146920],{"start":120},[181,146921,104429,146922,146924],{},[46,146923,146661],{}," 输出日期：",[39,146926,146929],{"className":146927,"code":146928,"language":5278,"meta":44},[5276],"2024-10-10\n",[46,146930,146928],{"__ignoreMap":44},[178,146932,146933],{"start":135},[181,146934,104429,146935,146937,146938,146940],{},[46,146936,45890],{}," 让两次 ",[46,146939,146535],{}," 输出在同一行。",[143,146942,146943],{},"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":44,"searchDepth":84,"depth":84,"links":146945},[146946,146947,146948,146953,146954,146955,146959,146960,146961,146962,146967],{"id":145828,"depth":84,"text":145829},{"id":145872,"depth":84,"text":145873},{"id":145973,"depth":84,"text":145974,"children":146949},[146950,146951,146952],{"id":145977,"depth":109,"text":145978},{"id":146032,"depth":109,"text":146033},{"id":146068,"depth":109,"text":146069},{"id":146141,"depth":84,"text":146142},{"id":146286,"depth":84,"text":146287},{"id":146391,"depth":84,"text":146392,"children":146956},[146957,146958],{"id":146395,"depth":109,"text":146396},{"id":146424,"depth":109,"text":146425},{"id":146454,"depth":84,"text":146455},{"id":146529,"depth":84,"text":146530},{"id":146707,"depth":84,"text":146708},{"id":146789,"depth":84,"text":146790,"children":146963},[146964,146965,146966],{"id":146793,"depth":109,"text":146794},{"id":146819,"depth":109,"text":146820},{"id":146835,"depth":109,"text":146836},{"id":146894,"depth":84,"text":146895},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145820,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146974,"title":146975,"body":146976,"description":148,"extension":149,"meta":149380,"navigation":151,"path":149381,"seo":149382,"stem":149383,"__hash__":149384},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146977,"toc":149365},[146978,146981,146985,146988,146991,147008,147011,147053,147056,147060,147063,147066,147103,147106,147140,147143,147235,147239,147253,147256,147283,147286,147290,147393,147400,147403,147420,147424,147431,147620,147623,147696,147700,147703,147787,147790,147822,147826,148030,148033,148037,148043,148145,148148,148404,148408,148411,148414,148428,148430,148616,148620,148982,148988,148992,148995,149119,149122,149301,149304,149308,149341,149345,149362],[10,146979,146975],{"id":146980},"_10-json与pyecharts折线图",[166,146982,146984],{"id":146983},"_101-数据可视化","10.1 数据可视化",[14,146986,146987],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146989,146990],{},"常见图表：",[178,146992,146993,146996,146999,147002,147005],{},[181,146994,146995],{},"折线图：看趋势。",[181,146997,146998],{},"柱状图：看分类对比。",[181,147000,147001],{},"饼图：看占比。",[181,147003,147004],{},"地图：看地域分布。",[181,147006,147007],{},"散点图：看两个变量之间的关系。",[14,147009,147010],{},"Python 可视化常用库：",[361,147012,147013,147021],{},[364,147014,147015],{},[367,147016,147017,147019],{},[370,147018,146224],{},[370,147020,23830],{},[408,147022,147023,147030,147038,147045],{},[367,147024,147025,147027],{},[413,147026,146256],{},[413,147028,147029],{},"基础、经典、可定制",[367,147031,147032,147035],{},[413,147033,147034],{},"seaborn",[413,147036,147037],{},"统计图表更美观",[367,147039,147040,147042],{},[413,147041,146264],{},[413,147043,147044],{},"生成交互式网页图表",[367,147046,147047,147050],{},[413,147048,147049],{},"plotly",[413,147051,147052],{},"交互图表能力强",[14,147054,147055],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[166,147057,147059],{"id":147058},"_102-json回顾","10.2 JSON回顾",[14,147061,147062],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147064,147065],{},"Python 字典：",[39,147067,147069],{"className":41,"code":147068,"language":43,"meta":44,"style":44},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[46,147070,147071,147079,147090,147099],{"__ignoreMap":44},[49,147072,147073,147075,147077],{"class":51,"line":52},[49,147074,101721],{"class":55},[49,147076,60],{"class":59},[49,147078,15662],{"class":55},[49,147080,147081,147084,147086,147088],{"class":51,"line":84},[49,147082,147083],{"class":328},"    \"name\"",[49,147085,51526],{"class":55},[49,147087,69358],{"class":328},[49,147089,31555],{"class":55},[49,147091,147092,147095,147097],{"class":51,"line":109},[49,147093,147094],{"class":328},"    \"value\"",[49,147096,51526],{"class":55},[49,147098,97521],{"class":66},[49,147100,147101],{"class":51,"line":120},[49,147102,1657],{"class":55},[14,147104,147105],{},"JSON 字符串：",[39,147107,147110],{"className":147108,"code":147109,"language":145855,"meta":44,"style":44},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[46,147111,147112,147116,147127,147136],{"__ignoreMap":44},[49,147113,147114],{"class":51,"line":52},[49,147115,1638],{"class":55},[49,147117,147118,147121,147123,147125],{"class":51,"line":84},[49,147119,147120],{"class":66},"  \"name\"",[49,147122,51526],{"class":55},[49,147124,69358],{"class":328},[49,147126,31555],{"class":55},[49,147128,147129,147132,147134],{"class":51,"line":109},[49,147130,147131],{"class":66},"  \"value\"",[49,147133,51526],{"class":55},[49,147135,97521],{"class":66},[49,147137,147138],{"class":51,"line":120},[49,147139,1657],{"class":55},[14,147141,147142],{},"Python 与 JSON 的转换：",[39,147144,147146],{"className":41,"code":147145,"language":43,"meta":44,"style":44},"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",[46,147147,147148,147155,147159,147184,147188,147207,147214,147218,147228],{"__ignoreMap":44},[49,147149,147150,147152],{"class":51,"line":52},[49,147151,30481],{"class":59},[49,147153,147154],{"class":55}," json\n",[49,147156,147157],{"class":51,"line":84},[49,147158,2492],{"emptyLinePlaceholder":151},[49,147160,147161,147163,147165,147167,147169,147171,147173,147175,147178,147180,147182],{"class":51,"line":109},[49,147162,101721],{"class":55},[49,147164,60],{"class":59},[49,147166,4540],{"class":55},[49,147168,62768],{"class":328},[49,147170,51526],{"class":55},[49,147172,69358],{"class":328},[49,147174,12525],{"class":55},[49,147176,147177],{"class":328},"\"value\"",[49,147179,51526],{"class":55},[49,147181,533],{"class":66},[49,147183,1657],{"class":55},[49,147185,147186],{"class":51,"line":120},[49,147187,2492],{"emptyLinePlaceholder":151},[49,147189,147190,147193,147195,147198,147201,147203,147205],{"class":51,"line":135},[49,147191,147192],{"class":55},"json_text ",[49,147194,60],{"class":59},[49,147196,147197],{"class":55}," json.dumps(data, ",[49,147199,147200],{"class":126},"ensure_ascii",[49,147202,60],{"class":59},[49,147204,34076],{"class":66},[49,147206,81],{"class":55},[49,147208,147209,147211],{"class":51,"line":1306},[49,147210,30504],{"class":66},[49,147212,147213],{"class":55},"(json_text)\n",[49,147215,147216],{"class":51,"line":1312},[49,147217,2492],{"emptyLinePlaceholder":151},[49,147219,147220,147223,147225],{"class":51,"line":1403},[49,147221,147222],{"class":55},"new_data ",[49,147224,60],{"class":59},[49,147226,147227],{"class":55}," json.loads(json_text)\n",[49,147229,147230,147232],{"class":51,"line":1409},[49,147231,30504],{"class":66},[49,147233,147234],{"class":55},"(new_data)\n",[166,147236,147238],{"id":147237},"_103-安装pyecharts","10.3 安装pyecharts",[39,147240,147242],{"className":23912,"code":147241,"language":23914,"meta":44,"style":44},"pip install pyecharts\n",[46,147243,147244],{"__ignoreMap":44},[49,147245,147246,147248,147250],{"class":51,"line":52},[49,147247,23921],{"class":2055},[49,147249,23924],{"class":328},[49,147251,147252],{"class":328}," pyecharts\n",[14,147254,147255],{},"验证：",[39,147257,147259],{"className":41,"code":147258,"language":43,"meta":44,"style":44},"import pyecharts\n\nprint(pyecharts.__version__)\n",[46,147260,147261,147267,147271],{"__ignoreMap":44},[49,147262,147263,147265],{"class":51,"line":52},[49,147264,30481],{"class":59},[49,147266,147252],{"class":55},[49,147268,147269],{"class":51,"line":84},[49,147270,2492],{"emptyLinePlaceholder":151},[49,147272,147273,147275,147278,147281],{"class":51,"line":109},[49,147274,30504],{"class":66},[49,147276,147277],{"class":55},"(pyecharts.",[49,147279,147280],{"class":66},"__version__",[49,147282,81],{"class":55},[14,147284,147285],{},"如果使用虚拟环境，要先激活环境再安装。",[166,147287,147289],{"id":147288},"_104-第一个折线图","10.4 第一个折线图",[39,147291,147293],{"className":41,"code":147292,"language":43,"meta":44,"style":44},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[46,147294,147295,147307,147311,147321,147351,147383],{"__ignoreMap":44},[49,147296,147297,147299,147302,147304],{"class":51,"line":52},[49,147298,30826],{"class":59},[49,147300,147301],{"class":55}," pyecharts.charts ",[49,147303,30481],{"class":59},[49,147305,147306],{"class":55}," Line\n",[49,147308,147309],{"class":51,"line":84},[49,147310,2492],{"emptyLinePlaceholder":151},[49,147312,147313,147316,147318],{"class":51,"line":109},[49,147314,147315],{"class":55},"line ",[49,147317,60],{"class":59},[49,147319,147320],{"class":55}," Line()\n",[49,147322,147323,147326,147329,147331,147334,147336,147339,147341,147344,147346,147349],{"class":51,"line":120},[49,147324,147325],{"class":55},"line.add_xaxis([",[49,147327,147328],{"class":328},"\"周一\"",[49,147330,12525],{"class":55},[49,147332,147333],{"class":328},"\"周二\"",[49,147335,12525],{"class":55},[49,147337,147338],{"class":328},"\"周三\"",[49,147340,12525],{"class":55},[49,147342,147343],{"class":328},"\"周四\"",[49,147345,12525],{"class":55},[49,147347,147348],{"class":328},"\"周五\"",[49,147350,106],{"class":55},[49,147352,147353,147356,147359,147361,147363,147365,147367,147369,147371,147373,147376,147378,147381],{"class":51,"line":135},[49,147354,147355],{"class":55},"line.add_yaxis(",[49,147357,147358],{"class":328},"\"销售额\"",[49,147360,77607],{"class":55},[49,147362,533],{"class":66},[49,147364,12525],{"class":55},[49,147366,1036],{"class":66},[49,147368,12525],{"class":55},[49,147370,1081],{"class":66},[49,147372,12525],{"class":55},[49,147374,147375],{"class":66},"150",[49,147377,12525],{"class":55},[49,147379,147380],{"class":66},"180",[49,147382,106],{"class":55},[49,147384,147385,147388,147391],{"class":51,"line":1306},[49,147386,147387],{"class":55},"line.render(",[49,147389,147390],{"class":328},"\"line.html\"",[49,147392,81],{"class":55},[14,147394,147395,147396,147399],{},"运行后会生成 ",[46,147397,147398],{},"line.html","，用浏览器打开即可看到图表。",[14,147401,147402],{},"核心步骤：",[178,147404,147405,147408,147411,147414,147417],{},[181,147406,147407],{},"导入图表类。",[181,147409,147410],{},"创建图表对象。",[181,147412,147413],{},"添加 x 轴数据。",[181,147415,147416],{},"添加 y 轴数据。",[181,147418,147419],{},"渲染为 HTML。",[166,147421,147423],{"id":147422},"_105-全局配置","10.5 全局配置",[14,147425,147426,147427,147430],{},"常用配置在 ",[46,147428,147429],{},"pyecharts.options"," 中。",[39,147432,147434],{"className":41,"code":147433,"language":43,"meta":44,"style":44},"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",[46,147435,147436,147453,147463,147467,147475,147499,147527,147532,147551,147570,147588,147608,147612],{"__ignoreMap":44},[49,147437,147438,147440,147443,147445,147448,147450],{"class":51,"line":52},[49,147439,30826],{"class":59},[49,147441,147442],{"class":55}," pyecharts ",[49,147444,30481],{"class":59},[49,147446,147447],{"class":55}," options ",[49,147449,31472],{"class":59},[49,147451,147452],{"class":55}," opts\n",[49,147454,147455,147457,147459,147461],{"class":51,"line":84},[49,147456,30826],{"class":59},[49,147458,147301],{"class":55},[49,147460,30481],{"class":59},[49,147462,147306],{"class":55},[49,147464,147465],{"class":51,"line":109},[49,147466,2492],{"emptyLinePlaceholder":151},[49,147468,147469,147471,147473],{"class":51,"line":120},[49,147470,147315],{"class":55},[49,147472,60],{"class":59},[49,147474,147320],{"class":55},[49,147476,147477,147479,147481,147483,147485,147487,147489,147491,147493,147495,147497],{"class":51,"line":135},[49,147478,147325],{"class":55},[49,147480,147328],{"class":328},[49,147482,12525],{"class":55},[49,147484,147333],{"class":328},[49,147486,12525],{"class":55},[49,147488,147338],{"class":328},[49,147490,12525],{"class":55},[49,147492,147343],{"class":328},[49,147494,12525],{"class":55},[49,147496,147348],{"class":328},[49,147498,106],{"class":55},[49,147500,147501,147503,147505,147507,147509,147511,147513,147515,147517,147519,147521,147523,147525],{"class":51,"line":1306},[49,147502,147355],{"class":55},[49,147504,147358],{"class":328},[49,147506,77607],{"class":55},[49,147508,533],{"class":66},[49,147510,12525],{"class":55},[49,147512,1036],{"class":66},[49,147514,12525],{"class":55},[49,147516,1081],{"class":66},[49,147518,12525],{"class":55},[49,147520,147375],{"class":66},[49,147522,12525],{"class":55},[49,147524,147380],{"class":66},[49,147526,106],{"class":55},[49,147528,147529],{"class":51,"line":1312},[49,147530,147531],{"class":55},"line.set_global_opts(\n",[49,147533,147534,147537,147539,147542,147544,147546,147549],{"class":51,"line":1403},[49,147535,147536],{"class":126},"    title_opts",[49,147538,60],{"class":59},[49,147540,147541],{"class":55},"opts.TitleOpts(",[49,147543,51496],{"class":126},[49,147545,60],{"class":59},[49,147547,147548],{"class":328},"\"一周销售额\"",[49,147550,38136],{"class":55},[49,147552,147553,147556,147558,147561,147563,147565,147568],{"class":51,"line":1409},[49,147554,147555],{"class":126},"    xaxis_opts",[49,147557,60],{"class":59},[49,147559,147560],{"class":55},"opts.AxisOpts(",[49,147562,79899],{"class":126},[49,147564,60],{"class":59},[49,147566,147567],{"class":328},"\"日期\"",[49,147569,38136],{"class":55},[49,147571,147572,147575,147577,147579,147581,147583,147586],{"class":51,"line":1421},[49,147573,147574],{"class":126},"    yaxis_opts",[49,147576,60],{"class":59},[49,147578,147560],{"class":55},[49,147580,79899],{"class":126},[49,147582,60],{"class":59},[49,147584,147585],{"class":328},"\"金额\"",[49,147587,38136],{"class":55},[49,147589,147590,147593,147595,147598,147601,147603,147606],{"class":51,"line":1704},[49,147591,147592],{"class":126},"    tooltip_opts",[49,147594,60],{"class":59},[49,147596,147597],{"class":55},"opts.TooltipOpts(",[49,147599,147600],{"class":126},"trigger",[49,147602,60],{"class":59},[49,147604,147605],{"class":328},"\"axis\"",[49,147607,38136],{"class":55},[49,147609,147610],{"class":51,"line":1709},[49,147611,81],{"class":55},[49,147613,147614,147616,147618],{"class":51,"line":1715},[49,147615,147387],{"class":55},[49,147617,147390],{"class":328},[49,147619,81],{"class":55},[14,147621,147622],{},"常见全局配置：",[361,147624,147625,147634],{},[364,147626,147627],{},[367,147628,147629,147632],{},[370,147630,147631],{},"配置",[370,147633,102759],{},[408,147635,147636,147646,147656,147666,147676,147686],{},[367,147637,147638,147643],{},[413,147639,147640],{},[46,147641,147642],{},"TitleOpts",[413,147644,147645],{},"标题",[367,147647,147648,147653],{},[413,147649,147650],{},[46,147651,147652],{},"LegendOpts",[413,147654,147655],{},"图例",[367,147657,147658,147663],{},[413,147659,147660],{},[46,147661,147662],{},"TooltipOpts",[413,147664,147665],{},"提示框",[367,147667,147668,147673],{},[413,147669,147670],{},[46,147671,147672],{},"AxisOpts",[413,147674,147675],{},"坐标轴",[367,147677,147678,147683],{},[413,147679,147680],{},[46,147681,147682],{},"VisualMapOpts",[413,147684,147685],{},"视觉映射",[367,147687,147688,147693],{},[413,147689,147690],{},[46,147691,147692],{},"DataZoomOpts",[413,147694,147695],{},"区域缩放",[166,147697,147699],{"id":147698},"_106-系列配置","10.6 系列配置",[14,147701,147702],{},"系列配置作用于某一组数据。",[39,147704,147706],{"className":41,"code":147705,"language":43,"meta":44,"style":44},"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",[46,147707,147708,147713,147724,147753,147764,147783],{"__ignoreMap":44},[49,147709,147710],{"class":51,"line":52},[49,147711,147712],{"class":55},"line.add_yaxis(\n",[49,147714,147715,147718,147720,147722],{"class":51,"line":84},[49,147716,147717],{"class":126},"    series_name",[49,147719,60],{"class":59},[49,147721,147358],{"class":328},[49,147723,31555],{"class":55},[49,147725,147726,147729,147731,147733,147735,147737,147739,147741,147743,147745,147747,147749,147751],{"class":51,"line":109},[49,147727,147728],{"class":126},"    y_axis",[49,147730,60],{"class":59},[49,147732,1109],{"class":55},[49,147734,533],{"class":66},[49,147736,12525],{"class":55},[49,147738,1036],{"class":66},[49,147740,12525],{"class":55},[49,147742,1081],{"class":66},[49,147744,12525],{"class":55},[49,147746,147375],{"class":66},[49,147748,12525],{"class":55},[49,147750,147380],{"class":66},[49,147752,87925],{"class":55},[49,147754,147755,147758,147760,147762],{"class":51,"line":120},[49,147756,147757],{"class":126},"    is_smooth",[49,147759,60],{"class":59},[49,147761,31565],{"class":66},[49,147763,31555],{"class":55},[49,147765,147766,147769,147771,147774,147777,147779,147781],{"class":51,"line":135},[49,147767,147768],{"class":126},"    label_opts",[49,147770,60],{"class":59},[49,147772,147773],{"class":55},"opts.LabelOpts(",[49,147775,147776],{"class":126},"is_show",[49,147778,60],{"class":59},[49,147780,31565],{"class":66},[49,147782,38136],{"class":55},[49,147784,147785],{"class":51,"line":1306},[49,147786,81],{"class":55},[14,147788,147789],{},"常用参数：",[178,147791,147792,147798,147804,147810,147816],{},[181,147793,147794,147797],{},[46,147795,147796],{},"series_name","：系列名称。",[181,147799,147800,147803],{},[46,147801,147802],{},"y_axis","：y 轴数据。",[181,147805,147806,147809],{},[46,147807,147808],{},"is_smooth","：是否平滑曲线。",[181,147811,147812,147815],{},[46,147813,147814],{},"label_opts","：标签配置。",[181,147817,147818,147821],{},[46,147819,147820],{},"symbol_size","：标记点大小。",[166,147823,147825],{"id":147824},"_107-多条折线","10.7 多条折线",[39,147827,147829],{"className":41,"code":147828,"language":43,"meta":44,"style":44},"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",[46,147830,147831,147845,147855,147859,147888,147892,147900,147905,147943,147980,147984,148001,148017,148021],{"__ignoreMap":44},[49,147832,147833,147835,147837,147839,147841,147843],{"class":51,"line":52},[49,147834,30826],{"class":59},[49,147836,147442],{"class":55},[49,147838,30481],{"class":59},[49,147840,147447],{"class":55},[49,147842,31472],{"class":59},[49,147844,147452],{"class":55},[49,147846,147847,147849,147851,147853],{"class":51,"line":84},[49,147848,30826],{"class":59},[49,147850,147301],{"class":55},[49,147852,30481],{"class":59},[49,147854,147306],{"class":55},[49,147856,147857],{"class":51,"line":109},[49,147858,2492],{"emptyLinePlaceholder":151},[49,147860,147861,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886],{"class":51,"line":120},[49,147862,147863],{"class":55},"dates ",[49,147865,60],{"class":59},[49,147867,52315],{"class":55},[49,147869,147328],{"class":328},[49,147871,12525],{"class":55},[49,147873,147333],{"class":328},[49,147875,12525],{"class":55},[49,147877,147338],{"class":328},[49,147879,12525],{"class":55},[49,147881,147343],{"class":328},[49,147883,12525],{"class":55},[49,147885,147348],{"class":328},[49,147887,33335],{"class":55},[49,147889,147890],{"class":51,"line":135},[49,147891,2492],{"emptyLinePlaceholder":151},[49,147893,147894,147896,147898],{"class":51,"line":1306},[49,147895,147315],{"class":55},[49,147897,60],{"class":59},[49,147899,147320],{"class":55},[49,147901,147902],{"class":51,"line":1312},[49,147903,147904],{"class":55},"line.add_xaxis(dates)\n",[49,147906,147907,147909,147912,147914,147916,147918,147921,147923,147925,147927,147929,147931,147933,147935,147937,147939,147941],{"class":51,"line":1403},[49,147908,147355],{"class":55},[49,147910,147911],{"class":328},"\"线上销售\"",[49,147913,77607],{"class":55},[49,147915,533],{"class":66},[49,147917,12525],{"class":55},[49,147919,147920],{"class":66},"130",[49,147922,12525],{"class":55},[49,147924,1036],{"class":66},[49,147926,12525],{"class":55},[49,147928,21138],{"class":66},[49,147930,12525],{"class":55},[49,147932,1814],{"class":66},[49,147934,112265],{"class":55},[49,147936,147808],{"class":126},[49,147938,60],{"class":59},[49,147940,31565],{"class":66},[49,147942,81],{"class":55},[49,147944,147945,147947,147950,147952,147954,147956,147958,147960,147962,147964,147966,147968,147970,147972,147974,147976,147978],{"class":51,"line":1409},[49,147946,147355],{"class":55},[49,147948,147949],{"class":328},"\"线下销售\"",[49,147951,77607],{"class":55},[49,147953,831],{"class":66},[49,147955,12525],{"class":55},[49,147957,1081],{"class":66},[49,147959,12525],{"class":55},[49,147961,533],{"class":66},[49,147963,12525],{"class":55},[49,147965,1036],{"class":66},[49,147967,12525],{"class":55},[49,147969,147375],{"class":66},[49,147971,112265],{"class":55},[49,147973,147808],{"class":126},[49,147975,60],{"class":59},[49,147977,31565],{"class":66},[49,147979,81],{"class":55},[49,147981,147982],{"class":51,"line":1421},[49,147983,147531],{"class":55},[49,147985,147986,147988,147990,147992,147994,147996,147999],{"class":51,"line":1704},[49,147987,147536],{"class":126},[49,147989,60],{"class":59},[49,147991,147541],{"class":55},[49,147993,51496],{"class":126},[49,147995,60],{"class":59},[49,147997,147998],{"class":328},"\"线上线下销售趋势\"",[49,148000,38136],{"class":55},[49,148002,148003,148005,148007,148009,148011,148013,148015],{"class":51,"line":1709},[49,148004,147592],{"class":126},[49,148006,60],{"class":59},[49,148008,147597],{"class":55},[49,148010,147600],{"class":126},[49,148012,60],{"class":59},[49,148014,147605],{"class":328},[49,148016,38136],{"class":55},[49,148018,148019],{"class":51,"line":1715},[49,148020,81],{"class":55},[49,148022,148023,148025,148028],{"class":51,"line":1720},[49,148024,147387],{"class":55},[49,148026,148027],{"class":328},"\"sales.html\"",[49,148029,81],{"class":55},[14,148031,148032],{},"多条折线适合比较不同指标或不同地区。",[166,148034,148036],{"id":148035},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148038,148039,148040,24709],{},"假设 ",[46,148041,148042],{},"sales.json",[39,148044,148046],{"className":147108,"code":148045,"language":145855,"meta":44,"style":44},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[46,148047,148048,148053,148085,148113,148141],{"__ignoreMap":44},[49,148049,148050],{"class":51,"line":52},[49,148051,148052],{"class":55},"[\n",[49,148054,148055,148058,148061,148063,148065,148067,148070,148072,148074,148076,148079,148081,148083],{"class":51,"line":84},[49,148056,148057],{"class":55},"  {",[49,148059,148060],{"class":66},"\"date\"",[49,148062,51526],{"class":55},[49,148064,147328],{"class":328},[49,148066,12525],{"class":55},[49,148068,148069],{"class":66},"\"online\"",[49,148071,51526],{"class":55},[49,148073,533],{"class":66},[49,148075,12525],{"class":55},[49,148077,148078],{"class":66},"\"offline\"",[49,148080,51526],{"class":55},[49,148082,831],{"class":66},[49,148084,5021],{"class":55},[49,148086,148087,148089,148091,148093,148095,148097,148099,148101,148103,148105,148107,148109,148111],{"class":51,"line":109},[49,148088,148057],{"class":55},[49,148090,148060],{"class":66},[49,148092,51526],{"class":55},[49,148094,147333],{"class":328},[49,148096,12525],{"class":55},[49,148098,148069],{"class":66},[49,148100,51526],{"class":55},[49,148102,147920],{"class":66},[49,148104,12525],{"class":55},[49,148106,148078],{"class":66},[49,148108,51526],{"class":55},[49,148110,1081],{"class":66},[49,148112,5021],{"class":55},[49,148114,148115,148117,148119,148121,148123,148125,148127,148129,148131,148133,148135,148137,148139],{"class":51,"line":120},[49,148116,148057],{"class":55},[49,148118,148060],{"class":66},[49,148120,51526],{"class":55},[49,148122,147338],{"class":328},[49,148124,12525],{"class":55},[49,148126,148069],{"class":66},[49,148128,51526],{"class":55},[49,148130,1036],{"class":66},[49,148132,12525],{"class":55},[49,148134,148078],{"class":66},[49,148136,51526],{"class":55},[49,148138,533],{"class":66},[49,148140,1657],{"class":55},[49,148142,148143],{"class":51,"line":135},[49,148144,33335],{"class":55},[14,148146,148147],{},"读取并绘图：",[39,148149,148151],{"className":41,"code":148150,"language":43,"meta":44,"style":44},"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",[46,148152,148153,148159,148173,148183,148187,148219,148232,148236,148244,148253,148262,148266,148278,148287,148296,148305,148309,148317,148321,148338,148355,148359,148376,148392,148396],{"__ignoreMap":44},[49,148154,148155,148157],{"class":51,"line":52},[49,148156,30481],{"class":59},[49,148158,147154],{"class":55},[49,148160,148161,148163,148165,148167,148169,148171],{"class":51,"line":84},[49,148162,30826],{"class":59},[49,148164,147442],{"class":55},[49,148166,30481],{"class":59},[49,148168,147447],{"class":55},[49,148170,31472],{"class":59},[49,148172,147452],{"class":55},[49,148174,148175,148177,148179,148181],{"class":51,"line":109},[49,148176,30826],{"class":59},[49,148178,147301],{"class":55},[49,148180,30481],{"class":59},[49,148182,147306],{"class":55},[49,148184,148185],{"class":51,"line":120},[49,148186,2492],{"emptyLinePlaceholder":151},[49,148188,148189,148191,148193,148195,148198,148200,148202,148204,148206,148208,148210,148212,148214,148217],{"class":51,"line":135},[49,148190,107896],{"class":59},[49,148192,146854],{"class":66},[49,148194,228],{"class":55},[49,148196,148197],{"class":328},"\"sales.json\"",[49,148199,12525],{"class":55},[49,148201,146864],{"class":328},[49,148203,12525],{"class":55},[49,148205,146869],{"class":126},[49,148207,60],{"class":59},[49,148209,146874],{"class":328},[49,148211,13804],{"class":55},[49,148213,31472],{"class":59},[49,148215,148216],{"class":126}," file",[49,148218,3831],{"class":55},[49,148220,148221,148223,148225,148228,148230],{"class":51,"line":1306},[49,148222,101484],{"class":55},[49,148224,60],{"class":59},[49,148226,148227],{"class":55}," json.load(",[49,148229,45443],{"class":126},[49,148231,81],{"class":55},[49,148233,148234],{"class":51,"line":1312},[49,148235,2492],{"emptyLinePlaceholder":151},[49,148237,148238,148240,148242],{"class":51,"line":1403},[49,148239,147863],{"class":55},[49,148241,60],{"class":59},[49,148243,51927],{"class":55},[49,148245,148246,148249,148251],{"class":51,"line":1409},[49,148247,148248],{"class":55},"online_sales ",[49,148250,60],{"class":59},[49,148252,51927],{"class":55},[49,148254,148255,148258,148260],{"class":51,"line":1421},[49,148256,148257],{"class":55},"offline_sales ",[49,148259,60],{"class":59},[49,148261,51927],{"class":55},[49,148263,148264],{"class":51,"line":1704},[49,148265,2492],{"emptyLinePlaceholder":151},[49,148267,148268,148270,148273,148275],{"class":51,"line":1709},[49,148269,3117],{"class":59},[49,148271,148272],{"class":55}," item ",[49,148274,26134],{"class":59},[49,148276,148277],{"class":55}," data:\n",[49,148279,148280,148283,148285],{"class":51,"line":1715},[49,148281,148282],{"class":55},"    dates.append(item[",[49,148284,148060],{"class":328},[49,148286,106],{"class":55},[49,148288,148289,148292,148294],{"class":51,"line":1720},[49,148290,148291],{"class":55},"    online_sales.append(item[",[49,148293,148069],{"class":328},[49,148295,106],{"class":55},[49,148297,148298,148301,148303],{"class":51,"line":1734},[49,148299,148300],{"class":55},"    offline_sales.append(item[",[49,148302,148078],{"class":328},[49,148304,106],{"class":55},[49,148306,148307],{"class":51,"line":1739},[49,148308,2492],{"emptyLinePlaceholder":151},[49,148310,148311,148313,148315],{"class":51,"line":1745},[49,148312,147315],{"class":55},[49,148314,60],{"class":59},[49,148316,147320],{"class":55},[49,148318,148319],{"class":51,"line":1766},[49,148320,147904],{"class":55},[49,148322,148323,148325,148327,148330,148332,148334,148336],{"class":51,"line":1771},[49,148324,147355],{"class":55},[49,148326,147911],{"class":328},[49,148328,148329],{"class":55},", online_sales, ",[49,148331,147808],{"class":126},[49,148333,60],{"class":59},[49,148335,31565],{"class":66},[49,148337,81],{"class":55},[49,148339,148340,148342,148344,148347,148349,148351,148353],{"class":51,"line":1785},[49,148341,147355],{"class":55},[49,148343,147949],{"class":328},[49,148345,148346],{"class":55},", offline_sales, ",[49,148348,147808],{"class":126},[49,148350,60],{"class":59},[49,148352,31565],{"class":66},[49,148354,81],{"class":55},[49,148356,148357],{"class":51,"line":1790},[49,148358,147531],{"class":55},[49,148360,148361,148363,148365,148367,148369,148371,148374],{"class":51,"line":1819},[49,148362,147536],{"class":126},[49,148364,60],{"class":59},[49,148366,147541],{"class":55},[49,148368,51496],{"class":126},[49,148370,60],{"class":59},[49,148372,148373],{"class":328},"\"销售趋势\"",[49,148375,38136],{"class":55},[49,148377,148378,148380,148382,148384,148386,148388,148390],{"class":51,"line":1824},[49,148379,147592],{"class":126},[49,148381,60],{"class":59},[49,148383,147597],{"class":55},[49,148385,147600],{"class":126},[49,148387,60],{"class":59},[49,148389,147605],{"class":328},[49,148391,38136],{"class":55},[49,148393,148394],{"class":51,"line":1841},[49,148395,81],{"class":55},[49,148397,148398,148400,148402],{"class":51,"line":1846},[49,148399,147387],{"class":55},[49,148401,148027],{"class":328},[49,148403,81],{"class":55},[166,148405,148407],{"id":148406},"_109-数据清洗","10.9 数据清洗",[14,148409,148410],{},"真实数据经常不整齐，需要清洗。",[14,148412,148413],{},"常见问题：",[178,148415,148416,148419,148422,148425],{},[181,148417,148418],{},"数字是字符串。",[181,148420,148421],{},"字段缺失。",[181,148423,148424],{},"空值。",[181,148426,148427],{},"日期格式不统一。",[14,148429,15225],{},[39,148431,148433],{"className":41,"code":148432,"language":43,"meta":44,"style":44},"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",[46,148434,148435,148444,148467,148487,148508,148512,148516,148524,148533,148537,148548,148562,148571,148576,148580,148588,148598,148602,148609],{"__ignoreMap":44},[49,148436,148437,148440,148442],{"class":51,"line":52},[49,148438,148439],{"class":55},"raw_data ",[49,148441,60],{"class":59},[49,148443,55536],{"class":55},[49,148445,148446,148449,148451,148453,148455,148457,148460,148462,148465],{"class":51,"line":84},[49,148447,148448],{"class":55},"    {",[49,148450,148060],{"class":328},[49,148452,51526],{"class":55},[49,148454,147328],{"class":328},[49,148456,12525],{"class":55},[49,148458,148459],{"class":328},"\"sales\"",[49,148461,51526],{"class":55},[49,148463,148464],{"class":328},"\"100\"",[49,148466,5021],{"class":55},[49,148468,148469,148471,148473,148475,148477,148479,148481,148483,148485],{"class":51,"line":109},[49,148470,148448],{"class":55},[49,148472,148060],{"class":328},[49,148474,51526],{"class":55},[49,148476,147333],{"class":328},[49,148478,12525],{"class":55},[49,148480,148459],{"class":328},[49,148482,51526],{"class":55},[49,148484,7742],{"class":328},[49,148486,5021],{"class":55},[49,148488,148489,148491,148493,148495,148497,148499,148501,148503,148506],{"class":51,"line":120},[49,148490,148448],{"class":55},[49,148492,148060],{"class":328},[49,148494,51526],{"class":55},[49,148496,147338],{"class":328},[49,148498,12525],{"class":55},[49,148500,148459],{"class":328},[49,148502,51526],{"class":55},[49,148504,148505],{"class":328},"\"120\"",[49,148507,5021],{"class":55},[49,148509,148510],{"class":51,"line":135},[49,148511,33335],{"class":55},[49,148513,148514],{"class":51,"line":1306},[49,148515,2492],{"emptyLinePlaceholder":151},[49,148517,148518,148520,148522],{"class":51,"line":1312},[49,148519,147863],{"class":55},[49,148521,60],{"class":59},[49,148523,51927],{"class":55},[49,148525,148526,148529,148531],{"class":51,"line":1403},[49,148527,148528],{"class":55},"sales ",[49,148530,60],{"class":59},[49,148532,51927],{"class":55},[49,148534,148535],{"class":51,"line":1409},[49,148536,2492],{"emptyLinePlaceholder":151},[49,148538,148539,148541,148543,148545],{"class":51,"line":1421},[49,148540,3117],{"class":59},[49,148542,148272],{"class":55},[49,148544,26134],{"class":59},[49,148546,148547],{"class":55}," raw_data:\n",[49,148549,148550,148553,148555,148558,148560],{"class":51,"line":1704},[49,148551,148552],{"class":55},"    value ",[49,148554,60],{"class":59},[49,148556,148557],{"class":55}," item.get(",[49,148559,148459],{"class":328},[49,148561,81],{"class":55},[49,148563,148564,148566,148568],{"class":51,"line":1709},[49,148565,3193],{"class":59},[49,148567,39019],{"class":59},[49,148569,148570],{"class":55}," value:\n",[49,148572,148573],{"class":51,"line":1715},[49,148574,148575],{"class":59},"        continue\n",[49,148577,148578],{"class":51,"line":1720},[49,148579,2492],{"emptyLinePlaceholder":151},[49,148581,148582,148584,148586],{"class":51,"line":1734},[49,148583,148282],{"class":55},[49,148585,148060],{"class":328},[49,148587,106],{"class":55},[49,148589,148590,148593,148595],{"class":51,"line":1739},[49,148591,148592],{"class":55},"    sales.append(",[49,148594,231],{"class":66},[49,148596,148597],{"class":55},"(value))\n",[49,148599,148600],{"class":51,"line":1745},[49,148601,2492],{"emptyLinePlaceholder":151},[49,148603,148604,148606],{"class":51,"line":1766},[49,148605,30504],{"class":66},[49,148607,148608],{"class":55},"(dates)\n",[49,148610,148611,148613],{"class":51,"line":1771},[49,148612,30504],{"class":66},[49,148614,148615],{"class":55},"(sales)\n",[166,148617,148619],{"id":148618},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[39,148621,148623],{"className":41,"code":148622,"language":43,"meta":44,"style":44},"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",[46,148624,148625,148639,148649,148653,148661,148682,148704,148726,148748,148770,148774,148778,148800,148821,148825,148833,148837,148841,148851,148860,148870,148886,148890,148894,148911,148927,148943,148959,148969,148973],{"__ignoreMap":44},[49,148626,148627,148629,148631,148633,148635,148637],{"class":51,"line":52},[49,148628,30826],{"class":59},[49,148630,147442],{"class":55},[49,148632,30481],{"class":59},[49,148634,147447],{"class":55},[49,148636,31472],{"class":59},[49,148638,147452],{"class":55},[49,148640,148641,148643,148645,148647],{"class":51,"line":84},[49,148642,30826],{"class":59},[49,148644,147301],{"class":55},[49,148646,30481],{"class":59},[49,148648,147306],{"class":55},[49,148650,148651],{"class":51,"line":109},[49,148652,2492],{"emptyLinePlaceholder":151},[49,148654,148655,148657,148659],{"class":51,"line":120},[49,148656,148528],{"class":55},[49,148658,60],{"class":59},[49,148660,55536],{"class":55},[49,148662,148663,148665,148667,148669,148672,148674,148676,148678,148680],{"class":51,"line":135},[49,148664,148448],{"class":55},[49,148666,148060],{"class":328},[49,148668,51526],{"class":55},[49,148670,148671],{"class":328},"\"2024-10-01\"",[49,148673,12525],{"class":55},[49,148675,84173],{"class":328},[49,148677,51526],{"class":55},[49,148679,92112],{"class":66},[49,148681,5021],{"class":55},[49,148683,148684,148686,148688,148690,148693,148695,148697,148699,148702],{"class":51,"line":1306},[49,148685,148448],{"class":55},[49,148687,148060],{"class":328},[49,148689,51526],{"class":55},[49,148691,148692],{"class":328},"\"2024-10-02\"",[49,148694,12525],{"class":55},[49,148696,84173],{"class":328},[49,148698,51526],{"class":55},[49,148700,148701],{"class":66},"1800",[49,148703,5021],{"class":55},[49,148705,148706,148708,148710,148712,148715,148717,148719,148721,148724],{"class":51,"line":1312},[49,148707,148448],{"class":55},[49,148709,148060],{"class":328},[49,148711,51526],{"class":55},[49,148713,148714],{"class":328},"\"2024-10-03\"",[49,148716,12525],{"class":55},[49,148718,84173],{"class":328},[49,148720,51526],{"class":55},[49,148722,148723],{"class":66},"1500",[49,148725,5021],{"class":55},[49,148727,148728,148730,148732,148734,148737,148739,148741,148743,148746],{"class":51,"line":1403},[49,148729,148448],{"class":55},[49,148731,148060],{"class":328},[49,148733,51526],{"class":55},[49,148735,148736],{"class":328},"\"2024-10-04\"",[49,148738,12525],{"class":55},[49,148740,84173],{"class":328},[49,148742,51526],{"class":55},[49,148744,148745],{"class":66},"2100",[49,148747,5021],{"class":55},[49,148749,148750,148752,148754,148756,148759,148761,148763,148765,148768],{"class":51,"line":1409},[49,148751,148448],{"class":55},[49,148753,148060],{"class":328},[49,148755,51526],{"class":55},[49,148757,148758],{"class":328},"\"2024-10-05\"",[49,148760,12525],{"class":55},[49,148762,84173],{"class":328},[49,148764,51526],{"class":55},[49,148766,148767],{"class":66},"2600",[49,148769,5021],{"class":55},[49,148771,148772],{"class":51,"line":1421},[49,148773,33335],{"class":55},[49,148775,148776],{"class":51,"line":1704},[49,148777,2492],{"emptyLinePlaceholder":151},[49,148779,148780,148782,148784,148787,148789,148791,148793,148795,148797],{"class":51,"line":1709},[49,148781,147863],{"class":55},[49,148783,60],{"class":59},[49,148785,148786],{"class":55}," [item[",[49,148788,148060],{"class":328},[49,148790,4535],{"class":55},[49,148792,3117],{"class":59},[49,148794,148272],{"class":55},[49,148796,26134],{"class":59},[49,148798,148799],{"class":55}," sales]\n",[49,148801,148802,148805,148807,148809,148811,148813,148815,148817,148819],{"class":51,"line":1715},[49,148803,148804],{"class":55},"amounts ",[49,148806,60],{"class":59},[49,148808,148786],{"class":55},[49,148810,84173],{"class":328},[49,148812,4535],{"class":55},[49,148814,3117],{"class":59},[49,148816,148272],{"class":55},[49,148818,26134],{"class":59},[49,148820,148799],{"class":55},[49,148822,148823],{"class":51,"line":1720},[49,148824,2492],{"emptyLinePlaceholder":151},[49,148826,148827,148829,148831],{"class":51,"line":1734},[49,148828,147315],{"class":55},[49,148830,60],{"class":59},[49,148832,147320],{"class":55},[49,148834,148835],{"class":51,"line":1739},[49,148836,147904],{"class":55},[49,148838,148839],{"class":51,"line":1745},[49,148840,147712],{"class":55},[49,148842,148843,148845,148847,148849],{"class":51,"line":1766},[49,148844,147717],{"class":126},[49,148846,60],{"class":59},[49,148848,147358],{"class":328},[49,148850,31555],{"class":55},[49,148852,148853,148855,148857],{"class":51,"line":1771},[49,148854,147728],{"class":126},[49,148856,60],{"class":59},[49,148858,148859],{"class":55},"amounts,\n",[49,148861,148862,148864,148866,148868],{"class":51,"line":1785},[49,148863,147757],{"class":126},[49,148865,60],{"class":59},[49,148867,31565],{"class":66},[49,148869,31555],{"class":55},[49,148871,148872,148874,148876,148878,148880,148882,148884],{"class":51,"line":1790},[49,148873,147768],{"class":126},[49,148875,60],{"class":59},[49,148877,147773],{"class":55},[49,148879,147776],{"class":126},[49,148881,60],{"class":59},[49,148883,31565],{"class":66},[49,148885,38136],{"class":55},[49,148887,148888],{"class":51,"line":1819},[49,148889,81],{"class":55},[49,148891,148892],{"class":51,"line":1824},[49,148893,147531],{"class":55},[49,148895,148896,148898,148900,148902,148904,148906,148909],{"class":51,"line":1841},[49,148897,147536],{"class":126},[49,148899,60],{"class":59},[49,148901,147541],{"class":55},[49,148903,51496],{"class":126},[49,148905,60],{"class":59},[49,148907,148908],{"class":328},"\"每日销售额\"",[49,148910,38136],{"class":55},[49,148912,148913,148915,148917,148919,148921,148923,148925],{"class":51,"line":1846},[49,148914,147555],{"class":126},[49,148916,60],{"class":59},[49,148918,147560],{"class":55},[49,148920,79899],{"class":126},[49,148922,60],{"class":59},[49,148924,147567],{"class":328},[49,148926,38136],{"class":55},[49,148928,148929,148931,148933,148935,148937,148939,148941],{"class":51,"line":1851},[49,148930,147574],{"class":126},[49,148932,60],{"class":59},[49,148934,147560],{"class":55},[49,148936,79899],{"class":126},[49,148938,60],{"class":59},[49,148940,147585],{"class":328},[49,148942,38136],{"class":55},[49,148944,148945,148947,148949,148951,148953,148955,148957],{"class":51,"line":1856},[49,148946,147592],{"class":126},[49,148948,60],{"class":59},[49,148950,147597],{"class":55},[49,148952,147600],{"class":126},[49,148954,60],{"class":59},[49,148956,147605],{"class":328},[49,148958,38136],{"class":55},[49,148960,148961,148964,148966],{"class":51,"line":1870},[49,148962,148963],{"class":126},"    datazoom_opts",[49,148965,60],{"class":59},[49,148967,148968],{"class":55},"[opts.DataZoomOpts()],\n",[49,148970,148971],{"class":51,"line":1875},[49,148972,81],{"class":55},[49,148974,148975,148977,148980],{"class":51,"line":2669},[49,148976,147387],{"class":55},[49,148978,148979],{"class":328},"\"daily_sales.html\"",[49,148981,81],{"class":55},[14,148983,148984,148987],{},[46,148985,148986],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[166,148989,148991],{"id":148990},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148993,148994],{},"如果数据结构如下：",[39,148996,148998],{"className":41,"code":148997,"language":43,"meta":44,"style":44},"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",[46,148999,149000,149008,149016,149038,149059,149064,149071,149091,149111,149115],{"__ignoreMap":44},[49,149001,149002,149004,149006],{"class":51,"line":52},[49,149003,101721],{"class":55},[49,149005,60],{"class":59},[49,149007,15662],{"class":55},[49,149009,149010,149013],{"class":51,"line":84},[49,149011,149012],{"class":328},"    \"北京\"",[49,149014,149015],{"class":55},": [\n",[49,149017,149018,149020,149022,149024,149027,149029,149032,149034,149036],{"class":51,"line":109},[49,149019,5008],{"class":55},[49,149021,148060],{"class":328},[49,149023,51526],{"class":55},[49,149025,149026],{"class":328},"\"2024-01-01\"",[49,149028,12525],{"class":55},[49,149030,149031],{"class":328},"\"confirm\"",[49,149033,51526],{"class":55},[49,149035,95],{"class":66},[49,149037,5021],{"class":55},[49,149039,149040,149042,149044,149046,149049,149051,149053,149055,149057],{"class":51,"line":120},[49,149041,5008],{"class":55},[49,149043,148060],{"class":328},[49,149045,51526],{"class":55},[49,149047,149048],{"class":328},"\"2024-01-02\"",[49,149050,12525],{"class":55},[49,149052,149031],{"class":328},[49,149054,51526],{"class":55},[49,149056,717],{"class":66},[49,149058,5021],{"class":55},[49,149060,149061],{"class":51,"line":135},[49,149062,149063],{"class":55},"    ],\n",[49,149065,149066,149069],{"class":51,"line":1306},[49,149067,149068],{"class":328},"    \"上海\"",[49,149070,149015],{"class":55},[49,149072,149073,149075,149077,149079,149081,149083,149085,149087,149089],{"class":51,"line":1312},[49,149074,5008],{"class":55},[49,149076,148060],{"class":328},[49,149078,51526],{"class":55},[49,149080,149026],{"class":328},[49,149082,12525],{"class":55},[49,149084,149031],{"class":328},[49,149086,51526],{"class":55},[49,149088,616],{"class":66},[49,149090,5021],{"class":55},[49,149092,149093,149095,149097,149099,149101,149103,149105,149107,149109],{"class":51,"line":1403},[49,149094,5008],{"class":55},[49,149096,148060],{"class":328},[49,149098,51526],{"class":55},[49,149100,149048],{"class":328},[49,149102,12525],{"class":55},[49,149104,149031],{"class":328},[49,149106,51526],{"class":55},[49,149108,742],{"class":66},[49,149110,5021],{"class":55},[49,149112,149113],{"class":51,"line":1409},[49,149114,149063],{"class":55},[49,149116,149117],{"class":51,"line":1421},[49,149118,1657],{"class":55},[14,149120,149121],{},"绘制多地区趋势：",[39,149123,149125],{"className":41,"code":149124,"language":43,"meta":44,"style":44},"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",[46,149126,149127,149141,149151,149155,149180,149184,149192,149196,149200,149212,149234,149247,149251,149255,149272,149288,149292],{"__ignoreMap":44},[49,149128,149129,149131,149133,149135,149137,149139],{"class":51,"line":52},[49,149130,30826],{"class":59},[49,149132,147442],{"class":55},[49,149134,30481],{"class":59},[49,149136,147447],{"class":55},[49,149138,31472],{"class":59},[49,149140,147452],{"class":55},[49,149142,149143,149145,149147,149149],{"class":51,"line":84},[49,149144,30826],{"class":59},[49,149146,147301],{"class":55},[49,149148,30481],{"class":59},[49,149150,147306],{"class":55},[49,149152,149153],{"class":51,"line":109},[49,149154,2492],{"emptyLinePlaceholder":151},[49,149156,149157,149159,149161,149163,149165,149167,149169,149171,149173,149176,149178],{"class":51,"line":120},[49,149158,147863],{"class":55},[49,149160,60],{"class":59},[49,149162,148786],{"class":55},[49,149164,148060],{"class":328},[49,149166,4535],{"class":55},[49,149168,3117],{"class":59},[49,149170,148272],{"class":55},[49,149172,26134],{"class":59},[49,149174,149175],{"class":55}," data[",[49,149177,69358],{"class":328},[49,149179,77616],{"class":55},[49,149181,149182],{"class":51,"line":135},[49,149183,2492],{"emptyLinePlaceholder":151},[49,149185,149186,149188,149190],{"class":51,"line":1306},[49,149187,147315],{"class":55},[49,149189,60],{"class":59},[49,149191,147320],{"class":55},[49,149193,149194],{"class":51,"line":1312},[49,149195,147904],{"class":55},[49,149197,149198],{"class":51,"line":1403},[49,149199,2492],{"emptyLinePlaceholder":151},[49,149201,149202,149204,149207,149209],{"class":51,"line":1409},[49,149203,3117],{"class":59},[49,149205,149206],{"class":55}," city, records ",[49,149208,26134],{"class":59},[49,149210,149211],{"class":55}," data.items():\n",[49,149213,149214,149217,149219,149221,149223,149225,149227,149229,149231],{"class":51,"line":1421},[49,149215,149216],{"class":55},"    values ",[49,149218,60],{"class":59},[49,149220,148786],{"class":55},[49,149222,149031],{"class":328},[49,149224,4535],{"class":55},[49,149226,3117],{"class":59},[49,149228,148272],{"class":55},[49,149230,26134],{"class":59},[49,149232,149233],{"class":55}," records]\n",[49,149235,149236,149239,149241,149243,149245],{"class":51,"line":1704},[49,149237,149238],{"class":55},"    line.add_yaxis(city, values, ",[49,149240,147808],{"class":126},[49,149242,60],{"class":59},[49,149244,31565],{"class":66},[49,149246,81],{"class":55},[49,149248,149249],{"class":51,"line":1709},[49,149250,2492],{"emptyLinePlaceholder":151},[49,149252,149253],{"class":51,"line":1715},[49,149254,147531],{"class":55},[49,149256,149257,149259,149261,149263,149265,149267,149270],{"class":51,"line":1720},[49,149258,147536],{"class":126},[49,149260,60],{"class":59},[49,149262,147541],{"class":55},[49,149264,51496],{"class":126},[49,149266,60],{"class":59},[49,149268,149269],{"class":328},"\"多地区趋势图\"",[49,149271,38136],{"class":55},[49,149273,149274,149276,149278,149280,149282,149284,149286],{"class":51,"line":1734},[49,149275,147592],{"class":126},[49,149277,60],{"class":59},[49,149279,147597],{"class":55},[49,149281,147600],{"class":126},[49,149283,60],{"class":59},[49,149285,147605],{"class":328},[49,149287,38136],{"class":55},[49,149289,149290],{"class":51,"line":1739},[49,149291,81],{"class":55},[49,149293,149294,149296,149299],{"class":51,"line":1745},[49,149295,147387],{"class":55},[49,149297,149298],{"class":328},"\"trend.html\"",[49,149300,81],{"class":55},[14,149302,149303],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[166,149305,149307],{"id":149306},"_1012-易错点","10.12 易错点",[178,149309,149310,149316,149322,149332,149338],{},[181,149311,149312,149315],{},[46,149313,149314],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[181,149317,149318,149321],{},[46,149319,149320],{},"render()"," 生成的是 HTML，不是图片。",[181,149323,149324,149325,149328,149329,28476],{},"JSON 字符串用 ",[46,149326,149327],{},"json.loads()","，JSON 文件用 ",[46,149330,149331],{},"json.load()",[181,149333,149334,149335,28476],{},"中文 JSON 保存时加 ",[46,149336,149337],{},"ensure_ascii=False",[181,149339,149340],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[166,149342,149344],{"id":149343},"_1013-本章练习","10.13 本章练习",[178,149346,149347,149350,149353,149356,149359],{},[181,149348,149349],{},"安装 pyecharts 并生成第一个折线图。",[181,149351,149352],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[181,149354,149355],{},"绘制两条折线，对比线上和线下销售额。",[181,149357,149358],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[181,149360,149361],{},"对含有空值的销售数据进行清洗后再绘图。",[143,149363,149364],{},"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":44,"searchDepth":84,"depth":84,"links":149366},[149367,149368,149369,149370,149371,149372,149373,149374,149375,149376,149377,149378,149379],{"id":146983,"depth":84,"text":146984},{"id":147058,"depth":84,"text":147059},{"id":147237,"depth":84,"text":147238},{"id":147288,"depth":84,"text":147289},{"id":147422,"depth":84,"text":147423},{"id":147698,"depth":84,"text":147699},{"id":147824,"depth":84,"text":147825},{"id":148035,"depth":84,"text":148036},{"id":148406,"depth":84,"text":148407},{"id":148618,"depth":84,"text":148619},{"id":148990,"depth":84,"text":148991},{"id":149306,"depth":84,"text":149307},{"id":149343,"depth":84,"text":149344},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146975,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149386,"title":149387,"body":149388,"description":148,"extension":149,"meta":151748,"navigation":151,"path":151749,"seo":151750,"stem":151751,"__hash__":151752},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149389,"toc":151725},[149390,149393,149397,149400,149403,149479,149482,149573,149576,149580,149583,149627,149640,149644,149647,149714,149717,149721,149724,149808,149816,149820,149825,149966,149969,149980,149986,149992,150106,150110,150113,150116,150369,150372,150376,150379,150483,150486,150490,150641,150645,150652,150765,150769,150772,150878,150881,150885,150888,150919,150922,151027,151030,151034,151038,151048,151116,151120,151127,151191,151194,151198,151204,151300,151309,151313,151637,151646,151650,151678,151682,151722],[10,149391,149387],{"id":149392},"_11-面向对象基础",[166,149394,149396],{"id":149395},"_111-什么是面向对象","11.1 什么是面向对象",[14,149398,149399],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149401,149402],{},"面向过程：",[39,149404,149406],{"className":41,"code":149405,"language":43,"meta":44,"style":44},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[46,149407,149408,149417,149425,149429,149439,149470,149474],{"__ignoreMap":44},[49,149409,149410,149412,149414],{"class":51,"line":52},[49,149411,146599],{"class":55},[49,149413,60],{"class":59},[49,149415,149416],{"class":328}," \"小明\"\n",[49,149418,149419,149421,149423],{"class":51,"line":84},[49,149420,146609],{"class":55},[49,149422,60],{"class":59},[49,149424,146614],{"class":66},[49,149426,149427],{"class":51,"line":109},[49,149428,2492],{"emptyLinePlaceholder":151},[49,149430,149431,149433,149436],{"class":51,"line":120},[49,149432,32036],{"class":59},[49,149434,149435],{"class":2055}," introduce",[49,149437,149438],{"class":55},"(name, age):\n",[49,149440,149441,149443,149445,149447,149450,149452,149454,149456,149459,149461,149463,149465,149468],{"class":51,"line":135},[49,149442,31388],{"class":66},[49,149444,228],{"class":55},[49,149446,277],{"class":59},[49,149448,149449],{"class":328},"\"我叫",[49,149451,1115],{"class":66},[49,149453,79899],{"class":55},[49,149455,1165],{"class":66},[49,149457,149458],{"class":328},"，今年",[49,149460,1115],{"class":66},[49,149462,70310],{"class":55},[49,149464,1165],{"class":66},[49,149466,149467],{"class":328},"岁\"",[49,149469,81],{"class":55},[49,149471,149472],{"class":51,"line":1306},[49,149473,2492],{"emptyLinePlaceholder":151},[49,149475,149476],{"class":51,"line":1312},[49,149477,149478],{"class":55},"introduce(name, age)\n",[14,149480,149481],{},"面向对象：",[39,149483,149485],{"className":41,"code":149484,"language":43,"meta":44,"style":44},"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",[46,149486,149487,149495,149503,149532,149536,149540,149550,149559,149568],{"__ignoreMap":44},[49,149488,149489,149491,149493],{"class":51,"line":52},[49,149490,14784],{"class":59},[49,149492,7988],{"class":2055},[49,149494,3831],{"class":55},[49,149496,149497,149499,149501],{"class":51,"line":84},[49,149498,30890],{"class":59},[49,149500,149435],{"class":2055},[49,149502,30896],{"class":55},[49,149504,149505,149507,149509,149511,149513,149516,149518,149520,149522,149524,149526,149528,149530],{"class":51,"line":109},[49,149506,32540],{"class":66},[49,149508,228],{"class":55},[49,149510,277],{"class":59},[49,149512,149449],{"class":328},[49,149514,149515],{"class":66},"{self",[49,149517,80390],{"class":55},[49,149519,1165],{"class":66},[49,149521,149458],{"class":328},[49,149523,149515],{"class":66},[49,149525,80402],{"class":55},[49,149527,1165],{"class":66},[49,149529,149467],{"class":328},[49,149531,81],{"class":55},[49,149533,149534],{"class":51,"line":120},[49,149535,2492],{"emptyLinePlaceholder":151},[49,149537,149538],{"class":51,"line":135},[49,149539,2492],{"emptyLinePlaceholder":151},[49,149541,149542,149545,149547],{"class":51,"line":1306},[49,149543,149544],{"class":55},"student ",[49,149546,60],{"class":59},[49,149548,149549],{"class":55}," Student()\n",[49,149551,149552,149555,149557],{"class":51,"line":1312},[49,149553,149554],{"class":55},"student.name ",[49,149556,60],{"class":59},[49,149558,149416],{"class":328},[49,149560,149561,149564,149566],{"class":51,"line":1403},[49,149562,149563],{"class":55},"student.age ",[49,149565,60],{"class":59},[49,149567,146614],{"class":66},[49,149569,149570],{"class":51,"line":1409},[49,149571,149572],{"class":55},"student.introduce()\n",[14,149574,149575],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[166,149577,149579],{"id":149578},"_112-类和对象","11.2 类和对象",[14,149581,149582],{},"类是模板，对象是根据模板创建出来的具体实例。",[39,149584,149586],{"className":41,"code":149585,"language":43,"meta":44,"style":44},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[46,149587,149588,149596,149601,149605,149609,149618],{"__ignoreMap":44},[49,149589,149590,149592,149594],{"class":51,"line":52},[49,149591,14784],{"class":59},[49,149593,7988],{"class":2055},[49,149595,3831],{"class":55},[49,149597,149598],{"class":51,"line":84},[49,149599,149600],{"class":59},"    pass\n",[49,149602,149603],{"class":51,"line":109},[49,149604,2492],{"emptyLinePlaceholder":151},[49,149606,149607],{"class":51,"line":120},[49,149608,2492],{"emptyLinePlaceholder":151},[49,149610,149611,149614,149616],{"class":51,"line":135},[49,149612,149613],{"class":55},"student1 ",[49,149615,60],{"class":59},[49,149617,149549],{"class":55},[49,149619,149620,149623,149625],{"class":51,"line":1306},[49,149621,149622],{"class":55},"student2 ",[49,149624,60],{"class":59},[49,149626,149549],{"class":55},[14,149628,149629,149632,149633,101081,149636,149639],{},[46,149630,149631],{},"Student"," 是类，",[46,149634,149635],{},"student1",[46,149637,149638],{},"student2"," 是对象。",[166,149641,149643],{"id":149642},"_113-属性","11.3 属性",[14,149645,149646],{},"属性是对象保存的数据。",[39,149648,149650],{"className":41,"code":149649,"language":43,"meta":44,"style":44},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[46,149651,149652,149660,149664,149668,149672,149680,149688,149696,149700,149707],{"__ignoreMap":44},[49,149653,149654,149656,149658],{"class":51,"line":52},[49,149655,14784],{"class":59},[49,149657,7988],{"class":2055},[49,149659,3831],{"class":55},[49,149661,149662],{"class":51,"line":84},[49,149663,149600],{"class":59},[49,149665,149666],{"class":51,"line":109},[49,149667,2492],{"emptyLinePlaceholder":151},[49,149669,149670],{"class":51,"line":120},[49,149671,2492],{"emptyLinePlaceholder":151},[49,149673,149674,149676,149678],{"class":51,"line":135},[49,149675,149544],{"class":55},[49,149677,60],{"class":59},[49,149679,149549],{"class":55},[49,149681,149682,149684,149686],{"class":51,"line":1306},[49,149683,149554],{"class":55},[49,149685,60],{"class":59},[49,149687,149416],{"class":328},[49,149689,149690,149692,149694],{"class":51,"line":1312},[49,149691,149563],{"class":55},[49,149693,60],{"class":59},[49,149695,146614],{"class":66},[49,149697,149698],{"class":51,"line":1403},[49,149699,2492],{"emptyLinePlaceholder":151},[49,149701,149702,149704],{"class":51,"line":1409},[49,149703,30504],{"class":66},[49,149705,149706],{"class":55},"(student.name)\n",[49,149708,149709,149711],{"class":51,"line":1421},[49,149710,30504],{"class":66},[49,149712,149713],{"class":55},"(student.age)\n",[14,149715,149716],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[166,149718,149720],{"id":149719},"_114-方法","11.4 方法",[14,149722,149723],{},"类中的函数叫方法。",[39,149725,149726],{"className":41,"code":149484,"language":43,"meta":44,"style":44},[46,149727,149728,149736,149744,149772,149776,149780,149788,149796,149804],{"__ignoreMap":44},[49,149729,149730,149732,149734],{"class":51,"line":52},[49,149731,14784],{"class":59},[49,149733,7988],{"class":2055},[49,149735,3831],{"class":55},[49,149737,149738,149740,149742],{"class":51,"line":84},[49,149739,30890],{"class":59},[49,149741,149435],{"class":2055},[49,149743,30896],{"class":55},[49,149745,149746,149748,149750,149752,149754,149756,149758,149760,149762,149764,149766,149768,149770],{"class":51,"line":109},[49,149747,32540],{"class":66},[49,149749,228],{"class":55},[49,149751,277],{"class":59},[49,149753,149449],{"class":328},[49,149755,149515],{"class":66},[49,149757,80390],{"class":55},[49,149759,1165],{"class":66},[49,149761,149458],{"class":328},[49,149763,149515],{"class":66},[49,149765,80402],{"class":55},[49,149767,1165],{"class":66},[49,149769,149467],{"class":328},[49,149771,81],{"class":55},[49,149773,149774],{"class":51,"line":120},[49,149775,2492],{"emptyLinePlaceholder":151},[49,149777,149778],{"class":51,"line":135},[49,149779,2492],{"emptyLinePlaceholder":151},[49,149781,149782,149784,149786],{"class":51,"line":1306},[49,149783,149544],{"class":55},[49,149785,60],{"class":59},[49,149787,149549],{"class":55},[49,149789,149790,149792,149794],{"class":51,"line":1312},[49,149791,149554],{"class":55},[49,149793,60],{"class":59},[49,149795,149416],{"class":328},[49,149797,149798,149800,149802],{"class":51,"line":1403},[49,149799,149563],{"class":55},[49,149801,60],{"class":59},[49,149803,146614],{"class":66},[49,149805,149806],{"class":51,"line":1409},[49,149807,149572],{"class":55},[14,149809,149810,149812,149813,149815],{},[46,149811,30912],{}," 表示当前对象。调用方法时不需要手动传入 ",[46,149814,30912],{},"，Python 会自动传。",[166,149817,149819],{"id":149818},"_115-构造方法__init__","11.5 构造方法__init__",[14,149821,149822,149824],{},[46,149823,30918],{}," 在对象创建时自动执行，用于初始化属性。",[39,149826,149828],{"className":41,"code":149827,"language":43,"meta":44,"style":44},"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",[46,149829,149830,149838,149847,149859,149871,149882,149886,149894,149932,149936,149940,149962],{"__ignoreMap":44},[49,149831,149832,149834,149836],{"class":51,"line":52},[49,149833,14784],{"class":59},[49,149835,7988],{"class":2055},[49,149837,3831],{"class":55},[49,149839,149840,149842,149844],{"class":51,"line":84},[49,149841,30890],{"class":59},[49,149843,30893],{"class":66},[49,149845,149846],{"class":55},"(self, name, age, score):\n",[49,149848,149849,149851,149854,149856],{"class":51,"line":109},[49,149850,30934],{"class":66},[49,149852,149853],{"class":55},".name ",[49,149855,60],{"class":59},[49,149857,149858],{"class":55}," name\n",[49,149860,149861,149863,149866,149868],{"class":51,"line":120},[49,149862,30934],{"class":66},[49,149864,149865],{"class":55},".age ",[49,149867,60],{"class":59},[49,149869,149870],{"class":55}," age\n",[49,149872,149873,149875,149878,149880],{"class":51,"line":135},[49,149874,30934],{"class":66},[49,149876,149877],{"class":55},".score ",[49,149879,60],{"class":59},[49,149881,1671],{"class":55},[49,149883,149884],{"class":51,"line":1306},[49,149885,2492],{"emptyLinePlaceholder":151},[49,149887,149888,149890,149892],{"class":51,"line":1312},[49,149889,30890],{"class":59},[49,149891,149435],{"class":2055},[49,149893,30896],{"class":55},[49,149895,149896,149898,149900,149902,149904,149906,149908,149910,149912,149914,149916,149918,149921,149923,149926,149928,149930],{"class":51,"line":1403},[49,149897,32540],{"class":66},[49,149899,228],{"class":55},[49,149901,277],{"class":59},[49,149903,149449],{"class":328},[49,149905,149515],{"class":66},[49,149907,80390],{"class":55},[49,149909,1165],{"class":66},[49,149911,149458],{"class":328},[49,149913,149515],{"class":66},[49,149915,80402],{"class":55},[49,149917,1165],{"class":66},[49,149919,149920],{"class":328},"岁，成绩",[49,149922,149515],{"class":66},[49,149924,149925],{"class":55},".score",[49,149927,1165],{"class":66},[49,149929,474],{"class":328},[49,149931,81],{"class":55},[49,149933,149934],{"class":51,"line":1409},[49,149935,2492],{"emptyLinePlaceholder":151},[49,149937,149938],{"class":51,"line":1421},[49,149939,2492],{"emptyLinePlaceholder":151},[49,149941,149942,149944,149946,149949,149952,149954,149956,149958,149960],{"class":51,"line":1704},[49,149943,149544],{"class":55},[49,149945,60],{"class":59},[49,149947,149948],{"class":55}," Student(",[49,149950,149951],{"class":328},"\"小明\"",[49,149953,12525],{"class":55},[49,149955,869],{"class":66},[49,149957,12525],{"class":55},[49,149959,1208],{"class":66},[49,149961,81],{"class":55},[49,149963,149964],{"class":51,"line":1709},[49,149965,149572],{"class":55},[14,149967,149968],{},"构造方法的好处：",[178,149970,149971,149974,149977],{},[181,149972,149973],{},"创建对象时必须提供必要数据。",[181,149975,149976],{},"属性初始化集中，不容易漏。",[181,149978,149979],{},"对象状态更完整。",[166,149981,149983,149984],{"id":149982},"_116-str","11.6 ",[373,149985,1391],{},[14,149987,149988,149989,28476],{},"直接打印对象时，默认输出不直观。可以定义 ",[46,149990,149991],{},"__str__",[39,149993,149995],{"className":41,"code":149994,"language":43,"meta":44,"style":44},"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",[46,149996,149997,150005,150014,150024,150034,150038,150047,150075,150079,150083,150099],{"__ignoreMap":44},[49,149998,149999,150001,150003],{"class":51,"line":52},[49,150000,14784],{"class":59},[49,150002,7988],{"class":2055},[49,150004,3831],{"class":55},[49,150006,150007,150009,150011],{"class":51,"line":84},[49,150008,30890],{"class":59},[49,150010,30893],{"class":66},[49,150012,150013],{"class":55},"(self, name, age):\n",[49,150015,150016,150018,150020,150022],{"class":51,"line":109},[49,150017,30934],{"class":66},[49,150019,149853],{"class":55},[49,150021,60],{"class":59},[49,150023,149858],{"class":55},[49,150025,150026,150028,150030,150032],{"class":51,"line":120},[49,150027,30934],{"class":66},[49,150029,149865],{"class":55},[49,150031,60],{"class":59},[49,150033,149870],{"class":55},[49,150035,150036],{"class":51,"line":135},[49,150037,2492],{"emptyLinePlaceholder":151},[49,150039,150040,150042,150045],{"class":51,"line":1306},[49,150041,30890],{"class":59},[49,150043,150044],{"class":66}," __str__",[49,150046,30896],{"class":55},[49,150048,150049,150051,150054,150057,150059,150061,150063,150066,150068,150070,150072],{"class":51,"line":1312},[49,150050,14842],{"class":59},[49,150052,150053],{"class":59}," f",[49,150055,150056],{"class":328},"\"Student(name=",[49,150058,149515],{"class":66},[49,150060,80390],{"class":55},[49,150062,1165],{"class":66},[49,150064,150065],{"class":328},", age=",[49,150067,149515],{"class":66},[49,150069,80402],{"class":55},[49,150071,1165],{"class":66},[49,150073,150074],{"class":328},")\"\n",[49,150076,150077],{"class":51,"line":1403},[49,150078,2492],{"emptyLinePlaceholder":151},[49,150080,150081],{"class":51,"line":1409},[49,150082,2492],{"emptyLinePlaceholder":151},[49,150084,150085,150087,150089,150091,150093,150095,150097],{"class":51,"line":1421},[49,150086,149544],{"class":55},[49,150088,60],{"class":59},[49,150090,149948],{"class":55},[49,150092,149951],{"class":328},[49,150094,12525],{"class":55},[49,150096,869],{"class":66},[49,150098,81],{"class":55},[49,150100,150101,150103],{"class":51,"line":1704},[49,150102,30504],{"class":66},[49,150104,150105],{"class":55},"(student)\n",[166,150107,150109],{"id":150108},"_117-封装","11.7 封装",[14,150111,150112],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150114,150115],{},"Python 中以双下划线开头的属性通常视为私有属性。",[39,150117,150119],{"className":41,"code":150118,"language":43,"meta":44,"style":44},"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",[46,150120,150121,150130,150139,150151,150163,150167,150176,150185,150189,150199,150212,150223,150228,150239,150243,150252,150264,150275,150279,150292,150303,150307,150318,150322,150326,150344,150353,150362],{"__ignoreMap":44},[49,150122,150123,150125,150128],{"class":51,"line":52},[49,150124,14784],{"class":59},[49,150126,150127],{"class":2055}," Account",[49,150129,3831],{"class":55},[49,150131,150132,150134,150136],{"class":51,"line":84},[49,150133,30890],{"class":59},[49,150135,30893],{"class":66},[49,150137,150138],{"class":55},"(self, owner, balance):\n",[49,150140,150141,150143,150146,150148],{"class":51,"line":109},[49,150142,30934],{"class":66},[49,150144,150145],{"class":55},".owner ",[49,150147,60],{"class":59},[49,150149,150150],{"class":55}," owner\n",[49,150152,150153,150155,150158,150160],{"class":51,"line":120},[49,150154,30934],{"class":66},[49,150156,150157],{"class":55},".__balance ",[49,150159,60],{"class":59},[49,150161,150162],{"class":55}," balance\n",[49,150164,150165],{"class":51,"line":135},[49,150166,2492],{"emptyLinePlaceholder":151},[49,150168,150169,150171,150174],{"class":51,"line":1306},[49,150170,30890],{"class":59},[49,150172,150173],{"class":2055}," get_balance",[49,150175,30896],{"class":55},[49,150177,150178,150180,150182],{"class":51,"line":1312},[49,150179,14842],{"class":59},[49,150181,38962],{"class":66},[49,150183,150184],{"class":55},".__balance\n",[49,150186,150187],{"class":51,"line":1403},[49,150188,2492],{"emptyLinePlaceholder":151},[49,150190,150191,150193,150196],{"class":51,"line":1409},[49,150192,30890],{"class":59},[49,150194,150195],{"class":2055}," deposit",[49,150197,150198],{"class":55},"(self, money):\n",[49,150200,150201,150203,150206,150208,150210],{"class":51,"line":1421},[49,150202,2589],{"class":59},[49,150204,150205],{"class":55}," money ",[49,150207,1680],{"class":59},[49,150209,4185],{"class":66},[49,150211,3831],{"class":55},[49,150213,150214,150216,150218,150221],{"class":51,"line":1704},[49,150215,34739],{"class":66},[49,150217,228],{"class":55},[49,150219,150220],{"class":328},"\"存款金额必须大于0\"",[49,150222,81],{"class":55},[49,150224,150225],{"class":51,"line":1709},[49,150226,150227],{"class":59},"            return\n",[49,150229,150230,150232,150234,150236],{"class":51,"line":1715},[49,150231,30934],{"class":66},[49,150233,150157],{"class":55},[49,150235,9567],{"class":59},[49,150237,150238],{"class":55}," money\n",[49,150240,150241],{"class":51,"line":1720},[49,150242,2492],{"emptyLinePlaceholder":151},[49,150244,150245,150247,150250],{"class":51,"line":1734},[49,150246,30890],{"class":59},[49,150248,150249],{"class":2055}," withdraw",[49,150251,150198],{"class":55},[49,150253,150254,150256,150258,150260,150262],{"class":51,"line":1739},[49,150255,2589],{"class":59},[49,150257,150205],{"class":55},[49,150259,1680],{"class":59},[49,150261,4185],{"class":66},[49,150263,3831],{"class":55},[49,150265,150266,150268,150270,150273],{"class":51,"line":1745},[49,150267,34739],{"class":66},[49,150269,228],{"class":55},[49,150271,150272],{"class":328},"\"取款金额必须大于0\"",[49,150274,81],{"class":55},[49,150276,150277],{"class":51,"line":1766},[49,150278,150227],{"class":59},[49,150280,150281,150283,150285,150287,150289],{"class":51,"line":1771},[49,150282,2589],{"class":59},[49,150284,150205],{"class":55},[49,150286,1179],{"class":59},[49,150288,38962],{"class":66},[49,150290,150291],{"class":55},".__balance:\n",[49,150293,150294,150296,150298,150301],{"class":51,"line":1785},[49,150295,34739],{"class":66},[49,150297,228],{"class":55},[49,150299,150300],{"class":328},"\"余额不足\"",[49,150302,81],{"class":55},[49,150304,150305],{"class":51,"line":1790},[49,150306,150227],{"class":59},[49,150308,150309,150311,150313,150316],{"class":51,"line":1819},[49,150310,30934],{"class":66},[49,150312,150157],{"class":55},[49,150314,150315],{"class":59},"-=",[49,150317,150238],{"class":55},[49,150319,150320],{"class":51,"line":1824},[49,150321,2492],{"emptyLinePlaceholder":151},[49,150323,150324],{"class":51,"line":1841},[49,150325,2492],{"emptyLinePlaceholder":151},[49,150327,150328,150331,150333,150336,150338,150340,150342],{"class":51,"line":1846},[49,150329,150330],{"class":55},"account ",[49,150332,60],{"class":59},[49,150334,150335],{"class":55}," Account(",[49,150337,149951],{"class":328},[49,150339,12525],{"class":55},[49,150341,6500],{"class":66},[49,150343,81],{"class":55},[49,150345,150346,150349,150351],{"class":51,"line":1851},[49,150347,150348],{"class":55},"account.deposit(",[49,150350,1814],{"class":66},[49,150352,81],{"class":55},[49,150354,150355,150358,150360],{"class":51,"line":1856},[49,150356,150357],{"class":55},"account.withdraw(",[49,150359,533],{"class":66},[49,150361,81],{"class":55},[49,150363,150364,150366],{"class":51,"line":1870},[49,150365,30504],{"class":66},[49,150367,150368],{"class":55},"(account.get_balance())\n",[14,150370,150371],{},"封装的意义是避免外部随意修改内部状态。",[166,150373,150375],{"id":150374},"_118-继承","11.8 继承",[14,150377,150378],{},"继承可以让子类复用父类的属性和方法。",[39,150380,150382],{"className":41,"code":150381,"language":43,"meta":44,"style":44},"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",[46,150383,150384,150393,150402,150413,150417,150421,150435,150444,150455,150459,150463,150473,150478],{"__ignoreMap":44},[49,150385,150386,150388,150391],{"class":51,"line":52},[49,150387,14784],{"class":59},[49,150389,150390],{"class":2055}," Animal",[49,150392,3831],{"class":55},[49,150394,150395,150397,150400],{"class":51,"line":84},[49,150396,30890],{"class":59},[49,150398,150399],{"class":2055}," eat",[49,150401,30896],{"class":55},[49,150403,150404,150406,150408,150411],{"class":51,"line":109},[49,150405,32540],{"class":66},[49,150407,228],{"class":55},[49,150409,150410],{"class":328},"\"吃东西\"",[49,150412,81],{"class":55},[49,150414,150415],{"class":51,"line":120},[49,150416,2492],{"emptyLinePlaceholder":151},[49,150418,150419],{"class":51,"line":135},[49,150420,2492],{"emptyLinePlaceholder":151},[49,150422,150423,150425,150428,150430,150433],{"class":51,"line":1306},[49,150424,14784],{"class":59},[49,150426,150427],{"class":2055}," Dog",[49,150429,228],{"class":55},[49,150431,150432],{"class":2055},"Animal",[49,150434,30875],{"class":55},[49,150436,150437,150439,150442],{"class":51,"line":1312},[49,150438,30890],{"class":59},[49,150440,150441],{"class":2055}," bark",[49,150443,30896],{"class":55},[49,150445,150446,150448,150450,150453],{"class":51,"line":1403},[49,150447,32540],{"class":66},[49,150449,228],{"class":55},[49,150451,150452],{"class":328},"\"汪汪\"",[49,150454,81],{"class":55},[49,150456,150457],{"class":51,"line":1409},[49,150458,2492],{"emptyLinePlaceholder":151},[49,150460,150461],{"class":51,"line":1421},[49,150462,2492],{"emptyLinePlaceholder":151},[49,150464,150465,150468,150470],{"class":51,"line":1704},[49,150466,150467],{"class":55},"dog ",[49,150469,60],{"class":59},[49,150471,150472],{"class":55}," Dog()\n",[49,150474,150475],{"class":51,"line":1709},[49,150476,150477],{"class":55},"dog.eat()\n",[49,150479,150480],{"class":51,"line":1715},[49,150481,150482],{"class":55},"dog.bark()\n",[14,150484,150485],{},"子类可以扩展新方法，也可以重写父类方法。",[166,150487,150489],{"id":150488},"_119-方法重写","11.9 方法重写",[39,150491,150493],{"className":41,"code":150492,"language":43,"meta":44,"style":44},"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",[46,150494,150495,150503,150512,150523,150527,150531,150543,150551,150561,150565,150569,150582,150590,150601,150605,150609,150617,150627,150631,150636],{"__ignoreMap":44},[49,150496,150497,150499,150501],{"class":51,"line":52},[49,150498,14784],{"class":59},[49,150500,150390],{"class":2055},[49,150502,3831],{"class":55},[49,150504,150505,150507,150510],{"class":51,"line":84},[49,150506,30890],{"class":59},[49,150508,150509],{"class":2055}," speak",[49,150511,30896],{"class":55},[49,150513,150514,150516,150518,150521],{"class":51,"line":109},[49,150515,32540],{"class":66},[49,150517,228],{"class":55},[49,150519,150520],{"class":328},"\"动物叫\"",[49,150522,81],{"class":55},[49,150524,150525],{"class":51,"line":120},[49,150526,2492],{"emptyLinePlaceholder":151},[49,150528,150529],{"class":51,"line":135},[49,150530,2492],{"emptyLinePlaceholder":151},[49,150532,150533,150535,150537,150539,150541],{"class":51,"line":1306},[49,150534,14784],{"class":59},[49,150536,150427],{"class":2055},[49,150538,228],{"class":55},[49,150540,150432],{"class":2055},[49,150542,30875],{"class":55},[49,150544,150545,150547,150549],{"class":51,"line":1312},[49,150546,30890],{"class":59},[49,150548,150509],{"class":2055},[49,150550,30896],{"class":55},[49,150552,150553,150555,150557,150559],{"class":51,"line":1403},[49,150554,32540],{"class":66},[49,150556,228],{"class":55},[49,150558,150452],{"class":328},[49,150560,81],{"class":55},[49,150562,150563],{"class":51,"line":1409},[49,150564,2492],{"emptyLinePlaceholder":151},[49,150566,150567],{"class":51,"line":1421},[49,150568,2492],{"emptyLinePlaceholder":151},[49,150570,150571,150573,150576,150578,150580],{"class":51,"line":1704},[49,150572,14784],{"class":59},[49,150574,150575],{"class":2055}," Cat",[49,150577,228],{"class":55},[49,150579,150432],{"class":2055},[49,150581,30875],{"class":55},[49,150583,150584,150586,150588],{"class":51,"line":1709},[49,150585,30890],{"class":59},[49,150587,150509],{"class":2055},[49,150589,30896],{"class":55},[49,150591,150592,150594,150596,150599],{"class":51,"line":1715},[49,150593,32540],{"class":66},[49,150595,228],{"class":55},[49,150597,150598],{"class":328},"\"喵喵\"",[49,150600,81],{"class":55},[49,150602,150603],{"class":51,"line":1720},[49,150604,2492],{"emptyLinePlaceholder":151},[49,150606,150607],{"class":51,"line":1734},[49,150608,2492],{"emptyLinePlaceholder":151},[49,150610,150611,150613,150615],{"class":51,"line":1739},[49,150612,150467],{"class":55},[49,150614,60],{"class":59},[49,150616,150472],{"class":55},[49,150618,150619,150622,150624],{"class":51,"line":1745},[49,150620,150621],{"class":55},"cat ",[49,150623,60],{"class":59},[49,150625,150626],{"class":55}," Cat()\n",[49,150628,150629],{"class":51,"line":1766},[49,150630,2492],{"emptyLinePlaceholder":151},[49,150632,150633],{"class":51,"line":1771},[49,150634,150635],{"class":55},"dog.speak()\n",[49,150637,150638],{"class":51,"line":1785},[49,150639,150640],{"class":55},"cat.speak()\n",[166,150642,150644],{"id":150643},"_1110-super","11.10 super",[14,150646,150647,150648,150651],{},"子类可以通过 ",[46,150649,150650],{},"super()"," 调用父类方法。",[39,150653,150655],{"className":41,"code":150654,"language":43,"meta":44,"style":44},"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",[46,150656,150657,150665,150674,150684,150688,150692,150704,150713,150724,150734,150738,150742,150758],{"__ignoreMap":44},[49,150658,150659,150661,150663],{"class":51,"line":52},[49,150660,14784],{"class":59},[49,150662,15659],{"class":2055},[49,150664,3831],{"class":55},[49,150666,150667,150669,150671],{"class":51,"line":84},[49,150668,30890],{"class":59},[49,150670,30893],{"class":66},[49,150672,150673],{"class":55},"(self, name):\n",[49,150675,150676,150678,150680,150682],{"class":51,"line":109},[49,150677,30934],{"class":66},[49,150679,149853],{"class":55},[49,150681,60],{"class":59},[49,150683,149858],{"class":55},[49,150685,150686],{"class":51,"line":120},[49,150687,2492],{"emptyLinePlaceholder":151},[49,150689,150690],{"class":51,"line":135},[49,150691,2492],{"emptyLinePlaceholder":151},[49,150693,150694,150696,150698,150700,150702],{"class":51,"line":1306},[49,150695,14784],{"class":59},[49,150697,7988],{"class":2055},[49,150699,228],{"class":55},[49,150701,19136],{"class":2055},[49,150703,30875],{"class":55},[49,150705,150706,150708,150710],{"class":51,"line":1312},[49,150707,30890],{"class":59},[49,150709,30893],{"class":66},[49,150711,150712],{"class":55},"(self, name, score):\n",[49,150714,150715,150717,150719,150721],{"class":51,"line":1403},[49,150716,30906],{"class":66},[49,150718,17351],{"class":55},[49,150720,30918],{"class":66},[49,150722,150723],{"class":55},"(name)\n",[49,150725,150726,150728,150730,150732],{"class":51,"line":1409},[49,150727,30934],{"class":66},[49,150729,149877],{"class":55},[49,150731,60],{"class":59},[49,150733,1671],{"class":55},[49,150735,150736],{"class":51,"line":1421},[49,150737,2492],{"emptyLinePlaceholder":151},[49,150739,150740],{"class":51,"line":1704},[49,150741,2492],{"emptyLinePlaceholder":151},[49,150743,150744,150746,150748,150750,150752,150754,150756],{"class":51,"line":1709},[49,150745,149544],{"class":55},[49,150747,60],{"class":59},[49,150749,149948],{"class":55},[49,150751,149951],{"class":328},[49,150753,12525],{"class":55},[49,150755,1208],{"class":66},[49,150757,81],{"class":55},[49,150759,150760,150762],{"class":51,"line":1715},[49,150761,30504],{"class":66},[49,150763,150764],{"class":55},"(student.name, student.score)\n",[166,150766,150768],{"id":150767},"_1111-多态","11.11 多态",[14,150770,150771],{},"多态指不同对象响应同一个方法，表现出不同结果。",[39,150773,150775],{"className":41,"code":150774,"language":43,"meta":44,"style":44},"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",[46,150776,150777,150785,150793,150803,150807,150811,150819,150827,150837,150841,150845,150855,150860,150864,150868,150873],{"__ignoreMap":44},[49,150778,150779,150781,150783],{"class":51,"line":52},[49,150780,14784],{"class":59},[49,150782,150427],{"class":2055},[49,150784,3831],{"class":55},[49,150786,150787,150789,150791],{"class":51,"line":84},[49,150788,30890],{"class":59},[49,150790,150509],{"class":2055},[49,150792,30896],{"class":55},[49,150794,150795,150797,150799,150801],{"class":51,"line":109},[49,150796,32540],{"class":66},[49,150798,228],{"class":55},[49,150800,150452],{"class":328},[49,150802,81],{"class":55},[49,150804,150805],{"class":51,"line":120},[49,150806,2492],{"emptyLinePlaceholder":151},[49,150808,150809],{"class":51,"line":135},[49,150810,2492],{"emptyLinePlaceholder":151},[49,150812,150813,150815,150817],{"class":51,"line":1306},[49,150814,14784],{"class":59},[49,150816,150575],{"class":2055},[49,150818,3831],{"class":55},[49,150820,150821,150823,150825],{"class":51,"line":1312},[49,150822,30890],{"class":59},[49,150824,150509],{"class":2055},[49,150826,30896],{"class":55},[49,150828,150829,150831,150833,150835],{"class":51,"line":1403},[49,150830,32540],{"class":66},[49,150832,228],{"class":55},[49,150834,150598],{"class":328},[49,150836,81],{"class":55},[49,150838,150839],{"class":51,"line":1409},[49,150840,2492],{"emptyLinePlaceholder":151},[49,150842,150843],{"class":51,"line":1421},[49,150844,2492],{"emptyLinePlaceholder":151},[49,150846,150847,150849,150852],{"class":51,"line":1704},[49,150848,32036],{"class":59},[49,150850,150851],{"class":2055}," make_sound",[49,150853,150854],{"class":55},"(animal):\n",[49,150856,150857],{"class":51,"line":1709},[49,150858,150859],{"class":55},"    animal.speak()\n",[49,150861,150862],{"class":51,"line":1715},[49,150863,2492],{"emptyLinePlaceholder":151},[49,150865,150866],{"class":51,"line":1720},[49,150867,2492],{"emptyLinePlaceholder":151},[49,150869,150870],{"class":51,"line":1734},[49,150871,150872],{"class":55},"make_sound(Dog())\n",[49,150874,150875],{"class":51,"line":1739},[49,150876,150877],{"class":55},"make_sound(Cat())\n",[14,150879,150880],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[166,150882,150884],{"id":150883},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150886,150887],{},"实例属性属于对象：",[39,150889,150891],{"className":41,"code":150890,"language":43,"meta":44,"style":44},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[46,150892,150893,150901,150909],{"__ignoreMap":44},[49,150894,150895,150897,150899],{"class":51,"line":52},[49,150896,14784],{"class":59},[49,150898,7988],{"class":2055},[49,150900,3831],{"class":55},[49,150902,150903,150905,150907],{"class":51,"line":84},[49,150904,30890],{"class":59},[49,150906,30893],{"class":66},[49,150908,150673],{"class":55},[49,150910,150911,150913,150915,150917],{"class":51,"line":109},[49,150912,30934],{"class":66},[49,150914,149853],{"class":55},[49,150916,60],{"class":59},[49,150918,149858],{"class":55},[14,150920,150921],{},"类属性属于类，所有对象共享：",[39,150923,150925],{"className":41,"code":150924,"language":43,"meta":44,"style":44},"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",[46,150926,150927,150935,150945,150949,150957,150967,150971,150975,150988,151002,151006,151013,151020],{"__ignoreMap":44},[49,150928,150929,150931,150933],{"class":51,"line":52},[49,150930,14784],{"class":59},[49,150932,7988],{"class":2055},[49,150934,3831],{"class":55},[49,150936,150937,150940,150942],{"class":51,"line":84},[49,150938,150939],{"class":55},"    school ",[49,150941,60],{"class":59},[49,150943,150944],{"class":328}," \"黑马学校\"\n",[49,150946,150947],{"class":51,"line":109},[49,150948,2492],{"emptyLinePlaceholder":151},[49,150950,150951,150953,150955],{"class":51,"line":120},[49,150952,30890],{"class":59},[49,150954,30893],{"class":66},[49,150956,150673],{"class":55},[49,150958,150959,150961,150963,150965],{"class":51,"line":135},[49,150960,30934],{"class":66},[49,150962,149853],{"class":55},[49,150964,60],{"class":59},[49,150966,149858],{"class":55},[49,150968,150969],{"class":51,"line":1306},[49,150970,2492],{"emptyLinePlaceholder":151},[49,150972,150973],{"class":51,"line":1312},[49,150974,2492],{"emptyLinePlaceholder":151},[49,150976,150977,150980,150982,150984,150986],{"class":51,"line":1403},[49,150978,150979],{"class":55},"s1 ",[49,150981,60],{"class":59},[49,150983,149948],{"class":55},[49,150985,149951],{"class":328},[49,150987,81],{"class":55},[49,150989,150990,150993,150995,150997,151000],{"class":51,"line":1409},[49,150991,150992],{"class":55},"s2 ",[49,150994,60],{"class":59},[49,150996,149948],{"class":55},[49,150998,150999],{"class":328},"\"小红\"",[49,151001,81],{"class":55},[49,151003,151004],{"class":51,"line":1421},[49,151005,2492],{"emptyLinePlaceholder":151},[49,151007,151008,151010],{"class":51,"line":1704},[49,151009,30504],{"class":66},[49,151011,151012],{"class":55},"(s1.school)\n",[49,151014,151015,151017],{"class":51,"line":1709},[49,151016,30504],{"class":66},[49,151018,151019],{"class":55},"(s2.school)\n",[49,151021,151022,151024],{"class":51,"line":1715},[49,151023,30504],{"class":66},[49,151025,151026],{"class":55},"(Student.school)\n",[14,151028,151029],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[166,151031,151033],{"id":151032},"_1113-类方法和静态方法","11.13 类方法和静态方法",[195,151035,151037],{"id":151036},"_11131-类方法","11.13.1 类方法",[14,151039,151040,151041,151044,151045,28476],{},"类方法使用 ",[46,151042,151043],{},"@classmethod","，第一个参数通常是 ",[46,151046,151047],{},"cls",[39,151049,151051],{"className":41,"code":151050,"language":43,"meta":44,"style":44},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[46,151052,151053,151061,151069,151073,151081,151091,151101,151105,151109],{"__ignoreMap":44},[49,151054,151055,151057,151059],{"class":51,"line":52},[49,151056,14784],{"class":59},[49,151058,7988],{"class":2055},[49,151060,3831],{"class":55},[49,151062,151063,151065,151067],{"class":51,"line":84},[49,151064,150939],{"class":55},[49,151066,60],{"class":59},[49,151068,150944],{"class":328},[49,151070,151071],{"class":51,"line":109},[49,151072,2492],{"emptyLinePlaceholder":151},[49,151074,151075,151078],{"class":51,"line":120},[49,151076,151077],{"class":2055},"    @",[49,151079,151080],{"class":66},"classmethod\n",[49,151082,151083,151085,151088],{"class":51,"line":135},[49,151084,30890],{"class":59},[49,151086,151087],{"class":2055}," get_school",[49,151089,151090],{"class":55},"(cls):\n",[49,151092,151093,151095,151098],{"class":51,"line":1306},[49,151094,14842],{"class":59},[49,151096,151097],{"class":66}," cls",[49,151099,151100],{"class":55},".school\n",[49,151102,151103],{"class":51,"line":1312},[49,151104,2492],{"emptyLinePlaceholder":151},[49,151106,151107],{"class":51,"line":1403},[49,151108,2492],{"emptyLinePlaceholder":151},[49,151110,151111,151113],{"class":51,"line":1409},[49,151112,30504],{"class":66},[49,151114,151115],{"class":55},"(Student.get_school())\n",[195,151117,151119],{"id":151118},"_11132-静态方法","11.13.2 静态方法",[14,151121,151122,151123,151126],{},"静态方法使用 ",[46,151124,151125],{},"@staticmethod","，不需要访问实例和类。",[39,151128,151130],{"className":41,"code":151129,"language":43,"meta":44,"style":44},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[46,151131,151132,151141,151148,151157,151168,151172,151176],{"__ignoreMap":44},[49,151133,151134,151136,151139],{"class":51,"line":52},[49,151135,14784],{"class":59},[49,151137,151138],{"class":2055}," MathUtils",[49,151140,3831],{"class":55},[49,151142,151143,151145],{"class":51,"line":84},[49,151144,151077],{"class":2055},[49,151146,151147],{"class":66},"staticmethod\n",[49,151149,151150,151152,151154],{"class":51,"line":109},[49,151151,30890],{"class":59},[49,151153,5300],{"class":2055},[49,151155,151156],{"class":55},"(a, b):\n",[49,151158,151159,151161,151163,151165],{"class":51,"line":120},[49,151160,14842],{"class":59},[49,151162,10959],{"class":55},[49,151164,700],{"class":59},[49,151166,151167],{"class":55}," b\n",[49,151169,151170],{"class":51,"line":135},[49,151171,2492],{"emptyLinePlaceholder":151},[49,151173,151174],{"class":51,"line":1306},[49,151175,2492],{"emptyLinePlaceholder":151},[49,151177,151178,151180,151183,151185,151187,151189],{"class":51,"line":1312},[49,151179,30504],{"class":66},[49,151181,151182],{"class":55},"(MathUtils.add(",[49,151184,441],{"class":66},[49,151186,12525],{"class":55},[49,151188,301],{"class":66},[49,151190,30586],{"class":55},[14,151192,151193],{},"静态方法本质上是放在类命名空间里的普通函数。",[166,151195,151197],{"id":151196},"_1114-dataclass","11.14 dataclass",[14,151199,151200,151203],{},[46,151201,151202],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[39,151205,151207],{"className":41,"code":151206,"language":43,"meta":44,"style":44},"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",[46,151208,151209,151221,151225,151229,151234,151242,151250,151258,151266,151270,151274,151294],{"__ignoreMap":44},[49,151210,151211,151213,151216,151218],{"class":51,"line":52},[49,151212,30826],{"class":59},[49,151214,151215],{"class":55}," dataclasses ",[49,151217,30481],{"class":59},[49,151219,151220],{"class":55}," dataclass\n",[49,151222,151223],{"class":51,"line":84},[49,151224,2492],{"emptyLinePlaceholder":151},[49,151226,151227],{"class":51,"line":109},[49,151228,2492],{"emptyLinePlaceholder":151},[49,151230,151231],{"class":51,"line":120},[49,151232,151233],{"class":2055},"@dataclass\n",[49,151235,151236,151238,151240],{"class":51,"line":135},[49,151237,14784],{"class":59},[49,151239,7988],{"class":2055},[49,151241,3831],{"class":55},[49,151243,151244,151247],{"class":51,"line":1306},[49,151245,151246],{"class":55},"    name: ",[49,151248,151249],{"class":66},"str\n",[49,151251,151252,151255],{"class":51,"line":1312},[49,151253,151254],{"class":55},"    age: ",[49,151256,151257],{"class":66},"int\n",[49,151259,151260,151263],{"class":51,"line":1403},[49,151261,151262],{"class":55},"    score: ",[49,151264,151265],{"class":66},"float\n",[49,151267,151268],{"class":51,"line":1409},[49,151269,2492],{"emptyLinePlaceholder":151},[49,151271,151272],{"class":51,"line":1421},[49,151273,2492],{"emptyLinePlaceholder":151},[49,151275,151276,151278,151280,151282,151284,151286,151288,151290,151292],{"class":51,"line":1704},[49,151277,149544],{"class":55},[49,151279,60],{"class":59},[49,151281,149948],{"class":55},[49,151283,149951],{"class":328},[49,151285,12525],{"class":55},[49,151287,869],{"class":66},[49,151289,12525],{"class":55},[49,151291,1208],{"class":66},[49,151293,81],{"class":55},[49,151295,151296,151298],{"class":51,"line":1709},[49,151297,30504],{"class":66},[49,151299,150105],{"class":55},[14,151301,151302,151303,436,151305,151308],{},"它会自动生成 ",[46,151304,30918],{},[46,151306,151307],{},"__repr__"," 等方法。适合数据模型类。",[166,151310,151312],{"id":151311},"_1115-小案例学生类","11.15 小案例：学生类",[39,151314,151316],{"className":41,"code":151315,"language":43,"meta":44,"style":44},"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",[46,151317,151318,151326,151335,151347,151357,151367,151377,151381,151390,151403,151407,151416,151422,151434,151446,151458,151470,151474,151478,151484,151494,151503,151513,151521,151529,151538,151542,151546,151554,151590,151594,151598,151623,151630],{"__ignoreMap":44},[49,151319,151320,151322,151324],{"class":51,"line":52},[49,151321,14784],{"class":59},[49,151323,7988],{"class":2055},[49,151325,3831],{"class":55},[49,151327,151328,151330,151332],{"class":51,"line":84},[49,151329,30890],{"class":59},[49,151331,30893],{"class":66},[49,151333,151334],{"class":55},"(self, student_id, name, age, score):\n",[49,151336,151337,151339,151342,151344],{"class":51,"line":109},[49,151338,30934],{"class":66},[49,151340,151341],{"class":55},".student_id ",[49,151343,60],{"class":59},[49,151345,151346],{"class":55}," student_id\n",[49,151348,151349,151351,151353,151355],{"class":51,"line":120},[49,151350,30934],{"class":66},[49,151352,149853],{"class":55},[49,151354,60],{"class":59},[49,151356,149858],{"class":55},[49,151358,151359,151361,151363,151365],{"class":51,"line":135},[49,151360,30934],{"class":66},[49,151362,149865],{"class":55},[49,151364,60],{"class":59},[49,151366,149870],{"class":55},[49,151368,151369,151371,151373,151375],{"class":51,"line":1306},[49,151370,30934],{"class":66},[49,151372,149877],{"class":55},[49,151374,60],{"class":59},[49,151376,1671],{"class":55},[49,151378,151379],{"class":51,"line":1312},[49,151380,2492],{"emptyLinePlaceholder":151},[49,151382,151383,151385,151388],{"class":51,"line":1403},[49,151384,30890],{"class":59},[49,151386,151387],{"class":2055}," is_passed",[49,151389,30896],{"class":55},[49,151391,151392,151394,151396,151398,151400],{"class":51,"line":1409},[49,151393,14842],{"class":59},[49,151395,38962],{"class":66},[49,151397,149877],{"class":55},[49,151399,1802],{"class":59},[49,151401,151402],{"class":66}," 60\n",[49,151404,151405],{"class":51,"line":1421},[49,151406,2492],{"emptyLinePlaceholder":151},[49,151408,151409,151411,151414],{"class":51,"line":1704},[49,151410,30890],{"class":59},[49,151412,151413],{"class":2055}," to_dict",[49,151415,30896],{"class":55},[49,151417,151418,151420],{"class":51,"line":1709},[49,151419,14842],{"class":59},[49,151421,15662],{"class":55},[49,151423,151424,151427,151429,151431],{"class":51,"line":1715},[49,151425,151426],{"class":328},"            \"student_id\"",[49,151428,51526],{"class":55},[49,151430,30912],{"class":66},[49,151432,151433],{"class":55},".student_id,\n",[49,151435,151436,151439,151441,151443],{"class":51,"line":1720},[49,151437,151438],{"class":328},"            \"name\"",[49,151440,51526],{"class":55},[49,151442,30912],{"class":66},[49,151444,151445],{"class":55},".name,\n",[49,151447,151448,151451,151453,151455],{"class":51,"line":1734},[49,151449,151450],{"class":328},"            \"age\"",[49,151452,51526],{"class":55},[49,151454,30912],{"class":66},[49,151456,151457],{"class":55},".age,\n",[49,151459,151460,151463,151465,151467],{"class":51,"line":1739},[49,151461,151462],{"class":328},"            \"score\"",[49,151464,51526],{"class":55},[49,151466,30912],{"class":66},[49,151468,151469],{"class":55},".score,\n",[49,151471,151472],{"class":51,"line":1745},[49,151473,2621],{"class":55},[49,151475,151476],{"class":51,"line":1766},[49,151477,2492],{"emptyLinePlaceholder":151},[49,151479,151480,151482],{"class":51,"line":1771},[49,151481,151077],{"class":2055},[49,151483,151080],{"class":66},[49,151485,151486,151488,151491],{"class":51,"line":1785},[49,151487,30890],{"class":59},[49,151489,151490],{"class":2055}," from_dict",[49,151492,151493],{"class":55},"(cls, data):\n",[49,151495,151496,151498,151500],{"class":51,"line":1790},[49,151497,14842],{"class":59},[49,151499,151097],{"class":66},[49,151501,151502],{"class":55},"(\n",[49,151504,151505,151508,151511],{"class":51,"line":1819},[49,151506,151507],{"class":55},"            data[",[49,151509,151510],{"class":328},"\"student_id\"",[49,151512,87925],{"class":55},[49,151514,151515,151517,151519],{"class":51,"line":1824},[49,151516,151507],{"class":55},[49,151518,62768],{"class":328},[49,151520,87925],{"class":55},[49,151522,151523,151525,151527],{"class":51,"line":1841},[49,151524,151507],{"class":55},[49,151526,69213],{"class":328},[49,151528,87925],{"class":55},[49,151530,151531,151533,151536],{"class":51,"line":1846},[49,151532,151507],{"class":55},[49,151534,151535],{"class":328},"\"score\"",[49,151537,87925],{"class":55},[49,151539,151540],{"class":51,"line":1851},[49,151541,38215],{"class":55},[49,151543,151544],{"class":51,"line":1856},[49,151545,2492],{"emptyLinePlaceholder":151},[49,151547,151548,151550,151552],{"class":51,"line":1870},[49,151549,30890],{"class":59},[49,151551,150044],{"class":66},[49,151553,30896],{"class":55},[49,151555,151556,151558,151560,151562,151564,151567,151569,151572,151574,151576,151578,151580,151582,151584,151586,151588],{"class":51,"line":1875},[49,151557,14842],{"class":59},[49,151559,150053],{"class":59},[49,151561,474],{"class":328},[49,151563,149515],{"class":66},[49,151565,151566],{"class":55},".student_id",[49,151568,1165],{"class":66},[49,151570,151571],{"class":66}," {self",[49,151573,80390],{"class":55},[49,151575,1165],{"class":66},[49,151577,151571],{"class":66},[49,151579,80402],{"class":55},[49,151581,1165],{"class":66},[49,151583,151571],{"class":66},[49,151585,149925],{"class":55},[49,151587,1165],{"class":66},[49,151589,25224],{"class":328},[49,151591,151592],{"class":51,"line":2669},[49,151593,2492],{"emptyLinePlaceholder":151},[49,151595,151596],{"class":51,"line":2683},[49,151597,2492],{"emptyLinePlaceholder":151},[49,151599,151600,151602,151604,151606,151609,151611,151613,151615,151617,151619,151621],{"class":51,"line":2691},[49,151601,149544],{"class":55},[49,151603,60],{"class":59},[49,151605,149948],{"class":55},[49,151607,151608],{"class":328},"\"001\"",[49,151610,12525],{"class":55},[49,151612,149951],{"class":328},[49,151614,12525],{"class":55},[49,151616,869],{"class":66},[49,151618,12525],{"class":55},[49,151620,1208],{"class":66},[49,151622,81],{"class":55},[49,151624,151625,151627],{"class":51,"line":2696},[49,151626,30504],{"class":66},[49,151628,151629],{"class":55},"(student.is_passed())\n",[49,151631,151632,151634],{"class":51,"line":2702},[49,151633,30504],{"class":66},[49,151635,151636],{"class":55},"(student.to_dict())\n",[14,151638,151639,101081,151642,151645],{},[46,151640,151641],{},"to_dict()",[46,151643,151644],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[166,151647,151649],{"id":151648},"_1116-易错点","11.16 易错点",[178,151651,151652,151658,151664,151669,151672,151675],{},[181,151653,151654,151655,28476],{},"类名推荐使用大驼峰，如 ",[46,151656,151657],{},"StudentManager",[181,151659,151660,151661,151663],{},"方法第一个参数必须写 ",[46,151662,30912],{},"，调用时不用传。",[181,151665,151666,151668],{},[46,151667,30918],{}," 不是普通方法，它在创建对象时自动执行。",[181,151670,151671],{},"私有属性不是绝对安全，只是约定和名称改写。",[181,151673,151674],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[181,151676,151677],{},"类中方法太多时，说明职责可能过重。",[166,151679,151681],{"id":151680},"_1117-本章练习","11.17 本章练习",[178,151683,151684,151690,151696,151701,151714],{},[181,151685,151686,151687,151689],{},"定义 ",[46,151688,149631],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[181,151691,151686,151692,151695],{},[46,151693,151694],{},"Account"," 类，实现存款、取款、查询余额。",[181,151697,151686,151698,151700],{},[46,151699,17316],{}," 类，计算圆的周长和面积。",[181,151702,151686,151703,436,151706,151709,151710,151713],{},[46,151704,151705],{},"Dog",[46,151707,151708],{},"Cat"," 类，并用同一个函数调用它们的 ",[46,151711,151712],{},"speak()"," 方法。",[181,151715,104429,151716,151718,151719,28476],{},[46,151717,151202],{}," 定义一个商品类 ",[46,151720,151721],{},"Product",[143,151723,151724],{},"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":44,"searchDepth":84,"depth":84,"links":151726},[151727,151728,151729,151730,151731,151732,151734,151735,151736,151737,151738,151739,151740,151744,151745,151746,151747],{"id":149395,"depth":84,"text":149396},{"id":149578,"depth":84,"text":149579},{"id":149642,"depth":84,"text":149643},{"id":149719,"depth":84,"text":149720},{"id":149818,"depth":84,"text":149819},{"id":149982,"depth":84,"text":151733},"11.6 str",{"id":150108,"depth":84,"text":150109},{"id":150374,"depth":84,"text":150375},{"id":150488,"depth":84,"text":150489},{"id":150643,"depth":84,"text":150644},{"id":150767,"depth":84,"text":150768},{"id":150883,"depth":84,"text":150884},{"id":151032,"depth":84,"text":151033,"children":151741},[151742,151743],{"id":151036,"depth":109,"text":151037},{"id":151118,"depth":109,"text":151119},{"id":151196,"depth":84,"text":151197},{"id":151311,"depth":84,"text":151312},{"id":151648,"depth":84,"text":151649},{"id":151680,"depth":84,"text":151681},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149387,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151754,"title":151755,"body":151756,"description":148,"extension":149,"meta":155069,"navigation":151,"path":155070,"seo":155071,"stem":155072,"__hash__":155073},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151757,"toc":155045},[151758,151761,151765,151768,151771,151800,151803,151811,151815,151819,151822,151845,151848,151854,151858,153304,153307,153328,153332,153335,153347,153350,153534,153537,153663,153666,153670,153674,153810,153814,153900,153904,153986,153990,154027,154031,154220,154224,154227,154457,154461,154464,154645,154648,154652,154655,154661,154664,154690,154694,154697,154711,154714,154739,154742,154756,154759,154776,154779,154796,154799,154816,154820,154846,154850,154873,154877,154880,154882,154888,154890,154911,154914,154920,154926,154930,154933,155009,155012,155016,155042],[10,151759,151755],{"id":151760},"_12-综合案例与复习路线",[166,151762,151764],{"id":151763},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151766,151767],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151769,151770],{},"一个合格的入门综合项目最好覆盖：",[178,151772,151773,151776,151779,151782,151785,151788,151791,151794,151797],{},[181,151774,151775],{},"输入输出。",[181,151777,151778],{},"判断和循环。",[181,151780,151781],{},"函数拆分。",[181,151783,151784],{},"列表、字典等容器。",[181,151786,151787],{},"文件持久化。",[181,151789,151790],{},"异常处理。",[181,151792,151793],{},"模块拆分。",[181,151795,151796],{},"可选：面向对象。",[181,151798,151799],{},"可选：数据可视化。",[14,151801,151802],{},"本章整理两个方向：",[178,151804,151805,151808],{},[181,151806,151807],{},"学生管理系统。",[181,151809,151810],{},"销售数据统计和可视化。",[166,151812,151814],{"id":151813},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[195,151816,151818],{"id":151817},"_1221-需求","12.2.1 需求",[14,151820,151821],{},"实现一个命令行学生管理系统：",[178,151823,151824,151827,151830,151833,151836,151839,151842],{},[181,151825,151826],{},"添加学生。",[181,151828,151829],{},"删除学生。",[181,151831,151832],{},"修改学生。",[181,151834,151835],{},"查询学生。",[181,151837,151838],{},"显示所有学生。",[181,151840,151841],{},"保存到 JSON 文件。",[181,151843,151844],{},"程序启动时自动读取 JSON 文件。",[14,151846,151847],{},"学生字段：",[39,151849,151852],{"className":151850,"code":151851,"language":5278,"meta":44},[5276],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[46,151853,151851],{"__ignoreMap":44},[166,151855,151857],{"id":151856},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[39,151859,151861],{"className":41,"code":151860,"language":43,"meta":44,"style":44},"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",[46,151862,151863,151869,151879,151883,151897,151901,151905,151914,151926,151932,151936,151942,151973,151983,151990,152001,152007,152011,152015,152025,152056,152082,152086,152090,152099,152110,152121,152132,152143,152154,152165,152176,152180,152184,152194,152206,152222,152229,152236,152240,152244,152254,152262,152269,152282,152292,152303,152307,152311,152320,152328,152334,152346,152354,152365,152369,152373,152382,152398,152402,152409,152420,152425,152429,152445,152460,152475,152479,152484,152492,152500,152508,152516,152520,152525,152536,152540,152544,152553,152568,152578,152582,152594,152605,152609,152613,152618,152622,152633,152637,152641,152650,152665,152673,152677,152689,152699,152703,152707,152722,152735,152748,152752,152765,152777,152789,152793,152797,152808,152812,152816,152825,152840,152848,152852,152864,152874,152878,152882,152887,152891,152895,152905,152911,152933,152952,152971,152990,152995,152999,153003,153012,153020,153031,153035,153039,153065,153075,153080,153084,153088,153096,153106,153110,153118,153123,153139,153143,153157,153162,153176,153181,153194,153199,153212,153217,153230,153235,153248,153259,153263,153269,153280,153284,153288,153300],{"__ignoreMap":44},[49,151864,151865,151867],{"class":51,"line":52},[49,151866,30481],{"class":59},[49,151868,147154],{"class":55},[49,151870,151871,151873,151875,151877],{"class":51,"line":84},[49,151872,30826],{"class":59},[49,151874,108374],{"class":55},[49,151876,30481],{"class":59},[49,151878,108379],{"class":55},[49,151880,151881],{"class":51,"line":109},[49,151882,2492],{"emptyLinePlaceholder":151},[49,151884,151885,151888,151890,151892,151895],{"class":51,"line":120},[49,151886,151887],{"class":66},"DATA_FILE",[49,151889,13654],{"class":59},[49,151891,108608],{"class":55},[49,151893,151894],{"class":328},"\"students.json\"",[49,151896,81],{"class":55},[49,151898,151899],{"class":51,"line":135},[49,151900,2492],{"emptyLinePlaceholder":151},[49,151902,151903],{"class":51,"line":1306},[49,151904,2492],{"emptyLinePlaceholder":151},[49,151906,151907,151909,151912],{"class":51,"line":1312},[49,151908,32036],{"class":59},[49,151910,151911],{"class":2055}," load_students",[49,151913,32042],{"class":55},[49,151915,151916,151918,151920,151923],{"class":51,"line":1403},[49,151917,3193],{"class":59},[49,151919,39019],{"class":59},[49,151921,151922],{"class":66}," DATA_FILE",[49,151924,151925],{"class":55},".exists():\n",[49,151927,151928,151930],{"class":51,"line":1409},[49,151929,14842],{"class":59},[49,151931,51927],{"class":55},[49,151933,151934],{"class":51,"line":1421},[49,151935,2492],{"emptyLinePlaceholder":151},[49,151937,151938,151940],{"class":51,"line":1704},[49,151939,125847],{"class":59},[49,151941,3831],{"class":55},[49,151943,151944,151947,151949,151951,151953,151955,151957,151959,151961,151963,151965,151967,151969,151971],{"class":51,"line":1709},[49,151945,151946],{"class":59},"        with",[49,151948,146854],{"class":66},[49,151950,228],{"class":55},[49,151952,151887],{"class":66},[49,151954,12525],{"class":55},[49,151956,146864],{"class":328},[49,151958,12525],{"class":55},[49,151960,146869],{"class":126},[49,151962,60],{"class":59},[49,151964,146874],{"class":328},[49,151966,13804],{"class":55},[49,151968,31472],{"class":59},[49,151970,148216],{"class":126},[49,151972,3831],{"class":55},[49,151974,151975,151977,151979,151981],{"class":51,"line":1715},[49,151976,15822],{"class":59},[49,151978,148227],{"class":55},[49,151980,45443],{"class":126},[49,151982,81],{"class":55},[49,151984,151985,151987],{"class":51,"line":1720},[49,151986,125875],{"class":59},[49,151988,151989],{"class":55}," json.JSONDecodeError:\n",[49,151991,151992,151994,151996,151999],{"class":51,"line":1734},[49,151993,32540],{"class":66},[49,151995,228],{"class":55},[49,151997,151998],{"class":328},"\"数据文件格式错误，已使用空数据启动\"",[49,152000,81],{"class":55},[49,152002,152003,152005],{"class":51,"line":1739},[49,152004,14842],{"class":59},[49,152006,51927],{"class":55},[49,152008,152009],{"class":51,"line":1745},[49,152010,2492],{"emptyLinePlaceholder":151},[49,152012,152013],{"class":51,"line":1766},[49,152014,2492],{"emptyLinePlaceholder":151},[49,152016,152017,152019,152022],{"class":51,"line":1771},[49,152018,32036],{"class":59},[49,152020,152021],{"class":2055}," save_students",[49,152023,152024],{"class":55},"(students):\n",[49,152026,152027,152029,152031,152033,152035,152037,152040,152042,152044,152046,152048,152050,152052,152054],{"class":51,"line":1785},[49,152028,34267],{"class":59},[49,152030,146854],{"class":66},[49,152032,228],{"class":55},[49,152034,151887],{"class":66},[49,152036,12525],{"class":55},[49,152038,152039],{"class":328},"\"w\"",[49,152041,12525],{"class":55},[49,152043,146869],{"class":126},[49,152045,60],{"class":59},[49,152047,146874],{"class":328},[49,152049,13804],{"class":55},[49,152051,31472],{"class":59},[49,152053,148216],{"class":126},[49,152055,3831],{"class":55},[49,152057,152058,152061,152063,152065,152067,152069,152071,152073,152076,152078,152080],{"class":51,"line":1790},[49,152059,152060],{"class":55},"        json.dump(students, ",[49,152062,45443],{"class":126},[49,152064,12525],{"class":55},[49,152066,147200],{"class":126},[49,152068,60],{"class":59},[49,152070,34076],{"class":66},[49,152072,12525],{"class":55},[49,152074,152075],{"class":126},"indent",[49,152077,60],{"class":59},[49,152079,301],{"class":66},[49,152081,81],{"class":55},[49,152083,152084],{"class":51,"line":1819},[49,152085,2492],{"emptyLinePlaceholder":151},[49,152087,152088],{"class":51,"line":1824},[49,152089,2492],{"emptyLinePlaceholder":151},[49,152091,152092,152094,152097],{"class":51,"line":1841},[49,152093,32036],{"class":59},[49,152095,152096],{"class":2055}," show_menu",[49,152098,32042],{"class":55},[49,152100,152101,152103,152105,152108],{"class":51,"line":1846},[49,152102,31388],{"class":66},[49,152104,228],{"class":55},[49,152106,152107],{"class":328},"\"====== 学生管理系统 ======\"",[49,152109,81],{"class":55},[49,152111,152112,152114,152116,152119],{"class":51,"line":1851},[49,152113,31388],{"class":66},[49,152115,228],{"class":55},[49,152117,152118],{"class":328},"\"1. 添加学生\"",[49,152120,81],{"class":55},[49,152122,152123,152125,152127,152130],{"class":51,"line":1856},[49,152124,31388],{"class":66},[49,152126,228],{"class":55},[49,152128,152129],{"class":328},"\"2. 删除学生\"",[49,152131,81],{"class":55},[49,152133,152134,152136,152138,152141],{"class":51,"line":1870},[49,152135,31388],{"class":66},[49,152137,228],{"class":55},[49,152139,152140],{"class":328},"\"3. 修改学生\"",[49,152142,81],{"class":55},[49,152144,152145,152147,152149,152152],{"class":51,"line":1875},[49,152146,31388],{"class":66},[49,152148,228],{"class":55},[49,152150,152151],{"class":328},"\"4. 查询学生\"",[49,152153,81],{"class":55},[49,152155,152156,152158,152160,152163],{"class":51,"line":2669},[49,152157,31388],{"class":66},[49,152159,228],{"class":55},[49,152161,152162],{"class":328},"\"5. 显示所有学生\"",[49,152164,81],{"class":55},[49,152166,152167,152169,152171,152174],{"class":51,"line":2683},[49,152168,31388],{"class":66},[49,152170,228],{"class":55},[49,152172,152173],{"class":328},"\"0. 退出系统\"",[49,152175,81],{"class":55},[49,152177,152178],{"class":51,"line":2691},[49,152179,2492],{"emptyLinePlaceholder":151},[49,152181,152182],{"class":51,"line":2696},[49,152183,2492],{"emptyLinePlaceholder":151},[49,152185,152186,152188,152191],{"class":51,"line":2702},[49,152187,32036],{"class":59},[49,152189,152190],{"class":2055}," find_student",[49,152192,152193],{"class":55},"(students, student_id):\n",[49,152195,152196,152198,152201,152203],{"class":51,"line":2708},[49,152197,3293],{"class":59},[49,152199,152200],{"class":55}," student ",[49,152202,26134],{"class":59},[49,152204,152205],{"class":55}," students:\n",[49,152207,152208,152210,152213,152215,152217,152219],{"class":51,"line":2713},[49,152209,2589],{"class":59},[49,152211,152212],{"class":55}," student[",[49,152214,151510],{"class":328},[49,152216,4535],{"class":55},[49,152218,3041],{"class":59},[49,152220,152221],{"class":55}," student_id:\n",[49,152223,152224,152226],{"class":51,"line":8038},[49,152225,15822],{"class":59},[49,152227,152228],{"class":55}," student\n",[49,152230,152231,152233],{"class":51,"line":8062},[49,152232,4182],{"class":59},[49,152234,152235],{"class":66}," None\n",[49,152237,152238],{"class":51,"line":8067},[49,152239,2492],{"emptyLinePlaceholder":151},[49,152241,152242],{"class":51,"line":8073},[49,152243,2492],{"emptyLinePlaceholder":151},[49,152245,152246,152248,152251],{"class":51,"line":8100},[49,152247,32036],{"class":59},[49,152249,152250],{"class":2055}," input_int",[49,152252,152253],{"class":55},"(prompt):\n",[49,152255,152256,152258,152260],{"class":51,"line":8105},[49,152257,2343],{"class":59},[49,152259,95355],{"class":66},[49,152261,3831],{"class":55},[49,152263,152264,152267],{"class":51,"line":8111},[49,152265,152266],{"class":59},"        try",[49,152268,3831],{"class":55},[49,152270,152271,152273,152275,152277,152279],{"class":51,"line":8123},[49,152272,15822],{"class":59},[49,152274,2474],{"class":66},[49,152276,228],{"class":55},[49,152278,53910],{"class":66},[49,152280,152281],{"class":55},"(prompt))\n",[49,152283,152284,152287,152290],{"class":51,"line":8135},[49,152285,152286],{"class":59},"        except",[49,152288,152289],{"class":66}," ValueError",[49,152291,3831],{"class":55},[49,152293,152294,152296,152298,152301],{"class":51,"line":8147},[49,152295,34739],{"class":66},[49,152297,228],{"class":55},[49,152299,152300],{"class":328},"\"请输入整数\"",[49,152302,81],{"class":55},[49,152304,152305],{"class":51,"line":9806},[49,152306,2492],{"emptyLinePlaceholder":151},[49,152308,152309],{"class":51,"line":9831},[49,152310,2492],{"emptyLinePlaceholder":151},[49,152312,152313,152315,152318],{"class":51,"line":9854},[49,152314,32036],{"class":59},[49,152316,152317],{"class":2055}," input_float",[49,152319,152253],{"class":55},[49,152321,152322,152324,152326],{"class":51,"line":9878},[49,152323,2343],{"class":59},[49,152325,95355],{"class":66},[49,152327,3831],{"class":55},[49,152329,152330,152332],{"class":51,"line":9883},[49,152331,152266],{"class":59},[49,152333,3831],{"class":55},[49,152335,152336,152338,152340,152342,152344],{"class":51,"line":9888},[49,152337,15822],{"class":59},[49,152339,109860],{"class":66},[49,152341,228],{"class":55},[49,152343,53910],{"class":66},[49,152345,152281],{"class":55},[49,152347,152348,152350,152352],{"class":51,"line":9893},[49,152349,152286],{"class":59},[49,152351,152289],{"class":66},[49,152353,3831],{"class":55},[49,152355,152356,152358,152360,152363],{"class":51,"line":9902},[49,152357,34739],{"class":66},[49,152359,228],{"class":55},[49,152361,152362],{"class":328},"\"请输入数字\"",[49,152364,81],{"class":55},[49,152366,152367],{"class":51,"line":9907},[49,152368,2492],{"emptyLinePlaceholder":151},[49,152370,152371],{"class":51,"line":9913},[49,152372,2492],{"emptyLinePlaceholder":151},[49,152374,152375,152377,152380],{"class":51,"line":9934},[49,152376,32036],{"class":59},[49,152378,152379],{"class":2055}," add_student",[49,152381,152024],{"class":55},[49,152383,152384,152387,152389,152391,152393,152396],{"class":51,"line":9940},[49,152385,152386],{"class":55},"    student_id ",[49,152388,60],{"class":59},[49,152390,60694],{"class":66},[49,152392,228],{"class":55},[49,152394,152395],{"class":328},"\"请输入学号:\"",[49,152397,81],{"class":55},[49,152399,152400],{"class":51,"line":9954},[49,152401,2492],{"emptyLinePlaceholder":151},[49,152403,152404,152406],{"class":51,"line":9960},[49,152405,3193],{"class":59},[49,152407,152408],{"class":55}," find_student(students, student_id):\n",[49,152410,152411,152413,152415,152418],{"class":51,"line":9987},[49,152412,32540],{"class":66},[49,152414,228],{"class":55},[49,152416,152417],{"class":328},"\"学号已存在\"",[49,152419,81],{"class":55},[49,152421,152422],{"class":51,"line":9996},[49,152423,152424],{"class":59},"        return\n",[49,152426,152427],{"class":51,"line":10002},[49,152428,2492],{"emptyLinePlaceholder":151},[49,152430,152431,152434,152436,152438,152440,152443],{"class":51,"line":10010},[49,152432,152433],{"class":55},"    name ",[49,152435,60],{"class":59},[49,152437,60694],{"class":66},[49,152439,228],{"class":55},[49,152441,152442],{"class":328},"\"请输入姓名:\"",[49,152444,81],{"class":55},[49,152446,152447,152450,152452,152455,152458],{"class":51,"line":10015},[49,152448,152449],{"class":55},"    age ",[49,152451,60],{"class":59},[49,152453,152454],{"class":55}," input_int(",[49,152456,152457],{"class":328},"\"请输入年龄:\"",[49,152459,81],{"class":55},[49,152461,152462,152465,152467,152470,152473],{"class":51,"line":16694},[49,152463,152464],{"class":55},"    score ",[49,152466,60],{"class":59},[49,152468,152469],{"class":55}," input_float(",[49,152471,152472],{"class":328},"\"请输入成绩:\"",[49,152474,81],{"class":55},[49,152476,152477],{"class":51,"line":16700},[49,152478,2492],{"emptyLinePlaceholder":151},[49,152480,152481],{"class":51,"line":16723},[49,152482,152483],{"class":55},"    students.append({\n",[49,152485,152486,152489],{"class":51,"line":16729},[49,152487,152488],{"class":328},"        \"student_id\"",[49,152490,152491],{"class":55},": student_id,\n",[49,152493,152494,152497],{"class":51,"line":16752},[49,152495,152496],{"class":328},"        \"name\"",[49,152498,152499],{"class":55},": name,\n",[49,152501,152502,152505],{"class":51,"line":16766},[49,152503,152504],{"class":328},"        \"age\"",[49,152506,152507],{"class":55},": age,\n",[49,152509,152510,152513],{"class":51,"line":16786},[49,152511,152512],{"class":328},"        \"score\"",[49,152514,152515],{"class":55},": score,\n",[49,152517,152518],{"class":51,"line":16792},[49,152519,33550],{"class":55},[49,152521,152522],{"class":51,"line":16803},[49,152523,152524],{"class":55},"    save_students(students)\n",[49,152526,152527,152529,152531,152534],{"class":51,"line":16826},[49,152528,31388],{"class":66},[49,152530,228],{"class":55},[49,152532,152533],{"class":328},"\"添加成功\"",[49,152535,81],{"class":55},[49,152537,152538],{"class":51,"line":16848},[49,152539,2492],{"emptyLinePlaceholder":151},[49,152541,152542],{"class":51,"line":16853},[49,152543,2492],{"emptyLinePlaceholder":151},[49,152545,152546,152548,152551],{"class":51,"line":16859},[49,152547,32036],{"class":59},[49,152549,152550],{"class":2055}," delete_student",[49,152552,152024],{"class":55},[49,152554,152555,152557,152559,152561,152563,152566],{"class":51,"line":16873},[49,152556,152386],{"class":55},[49,152558,60],{"class":59},[49,152560,60694],{"class":66},[49,152562,228],{"class":55},[49,152564,152565],{"class":328},"\"请输入要删除的学号:\"",[49,152567,81],{"class":55},[49,152569,152570,152573,152575],{"class":51,"line":16886},[49,152571,152572],{"class":55},"    student ",[49,152574,60],{"class":59},[49,152576,152577],{"class":55}," find_student(students, student_id)\n",[49,152579,152580],{"class":51,"line":16891},[49,152581,2492],{"emptyLinePlaceholder":151},[49,152583,152584,152586,152588,152590,152592],{"class":51,"line":16905},[49,152585,3193],{"class":59},[49,152587,152200],{"class":55},[49,152589,39016],{"class":59},[49,152591,39022],{"class":66},[49,152593,3831],{"class":55},[49,152595,152596,152598,152600,152603],{"class":51,"line":16910},[49,152597,32540],{"class":66},[49,152599,228],{"class":55},[49,152601,152602],{"class":328},"\"学生不存在\"",[49,152604,81],{"class":55},[49,152606,152607],{"class":51,"line":16916},[49,152608,152424],{"class":59},[49,152610,152611],{"class":51,"line":16921},[49,152612,2492],{"emptyLinePlaceholder":151},[49,152614,152615],{"class":51,"line":16935},[49,152616,152617],{"class":55},"    students.remove(student)\n",[49,152619,152620],{"class":51,"line":16940},[49,152621,152524],{"class":55},[49,152623,152624,152626,152628,152631],{"class":51,"line":16945},[49,152625,31388],{"class":66},[49,152627,228],{"class":55},[49,152629,152630],{"class":328},"\"删除成功\"",[49,152632,81],{"class":55},[49,152634,152635],{"class":51,"line":16959},[49,152636,2492],{"emptyLinePlaceholder":151},[49,152638,152639],{"class":51,"line":16971},[49,152640,2492],{"emptyLinePlaceholder":151},[49,152642,152643,152645,152648],{"class":51,"line":16976},[49,152644,32036],{"class":59},[49,152646,152647],{"class":2055}," update_student",[49,152649,152024],{"class":55},[49,152651,152652,152654,152656,152658,152660,152663],{"class":51,"line":16989},[49,152653,152386],{"class":55},[49,152655,60],{"class":59},[49,152657,60694],{"class":66},[49,152659,228],{"class":55},[49,152661,152662],{"class":328},"\"请输入要修改的学号:\"",[49,152664,81],{"class":55},[49,152666,152667,152669,152671],{"class":51,"line":16994},[49,152668,152572],{"class":55},[49,152670,60],{"class":59},[49,152672,152577],{"class":55},[49,152674,152675],{"class":51,"line":16999},[49,152676,2492],{"emptyLinePlaceholder":151},[49,152678,152679,152681,152683,152685,152687],{"class":51,"line":17004},[49,152680,3193],{"class":59},[49,152682,152200],{"class":55},[49,152684,39016],{"class":59},[49,152686,39022],{"class":66},[49,152688,3831],{"class":55},[49,152690,152691,152693,152695,152697],{"class":51,"line":17017},[49,152692,32540],{"class":66},[49,152694,228],{"class":55},[49,152696,152602],{"class":328},[49,152698,81],{"class":55},[49,152700,152701],{"class":51,"line":17022},[49,152702,152424],{"class":59},[49,152704,152705],{"class":51,"line":32722},[49,152706,2492],{"emptyLinePlaceholder":151},[49,152708,152709,152711,152713,152715,152717,152720],{"class":51,"line":32728},[49,152710,152433],{"class":55},[49,152712,60],{"class":59},[49,152714,60694],{"class":66},[49,152716,228],{"class":55},[49,152718,152719],{"class":328},"\"请输入新姓名:\"",[49,152721,81],{"class":55},[49,152723,152724,152726,152728,152730,152733],{"class":51,"line":32734},[49,152725,152449],{"class":55},[49,152727,60],{"class":59},[49,152729,152454],{"class":55},[49,152731,152732],{"class":328},"\"请输入新年龄:\"",[49,152734,81],{"class":55},[49,152736,152737,152739,152741,152743,152746],{"class":51,"line":32740},[49,152738,152464],{"class":55},[49,152740,60],{"class":59},[49,152742,152469],{"class":55},[49,152744,152745],{"class":328},"\"请输入新成绩:\"",[49,152747,81],{"class":55},[49,152749,152750],{"class":51,"line":32746},[49,152751,2492],{"emptyLinePlaceholder":151},[49,152753,152754,152757,152759,152761,152763],{"class":51,"line":32757},[49,152755,152756],{"class":55},"    student[",[49,152758,62768],{"class":328},[49,152760,4535],{"class":55},[49,152762,60],{"class":59},[49,152764,149858],{"class":55},[49,152766,152767,152769,152771,152773,152775],{"class":51,"line":32763},[49,152768,152756],{"class":55},[49,152770,69213],{"class":328},[49,152772,4535],{"class":55},[49,152774,60],{"class":59},[49,152776,149870],{"class":55},[49,152778,152779,152781,152783,152785,152787],{"class":51,"line":32783},[49,152780,152756],{"class":55},[49,152782,151535],{"class":328},[49,152784,4535],{"class":55},[49,152786,60],{"class":59},[49,152788,1671],{"class":55},[49,152790,152791],{"class":51,"line":32789},[49,152792,2492],{"emptyLinePlaceholder":151},[49,152794,152795],{"class":51,"line":32800},[49,152796,152524],{"class":55},[49,152798,152799,152801,152803,152806],{"class":51,"line":32806},[49,152800,31388],{"class":66},[49,152802,228],{"class":55},[49,152804,152805],{"class":328},"\"修改成功\"",[49,152807,81],{"class":55},[49,152809,152810],{"class":51,"line":32812},[49,152811,2492],{"emptyLinePlaceholder":151},[49,152813,152814],{"class":51,"line":32818},[49,152815,2492],{"emptyLinePlaceholder":151},[49,152817,152818,152820,152823],{"class":51,"line":32824},[49,152819,32036],{"class":59},[49,152821,152822],{"class":2055}," query_student",[49,152824,152024],{"class":55},[49,152826,152827,152829,152831,152833,152835,152838],{"class":51,"line":32830},[49,152828,152386],{"class":55},[49,152830,60],{"class":59},[49,152832,60694],{"class":66},[49,152834,228],{"class":55},[49,152836,152837],{"class":328},"\"请输入要查询的学号:\"",[49,152839,81],{"class":55},[49,152841,152842,152844,152846],{"class":51,"line":32836},[49,152843,152572],{"class":55},[49,152845,60],{"class":59},[49,152847,152577],{"class":55},[49,152849,152850],{"class":51,"line":32842},[49,152851,2492],{"emptyLinePlaceholder":151},[49,152853,152854,152856,152858,152860,152862],{"class":51,"line":32862},[49,152855,3193],{"class":59},[49,152857,152200],{"class":55},[49,152859,39016],{"class":59},[49,152861,39022],{"class":66},[49,152863,3831],{"class":55},[49,152865,152866,152868,152870,152872],{"class":51,"line":32868},[49,152867,32540],{"class":66},[49,152869,228],{"class":55},[49,152871,152602],{"class":328},[49,152873,81],{"class":55},[49,152875,152876],{"class":51,"line":32884},[49,152877,152424],{"class":59},[49,152879,152880],{"class":51,"line":32890},[49,152881,2492],{"emptyLinePlaceholder":151},[49,152883,152884],{"class":51,"line":32904},[49,152885,152886],{"class":55},"    print_student(student)\n",[49,152888,152889],{"class":51,"line":32910},[49,152890,2492],{"emptyLinePlaceholder":151},[49,152892,152893],{"class":51,"line":32925},[49,152894,2492],{"emptyLinePlaceholder":151},[49,152896,152897,152899,152902],{"class":51,"line":32931},[49,152898,32036],{"class":59},[49,152900,152901],{"class":2055}," print_student",[49,152903,152904],{"class":55},"(student):\n",[49,152906,152907,152909],{"class":51,"line":32940},[49,152908,31388],{"class":66},[49,152910,151502],{"class":55},[49,152912,152913,152916,152918,152920,152923,152926,152928,152931],{"class":51,"line":32946},[49,152914,152915],{"class":59},"        f",[49,152917,474],{"class":328},[49,152919,1115],{"class":66},[49,152921,152922],{"class":55},"student[",[49,152924,152925],{"class":328},"'student_id'",[49,152927,1159],{"class":55},[49,152929,152930],{"class":66},"}\\t",[49,152932,25224],{"class":328},[49,152934,152935,152937,152939,152941,152943,152946,152948,152950],{"class":51,"line":32955},[49,152936,152915],{"class":59},[49,152938,474],{"class":328},[49,152940,1115],{"class":66},[49,152942,152922],{"class":55},[49,152944,152945],{"class":328},"'name'",[49,152947,1159],{"class":55},[49,152949,152930],{"class":66},[49,152951,25224],{"class":328},[49,152953,152954,152956,152958,152960,152962,152965,152967,152969],{"class":51,"line":32961},[49,152955,152915],{"class":59},[49,152957,474],{"class":328},[49,152959,1115],{"class":66},[49,152961,152922],{"class":55},[49,152963,152964],{"class":328},"'age'",[49,152966,1159],{"class":55},[49,152968,152930],{"class":66},[49,152970,25224],{"class":328},[49,152972,152973,152975,152977,152979,152981,152984,152986,152988],{"class":51,"line":32967},[49,152974,152915],{"class":59},[49,152976,474],{"class":328},[49,152978,1115],{"class":66},[49,152980,152922],{"class":55},[49,152982,152983],{"class":328},"'score'",[49,152985,1159],{"class":55},[49,152987,1165],{"class":66},[49,152989,25224],{"class":328},[49,152991,152992],{"class":51,"line":32976},[49,152993,152994],{"class":55},"    )\n",[49,152996,152997],{"class":51,"line":32982},[49,152998,2492],{"emptyLinePlaceholder":151},[49,153000,153001],{"class":51,"line":32993},[49,153002,2492],{"emptyLinePlaceholder":151},[49,153004,153005,153007,153010],{"class":51,"line":32999},[49,153006,32036],{"class":59},[49,153008,153009],{"class":2055}," show_all_students",[49,153011,152024],{"class":55},[49,153013,153014,153016,153018],{"class":51,"line":33018},[49,153015,3193],{"class":59},[49,153017,39019],{"class":59},[49,153019,152205],{"class":55},[49,153021,153022,153024,153026,153029],{"class":51,"line":33024},[49,153023,32540],{"class":66},[49,153025,228],{"class":55},[49,153027,153028],{"class":328},"\"暂无学生\"",[49,153030,81],{"class":55},[49,153032,153033],{"class":51,"line":33035},[49,153034,152424],{"class":59},[49,153036,153037],{"class":51,"line":33041},[49,153038,2492],{"emptyLinePlaceholder":151},[49,153040,153041,153043,153045,153048,153050,153053,153055,153058,153060,153063],{"class":51,"line":33061},[49,153042,31388],{"class":66},[49,153044,228],{"class":55},[49,153046,153047],{"class":328},"\"学号",[49,153049,1322],{"class":66},[49,153051,153052],{"class":328},"姓名",[49,153054,1322],{"class":66},[49,153056,153057],{"class":328},"年龄",[49,153059,1322],{"class":66},[49,153061,153062],{"class":328},"成绩\"",[49,153064,81],{"class":55},[49,153066,153067,153069,153071,153073],{"class":51,"line":33077},[49,153068,3293],{"class":59},[49,153070,152200],{"class":55},[49,153072,26134],{"class":59},[49,153074,152205],{"class":55},[49,153076,153077],{"class":51,"line":33083},[49,153078,153079],{"class":55},"        print_student(student)\n",[49,153081,153082],{"class":51,"line":33097},[49,153083,2492],{"emptyLinePlaceholder":151},[49,153085,153086],{"class":51,"line":33103},[49,153087,2492],{"emptyLinePlaceholder":151},[49,153089,153090,153092,153094],{"class":51,"line":33109},[49,153091,32036],{"class":59},[49,153093,2065],{"class":2055},[49,153095,32042],{"class":55},[49,153097,153098,153101,153103],{"class":51,"line":33120},[49,153099,153100],{"class":55},"    students ",[49,153102,60],{"class":59},[49,153104,153105],{"class":55}," load_students()\n",[49,153107,153108],{"class":51,"line":33126},[49,153109,2492],{"emptyLinePlaceholder":151},[49,153111,153112,153114,153116],{"class":51,"line":33132},[49,153113,2343],{"class":59},[49,153115,95355],{"class":66},[49,153117,3831],{"class":55},[49,153119,153120],{"class":51,"line":33142},[49,153121,153122],{"class":55},"        show_menu()\n",[49,153124,153125,153128,153130,153132,153134,153137],{"class":51,"line":33148},[49,153126,153127],{"class":55},"        choice ",[49,153129,60],{"class":59},[49,153131,60694],{"class":66},[49,153133,228],{"class":55},[49,153135,153136],{"class":328},"\"请输入操作:\"",[49,153138,81],{"class":55},[49,153140,153141],{"class":51,"line":33159},[49,153142,2492],{"emptyLinePlaceholder":151},[49,153144,153145,153147,153150,153152,153155],{"class":51,"line":33165},[49,153146,2589],{"class":59},[49,153148,153149],{"class":55}," choice ",[49,153151,3041],{"class":59},[49,153153,153154],{"class":328}," \"1\"",[49,153156,3831],{"class":55},[49,153158,153159],{"class":51,"line":33175},[49,153160,153161],{"class":55},"            add_student(students)\n",[49,153163,153164,153167,153169,153171,153174],{"class":51,"line":33180},[49,153165,153166],{"class":59},"        elif",[49,153168,153149],{"class":55},[49,153170,3041],{"class":59},[49,153172,153173],{"class":328}," \"2\"",[49,153175,3831],{"class":55},[49,153177,153178],{"class":51,"line":33186},[49,153179,153180],{"class":55},"            delete_student(students)\n",[49,153182,153183,153185,153187,153189,153192],{"class":51,"line":33235},[49,153184,153166],{"class":59},[49,153186,153149],{"class":55},[49,153188,3041],{"class":59},[49,153190,153191],{"class":328}," \"3\"",[49,153193,3831],{"class":55},[49,153195,153196],{"class":51,"line":33282},[49,153197,153198],{"class":55},"            update_student(students)\n",[49,153200,153201,153203,153205,153207,153210],{"class":51,"line":33287},[49,153202,153166],{"class":59},[49,153204,153149],{"class":55},[49,153206,3041],{"class":59},[49,153208,153209],{"class":328}," \"4\"",[49,153211,3831],{"class":55},[49,153213,153214],{"class":51,"line":33293},[49,153215,153216],{"class":55},"            query_student(students)\n",[49,153218,153219,153221,153223,153225,153228],{"class":51,"line":33312},[49,153220,153166],{"class":59},[49,153222,153149],{"class":55},[49,153224,3041],{"class":59},[49,153226,153227],{"class":328}," \"5\"",[49,153229,3831],{"class":55},[49,153231,153232],{"class":51,"line":33318},[49,153233,153234],{"class":55},"            show_all_students(students)\n",[49,153236,153237,153239,153241,153243,153246],{"class":51,"line":33338},[49,153238,153166],{"class":59},[49,153240,153149],{"class":55},[49,153242,3041],{"class":59},[49,153244,153245],{"class":328}," \"0\"",[49,153247,3831],{"class":55},[49,153249,153250,153252,153254,153257],{"class":51,"line":33344},[49,153251,34739],{"class":66},[49,153253,228],{"class":55},[49,153255,153256],{"class":328},"\"退出系统\"",[49,153258,81],{"class":55},[49,153260,153261],{"class":51,"line":33350},[49,153262,115161],{"class":59},[49,153264,153265,153267],{"class":51,"line":33360},[49,153266,2626],{"class":59},[49,153268,3831],{"class":55},[49,153270,153271,153273,153275,153278],{"class":51,"line":33365},[49,153272,34739],{"class":66},[49,153274,228],{"class":55},[49,153276,153277],{"class":328},"\"输入错误\"",[49,153279,81],{"class":55},[49,153281,153282],{"class":51,"line":33371},[49,153283,2492],{"emptyLinePlaceholder":151},[49,153285,153286],{"class":51,"line":33387},[49,153287,2492],{"emptyLinePlaceholder":151},[49,153289,153290,153292,153294,153296,153298],{"class":51,"line":33432},[49,153291,1623],{"class":59},[49,153293,31309],{"class":66},[49,153295,101622],{"class":59},[49,153297,101625],{"class":328},[49,153299,3831],{"class":55},[49,153301,153302],{"class":51,"line":33438},[49,153303,101632],{"class":55},[14,153305,153306],{},"这个项目串联了：",[178,153308,153309,153312,153315,153318,153321,153323],{},[181,153310,153311],{},"菜单循环。",[181,153313,153314],{},"函数封装。",[181,153316,153317],{},"列表字典。",[181,153319,153320],{},"JSON 读写。",[181,153322,151790],{},[181,153324,153325,28476],{},[46,153326,153327],{},"if __name__ == \"__main__\"",[166,153329,153331],{"id":153330},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153333,153334],{},"可以进一步拆成两个类：",[178,153336,153337,153342],{},[181,153338,153339,153341],{},[46,153340,149631],{},"：表示单个学生。",[181,153343,153344,153346],{},[46,153345,151657],{},"：负责学生增删改查和文件保存。",[14,153348,153349],{},"示意代码：",[39,153351,153353],{"className":41,"code":153352,"language":43,"meta":44,"style":44},"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",[46,153354,153355,153365,153369,153373,153377,153385,153392,153398,153404,153410,153414,153422,153428,153438,153448,153458,153468,153472,153476,153482,153490,153498,153506,153514,153522,153530],{"__ignoreMap":44},[49,153356,153357,153359,153361,153363],{"class":51,"line":52},[49,153358,30826],{"class":59},[49,153360,151215],{"class":55},[49,153362,30481],{"class":59},[49,153364,151220],{"class":55},[49,153366,153367],{"class":51,"line":84},[49,153368,2492],{"emptyLinePlaceholder":151},[49,153370,153371],{"class":51,"line":109},[49,153372,2492],{"emptyLinePlaceholder":151},[49,153374,153375],{"class":51,"line":120},[49,153376,151233],{"class":2055},[49,153378,153379,153381,153383],{"class":51,"line":135},[49,153380,14784],{"class":59},[49,153382,7988],{"class":2055},[49,153384,3831],{"class":55},[49,153386,153387,153390],{"class":51,"line":1306},[49,153388,153389],{"class":55},"    student_id: ",[49,153391,151249],{"class":66},[49,153393,153394,153396],{"class":51,"line":1312},[49,153395,151246],{"class":55},[49,153397,151249],{"class":66},[49,153399,153400,153402],{"class":51,"line":1403},[49,153401,151254],{"class":55},[49,153403,151257],{"class":66},[49,153405,153406,153408],{"class":51,"line":1409},[49,153407,151262],{"class":55},[49,153409,151265],{"class":66},[49,153411,153412],{"class":51,"line":1421},[49,153413,2492],{"emptyLinePlaceholder":151},[49,153415,153416,153418,153420],{"class":51,"line":1704},[49,153417,30890],{"class":59},[49,153419,151413],{"class":2055},[49,153421,30896],{"class":55},[49,153423,153424,153426],{"class":51,"line":1709},[49,153425,14842],{"class":59},[49,153427,15662],{"class":55},[49,153429,153430,153432,153434,153436],{"class":51,"line":1715},[49,153431,151426],{"class":328},[49,153433,51526],{"class":55},[49,153435,30912],{"class":66},[49,153437,151433],{"class":55},[49,153439,153440,153442,153444,153446],{"class":51,"line":1720},[49,153441,151438],{"class":328},[49,153443,51526],{"class":55},[49,153445,30912],{"class":66},[49,153447,151445],{"class":55},[49,153449,153450,153452,153454,153456],{"class":51,"line":1734},[49,153451,151450],{"class":328},[49,153453,51526],{"class":55},[49,153455,30912],{"class":66},[49,153457,151457],{"class":55},[49,153459,153460,153462,153464,153466],{"class":51,"line":1739},[49,153461,151462],{"class":328},[49,153463,51526],{"class":55},[49,153465,30912],{"class":66},[49,153467,151469],{"class":55},[49,153469,153470],{"class":51,"line":1745},[49,153471,2621],{"class":55},[49,153473,153474],{"class":51,"line":1766},[49,153475,2492],{"emptyLinePlaceholder":151},[49,153477,153478,153480],{"class":51,"line":1771},[49,153479,151077],{"class":2055},[49,153481,151080],{"class":66},[49,153483,153484,153486,153488],{"class":51,"line":1785},[49,153485,30890],{"class":59},[49,153487,151490],{"class":2055},[49,153489,151493],{"class":55},[49,153491,153492,153494,153496],{"class":51,"line":1790},[49,153493,14842],{"class":59},[49,153495,151097],{"class":66},[49,153497,151502],{"class":55},[49,153499,153500,153502,153504],{"class":51,"line":1819},[49,153501,151507],{"class":55},[49,153503,151510],{"class":328},[49,153505,87925],{"class":55},[49,153507,153508,153510,153512],{"class":51,"line":1824},[49,153509,151507],{"class":55},[49,153511,62768],{"class":328},[49,153513,87925],{"class":55},[49,153515,153516,153518,153520],{"class":51,"line":1841},[49,153517,151507],{"class":55},[49,153519,69213],{"class":328},[49,153521,87925],{"class":55},[49,153523,153524,153526,153528],{"class":51,"line":1846},[49,153525,151507],{"class":55},[49,153527,151535],{"class":328},[49,153529,87925],{"class":55},[49,153531,153532],{"class":51,"line":1851},[49,153533,38215],{"class":55},[14,153535,153536],{},"管理器示意：",[39,153538,153540],{"className":41,"code":153539,"language":43,"meta":44,"style":44},"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",[46,153541,153542,153551,153559,153570,153574,153584,153597,153608,153615,153621,153625,153634,153643,153649,153656],{"__ignoreMap":44},[49,153543,153544,153546,153549],{"class":51,"line":52},[49,153545,14784],{"class":59},[49,153547,153548],{"class":2055}," StudentManager",[49,153550,3831],{"class":55},[49,153552,153553,153555,153557],{"class":51,"line":84},[49,153554,30890],{"class":59},[49,153556,30893],{"class":66},[49,153558,30896],{"class":55},[49,153560,153561,153563,153566,153568],{"class":51,"line":109},[49,153562,30934],{"class":66},[49,153564,153565],{"class":55},".students ",[49,153567,60],{"class":59},[49,153569,51927],{"class":55},[49,153571,153572],{"class":51,"line":120},[49,153573,2492],{"emptyLinePlaceholder":151},[49,153575,153576,153578,153581],{"class":51,"line":135},[49,153577,30890],{"class":59},[49,153579,153580],{"class":2055}," find_by_id",[49,153582,153583],{"class":55},"(self, student_id):\n",[49,153585,153586,153588,153590,153592,153594],{"class":51,"line":1306},[49,153587,3495],{"class":59},[49,153589,152200],{"class":55},[49,153591,26134],{"class":59},[49,153593,38962],{"class":66},[49,153595,153596],{"class":55},".students:\n",[49,153598,153599,153601,153604,153606],{"class":51,"line":1312},[49,153600,4734],{"class":59},[49,153602,153603],{"class":55}," student.student_id ",[49,153605,3041],{"class":59},[49,153607,152221],{"class":55},[49,153609,153610,153613],{"class":51,"line":1403},[49,153611,153612],{"class":59},"                return",[49,153614,152228],{"class":55},[49,153616,153617,153619],{"class":51,"line":1409},[49,153618,14842],{"class":59},[49,153620,152235],{"class":66},[49,153622,153623],{"class":51,"line":1421},[49,153624,2492],{"emptyLinePlaceholder":151},[49,153626,153627,153629,153631],{"class":51,"line":1704},[49,153628,30890],{"class":59},[49,153630,5300],{"class":2055},[49,153632,153633],{"class":55},"(self, student):\n",[49,153635,153636,153638,153640],{"class":51,"line":1709},[49,153637,2589],{"class":59},[49,153639,38962],{"class":66},[49,153641,153642],{"class":55},".find_by_id(student.student_id):\n",[49,153644,153645,153647],{"class":51,"line":1715},[49,153646,15822],{"class":59},[49,153648,125870],{"class":66},[49,153650,153651,153653],{"class":51,"line":1720},[49,153652,30934],{"class":66},[49,153654,153655],{"class":55},".students.append(student)\n",[49,153657,153658,153660],{"class":51,"line":1734},[49,153659,14842],{"class":59},[49,153661,153662],{"class":66}," True\n",[14,153664,153665],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[166,153667,153669],{"id":153668},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[195,153671,153673],{"id":153672},"_1251-数据结构","12.5.1 数据结构",[39,153675,153677],{"className":41,"code":153676,"language":43,"meta":44,"style":44},"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",[46,153678,153679,153687,153718,153748,153777,153806],{"__ignoreMap":44},[49,153680,153681,153683,153685],{"class":51,"line":52},[49,153682,148528],{"class":55},[49,153684,60],{"class":59},[49,153686,55536],{"class":55},[49,153688,153689,153691,153693,153695,153697,153699,153702,153704,153707,153709,153711,153713,153716],{"class":51,"line":84},[49,153690,148448],{"class":55},[49,153692,148060],{"class":328},[49,153694,51526],{"class":55},[49,153696,148671],{"class":328},[49,153698,12525],{"class":55},[49,153700,153701],{"class":328},"\"category\"",[49,153703,51526],{"class":55},[49,153705,153706],{"class":328},"\"手机\"",[49,153708,12525],{"class":55},[49,153710,84173],{"class":328},[49,153712,51526],{"class":55},[49,153714,153715],{"class":66},"12000",[49,153717,5021],{"class":55},[49,153719,153720,153722,153724,153726,153728,153730,153732,153734,153737,153739,153741,153743,153746],{"class":51,"line":109},[49,153721,148448],{"class":55},[49,153723,148060],{"class":328},[49,153725,51526],{"class":55},[49,153727,148671],{"class":328},[49,153729,12525],{"class":55},[49,153731,153701],{"class":328},[49,153733,51526],{"class":55},[49,153735,153736],{"class":328},"\"电脑\"",[49,153738,12525],{"class":55},[49,153740,84173],{"class":328},[49,153742,51526],{"class":55},[49,153744,153745],{"class":66},"18000",[49,153747,5021],{"class":55},[49,153749,153750,153752,153754,153756,153758,153760,153762,153764,153766,153768,153770,153772,153775],{"class":51,"line":120},[49,153751,148448],{"class":55},[49,153753,148060],{"class":328},[49,153755,51526],{"class":55},[49,153757,148692],{"class":328},[49,153759,12525],{"class":55},[49,153761,153701],{"class":328},[49,153763,51526],{"class":55},[49,153765,153706],{"class":328},[49,153767,12525],{"class":55},[49,153769,84173],{"class":328},[49,153771,51526],{"class":55},[49,153773,153774],{"class":66},"15000",[49,153776,5021],{"class":55},[49,153778,153779,153781,153783,153785,153787,153789,153791,153793,153795,153797,153799,153801,153804],{"class":51,"line":135},[49,153780,148448],{"class":55},[49,153782,148060],{"class":328},[49,153784,51526],{"class":55},[49,153786,148692],{"class":328},[49,153788,12525],{"class":55},[49,153790,153701],{"class":328},[49,153792,51526],{"class":55},[49,153794,153736],{"class":328},[49,153796,12525],{"class":55},[49,153798,84173],{"class":328},[49,153800,51526],{"class":55},[49,153802,153803],{"class":66},"16000",[49,153805,5021],{"class":55},[49,153807,153808],{"class":51,"line":1306},[49,153809,33335],{"class":55},[195,153811,153813],{"id":153812},"_1252-按日期统计","12.5.2 按日期统计",[39,153815,153817],{"className":41,"code":153816,"language":43,"meta":44,"style":44},"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",[46,153818,153819,153828,153832,153843,153857,153870,153889,153893],{"__ignoreMap":44},[49,153820,153821,153824,153826],{"class":51,"line":52},[49,153822,153823],{"class":55},"daily_total ",[49,153825,60],{"class":59},[49,153827,87957],{"class":55},[49,153829,153830],{"class":51,"line":84},[49,153831,2492],{"emptyLinePlaceholder":151},[49,153833,153834,153836,153838,153840],{"class":51,"line":109},[49,153835,3117],{"class":59},[49,153837,148272],{"class":55},[49,153839,26134],{"class":59},[49,153841,153842],{"class":55}," sales:\n",[49,153844,153845,153848,153850,153853,153855],{"class":51,"line":120},[49,153846,153847],{"class":55},"    date ",[49,153849,60],{"class":59},[49,153851,153852],{"class":55}," item[",[49,153854,148060],{"class":328},[49,153856,33335],{"class":55},[49,153858,153859,153862,153864,153866,153868],{"class":51,"line":135},[49,153860,153861],{"class":55},"    amount ",[49,153863,60],{"class":59},[49,153865,153852],{"class":55},[49,153867,84173],{"class":328},[49,153869,33335],{"class":55},[49,153871,153872,153875,153877,153880,153882,153884,153886],{"class":51,"line":1306},[49,153873,153874],{"class":55},"    daily_total[date] ",[49,153876,60],{"class":59},[49,153878,153879],{"class":55}," daily_total.get(date, ",[49,153881,415],{"class":66},[49,153883,13804],{"class":55},[49,153885,700],{"class":59},[49,153887,153888],{"class":55}," amount\n",[49,153890,153891],{"class":51,"line":1312},[49,153892,2492],{"emptyLinePlaceholder":151},[49,153894,153895,153897],{"class":51,"line":1403},[49,153896,30504],{"class":66},[49,153898,153899],{"class":55},"(daily_total)\n",[195,153901,153903],{"id":153902},"_1253-按类别统计","12.5.3 按类别统计",[39,153905,153907],{"className":41,"code":153906,"language":43,"meta":44,"style":44},"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",[46,153908,153909,153918,153922,153932,153945,153957,153975,153979],{"__ignoreMap":44},[49,153910,153911,153914,153916],{"class":51,"line":52},[49,153912,153913],{"class":55},"category_total ",[49,153915,60],{"class":59},[49,153917,87957],{"class":55},[49,153919,153920],{"class":51,"line":84},[49,153921,2492],{"emptyLinePlaceholder":151},[49,153923,153924,153926,153928,153930],{"class":51,"line":109},[49,153925,3117],{"class":59},[49,153927,148272],{"class":55},[49,153929,26134],{"class":59},[49,153931,153842],{"class":55},[49,153933,153934,153937,153939,153941,153943],{"class":51,"line":120},[49,153935,153936],{"class":55},"    category ",[49,153938,60],{"class":59},[49,153940,153852],{"class":55},[49,153942,153701],{"class":328},[49,153944,33335],{"class":55},[49,153946,153947,153949,153951,153953,153955],{"class":51,"line":135},[49,153948,153861],{"class":55},[49,153950,60],{"class":59},[49,153952,153852],{"class":55},[49,153954,84173],{"class":328},[49,153956,33335],{"class":55},[49,153958,153959,153962,153964,153967,153969,153971,153973],{"class":51,"line":1306},[49,153960,153961],{"class":55},"    category_total[category] ",[49,153963,60],{"class":59},[49,153965,153966],{"class":55}," category_total.get(category, ",[49,153968,415],{"class":66},[49,153970,13804],{"class":55},[49,153972,700],{"class":59},[49,153974,153888],{"class":55},[49,153976,153977],{"class":51,"line":1312},[49,153978,2492],{"emptyLinePlaceholder":151},[49,153980,153981,153983],{"class":51,"line":1403},[49,153982,30504],{"class":66},[49,153984,153985],{"class":55},"(category_total)\n",[195,153987,153989],{"id":153988},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[39,153991,153993],{"className":41,"code":153992,"language":43,"meta":44,"style":44},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[46,153994,153995,154020],{"__ignoreMap":44},[49,153996,153997,154000,154002,154004,154007,154010,154013,154016,154018],{"class":51,"line":52},[49,153998,153999],{"class":55},"top_date, top_amount ",[49,154001,60],{"class":59},[49,154003,6041],{"class":66},[49,154005,154006],{"class":55},"(daily_total.items(), ",[49,154008,154009],{"class":126},"key",[49,154011,154012],{"class":59},"=lambda",[49,154014,154015],{"class":55}," item: item[",[49,154017,441],{"class":66},[49,154019,106],{"class":55},[49,154021,154022,154024],{"class":51,"line":84},[49,154023,30504],{"class":66},[49,154025,154026],{"class":55},"(top_date, top_amount)\n",[166,154028,154030],{"id":154029},"_126-绘制柱状图","12.6 绘制柱状图",[39,154032,154034],{"className":41,"code":154033,"language":43,"meta":44,"style":44},"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",[46,154035,154036,154050,154061,154065,154073,154085,154097,154108,154112,154116,154126,154137,154151,154156,154173,154190,154206,154210],{"__ignoreMap":44},[49,154037,154038,154040,154042,154044,154046,154048],{"class":51,"line":52},[49,154039,30826],{"class":59},[49,154041,147442],{"class":55},[49,154043,30481],{"class":59},[49,154045,147447],{"class":55},[49,154047,31472],{"class":59},[49,154049,147452],{"class":55},[49,154051,154052,154054,154056,154058],{"class":51,"line":84},[49,154053,30826],{"class":59},[49,154055,147301],{"class":55},[49,154057,30481],{"class":59},[49,154059,154060],{"class":55}," Bar\n",[49,154062,154063],{"class":51,"line":109},[49,154064,2492],{"emptyLinePlaceholder":151},[49,154066,154067,154069,154071],{"class":51,"line":120},[49,154068,153913],{"class":55},[49,154070,60],{"class":59},[49,154072,15662],{"class":55},[49,154074,154075,154078,154080,154083],{"class":51,"line":135},[49,154076,154077],{"class":328},"    \"手机\"",[49,154079,51526],{"class":55},[49,154081,154082],{"class":66},"27000",[49,154084,31555],{"class":55},[49,154086,154087,154090,154092,154095],{"class":51,"line":1306},[49,154088,154089],{"class":328},"    \"电脑\"",[49,154091,51526],{"class":55},[49,154093,154094],{"class":66},"34000",[49,154096,31555],{"class":55},[49,154098,154099,154102,154104,154106],{"class":51,"line":1312},[49,154100,154101],{"class":328},"    \"耳机\"",[49,154103,51526],{"class":55},[49,154105,124462],{"class":66},[49,154107,31555],{"class":55},[49,154109,154110],{"class":51,"line":1403},[49,154111,1657],{"class":55},[49,154113,154114],{"class":51,"line":1409},[49,154115,2492],{"emptyLinePlaceholder":151},[49,154117,154118,154121,154123],{"class":51,"line":1421},[49,154119,154120],{"class":55},"bar ",[49,154122,60],{"class":59},[49,154124,154125],{"class":55}," Bar()\n",[49,154127,154128,154131,154134],{"class":51,"line":1704},[49,154129,154130],{"class":55},"bar.add_xaxis(",[49,154132,154133],{"class":66},"list",[49,154135,154136],{"class":55},"(category_total.keys()))\n",[49,154138,154139,154142,154144,154146,154148],{"class":51,"line":1709},[49,154140,154141],{"class":55},"bar.add_yaxis(",[49,154143,147358],{"class":328},[49,154145,12525],{"class":55},[49,154147,154133],{"class":66},[49,154149,154150],{"class":55},"(category_total.values()))\n",[49,154152,154153],{"class":51,"line":1715},[49,154154,154155],{"class":55},"bar.set_global_opts(\n",[49,154157,154158,154160,154162,154164,154166,154168,154171],{"class":51,"line":1720},[49,154159,147536],{"class":126},[49,154161,60],{"class":59},[49,154163,147541],{"class":55},[49,154165,51496],{"class":126},[49,154167,60],{"class":59},[49,154169,154170],{"class":328},"\"品类销售额\"",[49,154172,38136],{"class":55},[49,154174,154175,154177,154179,154181,154183,154185,154188],{"class":51,"line":1734},[49,154176,147555],{"class":126},[49,154178,60],{"class":59},[49,154180,147560],{"class":55},[49,154182,79899],{"class":126},[49,154184,60],{"class":59},[49,154186,154187],{"class":328},"\"品类\"",[49,154189,38136],{"class":55},[49,154191,154192,154194,154196,154198,154200,154202,154204],{"class":51,"line":1739},[49,154193,147574],{"class":126},[49,154195,60],{"class":59},[49,154197,147560],{"class":55},[49,154199,79899],{"class":126},[49,154201,60],{"class":59},[49,154203,147358],{"class":328},[49,154205,38136],{"class":55},[49,154207,154208],{"class":51,"line":1745},[49,154209,81],{"class":55},[49,154211,154212,154215,154218],{"class":51,"line":1766},[49,154213,154214],{"class":55},"bar.render(",[49,154216,154217],{"class":328},"\"category_sales.html\"",[49,154219,81],{"class":55},[166,154221,154223],{"id":154222},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154225,154226],{},"时间线适合展示不同日期、月份、年份的数据变化。",[39,154228,154230],{"className":41,"code":154229,"language":43,"meta":44,"style":44},"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",[46,154231,154232,154246,154257,154261,154269,154293,154316,154341,154345,154349,154359,154363,154374,154383,154393,154407,154438,154443,154447],{"__ignoreMap":44},[49,154233,154234,154236,154238,154240,154242,154244],{"class":51,"line":52},[49,154235,30826],{"class":59},[49,154237,147442],{"class":55},[49,154239,30481],{"class":59},[49,154241,147447],{"class":55},[49,154243,31472],{"class":59},[49,154245,147452],{"class":55},[49,154247,154248,154250,154252,154254],{"class":51,"line":84},[49,154249,30826],{"class":59},[49,154251,147301],{"class":55},[49,154253,30481],{"class":59},[49,154255,154256],{"class":55}," Bar, Timeline\n",[49,154258,154259],{"class":51,"line":109},[49,154260,2492],{"emptyLinePlaceholder":151},[49,154262,154263,154265,154267],{"class":51,"line":120},[49,154264,101721],{"class":55},[49,154266,60],{"class":59},[49,154268,15662],{"class":55},[49,154270,154271,154274,154277,154279,154281,154283,154285,154287,154289,154291],{"class":51,"line":135},[49,154272,154273],{"class":328},"    \"2024-10-01\"",[49,154275,154276],{"class":55},": {",[49,154278,153706],{"class":328},[49,154280,51526],{"class":55},[49,154282,153715],{"class":66},[49,154284,12525],{"class":55},[49,154286,153736],{"class":328},[49,154288,51526],{"class":55},[49,154290,153745],{"class":66},[49,154292,5021],{"class":55},[49,154294,154295,154298,154300,154302,154304,154306,154308,154310,154312,154314],{"class":51,"line":1306},[49,154296,154297],{"class":328},"    \"2024-10-02\"",[49,154299,154276],{"class":55},[49,154301,153706],{"class":328},[49,154303,51526],{"class":55},[49,154305,153774],{"class":66},[49,154307,12525],{"class":55},[49,154309,153736],{"class":328},[49,154311,51526],{"class":55},[49,154313,153803],{"class":66},[49,154315,5021],{"class":55},[49,154317,154318,154321,154323,154325,154327,154330,154332,154334,154336,154339],{"class":51,"line":1312},[49,154319,154320],{"class":328},"    \"2024-10-03\"",[49,154322,154276],{"class":55},[49,154324,153706],{"class":328},[49,154326,51526],{"class":55},[49,154328,154329],{"class":66},"17000",[49,154331,12525],{"class":55},[49,154333,153736],{"class":328},[49,154335,51526],{"class":55},[49,154337,154338],{"class":66},"19000",[49,154340,5021],{"class":55},[49,154342,154343],{"class":51,"line":1403},[49,154344,1657],{"class":55},[49,154346,154347],{"class":51,"line":1409},[49,154348,2492],{"emptyLinePlaceholder":151},[49,154350,154351,154354,154356],{"class":51,"line":1421},[49,154352,154353],{"class":55},"timeline ",[49,154355,60],{"class":59},[49,154357,154358],{"class":55}," Timeline()\n",[49,154360,154361],{"class":51,"line":1704},[49,154362,2492],{"emptyLinePlaceholder":151},[49,154364,154365,154367,154370,154372],{"class":51,"line":1709},[49,154366,3117],{"class":59},[49,154368,154369],{"class":55}," date, category_data ",[49,154371,26134],{"class":59},[49,154373,149211],{"class":55},[49,154375,154376,154379,154381],{"class":51,"line":1715},[49,154377,154378],{"class":55},"    bar ",[49,154380,60],{"class":59},[49,154382,154125],{"class":55},[49,154384,154385,154388,154390],{"class":51,"line":1720},[49,154386,154387],{"class":55},"    bar.add_xaxis(",[49,154389,154133],{"class":66},[49,154391,154392],{"class":55},"(category_data.keys()))\n",[49,154394,154395,154398,154400,154402,154404],{"class":51,"line":1734},[49,154396,154397],{"class":55},"    bar.add_yaxis(",[49,154399,147358],{"class":328},[49,154401,12525],{"class":55},[49,154403,154133],{"class":66},[49,154405,154406],{"class":55},"(category_data.values()))\n",[49,154408,154409,154412,154415,154417,154419,154421,154423,154425,154427,154429,154431,154433,154436],{"class":51,"line":1739},[49,154410,154411],{"class":55},"    bar.set_global_opts(",[49,154413,154414],{"class":126},"title_opts",[49,154416,60],{"class":59},[49,154418,147541],{"class":55},[49,154420,51496],{"class":126},[49,154422,60],{"class":59},[49,154424,277],{"class":59},[49,154426,474],{"class":328},[49,154428,1115],{"class":66},[49,154430,74015],{"class":55},[49,154432,1165],{"class":66},[49,154434,154435],{"class":328},"销售额\"",[49,154437,30586],{"class":55},[49,154439,154440],{"class":51,"line":1745},[49,154441,154442],{"class":55},"    timeline.add(bar, date)\n",[49,154444,154445],{"class":51,"line":1766},[49,154446,2492],{"emptyLinePlaceholder":151},[49,154448,154449,154452,154455],{"class":51,"line":1771},[49,154450,154451],{"class":55},"timeline.render(",[49,154453,154454],{"class":328},"\"timeline_sales.html\"",[49,154456,81],{"class":55},[166,154458,154460],{"id":154459},"_128-绘制地图","12.8 绘制地图",[14,154462,154463],{},"地图适合展示地区数据。",[39,154465,154467],{"className":41,"code":154466,"language":43,"meta":44,"style":44},"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",[46,154468,154469,154483,154494,154498,154506,154519,154531,154544,154557,154561,154565,154575,154590,154595,154612,154631,154635],{"__ignoreMap":44},[49,154470,154471,154473,154475,154477,154479,154481],{"class":51,"line":52},[49,154472,30826],{"class":59},[49,154474,147442],{"class":55},[49,154476,30481],{"class":59},[49,154478,147447],{"class":55},[49,154480,31472],{"class":59},[49,154482,147452],{"class":55},[49,154484,154485,154487,154489,154491],{"class":51,"line":84},[49,154486,30826],{"class":59},[49,154488,147301],{"class":55},[49,154490,30481],{"class":59},[49,154492,154493],{"class":55}," Map\n",[49,154495,154496],{"class":51,"line":109},[49,154497,2492],{"emptyLinePlaceholder":151},[49,154499,154500,154502,154504],{"class":51,"line":120},[49,154501,101721],{"class":55},[49,154503,60],{"class":59},[49,154505,55536],{"class":55},[49,154507,154508,154511,154513,154515,154517],{"class":51,"line":135},[49,154509,154510],{"class":55},"    (",[49,154512,69358],{"class":328},[49,154514,12525],{"class":55},[49,154516,1036],{"class":66},[49,154518,38136],{"class":55},[49,154520,154521,154523,154525,154527,154529],{"class":51,"line":1306},[49,154522,154510],{"class":55},[49,154524,69378],{"class":328},[49,154526,12525],{"class":55},[49,154528,147375],{"class":66},[49,154530,38136],{"class":55},[49,154532,154533,154535,154538,154540,154542],{"class":51,"line":1312},[49,154534,154510],{"class":55},[49,154536,154537],{"class":328},"\"广东\"",[49,154539,12525],{"class":55},[49,154541,1814],{"class":66},[49,154543,38136],{"class":55},[49,154545,154546,154548,154551,154553,154555],{"class":51,"line":1403},[49,154547,154510],{"class":55},[49,154549,154550],{"class":328},"\"浙江\"",[49,154552,12525],{"class":55},[49,154554,147380],{"class":66},[49,154556,38136],{"class":55},[49,154558,154559],{"class":51,"line":1409},[49,154560,33335],{"class":55},[49,154562,154563],{"class":51,"line":1421},[49,154564,2492],{"emptyLinePlaceholder":151},[49,154566,154567,154570,154572],{"class":51,"line":1704},[49,154568,154569],{"class":55},"map_chart ",[49,154571,60],{"class":59},[49,154573,154574],{"class":55}," Map()\n",[49,154576,154577,154580,154582,154585,154588],{"class":51,"line":1709},[49,154578,154579],{"class":55},"map_chart.add(",[49,154581,147358],{"class":328},[49,154583,154584],{"class":55},", data, ",[49,154586,154587],{"class":328},"\"china\"",[49,154589,81],{"class":55},[49,154591,154592],{"class":51,"line":1715},[49,154593,154594],{"class":55},"map_chart.set_global_opts(\n",[49,154596,154597,154599,154601,154603,154605,154607,154610],{"class":51,"line":1720},[49,154598,147536],{"class":126},[49,154600,60],{"class":59},[49,154602,147541],{"class":55},[49,154604,51496],{"class":126},[49,154606,60],{"class":59},[49,154608,154609],{"class":328},"\"地区销售额\"",[49,154611,38136],{"class":55},[49,154613,154614,154617,154619,154622,154625,154627,154629],{"class":51,"line":1734},[49,154615,154616],{"class":126},"    visualmap_opts",[49,154618,60],{"class":59},[49,154620,154621],{"class":55},"opts.VisualMapOpts(",[49,154623,154624],{"class":126},"max_",[49,154626,60],{"class":59},[49,154628,1814],{"class":66},[49,154630,38136],{"class":55},[49,154632,154633],{"class":51,"line":1739},[49,154634,81],{"class":55},[49,154636,154637,154640,154643],{"class":51,"line":1745},[49,154638,154639],{"class":55},"map_chart.render(",[49,154641,154642],{"class":328},"\"map_sales.html\"",[49,154644,81],{"class":55},[14,154646,154647],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[166,154649,154651],{"id":154650},"_129-项目拆分建议","12.9 项目拆分建议",[14,154653,154654],{},"当代码超过一个文件时，可以这样组织：",[39,154656,154659],{"className":154657,"code":154658,"language":5278,"meta":44},[5276],"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",[46,154660,154658],{"__ignoreMap":44},[14,154662,154663],{},"职责：",[178,154665,154666,154672,154678,154684],{},[181,154667,154668,154671],{},[46,154669,154670],{},"main.py","：程序入口。",[181,154673,154674,154677],{},[46,154675,154676],{},"file_utils.py","：读写 JSON。",[181,154679,154680,154683],{},[46,154681,154682],{},"sales_service.py","：统计销售数据。",[181,154685,154686,154689],{},[46,154687,154688],{},"chart_builder.py","：生成图表。",[166,154691,154693],{"id":154692},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154695,154696],{},"语法基础：",[178,154698,154699,154702,154705,154708],{},[181,154700,154701],{},"会写变量、注释、输入输出。",[181,154703,154704],{},"会使用 int、float、str、bool。",[181,154706,154707],{},"会做类型转换。",[181,154709,154710],{},"会使用 f-string 格式化输出。",[14,154712,154713],{},"流程控制：",[178,154715,154716,154722,154728,154736],{},[181,154717,154718,154719,28476],{},"会写 ",[46,154720,154721],{},"if elif else",[181,154723,154718,154724,101081,154726,28476],{},[46,154725,108726],{},[46,154727,3117],{},[181,154729,154730,154731,101081,154733,28476],{},"理解 ",[46,154732,2145],{},[46,154734,154735],{},"continue",[181,154737,154738],{},"能写嵌套循环。",[14,154740,154741],{},"函数：",[178,154743,154744,154747,154750,154753],{},[181,154745,154746],{},"会定义和调用函数。",[181,154748,154749],{},"理解参数和返回值。",[181,154751,154752],{},"知道局部变量和全局变量。",[181,154754,154755],{},"会使用默认参数、关键字参数、不定长参数。",[14,154757,154758],{},"容器：",[178,154760,154761,154764,154767,154770,154773],{},[181,154762,154763],{},"会使用列表增删改查。",[181,154765,154766],{},"会遍历列表、字典。",[181,154768,154769],{},"会使用切片。",[181,154771,154772],{},"会用集合去重。",[181,154774,154775],{},"会处理列表嵌套字典。",[14,154777,154778],{},"文件和模块：",[178,154780,154781,154784,154787,154790,154793],{},[181,154782,154783],{},"会读写文本文件。",[181,154785,154786],{},"会读写 JSON。",[181,154788,154789],{},"会捕获常见异常。",[181,154791,154792],{},"会导入模块和第三方包。",[181,154794,154795],{},"会创建简单包结构。",[14,154797,154798],{},"项目能力：",[178,154800,154801,154804,154807,154810,154813],{},[181,154802,154803],{},"能把代码拆成函数。",[181,154805,154806],{},"能把数据保存到文件。",[181,154808,154809],{},"能处理用户输入错误。",[181,154811,154812],{},"能写一个完整菜单程序。",[181,154814,154815],{},"能用 pyecharts 生成图表。",[166,154817,154819],{"id":154818},"_1211-推荐练习顺序","12.11 推荐练习顺序",[178,154821,154822,154825,154828,154831,154834,154837,154840,154843],{},[181,154823,154824],{},"猜数字游戏。",[181,154826,154827],{},"ATM 菜单程序。",[181,154829,154830],{},"学生成绩统计。",[181,154832,154833],{},"学生管理系统函数版。",[181,154835,154836],{},"学生管理系统文件持久化版。",[181,154838,154839],{},"学生管理系统面向对象版。",[181,154841,154842],{},"销售数据统计。",[181,154844,154845],{},"销售数据可视化。",[166,154847,154849],{"id":154848},"_1212-常见学习误区","12.12 常见学习误区",[178,154851,154852,154855,154858,154861,154864,154867,154870],{},[181,154853,154854],{},"只看视频不敲代码。",[181,154856,154857],{},"一报错就复制错误去搜，不先读报错位置。",[181,154859,154860],{},"变量名随便写，后续自己看不懂。",[181,154862,154863],{},"所有代码都写在一个文件一个函数里。",[181,154865,154866],{},"不保存练习代码，复习时没有材料。",[181,154868,154869],{},"还没掌握列表字典就急着学框架。",[181,154871,154872],{},"不会读官方文档，只依赖教程。",[166,154874,154876],{"id":154875},"_1213-如何读报错","12.13 如何读报错",[14,154878,154879],{},"报错通常从下往上看最后几行。",[14,154881,15225],{},[39,154883,154886],{"className":154884,"code":154885,"language":5278,"meta":44},[5276],"ValueError: invalid literal for int() with base 10: 'abc'\n",[46,154887,154885],{"__ignoreMap":44},[14,154889,24690],{},[178,154891,154892,154898,154908],{},[181,154893,154894,154895,28476],{},"异常类型是 ",[46,154896,154897],{},"ValueError",[181,154899,107408,154900,154903,154904,154907],{},[46,154901,154902],{},"int()"," 无法把 ",[46,154905,154906],{},"'abc'"," 转成整数。",[181,154909,154910],{},"应该检查输入内容或增加异常处理。",[14,154912,154913],{},"再看文件名和行号：",[39,154915,154918],{"className":154916,"code":154917,"language":5278,"meta":44},[5276],"File \"main.py\", line 10, in \u003Cmodule>\n",[46,154919,154917],{"__ignoreMap":44},[14,154921,154922,154923,154925],{},"表示错误发生在 ",[46,154924,154670],{}," 第 10 行。",[166,154927,154929],{"id":154928},"_1214-后续学习方向","12.14 后续学习方向",[14,154931,154932],{},"Python 基础完成后，可以按兴趣选择方向：",[178,154934,154935,154947,154956,154968,154979,154988,154998],{},[181,154936,154937,154938,436,154941,436,154944,28476],{},"自动化办公：",[46,154939,154940],{},"openpyxl",[46,154942,154943],{},"python-docx",[46,154945,154946],{},"pdfplumber",[181,154948,154949,154950,436,154952,436,154954,28476],{},"数据分析：",[46,154951,100689],{},[46,154953,146248],{},[46,154955,146256],{},[181,154957,154958,154959,436,154962,436,154965,28476],{},"Web 后端：",[46,154960,154961],{},"Flask",[46,154963,154964],{},"FastAPI",[46,154966,154967],{},"Django",[181,154969,154970,154971,436,154973,436,154976,28476],{},"爬虫：",[46,154972,146233],{},[46,154974,154975],{},"BeautifulSoup",[46,154977,154978],{},"Scrapy",[181,154980,154981,154982,436,154984,154987],{},"测试开发：",[46,154983,146280],{},[46,154985,154986],{},"selenium","、接口测试。",[181,154989,154990,154991,436,154993,436,154995,28476],{},"人工智能：",[46,154992,100689],{},[46,154994,146248],{},[46,154996,154997],{},"pytorch",[181,154999,155000,155001,436,155003,436,155006,28476],{},"运维脚本：",[46,155002,145849],{},[46,155004,155005],{},"subprocess",[46,155007,155008],{},"paramiko",[14,155010,155011],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[166,155013,155015],{"id":155014},"_1215-结课练习","12.15 结课练习",[178,155017,155018,155021,155024,155027,155030,155033,155036,155039],{},[181,155019,155020],{},"完成函数版学生管理系统。",[181,155022,155023],{},"给学生管理系统增加 JSON 持久化。",[181,155025,155026],{},"给学生管理系统增加异常处理。",[181,155028,155029],{},"把学生管理系统改成面向对象版。",[181,155031,155032],{},"使用 pyecharts 绘制学生成绩柱状图。",[181,155034,155035],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[181,155037,155038],{},"按品类统计销售额并绘制柱状图。",[181,155040,155041],{},"写一份自己的 Python 学习路线图。",[143,155043,155044],{},"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":44,"searchDepth":84,"depth":84,"links":155046},[155047,155048,155051,155052,155053,155059,155060,155061,155062,155063,155064,155065,155066,155067,155068],{"id":151763,"depth":84,"text":151764},{"id":151813,"depth":84,"text":151814,"children":155049},[155050],{"id":151817,"depth":109,"text":151818},{"id":151856,"depth":84,"text":151857},{"id":153330,"depth":84,"text":153331},{"id":153668,"depth":84,"text":153669,"children":155054},[155055,155056,155057,155058],{"id":153672,"depth":109,"text":153673},{"id":153812,"depth":109,"text":153813},{"id":153902,"depth":109,"text":153903},{"id":153988,"depth":109,"text":153989},{"id":154029,"depth":84,"text":154030},{"id":154222,"depth":84,"text":154223},{"id":154459,"depth":84,"text":154460},{"id":154650,"depth":84,"text":154651},{"id":154692,"depth":84,"text":154693},{"id":154818,"depth":84,"text":154819},{"id":154848,"depth":84,"text":154849},{"id":154875,"depth":84,"text":154876},{"id":154928,"depth":84,"text":154929},{"id":155014,"depth":84,"text":155015},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151755,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155075,"title":155076,"body":155077,"description":148,"extension":149,"meta":157546,"navigation":151,"path":157547,"seo":157548,"stem":157549,"__hash__":157550},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155078,"toc":157521},[155079,155082,155086,155089,155092,155112,155115,155138,155141,155144,155166,155169,155191,155195,155198,155238,155241,155362,155366,155369,155409,155412,155436,155439,155443,155446,155460,155493,155496,155531,155534,155557,155560,155593,155596,155598,155604,155679,155682,155688,155705,155745,155749,155752,155798,155800,155838,155841,155876,155879,155914,155917,155949,155952,155971,155975,155979,156092,156094,156169,156173,156219,156222,156248,156257,156261,156264,156327,156335,156363,156367,156407,156472,156476,156479,156518,156521,156566,156569,156630,156634,156661,156664,156692,156695,156699,156703,156768,156771,156809,156812,156844,156848,156947,156951,156954,157027,157030,157078,157082,157088,157128,157131,157178,157181,157230,157234,157236,157250,157252,157433,157437,157464,157484,157491,157495,157512,157518],[10,155080,155076],{"id":155081},"_2-基础语法变量与字符串",[166,155083,155085],{"id":155084},"_21-注释","2.1 注释",[14,155087,155088],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155090,155091],{},"单行注释：",[39,155093,155095],{"className":41,"code":155094,"language":43,"meta":44,"style":44},"# 这是单行注释\nprint(\"hello\")\n",[46,155096,155097,155102],{"__ignoreMap":44},[49,155098,155099],{"class":51,"line":52},[49,155100,155101],{"class":283},"# 这是单行注释\n",[49,155103,155104,155106,155108,155110],{"class":51,"line":84},[49,155105,30504],{"class":66},[49,155107,228],{"class":55},[49,155109,5934],{"class":328},[49,155111,81],{"class":55},[14,155113,155114],{},"多行说明常用三引号：",[39,155116,155118],{"className":41,"code":155117,"language":43,"meta":44,"style":44},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[46,155119,155120,155124,155129,155134],{"__ignoreMap":44},[49,155121,155122],{"class":51,"line":52},[49,155123,95761],{"class":328},[49,155125,155126],{"class":51,"line":84},[49,155127,155128],{"class":328},"这是多行说明。\n",[49,155130,155131],{"class":51,"line":109},[49,155132,155133],{"class":328},"常用于文件顶部说明、函数说明等。\n",[49,155135,155136],{"class":51,"line":120},[49,155137,95761],{"class":328},[14,155139,155140],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155142,155143],{},"不好：",[39,155145,155147],{"className":41,"code":155146,"language":43,"meta":44,"style":44},"# age 加 1\nage = age + 1\n",[46,155148,155149,155154],{"__ignoreMap":44},[49,155150,155151],{"class":51,"line":52},[49,155152,155153],{"class":283},"# age 加 1\n",[49,155155,155156,155158,155160,155162,155164],{"class":51,"line":84},[49,155157,146609],{"class":55},[49,155159,60],{"class":59},[49,155161,15797],{"class":55},[49,155163,700],{"class":59},[49,155165,55788],{"class":66},[14,155167,155168],{},"较好：",[39,155170,155172],{"className":41,"code":155171,"language":43,"meta":44,"style":44},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[46,155173,155174,155179],{"__ignoreMap":44},[49,155175,155176],{"class":51,"line":52},[49,155177,155178],{"class":283},"# 用户过完生日后，年龄增加一岁\n",[49,155180,155181,155183,155185,155187,155189],{"class":51,"line":84},[49,155182,146609],{"class":55},[49,155184,60],{"class":59},[49,155186,15797],{"class":55},[49,155188,700],{"class":59},[49,155190,55788],{"class":66},[166,155192,155194],{"id":155193},"_22-字面量","2.2 字面量",[14,155196,155197],{},"字面量就是代码中直接写出来的数据。",[39,155199,155201],{"className":41,"code":155200,"language":43,"meta":44,"style":44},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[46,155202,155203,155210,155217,155224,155231],{"__ignoreMap":44},[49,155204,155205,155207],{"class":51,"line":52},[49,155206,533],{"class":66},[49,155208,155209],{"class":283},"          # 整数\n",[49,155211,155212,155214],{"class":51,"line":84},[49,155213,274],{"class":66},[49,155215,155216],{"class":283},"         # 小数\n",[49,155218,155219,155221],{"class":51,"line":109},[49,155220,5934],{"class":328},[49,155222,155223],{"class":283},"      # 字符串\n",[49,155225,155226,155228],{"class":51,"line":120},[49,155227,31565],{"class":66},[49,155229,155230],{"class":283},"         # 布尔值\n",[49,155232,155233,155235],{"class":51,"line":135},[49,155234,95749],{"class":66},[49,155236,155237],{"class":283},"         # 空值\n",[14,155239,155240],{},"常见字面量类型：",[361,155242,155243,155253],{},[364,155244,155245],{},[367,155246,155247,155249,155251],{},[370,155248,23827],{},[370,155250,27583],{},[370,155252,25960],{},[408,155254,155255,155266,155277,155288,155300,155312,155324,155337,155349],{},[367,155256,155257,155259,155263],{},[413,155258,231],{},[413,155260,155261],{},[46,155262,533],{},[413,155264,155265],{},"整数",[367,155267,155268,155270,155274],{},[413,155269,266],{},[413,155271,155272],{},[46,155273,274],{},[413,155275,155276],{},"浮点数",[367,155278,155279,155281,155285],{},[413,155280,1391],{},[413,155282,155283],{},[46,155284,5934],{},[413,155286,155287],{},"字符串",[367,155289,155290,155292,155298],{},[413,155291,1446],{},[413,155293,155294,436,155296],{},[46,155295,31565],{},[46,155297,34076],{},[413,155299,66104],{},[367,155301,155302,155305,155309],{},[413,155303,155304],{},"NoneType",[413,155306,155307],{},[46,155308,95749],{},[413,155310,155311],{},"空值",[367,155313,155314,155316,155321],{},[413,155315,154133],{},[413,155317,155318],{},[46,155319,155320],{},"[1, 2, 3]",[413,155322,155323],{},"列表",[367,155325,155326,155329,155334],{},[413,155327,155328],{},"tuple",[413,155330,155331],{},[46,155332,155333],{},"(1, 2, 3)",[413,155335,155336],{},"元组",[367,155338,155339,155341,155346],{},[413,155340,114609],{},[413,155342,155343],{},[46,155344,155345],{},"{\"name\": \"张三\"}",[413,155347,155348],{},"字典",[367,155350,155351,155354,155359],{},[413,155352,155353],{},"set",[413,155355,155356],{},[46,155357,155358],{},"{1, 2, 3}",[413,155360,155361],{},"集合",[166,155363,155365],{"id":155364},"_23-变量","2.3 变量",[14,155367,155368],{},"变量是保存数据的名字。",[39,155370,155372],{"className":41,"code":155371,"language":43,"meta":44,"style":44},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[46,155373,155374,155382,155390,155400],{"__ignoreMap":44},[49,155375,155376,155378,155380],{"class":51,"line":52},[49,155377,146599],{"class":55},[49,155379,60],{"class":59},[49,155381,149416],{"class":328},[49,155383,155384,155386,155388],{"class":51,"line":84},[49,155385,146609],{"class":55},[49,155387,60],{"class":59},[49,155389,146614],{"class":66},[49,155391,155392,155395,155397],{"class":51,"line":109},[49,155393,155394],{"class":55},"height ",[49,155396,60],{"class":59},[49,155398,155399],{"class":66}," 1.75\n",[49,155401,155402,155405,155407],{"class":51,"line":120},[49,155403,155404],{"class":55},"is_student ",[49,155406,60],{"class":59},[49,155408,153662],{"class":66},[14,155410,155411],{},"Python 的变量不需要提前声明类型：",[39,155413,155415],{"className":41,"code":155414,"language":43,"meta":44,"style":44},"score = 100\nscore = \"满分\"\n",[46,155416,155417,155427],{"__ignoreMap":44},[49,155418,155419,155422,155424],{"class":51,"line":52},[49,155420,155421],{"class":55},"score ",[49,155423,60],{"class":59},[49,155425,155426],{"class":66}," 100\n",[49,155428,155429,155431,155433],{"class":51,"line":84},[49,155430,155421],{"class":55},[49,155432,60],{"class":59},[49,155434,155435],{"class":328}," \"满分\"\n",[14,155437,155438],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[166,155440,155442],{"id":155441},"_24-变量命名规则","2.4 变量命名规则",[14,155444,155445],{},"硬性规则：",[178,155447,155448,155451,155454,155457],{},[181,155449,155450],{},"只能由字母、数字、下划线组成。",[181,155452,155453],{},"不能以数字开头。",[181,155455,155456],{},"不能使用 Python 关键字。",[181,155458,155459],{},"区分大小写。",[39,155461,155463],{"className":41,"code":155462,"language":43,"meta":44,"style":44},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[46,155464,155465,155474,155483],{"__ignoreMap":44},[49,155466,155467,155470,155472],{"class":51,"line":52},[49,155468,155469],{"class":55},"user_name ",[49,155471,60],{"class":59},[49,155473,146604],{"class":328},[49,155475,155476,155479,155481],{"class":51,"line":84},[49,155477,155478],{"class":55},"age2 ",[49,155480,60],{"class":59},[49,155482,146614],{"class":66},[49,155484,155485,155488,155490],{"class":51,"line":109},[49,155486,155487],{"class":55},"_token ",[49,155489,60],{"class":59},[49,155491,155492],{"class":328}," \"abc\"\n",[14,155494,155495],{},"错误写法：",[39,155497,155499],{"className":41,"code":155498,"language":43,"meta":44,"style":44},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[46,155500,155501,155510,155522],{"__ignoreMap":44},[49,155502,155503,155506,155508],{"class":51,"line":52},[49,155504,155505],{"class":77492},"2age",[49,155507,13654],{"class":59},[49,155509,146614],{"class":66},[49,155511,155512,155514,155516,155518,155520],{"class":51,"line":84},[49,155513,131647],{"class":55},[49,155515,751],{"class":59},[49,155517,146599],{"class":55},[49,155519,60],{"class":59},[49,155521,146604],{"class":328},[49,155523,155524,155526,155528],{"class":51,"line":109},[49,155525,14784],{"class":59},[49,155527,13654],{"class":59},[49,155529,155530],{"class":328}," \"一班\"\n",[14,155532,155533],{},"查看关键字：",[39,155535,155537],{"className":41,"code":155536,"language":43,"meta":44,"style":44},"import keyword\n\nprint(keyword.kwlist)\n",[46,155538,155539,155546,155550],{"__ignoreMap":44},[49,155540,155541,155543],{"class":51,"line":52},[49,155542,30481],{"class":59},[49,155544,155545],{"class":55}," keyword\n",[49,155547,155548],{"class":51,"line":84},[49,155549,2492],{"emptyLinePlaceholder":151},[49,155551,155552,155554],{"class":51,"line":109},[49,155553,30504],{"class":66},[49,155555,155556],{"class":55},"(keyword.kwlist)\n",[14,155558,155559],{},"推荐命名风格：",[39,155561,155563],{"className":41,"code":155562,"language":43,"meta":44,"style":44},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[46,155564,155565,155574,155584],{"__ignoreMap":44},[49,155566,155567,155570,155572],{"class":51,"line":52},[49,155568,155569],{"class":55},"student_name ",[49,155571,60],{"class":59},[49,155573,149416],{"class":328},[49,155575,155576,155579,155581],{"class":51,"line":84},[49,155577,155578],{"class":55},"total_price ",[49,155580,60],{"class":59},[49,155582,155583],{"class":66}," 99.8\n",[49,155585,155586,155589,155591],{"class":51,"line":109},[49,155587,155588],{"class":55},"is_finished ",[49,155590,60],{"class":59},[49,155592,125870],{"class":66},[14,155594,155595],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[166,155597,50821],{"id":50820},[14,155599,104429,155600,155603],{},[46,155601,155602],{},"type()"," 查看数据类型：",[39,155605,155607],{"className":41,"code":155606,"language":43,"meta":44,"style":44},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[46,155608,155609,155623,155637,155651,155665],{"__ignoreMap":44},[49,155610,155611,155613,155615,155617,155619,155621],{"class":51,"line":52},[49,155612,30504],{"class":66},[49,155614,228],{"class":55},[49,155616,103170],{"class":66},[49,155618,228],{"class":55},[49,155620,533],{"class":66},[49,155622,30586],{"class":55},[49,155624,155625,155627,155629,155631,155633,155635],{"class":51,"line":84},[49,155626,30504],{"class":66},[49,155628,228],{"class":55},[49,155630,103170],{"class":66},[49,155632,228],{"class":55},[49,155634,274],{"class":66},[49,155636,30586],{"class":55},[49,155638,155639,155641,155643,155645,155647,155649],{"class":51,"line":109},[49,155640,30504],{"class":66},[49,155642,228],{"class":55},[49,155644,103170],{"class":66},[49,155646,228],{"class":55},[49,155648,5934],{"class":328},[49,155650,30586],{"class":55},[49,155652,155653,155655,155657,155659,155661,155663],{"class":51,"line":120},[49,155654,30504],{"class":66},[49,155656,228],{"class":55},[49,155658,103170],{"class":66},[49,155660,228],{"class":55},[49,155662,31565],{"class":66},[49,155664,30586],{"class":55},[49,155666,155667,155669,155671,155673,155675,155677],{"class":51,"line":135},[49,155668,30504],{"class":66},[49,155670,228],{"class":55},[49,155672,103170],{"class":66},[49,155674,228],{"class":55},[49,155676,95749],{"class":66},[49,155678,30586],{"class":55},[14,155680,155681],{},"输出类似：",[39,155683,155686],{"className":155684,"code":155685,"language":5278,"meta":44},[5276],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[46,155687,155685],{"__ignoreMap":44},[14,155689,9115,155690,107346,155692,155694,155695,155697,155698,21590,155700,155697,155702,155704],{},[46,155691,1446],{},[46,155693,231],{}," 的子类，",[46,155696,31565],{}," 可以当作 ",[46,155699,441],{},[46,155701,34076],{},[46,155703,415],{},"，但业务代码中不要滥用。",[39,155706,155708],{"className":41,"code":155707,"language":43,"meta":44,"style":44},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[46,155709,155710,155728],{"__ignoreMap":44},[49,155711,155712,155714,155716,155718,155720,155722,155725],{"class":51,"line":52},[49,155713,30504],{"class":66},[49,155715,228],{"class":55},[49,155717,31565],{"class":66},[49,155719,45655],{"class":59},[49,155721,25209],{"class":66},[49,155723,155724],{"class":55},")   ",[49,155726,155727],{"class":283},"# 2\n",[49,155729,155730,155732,155734,155736,155738,155740,155742],{"class":51,"line":84},[49,155731,30504],{"class":66},[49,155733,228],{"class":55},[49,155735,34076],{"class":66},[49,155737,45655],{"class":59},[49,155739,25209],{"class":66},[49,155741,45897],{"class":55},[49,155743,155744],{"class":283},"# 1\n",[166,155746,155748],{"id":155747},"_26-类型转换","2.6 类型转换",[14,155750,155751],{},"常用转换函数：",[39,155753,155755],{"className":41,"code":155754,"language":43,"meta":44,"style":44},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[46,155756,155757,155767,155778,155788],{"__ignoreMap":44},[49,155758,155759,155761,155763,155765],{"class":51,"line":52},[49,155760,231],{"class":66},[49,155762,228],{"class":55},[49,155764,54405],{"class":328},[49,155766,81],{"class":55},[49,155768,155769,155771,155773,155776],{"class":51,"line":84},[49,155770,266],{"class":66},[49,155772,228],{"class":55},[49,155774,155775],{"class":328},"\"3.14\"",[49,155777,81],{"class":55},[49,155779,155780,155782,155784,155786],{"class":51,"line":109},[49,155781,1391],{"class":66},[49,155783,228],{"class":55},[49,155785,533],{"class":66},[49,155787,81],{"class":55},[49,155789,155790,155792,155794,155796],{"class":51,"line":120},[49,155791,1446],{"class":66},[49,155793,228],{"class":55},[49,155795,441],{"class":66},[49,155797,81],{"class":55},[14,155799,15225],{},[39,155801,155803],{"className":41,"code":155802,"language":43,"meta":44,"style":44},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[46,155804,155805,155814,155825],{"__ignoreMap":44},[49,155806,155807,155809,155811],{"class":51,"line":52},[49,155808,146609],{"class":55},[49,155810,60],{"class":59},[49,155812,155813],{"class":328}," \"18\"\n",[49,155815,155816,155818,155820,155822],{"class":51,"line":84},[49,155817,146609],{"class":55},[49,155819,60],{"class":59},[49,155821,2474],{"class":66},[49,155823,155824],{"class":55},"(age)\n",[49,155826,155827,155829,155832,155834,155836],{"class":51,"line":109},[49,155828,30504],{"class":66},[49,155830,155831],{"class":55},"(age ",[49,155833,700],{"class":59},[49,155835,25209],{"class":66},[49,155837,81],{"class":55},[14,155839,155840],{},"输入得到的内容永远是字符串：",[39,155842,155844],{"className":41,"code":155843,"language":43,"meta":44,"style":44},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[46,155845,155846,155862],{"__ignoreMap":44},[49,155847,155848,155851,155853,155855,155857,155860],{"class":51,"line":52},[49,155849,155850],{"class":55},"num ",[49,155852,60],{"class":59},[49,155854,60694],{"class":66},[49,155856,228],{"class":55},[49,155858,155859],{"class":328},"\"请输入数字:\"",[49,155861,81],{"class":55},[49,155863,155864,155866,155868,155870,155873],{"class":51,"line":84},[49,155865,30504],{"class":66},[49,155867,228],{"class":55},[49,155869,103170],{"class":66},[49,155871,155872],{"class":55},"(num))  ",[49,155874,155875],{"class":283},"# str\n",[14,155877,155878],{},"如果要做数学运算，必须转换：",[39,155880,155882],{"className":41,"code":155881,"language":43,"meta":44,"style":44},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[46,155883,155884,155902],{"__ignoreMap":44},[49,155885,155886,155888,155890,155892,155894,155896,155898,155900],{"class":51,"line":52},[49,155887,155850],{"class":55},[49,155889,60],{"class":59},[49,155891,2474],{"class":66},[49,155893,228],{"class":55},[49,155895,53910],{"class":66},[49,155897,228],{"class":55},[49,155899,155859],{"class":328},[49,155901,30586],{"class":55},[49,155903,155904,155906,155908,155910,155912],{"class":51,"line":84},[49,155905,30504],{"class":66},[49,155907,45708],{"class":55},[49,155909,700],{"class":59},[49,155911,2130],{"class":66},[49,155913,81],{"class":55},[14,155915,155916],{},"常见错误：",[39,155918,155920],{"className":41,"code":155919,"language":43,"meta":44,"style":44},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[46,155921,155922,155935],{"__ignoreMap":44},[49,155923,155924,155926,155928,155930,155932],{"class":51,"line":52},[49,155925,231],{"class":66},[49,155927,228],{"class":55},[49,155929,155775],{"class":328},[49,155931,155724],{"class":55},[49,155933,155934],{"class":283},"# 错误\n",[49,155936,155937,155939,155941,155944,155947],{"class":51,"line":84},[49,155938,231],{"class":66},[49,155940,228],{"class":55},[49,155942,155943],{"class":328},"\"abc\"",[49,155945,155946],{"class":55},")    ",[49,155948,155934],{"class":283},[14,155950,155951],{},"正确写法：",[39,155953,155955],{"className":41,"code":155954,"language":43,"meta":44,"style":44},"num = float(\"3.14\")\n",[46,155956,155957],{"__ignoreMap":44},[49,155958,155959,155961,155963,155965,155967,155969],{"class":51,"line":52},[49,155960,155850],{"class":55},[49,155962,60],{"class":59},[49,155964,109860],{"class":66},[49,155966,228],{"class":55},[49,155968,155775],{"class":328},[49,155970,81],{"class":55},[166,155972,155974],{"id":155973},"_27-运算符","2.7 运算符",[195,155976,155978],{"id":155977},"_271-算术运算符","2.7.1 算术运算符",[361,155980,155981,155992],{},[364,155982,155983],{},[367,155984,155985,155988,155990],{},[370,155986,155987],{},"运算符",[370,155989,25960],{},[370,155991,27583],{},[408,155993,155994,156008,156022,156036,156050,156064,156078],{},[367,155995,155996,156000,156003],{},[413,155997,155998],{},[46,155999,700],{},[413,156001,156002],{},"加法",[413,156004,156005],{},[46,156006,156007],{},"1 + 2",[367,156009,156010,156014,156017],{},[413,156011,156012],{},[46,156013,751],{},[413,156015,156016],{},"减法",[413,156018,156019],{},[46,156020,156021],{},"5 - 3",[367,156023,156024,156028,156031],{},[413,156025,156026],{},[46,156027,674],{},[413,156029,156030],{},"乘法",[413,156032,156033],{},[46,156034,156035],{},"2 * 3",[367,156037,156038,156042,156045],{},[413,156039,156040],{},[46,156041,803],{},[413,156043,156044],{},"除法，结果是浮点数",[413,156046,156047],{},[46,156048,156049],{},"5 \u002F 2",[367,156051,156052,156056,156059],{},[413,156053,156054],{},[46,156055,33418],{},[413,156057,156058],{},"整除",[413,156060,156061],{},[46,156062,156063],{},"5 \u002F\u002F 2",[367,156065,156066,156070,156073],{},[413,156067,156068],{},[46,156069,550],{},[413,156071,156072],{},"取余",[413,156074,156075],{},[46,156076,156077],{},"5 % 2",[367,156079,156080,156084,156087],{},[413,156081,156082],{},[46,156083,10751],{},[413,156085,156086],{},"幂运算",[413,156088,156089],{},[46,156090,156091],{},"2 ** 3",[14,156093,15225],{},[39,156095,156097],{"className":41,"code":156096,"language":43,"meta":44,"style":44},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[46,156098,156099,156117,156134,156151],{"__ignoreMap":44},[49,156100,156101,156103,156105,156107,156110,156112,156114],{"class":51,"line":52},[49,156102,30504],{"class":66},[49,156104,228],{"class":55},[49,156106,541],{"class":66},[49,156108,156109],{"class":59}," \u002F",[49,156111,14845],{"class":66},[49,156113,155724],{"class":55},[49,156115,156116],{"class":283},"# 2.5\n",[49,156118,156119,156121,156123,156125,156128,156130,156132],{"class":51,"line":84},[49,156120,30504],{"class":66},[49,156122,228],{"class":55},[49,156124,541],{"class":66},[49,156126,156127],{"class":59}," \u002F\u002F",[49,156129,14845],{"class":66},[49,156131,45897],{"class":55},[49,156133,155727],{"class":283},[49,156135,156136,156138,156140,156142,156145,156147,156149],{"class":51,"line":109},[49,156137,30504],{"class":66},[49,156139,228],{"class":55},[49,156141,541],{"class":66},[49,156143,156144],{"class":59}," %",[49,156146,14845],{"class":66},[49,156148,155724],{"class":55},[49,156150,155744],{"class":283},[49,156152,156153,156155,156157,156159,156162,156164,156166],{"class":51,"line":120},[49,156154,30504],{"class":66},[49,156156,228],{"class":55},[49,156158,301],{"class":66},[49,156160,156161],{"class":59}," **",[49,156163,78159],{"class":66},[49,156165,45897],{"class":55},[49,156167,156168],{"class":283},"# 8\n",[195,156170,156172],{"id":156171},"_272-赋值运算符","2.7.2 赋值运算符",[39,156174,156176],{"className":41,"code":156175,"language":43,"meta":44,"style":44},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[46,156177,156178,156186,156194,156202,156210],{"__ignoreMap":44},[49,156179,156180,156182,156184],{"class":51,"line":52},[49,156181,155850],{"class":55},[49,156183,60],{"class":59},[49,156185,58517],{"class":66},[49,156187,156188,156190,156192],{"class":51,"line":84},[49,156189,155850],{"class":55},[49,156191,9567],{"class":59},[49,156193,54516],{"class":66},[49,156195,156196,156198,156200],{"class":51,"line":109},[49,156197,155850],{"class":55},[49,156199,150315],{"class":59},[49,156201,47812],{"class":66},[49,156203,156204,156206,156208],{"class":51,"line":120},[49,156205,155850],{"class":55},[49,156207,137211],{"class":59},[49,156209,120099],{"class":66},[49,156211,156212,156214,156217],{"class":51,"line":135},[49,156213,155850],{"class":55},[49,156215,156216],{"class":59},"\u002F=",[49,156218,47812],{"class":66},[14,156220,156221],{},"等价关系：",[39,156223,156225],{"className":41,"code":156224,"language":43,"meta":44,"style":44},"num += 1\nnum = num + 1\n",[46,156226,156227,156235],{"__ignoreMap":44},[49,156228,156229,156231,156233],{"class":51,"line":52},[49,156230,155850],{"class":55},[49,156232,9567],{"class":59},[49,156234,55788],{"class":66},[49,156236,156237,156239,156241,156244,156246],{"class":51,"line":84},[49,156238,155850],{"class":55},[49,156240,60],{"class":59},[49,156242,156243],{"class":55}," num ",[49,156245,700],{"class":59},[49,156247,55788],{"class":66},[14,156249,156250,156251,101081,156254,28476],{},"Python 没有 ",[46,156252,156253],{},"num++",[46,156255,156256],{},"num--",[195,156258,156260],{"id":156259},"_273-比较运算符","2.7.3 比较运算符",[14,156262,156263],{},"比较运算结果是布尔值。",[39,156265,156267],{"className":41,"code":156266,"language":43,"meta":44,"style":44},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[46,156268,156269,156283,156298,156312],{"__ignoreMap":44},[49,156270,156271,156273,156275,156277,156279,156281],{"class":51,"line":52},[49,156272,30504],{"class":66},[49,156274,228],{"class":55},[49,156276,95],{"class":66},[49,156278,26313],{"class":59},[49,156280,2240],{"class":66},[49,156282,81],{"class":55},[49,156284,156285,156287,156289,156291,156294,156296],{"class":51,"line":84},[49,156286,30504],{"class":66},[49,156288,228],{"class":55},[49,156290,95],{"class":66},[49,156292,156293],{"class":59}," >=",[49,156295,2130],{"class":66},[49,156297,81],{"class":55},[49,156299,156300,156302,156304,156306,156308,156310],{"class":51,"line":109},[49,156301,30504],{"class":66},[49,156303,228],{"class":55},[49,156305,95],{"class":66},[49,156307,101622],{"class":59},[49,156309,2175],{"class":66},[49,156311,81],{"class":55},[49,156313,156314,156316,156318,156320,156323,156325],{"class":51,"line":120},[49,156315,30504],{"class":66},[49,156317,228],{"class":55},[49,156319,95],{"class":66},[49,156321,156322],{"class":59}," !=",[49,156324,2175],{"class":66},[49,156326,81],{"class":55},[14,156328,156329,156330,156332,156333,28476],{},"注意：判断相等用 ",[46,156331,3041],{},"，赋值用 ",[46,156334,60],{},[39,156336,156338],{"className":41,"code":156337,"language":43,"meta":44,"style":44},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[46,156339,156340,156352],{"__ignoreMap":44},[49,156341,156342,156344,156346,156349],{"class":51,"line":52},[49,156343,146609],{"class":55},[49,156345,60],{"class":59},[49,156347,156348],{"class":66}," 18",[49,156350,156351],{"class":283},"       # 赋值\n",[49,156353,156354,156356,156358,156360],{"class":51,"line":84},[49,156355,146609],{"class":55},[49,156357,3041],{"class":59},[49,156359,156348],{"class":66},[49,156361,156362],{"class":283},"      # 判断是否相等\n",[195,156364,156366],{"id":156365},"_274-逻辑运算符","2.7.4 逻辑运算符",[361,156368,156369,156377],{},[364,156370,156371],{},[367,156372,156373,156375],{},[370,156374,155987],{},[370,156376,25960],{},[408,156378,156379,156388,156397],{},[367,156380,156381,156385],{},[413,156382,156383],{},[46,156384,30551],{},[413,156386,156387],{},"并且",[367,156389,156390,156394],{},[413,156391,156392],{},[46,156393,115153],{},[413,156395,156396],{},"或者",[367,156398,156399,156404],{},[413,156400,156401],{},[46,156402,156403],{},"not",[413,156405,156406],{},"取反",[39,156408,156410],{"className":41,"code":156409,"language":43,"meta":44,"style":44},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[46,156411,156412,156420,156429,156433,156448,156462],{"__ignoreMap":44},[49,156413,156414,156416,156418],{"class":51,"line":52},[49,156415,146609],{"class":55},[49,156417,60],{"class":59},[49,156419,88154],{"class":66},[49,156421,156422,156425,156427],{"class":51,"line":84},[49,156423,156424],{"class":55},"has_ticket ",[49,156426,60],{"class":59},[49,156428,153662],{"class":66},[49,156430,156431],{"class":51,"line":109},[49,156432,2492],{"emptyLinePlaceholder":151},[49,156434,156435,156437,156439,156441,156443,156445],{"class":51,"line":120},[49,156436,30504],{"class":66},[49,156438,155831],{"class":55},[49,156440,1802],{"class":59},[49,156442,156348],{"class":66},[49,156444,120492],{"class":59},[49,156446,156447],{"class":55}," has_ticket)\n",[49,156449,156450,156452,156454,156456,156458,156460],{"class":51,"line":135},[49,156451,30504],{"class":66},[49,156453,155831],{"class":55},[49,156455,1129],{"class":59},[49,156457,156348],{"class":66},[49,156459,114264],{"class":59},[49,156461,156447],{"class":55},[49,156463,156464,156466,156468,156470],{"class":51,"line":1306},[49,156465,30504],{"class":66},[49,156467,228],{"class":55},[49,156469,156403],{"class":59},[49,156471,156447],{"class":55},[166,156473,156475],{"id":156474},"_28-字符串定义","2.8 字符串定义",[14,156477,156478],{},"三种常见写法：",[39,156480,156482],{"className":41,"code":156481,"language":43,"meta":44,"style":44},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[46,156483,156484,156494,156503,156513],{"__ignoreMap":44},[49,156485,156486,156489,156491],{"class":51,"line":52},[49,156487,156488],{"class":55},"name1 ",[49,156490,60],{"class":59},[49,156492,156493],{"class":328}," '小明'\n",[49,156495,156496,156499,156501],{"class":51,"line":84},[49,156497,156498],{"class":55},"name2 ",[49,156500,60],{"class":59},[49,156502,149416],{"class":328},[49,156504,156505,156508,156510],{"class":51,"line":109},[49,156506,156507],{"class":55},"text ",[49,156509,60],{"class":59},[49,156511,156512],{"class":328}," \"\"\"这是多行字符串\n",[49,156514,156515],{"class":51,"line":120},[49,156516,156517],{"class":328},"可以换行\"\"\"\n",[14,156519,156520],{},"字符串中包含引号：",[39,156522,156524],{"className":41,"code":156523,"language":43,"meta":44,"style":44},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[46,156525,156526,156536,156546],{"__ignoreMap":44},[49,156527,156528,156531,156533],{"class":51,"line":52},[49,156529,156530],{"class":55},"msg ",[49,156532,60],{"class":59},[49,156534,156535],{"class":328}," \"他说:'你好'\"\n",[49,156537,156538,156541,156543],{"class":51,"line":84},[49,156539,156540],{"class":55},"msg2 ",[49,156542,60],{"class":59},[49,156544,156545],{"class":328}," '他说:\"你好\"'\n",[49,156547,156548,156551,156553,156556,156559,156562,156564],{"class":51,"line":109},[49,156549,156550],{"class":55},"msg3 ",[49,156552,60],{"class":59},[49,156554,156555],{"class":328}," \"他说:",[49,156557,156558],{"class":66},"\\\"",[49,156560,156561],{"class":328},"你好",[49,156563,156558],{"class":66},[49,156565,25224],{"class":328},[14,156567,156568],{},"常见转义字符：",[361,156570,156571,156580],{},[364,156572,156573],{},[367,156574,156575,156578],{},[370,156576,156577],{},"写法",[370,156579,100763],{},[408,156581,156582,156592,156601,156611,156620],{},[367,156583,156584,156589],{},[413,156585,156586],{},[46,156587,156588],{},"\\n",[413,156590,156591],{},"换行",[367,156593,156594,156598],{},[413,156595,156596],{},[46,156597,1322],{},[413,156599,156600],{},"制表符",[367,156602,156603,156608],{},[413,156604,156605],{},[46,156606,156607],{},"\\\\",[413,156609,156610],{},"反斜杠",[367,156612,156613,156617],{},[413,156614,156615],{},[46,156616,156558],{},[413,156618,156619],{},"双引号",[367,156621,156622,156627],{},[413,156623,156624],{},[46,156625,156626],{},"\\'",[413,156628,156629],{},"单引号",[166,156631,156633],{"id":156632},"_29-字符串拼接","2.9 字符串拼接",[39,156635,156637],{"className":41,"code":156636,"language":43,"meta":44,"style":44},"name = \"小明\"\nprint(\"你好，\" + name)\n",[46,156638,156639,156647],{"__ignoreMap":44},[49,156640,156641,156643,156645],{"class":51,"line":52},[49,156642,146599],{"class":55},[49,156644,60],{"class":59},[49,156646,149416],{"class":328},[49,156648,156649,156651,156653,156656,156658],{"class":51,"line":84},[49,156650,30504],{"class":66},[49,156652,228],{"class":55},[49,156654,156655],{"class":328},"\"你好，\"",[49,156657,45655],{"class":59},[49,156659,156660],{"class":55}," name)\n",[14,156662,156663],{},"字符串只能和字符串拼接：",[39,156665,156667],{"className":41,"code":156666,"language":43,"meta":44,"style":44},"age = 18\nprint(\"年龄:\" + str(age))\n",[46,156668,156669,156677],{"__ignoreMap":44},[49,156670,156671,156673,156675],{"class":51,"line":52},[49,156672,146609],{"class":55},[49,156674,60],{"class":59},[49,156676,146614],{"class":66},[49,156678,156679,156681,156683,156685,156687,156689],{"class":51,"line":84},[49,156680,30504],{"class":66},[49,156682,228],{"class":55},[49,156684,146580],{"class":328},[49,156686,45655],{"class":59},[49,156688,74008],{"class":66},[49,156690,156691],{"class":55},"(age))\n",[14,156693,156694],{},"更推荐使用格式化字符串。",[166,156696,156698],{"id":156697},"_210-字符串格式化","2.10 字符串格式化",[195,156700,156702],{"id":156701},"_2101-百分号格式化","2.10.1 百分号格式化",[39,156704,156706],{"className":41,"code":156705,"language":43,"meta":44,"style":44},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[46,156707,156708,156716,156724,156733,156737],{"__ignoreMap":44},[49,156709,156710,156712,156714],{"class":51,"line":52},[49,156711,146599],{"class":55},[49,156713,60],{"class":59},[49,156715,149416],{"class":328},[49,156717,156718,156720,156722],{"class":51,"line":84},[49,156719,146609],{"class":55},[49,156721,60],{"class":59},[49,156723,146614],{"class":66},[49,156725,156726,156728,156730],{"class":51,"line":109},[49,156727,155421],{"class":55},[49,156729,60],{"class":59},[49,156731,156732],{"class":66}," 95.5\n",[49,156734,156735],{"class":51,"line":120},[49,156736,2492],{"emptyLinePlaceholder":151},[49,156738,156739,156741,156743,156746,156749,156752,156755,156758,156761,156763,156765],{"class":51,"line":135},[49,156740,30504],{"class":66},[49,156742,228],{"class":55},[49,156744,156745],{"class":328},"\"姓名:",[49,156747,156748],{"class":66},"%s",[49,156750,156751],{"class":328}," 年龄:",[49,156753,156754],{"class":66},"%d",[49,156756,156757],{"class":328}," 分数:",[49,156759,156760],{"class":66},"%.1f",[49,156762,474],{"class":328},[49,156764,156144],{"class":59},[49,156766,156767],{"class":55}," (name, age, score))\n",[14,156769,156770],{},"常用占位符：",[361,156772,156773,156782],{},[364,156774,156775],{},[367,156776,156777,156780],{},[370,156778,156779],{},"占位符",[370,156781,25960],{},[408,156783,156784,156792,156800],{},[367,156785,156786,156790],{},[413,156787,156788],{},[46,156789,156748],{},[413,156791,155287],{},[367,156793,156794,156798],{},[413,156795,156796],{},[46,156797,156754],{},[413,156799,155265],{},[367,156801,156802,156807],{},[413,156803,156804],{},[46,156805,156806],{},"%f",[413,156808,155276],{},[14,156810,156811],{},"精度控制：",[39,156813,156815],{"className":41,"code":156814,"language":43,"meta":44,"style":44},"price = 12.3456\nprint(\"%.2f\" % price)\n",[46,156816,156817,156826],{"__ignoreMap":44},[49,156818,156819,156821,156823],{"class":51,"line":52},[49,156820,146744],{"class":55},[49,156822,60],{"class":59},[49,156824,156825],{"class":66}," 12.3456\n",[49,156827,156828,156830,156832,156834,156837,156839,156841],{"class":51,"line":84},[49,156829,30504],{"class":66},[49,156831,228],{"class":55},[49,156833,474],{"class":328},[49,156835,156836],{"class":66},"%.2f",[49,156838,474],{"class":328},[49,156840,156144],{"class":59},[49,156842,156843],{"class":55}," price)\n",[195,156845,156847],{"id":156846},"_2102-format方法","2.10.2 format方法",[39,156849,156851],{"className":41,"code":156850,"language":43,"meta":44,"style":44},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[46,156852,156853,156861,156869,156873,156892,156912],{"__ignoreMap":44},[49,156854,156855,156857,156859],{"class":51,"line":52},[49,156856,146599],{"class":55},[49,156858,60],{"class":59},[49,156860,149416],{"class":328},[49,156862,156863,156865,156867],{"class":51,"line":84},[49,156864,146609],{"class":55},[49,156866,60],{"class":59},[49,156868,146614],{"class":66},[49,156870,156871],{"class":51,"line":109},[49,156872,2492],{"emptyLinePlaceholder":151},[49,156874,156875,156877,156879,156881,156883,156885,156887,156889],{"class":51,"line":120},[49,156876,30504],{"class":66},[49,156878,228],{"class":55},[49,156880,156745],{"class":328},[49,156882,32548],{"class":66},[49,156884,156751],{"class":328},[49,156886,32548],{"class":66},[49,156888,474],{"class":328},[49,156890,156891],{"class":55},".format(name, age))\n",[49,156893,156894,156896,156898,156900,156903,156905,156908,156910],{"class":51,"line":135},[49,156895,30504],{"class":66},[49,156897,228],{"class":55},[49,156899,156745],{"class":328},[49,156901,156902],{"class":66},"{0}",[49,156904,156751],{"class":328},[49,156906,156907],{"class":66},"{1}",[49,156909,474],{"class":328},[49,156911,156891],{"class":55},[49,156913,156914,156916,156918,156920,156923,156925,156928,156930,156933,156935,156937,156940,156942,156944],{"class":51,"line":1306},[49,156915,30504],{"class":66},[49,156917,228],{"class":55},[49,156919,156745],{"class":328},[49,156921,156922],{"class":66},"{name}",[49,156924,156751],{"class":328},[49,156926,156927],{"class":66},"{age}",[49,156929,474],{"class":328},[49,156931,156932],{"class":55},".format(",[49,156934,79899],{"class":126},[49,156936,60],{"class":59},[49,156938,156939],{"class":55},"name, ",[49,156941,70310],{"class":126},[49,156943,60],{"class":59},[49,156945,156946],{"class":55},"age))\n",[195,156948,156950],{"id":156949},"_2103-f-string","2.10.3 f-string",[14,156952,156953],{},"推荐写法：",[39,156955,156957],{"className":41,"code":156956,"language":43,"meta":44,"style":44},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[46,156958,156959,156967,156975,156983,156987],{"__ignoreMap":44},[49,156960,156961,156963,156965],{"class":51,"line":52},[49,156962,146599],{"class":55},[49,156964,60],{"class":59},[49,156966,149416],{"class":328},[49,156968,156969,156971,156973],{"class":51,"line":84},[49,156970,146609],{"class":55},[49,156972,60],{"class":59},[49,156974,146614],{"class":66},[49,156976,156977,156979,156981],{"class":51,"line":109},[49,156978,155421],{"class":55},[49,156980,60],{"class":59},[49,156982,156732],{"class":66},[49,156984,156985],{"class":51,"line":120},[49,156986,2492],{"emptyLinePlaceholder":151},[49,156988,156989,156991,156993,156995,156997,156999,157001,157003,157005,157007,157009,157011,157013,157015,157018,157021,157023,157025],{"class":51,"line":135},[49,156990,30504],{"class":66},[49,156992,228],{"class":55},[49,156994,277],{"class":59},[49,156996,156745],{"class":328},[49,156998,1115],{"class":66},[49,157000,79899],{"class":55},[49,157002,1165],{"class":66},[49,157004,156751],{"class":328},[49,157006,1115],{"class":66},[49,157008,70310],{"class":55},[49,157010,1165],{"class":66},[49,157012,156757],{"class":328},[49,157014,1115],{"class":66},[49,157016,157017],{"class":55},"score",[49,157019,157020],{"class":59},":.1f",[49,157022,1165],{"class":66},[49,157024,474],{"class":328},[49,157026,81],{"class":55},[14,157028,157029],{},"表达式也可以放进去：",[39,157031,157033],{"className":41,"code":157032,"language":43,"meta":44,"style":44},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[46,157034,157035,157043,157051],{"__ignoreMap":44},[49,157036,157037,157039,157041],{"class":51,"line":52},[49,157038,146744],{"class":55},[49,157040,60],{"class":59},[49,157042,146749],{"class":66},[49,157044,157045,157047,157049],{"class":51,"line":84},[49,157046,146754],{"class":55},[49,157048,60],{"class":59},[49,157050,54516],{"class":66},[49,157052,157053,157055,157057,157059,157062,157064,157066,157068,157071,157073,157076],{"class":51,"line":109},[49,157054,30504],{"class":66},[49,157056,228],{"class":55},[49,157058,277],{"class":59},[49,157060,157061],{"class":328},"\"总价:",[49,157063,1115],{"class":66},[49,157065,146744],{"class":55},[49,157067,674],{"class":59},[49,157069,157070],{"class":55}," count",[49,157072,1165],{"class":66},[49,157074,157075],{"class":328},"元\"",[49,157077,81],{"class":55},[166,157079,157081],{"id":157080},"_211-input输入","2.11 input输入",[14,157083,157084,157087],{},[46,157085,157086],{},"input()"," 会暂停程序，等待用户输入。",[39,157089,157091],{"className":41,"code":157090,"language":43,"meta":44,"style":44},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[46,157092,157093,157107],{"__ignoreMap":44},[49,157094,157095,157097,157099,157101,157103,157105],{"class":51,"line":52},[49,157096,146599],{"class":55},[49,157098,60],{"class":59},[49,157100,60694],{"class":66},[49,157102,228],{"class":55},[49,157104,152442],{"class":328},[49,157106,81],{"class":55},[49,157108,157109,157111,157113,157115,157118,157120,157122,157124,157126],{"class":51,"line":84},[49,157110,30504],{"class":66},[49,157112,228],{"class":55},[49,157114,277],{"class":59},[49,157116,157117],{"class":328},"\"你好，",[49,157119,1115],{"class":66},[49,157121,79899],{"class":55},[49,157123,1165],{"class":66},[49,157125,474],{"class":328},[49,157127,81],{"class":55},[14,157129,157130],{},"输入整数：",[39,157132,157134],{"className":41,"code":157133,"language":43,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[46,157135,157136,157154],{"__ignoreMap":44},[49,157137,157138,157140,157142,157144,157146,157148,157150,157152],{"class":51,"line":52},[49,157139,146609],{"class":55},[49,157141,60],{"class":59},[49,157143,2474],{"class":66},[49,157145,228],{"class":55},[49,157147,53910],{"class":66},[49,157149,228],{"class":55},[49,157151,152457],{"class":328},[49,157153,30586],{"class":55},[49,157155,157156,157158,157160,157162,157165,157167,157169,157171,157174,157176],{"class":51,"line":84},[49,157157,30504],{"class":66},[49,157159,228],{"class":55},[49,157161,277],{"class":59},[49,157163,157164],{"class":328},"\"明年你",[49,157166,1115],{"class":66},[49,157168,146609],{"class":55},[49,157170,700],{"class":59},[49,157172,157173],{"class":66}," 1}",[49,157175,149467],{"class":328},[49,157177,81],{"class":55},[14,157179,157180],{},"输入小数：",[39,157182,157184],{"className":41,"code":157183,"language":43,"meta":44,"style":44},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[46,157185,157186,157205],{"__ignoreMap":44},[49,157187,157188,157190,157192,157194,157196,157198,157200,157203],{"class":51,"line":52},[49,157189,155394],{"class":55},[49,157191,60],{"class":59},[49,157193,109860],{"class":66},[49,157195,228],{"class":55},[49,157197,53910],{"class":66},[49,157199,228],{"class":55},[49,157201,157202],{"class":328},"\"请输入身高:\"",[49,157204,30586],{"class":55},[49,157206,157207,157209,157211,157213,157216,157218,157220,157223,157225,157228],{"class":51,"line":84},[49,157208,30504],{"class":66},[49,157210,228],{"class":55},[49,157212,277],{"class":59},[49,157214,157215],{"class":328},"\"身高:",[49,157217,1115],{"class":66},[49,157219,25072],{"class":55},[49,157221,157222],{"class":59},":.2f",[49,157224,1165],{"class":66},[49,157226,157227],{"class":328},"米\"",[49,157229,81],{"class":55},[166,157231,157233],{"id":157232},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157235,123355],{},[178,157237,157238,157241,157244,157247],{},[181,157239,157240],{},"输入商品单价。",[181,157242,157243],{},"输入购买数量。",[181,157245,157246],{},"输入折扣，例如 0.8 表示八折。",[181,157248,157249],{},"输出最终金额，保留两位小数。",[14,157251,10125],{},[39,157253,157255],{"className":41,"code":157254,"language":43,"meta":44,"style":44},"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",[46,157256,157257,157276,157295,157315,157319,157339,157343,157366,157387,157409],{"__ignoreMap":44},[49,157258,157259,157261,157263,157265,157267,157269,157271,157274],{"class":51,"line":52},[49,157260,146744],{"class":55},[49,157262,60],{"class":59},[49,157264,109860],{"class":66},[49,157266,228],{"class":55},[49,157268,53910],{"class":66},[49,157270,228],{"class":55},[49,157272,157273],{"class":328},"\"请输入商品单价:\"",[49,157275,30586],{"class":55},[49,157277,157278,157280,157282,157284,157286,157288,157290,157293],{"class":51,"line":84},[49,157279,146754],{"class":55},[49,157281,60],{"class":59},[49,157283,2474],{"class":66},[49,157285,228],{"class":55},[49,157287,53910],{"class":66},[49,157289,228],{"class":55},[49,157291,157292],{"class":328},"\"请输入购买数量:\"",[49,157294,30586],{"class":55},[49,157296,157297,157300,157302,157304,157306,157308,157310,157313],{"class":51,"line":109},[49,157298,157299],{"class":55},"discount ",[49,157301,60],{"class":59},[49,157303,109860],{"class":66},[49,157305,228],{"class":55},[49,157307,53910],{"class":66},[49,157309,228],{"class":55},[49,157311,157312],{"class":328},"\"请输入折扣:\"",[49,157314,30586],{"class":55},[49,157316,157317],{"class":51,"line":120},[49,157318,2492],{"emptyLinePlaceholder":151},[49,157320,157321,157324,157326,157329,157331,157334,157336],{"class":51,"line":135},[49,157322,157323],{"class":55},"total ",[49,157325,60],{"class":59},[49,157327,157328],{"class":55}," price ",[49,157330,674],{"class":59},[49,157332,157333],{"class":55}," count ",[49,157335,674],{"class":59},[49,157337,157338],{"class":55}," discount\n",[49,157340,157341],{"class":51,"line":1306},[49,157342,2492],{"emptyLinePlaceholder":151},[49,157344,157345,157347,157349,157351,157354,157356,157358,157360,157362,157364],{"class":51,"line":1312},[49,157346,30504],{"class":66},[49,157348,228],{"class":55},[49,157350,277],{"class":59},[49,157352,157353],{"class":328},"\"商品单价:",[49,157355,1115],{"class":66},[49,157357,79904],{"class":55},[49,157359,157222],{"class":59},[49,157361,1165],{"class":66},[49,157363,474],{"class":328},[49,157365,81],{"class":55},[49,157367,157368,157370,157372,157374,157377,157379,157381,157383,157385],{"class":51,"line":1403},[49,157369,30504],{"class":66},[49,157371,228],{"class":55},[49,157373,277],{"class":59},[49,157375,157376],{"class":328},"\"购买数量:",[49,157378,1115],{"class":66},[49,157380,84523],{"class":55},[49,157382,1165],{"class":66},[49,157384,474],{"class":328},[49,157386,81],{"class":55},[49,157388,157389,157391,157393,157395,157398,157400,157403,157405,157407],{"class":51,"line":1409},[49,157390,30504],{"class":66},[49,157392,228],{"class":55},[49,157394,277],{"class":59},[49,157396,157397],{"class":328},"\"折扣:",[49,157399,1115],{"class":66},[49,157401,157402],{"class":55},"discount",[49,157404,1165],{"class":66},[49,157406,474],{"class":328},[49,157408,81],{"class":55},[49,157410,157411,157413,157415,157417,157420,157422,157425,157427,157429,157431],{"class":51,"line":1421},[49,157412,30504],{"class":66},[49,157414,228],{"class":55},[49,157416,277],{"class":59},[49,157418,157419],{"class":328},"\"应付金额:",[49,157421,1115],{"class":66},[49,157423,157424],{"class":55},"total",[49,157426,157222],{"class":59},[49,157428,1165],{"class":66},[49,157430,157075],{"class":328},[49,157432,81],{"class":55},[166,157434,157436],{"id":157435},"_213-易错点","2.13 易错点",[178,157438,157439,157444,157450,157458,157461],{},[181,157440,157441,157443],{},[46,157442,157086],{}," 的结果是字符串，做运算前要转换。",[181,157445,157446,157447,28476],{},"字符串拼接时，数字要先 ",[46,157448,157449],{},"str()",[181,157451,157452,157454,157455,157457],{},[46,157453,60],{}," 是赋值，",[46,157456,3041],{}," 是比较。",[181,157459,157460],{},"Python 没有自增自减运算符。",[181,157462,157463],{},"浮点数计算可能有精度误差：",[39,157465,157467],{"className":41,"code":157466,"language":43,"meta":44,"style":44},"print(0.1 + 0.2)\n",[46,157468,157469],{"__ignoreMap":44},[49,157470,157471,157473,157475,157477,157479,157482],{"class":51,"line":52},[49,157472,30504],{"class":66},[49,157474,228],{"class":55},[49,157476,86299],{"class":66},[49,157478,45655],{"class":59},[49,157480,157481],{"class":66}," 0.2",[49,157483,81],{"class":55},[14,157485,157486,157487,157490],{},"金额计算如果要求严格，可以后续学习 ",[46,157488,157489],{},"decimal"," 模块。",[166,157492,157494],{"id":157493},"_214-本章练习","2.14 本章练习",[178,157496,157497,157500,157503,157506,157509],{},[181,157498,157499],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[181,157501,157502],{},"输入圆的半径，计算面积，保留两位小数。",[181,157504,157505],{},"输入工资和奖金，计算总收入。",[181,157507,157508],{},"输入摄氏温度，转换为华氏温度。",[181,157510,157511],{},"写一个 BMI 计算程序：",[39,157513,157516],{"className":157514,"code":157515,"language":5278,"meta":44},[5276],"BMI = 体重kg \u002F 身高m ** 2\n",[46,157517,157515],{"__ignoreMap":44},[143,157519,157520],{},"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":44,"searchDepth":84,"depth":84,"links":157522},[157523,157524,157525,157526,157527,157528,157529,157535,157536,157537,157542,157543,157544,157545],{"id":155084,"depth":84,"text":155085},{"id":155193,"depth":84,"text":155194},{"id":155364,"depth":84,"text":155365},{"id":155441,"depth":84,"text":155442},{"id":50820,"depth":84,"text":50821},{"id":155747,"depth":84,"text":155748},{"id":155973,"depth":84,"text":155974,"children":157530},[157531,157532,157533,157534],{"id":155977,"depth":109,"text":155978},{"id":156171,"depth":109,"text":156172},{"id":156259,"depth":109,"text":156260},{"id":156365,"depth":109,"text":156366},{"id":156474,"depth":84,"text":156475},{"id":156632,"depth":84,"text":156633},{"id":156697,"depth":84,"text":156698,"children":157538},[157539,157540,157541],{"id":156701,"depth":109,"text":156702},{"id":156846,"depth":109,"text":156847},{"id":156949,"depth":109,"text":156950},{"id":157080,"depth":84,"text":157081},{"id":157232,"depth":84,"text":157233},{"id":157435,"depth":84,"text":157436},{"id":157493,"depth":84,"text":157494},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155076,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157552,"title":157553,"body":157554,"description":148,"extension":149,"meta":159190,"navigation":151,"path":159191,"seo":159192,"stem":159193,"__hash__":159194},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157555,"toc":159171},[157556,157559,157563,157566,157581,157584,157612,157616,157666,157668,157684,157687,157713,157716,157720,157787,157790,157806,157810,157813,157931,157934,157941,157990,157996,158000,158003,158116,158119,158123,158127,158130,158180,158184,158187,158237,158241,158244,158282,158286,158289,158335,158338,158373,158377,158382,158385,158431,158433,158500,158504,158510,158621,158630,158634,158636,158647,158649,158815,158819,158821,158835,158837,159051,159055,159074,159091,159094,159140,159144,159168],[10,157557,157553],{"id":157558},"_3-判断语句",[166,157560,157562],{"id":157561},"_31-布尔值","3.1 布尔值",[14,157564,157565],{},"判断语句依赖布尔值：",[39,157567,157569],{"className":41,"code":157568,"language":43,"meta":44,"style":44},"True\nFalse\n",[46,157570,157571,157576],{"__ignoreMap":44},[49,157572,157573],{"class":51,"line":52},[49,157574,157575],{"class":66},"True\n",[49,157577,157578],{"class":51,"line":84},[49,157579,157580],{"class":66},"False\n",[14,157582,157583],{},"比较表达式会产生布尔值：",[39,157585,157587],{"className":41,"code":157586,"language":43,"meta":44,"style":44},"age = 18\nprint(age >= 18)  # True\n",[46,157588,157589,157597],{"__ignoreMap":44},[49,157590,157591,157593,157595],{"class":51,"line":52},[49,157592,146609],{"class":55},[49,157594,60],{"class":59},[49,157596,146614],{"class":66},[49,157598,157599,157601,157603,157605,157607,157609],{"class":51,"line":84},[49,157600,30504],{"class":66},[49,157602,155831],{"class":55},[49,157604,1802],{"class":59},[49,157606,156348],{"class":66},[49,157608,45897],{"class":55},[49,157610,157611],{"class":283},"# True\n",[166,157613,157615],{"id":157614},"_32-if基础语法","3.2 if基础语法",[39,157617,157619],{"className":41,"code":157618,"language":43,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[46,157620,157621,157639,157643,157655],{"__ignoreMap":44},[49,157622,157623,157625,157627,157629,157631,157633,157635,157637],{"class":51,"line":52},[49,157624,146609],{"class":55},[49,157626,60],{"class":59},[49,157628,2474],{"class":66},[49,157630,228],{"class":55},[49,157632,53910],{"class":66},[49,157634,228],{"class":55},[49,157636,152457],{"class":328},[49,157638,30586],{"class":55},[49,157640,157641],{"class":51,"line":84},[49,157642,2492],{"emptyLinePlaceholder":151},[49,157644,157645,157647,157649,157651,157653],{"class":51,"line":109},[49,157646,1623],{"class":59},[49,157648,15797],{"class":55},[49,157650,1802],{"class":59},[49,157652,156348],{"class":66},[49,157654,3831],{"class":55},[49,157656,157657,157659,157661,157664],{"class":51,"line":120},[49,157658,31388],{"class":66},[49,157660,228],{"class":55},[49,157662,157663],{"class":328},"\"可以进入网吧\"",[49,157665,81],{"class":55},[14,157667,9115],{},[178,157669,157670,157675,157678,157681],{},[181,157671,157672,157674],{},[46,157673,1623],{}," 后面是条件表达式。",[181,157676,157677],{},"条件后面必须写冒号。",[181,157679,157680],{},"条件成立时执行缩进代码块。",[181,157682,157683],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157685,157686],{},"错误示例：",[39,157688,157690],{"className":41,"code":157689,"language":43,"meta":44,"style":44},"if age >= 18\n    print(\"可以进入\")\n",[46,157691,157692,157702],{"__ignoreMap":44},[49,157693,157694,157696,157698,157700],{"class":51,"line":52},[49,157695,1623],{"class":59},[49,157697,15797],{"class":55},[49,157699,1802],{"class":59},[49,157701,146614],{"class":66},[49,157703,157704,157706,157708,157711],{"class":51,"line":84},[49,157705,31388],{"class":66},[49,157707,228],{"class":55},[49,157709,157710],{"class":328},"\"可以进入\"",[49,157712,81],{"class":55},[14,157714,157715],{},"缺少冒号。",[166,157717,157719],{"id":157718},"_33-if-else","3.3 if else",[39,157721,157723],{"className":41,"code":157722,"language":43,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[46,157724,157725,157743,157747,157759,157770,157776],{"__ignoreMap":44},[49,157726,157727,157729,157731,157733,157735,157737,157739,157741],{"class":51,"line":52},[49,157728,146609],{"class":55},[49,157730,60],{"class":59},[49,157732,2474],{"class":66},[49,157734,228],{"class":55},[49,157736,53910],{"class":66},[49,157738,228],{"class":55},[49,157740,152457],{"class":328},[49,157742,30586],{"class":55},[49,157744,157745],{"class":51,"line":84},[49,157746,2492],{"emptyLinePlaceholder":151},[49,157748,157749,157751,157753,157755,157757],{"class":51,"line":109},[49,157750,1623],{"class":59},[49,157752,15797],{"class":55},[49,157754,1802],{"class":59},[49,157756,156348],{"class":66},[49,157758,3831],{"class":55},[49,157760,157761,157763,157765,157768],{"class":51,"line":120},[49,157762,31388],{"class":66},[49,157764,228],{"class":55},[49,157766,157767],{"class":328},"\"成年人\"",[49,157769,81],{"class":55},[49,157771,157772,157774],{"class":51,"line":135},[49,157773,1793],{"class":59},[49,157775,3831],{"class":55},[49,157777,157778,157780,157782,157785],{"class":51,"line":1306},[49,157779,31388],{"class":66},[49,157781,228],{"class":55},[49,157783,157784],{"class":328},"\"未成年人\"",[49,157786,81],{"class":55},[14,157788,157789],{},"执行逻辑：",[178,157791,157792,157798,157803],{},[181,157793,157794,157795,157797],{},"条件成立，执行 ",[46,157796,1623],{}," 代码块。",[181,157799,157800,157801,157797],{},"条件不成立，执行 ",[46,157802,1793],{},[181,157804,157805],{},"两个代码块只会执行其中一个。",[166,157807,157809],{"id":157808},"_34-if-elif-else","3.4 if elif else",[14,157811,157812],{},"多条件判断：",[39,157814,157816],{"className":41,"code":157815,"language":43,"meta":44,"style":44},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[46,157817,157818,157836,157840,157854,157865,157879,157890,157903,157914,157920],{"__ignoreMap":44},[49,157819,157820,157822,157824,157826,157828,157830,157832,157834],{"class":51,"line":52},[49,157821,155421],{"class":55},[49,157823,60],{"class":59},[49,157825,2474],{"class":66},[49,157827,228],{"class":55},[49,157829,53910],{"class":66},[49,157831,228],{"class":55},[49,157833,152472],{"class":328},[49,157835,30586],{"class":55},[49,157837,157838],{"class":51,"line":84},[49,157839,2492],{"emptyLinePlaceholder":151},[49,157841,157842,157844,157847,157849,157852],{"class":51,"line":109},[49,157843,1623],{"class":59},[49,157845,157846],{"class":55}," score ",[49,157848,1802],{"class":59},[49,157850,157851],{"class":66}," 90",[49,157853,3831],{"class":55},[49,157855,157856,157858,157860,157863],{"class":51,"line":120},[49,157857,31388],{"class":66},[49,157859,228],{"class":55},[49,157861,157862],{"class":328},"\"优秀\"",[49,157864,81],{"class":55},[49,157866,157867,157870,157872,157874,157877],{"class":51,"line":135},[49,157868,157869],{"class":59},"elif",[49,157871,157846],{"class":55},[49,157873,1802],{"class":59},[49,157875,157876],{"class":66}," 80",[49,157878,3831],{"class":55},[49,157880,157881,157883,157885,157888],{"class":51,"line":1306},[49,157882,31388],{"class":66},[49,157884,228],{"class":55},[49,157886,157887],{"class":328},"\"良好\"",[49,157889,81],{"class":55},[49,157891,157892,157894,157896,157898,157901],{"class":51,"line":1312},[49,157893,157869],{"class":59},[49,157895,157846],{"class":55},[49,157897,1802],{"class":59},[49,157899,157900],{"class":66}," 60",[49,157902,3831],{"class":55},[49,157904,157905,157907,157909,157912],{"class":51,"line":1403},[49,157906,31388],{"class":66},[49,157908,228],{"class":55},[49,157910,157911],{"class":328},"\"及格\"",[49,157913,81],{"class":55},[49,157915,157916,157918],{"class":51,"line":1409},[49,157917,1793],{"class":59},[49,157919,3831],{"class":55},[49,157921,157922,157924,157926,157929],{"class":51,"line":1421},[49,157923,31388],{"class":66},[49,157925,228],{"class":55},[49,157927,157928],{"class":328},"\"不及格\"",[49,157930,81],{"class":55},[14,157932,157933],{},"注意判断顺序很重要。",[14,157935,157936,157937,157940],{},"如果把 ",[46,157938,157939],{},"score >= 60"," 放在最前面：",[39,157942,157944],{"className":41,"code":157943,"language":43,"meta":44,"style":44},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[46,157945,157946,157958,157968,157980],{"__ignoreMap":44},[49,157947,157948,157950,157952,157954,157956],{"class":51,"line":52},[49,157949,1623],{"class":59},[49,157951,157846],{"class":55},[49,157953,1802],{"class":59},[49,157955,157900],{"class":66},[49,157957,3831],{"class":55},[49,157959,157960,157962,157964,157966],{"class":51,"line":84},[49,157961,31388],{"class":66},[49,157963,228],{"class":55},[49,157965,157911],{"class":328},[49,157967,81],{"class":55},[49,157969,157970,157972,157974,157976,157978],{"class":51,"line":109},[49,157971,157869],{"class":59},[49,157973,157846],{"class":55},[49,157975,1802],{"class":59},[49,157977,157851],{"class":66},[49,157979,3831],{"class":55},[49,157981,157982,157984,157986,157988],{"class":51,"line":120},[49,157983,31388],{"class":66},[49,157985,228],{"class":55},[49,157987,157862],{"class":328},[49,157989,81],{"class":55},[14,157991,157992,157993,157995],{},"成绩 95 会先满足 ",[46,157994,157939],{},"，后面的优秀分支就不会执行。",[166,157997,157999],{"id":157998},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158001,158002],{},"嵌套判断就是在一个判断内部再写判断。",[39,158004,158006],{"className":41,"code":158005,"language":43,"meta":44,"style":44},"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",[46,158007,158008,158026,158041,158045,158057,158071,158081,158088,158099,158105],{"__ignoreMap":44},[49,158009,158010,158012,158014,158016,158018,158020,158022,158024],{"class":51,"line":52},[49,158011,146609],{"class":55},[49,158013,60],{"class":59},[49,158015,2474],{"class":66},[49,158017,228],{"class":55},[49,158019,53910],{"class":66},[49,158021,228],{"class":55},[49,158023,152457],{"class":328},[49,158025,30586],{"class":55},[49,158027,158028,158030,158032,158034,158036,158039],{"class":51,"line":84},[49,158029,156424],{"class":55},[49,158031,60],{"class":59},[49,158033,60694],{"class":66},[49,158035,228],{"class":55},[49,158037,158038],{"class":328},"\"是否有票(y\u002Fn):\"",[49,158040,81],{"class":55},[49,158042,158043],{"class":51,"line":109},[49,158044,2492],{"emptyLinePlaceholder":151},[49,158046,158047,158049,158051,158053,158055],{"class":51,"line":120},[49,158048,1623],{"class":59},[49,158050,15797],{"class":55},[49,158052,1802],{"class":59},[49,158054,156348],{"class":66},[49,158056,3831],{"class":55},[49,158058,158059,158061,158064,158066,158069],{"class":51,"line":135},[49,158060,3193],{"class":59},[49,158062,158063],{"class":55}," has_ticket ",[49,158065,3041],{"class":59},[49,158067,158068],{"class":328}," \"y\"",[49,158070,3831],{"class":55},[49,158072,158073,158075,158077,158079],{"class":51,"line":1306},[49,158074,32540],{"class":66},[49,158076,228],{"class":55},[49,158078,157710],{"class":328},[49,158080,81],{"class":55},[49,158082,158083,158086],{"class":51,"line":1312},[49,158084,158085],{"class":59},"    else",[49,158087,3831],{"class":55},[49,158089,158090,158092,158094,158097],{"class":51,"line":1403},[49,158091,32540],{"class":66},[49,158093,228],{"class":55},[49,158095,158096],{"class":328},"\"请先买票\"",[49,158098,81],{"class":55},[49,158100,158101,158103],{"class":51,"line":1409},[49,158102,1793],{"class":59},[49,158104,3831],{"class":55},[49,158106,158107,158109,158111,158114],{"class":51,"line":1421},[49,158108,31388],{"class":66},[49,158110,228],{"class":55},[49,158112,158113],{"class":328},"\"未成年人禁止进入\"",[49,158115,81],{"class":55},[14,158117,158118],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[166,158120,158122],{"id":158121},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[195,158124,158126],{"id":158125},"_361-and","3.6.1 and",[14,158128,158129],{},"两个条件都成立才成立。",[39,158131,158133],{"className":41,"code":158132,"language":43,"meta":44,"style":44},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[46,158134,158135,158143,158151,158155,158170],{"__ignoreMap":44},[49,158136,158137,158139,158141],{"class":51,"line":52},[49,158138,146609],{"class":55},[49,158140,60],{"class":59},[49,158142,88154],{"class":66},[49,158144,158145,158147,158149],{"class":51,"line":84},[49,158146,156424],{"class":55},[49,158148,60],{"class":59},[49,158150,153662],{"class":66},[49,158152,158153],{"class":51,"line":109},[49,158154,2492],{"emptyLinePlaceholder":151},[49,158156,158157,158159,158161,158163,158165,158167],{"class":51,"line":120},[49,158158,1623],{"class":59},[49,158160,15797],{"class":55},[49,158162,1802],{"class":59},[49,158164,156348],{"class":66},[49,158166,120492],{"class":59},[49,158168,158169],{"class":55}," has_ticket:\n",[49,158171,158172,158174,158176,158178],{"class":51,"line":135},[49,158173,31388],{"class":66},[49,158175,228],{"class":55},[49,158177,157710],{"class":328},[49,158179,81],{"class":55},[195,158181,158183],{"id":158182},"_362-or","3.6.2 or",[14,158185,158186],{},"只要一个条件成立就成立。",[39,158188,158190],{"className":41,"code":158189,"language":43,"meta":44,"style":44},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[46,158191,158192,158201,158210,158214,158226],{"__ignoreMap":44},[49,158193,158194,158197,158199],{"class":51,"line":52},[49,158195,158196],{"class":55},"is_vip ",[49,158198,60],{"class":59},[49,158200,125870],{"class":66},[49,158202,158203,158206,158208],{"class":51,"line":84},[49,158204,158205],{"class":55},"coupon ",[49,158207,60],{"class":59},[49,158209,153662],{"class":66},[49,158211,158212],{"class":51,"line":109},[49,158213,2492],{"emptyLinePlaceholder":151},[49,158215,158216,158218,158221,158223],{"class":51,"line":120},[49,158217,1623],{"class":59},[49,158219,158220],{"class":55}," is_vip ",[49,158222,115153],{"class":59},[49,158224,158225],{"class":55}," coupon:\n",[49,158227,158228,158230,158232,158235],{"class":51,"line":135},[49,158229,31388],{"class":66},[49,158231,228],{"class":55},[49,158233,158234],{"class":328},"\"可以享受优惠\"",[49,158236,81],{"class":55},[195,158238,158240],{"id":158239},"_363-not","3.6.3 not",[14,158242,158243],{},"取反。",[39,158245,158247],{"className":41,"code":158246,"language":43,"meta":44,"style":44},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[46,158248,158249,158258,158262,158271],{"__ignoreMap":44},[49,158250,158251,158254,158256],{"class":51,"line":52},[49,158252,158253],{"class":55},"is_closed ",[49,158255,60],{"class":59},[49,158257,125870],{"class":66},[49,158259,158260],{"class":51,"line":84},[49,158261,2492],{"emptyLinePlaceholder":151},[49,158263,158264,158266,158268],{"class":51,"line":109},[49,158265,1623],{"class":59},[49,158267,39019],{"class":59},[49,158269,158270],{"class":55}," is_closed:\n",[49,158272,158273,158275,158277,158280],{"class":51,"line":120},[49,158274,31388],{"class":66},[49,158276,228],{"class":55},[49,158278,158279],{"class":328},"\"店铺营业中\"",[49,158281,81],{"class":55},[166,158283,158285],{"id":158284},"_37-链式比较","3.7 链式比较",[14,158287,158288],{},"Python 支持链式比较：",[39,158290,158292],{"className":41,"code":158291,"language":43,"meta":44,"style":44},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[46,158293,158294,158303,158307,158324],{"__ignoreMap":44},[49,158295,158296,158298,158300],{"class":51,"line":52},[49,158297,155421],{"class":55},[49,158299,60],{"class":59},[49,158301,158302],{"class":66}," 85\n",[49,158304,158305],{"class":51,"line":84},[49,158306,2492],{"emptyLinePlaceholder":151},[49,158308,158309,158311,158313,158316,158318,158320,158322],{"class":51,"line":109},[49,158310,1623],{"class":59},[49,158312,4185],{"class":66},[49,158314,158315],{"class":59}," \u003C=",[49,158317,157846],{"class":55},[49,158319,1680],{"class":59},[49,158321,5844],{"class":66},[49,158323,3831],{"class":55},[49,158325,158326,158328,158330,158333],{"class":51,"line":120},[49,158327,31388],{"class":66},[49,158329,228],{"class":55},[49,158331,158332],{"class":328},"\"成绩合法\"",[49,158334,81],{"class":55},[14,158336,158337],{},"等价于：",[39,158339,158341],{"className":41,"code":158340,"language":43,"meta":44,"style":44},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[46,158342,158343,158363],{"__ignoreMap":44},[49,158344,158345,158347,158349,158351,158353,158355,158357,158359,158361],{"class":51,"line":52},[49,158346,1623],{"class":59},[49,158348,157846],{"class":55},[49,158350,1802],{"class":59},[49,158352,4185],{"class":66},[49,158354,120492],{"class":59},[49,158356,157846],{"class":55},[49,158358,1680],{"class":59},[49,158360,5844],{"class":66},[49,158362,3831],{"class":55},[49,158364,158365,158367,158369,158371],{"class":51,"line":84},[49,158366,31388],{"class":66},[49,158368,228],{"class":55},[49,158370,158332],{"class":328},[49,158372,81],{"class":55},[166,158374,158376],{"id":158375},"_38-真值和假值","3.8 真值和假值",[14,158378,116530,158379,158381],{},[46,158380,1623],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158383,158384],{},"假值：",[39,158386,158388],{"className":41,"code":158387,"language":43,"meta":44,"style":44},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[46,158389,158390,158394,158399,158403,158407,158412,158416,158420,158425],{"__ignoreMap":44},[49,158391,158392],{"class":51,"line":52},[49,158393,157580],{"class":66},[49,158395,158396],{"class":51,"line":84},[49,158397,158398],{"class":66},"None\n",[49,158400,158401],{"class":51,"line":109},[49,158402,3177],{"class":66},[49,158404,158405],{"class":51,"line":120},[49,158406,32431],{"class":66},[49,158408,158409],{"class":51,"line":135},[49,158410,158411],{"class":328},"\"\"\n",[49,158413,158414],{"class":51,"line":1306},[49,158415,32446],{"class":55},[49,158417,158418],{"class":51,"line":1312},[49,158419,2068],{"class":55},[49,158421,158422],{"class":51,"line":1403},[49,158423,158424],{"class":55},"{}\n",[49,158426,158427,158429],{"class":51,"line":1409},[49,158428,155353],{"class":66},[49,158430,2068],{"class":55},[14,158432,15225],{},[39,158434,158436],{"className":41,"code":158435,"language":43,"meta":44,"style":44},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[46,158437,158438,158452,158456,158463,158483,158489],{"__ignoreMap":44},[49,158439,158440,158442,158444,158446,158448,158450],{"class":51,"line":52},[49,158441,146599],{"class":55},[49,158443,60],{"class":59},[49,158445,60694],{"class":66},[49,158447,228],{"class":55},[49,158449,152442],{"class":328},[49,158451,81],{"class":55},[49,158453,158454],{"class":51,"line":84},[49,158455,2492],{"emptyLinePlaceholder":151},[49,158457,158458,158460],{"class":51,"line":109},[49,158459,1623],{"class":59},[49,158461,158462],{"class":55}," name:\n",[49,158464,158465,158467,158469,158471,158473,158475,158477,158479,158481],{"class":51,"line":120},[49,158466,31388],{"class":66},[49,158468,228],{"class":55},[49,158470,277],{"class":59},[49,158472,157117],{"class":328},[49,158474,1115],{"class":66},[49,158476,79899],{"class":55},[49,158478,1165],{"class":66},[49,158480,474],{"class":328},[49,158482,81],{"class":55},[49,158484,158485,158487],{"class":51,"line":135},[49,158486,1793],{"class":59},[49,158488,3831],{"class":55},[49,158490,158491,158493,158495,158498],{"class":51,"line":1306},[49,158492,31388],{"class":66},[49,158494,228],{"class":55},[49,158496,158497],{"class":328},"\"姓名不能为空\"",[49,158499,81],{"class":55},[166,158501,158503],{"id":158502},"_39-match语句","3.9 match语句",[14,158505,158506,158507,158509],{},"Python 3.10 开始支持 ",[46,158508,71354],{},"。它适合处理固定选项。",[39,158511,158513],{"className":41,"code":158512,"language":43,"meta":44,"style":44},"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",[46,158514,158515,158531,158535,158542,158552,158563,158572,158583,158592,158603,158610],{"__ignoreMap":44},[49,158516,158517,158520,158522,158524,158526,158529],{"class":51,"line":52},[49,158518,158519],{"class":55},"command ",[49,158521,60],{"class":59},[49,158523,60694],{"class":66},[49,158525,228],{"class":55},[49,158527,158528],{"class":328},"\"请输入命令:\"",[49,158530,81],{"class":55},[49,158532,158533],{"class":51,"line":84},[49,158534,2492],{"emptyLinePlaceholder":151},[49,158536,158537,158539],{"class":51,"line":109},[49,158538,71354],{"class":59},[49,158540,158541],{"class":55}," command:\n",[49,158543,158544,158547,158550],{"class":51,"line":120},[49,158545,158546],{"class":59},"    case",[49,158548,158549],{"class":328}," \"start\"",[49,158551,3831],{"class":55},[49,158553,158554,158556,158558,158561],{"class":51,"line":135},[49,158555,32540],{"class":66},[49,158557,228],{"class":55},[49,158559,158560],{"class":328},"\"启动\"",[49,158562,81],{"class":55},[49,158564,158565,158567,158570],{"class":51,"line":1306},[49,158566,158546],{"class":59},[49,158568,158569],{"class":328}," \"stop\"",[49,158571,3831],{"class":55},[49,158573,158574,158576,158578,158581],{"class":51,"line":1312},[49,158575,32540],{"class":66},[49,158577,228],{"class":55},[49,158579,158580],{"class":328},"\"停止\"",[49,158582,81],{"class":55},[49,158584,158585,158587,158590],{"class":51,"line":1403},[49,158586,158546],{"class":59},[49,158588,158589],{"class":328}," \"restart\"",[49,158591,3831],{"class":55},[49,158593,158594,158596,158598,158601],{"class":51,"line":1409},[49,158595,32540],{"class":66},[49,158597,228],{"class":55},[49,158599,158600],{"class":328},"\"重启\"",[49,158602,81],{"class":55},[49,158604,158605,158607],{"class":51,"line":1421},[49,158606,158546],{"class":59},[49,158608,158609],{"class":55}," _:\n",[49,158611,158612,158614,158616,158619],{"class":51,"line":1704},[49,158613,32540],{"class":66},[49,158615,228],{"class":55},[49,158617,158618],{"class":328},"\"未知命令\"",[49,158620,81],{"class":55},[14,158622,158623,158624,158626,158627,158629],{},"入门阶段掌握 ",[46,158625,154721],{}," 更重要，",[46,158628,71354],{}," 可以作为补充。",[166,158631,158633],{"id":158632},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158635,123355],{},[178,158637,158638,158641,158644],{},[181,158639,158640],{},"输入成绩。",[181,158642,158643],{},"判断成绩是否合法。",[181,158645,158646],{},"输出等级。",[14,158648,10125],{},[39,158650,158652],{"className":41,"code":158651,"language":43,"meta":44,"style":44},"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",[46,158653,158654,158672,158676,158694,158705,158717,158728,158740,158751,158764,158775,158787,158798,158804],{"__ignoreMap":44},[49,158655,158656,158658,158660,158662,158664,158666,158668,158670],{"class":51,"line":52},[49,158657,155421],{"class":55},[49,158659,60],{"class":59},[49,158661,109860],{"class":66},[49,158663,228],{"class":55},[49,158665,53910],{"class":66},[49,158667,228],{"class":55},[49,158669,152472],{"class":328},[49,158671,30586],{"class":55},[49,158673,158674],{"class":51,"line":84},[49,158675,2492],{"emptyLinePlaceholder":151},[49,158677,158678,158680,158682,158684,158686,158688,158690,158692],{"class":51,"line":109},[49,158679,1623],{"class":59},[49,158681,39019],{"class":59},[49,158683,4185],{"class":66},[49,158685,158315],{"class":59},[49,158687,157846],{"class":55},[49,158689,1680],{"class":59},[49,158691,5844],{"class":66},[49,158693,3831],{"class":55},[49,158695,158696,158698,158700,158703],{"class":51,"line":120},[49,158697,31388],{"class":66},[49,158699,228],{"class":55},[49,158701,158702],{"class":328},"\"成绩不合法\"",[49,158704,81],{"class":55},[49,158706,158707,158709,158711,158713,158715],{"class":51,"line":135},[49,158708,157869],{"class":59},[49,158710,157846],{"class":55},[49,158712,1802],{"class":59},[49,158714,157851],{"class":66},[49,158716,3831],{"class":55},[49,158718,158719,158721,158723,158726],{"class":51,"line":1306},[49,158720,31388],{"class":66},[49,158722,228],{"class":55},[49,158724,158725],{"class":328},"\"等级:A\"",[49,158727,81],{"class":55},[49,158729,158730,158732,158734,158736,158738],{"class":51,"line":1312},[49,158731,157869],{"class":59},[49,158733,157846],{"class":55},[49,158735,1802],{"class":59},[49,158737,157876],{"class":66},[49,158739,3831],{"class":55},[49,158741,158742,158744,158746,158749],{"class":51,"line":1403},[49,158743,31388],{"class":66},[49,158745,228],{"class":55},[49,158747,158748],{"class":328},"\"等级:B\"",[49,158750,81],{"class":55},[49,158752,158753,158755,158757,158759,158762],{"class":51,"line":1409},[49,158754,157869],{"class":59},[49,158756,157846],{"class":55},[49,158758,1802],{"class":59},[49,158760,158761],{"class":66}," 70",[49,158763,3831],{"class":55},[49,158765,158766,158768,158770,158773],{"class":51,"line":1421},[49,158767,31388],{"class":66},[49,158769,228],{"class":55},[49,158771,158772],{"class":328},"\"等级:C\"",[49,158774,81],{"class":55},[49,158776,158777,158779,158781,158783,158785],{"class":51,"line":1704},[49,158778,157869],{"class":59},[49,158780,157846],{"class":55},[49,158782,1802],{"class":59},[49,158784,157900],{"class":66},[49,158786,3831],{"class":55},[49,158788,158789,158791,158793,158796],{"class":51,"line":1709},[49,158790,31388],{"class":66},[49,158792,228],{"class":55},[49,158794,158795],{"class":328},"\"等级:D\"",[49,158797,81],{"class":55},[49,158799,158800,158802],{"class":51,"line":1715},[49,158801,1793],{"class":59},[49,158803,3831],{"class":55},[49,158805,158806,158808,158810,158813],{"class":51,"line":1720},[49,158807,31388],{"class":66},[49,158809,228],{"class":55},[49,158811,158812],{"class":328},"\"等级:E\"",[49,158814,81],{"class":55},[166,158816,158818],{"id":158817},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158820,123355],{},[178,158822,158823,158826,158829,158832],{},[181,158824,158825],{},"输入消费金额。",[181,158827,158828],{},"输入会员等级，普通、银卡、金卡。",[181,158830,158831],{},"普通不打折，银卡 9 折，金卡 8 折。",[181,158833,158834],{},"满 500 再减 50。",[14,158836,10125],{},[39,158838,158840],{"className":41,"code":158839,"language":43,"meta":44,"style":44},"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",[46,158841,158842,158862,158878,158882,158890,158894,158908,158918,158931,158940,158953,158961,158967,158978,158982,158996,159000,159014,159024,159028],{"__ignoreMap":44},[49,158843,158844,158847,158849,158851,158853,158855,158857,158860],{"class":51,"line":52},[49,158845,158846],{"class":55},"amount ",[49,158848,60],{"class":59},[49,158850,109860],{"class":66},[49,158852,228],{"class":55},[49,158854,53910],{"class":66},[49,158856,228],{"class":55},[49,158858,158859],{"class":328},"\"请输入消费金额:\"",[49,158861,30586],{"class":55},[49,158863,158864,158867,158869,158871,158873,158876],{"class":51,"line":84},[49,158865,158866],{"class":55},"level ",[49,158868,60],{"class":59},[49,158870,60694],{"class":66},[49,158872,228],{"class":55},[49,158874,158875],{"class":328},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[49,158877,81],{"class":55},[49,158879,158880],{"class":51,"line":109},[49,158881,2492],{"emptyLinePlaceholder":151},[49,158883,158884,158886,158888],{"class":51,"line":120},[49,158885,157299],{"class":55},[49,158887,60],{"class":59},[49,158889,55788],{"class":66},[49,158891,158892],{"class":51,"line":135},[49,158893,2492],{"emptyLinePlaceholder":151},[49,158895,158896,158898,158901,158903,158906],{"class":51,"line":1306},[49,158897,1623],{"class":59},[49,158899,158900],{"class":55}," level ",[49,158902,3041],{"class":59},[49,158904,158905],{"class":328}," \"银卡\"",[49,158907,3831],{"class":55},[49,158909,158910,158913,158915],{"class":51,"line":1312},[49,158911,158912],{"class":55},"    discount ",[49,158914,60],{"class":59},[49,158916,158917],{"class":66}," 0.9\n",[49,158919,158920,158922,158924,158926,158929],{"class":51,"line":1403},[49,158921,157869],{"class":59},[49,158923,158900],{"class":55},[49,158925,3041],{"class":59},[49,158927,158928],{"class":328}," \"金卡\"",[49,158930,3831],{"class":55},[49,158932,158933,158935,158937],{"class":51,"line":1409},[49,158934,158912],{"class":55},[49,158936,60],{"class":59},[49,158938,158939],{"class":66}," 0.8\n",[49,158941,158942,158944,158946,158948,158951],{"class":51,"line":1421},[49,158943,157869],{"class":59},[49,158945,158900],{"class":55},[49,158947,3041],{"class":59},[49,158949,158950],{"class":328}," \"普通\"",[49,158952,3831],{"class":55},[49,158954,158955,158957,158959],{"class":51,"line":1704},[49,158956,158912],{"class":55},[49,158958,60],{"class":59},[49,158960,55788],{"class":66},[49,158962,158963,158965],{"class":51,"line":1709},[49,158964,1793],{"class":59},[49,158966,3831],{"class":55},[49,158968,158969,158971,158973,158976],{"class":51,"line":1715},[49,158970,31388],{"class":66},[49,158972,228],{"class":55},[49,158974,158975],{"class":328},"\"会员等级输入错误，按普通会员计算\"",[49,158977,81],{"class":55},[49,158979,158980],{"class":51,"line":1720},[49,158981,2492],{"emptyLinePlaceholder":151},[49,158983,158984,158987,158989,158992,158994],{"class":51,"line":1734},[49,158985,158986],{"class":55},"pay ",[49,158988,60],{"class":59},[49,158990,158991],{"class":55}," amount ",[49,158993,674],{"class":59},[49,158995,157338],{"class":55},[49,158997,158998],{"class":51,"line":1739},[49,158999,2492],{"emptyLinePlaceholder":151},[49,159001,159002,159004,159007,159009,159012],{"class":51,"line":1745},[49,159003,1623],{"class":59},[49,159005,159006],{"class":55}," pay ",[49,159008,1802],{"class":59},[49,159010,159011],{"class":66}," 500",[49,159013,3831],{"class":55},[49,159015,159016,159019,159021],{"class":51,"line":1766},[49,159017,159018],{"class":55},"    pay ",[49,159020,150315],{"class":59},[49,159022,159023],{"class":66}," 50\n",[49,159025,159026],{"class":51,"line":1771},[49,159027,2492],{"emptyLinePlaceholder":151},[49,159029,159030,159032,159034,159036,159038,159040,159043,159045,159047,159049],{"class":51,"line":1785},[49,159031,30504],{"class":66},[49,159033,228],{"class":55},[49,159035,277],{"class":59},[49,159037,157419],{"class":328},[49,159039,1115],{"class":66},[49,159041,159042],{"class":55},"pay",[49,159044,157222],{"class":59},[49,159046,1165],{"class":66},[49,159048,157075],{"class":328},[49,159050,81],{"class":55},[166,159052,159054],{"id":159053},"_312-易错点","3.12 易错点",[178,159056,159057,159060,159063,159066,159071],{},[181,159058,159059],{},"冒号不能漏。",[181,159061,159062],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[181,159064,159065],{},"多分支判断要注意顺序。",[181,159067,159068,159069,28476],{},"判断相等用 ",[46,159070,3041],{},[181,159072,159073],{},"字符串比较区分大小写：",[39,159075,159077],{"className":41,"code":159076,"language":43,"meta":44,"style":44},"\"Y\" == \"y\"  # False\n",[46,159078,159079],{"__ignoreMap":44},[49,159080,159081,159084,159086,159088],{"class":51,"line":52},[49,159082,159083],{"class":328},"\"Y\"",[49,159085,101622],{"class":59},[49,159087,158068],{"class":328},[49,159089,159090],{"class":283},"  # False\n",[14,159092,159093],{},"可转换后再判断：",[39,159095,159097],{"className":41,"code":159096,"language":43,"meta":44,"style":44},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[46,159098,159099,159116,159129],{"__ignoreMap":44},[49,159100,159101,159104,159106,159108,159110,159113],{"class":51,"line":52},[49,159102,159103],{"class":55},"answer ",[49,159105,60],{"class":59},[49,159107,60694],{"class":66},[49,159109,228],{"class":55},[49,159111,159112],{"class":328},"\"是否继续(y\u002Fn):\"",[49,159114,159115],{"class":55},").lower()\n",[49,159117,159118,159120,159123,159125,159127],{"class":51,"line":84},[49,159119,1623],{"class":59},[49,159121,159122],{"class":55}," answer ",[49,159124,3041],{"class":59},[49,159126,158068],{"class":328},[49,159128,3831],{"class":55},[49,159130,159131,159133,159135,159138],{"class":51,"line":109},[49,159132,31388],{"class":66},[49,159134,228],{"class":55},[49,159136,159137],{"class":328},"\"继续\"",[49,159139,81],{"class":55},[166,159141,159143],{"id":159142},"_313-本章练习","3.13 本章练习",[178,159145,159146,159149,159152,159155,159165],{},[181,159147,159148],{},"输入年龄，判断是否成年。",[181,159150,159151],{},"输入年份，判断是否为闰年。",[181,159153,159154],{},"输入三个数字，输出最大值。",[181,159156,159157,159158,159161,159162,159164],{},"写登录判断：用户名是 ",[46,159159,159160],{},"admin"," 且密码是 ",[46,159163,15174],{}," 才登录成功。",[181,159166,159167],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[143,159169,159170],{},"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":44,"searchDepth":84,"depth":84,"links":159172},[159173,159174,159175,159176,159177,159178,159183,159184,159185,159186,159187,159188,159189],{"id":157561,"depth":84,"text":157562},{"id":157614,"depth":84,"text":157615},{"id":157718,"depth":84,"text":157719},{"id":157808,"depth":84,"text":157809},{"id":157998,"depth":84,"text":157999},{"id":158121,"depth":84,"text":158122,"children":159179},[159180,159181,159182],{"id":158125,"depth":109,"text":158126},{"id":158182,"depth":109,"text":158183},{"id":158239,"depth":109,"text":158240},{"id":158284,"depth":84,"text":158285},{"id":158375,"depth":84,"text":158376},{"id":158502,"depth":84,"text":158503},{"id":158632,"depth":84,"text":158633},{"id":158817,"depth":84,"text":158818},{"id":159053,"depth":84,"text":159054},{"id":159142,"depth":84,"text":159143},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157553,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159196,"title":159197,"body":159198,"description":148,"extension":149,"meta":160967,"navigation":151,"path":160968,"seo":160969,"stem":160970,"__hash__":160971},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159199,"toc":160947},[159200,159203,159207,159213,159216,159233,159237,159239,159256,159258,159303,159305,159322,159326,159329,159395,159398,159416,159420,159581,159590,159594,159598,159603,159650,159652,159658,159662,159667,159714,159716,159722,159726,159731,159767,159770,159817,159821,159827,159885,159890,159921,159926,159930,159985,159988,160060,160063,160122,160126,160129,160204,160207,160211,160317,160320,160346,160350,160362,160431,160434,160526,160530,160532,160543,160545,160675,160679,160881,160889,160893,160923,160927,160944],[10,159201,159197],{"id":159202},"_4-循环语句",[166,159204,159206],{"id":159205},"_41-为什么需要循环","4.1 为什么需要循环",[14,159208,159209,159210,159212],{},"如果要输出 1 到 100，不应该写 100 行 ",[46,159211,146535],{},"，而应该用循环。",[14,159214,159215],{},"循环适合处理重复任务：",[178,159217,159218,159221,159224,159227,159230],{},[181,159219,159220],{},"重复输出。",[181,159222,159223],{},"重复输入。",[181,159225,159226],{},"遍历数据。",[181,159228,159229],{},"持续执行菜单。",[181,159231,159232],{},"批量处理文件或数据。",[166,159234,159236],{"id":159235},"_42-while循环","4.2 while循环",[14,159238,5272],{},[39,159240,159242],{"className":41,"code":159241,"language":43,"meta":44,"style":44},"while 条件:\n    循环体\n",[46,159243,159244,159251],{"__ignoreMap":44},[49,159245,159246,159248],{"class":51,"line":52},[49,159247,108726],{"class":59},[49,159249,159250],{"class":55}," 条件:\n",[49,159252,159253],{"class":51,"line":84},[49,159254,159255],{"class":55},"    循环体\n",[14,159257,15225],{},[39,159259,159261],{"className":41,"code":159260,"language":43,"meta":44,"style":44},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[46,159262,159263,159271,159275,159287,159294],{"__ignoreMap":44},[49,159264,159265,159267,159269],{"class":51,"line":52},[49,159266,100211],{"class":55},[49,159268,60],{"class":59},[49,159270,55788],{"class":66},[49,159272,159273],{"class":51,"line":84},[49,159274,2492],{"emptyLinePlaceholder":151},[49,159276,159277,159279,159281,159283,159285],{"class":51,"line":109},[49,159278,108726],{"class":59},[49,159280,9528],{"class":55},[49,159282,1680],{"class":59},[49,159284,2240],{"class":66},[49,159286,3831],{"class":55},[49,159288,159289,159291],{"class":51,"line":120},[49,159290,31388],{"class":66},[49,159292,159293],{"class":55},"(i)\n",[49,159295,159296,159299,159301],{"class":51,"line":135},[49,159297,159298],{"class":55},"    i ",[49,159300,9567],{"class":59},[49,159302,55788],{"class":66},[14,159304,81018],{},[178,159306,159307,159313,159316,159319],{},[181,159308,159309,159310,28476],{},"判断条件 ",[46,159311,159312],{},"i \u003C= 5",[181,159314,159315],{},"条件成立，执行循环体。",[181,159317,159318],{},"执行完后回到条件判断。",[181,159320,159321],{},"条件不成立，退出循环。",[166,159323,159325],{"id":159324},"_43-while累加","4.3 while累加",[14,159327,159328],{},"计算 1 到 100 的和：",[39,159330,159332],{"className":41,"code":159331,"language":43,"meta":44,"style":44},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[46,159333,159334,159342,159350,159354,159366,159376,159384,159388],{"__ignoreMap":44},[49,159335,159336,159338,159340],{"class":51,"line":52},[49,159337,100211],{"class":55},[49,159339,60],{"class":59},[49,159341,55788],{"class":66},[49,159343,159344,159346,159348],{"class":51,"line":84},[49,159345,157323],{"class":55},[49,159347,60],{"class":59},[49,159349,47422],{"class":66},[49,159351,159352],{"class":51,"line":109},[49,159353,2492],{"emptyLinePlaceholder":151},[49,159355,159356,159358,159360,159362,159364],{"class":51,"line":120},[49,159357,108726],{"class":59},[49,159359,9528],{"class":55},[49,159361,1680],{"class":59},[49,159363,5844],{"class":66},[49,159365,3831],{"class":55},[49,159367,159368,159371,159373],{"class":51,"line":135},[49,159369,159370],{"class":55},"    total ",[49,159372,9567],{"class":59},[49,159374,159375],{"class":55}," i\n",[49,159377,159378,159380,159382],{"class":51,"line":1306},[49,159379,159298],{"class":55},[49,159381,9567],{"class":59},[49,159383,55788],{"class":66},[49,159385,159386],{"class":51,"line":1312},[49,159387,2492],{"emptyLinePlaceholder":151},[49,159389,159390,159392],{"class":51,"line":1403},[49,159391,30504],{"class":66},[49,159393,159394],{"class":55},"(total)\n",[14,159396,159397],{},"核心思想：",[178,159399,159400,159405,159410],{},[181,159401,159402,159404],{},[46,159403,661],{}," 控制循环次数。",[181,159406,159407,159409],{},[46,159408,157424],{}," 保存累加结果。",[181,159411,159412,159413,159415],{},"每轮循环都要更新 ",[46,159414,661],{},"，否则可能死循环。",[166,159417,159419],{"id":159418},"_44-while猜数字","4.4 while猜数字",[39,159421,159423],{"className":41,"code":159422,"language":43,"meta":44,"style":44},"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",[46,159424,159425,159431,159435,159452,159460,159464,159472,159492,159501,159505,159517,159528,159538,159549,159555,159577],{"__ignoreMap":44},[49,159426,159427,159429],{"class":51,"line":52},[49,159428,30481],{"class":59},[49,159430,45417],{"class":55},[49,159432,159433],{"class":51,"line":84},[49,159434,2492],{"emptyLinePlaceholder":151},[49,159436,159437,159439,159441,159444,159446,159448,159450],{"class":51,"line":109},[49,159438,159103],{"class":55},[49,159440,60],{"class":59},[49,159442,159443],{"class":55}," random.randint(",[49,159445,441],{"class":66},[49,159447,12525],{"class":55},[49,159449,533],{"class":66},[49,159451,81],{"class":55},[49,159453,159454,159456,159458],{"class":51,"line":120},[49,159455,146754],{"class":55},[49,159457,60],{"class":59},[49,159459,47422],{"class":66},[49,159461,159462],{"class":51,"line":135},[49,159463,2492],{"emptyLinePlaceholder":151},[49,159465,159466,159468,159470],{"class":51,"line":1306},[49,159467,108726],{"class":59},[49,159469,95355],{"class":66},[49,159471,3831],{"class":55},[49,159473,159474,159477,159479,159481,159483,159485,159487,159490],{"class":51,"line":1312},[49,159475,159476],{"class":55},"    guess ",[49,159478,60],{"class":59},[49,159480,2474],{"class":66},[49,159482,228],{"class":55},[49,159484,53910],{"class":66},[49,159486,228],{"class":55},[49,159488,159489],{"class":328},"\"请输入1到100之间的数字:\"",[49,159491,30586],{"class":55},[49,159493,159494,159497,159499],{"class":51,"line":1403},[49,159495,159496],{"class":55},"    count ",[49,159498,9567],{"class":59},[49,159500,55788],{"class":66},[49,159502,159503],{"class":51,"line":1409},[49,159504,2492],{"emptyLinePlaceholder":151},[49,159506,159507,159509,159512,159514],{"class":51,"line":1421},[49,159508,3193],{"class":59},[49,159510,159511],{"class":55}," guess ",[49,159513,1179],{"class":59},[49,159515,159516],{"class":55}," answer:\n",[49,159518,159519,159521,159523,159526],{"class":51,"line":1704},[49,159520,32540],{"class":66},[49,159522,228],{"class":55},[49,159524,159525],{"class":328},"\"猜大了\"",[49,159527,81],{"class":55},[49,159529,159530,159532,159534,159536],{"class":51,"line":1709},[49,159531,39382],{"class":59},[49,159533,159511],{"class":55},[49,159535,1129],{"class":59},[49,159537,159516],{"class":55},[49,159539,159540,159542,159544,159547],{"class":51,"line":1715},[49,159541,32540],{"class":66},[49,159543,228],{"class":55},[49,159545,159546],{"class":328},"\"猜小了\"",[49,159548,81],{"class":55},[49,159550,159551,159553],{"class":51,"line":1720},[49,159552,158085],{"class":59},[49,159554,3831],{"class":55},[49,159556,159557,159559,159561,159563,159566,159568,159570,159572,159575],{"class":51,"line":1734},[49,159558,32540],{"class":66},[49,159560,228],{"class":55},[49,159562,277],{"class":59},[49,159564,159565],{"class":328},"\"猜对了，一共猜了",[49,159567,1115],{"class":66},[49,159569,84523],{"class":55},[49,159571,1165],{"class":66},[49,159573,159574],{"class":328},"次\"",[49,159576,81],{"class":55},[49,159578,159579],{"class":51,"line":1739},[49,159580,31716],{"class":59},[14,159582,159583,159586,159587,159589],{},[46,159584,159585],{},"while True"," 表示无限循环，通常配合 ",[46,159588,2145],{}," 使用。",[166,159591,159593],{"id":159592},"_45-break和continue","4.5 break和continue",[195,159595,159597],{"id":159596},"_451-break","4.5.1 break",[14,159599,159600,159602],{},[46,159601,2145],{}," 直接结束整个循环。",[39,159604,159606],{"className":41,"code":159605,"language":43,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[46,159607,159608,159628,159640,159644],{"__ignoreMap":44},[49,159609,159610,159612,159614,159616,159618,159620,159622,159624,159626],{"class":51,"line":52},[49,159611,3117],{"class":59},[49,159613,9528],{"class":55},[49,159615,26134],{"class":59},[49,159617,32532],{"class":66},[49,159619,228],{"class":55},[49,159621,441],{"class":66},[49,159623,12525],{"class":55},[49,159625,566],{"class":66},[49,159627,30875],{"class":55},[49,159629,159630,159632,159634,159636,159638],{"class":51,"line":84},[49,159631,3193],{"class":59},[49,159633,9528],{"class":55},[49,159635,3041],{"class":59},[49,159637,78159],{"class":66},[49,159639,3831],{"class":55},[49,159641,159642],{"class":51,"line":109},[49,159643,31716],{"class":59},[49,159645,159646,159648],{"class":51,"line":120},[49,159647,31388],{"class":66},[49,159649,159293],{"class":55},[14,159651,146520],{},[39,159653,159656],{"className":159654,"code":159655,"language":5278,"meta":44},[5276],"1\n2\n",[46,159657,159655],{"__ignoreMap":44},[195,159659,159661],{"id":159660},"_452-continue","4.5.2 continue",[14,159663,159664,159666],{},[46,159665,154735],{}," 跳过本轮剩余代码，进入下一轮循环。",[39,159668,159670],{"className":41,"code":159669,"language":43,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[46,159671,159672,159692,159704,159708],{"__ignoreMap":44},[49,159673,159674,159676,159678,159680,159682,159684,159686,159688,159690],{"class":51,"line":52},[49,159675,3117],{"class":59},[49,159677,9528],{"class":55},[49,159679,26134],{"class":59},[49,159681,32532],{"class":66},[49,159683,228],{"class":55},[49,159685,441],{"class":66},[49,159687,12525],{"class":55},[49,159689,566],{"class":66},[49,159691,30875],{"class":55},[49,159693,159694,159696,159698,159700,159702],{"class":51,"line":84},[49,159695,3193],{"class":59},[49,159697,9528],{"class":55},[49,159699,3041],{"class":59},[49,159701,78159],{"class":66},[49,159703,3831],{"class":55},[49,159705,159706],{"class":51,"line":109},[49,159707,148575],{"class":59},[49,159709,159710,159712],{"class":51,"line":120},[49,159711,31388],{"class":66},[49,159713,159293],{"class":55},[14,159715,146520],{},[39,159717,159720],{"className":159718,"code":159719,"language":5278,"meta":44},[5276],"1\n2\n4\n5\n",[46,159721,159719],{"__ignoreMap":44},[166,159723,159725],{"id":159724},"_46-for循环","4.6 for循环",[14,159727,159728,159730],{},[46,159729,3117],{}," 常用于遍历序列。",[39,159732,159734],{"className":41,"code":159733,"language":43,"meta":44,"style":44},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[46,159735,159736,159745,159749,159760],{"__ignoreMap":44},[49,159737,159738,159740,159742],{"class":51,"line":52},[49,159739,146599],{"class":55},[49,159741,60],{"class":59},[49,159743,159744],{"class":328}," \"python\"\n",[49,159746,159747],{"class":51,"line":84},[49,159748,2492],{"emptyLinePlaceholder":151},[49,159750,159751,159753,159756,159758],{"class":51,"line":109},[49,159752,3117],{"class":59},[49,159754,159755],{"class":55}," ch ",[49,159757,26134],{"class":59},[49,159759,158462],{"class":55},[49,159761,159762,159764],{"class":51,"line":120},[49,159763,31388],{"class":66},[49,159765,159766],{"class":55},"(ch)\n",[14,159768,159769],{},"遍历列表：",[39,159771,159773],{"className":41,"code":159772,"language":43,"meta":44,"style":44},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[46,159774,159775,159797,159801,159811],{"__ignoreMap":44},[49,159776,159777,159780,159782,159784,159786,159788,159790,159792,159795],{"class":51,"line":52},[49,159778,159779],{"class":55},"students ",[49,159781,60],{"class":59},[49,159783,52315],{"class":55},[49,159785,149951],{"class":328},[49,159787,12525],{"class":55},[49,159789,150999],{"class":328},[49,159791,12525],{"class":55},[49,159793,159794],{"class":328},"\"小刚\"",[49,159796,33335],{"class":55},[49,159798,159799],{"class":51,"line":84},[49,159800,2492],{"emptyLinePlaceholder":151},[49,159802,159803,159805,159807,159809],{"class":51,"line":109},[49,159804,3117],{"class":59},[49,159806,152200],{"class":55},[49,159808,26134],{"class":59},[49,159810,152205],{"class":55},[49,159812,159813,159815],{"class":51,"line":120},[49,159814,31388],{"class":66},[49,159816,150105],{"class":55},[166,159818,159820],{"id":159819},"_47-range函数","4.7 range函数",[14,159822,159823,159826],{},[46,159824,159825],{},"range()"," 用于生成整数序列。",[39,159828,159830],{"className":41,"code":159829,"language":43,"meta":44,"style":44},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[46,159831,159832,159846,159864],{"__ignoreMap":44},[49,159833,159834,159836,159838,159840,159843],{"class":51,"line":52},[49,159835,33505],{"class":66},[49,159837,228],{"class":55},[49,159839,541],{"class":66},[49,159841,159842],{"class":55},")          ",[49,159844,159845],{"class":283},"# 0,1,2,3,4\n",[49,159847,159848,159850,159852,159854,159856,159858,159861],{"class":51,"line":84},[49,159849,33505],{"class":66},[49,159851,228],{"class":55},[49,159853,441],{"class":66},[49,159855,12525],{"class":55},[49,159857,541],{"class":66},[49,159859,159860],{"class":55},")       ",[49,159862,159863],{"class":283},"# 1,2,3,4\n",[49,159865,159866,159868,159870,159872,159874,159876,159878,159880,159882],{"class":51,"line":109},[49,159867,33505],{"class":66},[49,159869,228],{"class":55},[49,159871,441],{"class":66},[49,159873,12525],{"class":55},[49,159875,95],{"class":66},[49,159877,12525],{"class":55},[49,159879,301],{"class":66},[49,159881,155724],{"class":55},[49,159883,159884],{"class":283},"# 1,3,5,7,9\n",[14,159886,159887,159888,24709],{},"配合 ",[46,159889,3117],{},[39,159891,159893],{"className":41,"code":159892,"language":43,"meta":44,"style":44},"for i in range(1, 6):\n    print(i)\n",[46,159894,159895,159915],{"__ignoreMap":44},[49,159896,159897,159899,159901,159903,159905,159907,159909,159911,159913],{"class":51,"line":52},[49,159898,3117],{"class":59},[49,159900,9528],{"class":55},[49,159902,26134],{"class":59},[49,159904,32532],{"class":66},[49,159906,228],{"class":55},[49,159908,441],{"class":66},[49,159910,12525],{"class":55},[49,159912,566],{"class":66},[49,159914,30875],{"class":55},[49,159916,159917,159919],{"class":51,"line":84},[49,159918,31388],{"class":66},[49,159920,159293],{"class":55},[14,159922,9115,159923,159925],{},[46,159924,33505],{}," 的结束值不包含在内。",[166,159927,159929],{"id":159928},"_48-for循环求和","4.8 for循环求和",[39,159931,159933],{"className":41,"code":159932,"language":43,"meta":44,"style":44},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[46,159934,159935,159943,159947,159967,159975,159979],{"__ignoreMap":44},[49,159936,159937,159939,159941],{"class":51,"line":52},[49,159938,157323],{"class":55},[49,159940,60],{"class":59},[49,159942,47422],{"class":66},[49,159944,159945],{"class":51,"line":84},[49,159946,2492],{"emptyLinePlaceholder":151},[49,159948,159949,159951,159953,159955,159957,159959,159961,159963,159965],{"class":51,"line":109},[49,159950,3117],{"class":59},[49,159952,9528],{"class":55},[49,159954,26134],{"class":59},[49,159956,32532],{"class":66},[49,159958,228],{"class":55},[49,159960,441],{"class":66},[49,159962,12525],{"class":55},[49,159964,559],{"class":66},[49,159966,30875],{"class":55},[49,159968,159969,159971,159973],{"class":51,"line":120},[49,159970,159370],{"class":55},[49,159972,9567],{"class":59},[49,159974,159375],{"class":55},[49,159976,159977],{"class":51,"line":135},[49,159978,2492],{"emptyLinePlaceholder":151},[49,159980,159981,159983],{"class":51,"line":1306},[49,159982,30504],{"class":66},[49,159984,159394],{"class":55},[14,159986,159987],{},"求偶数和：",[39,159989,159991],{"className":41,"code":159990,"language":43,"meta":44,"style":44},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[46,159992,159993,160001,160005,160025,160041,160050,160054],{"__ignoreMap":44},[49,159994,159995,159997,159999],{"class":51,"line":52},[49,159996,157323],{"class":55},[49,159998,60],{"class":59},[49,160000,47422],{"class":66},[49,160002,160003],{"class":51,"line":84},[49,160004,2492],{"emptyLinePlaceholder":151},[49,160006,160007,160009,160011,160013,160015,160017,160019,160021,160023],{"class":51,"line":109},[49,160008,3117],{"class":59},[49,160010,9528],{"class":55},[49,160012,26134],{"class":59},[49,160014,32532],{"class":66},[49,160016,228],{"class":55},[49,160018,441],{"class":66},[49,160020,12525],{"class":55},[49,160022,559],{"class":66},[49,160024,30875],{"class":55},[49,160026,160027,160029,160031,160033,160035,160037,160039],{"class":51,"line":120},[49,160028,3193],{"class":59},[49,160030,9528],{"class":55},[49,160032,550],{"class":59},[49,160034,14845],{"class":66},[49,160036,101622],{"class":59},[49,160038,4185],{"class":66},[49,160040,3831],{"class":55},[49,160042,160043,160046,160048],{"class":51,"line":135},[49,160044,160045],{"class":55},"        total ",[49,160047,9567],{"class":59},[49,160049,159375],{"class":55},[49,160051,160052],{"class":51,"line":1306},[49,160053,2492],{"emptyLinePlaceholder":151},[49,160055,160056,160058],{"class":51,"line":1312},[49,160057,30504],{"class":66},[49,160059,159394],{"class":55},[14,160061,160062],{},"也可以：",[39,160064,160066],{"className":41,"code":160065,"language":43,"meta":44,"style":44},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[46,160067,160068,160076,160080,160104,160112,160116],{"__ignoreMap":44},[49,160069,160070,160072,160074],{"class":51,"line":52},[49,160071,157323],{"class":55},[49,160073,60],{"class":59},[49,160075,47422],{"class":66},[49,160077,160078],{"class":51,"line":84},[49,160079,2492],{"emptyLinePlaceholder":151},[49,160081,160082,160084,160086,160088,160090,160092,160094,160096,160098,160100,160102],{"class":51,"line":109},[49,160083,3117],{"class":59},[49,160085,9528],{"class":55},[49,160087,26134],{"class":59},[49,160089,32532],{"class":66},[49,160091,228],{"class":55},[49,160093,301],{"class":66},[49,160095,12525],{"class":55},[49,160097,559],{"class":66},[49,160099,12525],{"class":55},[49,160101,301],{"class":66},[49,160103,30875],{"class":55},[49,160105,160106,160108,160110],{"class":51,"line":120},[49,160107,159370],{"class":55},[49,160109,9567],{"class":59},[49,160111,159375],{"class":55},[49,160113,160114],{"class":51,"line":135},[49,160115,2492],{"emptyLinePlaceholder":151},[49,160117,160118,160120],{"class":51,"line":1306},[49,160119,30504],{"class":66},[49,160121,159394],{"class":55},[166,160123,160125],{"id":160124},"_49-循环嵌套","4.9 循环嵌套",[14,160127,160128],{},"嵌套循环就是循环里面再写循环。",[39,160130,160132],{"className":41,"code":160131,"language":43,"meta":44,"style":44},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[46,160133,160134,160154,160174],{"__ignoreMap":44},[49,160135,160136,160138,160140,160142,160144,160146,160148,160150,160152],{"class":51,"line":52},[49,160137,3117],{"class":59},[49,160139,9528],{"class":55},[49,160141,26134],{"class":59},[49,160143,32532],{"class":66},[49,160145,228],{"class":55},[49,160147,441],{"class":66},[49,160149,12525],{"class":55},[49,160151,515],{"class":66},[49,160153,30875],{"class":55},[49,160155,160156,160158,160160,160162,160164,160166,160168,160170,160172],{"class":51,"line":84},[49,160157,3293],{"class":59},[49,160159,9590],{"class":55},[49,160161,26134],{"class":59},[49,160163,32532],{"class":66},[49,160165,228],{"class":55},[49,160167,441],{"class":66},[49,160169,12525],{"class":55},[49,160171,515],{"class":66},[49,160173,30875],{"class":55},[49,160175,160176,160178,160180,160182,160185,160187,160189,160191,160194,160196,160198,160200,160202],{"class":51,"line":109},[49,160177,32540],{"class":66},[49,160179,228],{"class":55},[49,160181,277],{"class":59},[49,160183,160184],{"class":328},"\"i=",[49,160186,1115],{"class":66},[49,160188,661],{"class":55},[49,160190,1165],{"class":66},[49,160192,160193],{"class":328},", j=",[49,160195,1115],{"class":66},[49,160197,686],{"class":55},[49,160199,1165],{"class":66},[49,160201,474],{"class":328},[49,160203,81],{"class":55},[14,160205,160206],{},"外层循环执行一次，内层循环执行完整一轮。",[166,160208,160210],{"id":160209},"_410-九九乘法表","4.10 九九乘法表",[39,160212,160214],{"className":41,"code":160213,"language":43,"meta":44,"style":44},"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",[46,160215,160216,160236,160259,160311],{"__ignoreMap":44},[49,160217,160218,160220,160222,160224,160226,160228,160230,160232,160234],{"class":51,"line":52},[49,160219,3117],{"class":59},[49,160221,9528],{"class":55},[49,160223,26134],{"class":59},[49,160225,32532],{"class":66},[49,160227,228],{"class":55},[49,160229,441],{"class":66},[49,160231,12525],{"class":55},[49,160233,95],{"class":66},[49,160235,30875],{"class":55},[49,160237,160238,160240,160242,160244,160246,160248,160250,160253,160255,160257],{"class":51,"line":84},[49,160239,3293],{"class":59},[49,160241,9590],{"class":55},[49,160243,26134],{"class":59},[49,160245,32532],{"class":66},[49,160247,228],{"class":55},[49,160249,441],{"class":66},[49,160251,160252],{"class":55},", i ",[49,160254,700],{"class":59},[49,160256,25209],{"class":66},[49,160258,30875],{"class":55},[49,160260,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297,160299,160301,160303,160305,160307,160309],{"class":51,"line":109},[49,160262,32540],{"class":66},[49,160264,228],{"class":55},[49,160266,277],{"class":59},[49,160268,474],{"class":328},[49,160270,1115],{"class":66},[49,160272,686],{"class":55},[49,160274,1165],{"class":66},[49,160276,674],{"class":328},[49,160278,1115],{"class":66},[49,160280,661],{"class":55},[49,160282,1165],{"class":66},[49,160284,60],{"class":328},[49,160286,1115],{"class":66},[49,160288,100211],{"class":55},[49,160290,674],{"class":59},[49,160292,3502],{"class":55},[49,160294,1165],{"class":66},[49,160296,474],{"class":328},[49,160298,12525],{"class":55},[49,160300,45890],{"class":126},[49,160302,60],{"class":59},[49,160304,474],{"class":328},[49,160306,1322],{"class":66},[49,160308,474],{"class":328},[49,160310,81],{"class":55},[49,160312,160313,160315],{"class":51,"line":120},[49,160314,31388],{"class":66},[49,160316,2068],{"class":55},[14,160318,160319],{},"关键点：",[178,160321,160322,160328,160334,160340],{},[181,160323,160324,160325,160327],{},"外层 ",[46,160326,661],{}," 控制行。",[181,160329,160330,160331,160333],{},"内层 ",[46,160332,686],{}," 控制列。",[181,160335,160336,160337,160339],{},"每行结束后用 ",[46,160338,146535],{}," 换行。",[181,160341,160342,160345],{},[46,160343,160344],{},"end=\"\\t\""," 让同一行的内容横向排列。",[166,160347,160349],{"id":160348},"_411-循环else","4.11 循环else",[14,160351,160352,160353,160355,160356,160358,160359,160361],{},"Python 的循环可以带 ",[46,160354,1793],{},"。当循环正常结束时执行 ",[46,160357,1793],{},"，如果被 ",[46,160360,2145],{}," 打断，则不执行。",[39,160363,160365],{"className":41,"code":160364,"language":43,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,160366,160367,160387,160399,160410,160414,160420],{"__ignoreMap":44},[49,160368,160369,160371,160373,160375,160377,160379,160381,160383,160385],{"class":51,"line":52},[49,160370,3117],{"class":59},[49,160372,9528],{"class":55},[49,160374,26134],{"class":59},[49,160376,32532],{"class":66},[49,160378,228],{"class":55},[49,160380,441],{"class":66},[49,160382,12525],{"class":55},[49,160384,566],{"class":66},[49,160386,30875],{"class":55},[49,160388,160389,160391,160393,160395,160397],{"class":51,"line":84},[49,160390,3193],{"class":59},[49,160392,9528],{"class":55},[49,160394,3041],{"class":59},[49,160396,2130],{"class":66},[49,160398,3831],{"class":55},[49,160400,160401,160403,160405,160408],{"class":51,"line":109},[49,160402,32540],{"class":66},[49,160404,228],{"class":55},[49,160406,160407],{"class":328},"\"找到了\"",[49,160409,81],{"class":55},[49,160411,160412],{"class":51,"line":120},[49,160413,31716],{"class":59},[49,160415,160416,160418],{"class":51,"line":135},[49,160417,1793],{"class":59},[49,160419,3831],{"class":55},[49,160421,160422,160424,160426,160429],{"class":51,"line":1306},[49,160423,31388],{"class":66},[49,160425,228],{"class":55},[49,160427,160428],{"class":328},"\"没找到\"",[49,160430,81],{"class":55},[14,160432,160433],{},"常用于搜索。",[39,160435,160437],{"className":41,"code":160436,"language":43,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,160438,160439,160460,160469,160473,160485,160496,160506,160510,160516],{"__ignoreMap":44},[49,160440,160441,160444,160446,160448,160450,160452,160454,160456,160458],{"class":51,"line":52},[49,160442,160443],{"class":55},"names ",[49,160445,60],{"class":59},[49,160447,52315],{"class":55},[49,160449,149951],{"class":328},[49,160451,12525],{"class":55},[49,160453,150999],{"class":328},[49,160455,12525],{"class":55},[49,160457,159794],{"class":328},[49,160459,33335],{"class":55},[49,160461,160462,160464,160466],{"class":51,"line":84},[49,160463,111641],{"class":55},[49,160465,60],{"class":59},[49,160467,160468],{"class":328}," \"小李\"\n",[49,160470,160471],{"class":51,"line":109},[49,160472,2492],{"emptyLinePlaceholder":151},[49,160474,160475,160477,160480,160482],{"class":51,"line":120},[49,160476,3117],{"class":59},[49,160478,160479],{"class":55}," name ",[49,160481,26134],{"class":59},[49,160483,160484],{"class":55}," names:\n",[49,160486,160487,160489,160491,160493],{"class":51,"line":135},[49,160488,3193],{"class":59},[49,160490,160479],{"class":55},[49,160492,3041],{"class":59},[49,160494,160495],{"class":55}," target:\n",[49,160497,160498,160500,160502,160504],{"class":51,"line":1306},[49,160499,32540],{"class":66},[49,160501,228],{"class":55},[49,160503,160407],{"class":328},[49,160505,81],{"class":55},[49,160507,160508],{"class":51,"line":1312},[49,160509,31716],{"class":59},[49,160511,160512,160514],{"class":51,"line":1403},[49,160513,1793],{"class":59},[49,160515,3831],{"class":55},[49,160517,160518,160520,160522,160524],{"class":51,"line":1409},[49,160519,31388],{"class":66},[49,160521,228],{"class":55},[49,160523,160428],{"class":328},[49,160525,81],{"class":55},[166,160527,160529],{"id":160528},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160531,123355],{},[178,160533,160534,160537,160540],{},[181,160535,160536],{},"用户最多输入 3 次密码。",[181,160538,160539],{},"密码正确则登录成功。",[181,160541,160542],{},"3 次都错误则锁定账号。",[14,160544,10125],{},[39,160546,160548],{"className":41,"code":160547,"language":43,"meta":44,"style":44},"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",[46,160549,160550,160560,160564,160580,160596,160600,160612,160623,160627,160633,160658,160664],{"__ignoreMap":44},[49,160551,160552,160555,160557],{"class":51,"line":52},[49,160553,160554],{"class":55},"password ",[49,160556,60],{"class":59},[49,160558,160559],{"class":328}," \"123456\"\n",[49,160561,160562],{"class":51,"line":84},[49,160563,2492],{"emptyLinePlaceholder":151},[49,160565,160566,160568,160570,160572,160574,160576,160578],{"class":51,"line":109},[49,160567,3117],{"class":59},[49,160569,9528],{"class":55},[49,160571,26134],{"class":59},[49,160573,32532],{"class":66},[49,160575,228],{"class":55},[49,160577,73],{"class":66},[49,160579,30875],{"class":55},[49,160581,160582,160585,160587,160589,160591,160594],{"class":51,"line":120},[49,160583,160584],{"class":55},"    user_password ",[49,160586,60],{"class":59},[49,160588,60694],{"class":66},[49,160590,228],{"class":55},[49,160592,160593],{"class":328},"\"请输入密码:\"",[49,160595,81],{"class":55},[49,160597,160598],{"class":51,"line":135},[49,160599,2492],{"emptyLinePlaceholder":151},[49,160601,160602,160604,160607,160609],{"class":51,"line":1306},[49,160603,3193],{"class":59},[49,160605,160606],{"class":55}," user_password ",[49,160608,3041],{"class":59},[49,160610,160611],{"class":55}," password:\n",[49,160613,160614,160616,160618,160621],{"class":51,"line":1312},[49,160615,32540],{"class":66},[49,160617,228],{"class":55},[49,160619,160620],{"class":328},"\"登录成功\"",[49,160622,81],{"class":55},[49,160624,160625],{"class":51,"line":1403},[49,160626,31716],{"class":59},[49,160628,160629,160631],{"class":51,"line":1409},[49,160630,158085],{"class":59},[49,160632,3831],{"class":55},[49,160634,160635,160637,160639,160641,160644,160647,160649,160651,160653,160656],{"class":51,"line":1421},[49,160636,32540],{"class":66},[49,160638,228],{"class":55},[49,160640,277],{"class":59},[49,160642,160643],{"class":328},"\"密码错误，还剩",[49,160645,160646],{"class":66},"{2",[49,160648,52360],{"class":59},[49,160650,3124],{"class":55},[49,160652,1165],{"class":66},[49,160654,160655],{"class":328},"次机会\"",[49,160657,81],{"class":55},[49,160659,160660,160662],{"class":51,"line":1704},[49,160661,1793],{"class":59},[49,160663,3831],{"class":55},[49,160665,160666,160668,160670,160673],{"class":51,"line":1709},[49,160667,31388],{"class":66},[49,160669,228],{"class":55},[49,160671,160672],{"class":328},"\"账号已锁定\"",[49,160674,81],{"class":55},[166,160676,160678],{"id":160677},"_413-小案例菜单程序","4.13 小案例：菜单程序",[39,160680,160682],{"className":41,"code":160681,"language":43,"meta":44,"style":44},"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",[46,160683,160684,160692,160703,160714,160725,160736,160747,160751,160766,160770,160782,160793,160805,160816,160828,160839,160851,160861,160865,160871],{"__ignoreMap":44},[49,160685,160686,160688,160690],{"class":51,"line":52},[49,160687,108726],{"class":59},[49,160689,95355],{"class":66},[49,160691,3831],{"class":55},[49,160693,160694,160696,160698,160701],{"class":51,"line":84},[49,160695,31388],{"class":66},[49,160697,228],{"class":55},[49,160699,160700],{"class":328},"\"====== 菜单 ======\"",[49,160702,81],{"class":55},[49,160704,160705,160707,160709,160712],{"class":51,"line":109},[49,160706,31388],{"class":66},[49,160708,228],{"class":55},[49,160710,160711],{"class":328},"\"1. 查询余额\"",[49,160713,81],{"class":55},[49,160715,160716,160718,160720,160723],{"class":51,"line":120},[49,160717,31388],{"class":66},[49,160719,228],{"class":55},[49,160721,160722],{"class":328},"\"2. 存款\"",[49,160724,81],{"class":55},[49,160726,160727,160729,160731,160734],{"class":51,"line":135},[49,160728,31388],{"class":66},[49,160730,228],{"class":55},[49,160732,160733],{"class":328},"\"3. 取款\"",[49,160735,81],{"class":55},[49,160737,160738,160740,160742,160745],{"class":51,"line":1306},[49,160739,31388],{"class":66},[49,160741,228],{"class":55},[49,160743,160744],{"class":328},"\"0. 退出\"",[49,160746,81],{"class":55},[49,160748,160749],{"class":51,"line":1312},[49,160750,2492],{"emptyLinePlaceholder":151},[49,160752,160753,160756,160758,160760,160762,160764],{"class":51,"line":1403},[49,160754,160755],{"class":55},"    choice ",[49,160757,60],{"class":59},[49,160759,60694],{"class":66},[49,160761,228],{"class":55},[49,160763,153136],{"class":328},[49,160765,81],{"class":55},[49,160767,160768],{"class":51,"line":1409},[49,160769,2492],{"emptyLinePlaceholder":151},[49,160771,160772,160774,160776,160778,160780],{"class":51,"line":1421},[49,160773,3193],{"class":59},[49,160775,153149],{"class":55},[49,160777,3041],{"class":59},[49,160779,153154],{"class":328},[49,160781,3831],{"class":55},[49,160783,160784,160786,160788,160791],{"class":51,"line":1704},[49,160785,32540],{"class":66},[49,160787,228],{"class":55},[49,160789,160790],{"class":328},"\"余额为1000元\"",[49,160792,81],{"class":55},[49,160794,160795,160797,160799,160801,160803],{"class":51,"line":1709},[49,160796,39382],{"class":59},[49,160798,153149],{"class":55},[49,160800,3041],{"class":59},[49,160802,153173],{"class":328},[49,160804,3831],{"class":55},[49,160806,160807,160809,160811,160814],{"class":51,"line":1715},[49,160808,32540],{"class":66},[49,160810,228],{"class":55},[49,160812,160813],{"class":328},"\"存款功能\"",[49,160815,81],{"class":55},[49,160817,160818,160820,160822,160824,160826],{"class":51,"line":1720},[49,160819,39382],{"class":59},[49,160821,153149],{"class":55},[49,160823,3041],{"class":59},[49,160825,153191],{"class":328},[49,160827,3831],{"class":55},[49,160829,160830,160832,160834,160837],{"class":51,"line":1734},[49,160831,32540],{"class":66},[49,160833,228],{"class":55},[49,160835,160836],{"class":328},"\"取款功能\"",[49,160838,81],{"class":55},[49,160840,160841,160843,160845,160847,160849],{"class":51,"line":1739},[49,160842,39382],{"class":59},[49,160844,153149],{"class":55},[49,160846,3041],{"class":59},[49,160848,153245],{"class":328},[49,160850,3831],{"class":55},[49,160852,160853,160855,160857,160859],{"class":51,"line":1745},[49,160854,32540],{"class":66},[49,160856,228],{"class":55},[49,160858,153256],{"class":328},[49,160860,81],{"class":55},[49,160862,160863],{"class":51,"line":1766},[49,160864,31716],{"class":59},[49,160866,160867,160869],{"class":51,"line":1771},[49,160868,158085],{"class":59},[49,160870,3831],{"class":55},[49,160872,160873,160875,160877,160879],{"class":51,"line":1785},[49,160874,32540],{"class":66},[49,160876,228],{"class":55},[49,160878,153277],{"class":328},[49,160880,81],{"class":55},[14,160882,160883,160884,160886,160887,28476],{},"菜单类程序通常使用 ",[46,160885,159585],{},"，用户选择退出时 ",[46,160888,2145],{},[166,160890,160892],{"id":160891},"_414-易错点","4.14 易错点",[178,160894,160895,160900,160906,160914,160920],{},[181,160896,160897,160899],{},[46,160898,108726],{}," 循环必须更新控制变量。",[181,160901,160902,160905],{},[46,160903,160904],{},"range(1, 10)"," 不包含 10。",[181,160907,160908,160910,160911,160913],{},[46,160909,2145],{}," 结束整个循环，",[46,160912,154735],{}," 只跳过本轮。",[181,160915,160916,160917,160919],{},"嵌套循环中，",[46,160918,2145],{}," 只跳出当前所在的一层循环。",[181,160921,160922],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[166,160924,160926],{"id":160925},"_415-本章练习","4.15 本章练习",[178,160928,160929,160932,160935,160938,160941],{},[181,160930,160931],{},"输出 1 到 100。",[181,160933,160934],{},"计算 1 到 100 的偶数和。",[181,160936,160937],{},"输出 100 以内能被 3 和 5 同时整除的数。",[181,160939,160940],{},"编写猜数字游戏，限制最多猜 7 次。",[181,160942,160943],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[143,160945,160946],{},"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":44,"searchDepth":84,"depth":84,"links":160948},[160949,160950,160951,160952,160953,160957,160958,160959,160960,160961,160962,160963,160964,160965,160966],{"id":159205,"depth":84,"text":159206},{"id":159235,"depth":84,"text":159236},{"id":159324,"depth":84,"text":159325},{"id":159418,"depth":84,"text":159419},{"id":159592,"depth":84,"text":159593,"children":160954},[160955,160956],{"id":159596,"depth":109,"text":159597},{"id":159660,"depth":109,"text":159661},{"id":159724,"depth":84,"text":159725},{"id":159819,"depth":84,"text":159820},{"id":159928,"depth":84,"text":159929},{"id":160124,"depth":84,"text":160125},{"id":160209,"depth":84,"text":160210},{"id":160348,"depth":84,"text":160349},{"id":160528,"depth":84,"text":160529},{"id":160677,"depth":84,"text":160678},{"id":160891,"depth":84,"text":160892},{"id":160925,"depth":84,"text":160926},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159197,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160973,"title":160974,"body":160975,"description":148,"extension":149,"meta":162980,"navigation":151,"path":162981,"seo":162982,"stem":162983,"__hash__":162984},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160976,"toc":162960},[160977,160980,160984,160987,160990,161004,161007,161021,161025,161027,161046,161048,161095,161097,161111,161115,161189,161192,161196,161199,161258,161266,161269,161322,161325,161329,161334,161389,161397,161447,161451,161456,161464,161563,161569,161573,161578,161581,161592,161633,161646,161650,161653,161689,161692,161705,161708,161768,161772,161776,161779,161830,161834,161837,161884,161890,161956,161959,161963,161966,162082,162085,162089,162092,162198,162202,162205,162243,162246,162288,162291,162351,162354,162358,162822,162825,162829,162856,162862,162923,162927,162957],[10,160978,160974],{"id":160979},"_5-函数基础",[166,160981,160983],{"id":160982},"_51-为什么需要函数","5.1 为什么需要函数",[14,160985,160986],{},"函数用于封装一段可以重复使用的代码。",[14,160988,160989],{},"不使用函数的问题：",[178,160991,160992,160995,160998,161001],{},[181,160993,160994],{},"重复代码多。",[181,160996,160997],{},"修改逻辑时容易漏改。",[181,160999,161000],{},"主流程不清晰。",[181,161002,161003],{},"程序越写越长，难以维护。",[14,161005,161006],{},"使用函数后的好处：",[178,161008,161009,161012,161015,161018],{},[181,161010,161011],{},"提高复用性。",[181,161013,161014],{},"提高可读性。",[181,161016,161017],{},"便于调试。",[181,161019,161020],{},"便于分工。",[166,161022,161024],{"id":161023},"_52-函数定义","5.2 函数定义",[14,161026,5272],{},[39,161028,161030],{"className":41,"code":161029,"language":43,"meta":44,"style":44},"def 函数名():\n    函数体\n",[46,161031,161032,161041],{"__ignoreMap":44},[49,161033,161034,161036,161039],{"class":51,"line":52},[49,161035,32036],{"class":59},[49,161037,161038],{"class":2055}," 函数名",[49,161040,32042],{"class":55},[49,161042,161043],{"class":51,"line":84},[49,161044,161045],{"class":55},"    函数体\n",[14,161047,15225],{},[39,161049,161051],{"className":41,"code":161050,"language":43,"meta":44,"style":44},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[46,161052,161053,161062,161072,161082,161086,161090],{"__ignoreMap":44},[49,161054,161055,161057,161060],{"class":51,"line":52},[49,161056,32036],{"class":59},[49,161058,161059],{"class":2055}," say_hello",[49,161061,32042],{"class":55},[49,161063,161064,161066,161068,161070],{"class":51,"line":84},[49,161065,31388],{"class":66},[49,161067,228],{"class":55},[49,161069,5934],{"class":328},[49,161071,81],{"class":55},[49,161073,161074,161076,161078,161080],{"class":51,"line":109},[49,161075,31388],{"class":66},[49,161077,228],{"class":55},[49,161079,146702],{"class":328},[49,161081,81],{"class":55},[49,161083,161084],{"class":51,"line":120},[49,161085,2492],{"emptyLinePlaceholder":151},[49,161087,161088],{"class":51,"line":135},[49,161089,2492],{"emptyLinePlaceholder":151},[49,161091,161092],{"class":51,"line":1306},[49,161093,161094],{"class":55},"say_hello()\n",[14,161096,9115],{},[178,161098,161099,161102,161105,161108],{},[181,161100,161101],{},"函数必须先定义，再调用。",[181,161103,161104],{},"函数名遵循变量命名规则。",[181,161106,161107],{},"函数体需要缩进。",[181,161109,161110],{},"函数不调用就不会执行。",[166,161112,161114],{"id":161113},"_53-函数调用","5.3 函数调用",[39,161116,161118],{"className":41,"code":161117,"language":43,"meta":44,"style":44},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[46,161119,161120,161129,161140,161151,161162,161172,161176,161180,161185],{"__ignoreMap":44},[49,161121,161122,161124,161127],{"class":51,"line":52},[49,161123,32036],{"class":59},[49,161125,161126],{"class":2055}," print_menu",[49,161128,32042],{"class":55},[49,161130,161131,161133,161135,161138],{"class":51,"line":84},[49,161132,31388],{"class":66},[49,161134,228],{"class":55},[49,161136,161137],{"class":328},"\"1. 查询\"",[49,161139,81],{"class":55},[49,161141,161142,161144,161146,161149],{"class":51,"line":109},[49,161143,31388],{"class":66},[49,161145,228],{"class":55},[49,161147,161148],{"class":328},"\"2. 添加\"",[49,161150,81],{"class":55},[49,161152,161153,161155,161157,161160],{"class":51,"line":120},[49,161154,31388],{"class":66},[49,161156,228],{"class":55},[49,161158,161159],{"class":328},"\"3. 删除\"",[49,161161,81],{"class":55},[49,161163,161164,161166,161168,161170],{"class":51,"line":135},[49,161165,31388],{"class":66},[49,161167,228],{"class":55},[49,161169,160744],{"class":328},[49,161171,81],{"class":55},[49,161173,161174],{"class":51,"line":1306},[49,161175,2492],{"emptyLinePlaceholder":151},[49,161177,161178],{"class":51,"line":1312},[49,161179,2492],{"emptyLinePlaceholder":151},[49,161181,161182],{"class":51,"line":1403},[49,161183,161184],{"class":55},"print_menu()\n",[49,161186,161187],{"class":51,"line":1409},[49,161188,161184],{"class":55},[14,161190,161191],{},"函数可以多次调用，每次调用都会执行函数体。",[166,161193,161195],{"id":161194},"_54-参数","5.4 参数",[14,161197,161198],{},"参数用于向函数传递数据。",[39,161200,161202],{"className":41,"code":161201,"language":43,"meta":44,"style":44},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[46,161203,161204,161213,161233,161237,161241,161250],{"__ignoreMap":44},[49,161205,161206,161208,161210],{"class":51,"line":52},[49,161207,32036],{"class":59},[49,161209,161059],{"class":2055},[49,161211,161212],{"class":55},"(name):\n",[49,161214,161215,161217,161219,161221,161223,161225,161227,161229,161231],{"class":51,"line":84},[49,161216,31388],{"class":66},[49,161218,228],{"class":55},[49,161220,277],{"class":59},[49,161222,157117],{"class":328},[49,161224,1115],{"class":66},[49,161226,79899],{"class":55},[49,161228,1165],{"class":66},[49,161230,474],{"class":328},[49,161232,81],{"class":55},[49,161234,161235],{"class":51,"line":109},[49,161236,2492],{"emptyLinePlaceholder":151},[49,161238,161239],{"class":51,"line":120},[49,161240,2492],{"emptyLinePlaceholder":151},[49,161242,161243,161246,161248],{"class":51,"line":135},[49,161244,161245],{"class":55},"say_hello(",[49,161247,149951],{"class":328},[49,161249,81],{"class":55},[49,161251,161252,161254,161256],{"class":51,"line":1306},[49,161253,161245],{"class":55},[49,161255,150999],{"class":328},[49,161257,81],{"class":55},[14,161259,161260,161262,161263,161265],{},[46,161261,79899],{}," 是形参，",[46,161264,149951],{}," 是实参。",[14,161267,161268],{},"多个参数：",[39,161270,161272],{"className":41,"code":161271,"language":43,"meta":44,"style":44},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[46,161273,161274,161282,161295,161301,161305,161309],{"__ignoreMap":44},[49,161275,161276,161278,161280],{"class":51,"line":52},[49,161277,32036],{"class":59},[49,161279,5300],{"class":2055},[49,161281,151156],{"class":55},[49,161283,161284,161287,161289,161291,161293],{"class":51,"line":84},[49,161285,161286],{"class":55},"    result ",[49,161288,60],{"class":59},[49,161290,10959],{"class":55},[49,161292,700],{"class":59},[49,161294,151167],{"class":55},[49,161296,161297,161299],{"class":51,"line":109},[49,161298,31388],{"class":66},[49,161300,76674],{"class":55},[49,161302,161303],{"class":51,"line":120},[49,161304,2492],{"emptyLinePlaceholder":151},[49,161306,161307],{"class":51,"line":135},[49,161308,2492],{"emptyLinePlaceholder":151},[49,161310,161311,161314,161316,161318,161320],{"class":51,"line":1306},[49,161312,161313],{"class":55},"add(",[49,161315,95],{"class":66},[49,161317,12525],{"class":55},[49,161319,919],{"class":66},[49,161321,81],{"class":55},[14,161323,161324],{},"调用时参数数量必须匹配。",[166,161326,161328],{"id":161327},"_55-返回值","5.5 返回值",[14,161330,161331,161333],{},[46,161332,17136],{}," 用于把函数内部的结果返回给调用者。",[39,161335,161337],{"className":41,"code":161336,"language":43,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[46,161338,161339,161347,161357,161361,161365,161383],{"__ignoreMap":44},[49,161340,161341,161343,161345],{"class":51,"line":52},[49,161342,32036],{"class":59},[49,161344,5300],{"class":2055},[49,161346,151156],{"class":55},[49,161348,161349,161351,161353,161355],{"class":51,"line":84},[49,161350,4182],{"class":59},[49,161352,10959],{"class":55},[49,161354,700],{"class":59},[49,161356,151167],{"class":55},[49,161358,161359],{"class":51,"line":109},[49,161360,2492],{"emptyLinePlaceholder":151},[49,161362,161363],{"class":51,"line":120},[49,161364,2492],{"emptyLinePlaceholder":151},[49,161366,161367,161370,161372,161375,161377,161379,161381],{"class":51,"line":135},[49,161368,161369],{"class":55},"result ",[49,161371,60],{"class":59},[49,161373,161374],{"class":55}," add(",[49,161376,95],{"class":66},[49,161378,12525],{"class":55},[49,161380,919],{"class":66},[49,161382,81],{"class":55},[49,161384,161385,161387],{"class":51,"line":1306},[49,161386,30504],{"class":66},[49,161388,76674],{"class":55},[14,161390,161391,161392,161394,161395,28476],{},"如果函数没有写 ",[46,161393,17136],{},"，默认返回 ",[46,161396,95749],{},[39,161398,161400],{"className":41,"code":161399,"language":43,"meta":44,"style":44},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[46,161401,161402,161410,161420,161424,161428,161437],{"__ignoreMap":44},[49,161403,161404,161406,161408],{"class":51,"line":52},[49,161405,32036],{"class":59},[49,161407,161059],{"class":2055},[49,161409,32042],{"class":55},[49,161411,161412,161414,161416,161418],{"class":51,"line":84},[49,161413,31388],{"class":66},[49,161415,228],{"class":55},[49,161417,5934],{"class":328},[49,161419,81],{"class":55},[49,161421,161422],{"class":51,"line":109},[49,161423,2492],{"emptyLinePlaceholder":151},[49,161425,161426],{"class":51,"line":120},[49,161427,2492],{"emptyLinePlaceholder":151},[49,161429,161430,161432,161434],{"class":51,"line":135},[49,161431,161369],{"class":55},[49,161433,60],{"class":59},[49,161435,161436],{"class":55}," say_hello()\n",[49,161438,161439,161441,161444],{"class":51,"line":1306},[49,161440,30504],{"class":66},[49,161442,161443],{"class":55},"(result)  ",[49,161445,161446],{"class":283},"# None\n",[166,161448,161450],{"id":161449},"_56-return的作用","5.6 return的作用",[14,161452,161453,161455],{},[46,161454,17136],{}," 有两个作用：",[178,161457,161458,161461],{},[181,161459,161460],{},"返回结果。",[181,161462,161463],{},"结束函数。",[39,161465,161467],{"className":41,"code":161466,"language":43,"meta":44,"style":44},"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",[46,161468,161469,161479,161491,161498,161502,161514,161521,161525,161532,161536,161540,161551],{"__ignoreMap":44},[49,161470,161471,161473,161476],{"class":51,"line":52},[49,161472,32036],{"class":59},[49,161474,161475],{"class":2055}," check_age",[49,161477,161478],{"class":55},"(age):\n",[49,161480,161481,161483,161485,161487,161489],{"class":51,"line":84},[49,161482,3193],{"class":59},[49,161484,15797],{"class":55},[49,161486,1129],{"class":59},[49,161488,4185],{"class":66},[49,161490,3831],{"class":55},[49,161492,161493,161495],{"class":51,"line":109},[49,161494,14842],{"class":59},[49,161496,161497],{"class":328}," \"年龄不合法\"\n",[49,161499,161500],{"class":51,"line":120},[49,161501,2492],{"emptyLinePlaceholder":151},[49,161503,161504,161506,161508,161510,161512],{"class":51,"line":135},[49,161505,3193],{"class":59},[49,161507,15797],{"class":55},[49,161509,1802],{"class":59},[49,161511,156348],{"class":66},[49,161513,3831],{"class":55},[49,161515,161516,161518],{"class":51,"line":1306},[49,161517,14842],{"class":59},[49,161519,161520],{"class":328}," \"成年人\"\n",[49,161522,161523],{"class":51,"line":1312},[49,161524,2492],{"emptyLinePlaceholder":151},[49,161526,161527,161529],{"class":51,"line":1403},[49,161528,4182],{"class":59},[49,161530,161531],{"class":328}," \"未成年人\"\n",[49,161533,161534],{"class":51,"line":1409},[49,161535,2492],{"emptyLinePlaceholder":151},[49,161537,161538],{"class":51,"line":1421},[49,161539,2492],{"emptyLinePlaceholder":151},[49,161541,161542,161544,161547,161549],{"class":51,"line":1704},[49,161543,30504],{"class":66},[49,161545,161546],{"class":55},"(check_age(",[49,161548,919],{"class":66},[49,161550,30586],{"class":55},[49,161552,161553,161555,161557,161559,161561],{"class":51,"line":1709},[49,161554,30504],{"class":66},[49,161556,161546],{"class":55},[49,161558,751],{"class":59},[49,161560,441],{"class":66},[49,161562,30586],{"class":55},[14,161564,161565,161566,161568],{},"函数执行到 ",[46,161567,17136],{}," 后，后面的代码不会继续执行。",[166,161570,161572],{"id":161571},"_57-none","5.7 None",[14,161574,161575,161577],{},[46,161576,95749],{}," 表示空值或没有结果。",[14,161579,161580],{},"常见使用场景：",[178,161582,161583,161586,161589],{},[181,161584,161585],{},"函数没有返回值。",[181,161587,161588],{},"变量暂时没有具体值。",[181,161590,161591],{},"表示查询不到结果。",[39,161593,161595],{"className":41,"code":161594,"language":43,"meta":44,"style":44},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[46,161596,161597,161605,161609,161622],{"__ignoreMap":44},[49,161598,161599,161601,161603],{"class":51,"line":52},[49,161600,161369],{"class":55},[49,161602,60],{"class":59},[49,161604,152235],{"class":66},[49,161606,161607],{"class":51,"line":84},[49,161608,2492],{"emptyLinePlaceholder":151},[49,161610,161611,161613,161616,161618,161620],{"class":51,"line":109},[49,161612,1623],{"class":59},[49,161614,161615],{"class":55}," result ",[49,161617,39016],{"class":59},[49,161619,39022],{"class":66},[49,161621,3831],{"class":55},[49,161623,161624,161626,161628,161631],{"class":51,"line":120},[49,161625,31388],{"class":66},[49,161627,228],{"class":55},[49,161629,161630],{"class":328},"\"没有数据\"",[49,161632,81],{"class":55},[14,161634,161635,161636,161638,161639,161642,161643,28476],{},"判断 ",[46,161637,95749],{}," 推荐使用 ",[46,161640,161641],{},"is None","，不要写成 ",[46,161644,161645],{},"== None",[166,161647,161649],{"id":161648},"_58-函数文档字符串","5.8 函数文档字符串",[14,161651,161652],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[39,161654,161656],{"className":41,"code":161655,"language":43,"meta":44,"style":44},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[46,161657,161658,161668,161673],{"__ignoreMap":44},[49,161659,161660,161662,161665],{"class":51,"line":52},[49,161661,32036],{"class":59},[49,161663,161664],{"class":2055}," calculate_bmi",[49,161666,161667],{"class":55},"(weight, height):\n",[49,161669,161670],{"class":51,"line":84},[49,161671,161672],{"class":328},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[49,161674,161675,161677,161680,161682,161685,161687],{"class":51,"line":109},[49,161676,4182],{"class":59},[49,161678,161679],{"class":55}," weight ",[49,161681,803],{"class":59},[49,161683,161684],{"class":55}," height ",[49,161686,10751],{"class":59},[49,161688,47812],{"class":66},[14,161690,161691],{},"查看说明：",[39,161693,161695],{"className":41,"code":161694,"language":43,"meta":44,"style":44},"help(calculate_bmi)\n",[46,161696,161697],{"__ignoreMap":44},[49,161698,161699,161702],{"class":51,"line":52},[49,161700,161701],{"class":66},"help",[49,161703,161704],{"class":55},"(calculate_bmi)\n",[14,161706,161707],{},"较完整的写法：",[39,161709,161711],{"className":41,"code":161710,"language":43,"meta":44,"style":44},"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",[46,161712,161713,161721,161726,161731,161735,161740,161745,161750,161754],{"__ignoreMap":44},[49,161714,161715,161717,161719],{"class":51,"line":52},[49,161716,32036],{"class":59},[49,161718,161664],{"class":2055},[49,161720,161667],{"class":55},[49,161722,161723],{"class":51,"line":84},[49,161724,161725],{"class":328},"    \"\"\"\n",[49,161727,161728],{"class":51,"line":109},[49,161729,161730],{"class":328},"    计算BMI。\n",[49,161732,161733],{"class":51,"line":120},[49,161734,2492],{"emptyLinePlaceholder":151},[49,161736,161737],{"class":51,"line":135},[49,161738,161739],{"class":328},"    :param weight: 体重，单位kg\n",[49,161741,161742],{"class":51,"line":1306},[49,161743,161744],{"class":328},"    :param height: 身高，单位m\n",[49,161746,161747],{"class":51,"line":1312},[49,161748,161749],{"class":328},"    :return: BMI数值\n",[49,161751,161752],{"class":51,"line":1403},[49,161753,161725],{"class":328},[49,161755,161756,161758,161760,161762,161764,161766],{"class":51,"line":1409},[49,161757,4182],{"class":59},[49,161759,161679],{"class":55},[49,161761,803],{"class":59},[49,161763,161684],{"class":55},[49,161765,10751],{"class":59},[49,161767,47812],{"class":66},[166,161769,161771],{"id":161770},"_59-变量作用域","5.9 变量作用域",[195,161773,161775],{"id":161774},"_591-局部变量","5.9.1 局部变量",[14,161777,161778],{},"在函数内部定义的变量，只能在函数内部使用。",[39,161780,161782],{"className":41,"code":161781,"language":43,"meta":44,"style":44},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[46,161783,161784,161793,161801,161807,161811,161815,161820],{"__ignoreMap":44},[49,161785,161786,161788,161791],{"class":51,"line":52},[49,161787,32036],{"class":59},[49,161789,161790],{"class":2055}," test",[49,161792,32042],{"class":55},[49,161794,161795,161797,161799],{"class":51,"line":84},[49,161796,45682],{"class":55},[49,161798,60],{"class":59},[49,161800,58517],{"class":66},[49,161802,161803,161805],{"class":51,"line":109},[49,161804,31388],{"class":66},[49,161806,240],{"class":55},[49,161808,161809],{"class":51,"line":120},[49,161810,2492],{"emptyLinePlaceholder":151},[49,161812,161813],{"class":51,"line":135},[49,161814,2492],{"emptyLinePlaceholder":151},[49,161816,161817],{"class":51,"line":1306},[49,161818,161819],{"class":55},"test()\n",[49,161821,161822,161824,161827],{"class":51,"line":1312},[49,161823,30504],{"class":66},[49,161825,161826],{"class":55},"(num)  ",[49,161828,161829],{"class":283},"# 报错\n",[195,161831,161833],{"id":161832},"_592-全局变量","5.9.2 全局变量",[14,161835,161836],{},"在函数外部定义的变量，可以在函数内部读取。",[39,161838,161840],{"className":41,"code":161839,"language":43,"meta":44,"style":44},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[46,161841,161842,161850,161854,161858,161866,161872,161876,161880],{"__ignoreMap":44},[49,161843,161844,161846,161848],{"class":51,"line":52},[49,161845,146599],{"class":55},[49,161847,60],{"class":59},[49,161849,149416],{"class":328},[49,161851,161852],{"class":51,"line":84},[49,161853,2492],{"emptyLinePlaceholder":151},[49,161855,161856],{"class":51,"line":109},[49,161857,2492],{"emptyLinePlaceholder":151},[49,161859,161860,161862,161864],{"class":51,"line":120},[49,161861,32036],{"class":59},[49,161863,161059],{"class":2055},[49,161865,32042],{"class":55},[49,161867,161868,161870],{"class":51,"line":135},[49,161869,31388],{"class":66},[49,161871,150723],{"class":55},[49,161873,161874],{"class":51,"line":1306},[49,161875,2492],{"emptyLinePlaceholder":151},[49,161877,161878],{"class":51,"line":1312},[49,161879,2492],{"emptyLinePlaceholder":151},[49,161881,161882],{"class":51,"line":1403},[49,161883,161094],{"class":55},[14,161885,161886,161887,28476],{},"如果要在函数内部修改全局变量，需要 ",[46,161888,161889],{},"global",[39,161891,161893],{"className":41,"code":161892,"language":43,"meta":44,"style":44},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[46,161894,161895,161903,161907,161911,161920,161928,161936,161940,161944,161949],{"__ignoreMap":44},[49,161896,161897,161899,161901],{"class":51,"line":52},[49,161898,146754],{"class":55},[49,161900,60],{"class":59},[49,161902,47422],{"class":66},[49,161904,161905],{"class":51,"line":84},[49,161906,2492],{"emptyLinePlaceholder":151},[49,161908,161909],{"class":51,"line":109},[49,161910,2492],{"emptyLinePlaceholder":151},[49,161912,161913,161915,161918],{"class":51,"line":120},[49,161914,32036],{"class":59},[49,161916,161917],{"class":2055}," add_count",[49,161919,32042],{"class":55},[49,161921,161922,161925],{"class":51,"line":135},[49,161923,161924],{"class":59},"    global",[49,161926,161927],{"class":55}," count\n",[49,161929,161930,161932,161934],{"class":51,"line":1306},[49,161931,159496],{"class":55},[49,161933,9567],{"class":59},[49,161935,55788],{"class":66},[49,161937,161938],{"class":51,"line":1312},[49,161939,2492],{"emptyLinePlaceholder":151},[49,161941,161942],{"class":51,"line":1403},[49,161943,2492],{"emptyLinePlaceholder":151},[49,161945,161946],{"class":51,"line":1409},[49,161947,161948],{"class":55},"add_count()\n",[49,161950,161951,161953],{"class":51,"line":1421},[49,161952,30504],{"class":66},[49,161954,161955],{"class":55},"(count)\n",[14,161957,161958],{},"不建议大量使用全局变量，项目变大后很难维护。",[166,161960,161962],{"id":161961},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161964,161965],{},"一个函数中可以调用另一个函数。",[39,161967,161969],{"className":41,"code":161968,"language":43,"meta":44,"style":44},"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",[46,161970,161971,161980,161994,161998,162002,162011,162016,162036,162057,162061,162065,162069],{"__ignoreMap":44},[49,161972,161973,161975,161978],{"class":51,"line":52},[49,161974,32036],{"class":59},[49,161976,161977],{"class":2055}," print_line",[49,161979,32042],{"class":55},[49,161981,161982,161984,161986,161988,161990,161992],{"class":51,"line":84},[49,161983,31388],{"class":66},[49,161985,228],{"class":55},[49,161987,32572],{"class":328},[49,161989,6608],{"class":59},[49,161991,78754],{"class":66},[49,161993,81],{"class":55},[49,161995,161996],{"class":51,"line":109},[49,161997,2492],{"emptyLinePlaceholder":151},[49,161999,162000],{"class":51,"line":120},[49,162001,2492],{"emptyLinePlaceholder":151},[49,162003,162004,162006,162009],{"class":51,"line":135},[49,162005,32036],{"class":59},[49,162007,162008],{"class":2055}," print_info",[49,162010,149438],{"class":55},[49,162012,162013],{"class":51,"line":1306},[49,162014,162015],{"class":55},"    print_line()\n",[49,162017,162018,162020,162022,162024,162026,162028,162030,162032,162034],{"class":51,"line":1312},[49,162019,31388],{"class":66},[49,162021,228],{"class":55},[49,162023,277],{"class":59},[49,162025,156745],{"class":328},[49,162027,1115],{"class":66},[49,162029,79899],{"class":55},[49,162031,1165],{"class":66},[49,162033,474],{"class":328},[49,162035,81],{"class":55},[49,162037,162038,162040,162042,162044,162047,162049,162051,162053,162055],{"class":51,"line":1403},[49,162039,31388],{"class":66},[49,162041,228],{"class":55},[49,162043,277],{"class":59},[49,162045,162046],{"class":328},"\"年龄:",[49,162048,1115],{"class":66},[49,162050,70310],{"class":55},[49,162052,1165],{"class":66},[49,162054,474],{"class":328},[49,162056,81],{"class":55},[49,162058,162059],{"class":51,"line":1409},[49,162060,162015],{"class":55},[49,162062,162063],{"class":51,"line":1421},[49,162064,2492],{"emptyLinePlaceholder":151},[49,162066,162067],{"class":51,"line":1704},[49,162068,2492],{"emptyLinePlaceholder":151},[49,162070,162071,162074,162076,162078,162080],{"class":51,"line":1709},[49,162072,162073],{"class":55},"print_info(",[49,162075,149951],{"class":328},[49,162077,12525],{"class":55},[49,162079,869],{"class":66},[49,162081,81],{"class":55},[14,162083,162084],{},"这种方式可以把小功能组合成大功能。",[166,162086,162088],{"id":162087},"_511-参数检查","5.11 参数检查",[14,162090,162091],{},"函数内部可以检查参数是否合法。",[39,162093,162095],{"className":41,"code":162094,"language":43,"meta":44,"style":44},"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",[46,162096,162097,162106,162118,162124,162134,162138,162142,162159,162163,162175,162186,162192],{"__ignoreMap":44},[49,162098,162099,162101,162104],{"class":51,"line":52},[49,162100,32036],{"class":59},[49,162102,162103],{"class":2055}," divide",[49,162105,151156],{"class":55},[49,162107,162108,162110,162112,162114,162116],{"class":51,"line":84},[49,162109,3193],{"class":59},[49,162111,10972],{"class":55},[49,162113,3041],{"class":59},[49,162115,4185],{"class":66},[49,162117,3831],{"class":55},[49,162119,162120,162122],{"class":51,"line":109},[49,162121,14842],{"class":59},[49,162123,152235],{"class":66},[49,162125,162126,162128,162130,162132],{"class":51,"line":120},[49,162127,4182],{"class":59},[49,162129,10959],{"class":55},[49,162131,803],{"class":59},[49,162133,151167],{"class":55},[49,162135,162136],{"class":51,"line":135},[49,162137,2492],{"emptyLinePlaceholder":151},[49,162139,162140],{"class":51,"line":1306},[49,162141,2492],{"emptyLinePlaceholder":151},[49,162143,162144,162146,162148,162151,162153,162155,162157],{"class":51,"line":1312},[49,162145,161369],{"class":55},[49,162147,60],{"class":59},[49,162149,162150],{"class":55}," divide(",[49,162152,95],{"class":66},[49,162154,12525],{"class":55},[49,162156,415],{"class":66},[49,162158,81],{"class":55},[49,162160,162161],{"class":51,"line":1403},[49,162162,2492],{"emptyLinePlaceholder":151},[49,162164,162165,162167,162169,162171,162173],{"class":51,"line":1409},[49,162166,1623],{"class":59},[49,162168,161615],{"class":55},[49,162170,39016],{"class":59},[49,162172,39022],{"class":66},[49,162174,3831],{"class":55},[49,162176,162177,162179,162181,162184],{"class":51,"line":1421},[49,162178,31388],{"class":66},[49,162180,228],{"class":55},[49,162182,162183],{"class":328},"\"除数不能为0\"",[49,162185,81],{"class":55},[49,162187,162188,162190],{"class":51,"line":1704},[49,162189,1793],{"class":59},[49,162191,3831],{"class":55},[49,162193,162194,162196],{"class":51,"line":1709},[49,162195,31388],{"class":66},[49,162197,76674],{"class":55},[166,162199,162201],{"id":162200},"_512-类型提示","5.12 类型提示",[14,162203,162204],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[39,162206,162208],{"className":41,"code":162207,"language":43,"meta":44,"style":44},"def add(a: int, b: int) -> int:\n    return a + b\n",[46,162209,162210,162233],{"__ignoreMap":44},[49,162211,162212,162214,162216,162219,162221,162224,162226,162229,162231],{"class":51,"line":52},[49,162213,32036],{"class":59},[49,162215,5300],{"class":2055},[49,162217,162218],{"class":55},"(a: ",[49,162220,231],{"class":66},[49,162222,162223],{"class":55},", b: ",[49,162225,231],{"class":66},[49,162227,162228],{"class":55},") -> ",[49,162230,231],{"class":66},[49,162232,3831],{"class":55},[49,162234,162235,162237,162239,162241],{"class":51,"line":84},[49,162236,4182],{"class":59},[49,162238,10959],{"class":55},[49,162240,700],{"class":59},[49,162242,151167],{"class":55},[14,162244,162245],{},"字符串参数：",[39,162247,162249],{"className":41,"code":162248,"language":43,"meta":44,"style":44},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[46,162250,162251,162268],{"__ignoreMap":44},[49,162252,162253,162255,162257,162260,162262,162264,162266],{"class":51,"line":52},[49,162254,32036],{"class":59},[49,162256,161059],{"class":2055},[49,162258,162259],{"class":55},"(name: ",[49,162261,1391],{"class":66},[49,162263,162228],{"class":55},[49,162265,95749],{"class":66},[49,162267,3831],{"class":55},[49,162269,162270,162272,162274,162276,162278,162280,162282,162284,162286],{"class":51,"line":84},[49,162271,31388],{"class":66},[49,162273,228],{"class":55},[49,162275,277],{"class":59},[49,162277,157117],{"class":328},[49,162279,1115],{"class":66},[49,162281,79899],{"class":55},[49,162283,1165],{"class":66},[49,162285,474],{"class":328},[49,162287,81],{"class":55},[14,162289,162290],{},"列表参数：",[39,162292,162294],{"className":41,"code":162293,"language":43,"meta":44,"style":44},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[46,162295,162296,162315,162323,162335,162344],{"__ignoreMap":44},[49,162297,162298,162300,162303,162306,162308,162311,162313],{"class":51,"line":52},[49,162299,32036],{"class":59},[49,162301,162302],{"class":2055}," get_total",[49,162304,162305],{"class":55},"(numbers: list[",[49,162307,231],{"class":66},[49,162309,162310],{"class":55},"]) -> ",[49,162312,231],{"class":66},[49,162314,3831],{"class":55},[49,162316,162317,162319,162321],{"class":51,"line":84},[49,162318,159370],{"class":55},[49,162320,60],{"class":59},[49,162322,47422],{"class":66},[49,162324,162325,162327,162330,162332],{"class":51,"line":109},[49,162326,3293],{"class":59},[49,162328,162329],{"class":55}," number ",[49,162331,26134],{"class":59},[49,162333,162334],{"class":55}," numbers:\n",[49,162336,162337,162339,162341],{"class":51,"line":120},[49,162338,160045],{"class":55},[49,162340,9567],{"class":59},[49,162342,162343],{"class":55}," number\n",[49,162345,162346,162348],{"class":51,"line":135},[49,162347,4182],{"class":59},[49,162349,162350],{"class":55}," total\n",[14,162352,162353],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[166,162355,162357],{"id":162356},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[39,162359,162361],{"className":41,"code":162360,"language":43,"meta":44,"style":44},"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",[46,162362,162363,162373,162377,162381,162389,162400,162410,162420,162430,162440,162444,162448,162457,162479,162483,162487,162496,162502,162522,162534,162545,162549,162558,162569,162574,162578,162582,162591,162597,162616,162628,162638,162642,162653,162663,162667,162675,162686,162690,162694,162698,162706,162711,162725,162729,162741,162746,162758,162763,162775,162780,162792,162802,162806,162812],{"__ignoreMap":44},[49,162364,162365,162368,162370],{"class":51,"line":52},[49,162366,162367],{"class":55},"balance ",[49,162369,60],{"class":59},[49,162371,162372],{"class":66}," 1000\n",[49,162374,162375],{"class":51,"line":84},[49,162376,2492],{"emptyLinePlaceholder":151},[49,162378,162379],{"class":51,"line":109},[49,162380,2492],{"emptyLinePlaceholder":151},[49,162382,162383,162385,162387],{"class":51,"line":120},[49,162384,32036],{"class":59},[49,162386,152096],{"class":2055},[49,162388,32042],{"class":55},[49,162390,162391,162393,162395,162398],{"class":51,"line":135},[49,162392,31388],{"class":66},[49,162394,228],{"class":55},[49,162396,162397],{"class":328},"\"====== ATM ======\"",[49,162399,81],{"class":55},[49,162401,162402,162404,162406,162408],{"class":51,"line":1306},[49,162403,31388],{"class":66},[49,162405,228],{"class":55},[49,162407,160711],{"class":328},[49,162409,81],{"class":55},[49,162411,162412,162414,162416,162418],{"class":51,"line":1312},[49,162413,31388],{"class":66},[49,162415,228],{"class":55},[49,162417,160722],{"class":328},[49,162419,81],{"class":55},[49,162421,162422,162424,162426,162428],{"class":51,"line":1403},[49,162423,31388],{"class":66},[49,162425,228],{"class":55},[49,162427,160733],{"class":328},[49,162429,81],{"class":55},[49,162431,162432,162434,162436,162438],{"class":51,"line":1409},[49,162433,31388],{"class":66},[49,162435,228],{"class":55},[49,162437,160744],{"class":328},[49,162439,81],{"class":55},[49,162441,162442],{"class":51,"line":1421},[49,162443,2492],{"emptyLinePlaceholder":151},[49,162445,162446],{"class":51,"line":1704},[49,162447,2492],{"emptyLinePlaceholder":151},[49,162449,162450,162452,162455],{"class":51,"line":1709},[49,162451,32036],{"class":59},[49,162453,162454],{"class":2055}," show_balance",[49,162456,32042],{"class":55},[49,162458,162459,162461,162463,162465,162468,162470,162473,162475,162477],{"class":51,"line":1715},[49,162460,31388],{"class":66},[49,162462,228],{"class":55},[49,162464,277],{"class":59},[49,162466,162467],{"class":328},"\"当前余额:",[49,162469,1115],{"class":66},[49,162471,162472],{"class":55},"balance",[49,162474,1165],{"class":66},[49,162476,157075],{"class":328},[49,162478,81],{"class":55},[49,162480,162481],{"class":51,"line":1720},[49,162482,2492],{"emptyLinePlaceholder":151},[49,162484,162485],{"class":51,"line":1734},[49,162486,2492],{"emptyLinePlaceholder":151},[49,162488,162489,162491,162494],{"class":51,"line":1739},[49,162490,32036],{"class":59},[49,162492,162493],{"class":2055}," save_money",[49,162495,32042],{"class":55},[49,162497,162498,162500],{"class":51,"line":1745},[49,162499,161924],{"class":59},[49,162501,150162],{"class":55},[49,162503,162504,162507,162509,162511,162513,162515,162517,162520],{"class":51,"line":1766},[49,162505,162506],{"class":55},"    money ",[49,162508,60],{"class":59},[49,162510,109860],{"class":66},[49,162512,228],{"class":55},[49,162514,53910],{"class":66},[49,162516,228],{"class":55},[49,162518,162519],{"class":328},"\"请输入存款金额:\"",[49,162521,30586],{"class":55},[49,162523,162524,162526,162528,162530,162532],{"class":51,"line":1771},[49,162525,3193],{"class":59},[49,162527,150205],{"class":55},[49,162529,1680],{"class":59},[49,162531,4185],{"class":66},[49,162533,3831],{"class":55},[49,162535,162536,162538,162540,162543],{"class":51,"line":1785},[49,162537,32540],{"class":66},[49,162539,228],{"class":55},[49,162541,162542],{"class":328},"\"金额必须大于0\"",[49,162544,81],{"class":55},[49,162546,162547],{"class":51,"line":1790},[49,162548,152424],{"class":59},[49,162550,162551,162554,162556],{"class":51,"line":1819},[49,162552,162553],{"class":55},"    balance ",[49,162555,9567],{"class":59},[49,162557,150238],{"class":55},[49,162559,162560,162562,162564,162567],{"class":51,"line":1824},[49,162561,31388],{"class":66},[49,162563,228],{"class":55},[49,162565,162566],{"class":328},"\"存款成功\"",[49,162568,81],{"class":55},[49,162570,162571],{"class":51,"line":1841},[49,162572,162573],{"class":55},"    show_balance()\n",[49,162575,162576],{"class":51,"line":1846},[49,162577,2492],{"emptyLinePlaceholder":151},[49,162579,162580],{"class":51,"line":1851},[49,162581,2492],{"emptyLinePlaceholder":151},[49,162583,162584,162586,162589],{"class":51,"line":1856},[49,162585,32036],{"class":59},[49,162587,162588],{"class":2055}," withdraw_money",[49,162590,32042],{"class":55},[49,162592,162593,162595],{"class":51,"line":1870},[49,162594,161924],{"class":59},[49,162596,150162],{"class":55},[49,162598,162599,162601,162603,162605,162607,162609,162611,162614],{"class":51,"line":1875},[49,162600,162506],{"class":55},[49,162602,60],{"class":59},[49,162604,109860],{"class":66},[49,162606,228],{"class":55},[49,162608,53910],{"class":66},[49,162610,228],{"class":55},[49,162612,162613],{"class":328},"\"请输入取款金额:\"",[49,162615,30586],{"class":55},[49,162617,162618,162620,162622,162624,162626],{"class":51,"line":2669},[49,162619,3193],{"class":59},[49,162621,150205],{"class":55},[49,162623,1680],{"class":59},[49,162625,4185],{"class":66},[49,162627,3831],{"class":55},[49,162629,162630,162632,162634,162636],{"class":51,"line":2683},[49,162631,32540],{"class":66},[49,162633,228],{"class":55},[49,162635,162542],{"class":328},[49,162637,81],{"class":55},[49,162639,162640],{"class":51,"line":2691},[49,162641,152424],{"class":59},[49,162643,162644,162646,162648,162650],{"class":51,"line":2696},[49,162645,3193],{"class":59},[49,162647,150205],{"class":55},[49,162649,1179],{"class":59},[49,162651,162652],{"class":55}," balance:\n",[49,162654,162655,162657,162659,162661],{"class":51,"line":2702},[49,162656,32540],{"class":66},[49,162658,228],{"class":55},[49,162660,150300],{"class":328},[49,162662,81],{"class":55},[49,162664,162665],{"class":51,"line":2708},[49,162666,152424],{"class":59},[49,162668,162669,162671,162673],{"class":51,"line":2713},[49,162670,162553],{"class":55},[49,162672,150315],{"class":59},[49,162674,150238],{"class":55},[49,162676,162677,162679,162681,162684],{"class":51,"line":8038},[49,162678,31388],{"class":66},[49,162680,228],{"class":55},[49,162682,162683],{"class":328},"\"取款成功\"",[49,162685,81],{"class":55},[49,162687,162688],{"class":51,"line":8062},[49,162689,162573],{"class":55},[49,162691,162692],{"class":51,"line":8067},[49,162693,2492],{"emptyLinePlaceholder":151},[49,162695,162696],{"class":51,"line":8073},[49,162697,2492],{"emptyLinePlaceholder":151},[49,162699,162700,162702,162704],{"class":51,"line":8100},[49,162701,108726],{"class":59},[49,162703,95355],{"class":66},[49,162705,3831],{"class":55},[49,162707,162708],{"class":51,"line":8105},[49,162709,162710],{"class":55},"    show_menu()\n",[49,162712,162713,162715,162717,162719,162721,162723],{"class":51,"line":8111},[49,162714,160755],{"class":55},[49,162716,60],{"class":59},[49,162718,60694],{"class":66},[49,162720,228],{"class":55},[49,162722,153136],{"class":328},[49,162724,81],{"class":55},[49,162726,162727],{"class":51,"line":8123},[49,162728,2492],{"emptyLinePlaceholder":151},[49,162730,162731,162733,162735,162737,162739],{"class":51,"line":8135},[49,162732,3193],{"class":59},[49,162734,153149],{"class":55},[49,162736,3041],{"class":59},[49,162738,153154],{"class":328},[49,162740,3831],{"class":55},[49,162742,162743],{"class":51,"line":8147},[49,162744,162745],{"class":55},"        show_balance()\n",[49,162747,162748,162750,162752,162754,162756],{"class":51,"line":9806},[49,162749,39382],{"class":59},[49,162751,153149],{"class":55},[49,162753,3041],{"class":59},[49,162755,153173],{"class":328},[49,162757,3831],{"class":55},[49,162759,162760],{"class":51,"line":9831},[49,162761,162762],{"class":55},"        save_money()\n",[49,162764,162765,162767,162769,162771,162773],{"class":51,"line":9854},[49,162766,39382],{"class":59},[49,162768,153149],{"class":55},[49,162770,3041],{"class":59},[49,162772,153191],{"class":328},[49,162774,3831],{"class":55},[49,162776,162777],{"class":51,"line":9878},[49,162778,162779],{"class":55},"        withdraw_money()\n",[49,162781,162782,162784,162786,162788,162790],{"class":51,"line":9883},[49,162783,39382],{"class":59},[49,162785,153149],{"class":55},[49,162787,3041],{"class":59},[49,162789,153245],{"class":328},[49,162791,3831],{"class":55},[49,162793,162794,162796,162798,162800],{"class":51,"line":9888},[49,162795,32540],{"class":66},[49,162797,228],{"class":55},[49,162799,153256],{"class":328},[49,162801,81],{"class":55},[49,162803,162804],{"class":51,"line":9893},[49,162805,31716],{"class":59},[49,162807,162808,162810],{"class":51,"line":9902},[49,162809,158085],{"class":59},[49,162811,3831],{"class":55},[49,162813,162814,162816,162818,162820],{"class":51,"line":9907},[49,162815,32540],{"class":66},[49,162817,228],{"class":55},[49,162819,153277],{"class":328},[49,162821,81],{"class":55},[14,162823,162824],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[166,162826,162828],{"id":162827},"_514-易错点","5.14 易错点",[178,162830,162831,162834,162837,162842,162847,162850],{},[181,162832,162833],{},"函数定义后必须调用才会执行。",[181,162835,162836],{},"函数名后面有括号才是调用。",[181,162838,162839,162841],{},[46,162840,17136],{}," 后面的代码不会执行。",[181,162843,162844,162845,28476],{},"没有返回值的函数默认返回 ",[46,162846,95749],{},[181,162848,162849],{},"局部变量不能在函数外部访问。",[181,162851,162852,162853,162855],{},"不要滥用 ",[46,162854,161889],{},"，更好的方式是让函数返回新值。",[14,162857,162858,162859,162861],{},"例如不用 ",[46,162860,161889],{}," 改写存款：",[39,162863,162865],{"className":41,"code":162864,"language":43,"meta":44,"style":44},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[46,162866,162867,162876,162887,162891,162895,162903,162916],{"__ignoreMap":44},[49,162868,162869,162871,162873],{"class":51,"line":52},[49,162870,32036],{"class":59},[49,162872,162493],{"class":2055},[49,162874,162875],{"class":55},"(balance, money):\n",[49,162877,162878,162880,162883,162885],{"class":51,"line":84},[49,162879,4182],{"class":59},[49,162881,162882],{"class":55}," balance ",[49,162884,700],{"class":59},[49,162886,150238],{"class":55},[49,162888,162889],{"class":51,"line":109},[49,162890,2492],{"emptyLinePlaceholder":151},[49,162892,162893],{"class":51,"line":120},[49,162894,2492],{"emptyLinePlaceholder":151},[49,162896,162897,162899,162901],{"class":51,"line":135},[49,162898,162367],{"class":55},[49,162900,60],{"class":59},[49,162902,162372],{"class":66},[49,162904,162905,162907,162909,162912,162914],{"class":51,"line":1306},[49,162906,162367],{"class":55},[49,162908,60],{"class":59},[49,162910,162911],{"class":55}," save_money(balance, ",[49,162913,1814],{"class":66},[49,162915,81],{"class":55},[49,162917,162918,162920],{"class":51,"line":1312},[49,162919,30504],{"class":66},[49,162921,162922],{"class":55},"(balance)\n",[166,162924,162926],{"id":162925},"_515-本章练习","5.15 本章练习",[178,162928,162929,162936,162942,162948,162954],{},[181,162930,162931,162932,162935],{},"定义函数 ",[46,162933,162934],{},"print_student(name, age)","，输出学生信息。",[181,162937,162931,162938,162941],{},[46,162939,162940],{},"get_max(a, b, c)","，返回三个数中的最大值。",[181,162943,162931,162944,162947],{},[46,162945,162946],{},"is_even(num)","，判断一个数是否为偶数。",[181,162949,162931,162950,162953],{},[46,162951,162952],{},"calculate_bmi(weight, height)","，返回 BMI。",[181,162955,162956],{},"把第 4 章的菜单程序拆分成多个函数。",[143,162958,162959],{},"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":44,"searchDepth":84,"depth":84,"links":162961},[162962,162963,162964,162965,162966,162967,162968,162969,162970,162974,162975,162976,162977,162978,162979],{"id":160982,"depth":84,"text":160983},{"id":161023,"depth":84,"text":161024},{"id":161113,"depth":84,"text":161114},{"id":161194,"depth":84,"text":161195},{"id":161327,"depth":84,"text":161328},{"id":161449,"depth":84,"text":161450},{"id":161571,"depth":84,"text":161572},{"id":161648,"depth":84,"text":161649},{"id":161770,"depth":84,"text":161771,"children":162971},[162972,162973],{"id":161774,"depth":109,"text":161775},{"id":161832,"depth":109,"text":161833},{"id":161961,"depth":84,"text":161962},{"id":162087,"depth":84,"text":162088},{"id":162200,"depth":84,"text":162201},{"id":162356,"depth":84,"text":162357},{"id":162827,"depth":84,"text":162828},{"id":162925,"depth":84,"text":162926},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160974,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162986,"title":162987,"body":162988,"description":148,"extension":149,"meta":166032,"navigation":151,"path":166033,"seo":166034,"stem":166035,"__hash__":166036},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162989,"toc":166013},[162990,162993,162997,163000,163003,163107,163110,163114,163117,163197,163200,163204,163207,163267,163270,163306,163309,163324,163328,163401,163404,163459,163462,163532,163535,163619,163629,163687,163691,163736,163739,163765,163768,163874,163878,163881,163923,163926,163990,163993,163997,164000,164061,164064,164094,164097,164135,164139,164142,164151,164154,164278,164281,164322,164326,164329,164340,164380,164383,164398,164403,164406,164473,164476,164566,164570,164573,164621,164624,164651,164653,164683,164686,164706,164709,164740,164743,164776,164780,164783,164807,164810,164834,164837,164861,164865,164868,164998,165001,165081,165084,165159,165163,165166,165216,165219,165261,165264,165288,165290,165314,165317,165372,165375,165441,165445,165448,165451,165489,165492,165545,165548,165594,165597,165630,165633,165637,165956,165960,165989,165993,166010],[10,162991,162987],{"id":162992},"_6-数据容器",[166,162994,162996],{"id":162995},"_61-什么是数据容器","6.1 什么是数据容器",[14,162998,162999],{},"数据容器用于一次保存多个数据。",[14,163001,163002],{},"常见容器：",[361,163004,163005,163022],{},[364,163006,163007],{},[367,163008,163009,163011,163014,163017,163020],{},[370,163010,25862],{},[370,163012,163013],{},"是否有序",[370,163015,163016],{},"是否可变",[370,163018,163019],{},"是否允许重复",[370,163021,27583],{},[408,163023,163024,163042,163058,163073,163090],{},[367,163025,163026,163029,163032,163035,163038],{},[413,163027,163028],{},"list列表",[413,163030,163031],{},"有序",[413,163033,163034],{},"可变",[413,163036,163037],{},"允许",[413,163039,163040],{},[46,163041,155320],{},[367,163043,163044,163047,163049,163052,163054],{},[413,163045,163046],{},"tuple元组",[413,163048,163031],{},[413,163050,163051],{},"不可变",[413,163053,163037],{},[413,163055,163056],{},[46,163057,155333],{},[367,163059,163060,163063,163065,163067,163069],{},[413,163061,163062],{},"str字符串",[413,163064,163031],{},[413,163066,163051],{},[413,163068,163037],{},[413,163070,163071],{},[46,163072,155943],{},[367,163074,163075,163078,163081,163083,163086],{},[413,163076,163077],{},"set集合",[413,163079,163080],{},"无序",[413,163082,163034],{},[413,163084,163085],{},"不允许",[413,163087,163088],{},[46,163089,155358],{},[367,163091,163092,163095,163097,163099,163102],{},[413,163093,163094],{},"dict字典",[413,163096,163031],{},[413,163098,163034],{},[413,163100,163101],{},"key不允许重复",[413,163103,163104],{},[46,163105,163106],{},"{\"name\": \"小明\"}",[14,163108,163109],{},"Python 3.7 之后，字典保持插入顺序。",[166,163111,163113],{"id":163112},"_62-列表list","6.2 列表list",[14,163115,163116],{},"列表用于保存一组有顺序的数据。",[39,163118,163120],{"className":41,"code":163119,"language":43,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[46,163121,163122,163142,163167,163188],{"__ignoreMap":44},[49,163123,163124,163126,163128,163130,163132,163134,163136,163138,163140],{"class":51,"line":52},[49,163125,160443],{"class":55},[49,163127,60],{"class":59},[49,163129,52315],{"class":55},[49,163131,149951],{"class":328},[49,163133,12525],{"class":55},[49,163135,150999],{"class":328},[49,163137,12525],{"class":55},[49,163139,159794],{"class":328},[49,163141,33335],{"class":55},[49,163143,163144,163147,163149,163151,163153,163155,163157,163159,163161,163163,163165],{"class":51,"line":84},[49,163145,163146],{"class":55},"numbers ",[49,163148,60],{"class":59},[49,163150,52315],{"class":55},[49,163152,441],{"class":66},[49,163154,12525],{"class":55},[49,163156,301],{"class":66},[49,163158,12525],{"class":55},[49,163160,73],{"class":66},[49,163162,12525],{"class":55},[49,163164,515],{"class":66},[49,163166,33335],{"class":55},[49,163168,163169,163172,163174,163176,163178,163180,163182,163184,163186],{"class":51,"line":109},[49,163170,163171],{"class":55},"mixed ",[49,163173,60],{"class":59},[49,163175,52315],{"class":55},[49,163177,149951],{"class":328},[49,163179,12525],{"class":55},[49,163181,869],{"class":66},[49,163183,12525],{"class":55},[49,163185,31565],{"class":66},[49,163187,33335],{"class":55},[49,163189,163190,163193,163195],{"class":51,"line":120},[49,163191,163192],{"class":55},"empty ",[49,163194,60],{"class":59},[49,163196,51927],{"class":55},[14,163198,163199],{},"推荐一个列表中保存同类数据，代码更清晰。",[166,163201,163203],{"id":163202},"_63-列表索引","6.3 列表索引",[14,163205,163206],{},"正向索引从 0 开始：",[39,163208,163210],{"className":41,"code":163209,"language":43,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[46,163211,163212,163232,163236,163247,163257],{"__ignoreMap":44},[49,163213,163214,163216,163218,163220,163222,163224,163226,163228,163230],{"class":51,"line":52},[49,163215,160443],{"class":55},[49,163217,60],{"class":59},[49,163219,52315],{"class":55},[49,163221,149951],{"class":328},[49,163223,12525],{"class":55},[49,163225,150999],{"class":328},[49,163227,12525],{"class":55},[49,163229,159794],{"class":328},[49,163231,33335],{"class":55},[49,163233,163234],{"class":51,"line":84},[49,163235,2492],{"emptyLinePlaceholder":151},[49,163237,163238,163240,163243,163245],{"class":51,"line":109},[49,163239,30504],{"class":66},[49,163241,163242],{"class":55},"(names[",[49,163244,415],{"class":66},[49,163246,106],{"class":55},[49,163248,163249,163251,163253,163255],{"class":51,"line":120},[49,163250,30504],{"class":66},[49,163252,163242],{"class":55},[49,163254,441],{"class":66},[49,163256,106],{"class":55},[49,163258,163259,163261,163263,163265],{"class":51,"line":135},[49,163260,30504],{"class":66},[49,163262,163242],{"class":55},[49,163264,301],{"class":66},[49,163266,106],{"class":55},[14,163268,163269],{},"反向索引从 -1 开始：",[39,163271,163273],{"className":41,"code":163272,"language":43,"meta":44,"style":44},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[46,163274,163275,163291],{"__ignoreMap":44},[49,163276,163277,163279,163281,163283,163285,163288],{"class":51,"line":52},[49,163278,30504],{"class":66},[49,163280,163242],{"class":55},[49,163282,751],{"class":59},[49,163284,441],{"class":66},[49,163286,163287],{"class":55},"])  ",[49,163289,163290],{"class":283},"# 小刚\n",[49,163292,163293,163295,163297,163299,163301,163303],{"class":51,"line":84},[49,163294,30504],{"class":66},[49,163296,163242],{"class":55},[49,163298,751],{"class":59},[49,163300,301],{"class":66},[49,163302,163287],{"class":55},[49,163304,163305],{"class":283},"# 小红\n",[14,163307,163308],{},"索引越界会报错：",[39,163310,163312],{"className":41,"code":163311,"language":43,"meta":44,"style":44},"print(names[3])\n",[46,163313,163314],{"__ignoreMap":44},[49,163315,163316,163318,163320,163322],{"class":51,"line":52},[49,163317,30504],{"class":66},[49,163319,163242],{"class":55},[49,163321,73],{"class":66},[49,163323,106],{"class":55},[166,163325,163327],{"id":163326},"_64-列表常用方法","6.4 列表常用方法",[39,163329,163331],{"className":41,"code":163330,"language":43,"meta":44,"style":44},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[46,163332,163333,163349,163353,163362,163376,163390,163394],{"__ignoreMap":44},[49,163334,163335,163337,163339,163341,163343,163345,163347],{"class":51,"line":52},[49,163336,160443],{"class":55},[49,163338,60],{"class":59},[49,163340,52315],{"class":55},[49,163342,149951],{"class":328},[49,163344,12525],{"class":55},[49,163346,150999],{"class":328},[49,163348,33335],{"class":55},[49,163350,163351],{"class":51,"line":84},[49,163352,2492],{"emptyLinePlaceholder":151},[49,163354,163355,163358,163360],{"class":51,"line":109},[49,163356,163357],{"class":55},"names.append(",[49,163359,159794],{"class":328},[49,163361,81],{"class":55},[49,163363,163364,163367,163369,163371,163374],{"class":51,"line":120},[49,163365,163366],{"class":55},"names.insert(",[49,163368,441],{"class":66},[49,163370,12525],{"class":55},[49,163372,163373],{"class":328},"\"小李\"",[49,163375,81],{"class":55},[49,163377,163378,163381,163383,163385,163388],{"class":51,"line":135},[49,163379,163380],{"class":55},"names.extend([",[49,163382,8773],{"class":328},[49,163384,12525],{"class":55},[49,163386,163387],{"class":328},"\"小赵\"",[49,163389,106],{"class":55},[49,163391,163392],{"class":51,"line":1306},[49,163393,2492],{"emptyLinePlaceholder":151},[49,163395,163396,163398],{"class":51,"line":1312},[49,163397,30504],{"class":66},[49,163399,163400],{"class":55},"(names)\n",[14,163402,163403],{},"删除元素：",[39,163405,163407],{"className":41,"code":163406,"language":43,"meta":44,"style":44},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[46,163408,163409,163418,163428,163442,163454],{"__ignoreMap":44},[49,163410,163411,163414,163416],{"class":51,"line":52},[49,163412,163413],{"class":55},"names.remove(",[49,163415,150999],{"class":328},[49,163417,81],{"class":55},[49,163419,163420,163423,163425],{"class":51,"line":84},[49,163421,163422],{"class":55},"last ",[49,163424,60],{"class":59},[49,163426,163427],{"class":55}," names.pop()\n",[49,163429,163430,163433,163435,163438,163440],{"class":51,"line":109},[49,163431,163432],{"class":55},"first ",[49,163434,60],{"class":59},[49,163436,163437],{"class":55}," names.pop(",[49,163439,415],{"class":66},[49,163441,81],{"class":55},[49,163443,163444,163447,163450,163452],{"class":51,"line":120},[49,163445,163446],{"class":59},"del",[49,163448,163449],{"class":55}," names[",[49,163451,415],{"class":66},[49,163453,33335],{"class":55},[49,163455,163456],{"class":51,"line":135},[49,163457,163458],{"class":55},"names.clear()\n",[14,163460,163461],{},"查询和统计：",[39,163463,163465],{"className":41,"code":163464,"language":43,"meta":44,"style":44},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[46,163466,163467,163495,163499,163510,163521],{"__ignoreMap":44},[49,163468,163469,163471,163473,163475,163477,163479,163481,163483,163485,163487,163489,163491,163493],{"class":51,"line":52},[49,163470,163146],{"class":55},[49,163472,60],{"class":59},[49,163474,52315],{"class":55},[49,163476,441],{"class":66},[49,163478,12525],{"class":55},[49,163480,301],{"class":66},[49,163482,12525],{"class":55},[49,163484,73],{"class":66},[49,163486,12525],{"class":55},[49,163488,301],{"class":66},[49,163490,12525],{"class":55},[49,163492,515],{"class":66},[49,163494,33335],{"class":55},[49,163496,163497],{"class":51,"line":84},[49,163498,2492],{"emptyLinePlaceholder":151},[49,163500,163501,163503,163506,163508],{"class":51,"line":109},[49,163502,30504],{"class":66},[49,163504,163505],{"class":55},"(numbers.index(",[49,163507,73],{"class":66},[49,163509,30586],{"class":55},[49,163511,163512,163514,163517,163519],{"class":51,"line":120},[49,163513,30504],{"class":66},[49,163515,163516],{"class":55},"(numbers.count(",[49,163518,301],{"class":66},[49,163520,30586],{"class":55},[49,163522,163523,163525,163527,163529],{"class":51,"line":135},[49,163524,30504],{"class":66},[49,163526,228],{"class":55},[49,163528,7448],{"class":66},[49,163530,163531],{"class":55},"(numbers))\n",[14,163533,163534],{},"排序：",[39,163536,163538],{"className":41,"code":163537,"language":43,"meta":44,"style":44},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[46,163539,163540,163564,163568,163573,163580,163584,163598,163604,163608,163613],{"__ignoreMap":44},[49,163541,163542,163544,163546,163548,163550,163552,163554,163556,163558,163560,163562],{"class":51,"line":52},[49,163543,163146],{"class":55},[49,163545,60],{"class":59},[49,163547,52315],{"class":55},[49,163549,73],{"class":66},[49,163551,12525],{"class":55},[49,163553,441],{"class":66},[49,163555,12525],{"class":55},[49,163557,541],{"class":66},[49,163559,12525],{"class":55},[49,163561,301],{"class":66},[49,163563,33335],{"class":55},[49,163565,163566],{"class":51,"line":84},[49,163567,2492],{"emptyLinePlaceholder":151},[49,163569,163570],{"class":51,"line":109},[49,163571,163572],{"class":55},"numbers.sort()\n",[49,163574,163575,163577],{"class":51,"line":120},[49,163576,30504],{"class":66},[49,163578,163579],{"class":55},"(numbers)\n",[49,163581,163582],{"class":51,"line":135},[49,163583,2492],{"emptyLinePlaceholder":151},[49,163585,163586,163589,163592,163594,163596],{"class":51,"line":1306},[49,163587,163588],{"class":55},"numbers.sort(",[49,163590,163591],{"class":126},"reverse",[49,163593,60],{"class":59},[49,163595,31565],{"class":66},[49,163597,81],{"class":55},[49,163599,163600,163602],{"class":51,"line":1312},[49,163601,30504],{"class":66},[49,163603,163579],{"class":55},[49,163605,163606],{"class":51,"line":1403},[49,163607,2492],{"emptyLinePlaceholder":151},[49,163609,163610],{"class":51,"line":1409},[49,163611,163612],{"class":55},"numbers.reverse()\n",[49,163614,163615,163617],{"class":51,"line":1421},[49,163616,30504],{"class":66},[49,163618,163579],{"class":55},[14,163620,163621,163624,163625,163628],{},[46,163622,163623],{},"sort()"," 会修改原列表，",[46,163626,163627],{},"sorted()"," 返回新列表。",[39,163630,163632],{"className":41,"code":163631,"language":43,"meta":44,"style":44},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[46,163633,163634,163658,163670,163674,163680],{"__ignoreMap":44},[49,163635,163636,163638,163640,163642,163644,163646,163648,163650,163652,163654,163656],{"class":51,"line":52},[49,163637,163146],{"class":55},[49,163639,60],{"class":59},[49,163641,52315],{"class":55},[49,163643,73],{"class":66},[49,163645,12525],{"class":55},[49,163647,441],{"class":66},[49,163649,12525],{"class":55},[49,163651,541],{"class":66},[49,163653,12525],{"class":55},[49,163655,301],{"class":66},[49,163657,33335],{"class":55},[49,163659,163660,163663,163665,163668],{"class":51,"line":84},[49,163661,163662],{"class":55},"new_numbers ",[49,163664,60],{"class":59},[49,163666,163667],{"class":66}," sorted",[49,163669,163579],{"class":55},[49,163671,163672],{"class":51,"line":109},[49,163673,2492],{"emptyLinePlaceholder":151},[49,163675,163676,163678],{"class":51,"line":120},[49,163677,30504],{"class":66},[49,163679,163579],{"class":55},[49,163681,163682,163684],{"class":51,"line":135},[49,163683,30504],{"class":66},[49,163685,163686],{"class":55},"(new_numbers)\n",[166,163688,163690],{"id":163689},"_65-列表遍历","6.5 列表遍历",[39,163692,163694],{"className":41,"code":163693,"language":43,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[46,163695,163696,163716,163720,163730],{"__ignoreMap":44},[49,163697,163698,163700,163702,163704,163706,163708,163710,163712,163714],{"class":51,"line":52},[49,163699,160443],{"class":55},[49,163701,60],{"class":59},[49,163703,52315],{"class":55},[49,163705,149951],{"class":328},[49,163707,12525],{"class":55},[49,163709,150999],{"class":328},[49,163711,12525],{"class":55},[49,163713,159794],{"class":328},[49,163715,33335],{"class":55},[49,163717,163718],{"class":51,"line":84},[49,163719,2492],{"emptyLinePlaceholder":151},[49,163721,163722,163724,163726,163728],{"class":51,"line":109},[49,163723,3117],{"class":59},[49,163725,160479],{"class":55},[49,163727,26134],{"class":59},[49,163729,160484],{"class":55},[49,163731,163732,163734],{"class":51,"line":120},[49,163733,31388],{"class":66},[49,163735,150723],{"class":55},[14,163737,163738],{},"需要索引时：",[39,163740,163742],{"className":41,"code":163741,"language":43,"meta":44,"style":44},"for index, name in enumerate(names):\n    print(index, name)\n",[46,163743,163744,163758],{"__ignoreMap":44},[49,163745,163746,163748,163751,163753,163755],{"class":51,"line":52},[49,163747,3117],{"class":59},[49,163749,163750],{"class":55}," index, name ",[49,163752,26134],{"class":59},[49,163754,31695],{"class":66},[49,163756,163757],{"class":55},"(names):\n",[49,163759,163760,163762],{"class":51,"line":84},[49,163761,31388],{"class":66},[49,163763,163764],{"class":55},"(index, name)\n",[14,163766,163767],{},"统计总分：",[39,163769,163771],{"className":41,"code":163770,"language":43,"meta":44,"style":44},"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",[46,163772,163773,163798,163806,163810,163821,163829,163833,163850],{"__ignoreMap":44},[49,163774,163775,163778,163780,163782,163784,163786,163788,163790,163792,163794,163796],{"class":51,"line":52},[49,163776,163777],{"class":55},"scores ",[49,163779,60],{"class":59},[49,163781,52315],{"class":55},[49,163783,1081],{"class":66},[49,163785,12525],{"class":55},[49,163787,955],{"class":66},[49,163789,12525],{"class":55},[49,163791,477],{"class":66},[49,163793,12525],{"class":55},[49,163795,780],{"class":66},[49,163797,33335],{"class":55},[49,163799,163800,163802,163804],{"class":51,"line":84},[49,163801,157323],{"class":55},[49,163803,60],{"class":59},[49,163805,47422],{"class":66},[49,163807,163808],{"class":51,"line":109},[49,163809,2492],{"emptyLinePlaceholder":151},[49,163811,163812,163814,163816,163818],{"class":51,"line":120},[49,163813,3117],{"class":59},[49,163815,157846],{"class":55},[49,163817,26134],{"class":59},[49,163819,163820],{"class":55}," scores:\n",[49,163822,163823,163825,163827],{"class":51,"line":135},[49,163824,159370],{"class":55},[49,163826,9567],{"class":59},[49,163828,1671],{"class":55},[49,163830,163831],{"class":51,"line":1306},[49,163832,2492],{"emptyLinePlaceholder":151},[49,163834,163835,163838,163840,163843,163845,163847],{"class":51,"line":1312},[49,163836,163837],{"class":55},"avg ",[49,163839,60],{"class":59},[49,163841,163842],{"class":55}," total ",[49,163844,803],{"class":59},[49,163846,7421],{"class":66},[49,163848,163849],{"class":55},"(scores)\n",[49,163851,163852,163854,163856,163858,163861,163863,163866,163868,163870,163872],{"class":51,"line":1403},[49,163853,30504],{"class":66},[49,163855,228],{"class":55},[49,163857,277],{"class":59},[49,163859,163860],{"class":328},"\"平均分:",[49,163862,1115],{"class":66},[49,163864,163865],{"class":55},"avg",[49,163867,157222],{"class":59},[49,163869,1165],{"class":66},[49,163871,474],{"class":328},[49,163873,81],{"class":55},[166,163875,163877],{"id":163876},"_66-元组tuple","6.6 元组tuple",[14,163879,163880],{},"元组和列表类似，但不可修改。",[39,163882,163884],{"className":41,"code":163883,"language":43,"meta":44,"style":44},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[46,163885,163886,163903],{"__ignoreMap":44},[49,163887,163888,163891,163893,163895,163897,163899,163901],{"class":51,"line":52},[49,163889,163890],{"class":55},"point ",[49,163892,60],{"class":59},[49,163894,1750],{"class":55},[49,163896,95],{"class":66},[49,163898,12525],{"class":55},[49,163900,919],{"class":66},[49,163902,81],{"class":55},[49,163904,163905,163907,163909,163911,163913,163915,163917,163919,163921],{"class":51,"line":84},[49,163906,116377],{"class":55},[49,163908,60],{"class":59},[49,163910,1750],{"class":55},[49,163912,149951],{"class":328},[49,163914,12525],{"class":55},[49,163916,869],{"class":66},[49,163918,12525],{"class":55},[49,163920,69358],{"class":328},[49,163922,81],{"class":55},[14,163924,163925],{},"单元素元组必须加逗号：",[39,163927,163929],{"className":41,"code":163928,"language":43,"meta":44,"style":44},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[46,163930,163931,163945,163958,163962,163976],{"__ignoreMap":44},[49,163932,163933,163936,163938,163940,163942],{"class":51,"line":52},[49,163934,163935],{"class":55},"t1 ",[49,163937,60],{"class":59},[49,163939,1750],{"class":55},[49,163941,95],{"class":66},[49,163943,163944],{"class":55},",)\n",[49,163946,163947,163950,163952,163954,163956],{"class":51,"line":84},[49,163948,163949],{"class":55},"t2 ",[49,163951,60],{"class":59},[49,163953,1750],{"class":55},[49,163955,95],{"class":66},[49,163957,81],{"class":55},[49,163959,163960],{"class":51,"line":109},[49,163961,2492],{"emptyLinePlaceholder":151},[49,163963,163964,163966,163968,163970,163973],{"class":51,"line":120},[49,163965,30504],{"class":66},[49,163967,228],{"class":55},[49,163969,103170],{"class":66},[49,163971,163972],{"class":55},"(t1))  ",[49,163974,163975],{"class":283},"# tuple\n",[49,163977,163978,163980,163982,163984,163987],{"class":51,"line":135},[49,163979,30504],{"class":66},[49,163981,228],{"class":55},[49,163983,103170],{"class":66},[49,163985,163986],{"class":55},"(t2))  ",[49,163988,163989],{"class":283},"# int\n",[14,163991,163992],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[166,163994,163996],{"id":163995},"_67-字符串str","6.7 字符串str",[14,163998,163999],{},"字符串也是序列，可以索引、切片和遍历。",[39,164001,164003],{"className":41,"code":164002,"language":43,"meta":44,"style":44},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[46,164004,164005,164013,164017,164028,164040,164044,164055],{"__ignoreMap":44},[49,164006,164007,164009,164011],{"class":51,"line":52},[49,164008,156507],{"class":55},[49,164010,60],{"class":59},[49,164012,159744],{"class":328},[49,164014,164015],{"class":51,"line":84},[49,164016,2492],{"emptyLinePlaceholder":151},[49,164018,164019,164021,164024,164026],{"class":51,"line":109},[49,164020,30504],{"class":66},[49,164022,164023],{"class":55},"(text[",[49,164025,415],{"class":66},[49,164027,106],{"class":55},[49,164029,164030,164032,164034,164036,164038],{"class":51,"line":120},[49,164031,30504],{"class":66},[49,164033,164023],{"class":55},[49,164035,751],{"class":59},[49,164037,441],{"class":66},[49,164039,106],{"class":55},[49,164041,164042],{"class":51,"line":135},[49,164043,2492],{"emptyLinePlaceholder":151},[49,164045,164046,164048,164050,164052],{"class":51,"line":1306},[49,164047,3117],{"class":59},[49,164049,159755],{"class":55},[49,164051,26134],{"class":59},[49,164053,164054],{"class":55}," text:\n",[49,164056,164057,164059],{"class":51,"line":1312},[49,164058,31388],{"class":66},[49,164060,159766],{"class":55},[14,164062,164063],{},"字符串不可变：",[39,164065,164067],{"className":41,"code":164066,"language":43,"meta":44,"style":44},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[46,164068,164069,164077],{"__ignoreMap":44},[49,164070,164071,164073,164075],{"class":51,"line":52},[49,164072,156507],{"class":55},[49,164074,60],{"class":59},[49,164076,159744],{"class":328},[49,164078,164079,164082,164084,164086,164088,164091],{"class":51,"line":84},[49,164080,164081],{"class":55},"text[",[49,164083,415],{"class":66},[49,164085,4535],{"class":55},[49,164087,60],{"class":59},[49,164089,164090],{"class":328}," \"P\"",[49,164092,164093],{"class":283},"  # 报错\n",[14,164095,164096],{},"如果要得到新字符串：",[39,164098,164100],{"className":41,"code":164099,"language":43,"meta":44,"style":44},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[46,164101,164102,164110,164128],{"__ignoreMap":44},[49,164103,164104,164106,164108],{"class":51,"line":52},[49,164105,156507],{"class":55},[49,164107,60],{"class":59},[49,164109,159744],{"class":328},[49,164111,164112,164114,164116,164118,164120,164123,164125],{"class":51,"line":84},[49,164113,156507],{"class":55},[49,164115,60],{"class":59},[49,164117,164090],{"class":328},[49,164119,45655],{"class":59},[49,164121,164122],{"class":55}," text[",[49,164124,441],{"class":66},[49,164126,164127],{"class":55},":]\n",[49,164129,164130,164132],{"class":51,"line":109},[49,164131,30504],{"class":66},[49,164133,164134],{"class":55},"(text)\n",[166,164136,164138],{"id":164137},"_68-切片","6.8 切片",[14,164140,164141],{},"切片用于从序列中取一部分。",[39,164143,164145],{"className":41,"code":164144,"language":43,"meta":44,"style":44},"序列[开始:结束:步长]\n",[46,164146,164147],{"__ignoreMap":44},[49,164148,164149],{"class":51,"line":52},[49,164150,164144],{"class":55},[14,164152,164153],{},"结束位置不包含。",[39,164155,164157],{"className":41,"code":164156,"language":43,"meta":44,"style":44},"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",[46,164158,164159,164196,164200,164219,164234,164248,164262],{"__ignoreMap":44},[49,164160,164161,164164,164166,164168,164170,164172,164174,164176,164178,164180,164182,164184,164186,164188,164190,164192,164194],{"class":51,"line":52},[49,164162,164163],{"class":55},"nums ",[49,164165,60],{"class":59},[49,164167,52315],{"class":55},[49,164169,415],{"class":66},[49,164171,12525],{"class":55},[49,164173,441],{"class":66},[49,164175,12525],{"class":55},[49,164177,301],{"class":66},[49,164179,12525],{"class":55},[49,164181,73],{"class":66},[49,164183,12525],{"class":55},[49,164185,515],{"class":66},[49,164187,12525],{"class":55},[49,164189,541],{"class":66},[49,164191,12525],{"class":55},[49,164193,566],{"class":66},[49,164195,33335],{"class":55},[49,164197,164198],{"class":51,"line":84},[49,164199,2492],{"emptyLinePlaceholder":151},[49,164201,164202,164204,164207,164209,164211,164213,164216],{"class":51,"line":109},[49,164203,30504],{"class":66},[49,164205,164206],{"class":55},"(nums[",[49,164208,441],{"class":66},[49,164210,1078],{"class":55},[49,164212,515],{"class":66},[49,164214,164215],{"class":55},"])    ",[49,164217,164218],{"class":283},"# [1, 2, 3]\n",[49,164220,164221,164223,164226,164228,164231],{"class":51,"line":120},[49,164222,30504],{"class":66},[49,164224,164225],{"class":55},"(nums[:",[49,164227,73],{"class":66},[49,164229,164230],{"class":55},"])     ",[49,164232,164233],{"class":283},"# [0, 1, 2]\n",[49,164235,164236,164238,164240,164242,164245],{"class":51,"line":135},[49,164237,30504],{"class":66},[49,164239,164206],{"class":55},[49,164241,73],{"class":66},[49,164243,164244],{"class":55},":])     ",[49,164246,164247],{"class":283},"# [3, 4, 5, 6]\n",[49,164249,164250,164252,164255,164257,164259],{"class":51,"line":1306},[49,164251,30504],{"class":66},[49,164253,164254],{"class":55},"(nums[::",[49,164256,301],{"class":66},[49,164258,164215],{"class":55},[49,164260,164261],{"class":283},"# [0, 2, 4, 6]\n",[49,164263,164264,164266,164268,164270,164272,164275],{"class":51,"line":1312},[49,164265,30504],{"class":66},[49,164267,164254],{"class":55},[49,164269,751],{"class":59},[49,164271,441],{"class":66},[49,164273,164274],{"class":55},"])   ",[49,164276,164277],{"class":283},"# 反转\n",[14,164279,164280],{},"字符串切片：",[39,164282,164284],{"className":41,"code":164283,"language":43,"meta":44,"style":44},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[46,164285,164286,164295,164309],{"__ignoreMap":44},[49,164287,164288,164290,164292],{"class":51,"line":52},[49,164289,156507],{"class":55},[49,164291,60],{"class":59},[49,164293,164294],{"class":328}," \"abcdef\"\n",[49,164296,164297,164299,164301,164303,164305,164307],{"class":51,"line":84},[49,164298,30504],{"class":66},[49,164300,164023],{"class":55},[49,164302,441],{"class":66},[49,164304,1078],{"class":55},[49,164306,515],{"class":66},[49,164308,106],{"class":55},[49,164310,164311,164313,164316,164318,164320],{"class":51,"line":109},[49,164312,30504],{"class":66},[49,164314,164315],{"class":55},"(text[::",[49,164317,751],{"class":59},[49,164319,441],{"class":66},[49,164321,106],{"class":55},[166,164323,164325],{"id":164324},"_69-集合set","6.9 集合set",[14,164327,164328],{},"集合特点：",[178,164330,164331,164334,164337],{},[181,164332,164333],{},"无序。",[181,164335,164336],{},"元素不重复。",[181,164338,164339],{},"可以做交集、并集、差集。",[39,164341,164343],{"className":41,"code":164342,"language":43,"meta":44,"style":44},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[46,164344,164345,164373],{"__ignoreMap":44},[49,164346,164347,164349,164351,164353,164355,164357,164359,164361,164363,164365,164367,164369,164371],{"class":51,"line":52},[49,164348,164163],{"class":55},[49,164350,60],{"class":59},[49,164352,4540],{"class":55},[49,164354,441],{"class":66},[49,164356,12525],{"class":55},[49,164358,301],{"class":66},[49,164360,12525],{"class":55},[49,164362,73],{"class":66},[49,164364,12525],{"class":55},[49,164366,73],{"class":66},[49,164368,12525],{"class":55},[49,164370,515],{"class":66},[49,164372,1657],{"class":55},[49,164374,164375,164377],{"class":51,"line":84},[49,164376,30504],{"class":66},[49,164378,164379],{"class":55},"(nums)\n",[14,164381,164382],{},"创建空集合：",[39,164384,164386],{"className":41,"code":164385,"language":43,"meta":44,"style":44},"s = set()\n",[46,164387,164388],{"__ignoreMap":44},[49,164389,164390,164392,164394,164396],{"class":51,"line":52},[49,164391,10669],{"class":55},[49,164393,60],{"class":59},[49,164395,119785],{"class":66},[49,164397,2068],{"class":55},[14,164399,9115,164400,164402],{},[46,164401,32548],{}," 是空字典，不是空集合。",[14,164404,164405],{},"集合常用操作：",[39,164407,164409],{"className":41,"code":164408,"language":43,"meta":44,"style":44},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[46,164410,164411,164431,164435,164444,164453,164462],{"__ignoreMap":44},[49,164412,164413,164415,164417,164419,164421,164423,164425,164427,164429],{"class":51,"line":52},[49,164414,10669],{"class":55},[49,164416,60],{"class":59},[49,164418,4540],{"class":55},[49,164420,441],{"class":66},[49,164422,12525],{"class":55},[49,164424,301],{"class":66},[49,164426,12525],{"class":55},[49,164428,73],{"class":66},[49,164430,1657],{"class":55},[49,164432,164433],{"class":51,"line":84},[49,164434,2492],{"emptyLinePlaceholder":151},[49,164436,164437,164440,164442],{"class":51,"line":109},[49,164438,164439],{"class":55},"s.add(",[49,164441,515],{"class":66},[49,164443,81],{"class":55},[49,164445,164446,164449,164451],{"class":51,"line":120},[49,164447,164448],{"class":55},"s.remove(",[49,164450,301],{"class":66},[49,164452,81],{"class":55},[49,164454,164455,164458,164460],{"class":51,"line":135},[49,164456,164457],{"class":55},"s.discard(",[49,164459,95],{"class":66},[49,164461,81],{"class":55},[49,164463,164464,164466,164468,164470],{"class":51,"line":1306},[49,164465,30504],{"class":66},[49,164467,228],{"class":55},[49,164469,7448],{"class":66},[49,164471,164472],{"class":55},"(s))\n",[14,164474,164475],{},"交并差：",[39,164477,164479],{"className":41,"code":164478,"language":43,"meta":44,"style":44},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[46,164480,164481,164501,164521,164525,164540,164553],{"__ignoreMap":44},[49,164482,164483,164485,164487,164489,164491,164493,164495,164497,164499],{"class":51,"line":52},[49,164484,11009],{"class":55},[49,164486,60],{"class":59},[49,164488,4540],{"class":55},[49,164490,441],{"class":66},[49,164492,12525],{"class":55},[49,164494,301],{"class":66},[49,164496,12525],{"class":55},[49,164498,73],{"class":66},[49,164500,1657],{"class":55},[49,164502,164503,164505,164507,164509,164511,164513,164515,164517,164519],{"class":51,"line":84},[49,164504,11035],{"class":55},[49,164506,60],{"class":59},[49,164508,4540],{"class":55},[49,164510,73],{"class":66},[49,164512,12525],{"class":55},[49,164514,515],{"class":66},[49,164516,12525],{"class":55},[49,164518,541],{"class":66},[49,164520,1657],{"class":55},[49,164522,164523],{"class":51,"line":109},[49,164524,2492],{"emptyLinePlaceholder":151},[49,164526,164527,164529,164532,164534,164537],{"class":51,"line":120},[49,164528,30504],{"class":66},[49,164530,164531],{"class":55},"(a ",[49,164533,575],{"class":59},[49,164535,164536],{"class":55}," b)  ",[49,164538,164539],{"class":283},"# 交集\n",[49,164541,164542,164544,164546,164548,164550],{"class":51,"line":135},[49,164543,30504],{"class":66},[49,164545,164531],{"class":55},[49,164547,1140],{"class":59},[49,164549,164536],{"class":55},[49,164551,164552],{"class":283},"# 并集\n",[49,164554,164555,164557,164559,164561,164563],{"class":51,"line":1306},[49,164556,30504],{"class":66},[49,164558,164531],{"class":55},[49,164560,751],{"class":59},[49,164562,164536],{"class":55},[49,164564,164565],{"class":283},"# 差集\n",[166,164567,164569],{"id":164568},"_610-字典dict","6.10 字典dict",[14,164571,164572],{},"字典通过 key-value 保存数据。",[39,164574,164576],{"className":41,"code":164575,"language":43,"meta":44,"style":44},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[46,164577,164578,164586,164596,164607,164617],{"__ignoreMap":44},[49,164579,164580,164582,164584],{"class":51,"line":52},[49,164581,149544],{"class":55},[49,164583,60],{"class":59},[49,164585,15662],{"class":55},[49,164587,164588,164590,164592,164594],{"class":51,"line":84},[49,164589,147083],{"class":328},[49,164591,51526],{"class":55},[49,164593,149951],{"class":328},[49,164595,31555],{"class":55},[49,164597,164598,164601,164603,164605],{"class":51,"line":109},[49,164599,164600],{"class":328},"    \"age\"",[49,164602,51526],{"class":55},[49,164604,869],{"class":66},[49,164606,31555],{"class":55},[49,164608,164609,164612,164614],{"class":51,"line":120},[49,164610,164611],{"class":328},"    \"score\"",[49,164613,51526],{"class":55},[49,164615,164616],{"class":66},"95\n",[49,164618,164619],{"class":51,"line":135},[49,164620,1657],{"class":55},[14,164622,164623],{},"获取值：",[39,164625,164627],{"className":41,"code":164626,"language":43,"meta":44,"style":44},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[46,164628,164629,164640],{"__ignoreMap":44},[49,164630,164631,164633,164636,164638],{"class":51,"line":52},[49,164632,30504],{"class":66},[49,164634,164635],{"class":55},"(student[",[49,164637,62768],{"class":328},[49,164639,106],{"class":55},[49,164641,164642,164644,164647,164649],{"class":51,"line":84},[49,164643,30504],{"class":66},[49,164645,164646],{"class":55},"(student.get(",[49,164648,62768],{"class":328},[49,164650,30586],{"class":55},[14,164652,15478],{},[39,164654,164656],{"className":41,"code":164655,"language":43,"meta":44,"style":44},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[46,164657,164658,164671],{"__ignoreMap":44},[49,164659,164660,164662,164665,164668],{"class":51,"line":52},[49,164661,152922],{"class":55},[49,164663,164664],{"class":328},"\"address\"",[49,164666,164667],{"class":55},"]     ",[49,164669,164670],{"class":283},"# key不存在会报错\n",[49,164672,164673,164676,164678,164680],{"class":51,"line":84},[49,164674,164675],{"class":55},"student.get(",[49,164677,164664],{"class":328},[49,164679,13804],{"class":55},[49,164681,164682],{"class":283},"# key不存在返回None\n",[14,164684,164685],{},"设置默认值：",[39,164687,164689],{"className":41,"code":164688,"language":43,"meta":44,"style":44},"print(student.get(\"address\", \"未知\"))\n",[46,164690,164691],{"__ignoreMap":44},[49,164692,164693,164695,164697,164699,164701,164704],{"class":51,"line":52},[49,164694,30504],{"class":66},[49,164696,164646],{"class":55},[49,164698,164664],{"class":328},[49,164700,12525],{"class":55},[49,164702,164703],{"class":328},"\"未知\"",[49,164705,30586],{"class":55},[14,164707,164708],{},"新增和修改：",[39,164710,164712],{"className":41,"code":164711,"language":43,"meta":44,"style":44},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[46,164713,164714,164727],{"__ignoreMap":44},[49,164715,164716,164718,164720,164722,164724],{"class":51,"line":52},[49,164717,152922],{"class":55},[49,164719,69213],{"class":328},[49,164721,4535],{"class":55},[49,164723,60],{"class":59},[49,164725,164726],{"class":66}," 19\n",[49,164728,164729,164731,164733,164735,164737],{"class":51,"line":84},[49,164730,152922],{"class":55},[49,164732,164664],{"class":328},[49,164734,4535],{"class":55},[49,164736,60],{"class":59},[49,164738,164739],{"class":328}," \"北京\"\n",[14,164741,164742],{},"删除：",[39,164744,164746],{"className":41,"code":164745,"language":43,"meta":44,"style":44},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[46,164747,164748,164761,164771],{"__ignoreMap":44},[49,164749,164750,164752,164754,164757,164759],{"class":51,"line":52},[49,164751,155421],{"class":55},[49,164753,60],{"class":59},[49,164755,164756],{"class":55}," student.pop(",[49,164758,151535],{"class":328},[49,164760,81],{"class":55},[49,164762,164763,164765,164767,164769],{"class":51,"line":84},[49,164764,163446],{"class":59},[49,164766,152212],{"class":55},[49,164768,69213],{"class":328},[49,164770,33335],{"class":55},[49,164772,164773],{"class":51,"line":109},[49,164774,164775],{"class":55},"student.clear()\n",[166,164777,164779],{"id":164778},"_611-字典遍历","6.11 字典遍历",[14,164781,164782],{},"遍历 key：",[39,164784,164786],{"className":41,"code":164785,"language":43,"meta":44,"style":44},"for key in student:\n    print(key, student[key])\n",[46,164787,164788,164800],{"__ignoreMap":44},[49,164789,164790,164792,164795,164797],{"class":51,"line":52},[49,164791,3117],{"class":59},[49,164793,164794],{"class":55}," key ",[49,164796,26134],{"class":59},[49,164798,164799],{"class":55}," student:\n",[49,164801,164802,164804],{"class":51,"line":84},[49,164803,31388],{"class":66},[49,164805,164806],{"class":55},"(key, student[key])\n",[14,164808,164809],{},"遍历 value：",[39,164811,164813],{"className":41,"code":164812,"language":43,"meta":44,"style":44},"for value in student.values():\n    print(value)\n",[46,164814,164815,164827],{"__ignoreMap":44},[49,164816,164817,164819,164822,164824],{"class":51,"line":52},[49,164818,3117],{"class":59},[49,164820,164821],{"class":55}," value ",[49,164823,26134],{"class":59},[49,164825,164826],{"class":55}," student.values():\n",[49,164828,164829,164831],{"class":51,"line":84},[49,164830,31388],{"class":66},[49,164832,164833],{"class":55},"(value)\n",[14,164835,164836],{},"遍历 key 和 value：",[39,164838,164840],{"className":41,"code":164839,"language":43,"meta":44,"style":44},"for key, value in student.items():\n    print(key, value)\n",[46,164841,164842,164854],{"__ignoreMap":44},[49,164843,164844,164846,164849,164851],{"class":51,"line":52},[49,164845,3117],{"class":59},[49,164847,164848],{"class":55}," key, value ",[49,164850,26134],{"class":59},[49,164852,164853],{"class":55}," student.items():\n",[49,164855,164856,164858],{"class":51,"line":84},[49,164857,31388],{"class":66},[49,164859,164860],{"class":55},"(key, value)\n",[166,164862,164864],{"id":164863},"_612-嵌套容器","6.12 嵌套容器",[14,164866,164867],{},"列表中保存字典，是项目中最常见的结构之一。",[39,164869,164871],{"className":41,"code":164870,"language":43,"meta":44,"style":44},"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",[46,164872,164873,164881,164909,164937,164965,164969,164973,164983],{"__ignoreMap":44},[49,164874,164875,164877,164879],{"class":51,"line":52},[49,164876,159779],{"class":55},[49,164878,60],{"class":59},[49,164880,55536],{"class":55},[49,164882,164883,164885,164887,164889,164891,164893,164895,164897,164899,164901,164903,164905,164907],{"class":51,"line":84},[49,164884,148448],{"class":55},[49,164886,62768],{"class":328},[49,164888,51526],{"class":55},[49,164890,149951],{"class":328},[49,164892,12525],{"class":55},[49,164894,69213],{"class":328},[49,164896,51526],{"class":55},[49,164898,869],{"class":66},[49,164900,12525],{"class":55},[49,164902,151535],{"class":328},[49,164904,51526],{"class":55},[49,164906,1208],{"class":66},[49,164908,5021],{"class":55},[49,164910,164911,164913,164915,164917,164919,164921,164923,164925,164927,164929,164931,164933,164935],{"class":51,"line":109},[49,164912,148448],{"class":55},[49,164914,62768],{"class":328},[49,164916,51526],{"class":55},[49,164918,150999],{"class":328},[49,164920,12525],{"class":55},[49,164922,69213],{"class":328},[49,164924,51526],{"class":55},[49,164926,844],{"class":66},[49,164928,12525],{"class":55},[49,164930,151535],{"class":328},[49,164932,51526],{"class":55},[49,164934,1030],{"class":66},[49,164936,5021],{"class":55},[49,164938,164939,164941,164943,164945,164947,164949,164951,164953,164955,164957,164959,164961,164963],{"class":51,"line":120},[49,164940,148448],{"class":55},[49,164942,62768],{"class":328},[49,164944,51526],{"class":55},[49,164946,159794],{"class":328},[49,164948,12525],{"class":55},[49,164950,69213],{"class":328},[49,164952,51526],{"class":55},[49,164954,894],{"class":66},[49,164956,12525],{"class":55},[49,164958,151535],{"class":328},[49,164960,51526],{"class":55},[49,164962,627],{"class":66},[49,164964,5021],{"class":55},[49,164966,164967],{"class":51,"line":135},[49,164968,33335],{"class":55},[49,164970,164971],{"class":51,"line":1306},[49,164972,2492],{"emptyLinePlaceholder":151},[49,164974,164975,164977,164979,164981],{"class":51,"line":1312},[49,164976,3117],{"class":59},[49,164978,152200],{"class":55},[49,164980,26134],{"class":59},[49,164982,152205],{"class":55},[49,164984,164985,164987,164989,164991,164994,164996],{"class":51,"line":1403},[49,164986,31388],{"class":66},[49,164988,164635],{"class":55},[49,164990,62768],{"class":328},[49,164992,164993],{"class":55},"], student[",[49,164995,151535],{"class":328},[49,164997,106],{"class":55},[14,164999,165000],{},"统计平均分：",[39,165002,165004],{"className":41,"code":165003,"language":43,"meta":44,"style":44},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[46,165005,165006,165014,165018,165028,165040,165044,165059],{"__ignoreMap":44},[49,165007,165008,165010,165012],{"class":51,"line":52},[49,165009,157323],{"class":55},[49,165011,60],{"class":59},[49,165013,47422],{"class":66},[49,165015,165016],{"class":51,"line":84},[49,165017,2492],{"emptyLinePlaceholder":151},[49,165019,165020,165022,165024,165026],{"class":51,"line":109},[49,165021,3117],{"class":59},[49,165023,152200],{"class":55},[49,165025,26134],{"class":59},[49,165027,152205],{"class":55},[49,165029,165030,165032,165034,165036,165038],{"class":51,"line":120},[49,165031,159370],{"class":55},[49,165033,9567],{"class":59},[49,165035,152212],{"class":55},[49,165037,151535],{"class":328},[49,165039,33335],{"class":55},[49,165041,165042],{"class":51,"line":135},[49,165043,2492],{"emptyLinePlaceholder":151},[49,165045,165046,165048,165050,165052,165054,165056],{"class":51,"line":1306},[49,165047,163837],{"class":55},[49,165049,60],{"class":59},[49,165051,163842],{"class":55},[49,165053,803],{"class":59},[49,165055,7421],{"class":66},[49,165057,165058],{"class":55},"(students)\n",[49,165060,165061,165063,165065,165067,165069,165071,165073,165075,165077,165079],{"class":51,"line":1312},[49,165062,30504],{"class":66},[49,165064,228],{"class":55},[49,165066,277],{"class":59},[49,165068,163860],{"class":328},[49,165070,1115],{"class":66},[49,165072,163865],{"class":55},[49,165074,157222],{"class":59},[49,165076,1165],{"class":66},[49,165078,474],{"class":328},[49,165080,81],{"class":55},[14,165082,165083],{},"查找学生：",[39,165085,165087],{"className":41,"code":165086,"language":43,"meta":44,"style":44},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[46,165088,165089,165104,165108,165118,165132,165138,165142,165148],{"__ignoreMap":44},[49,165090,165091,165093,165095,165097,165099,165102],{"class":51,"line":52},[49,165092,111641],{"class":55},[49,165094,60],{"class":59},[49,165096,60694],{"class":66},[49,165098,228],{"class":55},[49,165100,165101],{"class":328},"\"请输入学生姓名:\"",[49,165103,81],{"class":55},[49,165105,165106],{"class":51,"line":84},[49,165107,2492],{"emptyLinePlaceholder":151},[49,165109,165110,165112,165114,165116],{"class":51,"line":109},[49,165111,3117],{"class":59},[49,165113,152200],{"class":55},[49,165115,26134],{"class":59},[49,165117,152205],{"class":55},[49,165119,165120,165122,165124,165126,165128,165130],{"class":51,"line":120},[49,165121,3193],{"class":59},[49,165123,152212],{"class":55},[49,165125,62768],{"class":328},[49,165127,4535],{"class":55},[49,165129,3041],{"class":59},[49,165131,160495],{"class":55},[49,165133,165134,165136],{"class":51,"line":135},[49,165135,32540],{"class":66},[49,165137,150105],{"class":55},[49,165139,165140],{"class":51,"line":1306},[49,165141,31716],{"class":59},[49,165143,165144,165146],{"class":51,"line":1312},[49,165145,1793],{"class":59},[49,165147,3831],{"class":55},[49,165149,165150,165152,165154,165157],{"class":51,"line":1403},[49,165151,31388],{"class":66},[49,165153,228],{"class":55},[49,165155,165156],{"class":328},"\"没有找到\"",[49,165158,81],{"class":55},[166,165160,165162],{"id":165161},"_613-容器通用操作","6.13 容器通用操作",[14,165164,165165],{},"长度：",[39,165167,165169],{"className":41,"code":165168,"language":43,"meta":44,"style":44},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[46,165170,165171,165190,165200],{"__ignoreMap":44},[49,165172,165173,165175,165178,165180,165182,165184,165186,165188],{"class":51,"line":52},[49,165174,7448],{"class":66},[49,165176,165177],{"class":55},"([",[49,165179,441],{"class":66},[49,165181,12525],{"class":55},[49,165183,301],{"class":66},[49,165185,12525],{"class":55},[49,165187,73],{"class":66},[49,165189,106],{"class":55},[49,165191,165192,165194,165196,165198],{"class":51,"line":84},[49,165193,7448],{"class":66},[49,165195,228],{"class":55},[49,165197,155943],{"class":328},[49,165199,81],{"class":55},[49,165201,165202,165204,165207,165209,165211,165213],{"class":51,"line":109},[49,165203,7448],{"class":66},[49,165205,165206],{"class":55},"({",[49,165208,62768],{"class":328},[49,165210,51526],{"class":55},[49,165212,149951],{"class":328},[49,165214,165215],{"class":55},"})\n",[14,165217,165218],{},"最大最小：",[39,165220,165222],{"className":41,"code":165221,"language":43,"meta":44,"style":44},"max([1, 2, 3])\nmin([1, 2, 3])\n",[46,165223,165224,165242],{"__ignoreMap":44},[49,165225,165226,165228,165230,165232,165234,165236,165238,165240],{"class":51,"line":52},[49,165227,6105],{"class":66},[49,165229,165177],{"class":55},[49,165231,441],{"class":66},[49,165233,12525],{"class":55},[49,165235,301],{"class":66},[49,165237,12525],{"class":55},[49,165239,73],{"class":66},[49,165241,106],{"class":55},[49,165243,165244,165247,165249,165251,165253,165255,165257,165259],{"class":51,"line":84},[49,165245,165246],{"class":66},"min",[49,165248,165177],{"class":55},[49,165250,441],{"class":66},[49,165252,12525],{"class":55},[49,165254,301],{"class":66},[49,165256,12525],{"class":55},[49,165258,73],{"class":66},[49,165260,106],{"class":55},[14,165262,165263],{},"求和：",[39,165265,165267],{"className":41,"code":165266,"language":43,"meta":44,"style":44},"sum([1, 2, 3])\n",[46,165268,165269],{"__ignoreMap":44},[49,165270,165271,165274,165276,165278,165280,165282,165284,165286],{"class":51,"line":52},[49,165272,165273],{"class":66},"sum",[49,165275,165177],{"class":55},[49,165277,441],{"class":66},[49,165279,12525],{"class":55},[49,165281,301],{"class":66},[49,165283,12525],{"class":55},[49,165285,73],{"class":66},[49,165287,106],{"class":55},[14,165289,163534],{},[39,165291,165293],{"className":41,"code":165292,"language":43,"meta":44,"style":44},"sorted([3, 1, 2])\n",[46,165294,165295],{"__ignoreMap":44},[49,165296,165297,165300,165302,165304,165306,165308,165310,165312],{"class":51,"line":52},[49,165298,165299],{"class":66},"sorted",[49,165301,165177],{"class":55},[49,165303,73],{"class":66},[49,165305,12525],{"class":55},[49,165307,441],{"class":66},[49,165309,12525],{"class":55},[49,165311,301],{"class":66},[49,165313,106],{"class":55},[14,165315,165316],{},"类型转换：",[39,165318,165320],{"className":41,"code":165319,"language":43,"meta":44,"style":44},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[46,165321,165322,165332,165350],{"__ignoreMap":44},[49,165323,165324,165326,165328,165330],{"class":51,"line":52},[49,165325,154133],{"class":66},[49,165327,228],{"class":55},[49,165329,155943],{"class":328},[49,165331,81],{"class":55},[49,165333,165334,165336,165338,165340,165342,165344,165346,165348],{"class":51,"line":84},[49,165335,155328],{"class":66},[49,165337,165177],{"class":55},[49,165339,441],{"class":66},[49,165341,12525],{"class":55},[49,165343,301],{"class":66},[49,165345,12525],{"class":55},[49,165347,73],{"class":66},[49,165349,106],{"class":55},[49,165351,165352,165354,165356,165358,165360,165362,165364,165366,165368,165370],{"class":51,"line":109},[49,165353,155353],{"class":66},[49,165355,165177],{"class":55},[49,165357,441],{"class":66},[49,165359,12525],{"class":55},[49,165361,441],{"class":66},[49,165363,12525],{"class":55},[49,165365,301],{"class":66},[49,165367,12525],{"class":55},[49,165369,73],{"class":66},[49,165371,106],{"class":55},[14,165373,165374],{},"成员判断：",[39,165376,165378],{"className":41,"code":165377,"language":43,"meta":44,"style":44},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[46,165379,165380,165397,165421],{"__ignoreMap":44},[49,165381,165382,165384,165386,165389,165392,165395],{"class":51,"line":52},[49,165383,30504],{"class":66},[49,165385,228],{"class":55},[49,165387,165388],{"class":328},"\"a\"",[49,165390,165391],{"class":59}," in",[49,165393,165394],{"class":328}," \"abc\"",[49,165396,81],{"class":55},[49,165398,165399,165401,165403,165405,165407,165409,165411,165413,165415,165417,165419],{"class":51,"line":84},[49,165400,30504],{"class":66},[49,165402,228],{"class":55},[49,165404,441],{"class":66},[49,165406,165391],{"class":59},[49,165408,52315],{"class":55},[49,165410,441],{"class":66},[49,165412,12525],{"class":55},[49,165414,301],{"class":66},[49,165416,12525],{"class":55},[49,165418,73],{"class":66},[49,165420,106],{"class":55},[49,165422,165423,165425,165427,165429,165431,165433,165435,165437,165439],{"class":51,"line":109},[49,165424,30504],{"class":66},[49,165426,228],{"class":55},[49,165428,62768],{"class":328},[49,165430,165391],{"class":59},[49,165432,4540],{"class":55},[49,165434,62768],{"class":328},[49,165436,51526],{"class":55},[49,165438,149951],{"class":328},[49,165440,165215],{"class":55},[166,165442,165444],{"id":165443},"_614-推导式","6.14 推导式",[14,165446,165447],{},"推导式用于快速生成容器。",[14,165449,165450],{},"列表推导式：",[39,165452,165454],{"className":41,"code":165453,"language":43,"meta":44,"style":44},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[46,165455,165456,165483],{"__ignoreMap":44},[49,165457,165458,165460,165462,165465,165467,165469,165471,165473,165475,165477,165479,165481],{"class":51,"line":52},[49,165459,164163],{"class":55},[49,165461,60],{"class":59},[49,165463,165464],{"class":55}," [i ",[49,165466,3117],{"class":59},[49,165468,9528],{"class":55},[49,165470,26134],{"class":59},[49,165472,32532],{"class":66},[49,165474,228],{"class":55},[49,165476,441],{"class":66},[49,165478,12525],{"class":55},[49,165480,566],{"class":66},[49,165482,97363],{"class":55},[49,165484,165485,165487],{"class":51,"line":84},[49,165486,30504],{"class":66},[49,165488,164379],{"class":55},[14,165490,165491],{},"带条件：",[39,165493,165495],{"className":41,"code":165494,"language":43,"meta":44,"style":44},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[46,165496,165497,165538],{"__ignoreMap":44},[49,165498,165499,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528,165530,165532,165534,165536],{"class":51,"line":52},[49,165500,165501],{"class":55},"even_nums ",[49,165503,60],{"class":59},[49,165505,165464],{"class":55},[49,165507,3117],{"class":59},[49,165509,9528],{"class":55},[49,165511,26134],{"class":59},[49,165513,32532],{"class":66},[49,165515,228],{"class":55},[49,165517,441],{"class":66},[49,165519,12525],{"class":55},[49,165521,559],{"class":66},[49,165523,13804],{"class":55},[49,165525,1623],{"class":59},[49,165527,9528],{"class":55},[49,165529,550],{"class":59},[49,165531,14845],{"class":66},[49,165533,101622],{"class":59},[49,165535,4185],{"class":66},[49,165537,33335],{"class":55},[49,165539,165540,165542],{"class":51,"line":84},[49,165541,30504],{"class":66},[49,165543,165544],{"class":55},"(even_nums)\n",[14,165546,165547],{},"字典推导式：",[39,165549,165551],{"className":41,"code":165550,"language":43,"meta":44,"style":44},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[46,165552,165553,165587],{"__ignoreMap":44},[49,165554,165555,165558,165560,165563,165565,165567,165570,165572,165574,165576,165578,165580,165582,165584],{"class":51,"line":52},[49,165556,165557],{"class":55},"squares ",[49,165559,60],{"class":59},[49,165561,165562],{"class":55}," {i: i ",[49,165564,10751],{"class":59},[49,165566,14845],{"class":66},[49,165568,165569],{"class":59}," for",[49,165571,9528],{"class":55},[49,165573,26134],{"class":59},[49,165575,32532],{"class":66},[49,165577,228],{"class":55},[49,165579,441],{"class":66},[49,165581,12525],{"class":55},[49,165583,566],{"class":66},[49,165585,165586],{"class":55},")}\n",[49,165588,165589,165591],{"class":51,"line":84},[49,165590,30504],{"class":66},[49,165592,165593],{"class":55},"(squares)\n",[14,165595,165596],{},"集合推导式：",[39,165598,165600],{"className":41,"code":165599,"language":43,"meta":44,"style":44},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[46,165601,165602,165623],{"__ignoreMap":44},[49,165603,165604,165607,165609,165612,165614,165616,165618,165621],{"class":51,"line":52},[49,165605,165606],{"class":55},"chars ",[49,165608,60],{"class":59},[49,165610,165611],{"class":55}," {ch ",[49,165613,3117],{"class":59},[49,165615,159755],{"class":55},[49,165617,26134],{"class":59},[49,165619,165620],{"class":328}," \"hello\"",[49,165622,1657],{"class":55},[49,165624,165625,165627],{"class":51,"line":84},[49,165626,30504],{"class":66},[49,165628,165629],{"class":55},"(chars)\n",[14,165631,165632],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[166,165634,165636],{"id":165635},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[39,165638,165640],{"className":41,"code":165639,"language":43,"meta":44,"style":44},"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",[46,165641,165642,165650,165670,165690,165710,165730,165734,165738,165746,165760,165769,165773,165783,165795,165799,165819,165828,165832,165848,165853,165857,165871,165875,165897,165933],{"__ignoreMap":44},[49,165643,165644,165646,165648],{"class":51,"line":52},[49,165645,159779],{"class":55},[49,165647,60],{"class":59},[49,165649,55536],{"class":55},[49,165651,165652,165654,165656,165658,165660,165662,165664,165666,165668],{"class":51,"line":84},[49,165653,148448],{"class":55},[49,165655,62768],{"class":328},[49,165657,51526],{"class":55},[49,165659,149951],{"class":328},[49,165661,12525],{"class":55},[49,165663,151535],{"class":328},[49,165665,51526],{"class":55},[49,165667,1208],{"class":66},[49,165669,5021],{"class":55},[49,165671,165672,165674,165676,165678,165680,165682,165684,165686,165688],{"class":51,"line":109},[49,165673,148448],{"class":55},[49,165675,62768],{"class":328},[49,165677,51526],{"class":55},[49,165679,150999],{"class":328},[49,165681,12525],{"class":55},[49,165683,151535],{"class":328},[49,165685,51526],{"class":55},[49,165687,1030],{"class":66},[49,165689,5021],{"class":55},[49,165691,165692,165694,165696,165698,165700,165702,165704,165706,165708],{"class":51,"line":120},[49,165693,148448],{"class":55},[49,165695,62768],{"class":328},[49,165697,51526],{"class":55},[49,165699,159794],{"class":328},[49,165701,12525],{"class":55},[49,165703,151535],{"class":328},[49,165705,51526],{"class":55},[49,165707,627],{"class":66},[49,165709,5021],{"class":55},[49,165711,165712,165714,165716,165718,165720,165722,165724,165726,165728],{"class":51,"line":135},[49,165713,148448],{"class":55},[49,165715,62768],{"class":328},[49,165717,51526],{"class":55},[49,165719,163373],{"class":328},[49,165721,12525],{"class":55},[49,165723,151535],{"class":328},[49,165725,51526],{"class":55},[49,165727,1101],{"class":66},[49,165729,5021],{"class":55},[49,165731,165732],{"class":51,"line":1306},[49,165733,33335],{"class":55},[49,165735,165736],{"class":51,"line":1312},[49,165737,2492],{"emptyLinePlaceholder":151},[49,165739,165740,165742,165744],{"class":51,"line":1403},[49,165741,157323],{"class":55},[49,165743,60],{"class":59},[49,165745,47422],{"class":66},[49,165747,165748,165751,165753,165756,165758],{"class":51,"line":1409},[49,165749,165750],{"class":55},"max_student ",[49,165752,60],{"class":59},[49,165754,165755],{"class":55}," students[",[49,165757,415],{"class":66},[49,165759,33335],{"class":55},[49,165761,165762,165765,165767],{"class":51,"line":1421},[49,165763,165764],{"class":55},"passed ",[49,165766,60],{"class":59},[49,165768,51927],{"class":55},[49,165770,165771],{"class":51,"line":1704},[49,165772,2492],{"emptyLinePlaceholder":151},[49,165774,165775,165777,165779,165781],{"class":51,"line":1709},[49,165776,3117],{"class":59},[49,165778,152200],{"class":55},[49,165780,26134],{"class":59},[49,165782,152205],{"class":55},[49,165784,165785,165787,165789,165791,165793],{"class":51,"line":1715},[49,165786,159370],{"class":55},[49,165788,9567],{"class":59},[49,165790,152212],{"class":55},[49,165792,151535],{"class":328},[49,165794,33335],{"class":55},[49,165796,165797],{"class":51,"line":1720},[49,165798,2492],{"emptyLinePlaceholder":151},[49,165800,165801,165803,165805,165807,165809,165811,165814,165816],{"class":51,"line":1734},[49,165802,3193],{"class":59},[49,165804,152212],{"class":55},[49,165806,151535],{"class":328},[49,165808,4535],{"class":55},[49,165810,1179],{"class":59},[49,165812,165813],{"class":55}," max_student[",[49,165815,151535],{"class":328},[49,165817,165818],{"class":55},"]:\n",[49,165820,165821,165824,165826],{"class":51,"line":1739},[49,165822,165823],{"class":55},"        max_student ",[49,165825,60],{"class":59},[49,165827,152228],{"class":55},[49,165829,165830],{"class":51,"line":1745},[49,165831,2492],{"emptyLinePlaceholder":151},[49,165833,165834,165836,165838,165840,165842,165844,165846],{"class":51,"line":1766},[49,165835,3193],{"class":59},[49,165837,152212],{"class":55},[49,165839,151535],{"class":328},[49,165841,4535],{"class":55},[49,165843,1802],{"class":59},[49,165845,157900],{"class":66},[49,165847,3831],{"class":55},[49,165849,165850],{"class":51,"line":1771},[49,165851,165852],{"class":55},"        passed.append(student)\n",[49,165854,165855],{"class":51,"line":1785},[49,165856,2492],{"emptyLinePlaceholder":151},[49,165858,165859,165861,165863,165865,165867,165869],{"class":51,"line":1790},[49,165860,163837],{"class":55},[49,165862,60],{"class":59},[49,165864,163842],{"class":55},[49,165866,803],{"class":59},[49,165868,7421],{"class":66},[49,165870,165058],{"class":55},[49,165872,165873],{"class":51,"line":1819},[49,165874,2492],{"emptyLinePlaceholder":151},[49,165876,165877,165879,165881,165883,165885,165887,165889,165891,165893,165895],{"class":51,"line":1824},[49,165878,30504],{"class":66},[49,165880,228],{"class":55},[49,165882,277],{"class":59},[49,165884,163860],{"class":328},[49,165886,1115],{"class":66},[49,165888,163865],{"class":55},[49,165890,157222],{"class":59},[49,165892,1165],{"class":66},[49,165894,474],{"class":328},[49,165896,81],{"class":55},[49,165898,165899,165901,165903,165905,165908,165910,165913,165915,165917,165919,165921,165923,165925,165927,165929,165931],{"class":51,"line":1841},[49,165900,30504],{"class":66},[49,165902,228],{"class":55},[49,165904,277],{"class":59},[49,165906,165907],{"class":328},"\"最高分学生:",[49,165909,1115],{"class":66},[49,165911,165912],{"class":55},"max_student[",[49,165914,152945],{"class":328},[49,165916,1159],{"class":55},[49,165918,1165],{"class":66},[49,165920,4540],{"class":66},[49,165922,165912],{"class":55},[49,165924,152983],{"class":328},[49,165926,1159],{"class":55},[49,165928,1165],{"class":66},[49,165930,474],{"class":328},[49,165932,81],{"class":55},[49,165934,165935,165937,165939,165941,165944,165947,165950,165952,165954],{"class":51,"line":1846},[49,165936,30504],{"class":66},[49,165938,228],{"class":55},[49,165940,277],{"class":59},[49,165942,165943],{"class":328},"\"及格人数:",[49,165945,165946],{"class":66},"{len",[49,165948,165949],{"class":55},"(passed)",[49,165951,1165],{"class":66},[49,165953,474],{"class":328},[49,165955,81],{"class":55},[166,165957,165959],{"id":165958},"_616-易错点","6.16 易错点",[178,165961,165962,165965,165968,165971,165977,165986],{},[181,165963,165964],{},"列表可变，元组和字符串不可变。",[181,165966,165967],{},"切片结束位置不包含。",[181,165969,165970],{},"字典通过 key 取值，不是通过索引。",[181,165972,165973,165974,28476],{},"空集合要用 ",[46,165975,165976],{},"set()",[181,165978,104429,165979,165982,165983,28476],{},[46,165980,165981],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[46,165984,165985],{},"get()",[181,165987,165988],{},"嵌套容器要先看清楚每一层是什么类型。",[166,165990,165992],{"id":165991},"_617-本章练习","6.17 本章练习",[178,165994,165995,165998,166001,166004,166007],{},[181,165996,165997],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[181,165999,166000],{},"输入一句话，统计每个字符出现次数。",[181,166002,166003],{},"使用集合去除列表中的重复元素。",[181,166005,166006],{},"使用字典保存一个学生的信息，并实现修改成绩。",[181,166008,166009],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[143,166011,166012],{},"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":44,"searchDepth":84,"depth":84,"links":166014},[166015,166016,166017,166018,166019,166020,166021,166022,166023,166024,166025,166026,166027,166028,166029,166030,166031],{"id":162995,"depth":84,"text":162996},{"id":163112,"depth":84,"text":163113},{"id":163202,"depth":84,"text":163203},{"id":163326,"depth":84,"text":163327},{"id":163689,"depth":84,"text":163690},{"id":163876,"depth":84,"text":163877},{"id":163995,"depth":84,"text":163996},{"id":164137,"depth":84,"text":164138},{"id":164324,"depth":84,"text":164325},{"id":164568,"depth":84,"text":164569},{"id":164778,"depth":84,"text":164779},{"id":164863,"depth":84,"text":164864},{"id":165161,"depth":84,"text":165162},{"id":165443,"depth":84,"text":165444},{"id":165635,"depth":84,"text":165636},{"id":165958,"depth":84,"text":165959},{"id":165991,"depth":84,"text":165992},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162987,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166038,"title":166039,"body":166040,"description":148,"extension":149,"meta":168212,"navigation":151,"path":168213,"seo":168214,"stem":168215,"__hash__":168216},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166041,"toc":168187},[166042,166045,166049,166052,166132,166135,166156,166159,166163,166166,166228,166231,166248,166252,166255,166300,166302,166310,166314,166317,166399,166402,166405,166430,166433,166456,166460,166463,166465,166527,166530,166532,166583,166587,166591,166597,166702,166706,166712,166783,166787,166790,166858,166861,166941,166945,166951,166987,166990,166993,167103,167109,167113,167116,167188,167191,167195,167199,167204,167266,167270,167275,167343,167347,167352,167468,167472,167475,167555,167558,167562,167565,167669,167671,167686,167689,167693,167831,167839,167843,167845,167856,167858,168116,168120,168152,168156,168184],[10,166043,166039],{"id":166044},"_7-函数进阶",[166,166046,166048],{"id":166047},"_71-多返回值","7.1 多返回值",[14,166050,166051],{},"Python 函数可以返回多个值，本质上返回的是元组。",[39,166053,166055],{"className":41,"code":166054,"language":43,"meta":44,"style":44},"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",[46,166056,166057,166066,166074,166082,166091,166098,166102,166106,166115,166121],{"__ignoreMap":44},[49,166058,166059,166061,166064],{"class":51,"line":52},[49,166060,32036],{"class":59},[49,166062,166063],{"class":2055}," get_info",[49,166065,32042],{"class":55},[49,166067,166068,166070,166072],{"class":51,"line":84},[49,166069,152433],{"class":55},[49,166071,60],{"class":59},[49,166073,149416],{"class":328},[49,166075,166076,166078,166080],{"class":51,"line":109},[49,166077,152449],{"class":55},[49,166079,60],{"class":59},[49,166081,146614],{"class":66},[49,166083,166084,166086,166088],{"class":51,"line":120},[49,166085,152464],{"class":55},[49,166087,60],{"class":59},[49,166089,166090],{"class":66}," 95\n",[49,166092,166093,166095],{"class":51,"line":135},[49,166094,4182],{"class":59},[49,166096,166097],{"class":55}," name, age, score\n",[49,166099,166100],{"class":51,"line":1306},[49,166101,2492],{"emptyLinePlaceholder":151},[49,166103,166104],{"class":51,"line":1312},[49,166105,2492],{"emptyLinePlaceholder":151},[49,166107,166108,166110,166112],{"class":51,"line":1403},[49,166109,161369],{"class":55},[49,166111,60],{"class":59},[49,166113,166114],{"class":55}," get_info()\n",[49,166116,166117,166119],{"class":51,"line":1409},[49,166118,30504],{"class":66},[49,166120,76674],{"class":55},[49,166122,166123,166125,166127,166129],{"class":51,"line":1421},[49,166124,30504],{"class":66},[49,166126,228],{"class":55},[49,166128,103170],{"class":66},[49,166130,166131],{"class":55},"(result))\n",[14,166133,166134],{},"可以直接解包：",[39,166136,166138],{"className":41,"code":166137,"language":43,"meta":44,"style":44},"name, age, score = get_info()\nprint(name, age, score)\n",[46,166139,166140,166149],{"__ignoreMap":44},[49,166141,166142,166145,166147],{"class":51,"line":52},[49,166143,166144],{"class":55},"name, age, score ",[49,166146,60],{"class":59},[49,166148,166114],{"class":55},[49,166150,166151,166153],{"class":51,"line":84},[49,166152,30504],{"class":66},[49,166154,166155],{"class":55},"(name, age, score)\n",[14,166157,166158],{},"返回多个值适合函数需要同时给出多个结果时使用。",[166,166160,166162],{"id":166161},"_72-位置参数","7.2 位置参数",[14,166164,166165],{},"位置参数按顺序传递。",[39,166167,166169],{"className":41,"code":166168,"language":43,"meta":44,"style":44},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[46,166170,166171,166179,166207,166211,166215],{"__ignoreMap":44},[49,166172,166173,166175,166177],{"class":51,"line":52},[49,166174,32036],{"class":59},[49,166176,149435],{"class":2055},[49,166178,149438],{"class":55},[49,166180,166181,166183,166185,166187,166189,166191,166193,166195,166197,166199,166201,166203,166205],{"class":51,"line":84},[49,166182,31388],{"class":66},[49,166184,228],{"class":55},[49,166186,277],{"class":59},[49,166188,149449],{"class":328},[49,166190,1115],{"class":66},[49,166192,79899],{"class":55},[49,166194,1165],{"class":66},[49,166196,149458],{"class":328},[49,166198,1115],{"class":66},[49,166200,70310],{"class":55},[49,166202,1165],{"class":66},[49,166204,149467],{"class":328},[49,166206,81],{"class":55},[49,166208,166209],{"class":51,"line":109},[49,166210,2492],{"emptyLinePlaceholder":151},[49,166212,166213],{"class":51,"line":120},[49,166214,2492],{"emptyLinePlaceholder":151},[49,166216,166217,166220,166222,166224,166226],{"class":51,"line":135},[49,166218,166219],{"class":55},"introduce(",[49,166221,149951],{"class":328},[49,166223,12525],{"class":55},[49,166225,869],{"class":66},[49,166227,81],{"class":55},[14,166229,166230],{},"顺序错了就会得到错误含义：",[39,166232,166234],{"className":41,"code":166233,"language":43,"meta":44,"style":44},"introduce(18, \"小明\")\n",[46,166235,166236],{"__ignoreMap":44},[49,166237,166238,166240,166242,166244,166246],{"class":51,"line":52},[49,166239,166219],{"class":55},[49,166241,869],{"class":66},[49,166243,12525],{"class":55},[49,166245,149951],{"class":328},[49,166247,81],{"class":55},[166,166249,166251],{"id":166250},"_73-关键字参数","7.3 关键字参数",[14,166253,166254],{},"关键字参数按参数名传递。",[39,166256,166258],{"className":41,"code":166257,"language":43,"meta":44,"style":44},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[46,166259,166260,166280],{"__ignoreMap":44},[49,166261,166262,166264,166266,166268,166270,166272,166274,166276,166278],{"class":51,"line":52},[49,166263,166219],{"class":55},[49,166265,79899],{"class":126},[49,166267,60],{"class":59},[49,166269,149951],{"class":328},[49,166271,12525],{"class":55},[49,166273,70310],{"class":126},[49,166275,60],{"class":59},[49,166277,869],{"class":66},[49,166279,81],{"class":55},[49,166281,166282,166284,166286,166288,166290,166292,166294,166296,166298],{"class":51,"line":84},[49,166283,166219],{"class":55},[49,166285,70310],{"class":126},[49,166287,60],{"class":59},[49,166289,869],{"class":66},[49,166291,12525],{"class":55},[49,166293,79899],{"class":126},[49,166295,60],{"class":59},[49,166297,149951],{"class":328},[49,166299,81],{"class":55},[14,166301,117997],{},[178,166303,166304,166307],{},[181,166305,166306],{},"顺序不容易错。",[181,166308,166309],{},"调用时可读性更强。",[166,166311,166313],{"id":166312},"_74-默认参数","7.4 默认参数",[14,166315,166316],{},"默认参数给参数设置默认值。",[39,166318,166320],{"className":41,"code":166319,"language":43,"meta":44,"style":44},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[46,166321,166322,166338,166368,166372,166376,166386],{"__ignoreMap":44},[49,166323,166324,166326,166328,166331,166333,166336],{"class":51,"line":52},[49,166325,32036],{"class":59},[49,166327,122156],{"class":2055},[49,166329,166330],{"class":55},"(host, port",[49,166332,60],{"class":59},[49,166334,166335],{"class":66},"3306",[49,166337,30875],{"class":55},[49,166339,166340,166342,166344,166346,166349,166351,166353,166355,166357,166359,166362,166364,166366],{"class":51,"line":84},[49,166341,31388],{"class":66},[49,166343,228],{"class":55},[49,166345,277],{"class":59},[49,166347,166348],{"class":328},"\"连接",[49,166350,1115],{"class":66},[49,166352,27486],{"class":55},[49,166354,1165],{"class":66},[49,166356,1078],{"class":328},[49,166358,1115],{"class":66},[49,166360,166361],{"class":55},"port",[49,166363,1165],{"class":66},[49,166365,474],{"class":328},[49,166367,81],{"class":55},[49,166369,166370],{"class":51,"line":109},[49,166371,2492],{"emptyLinePlaceholder":151},[49,166373,166374],{"class":51,"line":120},[49,166375,2492],{"emptyLinePlaceholder":151},[49,166377,166378,166381,166384],{"class":51,"line":135},[49,166379,166380],{"class":55},"connect(",[49,166382,166383],{"class":328},"\"localhost\"",[49,166385,81],{"class":55},[49,166387,166388,166390,166392,166394,166397],{"class":51,"line":1306},[49,166389,166380],{"class":55},[49,166391,166383],{"class":328},[49,166393,12525],{"class":55},[49,166395,166396],{"class":66},"6379",[49,166398,81],{"class":55},[14,166400,166401],{},"注意：默认参数必须放在非默认参数后面。",[14,166403,166404],{},"错误：",[39,166406,166408],{"className":41,"code":166407,"language":43,"meta":44,"style":44},"def connect(port=3306, host):\n    pass\n",[46,166409,166410,166426],{"__ignoreMap":44},[49,166411,166412,166414,166416,166419,166421,166423],{"class":51,"line":52},[49,166413,32036],{"class":59},[49,166415,122156],{"class":2055},[49,166417,166418],{"class":55},"(port",[49,166420,60],{"class":59},[49,166422,166335],{"class":66},[49,166424,166425],{"class":55},", host):\n",[49,166427,166428],{"class":51,"line":84},[49,166429,149600],{"class":59},[14,166431,166432],{},"正确：",[39,166434,166436],{"className":41,"code":166435,"language":43,"meta":44,"style":44},"def connect(host, port=3306):\n    pass\n",[46,166437,166438,166452],{"__ignoreMap":44},[49,166439,166440,166442,166444,166446,166448,166450],{"class":51,"line":52},[49,166441,32036],{"class":59},[49,166443,122156],{"class":2055},[49,166445,166330],{"class":55},[49,166447,60],{"class":59},[49,166449,166335],{"class":66},[49,166451,30875],{"class":55},[49,166453,166454],{"class":51,"line":84},[49,166455,149600],{"class":59},[166,166457,166459],{"id":166458},"_75-默认参数的坑","7.5 默认参数的坑",[14,166461,166462],{},"不要使用可变对象作为默认参数。",[14,166464,157686],{},[39,166466,166468],{"className":41,"code":166467,"language":43,"meta":44,"style":44},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[46,166469,166470,166485,166490,166497,166501,166505,166516],{"__ignoreMap":44},[49,166471,166472,166474,166477,166480,166482],{"class":51,"line":52},[49,166473,32036],{"class":59},[49,166475,166476],{"class":2055}," add_item",[49,166478,166479],{"class":55},"(item, items",[49,166481,60],{"class":59},[49,166483,166484],{"class":55},"[]):\n",[49,166486,166487],{"class":51,"line":84},[49,166488,166489],{"class":55},"    items.append(item)\n",[49,166491,166492,166494],{"class":51,"line":109},[49,166493,4182],{"class":59},[49,166495,166496],{"class":55}," items\n",[49,166498,166499],{"class":51,"line":120},[49,166500,2492],{"emptyLinePlaceholder":151},[49,166502,166503],{"class":51,"line":135},[49,166504,2492],{"emptyLinePlaceholder":151},[49,166506,166507,166509,166512,166514],{"class":51,"line":1306},[49,166508,30504],{"class":66},[49,166510,166511],{"class":55},"(add_item(",[49,166513,165388],{"class":328},[49,166515,30586],{"class":55},[49,166517,166518,166520,166522,166525],{"class":51,"line":1312},[49,166519,30504],{"class":66},[49,166521,166511],{"class":55},[49,166523,166524],{"class":328},"\"b\"",[49,166526,30586],{"class":55},[14,166528,166529],{},"第二次调用会复用第一次的列表。",[14,166531,155951],{},[39,166533,166535],{"className":41,"code":166534,"language":43,"meta":44,"style":44},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[46,166536,166537,166551,166564,166573,166577],{"__ignoreMap":44},[49,166538,166539,166541,166543,166545,166547,166549],{"class":51,"line":52},[49,166540,32036],{"class":59},[49,166542,166476],{"class":2055},[49,166544,166479],{"class":55},[49,166546,60],{"class":59},[49,166548,95749],{"class":66},[49,166550,30875],{"class":55},[49,166552,166553,166555,166558,166560,166562],{"class":51,"line":84},[49,166554,3193],{"class":59},[49,166556,166557],{"class":55}," items ",[49,166559,39016],{"class":59},[49,166561,39022],{"class":66},[49,166563,3831],{"class":55},[49,166565,166566,166569,166571],{"class":51,"line":109},[49,166567,166568],{"class":55},"        items ",[49,166570,60],{"class":59},[49,166572,51927],{"class":55},[49,166574,166575],{"class":51,"line":120},[49,166576,166489],{"class":55},[49,166578,166579,166581],{"class":51,"line":135},[49,166580,4182],{"class":59},[49,166582,166496],{"class":55},[166,166584,166586],{"id":166585},"_76-不定长参数","7.6 不定长参数",[195,166588,166590],{"id":166589},"_761-args","7.6.1 *args",[14,166592,166593,166596],{},[46,166594,166595],{},"*args"," 接收任意数量的位置参数，得到元组。",[39,166598,166600],{"className":41,"code":166599,"language":43,"meta":44,"style":44},"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",[46,166601,166602,166615,166623,166634,166643,166649,166653,166657,166676],{"__ignoreMap":44},[49,166603,166604,166606,166608,166610,166612],{"class":51,"line":52},[49,166605,32036],{"class":59},[49,166607,5300],{"class":2055},[49,166609,228],{"class":55},[49,166611,674],{"class":59},[49,166613,166614],{"class":55},"args):\n",[49,166616,166617,166619,166621],{"class":51,"line":84},[49,166618,159370],{"class":55},[49,166620,60],{"class":59},[49,166622,47422],{"class":66},[49,166624,166625,166627,166629,166631],{"class":51,"line":109},[49,166626,3293],{"class":59},[49,166628,156243],{"class":55},[49,166630,26134],{"class":59},[49,166632,166633],{"class":55}," args:\n",[49,166635,166636,166638,166640],{"class":51,"line":120},[49,166637,160045],{"class":55},[49,166639,9567],{"class":59},[49,166641,166642],{"class":55}," num\n",[49,166644,166645,166647],{"class":51,"line":135},[49,166646,4182],{"class":59},[49,166648,162350],{"class":55},[49,166650,166651],{"class":51,"line":1306},[49,166652,2492],{"emptyLinePlaceholder":151},[49,166654,166655],{"class":51,"line":1312},[49,166656,2492],{"emptyLinePlaceholder":151},[49,166658,166659,166661,166664,166666,166668,166670,166672,166674],{"class":51,"line":1403},[49,166660,30504],{"class":66},[49,166662,166663],{"class":55},"(add(",[49,166665,441],{"class":66},[49,166667,12525],{"class":55},[49,166669,301],{"class":66},[49,166671,12525],{"class":55},[49,166673,73],{"class":66},[49,166675,30586],{"class":55},[49,166677,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696,166698,166700],{"class":51,"line":1409},[49,166679,30504],{"class":66},[49,166681,166663],{"class":55},[49,166683,441],{"class":66},[49,166685,12525],{"class":55},[49,166687,301],{"class":66},[49,166689,12525],{"class":55},[49,166691,73],{"class":66},[49,166693,12525],{"class":55},[49,166695,515],{"class":66},[49,166697,12525],{"class":55},[49,166699,541],{"class":66},[49,166701,30586],{"class":55},[195,166703,166705],{"id":166704},"_762-kwargs","7.6.2 **kwargs",[14,166707,166708,166711],{},[46,166709,166710],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[39,166713,166715],{"className":41,"code":166714,"language":43,"meta":44,"style":44},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[46,166716,166717,166730,166741,166747,166751,166755],{"__ignoreMap":44},[49,166718,166719,166721,166723,166725,166727],{"class":51,"line":52},[49,166720,32036],{"class":59},[49,166722,162008],{"class":2055},[49,166724,228],{"class":55},[49,166726,10751],{"class":59},[49,166728,166729],{"class":55},"kwargs):\n",[49,166731,166732,166734,166736,166738],{"class":51,"line":84},[49,166733,3293],{"class":59},[49,166735,164848],{"class":55},[49,166737,26134],{"class":59},[49,166739,166740],{"class":55}," kwargs.items():\n",[49,166742,166743,166745],{"class":51,"line":109},[49,166744,32540],{"class":66},[49,166746,164860],{"class":55},[49,166748,166749],{"class":51,"line":120},[49,166750,2492],{"emptyLinePlaceholder":151},[49,166752,166753],{"class":51,"line":135},[49,166754,2492],{"emptyLinePlaceholder":151},[49,166756,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777,166779,166781],{"class":51,"line":1306},[49,166758,162073],{"class":55},[49,166760,79899],{"class":126},[49,166762,60],{"class":59},[49,166764,149951],{"class":328},[49,166766,12525],{"class":55},[49,166768,70310],{"class":126},[49,166770,60],{"class":59},[49,166772,869],{"class":66},[49,166774,12525],{"class":55},[49,166776,70361],{"class":126},[49,166778,60],{"class":59},[49,166780,69358],{"class":328},[49,166782,81],{"class":55},[166,166784,166786],{"id":166785},"_77-参数解包","7.7 参数解包",[14,166788,166789],{},"列表或元组解包为位置参数：",[39,166791,166793],{"className":41,"code":166792,"language":43,"meta":44,"style":44},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[46,166794,166795,166804,166819,166823,166827,166847],{"__ignoreMap":44},[49,166796,166797,166799,166801],{"class":51,"line":52},[49,166798,32036],{"class":59},[49,166800,5300],{"class":2055},[49,166802,166803],{"class":55},"(a, b, c):\n",[49,166805,166806,166808,166810,166812,166814,166816],{"class":51,"line":84},[49,166807,4182],{"class":59},[49,166809,10959],{"class":55},[49,166811,700],{"class":59},[49,166813,10972],{"class":55},[49,166815,700],{"class":59},[49,166817,166818],{"class":55}," c\n",[49,166820,166821],{"class":51,"line":109},[49,166822,2492],{"emptyLinePlaceholder":151},[49,166824,166825],{"class":51,"line":120},[49,166826,2492],{"emptyLinePlaceholder":151},[49,166828,166829,166831,166833,166835,166837,166839,166841,166843,166845],{"class":51,"line":135},[49,166830,164163],{"class":55},[49,166832,60],{"class":59},[49,166834,52315],{"class":55},[49,166836,441],{"class":66},[49,166838,12525],{"class":55},[49,166840,301],{"class":66},[49,166842,12525],{"class":55},[49,166844,73],{"class":66},[49,166846,33335],{"class":55},[49,166848,166849,166851,166853,166855],{"class":51,"line":1306},[49,166850,30504],{"class":66},[49,166852,166663],{"class":55},[49,166854,674],{"class":59},[49,166856,166857],{"class":55},"nums))\n",[14,166859,166860],{},"字典解包为关键字参数：",[39,166862,166864],{"className":41,"code":166863,"language":43,"meta":44,"style":44},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[46,166865,166866,166874,166900,166904,166908,166932],{"__ignoreMap":44},[49,166867,166868,166870,166872],{"class":51,"line":52},[49,166869,32036],{"class":59},[49,166871,149435],{"class":2055},[49,166873,149438],{"class":55},[49,166875,166876,166878,166880,166882,166884,166886,166888,166890,166892,166894,166896,166898],{"class":51,"line":84},[49,166877,31388],{"class":66},[49,166879,228],{"class":55},[49,166881,277],{"class":59},[49,166883,474],{"class":328},[49,166885,1115],{"class":66},[49,166887,79899],{"class":55},[49,166889,1165],{"class":66},[49,166891,4540],{"class":66},[49,166893,70310],{"class":55},[49,166895,1165],{"class":66},[49,166897,474],{"class":328},[49,166899,81],{"class":55},[49,166901,166902],{"class":51,"line":109},[49,166903,2492],{"emptyLinePlaceholder":151},[49,166905,166906],{"class":51,"line":120},[49,166907,2492],{"emptyLinePlaceholder":151},[49,166909,166910,166912,166914,166916,166918,166920,166922,166924,166926,166928,166930],{"class":51,"line":135},[49,166911,116377],{"class":55},[49,166913,60],{"class":59},[49,166915,4540],{"class":55},[49,166917,62768],{"class":328},[49,166919,51526],{"class":55},[49,166921,149951],{"class":328},[49,166923,12525],{"class":55},[49,166925,69213],{"class":328},[49,166927,51526],{"class":55},[49,166929,869],{"class":66},[49,166931,1657],{"class":55},[49,166933,166934,166936,166938],{"class":51,"line":1306},[49,166935,166219],{"class":55},[49,166937,10751],{"class":59},[49,166939,166940],{"class":55},"info)\n",[166,166942,166944],{"id":166943},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166946,166947,166950],{},[46,166948,166949],{},"lambda"," 用于定义简单匿名函数。",[39,166952,166954],{"className":41,"code":166953,"language":43,"meta":44,"style":44},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[46,166955,166956,166973],{"__ignoreMap":44},[49,166957,166958,166961,166963,166966,166969,166971],{"class":51,"line":52},[49,166959,166960],{"class":55},"add ",[49,166962,60],{"class":59},[49,166964,166965],{"class":59}," lambda",[49,166967,166968],{"class":55}," a, b: a ",[49,166970,700],{"class":59},[49,166972,151167],{"class":55},[49,166974,166975,166977,166979,166981,166983,166985],{"class":51,"line":84},[49,166976,30504],{"class":66},[49,166978,166663],{"class":55},[49,166980,441],{"class":66},[49,166982,12525],{"class":55},[49,166984,301],{"class":66},[49,166986,30586],{"class":55},[14,166988,166989],{},"常和排序、过滤等函数一起使用。",[14,166991,166992],{},"按分数排序：",[39,166994,166996],{"className":41,"code":166995,"language":43,"meta":44,"style":44},"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",[46,166997,166998,167006,167026,167046,167066,167070,167074,167097],{"__ignoreMap":44},[49,166999,167000,167002,167004],{"class":51,"line":52},[49,167001,159779],{"class":55},[49,167003,60],{"class":59},[49,167005,55536],{"class":55},[49,167007,167008,167010,167012,167014,167016,167018,167020,167022,167024],{"class":51,"line":84},[49,167009,148448],{"class":55},[49,167011,62768],{"class":328},[49,167013,51526],{"class":55},[49,167015,149951],{"class":328},[49,167017,12525],{"class":55},[49,167019,151535],{"class":328},[49,167021,51526],{"class":55},[49,167023,1208],{"class":66},[49,167025,5021],{"class":55},[49,167027,167028,167030,167032,167034,167036,167038,167040,167042,167044],{"class":51,"line":109},[49,167029,148448],{"class":55},[49,167031,62768],{"class":328},[49,167033,51526],{"class":55},[49,167035,150999],{"class":328},[49,167037,12525],{"class":55},[49,167039,151535],{"class":328},[49,167041,51526],{"class":55},[49,167043,1030],{"class":66},[49,167045,5021],{"class":55},[49,167047,167048,167050,167052,167054,167056,167058,167060,167062,167064],{"class":51,"line":120},[49,167049,148448],{"class":55},[49,167051,62768],{"class":328},[49,167053,51526],{"class":55},[49,167055,159794],{"class":328},[49,167057,12525],{"class":55},[49,167059,151535],{"class":328},[49,167061,51526],{"class":55},[49,167063,627],{"class":66},[49,167065,5021],{"class":55},[49,167067,167068],{"class":51,"line":135},[49,167069,33335],{"class":55},[49,167071,167072],{"class":51,"line":1306},[49,167073,2492],{"emptyLinePlaceholder":151},[49,167075,167076,167079,167081,167083,167085,167087,167089,167091,167093,167095],{"class":51,"line":1312},[49,167077,167078],{"class":55},"students.sort(",[49,167080,154009],{"class":126},[49,167082,154012],{"class":59},[49,167084,154015],{"class":55},[49,167086,151535],{"class":328},[49,167088,112265],{"class":55},[49,167090,163591],{"class":126},[49,167092,60],{"class":59},[49,167094,31565],{"class":66},[49,167096,81],{"class":55},[49,167098,167099,167101],{"class":51,"line":1403},[49,167100,30504],{"class":66},[49,167102,165058],{"class":55},[14,167104,167105,167106,167108],{},"如果逻辑复杂，不要硬写 ",[46,167107,166949],{},"，定义普通函数更清晰。",[166,167110,167112],{"id":167111},"_79-函数作为参数","7.9 函数作为参数",[14,167114,167115],{},"函数可以作为参数传给另一个函数。",[39,167117,167119],{"className":41,"code":167118,"language":43,"meta":44,"style":44},"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",[46,167120,167121,167129,167139,167143,167147,167157,167164,167168,167172],{"__ignoreMap":44},[49,167122,167123,167125,167127],{"class":51,"line":52},[49,167124,32036],{"class":59},[49,167126,5300],{"class":2055},[49,167128,151156],{"class":55},[49,167130,167131,167133,167135,167137],{"class":51,"line":84},[49,167132,4182],{"class":59},[49,167134,10959],{"class":55},[49,167136,700],{"class":59},[49,167138,151167],{"class":55},[49,167140,167141],{"class":51,"line":109},[49,167142,2492],{"emptyLinePlaceholder":151},[49,167144,167145],{"class":51,"line":120},[49,167146,2492],{"emptyLinePlaceholder":151},[49,167148,167149,167151,167154],{"class":51,"line":135},[49,167150,32036],{"class":59},[49,167152,167153],{"class":2055}," calculate",[49,167155,167156],{"class":55},"(a, b, func):\n",[49,167158,167159,167161],{"class":51,"line":1306},[49,167160,4182],{"class":59},[49,167162,167163],{"class":55}," func(a, b)\n",[49,167165,167166],{"class":51,"line":1312},[49,167167,2492],{"emptyLinePlaceholder":151},[49,167169,167170],{"class":51,"line":1403},[49,167171,2492],{"emptyLinePlaceholder":151},[49,167173,167174,167176,167179,167181,167183,167185],{"class":51,"line":1409},[49,167175,30504],{"class":66},[49,167177,167178],{"class":55},"(calculate(",[49,167180,95],{"class":66},[49,167182,12525],{"class":55},[49,167184,919],{"class":66},[49,167186,167187],{"class":55},", add))\n",[14,167189,167190],{},"这种思想在排序、回调、框架中经常出现。",[166,167192,167194],{"id":167193},"_710-mapfiltersorted","7.10 map、filter、sorted",[195,167196,167198],{"id":167197},"_7101-map","7.10.1 map",[14,167200,167201,167203],{},[46,167202,74133],{}," 对每个元素执行函数。",[39,167205,167207],{"className":41,"code":167206,"language":43,"meta":44,"style":44},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[46,167208,167209,167233,167256],{"__ignoreMap":44},[49,167210,167211,167213,167215,167217,167219,167221,167223,167225,167227,167229,167231],{"class":51,"line":52},[49,167212,164163],{"class":55},[49,167214,60],{"class":59},[49,167216,52315],{"class":55},[49,167218,441],{"class":66},[49,167220,12525],{"class":55},[49,167222,301],{"class":66},[49,167224,12525],{"class":55},[49,167226,73],{"class":66},[49,167228,12525],{"class":55},[49,167230,515],{"class":66},[49,167232,33335],{"class":55},[49,167234,167235,167237,167239,167242,167244,167246,167249,167251,167253],{"class":51,"line":84},[49,167236,161369],{"class":55},[49,167238,60],{"class":59},[49,167240,167241],{"class":66}," map",[49,167243,228],{"class":55},[49,167245,166949],{"class":59},[49,167247,167248],{"class":55}," x: x ",[49,167250,674],{"class":59},[49,167252,14845],{"class":66},[49,167254,167255],{"class":55},", nums)\n",[49,167257,167258,167260,167262,167264],{"class":51,"line":109},[49,167259,30504],{"class":66},[49,167261,228],{"class":55},[49,167263,154133],{"class":66},[49,167265,166131],{"class":55},[195,167267,167269],{"id":167268},"_7102-filter","7.10.2 filter",[14,167271,167272,167274],{},[46,167273,80140],{}," 保留满足条件的元素。",[39,167276,167278],{"className":41,"code":167277,"language":43,"meta":44,"style":44},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[46,167279,167280,167308,167333],{"__ignoreMap":44},[49,167281,167282,167284,167286,167288,167290,167292,167294,167296,167298,167300,167302,167304,167306],{"class":51,"line":52},[49,167283,164163],{"class":55},[49,167285,60],{"class":59},[49,167287,52315],{"class":55},[49,167289,441],{"class":66},[49,167291,12525],{"class":55},[49,167293,301],{"class":66},[49,167295,12525],{"class":55},[49,167297,73],{"class":66},[49,167299,12525],{"class":55},[49,167301,515],{"class":66},[49,167303,12525],{"class":55},[49,167305,541],{"class":66},[49,167307,33335],{"class":55},[49,167309,167310,167312,167314,167317,167319,167321,167323,167325,167327,167329,167331],{"class":51,"line":84},[49,167311,161369],{"class":55},[49,167313,60],{"class":59},[49,167315,167316],{"class":66}," filter",[49,167318,228],{"class":55},[49,167320,166949],{"class":59},[49,167322,167248],{"class":55},[49,167324,550],{"class":59},[49,167326,14845],{"class":66},[49,167328,101622],{"class":59},[49,167330,4185],{"class":66},[49,167332,167255],{"class":55},[49,167334,167335,167337,167339,167341],{"class":51,"line":109},[49,167336,30504],{"class":66},[49,167338,228],{"class":55},[49,167340,154133],{"class":66},[49,167342,166131],{"class":55},[195,167344,167346],{"id":167345},"_7103-sorted","7.10.3 sorted",[14,167348,167349,167351],{},[46,167350,165299],{}," 返回排序后的新列表。",[39,167353,167355],{"className":41,"code":167354,"language":43,"meta":44,"style":44},"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",[46,167356,167357,167365,167385,167405,167425,167429,167433,167462],{"__ignoreMap":44},[49,167358,167359,167361,167363],{"class":51,"line":52},[49,167360,159779],{"class":55},[49,167362,60],{"class":59},[49,167364,55536],{"class":55},[49,167366,167367,167369,167371,167373,167375,167377,167379,167381,167383],{"class":51,"line":84},[49,167368,148448],{"class":55},[49,167370,62768],{"class":328},[49,167372,51526],{"class":55},[49,167374,149951],{"class":328},[49,167376,12525],{"class":55},[49,167378,151535],{"class":328},[49,167380,51526],{"class":55},[49,167382,1208],{"class":66},[49,167384,5021],{"class":55},[49,167386,167387,167389,167391,167393,167395,167397,167399,167401,167403],{"class":51,"line":109},[49,167388,148448],{"class":55},[49,167390,62768],{"class":328},[49,167392,51526],{"class":55},[49,167394,150999],{"class":328},[49,167396,12525],{"class":55},[49,167398,151535],{"class":328},[49,167400,51526],{"class":55},[49,167402,1030],{"class":66},[49,167404,5021],{"class":55},[49,167406,167407,167409,167411,167413,167415,167417,167419,167421,167423],{"class":51,"line":120},[49,167408,148448],{"class":55},[49,167410,62768],{"class":328},[49,167412,51526],{"class":55},[49,167414,159794],{"class":328},[49,167416,12525],{"class":55},[49,167418,151535],{"class":328},[49,167420,51526],{"class":55},[49,167422,627],{"class":66},[49,167424,5021],{"class":55},[49,167426,167427],{"class":51,"line":135},[49,167428,33335],{"class":55},[49,167430,167431],{"class":51,"line":1306},[49,167432,2492],{"emptyLinePlaceholder":151},[49,167434,167435,167437,167439,167441,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":51,"line":1312},[49,167436,161369],{"class":55},[49,167438,60],{"class":59},[49,167440,163667],{"class":66},[49,167442,167443],{"class":55},"(students, ",[49,167445,154009],{"class":126},[49,167447,154012],{"class":59},[49,167449,154015],{"class":55},[49,167451,151535],{"class":328},[49,167453,112265],{"class":55},[49,167455,163591],{"class":126},[49,167457,60],{"class":59},[49,167459,31565],{"class":66},[49,167461,81],{"class":55},[49,167463,167464,167466],{"class":51,"line":1403},[49,167465,30504],{"class":66},[49,167467,76674],{"class":55},[166,167469,167471],{"id":167470},"_711-闭包入门","7.11 闭包入门",[14,167473,167474],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[39,167476,167478],{"className":41,"code":167477,"language":43,"meta":44,"style":44},"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",[46,167479,167480,167490,167500,167511,167515,167522,167526,167530,167544],{"__ignoreMap":44},[49,167481,167482,167484,167487],{"class":51,"line":52},[49,167483,32036],{"class":59},[49,167485,167486],{"class":2055}," outer",[49,167488,167489],{"class":55},"(base):\n",[49,167491,167492,167494,167497],{"class":51,"line":84},[49,167493,30890],{"class":59},[49,167495,167496],{"class":2055}," inner",[49,167498,167499],{"class":55},"(num):\n",[49,167501,167502,167504,167507,167509],{"class":51,"line":109},[49,167503,14842],{"class":59},[49,167505,167506],{"class":55}," base ",[49,167508,700],{"class":59},[49,167510,166642],{"class":55},[49,167512,167513],{"class":51,"line":120},[49,167514,2492],{"emptyLinePlaceholder":151},[49,167516,167517,167519],{"class":51,"line":135},[49,167518,4182],{"class":59},[49,167520,167521],{"class":55}," inner\n",[49,167523,167524],{"class":51,"line":1306},[49,167525,2492],{"emptyLinePlaceholder":151},[49,167527,167528],{"class":51,"line":1312},[49,167529,2492],{"emptyLinePlaceholder":151},[49,167531,167532,167535,167537,167540,167542],{"class":51,"line":1403},[49,167533,167534],{"class":55},"add_10 ",[49,167536,60],{"class":59},[49,167538,167539],{"class":55}," outer(",[49,167541,95],{"class":66},[49,167543,81],{"class":55},[49,167545,167546,167548,167551,167553],{"class":51,"line":1409},[49,167547,30504],{"class":66},[49,167549,167550],{"class":55},"(add_10(",[49,167552,541],{"class":66},[49,167554,30586],{"class":55},[14,167556,167557],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[166,167559,167561],{"id":167560},"_712-装饰器入门","7.12 装饰器入门",[14,167563,167564],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[39,167566,167568],{"className":41,"code":167567,"language":43,"meta":44,"style":44},"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",[46,167569,167570,167579,167588,167599,167604,167615,167619,167626,167630,167634,167639,167647,167657,167661,167665],{"__ignoreMap":44},[49,167571,167572,167574,167576],{"class":51,"line":52},[49,167573,32036],{"class":59},[49,167575,87280],{"class":2055},[49,167577,167578],{"class":55},"(func):\n",[49,167580,167581,167583,167586],{"class":51,"line":84},[49,167582,30890],{"class":59},[49,167584,167585],{"class":2055}," wrapper",[49,167587,32042],{"class":55},[49,167589,167590,167592,167594,167597],{"class":51,"line":109},[49,167591,32540],{"class":66},[49,167593,228],{"class":55},[49,167595,167596],{"class":328},"\"函数开始执行\"",[49,167598,81],{"class":55},[49,167600,167601],{"class":51,"line":120},[49,167602,167603],{"class":55},"        func()\n",[49,167605,167606,167608,167610,167613],{"class":51,"line":135},[49,167607,32540],{"class":66},[49,167609,228],{"class":55},[49,167611,167612],{"class":328},"\"函数执行结束\"",[49,167614,81],{"class":55},[49,167616,167617],{"class":51,"line":1306},[49,167618,2492],{"emptyLinePlaceholder":151},[49,167620,167621,167623],{"class":51,"line":1312},[49,167622,4182],{"class":59},[49,167624,167625],{"class":55}," wrapper\n",[49,167627,167628],{"class":51,"line":1403},[49,167629,2492],{"emptyLinePlaceholder":151},[49,167631,167632],{"class":51,"line":1409},[49,167633,2492],{"emptyLinePlaceholder":151},[49,167635,167636],{"class":51,"line":1421},[49,167637,167638],{"class":2055},"@log\n",[49,167640,167641,167643,167645],{"class":51,"line":1704},[49,167642,32036],{"class":59},[49,167644,161059],{"class":2055},[49,167646,32042],{"class":55},[49,167648,167649,167651,167653,167655],{"class":51,"line":1709},[49,167650,31388],{"class":66},[49,167652,228],{"class":55},[49,167654,5934],{"class":328},[49,167656,81],{"class":55},[49,167658,167659],{"class":51,"line":1715},[49,167660,2492],{"emptyLinePlaceholder":151},[49,167662,167663],{"class":51,"line":1720},[49,167664,2492],{"emptyLinePlaceholder":151},[49,167666,167667],{"class":51,"line":1734},[49,167668,161094],{"class":55},[14,167670,158337],{},[39,167672,167674],{"className":41,"code":167673,"language":43,"meta":44,"style":44},"say_hello = log(say_hello)\n",[46,167675,167676],{"__ignoreMap":44},[49,167677,167678,167681,167683],{"class":51,"line":52},[49,167679,167680],{"class":55},"say_hello ",[49,167682,60],{"class":59},[49,167684,167685],{"class":55}," log(say_hello)\n",[14,167687,167688],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[166,167690,167692],{"id":167691},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[39,167694,167696],{"className":41,"code":167695,"language":43,"meta":44,"style":44},"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",[46,167697,167698,167706,167723,167733,167752,167762,167769,167773,167779,167783,167787,167791,167799,167809,167813,167817],{"__ignoreMap":44},[49,167699,167700,167702,167704],{"class":51,"line":52},[49,167701,32036],{"class":59},[49,167703,87280],{"class":2055},[49,167705,167578],{"class":55},[49,167707,167708,167710,167712,167714,167716,167719,167721],{"class":51,"line":84},[49,167709,30890],{"class":59},[49,167711,167585],{"class":2055},[49,167713,228],{"class":55},[49,167715,674],{"class":59},[49,167717,167718],{"class":55},"args, ",[49,167720,10751],{"class":59},[49,167722,166729],{"class":55},[49,167724,167725,167727,167729,167731],{"class":51,"line":109},[49,167726,32540],{"class":66},[49,167728,228],{"class":55},[49,167730,167596],{"class":328},[49,167732,81],{"class":55},[49,167734,167735,167738,167740,167743,167745,167747,167749],{"class":51,"line":120},[49,167736,167737],{"class":55},"        result ",[49,167739,60],{"class":59},[49,167741,167742],{"class":55}," func(",[49,167744,674],{"class":59},[49,167746,167718],{"class":55},[49,167748,10751],{"class":59},[49,167750,167751],{"class":55},"kwargs)\n",[49,167753,167754,167756,167758,167760],{"class":51,"line":135},[49,167755,32540],{"class":66},[49,167757,228],{"class":55},[49,167759,167612],{"class":328},[49,167761,81],{"class":55},[49,167763,167764,167766],{"class":51,"line":1306},[49,167765,14842],{"class":59},[49,167767,167768],{"class":55}," result\n",[49,167770,167771],{"class":51,"line":1312},[49,167772,2492],{"emptyLinePlaceholder":151},[49,167774,167775,167777],{"class":51,"line":1403},[49,167776,4182],{"class":59},[49,167778,167625],{"class":55},[49,167780,167781],{"class":51,"line":1409},[49,167782,2492],{"emptyLinePlaceholder":151},[49,167784,167785],{"class":51,"line":1421},[49,167786,2492],{"emptyLinePlaceholder":151},[49,167788,167789],{"class":51,"line":1704},[49,167790,167638],{"class":2055},[49,167792,167793,167795,167797],{"class":51,"line":1709},[49,167794,32036],{"class":59},[49,167796,5300],{"class":2055},[49,167798,151156],{"class":55},[49,167800,167801,167803,167805,167807],{"class":51,"line":1715},[49,167802,4182],{"class":59},[49,167804,10959],{"class":55},[49,167806,700],{"class":59},[49,167808,151167],{"class":55},[49,167810,167811],{"class":51,"line":1720},[49,167812,2492],{"emptyLinePlaceholder":151},[49,167814,167815],{"class":51,"line":1734},[49,167816,2492],{"emptyLinePlaceholder":151},[49,167818,167819,167821,167823,167825,167827,167829],{"class":51,"line":1739},[49,167820,30504],{"class":66},[49,167822,166663],{"class":55},[49,167824,95],{"class":66},[49,167826,12525],{"class":55},[49,167828,919],{"class":66},[49,167830,30586],{"class":55},[14,167832,167833,167834,101081,167836,167838],{},"这个写法使用 ",[46,167835,166595],{},[46,167837,166710],{}," 接收原函数的所有参数。",[166,167840,167842],{"id":167841},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167844,123355],{},[178,167846,167847,167850,167853],{},[181,167848,167849],{},"给定一组学生数据。",[181,167851,167852],{},"封装函数，根据传入规则筛选学生。",[181,167854,167855],{},"筛选及格、优秀、未成年学生。",[14,167857,10125],{},[39,167859,167861],{"className":41,"code":167860,"language":43,"meta":44,"style":44},"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",[46,167862,167863,167871,167899,167927,167955,167959,167963,167967,167977,167985,167995,168002,168007,168013,168017,168021,168045,168068,168091,168095,168102,168109],{"__ignoreMap":44},[49,167864,167865,167867,167869],{"class":51,"line":52},[49,167866,159779],{"class":55},[49,167868,60],{"class":59},[49,167870,55536],{"class":55},[49,167872,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893,167895,167897],{"class":51,"line":84},[49,167874,148448],{"class":55},[49,167876,62768],{"class":328},[49,167878,51526],{"class":55},[49,167880,149951],{"class":328},[49,167882,12525],{"class":55},[49,167884,69213],{"class":328},[49,167886,51526],{"class":55},[49,167888,869],{"class":66},[49,167890,12525],{"class":55},[49,167892,151535],{"class":328},[49,167894,51526],{"class":55},[49,167896,1208],{"class":66},[49,167898,5021],{"class":55},[49,167900,167901,167903,167905,167907,167909,167911,167913,167915,167917,167919,167921,167923,167925],{"class":51,"line":109},[49,167902,148448],{"class":55},[49,167904,62768],{"class":328},[49,167906,51526],{"class":55},[49,167908,150999],{"class":328},[49,167910,12525],{"class":55},[49,167912,69213],{"class":328},[49,167914,51526],{"class":55},[49,167916,844],{"class":66},[49,167918,12525],{"class":55},[49,167920,151535],{"class":328},[49,167922,51526],{"class":55},[49,167924,1030],{"class":66},[49,167926,5021],{"class":55},[49,167928,167929,167931,167933,167935,167937,167939,167941,167943,167945,167947,167949,167951,167953],{"class":51,"line":120},[49,167930,148448],{"class":55},[49,167932,62768],{"class":328},[49,167934,51526],{"class":55},[49,167936,159794],{"class":328},[49,167938,12525],{"class":55},[49,167940,69213],{"class":328},[49,167942,51526],{"class":55},[49,167944,894],{"class":66},[49,167946,12525],{"class":55},[49,167948,151535],{"class":328},[49,167950,51526],{"class":55},[49,167952,1101],{"class":66},[49,167954,5021],{"class":55},[49,167956,167957],{"class":51,"line":135},[49,167958,33335],{"class":55},[49,167960,167961],{"class":51,"line":1306},[49,167962,2492],{"emptyLinePlaceholder":151},[49,167964,167965],{"class":51,"line":1312},[49,167966,2492],{"emptyLinePlaceholder":151},[49,167968,167969,167971,167974],{"class":51,"line":1403},[49,167970,32036],{"class":59},[49,167972,167973],{"class":2055}," filter_students",[49,167975,167976],{"class":55},"(students, condition):\n",[49,167978,167979,167981,167983],{"class":51,"line":1409},[49,167980,161286],{"class":55},[49,167982,60],{"class":59},[49,167984,51927],{"class":55},[49,167986,167987,167989,167991,167993],{"class":51,"line":1421},[49,167988,3293],{"class":59},[49,167990,152200],{"class":55},[49,167992,26134],{"class":59},[49,167994,152205],{"class":55},[49,167996,167997,167999],{"class":51,"line":1704},[49,167998,2589],{"class":59},[49,168000,168001],{"class":55}," condition(student):\n",[49,168003,168004],{"class":51,"line":1709},[49,168005,168006],{"class":55},"            result.append(student)\n",[49,168008,168009,168011],{"class":51,"line":1715},[49,168010,4182],{"class":59},[49,168012,167768],{"class":55},[49,168014,168015],{"class":51,"line":1720},[49,168016,2492],{"emptyLinePlaceholder":151},[49,168018,168019],{"class":51,"line":1734},[49,168020,2492],{"emptyLinePlaceholder":151},[49,168022,168023,168025,168027,168030,168032,168035,168037,168039,168041,168043],{"class":51,"line":1739},[49,168024,165764],{"class":55},[49,168026,60],{"class":59},[49,168028,168029],{"class":55}," filter_students(students, ",[49,168031,166949],{"class":59},[49,168033,168034],{"class":55}," s: s[",[49,168036,151535],{"class":328},[49,168038,4535],{"class":55},[49,168040,1802],{"class":59},[49,168042,157900],{"class":66},[49,168044,81],{"class":55},[49,168046,168047,168050,168052,168054,168056,168058,168060,168062,168064,168066],{"class":51,"line":1745},[49,168048,168049],{"class":55},"excellent ",[49,168051,60],{"class":59},[49,168053,168029],{"class":55},[49,168055,166949],{"class":59},[49,168057,168034],{"class":55},[49,168059,151535],{"class":328},[49,168061,4535],{"class":55},[49,168063,1802],{"class":59},[49,168065,157851],{"class":66},[49,168067,81],{"class":55},[49,168069,168070,168073,168075,168077,168079,168081,168083,168085,168087,168089],{"class":51,"line":1766},[49,168071,168072],{"class":55},"under_age ",[49,168074,60],{"class":59},[49,168076,168029],{"class":55},[49,168078,166949],{"class":59},[49,168080,168034],{"class":55},[49,168082,69213],{"class":328},[49,168084,4535],{"class":55},[49,168086,1129],{"class":59},[49,168088,156348],{"class":66},[49,168090,81],{"class":55},[49,168092,168093],{"class":51,"line":1771},[49,168094,2492],{"emptyLinePlaceholder":151},[49,168096,168097,168099],{"class":51,"line":1785},[49,168098,30504],{"class":66},[49,168100,168101],{"class":55},"(passed)\n",[49,168103,168104,168106],{"class":51,"line":1790},[49,168105,30504],{"class":66},[49,168107,168108],{"class":55},"(excellent)\n",[49,168110,168111,168113],{"class":51,"line":1819},[49,168112,30504],{"class":66},[49,168114,168115],{"class":55},"(under_age)\n",[166,168117,168119],{"id":168118},"_715-易错点","7.15 易错点",[178,168121,168122,168125,168133,168138,168149],{},[181,168123,168124],{},"默认参数不要写可变对象。",[181,168126,168127,168129,168130,168132],{},[46,168128,166595],{}," 是元组，",[46,168131,166710],{}," 是字典。",[181,168134,168135,168137],{},[46,168136,166949],{}," 只适合简单表达式。",[181,168139,168140,101081,168142,168144,168145,168148],{},[46,168141,74133],{},[46,168143,80140],{}," 的结果是迭代器，常用 ",[46,168146,168147],{},"list()"," 转换查看。",[181,168150,168151],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[166,168153,168155],{"id":168154},"_716-本章练习","7.16 本章练习",[178,168157,168158,168165,168171,168176,168181],{},[181,168159,168160,168161,168164],{},"写函数 ",[46,168162,168163],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[181,168166,168160,168167,168170],{},[46,168168,168169],{},"print_user(**kwargs)","，输出用户所有字段。",[181,168172,104429,168173,168175],{},[46,168174,166949],{}," 对学生列表按年龄排序。",[181,168177,104429,168178,168180],{},[46,168179,80140],{}," 找出成绩不及格的学生。",[181,168182,168183],{},"写一个装饰器，统计函数执行前后的提示信息。",[143,168185,168186],{},"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":44,"searchDepth":84,"depth":84,"links":168188},[168189,168190,168191,168192,168193,168194,168198,168199,168200,168201,168206,168207,168208,168209,168210,168211],{"id":166047,"depth":84,"text":166048},{"id":166161,"depth":84,"text":166162},{"id":166250,"depth":84,"text":166251},{"id":166312,"depth":84,"text":166313},{"id":166458,"depth":84,"text":166459},{"id":166585,"depth":84,"text":166586,"children":168195},[168196,168197],{"id":166589,"depth":109,"text":166590},{"id":166704,"depth":109,"text":166705},{"id":166785,"depth":84,"text":166786},{"id":166943,"depth":84,"text":166944},{"id":167111,"depth":84,"text":167112},{"id":167193,"depth":84,"text":167194,"children":168202},[168203,168204,168205],{"id":167197,"depth":109,"text":167198},{"id":167268,"depth":109,"text":167269},{"id":167345,"depth":109,"text":167346},{"id":167470,"depth":84,"text":167471},{"id":167560,"depth":84,"text":167561},{"id":167691,"depth":84,"text":167692},{"id":167841,"depth":84,"text":167842},{"id":168118,"depth":84,"text":168119},{"id":168154,"depth":84,"text":168155},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166039,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168218,"title":168219,"body":168220,"description":148,"extension":149,"meta":170739,"navigation":151,"path":170740,"seo":170741,"stem":170742,"__hash__":170743},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168221,"toc":170714},[168222,168225,168229,168232,168235,168266,168270,168274,168277,168304,168308,168311,168362,168365,168380,168383,168418,168422,168424,168448,168451,168511,168515,168519,168522,168579,168582,168602,168606,168609,168672,168676,168679,168735,168742,168766,168770,168773,168836,168840,168845,168896,168899,168903,168908,168975,168978,169060,169064,169069,169120,169123,169127,169130,169133,169141,169144,169190,169193,169239,169243,169249,169293,169296,169342,169345,169385,169388,169449,169453,169456,169546,169549,169691,169694,169761,169765,169768,169771,169912,169915,169993,169996,170172,170176,170178,170189,170191,170390,170394,170638,170642,170676,170680,170711],[10,168223,168219],{"id":168224},"_8-文件操作",[166,168226,168228],{"id":168227},"_81-文件操作的意义","8.1 文件操作的意义",[14,168230,168231],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168233,168234],{},"常见文件类型：",[178,168236,168237,168243,168249,168255,168261],{},[181,168238,168239,168242],{},[46,168240,168241],{},".txt","：普通文本。",[181,168244,168245,168248],{},[46,168246,168247],{},".csv","：表格文本。",[181,168250,168251,168254],{},[46,168252,168253],{},".json","：结构化数据。",[181,168256,168257,168260],{},[46,168258,168259],{},".log","：日志文件。",[181,168262,168263,168265],{},[46,168264,146415],{},"：Python 源代码。",[166,168267,168269],{"id":168268},"_82-路径","8.2 路径",[195,168271,168273],{"id":168272},"_821-相对路径","8.2.1 相对路径",[14,168275,168276],{},"相对当前运行目录：",[39,168278,168280],{"className":41,"code":168279,"language":43,"meta":44,"style":44},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[46,168281,168282],{"__ignoreMap":44},[49,168283,168284,168286,168288,168290,168292,168294,168296,168298,168300,168302],{"class":51,"line":52},[49,168285,87004],{"class":66},[49,168287,228],{"class":55},[49,168289,146859],{"class":328},[49,168291,12525],{"class":55},[49,168293,146864],{"class":328},[49,168295,12525],{"class":55},[49,168297,146869],{"class":126},[49,168299,60],{"class":59},[49,168301,146874],{"class":328},[49,168303,81],{"class":55},[195,168305,168307],{"id":168306},"_822-绝对路径","8.2.2 绝对路径",[14,168309,168310],{},"从根目录或盘符开始：",[39,168312,168314],{"className":41,"code":168313,"language":43,"meta":44,"style":44},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[46,168315,168316,168339],{"__ignoreMap":44},[49,168317,168318,168320,168322,168325,168327,168329,168331,168333,168335,168337],{"class":51,"line":52},[49,168319,87004],{"class":66},[49,168321,228],{"class":55},[49,168323,168324],{"class":328},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[49,168326,12525],{"class":55},[49,168328,146864],{"class":328},[49,168330,12525],{"class":55},[49,168332,146869],{"class":126},[49,168334,60],{"class":59},[49,168336,146874],{"class":328},[49,168338,81],{"class":55},[49,168340,168341,168343,168345,168348,168350,168352,168354,168356,168358,168360],{"class":51,"line":84},[49,168342,87004],{"class":66},[49,168344,228],{"class":55},[49,168346,168347],{"class":328},"\"D:\u002Fdata\u002Fdata.txt\"",[49,168349,12525],{"class":55},[49,168351,146864],{"class":328},[49,168353,12525],{"class":55},[49,168355,146869],{"class":126},[49,168357,60],{"class":59},[49,168359,146874],{"class":328},[49,168361,81],{"class":55},[14,168363,168364],{},"Windows 路径建议写成：",[39,168366,168368],{"className":41,"code":168367,"language":43,"meta":44,"style":44},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[46,168369,168370],{"__ignoreMap":44},[49,168371,168372,168375,168377],{"class":51,"line":52},[49,168373,168374],{"class":55},"path ",[49,168376,60],{"class":59},[49,168378,168379],{"class":328}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168381,168382],{},"或原始字符串：",[39,168384,168386],{"className":41,"code":168385,"language":43,"meta":44,"style":44},"path = r\"D:\\data\\data.txt\"\n",[46,168387,168388],{"__ignoreMap":44},[49,168389,168390,168392,168394,168396,168398,168401,168404,168407,168409,168411,168413,168416],{"class":51,"line":52},[49,168391,168374],{"class":55},[49,168393,60],{"class":59},[49,168395,17211],{"class":59},[49,168397,474],{"class":328},[49,168399,168400],{"class":48066},"D:",[49,168402,168403],{"class":66},"\\d",[49,168405,168406],{"class":48066},"ata",[49,168408,168403],{"class":66},[49,168410,168406],{"class":48066},[49,168412,777],{"class":66},[49,168414,168415],{"class":48066},"txt",[49,168417,25224],{"class":328},[166,168419,168421],{"id":168420},"_83-open函数","8.3 open函数",[14,168423,5272],{},[39,168425,168427],{"className":41,"code":168426,"language":43,"meta":44,"style":44},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[46,168428,168429],{"__ignoreMap":44},[49,168430,168431,168433,168435,168437,168440,168442,168444,168446],{"class":51,"line":52},[49,168432,45443],{"class":126},[49,168434,13654],{"class":59},[49,168436,146854],{"class":66},[49,168438,168439],{"class":55},"(文件路径, 打开模式, ",[49,168441,146869],{"class":126},[49,168443,60],{"class":59},[49,168445,146874],{"class":328},[49,168447,81],{"class":55},[14,168449,168450],{},"常见模式：",[361,168452,168453,168462],{},[364,168454,168455],{},[367,168456,168457,168460],{},[370,168458,168459],{},"模式",[370,168461,25960],{},[408,168463,168464,168473,168482,168491,168501],{},[367,168465,168466,168470],{},[413,168467,168468],{},[46,168469,889],{},[413,168471,168472],{},"只读，文件不存在会报错",[367,168474,168475,168479],{},[413,168476,168477],{},[46,168478,1014],{},[413,168480,168481],{},"只写，文件不存在会创建，存在会清空",[367,168483,168484,168488],{},[413,168485,168486],{},[46,168487,56],{},[413,168489,168490],{},"追加，文件不存在会创建",[367,168492,168493,168498],{},[413,168494,168495],{},[46,168496,168497],{},"rb",[413,168499,168500],{},"二进制只读",[367,168502,168503,168508],{},[413,168504,168505],{},[46,168506,168507],{},"wb",[413,168509,168510],{},"二进制只写",[166,168512,168514],{"id":168513},"_84-读取文件","8.4 读取文件",[195,168516,168518],{"id":168517},"_841-read","8.4.1 read",[14,168520,168521],{},"一次读取全部内容：",[39,168523,168525],{"className":41,"code":168524,"language":43,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[46,168526,168527,168553,168565,168572],{"__ignoreMap":44},[49,168528,168529,168531,168533,168535,168537,168539,168541,168543,168545,168547,168549,168551],{"class":51,"line":52},[49,168530,45443],{"class":126},[49,168532,13654],{"class":59},[49,168534,146854],{"class":66},[49,168536,228],{"class":55},[49,168538,146859],{"class":328},[49,168540,12525],{"class":55},[49,168542,146864],{"class":328},[49,168544,12525],{"class":55},[49,168546,146869],{"class":126},[49,168548,60],{"class":59},[49,168550,146874],{"class":328},[49,168552,81],{"class":55},[49,168554,168555,168558,168560,168562],{"class":51,"line":84},[49,168556,168557],{"class":55},"content ",[49,168559,60],{"class":59},[49,168561,148216],{"class":126},[49,168563,168564],{"class":55},".read()\n",[49,168566,168567,168569],{"class":51,"line":109},[49,168568,30504],{"class":66},[49,168570,168571],{"class":55},"(content)\n",[49,168573,168574,168576],{"class":51,"line":120},[49,168575,45443],{"class":126},[49,168577,168578],{"class":55},".close()\n",[14,168580,168581],{},"可以指定读取字符数：",[39,168583,168585],{"className":41,"code":168584,"language":43,"meta":44,"style":44},"content = file.read(10)\n",[46,168586,168587],{"__ignoreMap":44},[49,168588,168589,168591,168593,168595,168598,168600],{"class":51,"line":52},[49,168590,168557],{"class":55},[49,168592,60],{"class":59},[49,168594,148216],{"class":126},[49,168596,168597],{"class":55},".read(",[49,168599,95],{"class":66},[49,168601,81],{"class":55},[195,168603,168605],{"id":168604},"_842-readline","8.4.2 readline",[14,168607,168608],{},"一次读取一行：",[39,168610,168612],{"className":41,"code":168611,"language":43,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[46,168613,168614,168640,168644,168655,168662,168666],{"__ignoreMap":44},[49,168615,168616,168618,168620,168622,168624,168626,168628,168630,168632,168634,168636,168638],{"class":51,"line":52},[49,168617,45443],{"class":126},[49,168619,13654],{"class":59},[49,168621,146854],{"class":66},[49,168623,228],{"class":55},[49,168625,146859],{"class":328},[49,168627,12525],{"class":55},[49,168629,146864],{"class":328},[49,168631,12525],{"class":55},[49,168633,146869],{"class":126},[49,168635,60],{"class":59},[49,168637,146874],{"class":328},[49,168639,81],{"class":55},[49,168641,168642],{"class":51,"line":84},[49,168643,2492],{"emptyLinePlaceholder":151},[49,168645,168646,168648,168650,168652],{"class":51,"line":109},[49,168647,147315],{"class":55},[49,168649,60],{"class":59},[49,168651,148216],{"class":126},[49,168653,168654],{"class":55},".readline()\n",[49,168656,168657,168659],{"class":51,"line":120},[49,168658,30504],{"class":66},[49,168660,168661],{"class":55},"(line)\n",[49,168663,168664],{"class":51,"line":135},[49,168665,2492],{"emptyLinePlaceholder":151},[49,168667,168668,168670],{"class":51,"line":1306},[49,168669,45443],{"class":126},[49,168671,168578],{"class":55},[195,168673,168675],{"id":168674},"_843-readlines","8.4.3 readlines",[14,168677,168678],{},"读取所有行，返回列表：",[39,168680,168682],{"className":41,"code":168681,"language":43,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[46,168683,168684,168710,168722,168729],{"__ignoreMap":44},[49,168685,168686,168688,168690,168692,168694,168696,168698,168700,168702,168704,168706,168708],{"class":51,"line":52},[49,168687,45443],{"class":126},[49,168689,13654],{"class":59},[49,168691,146854],{"class":66},[49,168693,228],{"class":55},[49,168695,146859],{"class":328},[49,168697,12525],{"class":55},[49,168699,146864],{"class":328},[49,168701,12525],{"class":55},[49,168703,146869],{"class":126},[49,168705,60],{"class":59},[49,168707,146874],{"class":328},[49,168709,81],{"class":55},[49,168711,168712,168715,168717,168719],{"class":51,"line":84},[49,168713,168714],{"class":55},"lines ",[49,168716,60],{"class":59},[49,168718,148216],{"class":126},[49,168720,168721],{"class":55},".readlines()\n",[49,168723,168724,168726],{"class":51,"line":109},[49,168725,30504],{"class":66},[49,168727,168728],{"class":55},"(lines)\n",[49,168730,168731,168733],{"class":51,"line":120},[49,168732,45443],{"class":126},[49,168734,168578],{"class":55},[14,168736,168737,168738,168741],{},"每一行通常带有换行符，可以用 ",[46,168739,168740],{},"strip()"," 去掉：",[39,168743,168745],{"className":41,"code":168744,"language":43,"meta":44,"style":44},"for line in lines:\n    print(line.strip())\n",[46,168746,168747,168759],{"__ignoreMap":44},[49,168748,168749,168751,168754,168756],{"class":51,"line":52},[49,168750,3117],{"class":59},[49,168752,168753],{"class":55}," line ",[49,168755,26134],{"class":59},[49,168757,168758],{"class":55}," lines:\n",[49,168760,168761,168763],{"class":51,"line":84},[49,168762,31388],{"class":66},[49,168764,168765],{"class":55},"(line.strip())\n",[195,168767,168769],{"id":168768},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168771,168772],{},"推荐读取大文件时使用：",[39,168774,168776],{"className":41,"code":168775,"language":43,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[46,168777,168778,168804,168808,168820,168826,168830],{"__ignoreMap":44},[49,168779,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800,168802],{"class":51,"line":52},[49,168781,45443],{"class":126},[49,168783,13654],{"class":59},[49,168785,146854],{"class":66},[49,168787,228],{"class":55},[49,168789,146859],{"class":328},[49,168791,12525],{"class":55},[49,168793,146864],{"class":328},[49,168795,12525],{"class":55},[49,168797,146869],{"class":126},[49,168799,60],{"class":59},[49,168801,146874],{"class":328},[49,168803,81],{"class":55},[49,168805,168806],{"class":51,"line":84},[49,168807,2492],{"emptyLinePlaceholder":151},[49,168809,168810,168812,168814,168816,168818],{"class":51,"line":109},[49,168811,3117],{"class":59},[49,168813,168753],{"class":55},[49,168815,26134],{"class":59},[49,168817,148216],{"class":126},[49,168819,3831],{"class":55},[49,168821,168822,168824],{"class":51,"line":120},[49,168823,31388],{"class":66},[49,168825,168765],{"class":55},[49,168827,168828],{"class":51,"line":135},[49,168829,2492],{"emptyLinePlaceholder":151},[49,168831,168832,168834],{"class":51,"line":1306},[49,168833,45443],{"class":126},[49,168835,168578],{"class":55},[166,168837,168839],{"id":168838},"_85-with语句","8.5 with语句",[14,168841,168842,168844],{},[46,168843,107896],{}," 会自动关闭文件，推荐使用。",[39,168846,168848],{"className":41,"code":168847,"language":43,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[46,168849,168850,168880,168890],{"__ignoreMap":44},[49,168851,168852,168854,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874,168876,168878],{"class":51,"line":52},[49,168853,107896],{"class":59},[49,168855,146854],{"class":66},[49,168857,228],{"class":55},[49,168859,146859],{"class":328},[49,168861,12525],{"class":55},[49,168863,146864],{"class":328},[49,168865,12525],{"class":55},[49,168867,146869],{"class":126},[49,168869,60],{"class":59},[49,168871,146874],{"class":328},[49,168873,13804],{"class":55},[49,168875,31472],{"class":59},[49,168877,148216],{"class":126},[49,168879,3831],{"class":55},[49,168881,168882,168884,168886,168888],{"class":51,"line":84},[49,168883,146886],{"class":55},[49,168885,60],{"class":59},[49,168887,148216],{"class":126},[49,168889,168564],{"class":55},[49,168891,168892,168894],{"class":51,"line":109},[49,168893,31388],{"class":66},[49,168895,168571],{"class":55},[14,168897,168898],{},"等价于打开文件、读取、最后关闭，但更安全。",[166,168900,168902],{"id":168901},"_86-写入文件","8.6 写入文件",[14,168904,168905,168907],{},[46,168906,1014],{}," 模式会清空原文件。",[39,168909,168911],{"className":41,"code":168910,"language":43,"meta":44,"style":44},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[46,168912,168913,168943,168960],{"__ignoreMap":44},[49,168914,168915,168917,168919,168921,168923,168925,168927,168929,168931,168933,168935,168937,168939,168941],{"class":51,"line":52},[49,168916,107896],{"class":59},[49,168918,146854],{"class":66},[49,168920,228],{"class":55},[49,168922,146859],{"class":328},[49,168924,12525],{"class":55},[49,168926,152039],{"class":328},[49,168928,12525],{"class":55},[49,168930,146869],{"class":126},[49,168932,60],{"class":59},[49,168934,146874],{"class":328},[49,168936,13804],{"class":55},[49,168938,31472],{"class":59},[49,168940,148216],{"class":126},[49,168942,3831],{"class":55},[49,168944,168945,168948,168951,168954,168956,168958],{"class":51,"line":84},[49,168946,168947],{"class":126},"    file",[49,168949,168950],{"class":55},".write(",[49,168952,168953],{"class":328},"\"hello",[49,168955,156588],{"class":66},[49,168957,474],{"class":328},[49,168959,81],{"class":55},[49,168961,168962,168964,168966,168969,168971,168973],{"class":51,"line":109},[49,168963,168947],{"class":126},[49,168965,168950],{"class":55},[49,168967,168968],{"class":328},"\"python",[49,168970,156588],{"class":66},[49,168972,474],{"class":328},[49,168974,81],{"class":55},[14,168976,168977],{},"写入多行：",[39,168979,168981],{"className":41,"code":168980,"language":43,"meta":44,"style":44},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[46,168982,168983,169018,169022,169053],{"__ignoreMap":44},[49,168984,168985,168987,168989,168991,168994,168996,168998,169000,169003,169005,169007,169009,169012,169014,169016],{"class":51,"line":52},[49,168986,168714],{"class":55},[49,168988,60],{"class":59},[49,168990,52315],{"class":55},[49,168992,168993],{"class":328},"\"小明,18",[49,168995,156588],{"class":66},[49,168997,474],{"class":328},[49,168999,12525],{"class":55},[49,169001,169002],{"class":328},"\"小红,17",[49,169004,156588],{"class":66},[49,169006,474],{"class":328},[49,169008,12525],{"class":55},[49,169010,169011],{"class":328},"\"小刚,19",[49,169013,156588],{"class":66},[49,169015,474],{"class":328},[49,169017,33335],{"class":55},[49,169019,169020],{"class":51,"line":84},[49,169021,2492],{"emptyLinePlaceholder":151},[49,169023,169024,169026,169028,169030,169033,169035,169037,169039,169041,169043,169045,169047,169049,169051],{"class":51,"line":109},[49,169025,107896],{"class":59},[49,169027,146854],{"class":66},[49,169029,228],{"class":55},[49,169031,169032],{"class":328},"\"students.txt\"",[49,169034,12525],{"class":55},[49,169036,152039],{"class":328},[49,169038,12525],{"class":55},[49,169040,146869],{"class":126},[49,169042,60],{"class":59},[49,169044,146874],{"class":328},[49,169046,13804],{"class":55},[49,169048,31472],{"class":59},[49,169050,148216],{"class":126},[49,169052,3831],{"class":55},[49,169054,169055,169057],{"class":51,"line":120},[49,169056,168947],{"class":126},[49,169058,169059],{"class":55},".writelines(lines)\n",[166,169061,169063],{"id":169062},"_87-追加文件","8.7 追加文件",[14,169065,169066,169068],{},[46,169067,56],{}," 模式不会清空原内容，而是在末尾追加。",[39,169070,169072],{"className":41,"code":169071,"language":43,"meta":44,"style":44},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[46,169073,169074,169105],{"__ignoreMap":44},[49,169075,169076,169078,169080,169082,169085,169087,169089,169091,169093,169095,169097,169099,169101,169103],{"class":51,"line":52},[49,169077,107896],{"class":59},[49,169079,146854],{"class":66},[49,169081,228],{"class":55},[49,169083,169084],{"class":328},"\"log.txt\"",[49,169086,12525],{"class":55},[49,169088,165388],{"class":328},[49,169090,12525],{"class":55},[49,169092,146869],{"class":126},[49,169094,60],{"class":59},[49,169096,146874],{"class":328},[49,169098,13804],{"class":55},[49,169100,31472],{"class":59},[49,169102,148216],{"class":126},[49,169104,3831],{"class":55},[49,169106,169107,169109,169111,169114,169116,169118],{"class":51,"line":84},[49,169108,168947],{"class":126},[49,169110,168950],{"class":55},[49,169112,169113],{"class":328},"\"程序启动",[49,169115,156588],{"class":66},[49,169117,474],{"class":328},[49,169119,81],{"class":55},[14,169121,169122],{},"日志类文件常用追加模式。",[166,169124,169126],{"id":169125},"_88-文件编码","8.8 文件编码",[14,169128,169129],{},"编码决定文字如何保存为字节。",[14,169131,169132],{},"常见编码：",[178,169134,169135,169138],{},[181,169136,169137],{},"UTF-8：推荐。",[181,169139,169140],{},"GBK：部分 Windows 中文文件常见。",[14,169142,169143],{},"读取文件乱码时，可以尝试：",[39,169145,169147],{"className":41,"code":169146,"language":43,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[46,169148,169149,169180],{"__ignoreMap":44},[49,169150,169151,169153,169155,169157,169159,169161,169163,169165,169167,169169,169172,169174,169176,169178],{"class":51,"line":52},[49,169152,107896],{"class":59},[49,169154,146854],{"class":66},[49,169156,228],{"class":55},[49,169158,146859],{"class":328},[49,169160,12525],{"class":55},[49,169162,146864],{"class":328},[49,169164,12525],{"class":55},[49,169166,146869],{"class":126},[49,169168,60],{"class":59},[49,169170,169171],{"class":328},"\"gbk\"",[49,169173,13804],{"class":55},[49,169175,31472],{"class":59},[49,169177,148216],{"class":126},[49,169179,3831],{"class":55},[49,169181,169182,169184,169186,169188],{"class":51,"line":84},[49,169183,146886],{"class":55},[49,169185,60],{"class":59},[49,169187,148216],{"class":126},[49,169189,168564],{"class":55},[14,169191,169192],{},"写文件时建议统一 UTF-8：",[39,169194,169196],{"className":41,"code":169195,"language":43,"meta":44,"style":44},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[46,169197,169198,169228],{"__ignoreMap":44},[49,169199,169200,169202,169204,169206,169208,169210,169212,169214,169216,169218,169220,169222,169224,169226],{"class":51,"line":52},[49,169201,107896],{"class":59},[49,169203,146854],{"class":66},[49,169205,228],{"class":55},[49,169207,146859],{"class":328},[49,169209,12525],{"class":55},[49,169211,152039],{"class":328},[49,169213,12525],{"class":55},[49,169215,146869],{"class":126},[49,169217,60],{"class":59},[49,169219,146874],{"class":328},[49,169221,13804],{"class":55},[49,169223,31472],{"class":59},[49,169225,148216],{"class":126},[49,169227,3831],{"class":55},[49,169229,169230,169232,169234,169237],{"class":51,"line":84},[49,169231,168947],{"class":126},[49,169233,168950],{"class":55},[49,169235,169236],{"class":328},"\"中文内容\"",[49,169238,81],{"class":55},[166,169240,169242],{"id":169241},"_89-pathlib","8.9 pathlib",[14,169244,169245,169248],{},[46,169246,169247],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[39,169250,169252],{"className":41,"code":169251,"language":43,"meta":44,"style":44},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[46,169253,169254,169264,169268,169286],{"__ignoreMap":44},[49,169255,169256,169258,169260,169262],{"class":51,"line":52},[49,169257,30826],{"class":59},[49,169259,108374],{"class":55},[49,169261,30481],{"class":59},[49,169263,108379],{"class":55},[49,169265,169266],{"class":51,"line":84},[49,169267,2492],{"emptyLinePlaceholder":151},[49,169269,169270,169272,169274,169276,169279,169281,169283],{"class":51,"line":109},[49,169271,168374],{"class":55},[49,169273,60],{"class":59},[49,169275,108608],{"class":55},[49,169277,169278],{"class":328},"\"data\"",[49,169280,13804],{"class":55},[49,169282,803],{"class":59},[49,169284,169285],{"class":328}," \"students.txt\"\n",[49,169287,169288,169290],{"class":51,"line":120},[49,169289,30504],{"class":66},[49,169291,169292],{"class":55},"(path)\n",[14,169294,169295],{},"创建目录：",[39,169297,169299],{"className":41,"code":169298,"language":43,"meta":44,"style":44},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[46,169300,169301,169311,169315,169328],{"__ignoreMap":44},[49,169302,169303,169305,169307,169309],{"class":51,"line":52},[49,169304,30826],{"class":59},[49,169306,108374],{"class":55},[49,169308,30481],{"class":59},[49,169310,108379],{"class":55},[49,169312,169313],{"class":51,"line":84},[49,169314,2492],{"emptyLinePlaceholder":151},[49,169316,169317,169320,169322,169324,169326],{"class":51,"line":109},[49,169318,169319],{"class":55},"data_dir ",[49,169321,60],{"class":59},[49,169323,108608],{"class":55},[49,169325,169278],{"class":328},[49,169327,81],{"class":55},[49,169329,169330,169333,169336,169338,169340],{"class":51,"line":120},[49,169331,169332],{"class":55},"data_dir.mkdir(",[49,169334,169335],{"class":126},"exist_ok",[49,169337,60],{"class":59},[49,169339,31565],{"class":66},[49,169341,81],{"class":55},[14,169343,169344],{},"判断文件是否存在：",[39,169346,169348],{"className":41,"code":169347,"language":43,"meta":44,"style":44},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[46,169349,169350,169363,169367,169374],{"__ignoreMap":44},[49,169351,169352,169354,169356,169358,169361],{"class":51,"line":52},[49,169353,168374],{"class":55},[49,169355,60],{"class":59},[49,169357,108608],{"class":55},[49,169359,169360],{"class":328},"\"data\u002Fstudents.txt\"",[49,169362,81],{"class":55},[49,169364,169365],{"class":51,"line":84},[49,169366,2492],{"emptyLinePlaceholder":151},[49,169368,169369,169371],{"class":51,"line":109},[49,169370,1623],{"class":59},[49,169372,169373],{"class":55}," path.exists():\n",[49,169375,169376,169378,169380,169383],{"class":51,"line":120},[49,169377,31388],{"class":66},[49,169379,228],{"class":55},[49,169381,169382],{"class":328},"\"文件存在\"",[49,169384,81],{"class":55},[14,169386,169387],{},"读写文本：",[39,169389,169391],{"className":41,"code":169390,"language":43,"meta":44,"style":44},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[46,169392,169393,169405,169409,169426,169443],{"__ignoreMap":44},[49,169394,169395,169397,169399,169401,169403],{"class":51,"line":52},[49,169396,168374],{"class":55},[49,169398,60],{"class":59},[49,169400,108608],{"class":55},[49,169402,146859],{"class":328},[49,169404,81],{"class":55},[49,169406,169407],{"class":51,"line":84},[49,169408,2492],{"emptyLinePlaceholder":151},[49,169410,169411,169414,169416,169418,169420,169422,169424],{"class":51,"line":109},[49,169412,169413],{"class":55},"path.write_text(",[49,169415,145939],{"class":328},[49,169417,12525],{"class":55},[49,169419,146869],{"class":126},[49,169421,60],{"class":59},[49,169423,146874],{"class":328},[49,169425,81],{"class":55},[49,169427,169428,169430,169432,169435,169437,169439,169441],{"class":51,"line":120},[49,169429,168557],{"class":55},[49,169431,60],{"class":59},[49,169433,169434],{"class":55}," path.read_text(",[49,169436,146869],{"class":126},[49,169438,60],{"class":59},[49,169440,146874],{"class":328},[49,169442,81],{"class":55},[49,169444,169445,169447],{"class":51,"line":135},[49,169446,30504],{"class":66},[49,169448,168571],{"class":55},[166,169450,169452],{"id":169451},"_810-json文件","8.10 JSON文件",[14,169454,169455],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[39,169457,169459],{"className":41,"code":169458,"language":43,"meta":44,"style":44},"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",[46,169460,169461,169467,169471,169479,169489,169499,169507,169511,169515,169540],{"__ignoreMap":44},[49,169462,169463,169465],{"class":51,"line":52},[49,169464,30481],{"class":59},[49,169466,147154],{"class":55},[49,169468,169469],{"class":51,"line":84},[49,169470,2492],{"emptyLinePlaceholder":151},[49,169472,169473,169475,169477],{"class":51,"line":109},[49,169474,149544],{"class":55},[49,169476,60],{"class":59},[49,169478,15662],{"class":55},[49,169480,169481,169483,169485,169487],{"class":51,"line":120},[49,169482,147083],{"class":328},[49,169484,51526],{"class":55},[49,169486,149951],{"class":328},[49,169488,31555],{"class":55},[49,169490,169491,169493,169495,169497],{"class":51,"line":135},[49,169492,164600],{"class":328},[49,169494,51526],{"class":55},[49,169496,869],{"class":66},[49,169498,31555],{"class":55},[49,169500,169501,169503,169505],{"class":51,"line":1306},[49,169502,164611],{"class":328},[49,169504,51526],{"class":55},[49,169506,164616],{"class":66},[49,169508,169509],{"class":51,"line":1312},[49,169510,1657],{"class":55},[49,169512,169513],{"class":51,"line":1403},[49,169514,2492],{"emptyLinePlaceholder":151},[49,169516,169517,169519,169521,169524,169526,169528,169530,169532,169534,169536,169538],{"class":51,"line":1409},[49,169518,156507],{"class":55},[49,169520,60],{"class":59},[49,169522,169523],{"class":55}," json.dumps(student, ",[49,169525,147200],{"class":126},[49,169527,60],{"class":59},[49,169529,34076],{"class":66},[49,169531,12525],{"class":55},[49,169533,152075],{"class":126},[49,169535,60],{"class":59},[49,169537,301],{"class":66},[49,169539,81],{"class":55},[49,169541,169542,169544],{"class":51,"line":1421},[49,169543,30504],{"class":66},[49,169545,164134],{"class":55},[14,169547,169548],{},"写入 JSON 文件：",[39,169550,169552],{"className":41,"code":169551,"language":43,"meta":44,"style":44},"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",[46,169553,169554,169560,169564,169572,169600,169628,169632,169636,169666],{"__ignoreMap":44},[49,169555,169556,169558],{"class":51,"line":52},[49,169557,30481],{"class":59},[49,169559,147154],{"class":55},[49,169561,169562],{"class":51,"line":84},[49,169563,2492],{"emptyLinePlaceholder":151},[49,169565,169566,169568,169570],{"class":51,"line":109},[49,169567,159779],{"class":55},[49,169569,60],{"class":59},[49,169571,55536],{"class":55},[49,169573,169574,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598],{"class":51,"line":120},[49,169575,148448],{"class":55},[49,169577,62768],{"class":328},[49,169579,51526],{"class":55},[49,169581,149951],{"class":328},[49,169583,12525],{"class":55},[49,169585,69213],{"class":328},[49,169587,51526],{"class":55},[49,169589,869],{"class":66},[49,169591,12525],{"class":55},[49,169593,151535],{"class":328},[49,169595,51526],{"class":55},[49,169597,1208],{"class":66},[49,169599,5021],{"class":55},[49,169601,169602,169604,169606,169608,169610,169612,169614,169616,169618,169620,169622,169624,169626],{"class":51,"line":135},[49,169603,148448],{"class":55},[49,169605,62768],{"class":328},[49,169607,51526],{"class":55},[49,169609,150999],{"class":328},[49,169611,12525],{"class":55},[49,169613,69213],{"class":328},[49,169615,51526],{"class":55},[49,169617,844],{"class":66},[49,169619,12525],{"class":55},[49,169621,151535],{"class":328},[49,169623,51526],{"class":55},[49,169625,1030],{"class":66},[49,169627,5021],{"class":55},[49,169629,169630],{"class":51,"line":1306},[49,169631,33335],{"class":55},[49,169633,169634],{"class":51,"line":1312},[49,169635,2492],{"emptyLinePlaceholder":151},[49,169637,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664],{"class":51,"line":1403},[49,169639,107896],{"class":59},[49,169641,146854],{"class":66},[49,169643,228],{"class":55},[49,169645,151894],{"class":328},[49,169647,12525],{"class":55},[49,169649,152039],{"class":328},[49,169651,12525],{"class":55},[49,169653,146869],{"class":126},[49,169655,60],{"class":59},[49,169657,146874],{"class":328},[49,169659,13804],{"class":55},[49,169661,31472],{"class":59},[49,169663,148216],{"class":126},[49,169665,3831],{"class":55},[49,169667,169668,169671,169673,169675,169677,169679,169681,169683,169685,169687,169689],{"class":51,"line":1409},[49,169669,169670],{"class":55},"    json.dump(students, ",[49,169672,45443],{"class":126},[49,169674,12525],{"class":55},[49,169676,147200],{"class":126},[49,169678,60],{"class":59},[49,169680,34076],{"class":66},[49,169682,12525],{"class":55},[49,169684,152075],{"class":126},[49,169686,60],{"class":59},[49,169688,301],{"class":66},[49,169690,81],{"class":55},[14,169692,169693],{},"读取 JSON 文件：",[39,169695,169697],{"className":41,"code":169696,"language":43,"meta":44,"style":44},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[46,169698,169699,169705,169709,169739,169751,169755],{"__ignoreMap":44},[49,169700,169701,169703],{"class":51,"line":52},[49,169702,30481],{"class":59},[49,169704,147154],{"class":55},[49,169706,169707],{"class":51,"line":84},[49,169708,2492],{"emptyLinePlaceholder":151},[49,169710,169711,169713,169715,169717,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737],{"class":51,"line":109},[49,169712,107896],{"class":59},[49,169714,146854],{"class":66},[49,169716,228],{"class":55},[49,169718,151894],{"class":328},[49,169720,12525],{"class":55},[49,169722,146864],{"class":328},[49,169724,12525],{"class":55},[49,169726,146869],{"class":126},[49,169728,60],{"class":59},[49,169730,146874],{"class":328},[49,169732,13804],{"class":55},[49,169734,31472],{"class":59},[49,169736,148216],{"class":126},[49,169738,3831],{"class":55},[49,169740,169741,169743,169745,169747,169749],{"class":51,"line":120},[49,169742,153100],{"class":55},[49,169744,60],{"class":59},[49,169746,148227],{"class":55},[49,169748,45443],{"class":126},[49,169750,81],{"class":55},[49,169752,169753],{"class":51,"line":135},[49,169754,2492],{"emptyLinePlaceholder":151},[49,169756,169757,169759],{"class":51,"line":1306},[49,169758,30504],{"class":66},[49,169760,165058],{"class":55},[166,169762,169764],{"id":169763},"_811-csv文件","8.11 CSV文件",[14,169766,169767],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169769,169770],{},"写入 CSV：",[39,169772,169774],{"className":41,"code":169773,"language":43,"meta":44,"style":44},"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",[46,169775,169776,169783,169787,169795,169813,169829,169845,169849,169853,169893,169907],{"__ignoreMap":44},[49,169777,169778,169780],{"class":51,"line":52},[49,169779,30481],{"class":59},[49,169781,169782],{"class":55}," csv\n",[49,169784,169785],{"class":51,"line":84},[49,169786,2492],{"emptyLinePlaceholder":151},[49,169788,169789,169791,169793],{"class":51,"line":109},[49,169790,159779],{"class":55},[49,169792,60],{"class":59},[49,169794,55536],{"class":55},[49,169796,169797,169800,169802,169804,169806,169808,169811],{"class":51,"line":120},[49,169798,169799],{"class":55},"    [",[49,169801,73188],{"class":328},[49,169803,12525],{"class":55},[49,169805,73221],{"class":328},[49,169807,12525],{"class":55},[49,169809,169810],{"class":328},"\"成绩\"",[49,169812,87925],{"class":55},[49,169814,169815,169817,169819,169821,169823,169825,169827],{"class":51,"line":135},[49,169816,169799],{"class":55},[49,169818,149951],{"class":328},[49,169820,12525],{"class":55},[49,169822,869],{"class":66},[49,169824,12525],{"class":55},[49,169826,1208],{"class":66},[49,169828,87925],{"class":55},[49,169830,169831,169833,169835,169837,169839,169841,169843],{"class":51,"line":1306},[49,169832,169799],{"class":55},[49,169834,150999],{"class":328},[49,169836,12525],{"class":55},[49,169838,844],{"class":66},[49,169840,12525],{"class":55},[49,169842,1030],{"class":66},[49,169844,87925],{"class":55},[49,169846,169847],{"class":51,"line":1312},[49,169848,33335],{"class":55},[49,169850,169851],{"class":51,"line":1403},[49,169852,2492],{"emptyLinePlaceholder":151},[49,169854,169855,169857,169859,169861,169864,169866,169868,169870,169872,169874,169876,169878,169881,169883,169885,169887,169889,169891],{"class":51,"line":1409},[49,169856,107896],{"class":59},[49,169858,146854],{"class":66},[49,169860,228],{"class":55},[49,169862,169863],{"class":328},"\"students.csv\"",[49,169865,12525],{"class":55},[49,169867,152039],{"class":328},[49,169869,12525],{"class":55},[49,169871,146869],{"class":126},[49,169873,60],{"class":59},[49,169875,146874],{"class":328},[49,169877,12525],{"class":55},[49,169879,169880],{"class":126},"newline",[49,169882,60],{"class":59},[49,169884,7742],{"class":328},[49,169886,13804],{"class":55},[49,169888,31472],{"class":59},[49,169890,148216],{"class":126},[49,169892,3831],{"class":55},[49,169894,169895,169898,169900,169903,169905],{"class":51,"line":1421},[49,169896,169897],{"class":55},"    writer ",[49,169899,60],{"class":59},[49,169901,169902],{"class":55}," csv.writer(",[49,169904,45443],{"class":126},[49,169906,81],{"class":55},[49,169908,169909],{"class":51,"line":1704},[49,169910,169911],{"class":55},"    writer.writerows(students)\n",[14,169913,169914],{},"读取 CSV：",[39,169916,169918],{"className":41,"code":169917,"language":43,"meta":44,"style":44},"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",[46,169919,169920,169926,169930,169960,169974,169986],{"__ignoreMap":44},[49,169921,169922,169924],{"class":51,"line":52},[49,169923,30481],{"class":59},[49,169925,169782],{"class":55},[49,169927,169928],{"class":51,"line":84},[49,169929,2492],{"emptyLinePlaceholder":151},[49,169931,169932,169934,169936,169938,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958],{"class":51,"line":109},[49,169933,107896],{"class":59},[49,169935,146854],{"class":66},[49,169937,228],{"class":55},[49,169939,169863],{"class":328},[49,169941,12525],{"class":55},[49,169943,146864],{"class":328},[49,169945,12525],{"class":55},[49,169947,146869],{"class":126},[49,169949,60],{"class":59},[49,169951,146874],{"class":328},[49,169953,13804],{"class":55},[49,169955,31472],{"class":59},[49,169957,148216],{"class":126},[49,169959,3831],{"class":55},[49,169961,169962,169965,169967,169970,169972],{"class":51,"line":120},[49,169963,169964],{"class":55},"    reader ",[49,169966,60],{"class":59},[49,169968,169969],{"class":55}," csv.reader(",[49,169971,45443],{"class":126},[49,169973,81],{"class":55},[49,169975,169976,169978,169981,169983],{"class":51,"line":135},[49,169977,3293],{"class":59},[49,169979,169980],{"class":55}," row ",[49,169982,26134],{"class":59},[49,169984,169985],{"class":55}," reader:\n",[49,169987,169988,169990],{"class":51,"line":1306},[49,169989,32540],{"class":66},[49,169991,169992],{"class":55},"(row)\n",[14,169994,169995],{},"使用字典写入：",[39,169997,169999],{"className":41,"code":169998,"language":43,"meta":44,"style":44},"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",[46,170000,170001,170007,170011,170019,170047,170075,170079,170083,170121,170142,170163,170168],{"__ignoreMap":44},[49,170002,170003,170005],{"class":51,"line":52},[49,170004,30481],{"class":59},[49,170006,169782],{"class":55},[49,170008,170009],{"class":51,"line":84},[49,170010,2492],{"emptyLinePlaceholder":151},[49,170012,170013,170015,170017],{"class":51,"line":109},[49,170014,159779],{"class":55},[49,170016,60],{"class":59},[49,170018,55536],{"class":55},[49,170020,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045],{"class":51,"line":120},[49,170022,148448],{"class":55},[49,170024,62768],{"class":328},[49,170026,51526],{"class":55},[49,170028,149951],{"class":328},[49,170030,12525],{"class":55},[49,170032,69213],{"class":328},[49,170034,51526],{"class":55},[49,170036,869],{"class":66},[49,170038,12525],{"class":55},[49,170040,151535],{"class":328},[49,170042,51526],{"class":55},[49,170044,1208],{"class":66},[49,170046,5021],{"class":55},[49,170048,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069,170071,170073],{"class":51,"line":135},[49,170050,148448],{"class":55},[49,170052,62768],{"class":328},[49,170054,51526],{"class":55},[49,170056,150999],{"class":328},[49,170058,12525],{"class":55},[49,170060,69213],{"class":328},[49,170062,51526],{"class":55},[49,170064,844],{"class":66},[49,170066,12525],{"class":55},[49,170068,151535],{"class":328},[49,170070,51526],{"class":55},[49,170072,1030],{"class":66},[49,170074,5021],{"class":55},[49,170076,170077],{"class":51,"line":1306},[49,170078,33335],{"class":55},[49,170080,170081],{"class":51,"line":1312},[49,170082,2492],{"emptyLinePlaceholder":151},[49,170084,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113,170115,170117,170119],{"class":51,"line":1403},[49,170086,107896],{"class":59},[49,170088,146854],{"class":66},[49,170090,228],{"class":55},[49,170092,169863],{"class":328},[49,170094,12525],{"class":55},[49,170096,152039],{"class":328},[49,170098,12525],{"class":55},[49,170100,146869],{"class":126},[49,170102,60],{"class":59},[49,170104,146874],{"class":328},[49,170106,12525],{"class":55},[49,170108,169880],{"class":126},[49,170110,60],{"class":59},[49,170112,7742],{"class":328},[49,170114,13804],{"class":55},[49,170116,31472],{"class":59},[49,170118,148216],{"class":126},[49,170120,3831],{"class":55},[49,170122,170123,170126,170128,170130,170132,170134,170136,170138,170140],{"class":51,"line":1409},[49,170124,170125],{"class":55},"    fieldnames ",[49,170127,60],{"class":59},[49,170129,52315],{"class":55},[49,170131,62768],{"class":328},[49,170133,12525],{"class":55},[49,170135,69213],{"class":328},[49,170137,12525],{"class":55},[49,170139,151535],{"class":328},[49,170141,33335],{"class":55},[49,170143,170144,170146,170148,170151,170153,170155,170158,170160],{"class":51,"line":1421},[49,170145,169897],{"class":55},[49,170147,60],{"class":59},[49,170149,170150],{"class":55}," csv.DictWriter(",[49,170152,45443],{"class":126},[49,170154,12525],{"class":55},[49,170156,170157],{"class":126},"fieldnames",[49,170159,60],{"class":59},[49,170161,170162],{"class":55},"fieldnames)\n",[49,170164,170165],{"class":51,"line":1704},[49,170166,170167],{"class":55},"    writer.writeheader()\n",[49,170169,170170],{"class":51,"line":1709},[49,170171,169911],{"class":55},[166,170173,170175],{"id":170174},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170177,123355],{},[178,170179,170180,170183,170186],{},[181,170181,170182],{},"读取文本文件。",[181,170184,170185],{},"统计每个单词出现次数。",[181,170187,170188],{},"输出出现次数最多的前 10 个单词。",[14,170190,10125],{},[39,170192,170194],{"className":41,"code":170193,"language":43,"meta":44,"style":44},"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",[46,170195,170196,170206,170210,170223,170239,170243,170253,170262,170266,170278,170298,170307,170311,170329,170333,170363,170367,170383],{"__ignoreMap":44},[49,170197,170198,170200,170202,170204],{"class":51,"line":52},[49,170199,30826],{"class":59},[49,170201,108374],{"class":55},[49,170203,30481],{"class":59},[49,170205,108379],{"class":55},[49,170207,170208],{"class":51,"line":84},[49,170209,2492],{"emptyLinePlaceholder":151},[49,170211,170212,170214,170216,170218,170221],{"class":51,"line":109},[49,170213,168374],{"class":55},[49,170215,60],{"class":59},[49,170217,108608],{"class":55},[49,170219,170220],{"class":328},"\"article.txt\"",[49,170222,81],{"class":55},[49,170224,170225,170227,170229,170231,170233,170235,170237],{"class":51,"line":120},[49,170226,168557],{"class":55},[49,170228,60],{"class":59},[49,170230,169434],{"class":55},[49,170232,146869],{"class":126},[49,170234,60],{"class":59},[49,170236,146874],{"class":328},[49,170238,81],{"class":55},[49,170240,170241],{"class":51,"line":135},[49,170242,2492],{"emptyLinePlaceholder":151},[49,170244,170245,170248,170250],{"class":51,"line":1306},[49,170246,170247],{"class":55},"words ",[49,170249,60],{"class":59},[49,170251,170252],{"class":55}," content.lower().split()\n",[49,170254,170255,170258,170260],{"class":51,"line":1312},[49,170256,170257],{"class":55},"counter ",[49,170259,60],{"class":59},[49,170261,87957],{"class":55},[49,170263,170264],{"class":51,"line":1403},[49,170265,2492],{"emptyLinePlaceholder":151},[49,170267,170268,170270,170273,170275],{"class":51,"line":1409},[49,170269,3117],{"class":59},[49,170271,170272],{"class":55}," word ",[49,170274,26134],{"class":59},[49,170276,170277],{"class":55}," words:\n",[49,170279,170280,170283,170285,170288,170291,170293,170296],{"class":51,"line":1421},[49,170281,170282],{"class":55},"    word ",[49,170284,60],{"class":59},[49,170286,170287],{"class":55}," word.strip(",[49,170289,170290],{"class":328},"\".,!?;:",[49,170292,156558],{"class":66},[49,170294,170295],{"class":328},"'()[]\"",[49,170297,81],{"class":55},[49,170299,170300,170302,170304],{"class":51,"line":1704},[49,170301,3193],{"class":59},[49,170303,39019],{"class":59},[49,170305,170306],{"class":55}," word:\n",[49,170308,170309],{"class":51,"line":1709},[49,170310,148575],{"class":59},[49,170312,170313,170316,170318,170321,170323,170325,170327],{"class":51,"line":1715},[49,170314,170315],{"class":55},"    counter[word] ",[49,170317,60],{"class":59},[49,170319,170320],{"class":55}," counter.get(word, ",[49,170322,415],{"class":66},[49,170324,13804],{"class":55},[49,170326,700],{"class":59},[49,170328,55788],{"class":66},[49,170330,170331],{"class":51,"line":1720},[49,170332,2492],{"emptyLinePlaceholder":151},[49,170334,170335,170338,170340,170342,170345,170347,170349,170351,170353,170355,170357,170359,170361],{"class":51,"line":1734},[49,170336,170337],{"class":55},"items ",[49,170339,60],{"class":59},[49,170341,163667],{"class":66},[49,170343,170344],{"class":55},"(counter.items(), ",[49,170346,154009],{"class":126},[49,170348,154012],{"class":59},[49,170350,154015],{"class":55},[49,170352,441],{"class":66},[49,170354,112265],{"class":55},[49,170356,163591],{"class":126},[49,170358,60],{"class":59},[49,170360,31565],{"class":66},[49,170362,81],{"class":55},[49,170364,170365],{"class":51,"line":1739},[49,170366,2492],{"emptyLinePlaceholder":151},[49,170368,170369,170371,170374,170376,170379,170381],{"class":51,"line":1745},[49,170370,3117],{"class":59},[49,170372,170373],{"class":55}," word, count ",[49,170375,26134],{"class":59},[49,170377,170378],{"class":55}," items[:",[49,170380,95],{"class":66},[49,170382,165818],{"class":55},[49,170384,170385,170387],{"class":51,"line":1766},[49,170386,31388],{"class":66},[49,170388,170389],{"class":55},"(word, count)\n",[166,170391,170393],{"id":170392},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[39,170395,170397],{"className":41,"code":170396,"language":43,"meta":44,"style":44},"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",[46,170398,170399,170405,170415,170419,170431,170435,170439,170447,170457,170463,170467,170497,170507,170511,170515,170523,170553,170577,170581,170585,170593,170622,170627],{"__ignoreMap":44},[49,170400,170401,170403],{"class":51,"line":52},[49,170402,30481],{"class":59},[49,170404,147154],{"class":55},[49,170406,170407,170409,170411,170413],{"class":51,"line":84},[49,170408,30826],{"class":59},[49,170410,108374],{"class":55},[49,170412,30481],{"class":59},[49,170414,108379],{"class":55},[49,170416,170417],{"class":51,"line":109},[49,170418,2492],{"emptyLinePlaceholder":151},[49,170420,170421,170423,170425,170427,170429],{"class":51,"line":120},[49,170422,151887],{"class":66},[49,170424,13654],{"class":59},[49,170426,108608],{"class":55},[49,170428,151894],{"class":328},[49,170430,81],{"class":55},[49,170432,170433],{"class":51,"line":135},[49,170434,2492],{"emptyLinePlaceholder":151},[49,170436,170437],{"class":51,"line":1306},[49,170438,2492],{"emptyLinePlaceholder":151},[49,170440,170441,170443,170445],{"class":51,"line":1312},[49,170442,32036],{"class":59},[49,170444,151911],{"class":2055},[49,170446,32042],{"class":55},[49,170448,170449,170451,170453,170455],{"class":51,"line":1403},[49,170450,3193],{"class":59},[49,170452,39019],{"class":59},[49,170454,151922],{"class":66},[49,170456,151925],{"class":55},[49,170458,170459,170461],{"class":51,"line":1409},[49,170460,14842],{"class":59},[49,170462,51927],{"class":55},[49,170464,170465],{"class":51,"line":1421},[49,170466,2492],{"emptyLinePlaceholder":151},[49,170468,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495],{"class":51,"line":1704},[49,170470,34267],{"class":59},[49,170472,146854],{"class":66},[49,170474,228],{"class":55},[49,170476,151887],{"class":66},[49,170478,12525],{"class":55},[49,170480,146864],{"class":328},[49,170482,12525],{"class":55},[49,170484,146869],{"class":126},[49,170486,60],{"class":59},[49,170488,146874],{"class":328},[49,170490,13804],{"class":55},[49,170492,31472],{"class":59},[49,170494,148216],{"class":126},[49,170496,3831],{"class":55},[49,170498,170499,170501,170503,170505],{"class":51,"line":1709},[49,170500,14842],{"class":59},[49,170502,148227],{"class":55},[49,170504,45443],{"class":126},[49,170506,81],{"class":55},[49,170508,170509],{"class":51,"line":1715},[49,170510,2492],{"emptyLinePlaceholder":151},[49,170512,170513],{"class":51,"line":1720},[49,170514,2492],{"emptyLinePlaceholder":151},[49,170516,170517,170519,170521],{"class":51,"line":1734},[49,170518,32036],{"class":59},[49,170520,152021],{"class":2055},[49,170522,152024],{"class":55},[49,170524,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547,170549,170551],{"class":51,"line":1739},[49,170526,34267],{"class":59},[49,170528,146854],{"class":66},[49,170530,228],{"class":55},[49,170532,151887],{"class":66},[49,170534,12525],{"class":55},[49,170536,152039],{"class":328},[49,170538,12525],{"class":55},[49,170540,146869],{"class":126},[49,170542,60],{"class":59},[49,170544,146874],{"class":328},[49,170546,13804],{"class":55},[49,170548,31472],{"class":59},[49,170550,148216],{"class":126},[49,170552,3831],{"class":55},[49,170554,170555,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575],{"class":51,"line":1745},[49,170556,152060],{"class":55},[49,170558,45443],{"class":126},[49,170560,12525],{"class":55},[49,170562,147200],{"class":126},[49,170564,60],{"class":59},[49,170566,34076],{"class":66},[49,170568,12525],{"class":55},[49,170570,152075],{"class":126},[49,170572,60],{"class":59},[49,170574,301],{"class":66},[49,170576,81],{"class":55},[49,170578,170579],{"class":51,"line":1766},[49,170580,2492],{"emptyLinePlaceholder":151},[49,170582,170583],{"class":51,"line":1771},[49,170584,2492],{"emptyLinePlaceholder":151},[49,170586,170587,170589,170591],{"class":51,"line":1785},[49,170588,159779],{"class":55},[49,170590,60],{"class":59},[49,170592,153105],{"class":55},[49,170594,170595,170598,170600,170602,170604,170606,170608,170610,170612,170614,170616,170618,170620],{"class":51,"line":1790},[49,170596,170597],{"class":55},"students.append({",[49,170599,62768],{"class":328},[49,170601,51526],{"class":55},[49,170603,149951],{"class":328},[49,170605,12525],{"class":55},[49,170607,69213],{"class":328},[49,170609,51526],{"class":55},[49,170611,869],{"class":66},[49,170613,12525],{"class":55},[49,170615,151535],{"class":328},[49,170617,51526],{"class":55},[49,170619,1208],{"class":66},[49,170621,165215],{"class":55},[49,170623,170624],{"class":51,"line":1819},[49,170625,170626],{"class":55},"save_students(students)\n",[49,170628,170629,170631,170633,170636],{"class":51,"line":1824},[49,170630,30504],{"class":66},[49,170632,228],{"class":55},[49,170634,170635],{"class":328},"\"保存成功\"",[49,170637,81],{"class":55},[166,170639,170641],{"id":170640},"_814-易错点","8.14 易错点",[178,170643,170644,170648,170654,170659,170666,170673],{},[181,170645,170646,168907],{},[46,170647,1014],{},[181,170649,170650,170651,28476],{},"读写中文要指定 ",[46,170652,170653],{},"encoding=\"utf-8\"",[181,170655,170656,170657,28476],{},"打开文件后要关闭，推荐使用 ",[46,170658,107896],{},[181,170660,170661,170662,170665],{},"读取大文件不要直接 ",[46,170663,170664],{},"read()"," 全部内容。",[181,170667,170668,170669,170672],{},"Windows 写 CSV 时建议加 ",[46,170670,170671],{},"newline=\"\"","，避免空行。",[181,170674,170675],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[166,170677,170679],{"id":170678},"_815-本章练习","8.15 本章练习",[178,170681,170682,170689,170694,170697,170700],{},[181,170683,170684,170685,170688],{},"写入一个 ",[46,170686,170687],{},"students.txt","，每行保存一个学生姓名。",[181,170690,104418,170691,170693],{},[46,170692,170687],{}," 并输出所有学生。",[181,170695,170696],{},"把学生列表保存为 JSON 文件。",[181,170698,170699],{},"从 JSON 文件读取学生数据，计算平均分。",[181,170701,170702,170703,170706,170707,170710],{},"写一个日志函数 ",[46,170704,170705],{},"write_log(message)","，每次调用向 ",[46,170708,170709],{},"app.log"," 追加一行。",[143,170712,170713],{},"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":44,"searchDepth":84,"depth":84,"links":170715},[170716,170717,170721,170722,170728,170729,170730,170731,170732,170733,170734,170735,170736,170737,170738],{"id":168227,"depth":84,"text":168228},{"id":168268,"depth":84,"text":168269,"children":170718},[170719,170720],{"id":168272,"depth":109,"text":168273},{"id":168306,"depth":109,"text":168307},{"id":168420,"depth":84,"text":168421},{"id":168513,"depth":84,"text":168514,"children":170723},[170724,170725,170726,170727],{"id":168517,"depth":109,"text":168518},{"id":168604,"depth":109,"text":168605},{"id":168674,"depth":109,"text":168675},{"id":168768,"depth":109,"text":168769},{"id":168838,"depth":84,"text":168839},{"id":168901,"depth":84,"text":168902},{"id":169062,"depth":84,"text":169063},{"id":169125,"depth":84,"text":169126},{"id":169241,"depth":84,"text":169242},{"id":169451,"depth":84,"text":169452},{"id":169763,"depth":84,"text":169764},{"id":170174,"depth":84,"text":170175},{"id":170392,"depth":84,"text":170393},{"id":170640,"depth":84,"text":170641},{"id":170678,"depth":84,"text":170679},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168219,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170745,"title":170746,"body":170747,"description":148,"extension":149,"meta":172933,"navigation":151,"path":172934,"seo":172935,"stem":172936,"__hash__":172937},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170748,"toc":172900},[170749,170752,170756,170759,170762,170854,170856,170875,170880,170884,170887,170890,170919,170926,170929,170933,170936,170965,170967,171019,171025,171078,171082,171180,171183,171250,171254,171311,171313,171319,171323,171328,171334,171425,171430,171434,171437,171515,171518,171556,171560,171678,171681,171685,171688,171733,171736,171740,171745,171751,171801,171804,171835,171839,171843,171873,171877,171912,171916,171951,171991,171995,172011,172014,172018,172022,172101,172105,172146,172150,172205,172209,172243,172247,172277,172286,172293,172299,172356,172359,172367,172370,172374,172381,172384,172390,172393,172410,172415,172419,172425,172438,172441,172478,172481,172492,172495,172509,172512,172526,172530,172537,172570,172573,172575,172581,172584,172588,172590,172596,172601,172774,172778,172841,172845,172869,172873,172897],[10,170750,170746],{"id":170751},"_9-异常模块与包",[166,170753,170755],{"id":170754},"_91-什么是异常","9.1 什么是异常",[14,170757,170758],{},"异常是程序运行过程中出现的错误。",[14,170760,170761],{},"常见异常：",[361,170763,170764,170773],{},[364,170765,170766],{},[367,170767,170768,170771],{},[370,170769,170770],{},"异常",[370,170772,25960],{},[408,170774,170775,170785,170795,170804,170814,170824,170834,170844],{},[367,170776,170777,170782],{},[413,170778,170779],{},[46,170780,170781],{},"NameError",[413,170783,170784],{},"使用了未定义变量",[367,170786,170787,170792],{},[413,170788,170789],{},[46,170790,170791],{},"TypeError",[413,170793,170794],{},"类型不匹配",[367,170796,170797,170801],{},[413,170798,170799],{},[46,170800,154897],{},[413,170802,170803],{},"值不合法",[367,170805,170806,170811],{},[413,170807,170808],{},[46,170809,170810],{},"IndexError",[413,170812,170813],{},"列表索引越界",[367,170815,170816,170821],{},[413,170817,170818],{},[46,170819,170820],{},"KeyError",[413,170822,170823],{},"字典 key 不存在",[367,170825,170826,170831],{},[413,170827,170828],{},[46,170829,170830],{},"FileNotFoundError",[413,170832,170833],{},"文件不存在",[367,170835,170836,170841],{},[413,170837,170838],{},[46,170839,170840],{},"ZeroDivisionError",[413,170842,170843],{},"除数为 0",[367,170845,170846,170851],{},[413,170847,170848],{},[46,170849,170850],{},"ImportError",[413,170852,170853],{},"导入失败",[14,170855,15225],{},[39,170857,170859],{"className":41,"code":170858,"language":43,"meta":44,"style":44},"num = int(\"abc\")\n",[46,170860,170861],{"__ignoreMap":44},[49,170862,170863,170865,170867,170869,170871,170873],{"class":51,"line":52},[49,170864,155850],{"class":55},[49,170866,60],{"class":59},[49,170868,2474],{"class":66},[49,170870,228],{"class":55},[49,170872,155943],{"class":328},[49,170874,81],{"class":55},[14,170876,170877,170878,28476],{},"会触发 ",[46,170879,154897],{},[166,170881,170883],{"id":170882},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170885,170886],{},"如果不处理异常，程序会直接终止。",[14,170888,170889],{},"例如用户输入年龄：",[39,170891,170893],{"className":41,"code":170892,"language":43,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[46,170894,170895,170913],{"__ignoreMap":44},[49,170896,170897,170899,170901,170903,170905,170907,170909,170911],{"class":51,"line":52},[49,170898,146609],{"class":55},[49,170900,60],{"class":59},[49,170902,2474],{"class":66},[49,170904,228],{"class":55},[49,170906,53910],{"class":66},[49,170908,228],{"class":55},[49,170910,152457],{"class":328},[49,170912,30586],{"class":55},[49,170914,170915,170917],{"class":51,"line":84},[49,170916,30504],{"class":66},[49,170918,155824],{"class":55},[14,170920,170921,170922,170925],{},"用户输入 ",[46,170923,170924],{},"abc","，程序就会报错退出。",[14,170927,170928],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[166,170930,170932],{"id":170931},"_93-try-except","9.3 try except",[14,170934,170935],{},"基础语法：",[39,170937,170939],{"className":41,"code":170938,"language":43,"meta":44,"style":44},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[46,170940,170941,170948,170953,170960],{"__ignoreMap":44},[49,170942,170943,170946],{"class":51,"line":52},[49,170944,170945],{"class":59},"try",[49,170947,3831],{"class":55},[49,170949,170950],{"class":51,"line":84},[49,170951,170952],{"class":55},"    可能出错的代码\n",[49,170954,170955,170958],{"class":51,"line":109},[49,170956,170957],{"class":59},"except",[49,170959,3831],{"class":55},[49,170961,170962],{"class":51,"line":120},[49,170963,170964],{"class":55},"    出错后的处理代码\n",[14,170966,15225],{},[39,170968,170970],{"className":41,"code":170969,"language":43,"meta":44,"style":44},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[46,170971,170972,170978,170996,171002,171008],{"__ignoreMap":44},[49,170973,170974,170976],{"class":51,"line":52},[49,170975,170945],{"class":59},[49,170977,3831],{"class":55},[49,170979,170980,170982,170984,170986,170988,170990,170992,170994],{"class":51,"line":84},[49,170981,152449],{"class":55},[49,170983,60],{"class":59},[49,170985,2474],{"class":66},[49,170987,228],{"class":55},[49,170989,53910],{"class":66},[49,170991,228],{"class":55},[49,170993,152457],{"class":328},[49,170995,30586],{"class":55},[49,170997,170998,171000],{"class":51,"line":109},[49,170999,31388],{"class":66},[49,171001,155824],{"class":55},[49,171003,171004,171006],{"class":51,"line":120},[49,171005,170957],{"class":59},[49,171007,3831],{"class":55},[49,171009,171010,171012,171014,171017],{"class":51,"line":135},[49,171011,31388],{"class":66},[49,171013,228],{"class":55},[49,171015,171016],{"class":328},"\"年龄必须是数字\"",[49,171018,81],{"class":55},[14,171020,171021,171022,171024],{},"不建议裸写 ",[46,171023,170957],{},"，最好指定异常类型。",[39,171026,171028],{"className":41,"code":171027,"language":43,"meta":44,"style":44},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[46,171029,171030,171036,171054,171060,171068],{"__ignoreMap":44},[49,171031,171032,171034],{"class":51,"line":52},[49,171033,170945],{"class":59},[49,171035,3831],{"class":55},[49,171037,171038,171040,171042,171044,171046,171048,171050,171052],{"class":51,"line":84},[49,171039,152449],{"class":55},[49,171041,60],{"class":59},[49,171043,2474],{"class":66},[49,171045,228],{"class":55},[49,171047,53910],{"class":66},[49,171049,228],{"class":55},[49,171051,152457],{"class":328},[49,171053,30586],{"class":55},[49,171055,171056,171058],{"class":51,"line":109},[49,171057,31388],{"class":66},[49,171059,155824],{"class":55},[49,171061,171062,171064,171066],{"class":51,"line":120},[49,171063,170957],{"class":59},[49,171065,152289],{"class":66},[49,171067,3831],{"class":55},[49,171069,171070,171072,171074,171076],{"class":51,"line":135},[49,171071,31388],{"class":66},[49,171073,228],{"class":55},[49,171075,171016],{"class":328},[49,171077,81],{"class":55},[166,171079,171081],{"id":171080},"_94-捕获多个异常","9.4 捕获多个异常",[39,171083,171085],{"className":41,"code":171084,"language":43,"meta":44,"style":44},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[46,171086,171087,171093,171114,171134,171141,171149,171160,171169],{"__ignoreMap":44},[49,171088,171089,171091],{"class":51,"line":52},[49,171090,170945],{"class":59},[49,171092,3831],{"class":55},[49,171094,171095,171098,171100,171102,171104,171106,171108,171110,171112],{"class":51,"line":84},[49,171096,171097],{"class":55},"    nums ",[49,171099,60],{"class":59},[49,171101,52315],{"class":55},[49,171103,441],{"class":66},[49,171105,12525],{"class":55},[49,171107,301],{"class":66},[49,171109,12525],{"class":55},[49,171111,73],{"class":66},[49,171113,33335],{"class":55},[49,171115,171116,171119,171121,171123,171125,171127,171129,171132],{"class":51,"line":109},[49,171117,171118],{"class":55},"    index ",[49,171120,60],{"class":59},[49,171122,2474],{"class":66},[49,171124,228],{"class":55},[49,171126,53910],{"class":66},[49,171128,228],{"class":55},[49,171130,171131],{"class":328},"\"请输入索引:\"",[49,171133,30586],{"class":55},[49,171135,171136,171138],{"class":51,"line":120},[49,171137,31388],{"class":66},[49,171139,171140],{"class":55},"(nums[index])\n",[49,171142,171143,171145,171147],{"class":51,"line":135},[49,171144,170957],{"class":59},[49,171146,152289],{"class":66},[49,171148,3831],{"class":55},[49,171150,171151,171153,171155,171158],{"class":51,"line":1306},[49,171152,31388],{"class":66},[49,171154,228],{"class":55},[49,171156,171157],{"class":328},"\"索引必须是整数\"",[49,171159,81],{"class":55},[49,171161,171162,171164,171167],{"class":51,"line":1312},[49,171163,170957],{"class":59},[49,171165,171166],{"class":66}," IndexError",[49,171168,3831],{"class":55},[49,171170,171171,171173,171175,171178],{"class":51,"line":1403},[49,171172,31388],{"class":66},[49,171174,228],{"class":55},[49,171176,171177],{"class":328},"\"索引越界\"",[49,171179,81],{"class":55},[14,171181,171182],{},"多个异常使用相同处理逻辑：",[39,171184,171186],{"className":41,"code":171185,"language":43,"meta":44,"style":44},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[46,171187,171188,171194,171212,171225,171239],{"__ignoreMap":44},[49,171189,171190,171192],{"class":51,"line":52},[49,171191,170945],{"class":59},[49,171193,3831],{"class":55},[49,171195,171196,171198,171200,171202,171204,171206,171208,171210],{"class":51,"line":84},[49,171197,45682],{"class":55},[49,171199,60],{"class":59},[49,171201,2474],{"class":66},[49,171203,228],{"class":55},[49,171205,53910],{"class":66},[49,171207,228],{"class":55},[49,171209,155859],{"class":328},[49,171211,30586],{"class":55},[49,171213,171214,171216,171218,171220,171222],{"class":51,"line":109},[49,171215,31388],{"class":66},[49,171217,228],{"class":55},[49,171219,95],{"class":66},[49,171221,156109],{"class":59},[49,171223,171224],{"class":55}," num)\n",[49,171226,171227,171229,171231,171233,171235,171237],{"class":51,"line":120},[49,171228,170957],{"class":59},[49,171230,1750],{"class":55},[49,171232,154897],{"class":66},[49,171234,12525],{"class":55},[49,171236,170840],{"class":66},[49,171238,30875],{"class":55},[49,171240,171241,171243,171245,171248],{"class":51,"line":135},[49,171242,31388],{"class":66},[49,171244,228],{"class":55},[49,171246,171247],{"class":328},"\"输入不合法\"",[49,171249,81],{"class":55},[166,171251,171253],{"id":171252},"_95-获取异常信息","9.5 获取异常信息",[39,171255,171257],{"className":41,"code":171256,"language":43,"meta":44,"style":44},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[46,171258,171259,171265,171279,171290],{"__ignoreMap":44},[49,171260,171261,171263],{"class":51,"line":52},[49,171262,170945],{"class":59},[49,171264,3831],{"class":55},[49,171266,171267,171269,171271,171273,171275,171277],{"class":51,"line":84},[49,171268,45682],{"class":55},[49,171270,60],{"class":59},[49,171272,2474],{"class":66},[49,171274,228],{"class":55},[49,171276,155943],{"class":328},[49,171278,81],{"class":55},[49,171280,171281,171283,171285,171287],{"class":51,"line":109},[49,171282,170957],{"class":59},[49,171284,152289],{"class":66},[49,171286,64693],{"class":59},[49,171288,171289],{"class":55}," e:\n",[49,171291,171292,171294,171296,171298,171301,171303,171305,171307,171309],{"class":51,"line":120},[49,171293,31388],{"class":66},[49,171295,228],{"class":55},[49,171297,277],{"class":59},[49,171299,171300],{"class":328},"\"出错了:",[49,171302,1115],{"class":66},[49,171304,298],{"class":55},[49,171306,1165],{"class":66},[49,171308,474],{"class":328},[49,171310,81],{"class":55},[14,171312,146520],{},[39,171314,171317],{"className":171315,"code":171316,"language":5278,"meta":44},[5276],"出错了:invalid literal for int() with base 10: 'abc'\n",[46,171318,171316],{"__ignoreMap":44},[166,171320,171322],{"id":171321},"_96-else和finally","9.6 else和finally",[14,171324,171325,171327],{},[46,171326,1793],{},"：没有异常时执行。",[14,171329,171330,171333],{},[46,171331,171332],{},"finally","：无论是否异常都会执行。",[39,171335,171337],{"className":41,"code":171336,"language":43,"meta":44,"style":44},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[46,171338,171339,171345,171363,171371,171381,171387,171408,171414],{"__ignoreMap":44},[49,171340,171341,171343],{"class":51,"line":52},[49,171342,170945],{"class":59},[49,171344,3831],{"class":55},[49,171346,171347,171349,171351,171353,171355,171357,171359,171361],{"class":51,"line":84},[49,171348,45682],{"class":55},[49,171350,60],{"class":59},[49,171352,2474],{"class":66},[49,171354,228],{"class":55},[49,171356,53910],{"class":66},[49,171358,228],{"class":55},[49,171360,155859],{"class":328},[49,171362,30586],{"class":55},[49,171364,171365,171367,171369],{"class":51,"line":109},[49,171366,170957],{"class":59},[49,171368,152289],{"class":66},[49,171370,3831],{"class":55},[49,171372,171373,171375,171377,171379],{"class":51,"line":120},[49,171374,31388],{"class":66},[49,171376,228],{"class":55},[49,171378,153277],{"class":328},[49,171380,81],{"class":55},[49,171382,171383,171385],{"class":51,"line":135},[49,171384,1793],{"class":59},[49,171386,3831],{"class":55},[49,171388,171389,171391,171393,171395,171398,171400,171402,171404,171406],{"class":51,"line":1306},[49,171390,31388],{"class":66},[49,171392,228],{"class":55},[49,171394,277],{"class":59},[49,171396,171397],{"class":328},"\"输入正确:",[49,171399,1115],{"class":66},[49,171401,1757],{"class":55},[49,171403,1165],{"class":66},[49,171405,474],{"class":328},[49,171407,81],{"class":55},[49,171409,171410,171412],{"class":51,"line":1312},[49,171411,171332],{"class":59},[49,171413,3831],{"class":55},[49,171415,171416,171418,171420,171423],{"class":51,"line":1403},[49,171417,31388],{"class":66},[49,171419,228],{"class":55},[49,171421,171422],{"class":328},"\"程序结束\"",[49,171424,81],{"class":55},[14,171426,171427,171429],{},[46,171428,171332],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[166,171431,171433],{"id":171432},"_97-抛出异常","9.7 抛出异常",[14,171435,171436],{},"程序可以主动抛出异常。",[39,171438,171440],{"className":41,"code":171439,"language":43,"meta":44,"style":44},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[46,171441,171442,171451,171463,171476,171496,171500,171504],{"__ignoreMap":44},[49,171443,171444,171446,171449],{"class":51,"line":52},[49,171445,32036],{"class":59},[49,171447,171448],{"class":2055}," set_age",[49,171450,161478],{"class":55},[49,171452,171453,171455,171457,171459,171461],{"class":51,"line":84},[49,171454,3193],{"class":59},[49,171456,15797],{"class":55},[49,171458,1129],{"class":59},[49,171460,4185],{"class":66},[49,171462,3831],{"class":55},[49,171464,171465,171467,171469,171471,171474],{"class":51,"line":109},[49,171466,103495],{"class":59},[49,171468,152289],{"class":66},[49,171470,228],{"class":55},[49,171472,171473],{"class":328},"\"年龄不能为负数\"",[49,171475,81],{"class":55},[49,171477,171478,171480,171482,171484,171486,171488,171490,171492,171494],{"class":51,"line":120},[49,171479,31388],{"class":66},[49,171481,228],{"class":55},[49,171483,277],{"class":59},[49,171485,162046],{"class":328},[49,171487,1115],{"class":66},[49,171489,70310],{"class":55},[49,171491,1165],{"class":66},[49,171493,474],{"class":328},[49,171495,81],{"class":55},[49,171497,171498],{"class":51,"line":135},[49,171499,2492],{"emptyLinePlaceholder":151},[49,171501,171502],{"class":51,"line":1306},[49,171503,2492],{"emptyLinePlaceholder":151},[49,171505,171506,171509,171511,171513],{"class":51,"line":1312},[49,171507,171508],{"class":55},"set_age(",[49,171510,751],{"class":59},[49,171512,441],{"class":66},[49,171514,81],{"class":55},[14,171516,171517],{},"调用者可以捕获：",[39,171519,171521],{"className":41,"code":171520,"language":43,"meta":44,"style":44},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[46,171522,171523,171529,171540,171550],{"__ignoreMap":44},[49,171524,171525,171527],{"class":51,"line":52},[49,171526,170945],{"class":59},[49,171528,3831],{"class":55},[49,171530,171531,171534,171536,171538],{"class":51,"line":84},[49,171532,171533],{"class":55},"    set_age(",[49,171535,751],{"class":59},[49,171537,441],{"class":66},[49,171539,81],{"class":55},[49,171541,171542,171544,171546,171548],{"class":51,"line":109},[49,171543,170957],{"class":59},[49,171545,152289],{"class":66},[49,171547,64693],{"class":59},[49,171549,171289],{"class":55},[49,171551,171552,171554],{"class":51,"line":120},[49,171553,31388],{"class":66},[49,171555,67088],{"class":55},[166,171557,171559],{"id":171558},"_98-自定义异常","9.8 自定义异常",[39,171561,171563],{"className":41,"code":171562,"language":43,"meta":44,"style":44},"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",[46,171564,171565,171579,171583,171587,171591,171599,171609,171620,171630,171634,171638,171644,171661,171672],{"__ignoreMap":44},[49,171566,171567,171569,171572,171574,171577],{"class":51,"line":52},[49,171568,14784],{"class":59},[49,171570,171571],{"class":2055}," BalanceNotEnoughError",[49,171573,228],{"class":55},[49,171575,171576],{"class":66},"Exception",[49,171578,30875],{"class":55},[49,171580,171581],{"class":51,"line":84},[49,171582,149600],{"class":59},[49,171584,171585],{"class":51,"line":109},[49,171586,2492],{"emptyLinePlaceholder":151},[49,171588,171589],{"class":51,"line":120},[49,171590,2492],{"emptyLinePlaceholder":151},[49,171592,171593,171595,171597],{"class":51,"line":135},[49,171594,32036],{"class":59},[49,171596,150249],{"class":2055},[49,171598,162875],{"class":55},[49,171600,171601,171603,171605,171607],{"class":51,"line":1306},[49,171602,3193],{"class":59},[49,171604,150205],{"class":55},[49,171606,1179],{"class":59},[49,171608,162652],{"class":55},[49,171610,171611,171613,171616,171618],{"class":51,"line":1312},[49,171612,103495],{"class":59},[49,171614,171615],{"class":55}," BalanceNotEnoughError(",[49,171617,150300],{"class":328},[49,171619,81],{"class":55},[49,171621,171622,171624,171626,171628],{"class":51,"line":1403},[49,171623,4182],{"class":59},[49,171625,162882],{"class":55},[49,171627,751],{"class":59},[49,171629,150238],{"class":55},[49,171631,171632],{"class":51,"line":1409},[49,171633,2492],{"emptyLinePlaceholder":151},[49,171635,171636],{"class":51,"line":1421},[49,171637,2492],{"emptyLinePlaceholder":151},[49,171639,171640,171642],{"class":51,"line":1704},[49,171641,170945],{"class":59},[49,171643,3831],{"class":55},[49,171645,171646,171648,171650,171653,171655,171657,171659],{"class":51,"line":1709},[49,171647,162553],{"class":55},[49,171649,60],{"class":59},[49,171651,171652],{"class":55}," withdraw(",[49,171654,533],{"class":66},[49,171656,12525],{"class":55},[49,171658,1814],{"class":66},[49,171660,81],{"class":55},[49,171662,171663,171665,171668,171670],{"class":51,"line":1715},[49,171664,170957],{"class":59},[49,171666,171667],{"class":55}," BalanceNotEnoughError ",[49,171669,31472],{"class":59},[49,171671,171289],{"class":55},[49,171673,171674,171676],{"class":51,"line":1720},[49,171675,31388],{"class":66},[49,171677,67088],{"class":55},[14,171679,171680],{},"入门阶段大多数情况使用内置异常即可。",[166,171682,171684],{"id":171683},"_99-traceback","9.9 traceback",[14,171686,171687],{},"调试时可以输出完整异常堆栈。",[39,171689,171691],{"className":41,"code":171690,"language":43,"meta":44,"style":44},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[46,171692,171693,171700,171704,171710,171720,171728],{"__ignoreMap":44},[49,171694,171695,171697],{"class":51,"line":52},[49,171696,30481],{"class":59},[49,171698,171699],{"class":55}," traceback\n",[49,171701,171702],{"class":51,"line":84},[49,171703,2492],{"emptyLinePlaceholder":151},[49,171705,171706,171708],{"class":51,"line":109},[49,171707,170945],{"class":59},[49,171709,3831],{"class":55},[49,171711,171712,171714,171716,171718],{"class":51,"line":120},[49,171713,2077],{"class":66},[49,171715,228],{"class":55},[49,171717,155943],{"class":328},[49,171719,81],{"class":55},[49,171721,171722,171724,171726],{"class":51,"line":135},[49,171723,170957],{"class":59},[49,171725,152289],{"class":66},[49,171727,3831],{"class":55},[49,171729,171730],{"class":51,"line":1306},[49,171731,171732],{"class":55},"    traceback.print_exc()\n",[14,171734,171735],{},"日志系统中常把异常堆栈记录到文件。",[166,171737,171739],{"id":171738},"_910-什么是模块","9.10 什么是模块",[14,171741,171742,171743,126046],{},"模块就是一个 ",[46,171744,146415],{},[14,171746,171747,171748,24709],{},"例如创建 ",[46,171749,171750],{},"my_math.py",[39,171752,171754],{"className":41,"code":171753,"language":43,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[46,171755,171756,171764,171774,171778,171782,171791],{"__ignoreMap":44},[49,171757,171758,171760,171762],{"class":51,"line":52},[49,171759,32036],{"class":59},[49,171761,5300],{"class":2055},[49,171763,151156],{"class":55},[49,171765,171766,171768,171770,171772],{"class":51,"line":84},[49,171767,4182],{"class":59},[49,171769,10959],{"class":55},[49,171771,700],{"class":59},[49,171773,151167],{"class":55},[49,171775,171776],{"class":51,"line":109},[49,171777,2492],{"emptyLinePlaceholder":151},[49,171779,171780],{"class":51,"line":120},[49,171781,2492],{"emptyLinePlaceholder":151},[49,171783,171784,171786,171789],{"class":51,"line":135},[49,171785,32036],{"class":59},[49,171787,171788],{"class":2055}," sub",[49,171790,151156],{"class":55},[49,171792,171793,171795,171797,171799],{"class":51,"line":1306},[49,171794,4182],{"class":59},[49,171796,10959],{"class":55},[49,171798,751],{"class":59},[49,171800,151167],{"class":55},[14,171802,171803],{},"在另一个文件中导入：",[39,171805,171807],{"className":41,"code":171806,"language":43,"meta":44,"style":44},"import my_math\n\nprint(my_math.add(1, 2))\n",[46,171808,171809,171816,171820],{"__ignoreMap":44},[49,171810,171811,171813],{"class":51,"line":52},[49,171812,30481],{"class":59},[49,171814,171815],{"class":55}," my_math\n",[49,171817,171818],{"class":51,"line":84},[49,171819,2492],{"emptyLinePlaceholder":151},[49,171821,171822,171824,171827,171829,171831,171833],{"class":51,"line":109},[49,171823,30504],{"class":66},[49,171825,171826],{"class":55},"(my_math.add(",[49,171828,441],{"class":66},[49,171830,12525],{"class":55},[49,171832,301],{"class":66},[49,171834,30586],{"class":55},[166,171836,171838],{"id":171837},"_911-import导入","9.11 import导入",[195,171840,171842],{"id":171841},"_9111-导入模块","9.11.1 导入模块",[39,171844,171846],{"className":41,"code":171845,"language":43,"meta":44,"style":44},"import random\n\nprint(random.randint(1, 10))\n",[46,171847,171848,171854,171858],{"__ignoreMap":44},[49,171849,171850,171852],{"class":51,"line":52},[49,171851,30481],{"class":59},[49,171853,45417],{"class":55},[49,171855,171856],{"class":51,"line":84},[49,171857,2492],{"emptyLinePlaceholder":151},[49,171859,171860,171862,171865,171867,171869,171871],{"class":51,"line":109},[49,171861,30504],{"class":66},[49,171863,171864],{"class":55},"(random.randint(",[49,171866,441],{"class":66},[49,171868,12525],{"class":55},[49,171870,95],{"class":66},[49,171872,30586],{"class":55},[195,171874,171876],{"id":171875},"_9112-导入指定内容","9.11.2 导入指定内容",[39,171878,171880],{"className":41,"code":171879,"language":43,"meta":44,"style":44},"from random import randint\n\nprint(randint(1, 10))\n",[46,171881,171882,171893,171897],{"__ignoreMap":44},[49,171883,171884,171886,171888,171890],{"class":51,"line":52},[49,171885,30826],{"class":59},[49,171887,57885],{"class":55},[49,171889,30481],{"class":59},[49,171891,171892],{"class":55}," randint\n",[49,171894,171895],{"class":51,"line":84},[49,171896,2492],{"emptyLinePlaceholder":151},[49,171898,171899,171901,171904,171906,171908,171910],{"class":51,"line":109},[49,171900,30504],{"class":66},[49,171902,171903],{"class":55},"(randint(",[49,171905,441],{"class":66},[49,171907,12525],{"class":55},[49,171909,95],{"class":66},[49,171911,30586],{"class":55},[195,171913,171915],{"id":171914},"_9113-起别名","9.11.3 起别名",[39,171917,171919],{"className":41,"code":171918,"language":43,"meta":44,"style":44},"import random as rd\n\nprint(rd.randint(1, 10))\n",[46,171920,171921,171932,171936],{"__ignoreMap":44},[49,171922,171923,171925,171927,171929],{"class":51,"line":52},[49,171924,30481],{"class":59},[49,171926,57885],{"class":55},[49,171928,31472],{"class":59},[49,171930,171931],{"class":55}," rd\n",[49,171933,171934],{"class":51,"line":84},[49,171935,2492],{"emptyLinePlaceholder":151},[49,171937,171938,171940,171943,171945,171947,171949],{"class":51,"line":109},[49,171939,30504],{"class":66},[49,171941,171942],{"class":55},"(rd.randint(",[49,171944,441],{"class":66},[49,171946,12525],{"class":55},[49,171948,95],{"class":66},[49,171950,30586],{"class":55},[39,171952,171954],{"className":41,"code":171953,"language":43,"meta":44,"style":44},"from random import randint as rint\n\nprint(rint(1, 10))\n",[46,171955,171956,171972,171976],{"__ignoreMap":44},[49,171957,171958,171960,171962,171964,171967,171969],{"class":51,"line":52},[49,171959,30826],{"class":59},[49,171961,57885],{"class":55},[49,171963,30481],{"class":59},[49,171965,171966],{"class":55}," randint ",[49,171968,31472],{"class":59},[49,171970,171971],{"class":55}," rint\n",[49,171973,171974],{"class":51,"line":84},[49,171975,2492],{"emptyLinePlaceholder":151},[49,171977,171978,171980,171983,171985,171987,171989],{"class":51,"line":109},[49,171979,30504],{"class":66},[49,171981,171982],{"class":55},"(rint(",[49,171984,441],{"class":66},[49,171986,12525],{"class":55},[49,171988,95],{"class":66},[49,171990,30586],{"class":55},[195,171992,171994],{"id":171993},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[39,171996,171998],{"className":41,"code":171997,"language":43,"meta":44,"style":44},"from random import *\n",[46,171999,172000],{"__ignoreMap":44},[49,172001,172002,172004,172006,172008],{"class":51,"line":52},[49,172003,30826],{"class":59},[49,172005,57885],{"class":55},[49,172007,30481],{"class":59},[49,172009,172010],{"class":59}," *\n",[14,172012,172013],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[166,172015,172017],{"id":172016},"_912-常用内置模块","9.12 常用内置模块",[195,172019,172021],{"id":172020},"_9121-random","9.12.1 random",[39,172023,172025],{"className":41,"code":172024,"language":43,"meta":44,"style":44},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[46,172026,172027,172033,172037,172051,172070],{"__ignoreMap":44},[49,172028,172029,172031],{"class":51,"line":52},[49,172030,30481],{"class":59},[49,172032,45417],{"class":55},[49,172034,172035],{"class":51,"line":84},[49,172036,2492],{"emptyLinePlaceholder":151},[49,172038,172039,172041,172043,172045,172047,172049],{"class":51,"line":109},[49,172040,30504],{"class":66},[49,172042,171864],{"class":55},[49,172044,441],{"class":66},[49,172046,12525],{"class":55},[49,172048,95],{"class":66},[49,172050,30586],{"class":55},[49,172052,172053,172055,172058,172060,172062,172064,172066,172068],{"class":51,"line":120},[49,172054,30504],{"class":66},[49,172056,172057],{"class":55},"(random.choice([",[49,172059,149951],{"class":328},[49,172061,12525],{"class":55},[49,172063,150999],{"class":328},[49,172065,12525],{"class":55},[49,172067,159794],{"class":328},[49,172069,33232],{"class":55},[49,172071,172072,172074,172077,172079,172081,172083,172085,172087,172089,172091,172093,172095,172097,172099],{"class":51,"line":135},[49,172073,30504],{"class":66},[49,172075,172076],{"class":55},"(random.sample([",[49,172078,441],{"class":66},[49,172080,12525],{"class":55},[49,172082,301],{"class":66},[49,172084,12525],{"class":55},[49,172086,73],{"class":66},[49,172088,12525],{"class":55},[49,172090,515],{"class":66},[49,172092,12525],{"class":55},[49,172094,541],{"class":66},[49,172096,112265],{"class":55},[49,172098,301],{"class":66},[49,172100,30586],{"class":55},[195,172102,172104],{"id":172103},"_9122-time","9.12.2 time",[39,172106,172108],{"className":41,"code":172107,"language":43,"meta":44,"style":44},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[46,172109,172110,172116,172120,172127,172135],{"__ignoreMap":44},[49,172111,172112,172114],{"class":51,"line":52},[49,172113,30481],{"class":59},[49,172115,31918],{"class":55},[49,172117,172118],{"class":51,"line":84},[49,172119,2492],{"emptyLinePlaceholder":151},[49,172121,172122,172124],{"class":51,"line":109},[49,172123,30504],{"class":66},[49,172125,172126],{"class":55},"(time.time())\n",[49,172128,172129,172131,172133],{"class":51,"line":120},[49,172130,95134],{"class":55},[49,172132,441],{"class":66},[49,172134,81],{"class":55},[49,172136,172137,172139,172141,172144],{"class":51,"line":135},[49,172138,30504],{"class":66},[49,172140,228],{"class":55},[49,172142,172143],{"class":328},"\"1秒后执行\"",[49,172145,81],{"class":55},[195,172147,172149],{"id":172148},"_9123-datetime","9.12.3 datetime",[39,172151,172153],{"className":41,"code":172152,"language":43,"meta":44,"style":44},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[46,172154,172155,172167,172171,172181,172188],{"__ignoreMap":44},[49,172156,172157,172159,172162,172164],{"class":51,"line":52},[49,172158,30826],{"class":59},[49,172160,172161],{"class":55}," datetime ",[49,172163,30481],{"class":59},[49,172165,172166],{"class":55}," datetime\n",[49,172168,172169],{"class":51,"line":84},[49,172170,2492],{"emptyLinePlaceholder":151},[49,172172,172173,172176,172178],{"class":51,"line":109},[49,172174,172175],{"class":55},"now ",[49,172177,60],{"class":59},[49,172179,172180],{"class":55}," datetime.now()\n",[49,172182,172183,172185],{"class":51,"line":120},[49,172184,30504],{"class":66},[49,172186,172187],{"class":55},"(now)\n",[49,172189,172190,172192,172195,172198,172200,172203],{"class":51,"line":135},[49,172191,30504],{"class":66},[49,172193,172194],{"class":55},"(now.strftime(",[49,172196,172197],{"class":328},"\"%Y-%m-",[49,172199,156754],{"class":66},[49,172201,172202],{"class":328}," %H:%M:%S\"",[49,172204,30586],{"class":55},[195,172206,172208],{"id":172207},"_9124-os","9.12.4 os",[39,172210,172212],{"className":41,"code":172211,"language":43,"meta":44,"style":44},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[46,172213,172214,172220,172224,172231],{"__ignoreMap":44},[49,172215,172216,172218],{"class":51,"line":52},[49,172217,30481],{"class":59},[49,172219,45394],{"class":55},[49,172221,172222],{"class":51,"line":84},[49,172223,2492],{"emptyLinePlaceholder":151},[49,172225,172226,172228],{"class":51,"line":109},[49,172227,30504],{"class":66},[49,172229,172230],{"class":55},"(os.getcwd())\n",[49,172232,172233,172235,172238,172241],{"class":51,"line":120},[49,172234,30504],{"class":66},[49,172236,172237],{"class":55},"(os.listdir(",[49,172239,172240],{"class":328},"\".\"",[49,172242,30586],{"class":55},[195,172244,172246],{"id":172245},"_9125-sys","9.12.5 sys",[39,172248,172250],{"className":41,"code":172249,"language":43,"meta":44,"style":44},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[46,172251,172252,172259,172263,172270],{"__ignoreMap":44},[49,172253,172254,172256],{"class":51,"line":52},[49,172255,30481],{"class":59},[49,172257,172258],{"class":55}," sys\n",[49,172260,172261],{"class":51,"line":84},[49,172262,2492],{"emptyLinePlaceholder":151},[49,172264,172265,172267],{"class":51,"line":109},[49,172266,30504],{"class":66},[49,172268,172269],{"class":55},"(sys.version)\n",[49,172271,172272,172274],{"class":51,"line":120},[49,172273,30504],{"class":66},[49,172275,172276],{"class":55},"(sys.path)\n",[166,172278,172280,172281,172283,172284,474],{"id":172279},"_913-if-name-main","9.13 if ",[373,172282,79899],{}," == \"",[373,172285,102121],{},[14,172287,172288,172289,172292],{},"模块被直接运行和被导入时，",[46,172290,172291],{},"__name__"," 的值不同。",[14,172294,172295,172296,24709],{},"创建 ",[46,172297,172298],{},"my_module.py",[39,172300,172302],{"className":41,"code":172301,"language":43,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[46,172303,172304,172312,172322,172326,172330,172342],{"__ignoreMap":44},[49,172305,172306,172308,172310],{"class":51,"line":52},[49,172307,32036],{"class":59},[49,172309,5300],{"class":2055},[49,172311,151156],{"class":55},[49,172313,172314,172316,172318,172320],{"class":51,"line":84},[49,172315,4182],{"class":59},[49,172317,10959],{"class":55},[49,172319,700],{"class":59},[49,172321,151167],{"class":55},[49,172323,172324],{"class":51,"line":109},[49,172325,2492],{"emptyLinePlaceholder":151},[49,172327,172328],{"class":51,"line":120},[49,172329,2492],{"emptyLinePlaceholder":151},[49,172331,172332,172334,172336,172338,172340],{"class":51,"line":135},[49,172333,1623],{"class":59},[49,172335,31309],{"class":66},[49,172337,101622],{"class":59},[49,172339,101625],{"class":328},[49,172341,3831],{"class":55},[49,172343,172344,172346,172348,172350,172352,172354],{"class":51,"line":1306},[49,172345,31388],{"class":66},[49,172347,166663],{"class":55},[49,172349,441],{"class":66},[49,172351,12525],{"class":55},[49,172353,301],{"class":66},[49,172355,30586],{"class":55},[14,172357,172358],{},"作用：",[178,172360,172361,172364],{},[181,172362,172363],{},"直接运行该文件时，执行测试代码。",[181,172365,172366],{},"被其他文件导入时，不执行测试代码。",[14,172368,172369],{},"这是写模块时很常用的习惯。",[166,172371,172373],{"id":172372},"_914-包","9.14 包",[14,172375,172376,172377,172380],{},"包是包含 ",[46,172378,172379],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172382,172383],{},"目录结构：",[39,172385,172388],{"className":172386,"code":172387,"language":5278,"meta":44},[5276],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[46,172389,172387],{"__ignoreMap":44},[14,172391,172392],{},"导入：",[39,172394,172396],{"className":41,"code":172395,"language":43,"meta":44,"style":44},"from utils.file_utils import read_file\n",[46,172397,172398],{"__ignoreMap":44},[49,172399,172400,172402,172405,172407],{"class":51,"line":52},[49,172401,30826],{"class":59},[49,172403,172404],{"class":55}," utils.file_utils ",[49,172406,30481],{"class":59},[49,172408,172409],{"class":55}," read_file\n",[14,172411,172412,172414],{},[46,172413,172379],{}," 可以为空，也可以写包初始化逻辑。",[166,172416,172418],{"id":172417},"_915-第三方包","9.15 第三方包",[14,172420,172421,172422,172424],{},"第三方包通过 ",[46,172423,23921],{}," 安装。",[39,172426,172428],{"className":23912,"code":172427,"language":23914,"meta":44,"style":44},"pip install requests\n",[46,172429,172430],{"__ignoreMap":44},[49,172431,172432,172434,172436],{"class":51,"line":52},[49,172433,23921],{"class":2055},[49,172435,23924],{"class":328},[49,172437,146161],{"class":328},[14,172439,172440],{},"使用：",[39,172442,172444],{"className":41,"code":172443,"language":43,"meta":44,"style":44},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[46,172445,172446,172452,172456,172471],{"__ignoreMap":44},[49,172447,172448,172450],{"class":51,"line":52},[49,172449,30481],{"class":59},[49,172451,146161],{"class":55},[49,172453,172454],{"class":51,"line":84},[49,172455,2492],{"emptyLinePlaceholder":151},[49,172457,172458,172461,172463,172466,172469],{"class":51,"line":109},[49,172459,172460],{"class":55},"response ",[49,172462,60],{"class":59},[49,172464,172465],{"class":55}," requests.get(",[49,172467,172468],{"class":328},"\"https:\u002F\u002Fwww.example.com\"",[49,172470,81],{"class":55},[49,172472,172473,172475],{"class":51,"line":120},[49,172474,30504],{"class":66},[49,172476,172477],{"class":55},"(response.status_code)\n",[14,172479,172480],{},"查看已安装包：",[39,172482,172484],{"className":23912,"code":172483,"language":23914,"meta":44,"style":44},"pip list\n",[46,172485,172486],{"__ignoreMap":44},[49,172487,172488,172490],{"class":51,"line":52},[49,172489,23921],{"class":2055},[49,172491,119018],{"class":328},[14,172493,172494],{},"导出项目依赖：",[39,172496,172497],{"className":23912,"code":146356,"language":23914,"meta":44,"style":44},[46,172498,172499],{"__ignoreMap":44},[49,172500,172501,172503,172505,172507],{"class":51,"line":52},[49,172502,23921],{"class":2055},[49,172504,146365],{"class":328},[49,172506,26313],{"class":59},[49,172508,146370],{"class":328},[14,172510,172511],{},"安装项目依赖：",[39,172513,172514],{"className":23912,"code":146376,"language":23914,"meta":44,"style":44},[46,172515,172516],{"__ignoreMap":44},[49,172517,172518,172520,172522,172524],{"class":51,"line":52},[49,172519,23921],{"class":2055},[49,172521,23924],{"class":328},[49,172523,119702],{"class":66},[49,172525,146370],{"class":328},[166,172527,172529],{"id":172528},"_916-模块搜索路径","9.16 模块搜索路径",[14,172531,172532,172533,172536],{},"Python 导入模块时会在 ",[46,172534,172535],{},"sys.path"," 中查找。",[39,172538,172540],{"className":41,"code":172539,"language":43,"meta":44,"style":44},"import sys\n\nfor path in sys.path:\n    print(path)\n",[46,172541,172542,172548,172552,172564],{"__ignoreMap":44},[49,172543,172544,172546],{"class":51,"line":52},[49,172545,30481],{"class":59},[49,172547,172258],{"class":55},[49,172549,172550],{"class":51,"line":84},[49,172551,2492],{"emptyLinePlaceholder":151},[49,172553,172554,172556,172559,172561],{"class":51,"line":109},[49,172555,3117],{"class":59},[49,172557,172558],{"class":55}," path ",[49,172560,26134],{"class":59},[49,172562,172563],{"class":55}," sys.path:\n",[49,172565,172566,172568],{"class":51,"line":120},[49,172567,31388],{"class":66},[49,172569,169292],{"class":55},[14,172571,172572],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172574,157686],{},[39,172576,172579],{"className":172577,"code":172578,"language":5278,"meta":44},[5276],"random.py\njson.py\ntime.py\n",[46,172580,172578],{"__ignoreMap":44},[14,172582,172583],{},"这些文件名可能导致导入异常。",[166,172585,172587],{"id":172586},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172589,172383],{},[39,172591,172594],{"className":172592,"code":172593,"language":5278,"meta":44},[5276],"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",[46,172595,172593],{"__ignoreMap":44},[14,172597,172598,24709],{},[46,172599,172600],{},"utils\u002Ffile_utils.py",[39,172602,172604],{"className":41,"code":172603,"language":43,"meta":44,"style":44},"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",[46,172605,172606,172612,172622,172626,172630,172640,172650,172658,172664,172668,172695,172705,172709,172713,172723,172749],{"__ignoreMap":44},[49,172607,172608,172610],{"class":51,"line":52},[49,172609,30481],{"class":59},[49,172611,147154],{"class":55},[49,172613,172614,172616,172618,172620],{"class":51,"line":84},[49,172615,30826],{"class":59},[49,172617,108374],{"class":55},[49,172619,30481],{"class":59},[49,172621,108379],{"class":55},[49,172623,172624],{"class":51,"line":109},[49,172625,2492],{"emptyLinePlaceholder":151},[49,172627,172628],{"class":51,"line":120},[49,172629,2492],{"emptyLinePlaceholder":151},[49,172631,172632,172634,172637],{"class":51,"line":135},[49,172633,32036],{"class":59},[49,172635,172636],{"class":2055}," read_json",[49,172638,172639],{"class":55},"(path):\n",[49,172641,172642,172645,172647],{"class":51,"line":1306},[49,172643,172644],{"class":55},"    path ",[49,172646,60],{"class":59},[49,172648,172649],{"class":55}," Path(path)\n",[49,172651,172652,172654,172656],{"class":51,"line":1312},[49,172653,3193],{"class":59},[49,172655,39019],{"class":59},[49,172657,169373],{"class":55},[49,172659,172660,172662],{"class":51,"line":1403},[49,172661,14842],{"class":59},[49,172663,51927],{"class":55},[49,172665,172666],{"class":51,"line":1409},[49,172667,2492],{"emptyLinePlaceholder":151},[49,172669,172670,172672,172674,172677,172679,172681,172683,172685,172687,172689,172691,172693],{"class":51,"line":1421},[49,172671,34267],{"class":59},[49,172673,146854],{"class":66},[49,172675,172676],{"class":55},"(path, ",[49,172678,146864],{"class":328},[49,172680,12525],{"class":55},[49,172682,146869],{"class":126},[49,172684,60],{"class":59},[49,172686,146874],{"class":328},[49,172688,13804],{"class":55},[49,172690,31472],{"class":59},[49,172692,148216],{"class":126},[49,172694,3831],{"class":55},[49,172696,172697,172699,172701,172703],{"class":51,"line":1704},[49,172698,14842],{"class":59},[49,172700,148227],{"class":55},[49,172702,45443],{"class":126},[49,172704,81],{"class":55},[49,172706,172707],{"class":51,"line":1709},[49,172708,2492],{"emptyLinePlaceholder":151},[49,172710,172711],{"class":51,"line":1715},[49,172712,2492],{"emptyLinePlaceholder":151},[49,172714,172715,172717,172720],{"class":51,"line":1720},[49,172716,32036],{"class":59},[49,172718,172719],{"class":2055}," write_json",[49,172721,172722],{"class":55},"(path, data):\n",[49,172724,172725,172727,172729,172731,172733,172735,172737,172739,172741,172743,172745,172747],{"class":51,"line":1734},[49,172726,34267],{"class":59},[49,172728,146854],{"class":66},[49,172730,172676],{"class":55},[49,172732,152039],{"class":328},[49,172734,12525],{"class":55},[49,172736,146869],{"class":126},[49,172738,60],{"class":59},[49,172740,146874],{"class":328},[49,172742,13804],{"class":55},[49,172744,31472],{"class":59},[49,172746,148216],{"class":126},[49,172748,3831],{"class":55},[49,172750,172751,172754,172756,172758,172760,172762,172764,172766,172768,172770,172772],{"class":51,"line":1739},[49,172752,172753],{"class":55},"        json.dump(data, ",[49,172755,45443],{"class":126},[49,172757,12525],{"class":55},[49,172759,147200],{"class":126},[49,172761,60],{"class":59},[49,172763,34076],{"class":66},[49,172765,12525],{"class":55},[49,172767,152075],{"class":126},[49,172769,60],{"class":59},[49,172771,301],{"class":66},[49,172773,81],{"class":55},[14,172775,172776,24709],{},[46,172777,154670],{},[39,172779,172781],{"className":41,"code":172780,"language":43,"meta":44,"style":44},"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",[46,172782,172783,172794,172798,172811,172831],{"__ignoreMap":44},[49,172784,172785,172787,172789,172791],{"class":51,"line":52},[49,172786,30826],{"class":59},[49,172788,172404],{"class":55},[49,172790,30481],{"class":59},[49,172792,172793],{"class":55}," read_json, write_json\n",[49,172795,172796],{"class":51,"line":84},[49,172797,2492],{"emptyLinePlaceholder":151},[49,172799,172800,172802,172804,172807,172809],{"class":51,"line":109},[49,172801,159779],{"class":55},[49,172803,60],{"class":59},[49,172805,172806],{"class":55}," read_json(",[49,172808,151894],{"class":328},[49,172810,81],{"class":55},[49,172812,172813,172815,172817,172819,172821,172823,172825,172827,172829],{"class":51,"line":120},[49,172814,170597],{"class":55},[49,172816,62768],{"class":328},[49,172818,51526],{"class":55},[49,172820,149951],{"class":328},[49,172822,12525],{"class":55},[49,172824,151535],{"class":328},[49,172826,51526],{"class":55},[49,172828,1208],{"class":66},[49,172830,165215],{"class":55},[49,172832,172833,172836,172838],{"class":51,"line":135},[49,172834,172835],{"class":55},"write_json(",[49,172837,151894],{"class":328},[49,172839,172840],{"class":55},", students)\n",[166,172842,172844],{"id":172843},"_918-易错点","9.18 易错点",[178,172846,172847,172850,172855,172860,172863,172866],{},[181,172848,172849],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[181,172851,172852,172853,28476],{},"能指定异常类型就不要裸写 ",[46,172854,170957],{},[181,172856,172857,172859],{},[46,172858,171332],{}," 无论是否出错都会执行。",[181,172861,172862],{},"模块文件名不要和标准库重名。",[181,172864,172865],{},"导入自己写的模块时，要注意运行目录。",[181,172867,172868],{},"第三方包要安装到当前解释器或虚拟环境中。",[166,172870,172872],{"id":172871},"_919-本章练习","9.19 本章练习",[178,172874,172875,172878,172881,172887,172894],{},[181,172876,172877],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[181,172879,172880],{},"写函数读取文件，如果文件不存在则返回空字符串。",[181,172882,172295,172883,172886],{},[46,172884,172885],{},"math_utils.py","，实现加减乘除函数并导入使用。",[181,172888,172889,172890,172893],{},"创建一个 ",[46,172891,172892],{},"utils"," 包，把 JSON 读写函数放进去。",[181,172895,172896],{},"写一个程序，捕获除零异常和输入格式异常。",[143,172898,172899],{},"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":44,"searchDepth":84,"depth":84,"links":172901},[172902,172903,172904,172905,172906,172907,172908,172909,172910,172911,172912,172918,172925,172927,172928,172929,172930,172931,172932],{"id":170754,"depth":84,"text":170755},{"id":170882,"depth":84,"text":170883},{"id":170931,"depth":84,"text":170932},{"id":171080,"depth":84,"text":171081},{"id":171252,"depth":84,"text":171253},{"id":171321,"depth":84,"text":171322},{"id":171432,"depth":84,"text":171433},{"id":171558,"depth":84,"text":171559},{"id":171683,"depth":84,"text":171684},{"id":171738,"depth":84,"text":171739},{"id":171837,"depth":84,"text":171838,"children":172913},[172914,172915,172916,172917],{"id":171841,"depth":109,"text":171842},{"id":171875,"depth":109,"text":171876},{"id":171914,"depth":109,"text":171915},{"id":171993,"depth":109,"text":171994},{"id":172016,"depth":84,"text":172017,"children":172919},[172920,172921,172922,172923,172924],{"id":172020,"depth":109,"text":172021},{"id":172103,"depth":109,"text":172104},{"id":172148,"depth":109,"text":172149},{"id":172207,"depth":109,"text":172208},{"id":172245,"depth":109,"text":172246},{"id":172279,"depth":84,"text":172926},"9.13 if name == \"main\"",{"id":172372,"depth":84,"text":172373},{"id":172417,"depth":84,"text":172418},{"id":172528,"depth":84,"text":172529},{"id":172586,"depth":84,"text":172587},{"id":172843,"depth":84,"text":172844},{"id":172871,"depth":84,"text":172872},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170746,"description":148},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172939,"title":172940,"body":172941,"description":173104,"extension":149,"meta":173105,"navigation":151,"path":173106,"seo":173107,"stem":173108,"__hash__":173109},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172942,"toc":173099},[172943,172946,172949,172952,172963,172965,173039,173042,173045,173048,173051,173054,173057,173060,173063,173066,173069],[10,172944,172940],{"id":172945},"python教程",[14,172947,172948],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172950,172951],{},"建议学习环境：",[178,172953,172954,172957,172960],{},[181,172955,172956],{},"Python 版本：Python 3.10 及以上。",[181,172958,172959],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[181,172961,172962],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[166,172964,117141],{"id":117141},[178,172966,172967,172973,172979,172985,172991,172997,173003,173009,173015,173021,173027,173033],{},[181,172968,172969],{},[56,172970,172972],{"href":172971},".\u002Fch1-Python","Python环境与第一个程序",[181,172974,172975],{},[56,172976,172978],{"href":172977},".\u002Fch2","基础语法、变量与字符串",[181,172980,172981],{},[56,172982,172984],{"href":172983},".\u002Fch3","判断语句",[181,172986,172987],{},[56,172988,172990],{"href":172989},".\u002Fch4","循环语句",[181,172992,172993],{},[56,172994,172996],{"href":172995},".\u002Fch5","函数基础",[181,172998,172999],{},[56,173000,173002],{"href":173001},".\u002Fch6","数据容器",[181,173004,173005],{},[56,173006,173008],{"href":173007},".\u002Fch7","函数进阶",[181,173010,173011],{},[56,173012,173014],{"href":173013},".\u002Fch8","文件操作",[181,173016,173017],{},[56,173018,173020],{"href":173019},".\u002Fch9","异常、模块与包",[181,173022,173023],{},[56,173024,173026],{"href":173025},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[181,173028,173029],{},[56,173030,173032],{"href":173031},".\u002Fch11","面向对象基础",[181,173034,173035],{},[56,173036,173038],{"href":173037},".\u002Fch12","综合案例与复习路线",[166,173040,173041],{"id":173041},"学习路线",[14,173043,173044],{},"第一阶段：能运行程序。",[14,173046,173047],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173049,173050],{},"第二阶段：能组织数据。",[14,173052,173053],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173055,173056],{},"第三阶段：能封装逻辑。",[14,173058,173059],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173061,173062],{},"第四阶段：能做小项目。",[14,173064,173065],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[166,173067,173068],{"id":173068},"参考资料",[178,173070,173071,173078,173085,173092],{},[181,173072,173073,173074],{},"黑马程序员 Python 入门教程推荐：",[56,173075,173076],{"href":173076,"rel":173077},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23955],[181,173079,173080,173081],{},"Python 官方中文教程：",[56,173082,173083],{"href":173083,"rel":173084},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23955],[181,173086,173087,173088],{},"Python 标准库文档：",[56,173089,173090],{"href":173090,"rel":173091},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23955],[181,173093,173094,173095],{},"pyecharts 文档：",[56,173096,173097],{"href":173097,"rel":173098},"https:\u002F\u002Fpyecharts.org\u002F",[23955],{"title":44,"searchDepth":84,"depth":84,"links":173100},[173101,173102,173103],{"id":117141,"depth":84,"text":117141},{"id":173041,"depth":84,"text":173041},{"id":173068,"depth":84,"text":173068},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23468},"\u002Fwiki\u002F2024-10-10-python",{"title":172940,"description":173104},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331452352]